stackage-server/Handler/StackageSdist.hs
2014-10-24 13:50:51 +03:00

36 lines
1.2 KiB
Haskell

module Handler.StackageSdist where
import Import
import Data.BlobStore
import Data.Hackage
getStackageSdistR :: PackageSetIdent -> PackageNameVersion -> Handler TypedContent
getStackageSdistR ident (PackageNameVersion name version) = do
addDownload (Just ident) Nothing name version
msrc1 <- storeRead (CustomSdist ident name version)
msrc <-
case msrc1 of
Just src -> return $ Just src
Nothing -> sourceHackageSdist name version
case msrc of
Nothing -> notFound
Just src -> do
addHeader "content-disposition" $ concat
[ "attachment; filename=\""
, toPathPiece name
, "-"
, toPathPiece version
, ".tar.gz"
]
respondSource "application/x-gzip" $ mapOutput (Chunk . toBuilder) src
addDownload :: Maybe PackageSetIdent
-> Maybe HackageView
-> PackageName
-> Version
-> Handler ()
addDownload downloadIdent downloadView downloadPackage downloadVersion = do
downloadUserAgent <- fmap decodeUtf8 <$> lookupHeader "user-agent"
downloadTimestamp <- liftIO getCurrentTime
runDB $ insert_ Download {..}