Automated alias settings on upload

This commit is contained in:
Michael Snoyman 2014-06-16 12:50:06 +03:00
parent df9ff9ca45
commit 673dad882d

View File

@ -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