mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-01-14 13:18:30 +01:00
53 lines
1.8 KiB
Haskell
53 lines
1.8 KiB
Haskell
{-# LANGUAGE NoImplicitPrelude #-}
|
|
module Handler.StackageSdist
|
|
( getStackageSdistR
|
|
, pnvToSnapshotPackageInfo
|
|
) where
|
|
|
|
import Import
|
|
import Stackage.Database
|
|
import Handler.Package (packagePage)
|
|
|
|
handlePNVTarball :: PackageNameP -> VersionP -> Handler TypedContent
|
|
handlePNVTarball name version =
|
|
redirect $
|
|
concat -- TODO: Should this be switched to HTTPS by now?
|
|
-- unfortunately using insecure HTTP for cabal's sake
|
|
[ "http://hackage.fpcomplete.com/package/"
|
|
, toPathPiece name
|
|
, "-"
|
|
, toPathPiece version
|
|
, ".tar.gz"
|
|
]
|
|
|
|
|
|
getStackageSdistR
|
|
:: SnapName -> PackageNameVersion -> HandlerFor App TypedContent
|
|
getStackageSdistR sname pnv =
|
|
track "Handler.StackageSdist.getStackageSdistR" $
|
|
pnvToSnapshotPackageInfo sname pnv handlePNVTarball $ \isSameVersion spi ->
|
|
if isSameVersion
|
|
then packagePage (Just spi) (spiPackageName spi) >>= sendResponse
|
|
else redirect $
|
|
SnapshotR sname $
|
|
StackageSdistR $ PNVNameVersion (spiPackageName spi) (spiVersion spi)
|
|
|
|
|
|
pnvToSnapshotPackageInfo ::
|
|
SnapName
|
|
-> PackageNameVersion
|
|
-> (PackageNameP -> VersionP -> HandlerFor App b)
|
|
-> (Bool -> SnapshotPackageInfo -> HandlerFor App b)
|
|
-> HandlerFor App b
|
|
pnvToSnapshotPackageInfo sname pnv tarballHandler spiHandler =
|
|
case pnv of
|
|
PNVName pname -> spiHelper sname pname >>= spiHandler False
|
|
PNVNameVersion pname version ->
|
|
spiHelper sname pname >>= \spi -> spiHandler (version == spiVersion spi) spi
|
|
PNVTarball name version -> tarballHandler name version
|
|
|
|
|
|
spiHelper :: SnapName -> PackageNameP -> Handler SnapshotPackageInfo
|
|
spiHelper sname pname = getSnapshotPackageInfo sname pname >>= maybe notFound return
|
|
|