mirror of
https://github.com/commercialhaskell/stackage-server.git
synced 2026-02-01 05:40:24 +01:00
Automated alias settings on upload
This commit is contained in:
parent
df9ff9ca45
commit
673dad882d
@ -18,6 +18,7 @@ import Control.Monad.Trans.Resource (unprotect, allocate)
|
|||||||
import System.Directory (removeFile, getTemporaryDirectory)
|
import System.Directory (removeFile, getTemporaryDirectory)
|
||||||
import System.Process (runProcess, waitForProcess)
|
import System.Process (runProcess, waitForProcess)
|
||||||
import System.Exit (ExitCode (ExitSuccess))
|
import System.Exit (ExitCode (ExitSuccess))
|
||||||
|
import Data.Slug (mkSlug)
|
||||||
|
|
||||||
fileKey :: Text
|
fileKey :: Text
|
||||||
fileKey = "stackage"
|
fileKey = "stackage"
|
||||||
@ -31,11 +32,23 @@ getUploadStackageR = do
|
|||||||
|
|
||||||
putUploadStackageR :: Handler TypedContent
|
putUploadStackageR :: Handler TypedContent
|
||||||
putUploadStackageR = do
|
putUploadStackageR = do
|
||||||
uid <- requireAuthId
|
mtoken <- lookupHeader "authorization"
|
||||||
|
uid <- case decodeUtf8 <$> mtoken of
|
||||||
|
Nothing -> requireAuthId
|
||||||
|
Just token -> do
|
||||||
|
case mkSlug token of
|
||||||
|
Nothing -> invalidArgs ["Invalid token: " ++ token]
|
||||||
|
Just token' -> do
|
||||||
|
muser <- runDB $ getBy $ UniqueToken token'
|
||||||
|
case muser of
|
||||||
|
Nothing -> invalidArgs ["Unknown token: " ++ token]
|
||||||
|
Just (Entity uid _) -> return uid
|
||||||
mfile <- lookupFile fileKey
|
mfile <- lookupFile fileKey
|
||||||
case mfile of
|
case mfile of
|
||||||
Nothing -> invalidArgs ["Upload missing"]
|
Nothing -> invalidArgs ["Upload missing"]
|
||||||
Just file -> do
|
Just file -> do
|
||||||
|
malias <- lookupPostParam "alias"
|
||||||
|
|
||||||
tempDir <- liftIO getTemporaryDirectory
|
tempDir <- liftIO getTemporaryDirectory
|
||||||
(releaseKey, (fp, handleOut)) <- allocate
|
(releaseKey, (fp, handleOut)) <- allocate
|
||||||
(openBinaryTempFile tempDir "upload-stackage.")
|
(openBinaryTempFile tempDir "upload-stackage.")
|
||||||
@ -59,6 +72,14 @@ putUploadStackageR = do
|
|||||||
update msg = updateHelper (ProgressWorking msg)
|
update msg = updateHelper (ProgressWorking msg)
|
||||||
done msg url = updateHelper (ProgressDone msg url)
|
done msg url = updateHelper (ProgressDone msg url)
|
||||||
onExc e = done ("Exception occurred: " ++ tshow e) ProfileR
|
onExc e = done ("Exception occurred: " ++ tshow e) ProfileR
|
||||||
|
setAlias = do
|
||||||
|
forM_ (malias >>= mkSlug) $ \alias -> runDB $ do
|
||||||
|
deleteWhere [AliasUser ==. uid, AliasName ==. alias]
|
||||||
|
insert_ Alias
|
||||||
|
{ aliasUser = uid
|
||||||
|
, aliasName = alias
|
||||||
|
, aliasTarget = ident
|
||||||
|
}
|
||||||
|
|
||||||
update "Starting"
|
update "Starting"
|
||||||
|
|
||||||
@ -94,6 +115,8 @@ putUploadStackageR = do
|
|||||||
sourceFile (fpFromString fp) $$ storeWrite (CabalIndex ident)
|
sourceFile (fpFromString fp) $$ storeWrite (CabalIndex ident)
|
||||||
runDB $ insert stackage
|
runDB $ insert stackage
|
||||||
|
|
||||||
|
setAlias
|
||||||
|
|
||||||
done "Stackage created" $ StackageHomeR ident
|
done "Stackage created" $ StackageHomeR ident
|
||||||
else do
|
else do
|
||||||
done "Error creating index file" ProfileR
|
done "Error creating index file" ProfileR
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user