mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-01-12 20:28:32 +01:00
33 lines
1.4 KiB
Haskell
33 lines
1.4 KiB
Haskell
module Handler.StackageSdist
|
|
( getStackageSdistR
|
|
) where
|
|
|
|
import Import
|
|
import Stackage.Database
|
|
import Handler.Package (packagePage)
|
|
|
|
getStackageSdistR :: SnapName -> PackageNameVersion -> Handler TypedContent
|
|
getStackageSdistR _ (PNVTarball name version) = track "Handler.StackageSdist.getStackageSdistR" $ do
|
|
redirect $ concat
|
|
-- unfortunately using insecure HTTP for cabal's sake
|
|
[ "http://hackage.fpcomplete.com/package/"
|
|
, toPathPiece name
|
|
, "-"
|
|
, toPathPiece version
|
|
, ".tar.gz"
|
|
]
|
|
getStackageSdistR sname (PNVName pname) = track "Handler.StackageSdist.getStackageSdistR" $ do
|
|
version <- versionHelper sname pname
|
|
redirect $ SnapshotR sname $ StackageSdistR $ PNVNameVersion pname version
|
|
getStackageSdistR sname (PNVNameVersion pname version) = track "Handler.StackageSdist.getStackageSdistR" $ do
|
|
version' <- versionHelper sname pname
|
|
if version == version'
|
|
then packagePage (Just (sname, version)) pname >>= sendResponse
|
|
else redirect $ SnapshotR sname $ StackageSdistR $ PNVNameVersion pname version'
|
|
|
|
versionHelper :: SnapName -> PackageName -> Handler Version
|
|
versionHelper sname pname = do
|
|
Entity sid _ <- lookupSnapshot sname >>= maybe notFound return
|
|
Entity _ sp <- lookupSnapshotPackage sid (toPathPiece pname) >>= maybe notFound return
|
|
maybe notFound return $ fromPathPiece $ snapshotPackageVersion sp
|