Fix build with current Guix
This commit is contained in:
parent
5b73e9d888
commit
dcd884b2a0
File diff suppressed because it is too large
Load Diff
|
|
@ -37,6 +37,7 @@ executable datarekisteri-backend
|
||||||
smtp-mail,
|
smtp-mail,
|
||||||
text,
|
text,
|
||||||
time,
|
time,
|
||||||
|
unliftio-core,
|
||||||
containers,
|
containers,
|
||||||
wai,
|
wai,
|
||||||
warp,
|
warp,
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import "cryptonite" Crypto.Random (MonadRandom(..))
|
||||||
import qualified "base64" Data.ByteString.Base64 as B64
|
import qualified "base64" Data.ByteString.Base64 as B64
|
||||||
|
|
||||||
import Control.Monad.Except (catchError)
|
import Control.Monad.Except (catchError)
|
||||||
|
import Control.Monad.IO.Unlift (MonadUnliftIO)
|
||||||
import Control.Monad.Logger (runStderrLoggingT)
|
import Control.Monad.Logger (runStderrLoggingT)
|
||||||
import Data.Default (def)
|
import Data.Default (def)
|
||||||
import Data.Map (findWithDefault)
|
import Data.Map (findWithDefault)
|
||||||
|
|
@ -76,7 +77,7 @@ runMigrations dbUrl = do
|
||||||
callProcess "dbmate" ["--url", toString dbUrl, "--migrations-dir", migrationsPath, "up"]
|
callProcess "dbmate" ["--url", toString dbUrl, "--migrations-dir", migrationsPath, "up"]
|
||||||
|
|
||||||
serverApp :: Config -> IO Application
|
serverApp :: Config -> IO Application
|
||||||
serverApp config = scottyAppT (runAPIM config) $ do
|
serverApp config = scottyAppT defaultOptions (runAPIM config) $ do
|
||||||
middleware $ gzip def
|
middleware $ gzip def
|
||||||
middleware $ cors $ const $ Just CorsResourcePolicy
|
middleware $ cors $ const $ Just CorsResourcePolicy
|
||||||
{ corsOrigins = Nothing -- all
|
{ corsOrigins = Nothing -- all
|
||||||
|
|
@ -109,7 +110,7 @@ parseBearer auth = do
|
||||||
guard $ toLower authType == "bearer"
|
guard $ toLower authType == "bearer"
|
||||||
pure $ BearerToken authData
|
pure $ BearerToken authData
|
||||||
|
|
||||||
authBearer :: Maybe BearerToken -> ActionT LText APIM a -> ActionT LText APIM a
|
authBearer :: Maybe BearerToken -> ActionT APIM a -> ActionT APIM a
|
||||||
authBearer Nothing m = m
|
authBearer Nothing m = m
|
||||||
authBearer (Just (BearerToken bearer)) m = do
|
authBearer (Just (BearerToken bearer)) m = do
|
||||||
let getUserPermissions = do
|
let getUserPermissions = do
|
||||||
|
|
@ -129,14 +130,14 @@ parseBasic txt = do
|
||||||
[authType, authData] <- words <$> txt
|
[authType, authData] <- words <$> txt
|
||||||
guard $ toLower authType == "basic"
|
guard $ toLower authType == "basic"
|
||||||
(email, password) <- rightToMaybe $
|
(email, password) <- rightToMaybe $
|
||||||
breakOn' ":" . decodeUtf8 <$> B64.decodeBase64 (encodeUtf8 authData)
|
breakOn' ":" . decodeUtf8 <$> B64.decodeBase64Untyped (encodeUtf8 authData)
|
||||||
emailAddress <- toEmail email
|
emailAddress <- toEmail email
|
||||||
pure $ BasicAuth {..}
|
pure $ BasicAuth {..}
|
||||||
where breakOn' x xs = let (fst, snd) = breakOn x xs
|
where breakOn' x xs = let (fst, snd) = breakOn x xs
|
||||||
in (fst, fromMaybe "" $ stripPrefix x snd)
|
in (fst, fromMaybe "" $ stripPrefix x snd)
|
||||||
|
|
||||||
|
|
||||||
authBasic :: Maybe BasicAuth -> ActionT LText APIM a -> ActionT LText APIM a
|
authBasic :: Maybe BasicAuth -> ActionT APIM a -> ActionT APIM a
|
||||||
authBasic Nothing m = m
|
authBasic Nothing m = m
|
||||||
authBasic (Just basic) m = do
|
authBasic (Just basic) m = do
|
||||||
DBUser {..} <- verifyBasic basic
|
DBUser {..} <- verifyBasic basic
|
||||||
|
|
@ -148,7 +149,7 @@ authBasic (Just basic) m = do
|
||||||
, statePermissions = permissions
|
, statePermissions = permissions
|
||||||
}
|
}
|
||||||
|
|
||||||
verifyBasic :: BasicAuth -> ActionT LText APIM (DBUser APIM)
|
verifyBasic :: BasicAuth -> ActionT APIM (DBUser APIM)
|
||||||
verifyBasic BasicAuth {..} = do
|
verifyBasic BasicAuth {..} = do
|
||||||
maybeUser <- lift $ dbGetUserByEmail emailAddress
|
maybeUser <- lift $ dbGetUserByEmail emailAddress
|
||||||
let unauthorized = do
|
let unauthorized = do
|
||||||
|
|
@ -162,7 +163,7 @@ verifyBasic BasicAuth {..} = do
|
||||||
pure user
|
pure user
|
||||||
|
|
||||||
newtype APIM a = APIM (ReaderT RequestState IO a)
|
newtype APIM a = APIM (ReaderT RequestState IO a)
|
||||||
deriving (Functor, Applicative, Monad, MonadIO, MonadReader RequestState)
|
deriving (Functor, Applicative, Monad, MonadIO, MonadReader RequestState, MonadUnliftIO)
|
||||||
|
|
||||||
data RequestState = RequestState
|
data RequestState = RequestState
|
||||||
{ stateCurrentUser :: Maybe UserID
|
{ stateCurrentUser :: Maybe UserID
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@ import Relude hiding (Undefined, get)
|
||||||
|
|
||||||
import "cryptonite" Crypto.Random (getRandomBytes, MonadRandom)
|
import "cryptonite" Crypto.Random (getRandomBytes, MonadRandom)
|
||||||
import qualified "base64" Data.ByteString.Base64 as B64
|
import qualified "base64" Data.ByteString.Base64 as B64
|
||||||
|
import qualified "base64" Data.Base64.Types as B64
|
||||||
|
|
||||||
import Control.Monad.Except (MonadError, throwError, catchError)
|
import Control.Monad.Except (MonadError, throwError, catchError)
|
||||||
import Data.Morpheus.Server (deriveApp, runApp)
|
import Data.Morpheus.Server (deriveApp, runApp)
|
||||||
|
|
@ -106,7 +107,7 @@ updateUser user args = do
|
||||||
newTokenArgsToData :: (MonadRandom m, MonadTime m, MonadPermissions m) =>
|
newTokenArgsToData :: (MonadRandom m, MonadTime m, MonadPermissions m) =>
|
||||||
NewTokenArgs -> UserID -> m NewTokenData
|
NewTokenArgs -> UserID -> m NewTokenData
|
||||||
newTokenArgsToData NewTokenArgs {..} user = do
|
newTokenArgsToData NewTokenArgs {..} user = do
|
||||||
tokenData <- B64.encodeBase64 <$> getRandomBytes 128
|
tokenData <- B64.extractBase64 . B64.encodeBase64 <$> getRandomBytes 128
|
||||||
issued <- currentTime
|
issued <- currentTime
|
||||||
permissions <- maybe currentPermissions pure =<< maybe (pure Nothing) toPermissions permissions
|
permissions <- maybe currentPermissions pure =<< maybe (pure Nothing) toPermissions permissions
|
||||||
let expires = Nothing
|
let expires = Nothing
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
(url "https://git.savannah.gnu.org/git/guix.git")
|
(url "https://git.savannah.gnu.org/git/guix.git")
|
||||||
(branch "master")
|
(branch "master")
|
||||||
(commit
|
(commit
|
||||||
"27ae140024b6d05506cdf0d9fd5b91c25466f295")
|
"86813d5779253bb50002d79ab791eeda5a8b4729")
|
||||||
(introduction
|
(introduction
|
||||||
(make-channel-introduction
|
(make-channel-introduction
|
||||||
"9edb3f66fd807b096b48283debdcddccfea34bad"
|
"9edb3f66fd807b096b48283debdcddccfea34bad"
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ module Datarekisteri.Core.Types
|
||||||
import Relude
|
import Relude
|
||||||
|
|
||||||
import qualified "base64" Data.ByteString.Base64 as B64
|
import qualified "base64" Data.ByteString.Base64 as B64
|
||||||
|
import qualified "base64" Data.Base64.Types as B64
|
||||||
|
|
||||||
import Data.Aeson (ToJSON(..), FromJSON(..))
|
import Data.Aeson (ToJSON(..), FromJSON(..))
|
||||||
import Data.Char (isSpace)
|
import Data.Char (isSpace)
|
||||||
|
|
@ -51,10 +52,10 @@ import Text.Email.Validate (EmailAddress, toByteString, validate, emailAddress)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
|
||||||
base64Encode :: ByteString -> Base64
|
base64Encode :: ByteString -> Base64
|
||||||
base64Encode = Base64 . B64.encodeBase64
|
base64Encode = Base64 . B64.extractBase64 . B64.encodeBase64
|
||||||
|
|
||||||
base64Decode :: Base64 -> Maybe ByteString
|
base64Decode :: Base64 -> Maybe ByteString
|
||||||
base64Decode (Base64 x) = either (const Nothing) Just $ B64.decodeBase64 $ encodeUtf8 x
|
base64Decode (Base64 x) = either (const Nothing) Just $ B64.decodeBase64Untyped $ encodeUtf8 x
|
||||||
|
|
||||||
toEmail :: Text -> Maybe Email
|
toEmail :: Text -> Maybe Email
|
||||||
toEmail = fmap Email . emailAddress . encodeUtf8
|
toEmail = fmap Email . emailAddress . encodeUtf8
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ module Datarekisteri.Frontend.Auth where
|
||||||
import Relude
|
import Relude
|
||||||
|
|
||||||
import qualified "base64" Data.ByteString.Base64 as B64
|
import qualified "base64" Data.ByteString.Base64 as B64
|
||||||
|
import qualified "base64" Data.Base64.Types as B64
|
||||||
|
|
||||||
import Yesod
|
import Yesod
|
||||||
import Yesod.Auth
|
import Yesod.Auth
|
||||||
|
|
@ -37,7 +38,7 @@ postLoginR authReq = do
|
||||||
<$> ireq textField "email" <*> ireq textField "password"
|
<$> ireq textField "email" <*> ireq textField "password"
|
||||||
case res of
|
case res of
|
||||||
FormSuccess auth -> do
|
FormSuccess auth -> do
|
||||||
maybeAuth <- liftHandler $ authReq $ ("Basic " <> ) $ B64.encodeBase64 $ encodeUtf8 auth
|
maybeAuth <- liftHandler $ authReq $ ("Basic " <> ) $ B64.extractBase64 $ B64.encodeBase64 $ encodeUtf8 auth
|
||||||
case maybeAuth of
|
case maybeAuth of
|
||||||
Nothing -> loginErrorMessageI LoginR Msg.InvalidEmailPass -- invalid creds
|
Nothing -> loginErrorMessageI LoginR Msg.InvalidEmailPass -- invalid creds
|
||||||
Just txt -> do
|
Just txt -> do
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue