Some tweaks for automated doc uploads

This commit is contained in:
Michael Snoyman 2014-10-20 15:43:23 +03:00
parent 5bed251284
commit 4cbf301051
4 changed files with 20 additions and 14 deletions

View File

@ -142,7 +142,7 @@ instance Yesod App where
makeLogger = return . appLogger makeLogger = return . appLogger
maximumContentLength _ (Just UploadStackageR) = Just 50000000 maximumContentLength _ (Just UploadStackageR) = Just 50000000
maximumContentLength _ (Just UploadHaddockR{}) = Just 50000000 maximumContentLength _ (Just UploadHaddockR{}) = Just 100000000
maximumContentLength _ _ = Just 2000000 maximumContentLength _ _ = Just 2000000
-- How to run database actions. -- How to run database actions.

View File

@ -18,10 +18,10 @@ form = renderDivs $ areq fileField "tarball containing docs"
getUploadHaddockR, putUploadHaddockR :: PackageSetIdent -> Handler Html getUploadHaddockR, putUploadHaddockR :: PackageSetIdent -> Handler Html
getUploadHaddockR ident = do getUploadHaddockR ident = do
uid <- requireAuthId uid <- requireAuthIdOrToken
Entity sid Stackage {..} <- runDB $ getBy404 $ UniqueStackage ident Entity sid Stackage {..} <- runDB $ getBy404 $ UniqueStackage ident
unless (uid == stackageUser) $ permissionDenied "You do not control this snapshot" unless (uid == stackageUser) $ permissionDenied "You do not control this snapshot"
((res, widget), enctype) <- runFormPost form ((res, widget), enctype) <- runFormPostNoToken form
case res of case res of
FormSuccess fileInfo -> do FormSuccess fileInfo -> do
fileSource fileInfo $$ storeWrite (HaddockBundle ident) fileSource fileInfo $$ storeWrite (HaddockBundle ident)

View File

@ -32,17 +32,7 @@ getUploadStackageR = do
putUploadStackageR :: Handler TypedContent putUploadStackageR :: Handler TypedContent
putUploadStackageR = do putUploadStackageR = do
mtoken <- lookupHeader "authorization" uid <- requireAuthIdOrToken
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"]
@ -131,6 +121,7 @@ putUploadStackageR = do
else do else do
done "Error creating index file" ProfileR done "Error creating index file" ProfileR
addHeader "X-Stackage-Ident" $ toPathPiece ident
redirect $ ProgressR key redirect $ ProgressR key
where where
loop _ Tar.Done = return () loop _ Tar.Done = return ()

View File

@ -10,8 +10,23 @@ import Settings.Development as Import
import Settings.StaticFiles as Import import Settings.StaticFiles as Import
import Types as Import import Types as Import
import Yesod.Auth as Import import Yesod.Auth as Import
import Data.Slug (mkSlug)
getHaddockDir :: PackageSetIdent -> Handler FilePath getHaddockDir :: PackageSetIdent -> Handler FilePath
getHaddockDir ident = do getHaddockDir ident = do
master <- getYesod master <- getYesod
return $ haddockRootDir master </> fpFromText (toPathPiece ident) return $ haddockRootDir master </> fpFromText (toPathPiece ident)
requireAuthIdOrToken :: Handler UserId
requireAuthIdOrToken = do
mtoken <- lookupHeader "authorization"
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