diff --git a/.guix/modules/datarekisteri-package.scm b/.guix/modules/datarekisteri-package.scm index 774c47b..faf5b57 100644 --- a/.guix/modules/datarekisteri-package.scm +++ b/.guix/modules/datarekisteri-package.scm @@ -30,6 +30,7 @@ ghc-base64 ghc-cryptonite ghc-datarekisteri-core + ghc-data-default ghc-echo ghc-email-validate ghc-esqueleto diff --git a/backend/datarekisteri-backend.cabal b/backend/datarekisteri-backend.cabal index 33fc992..a11e4f8 100644 --- a/backend/datarekisteri-backend.cabal +++ b/backend/datarekisteri-backend.cabal @@ -16,6 +16,7 @@ executable datarekisteri-backend base64, cryptonite, datarekisteri-core, + data-default, email-validate, esqueleto, http-types, diff --git a/backend/src/Datarekisteri/Backend.hs b/backend/src/Datarekisteri/Backend.hs index 16b24bf..6cf0f50 100644 --- a/backend/src/Datarekisteri/Backend.hs +++ b/backend/src/Datarekisteri/Backend.hs @@ -8,29 +8,37 @@ import Relude import "cryptonite" Crypto.Random (MonadRandom(..)) -import Control.Monad.Logger (runStderrLoggingT) +import qualified "base64" Data.ByteString.Base64 as B64 + import Control.Monad.Except (catchError) +import Control.Monad.Logger (runStderrLoggingT) +import Data.Default (def) import Data.Map (findWithDefault) import Data.Text (toLower, breakOn, stripPrefix) import Database.Persist.Postgresql (withPostgresqlConn, runSqlConn) -import Datarekisteri.Core.Types import Network.HTTP.Types.Status (status500, status401) import Network.Mail.Mime (renderSendMailCustom, Address(..)) import Network.Wai (Application) import Network.Wai.Handler.Warp (Port, run) -import Network.Wai.Middleware.Cors -import Network.Wai.Middleware.Gzip -import Datarekisteri.Backend.API -import qualified Datarekisteri.Backend.Sql as Sql -import Datarekisteri.Backend.Sql (MonadSql) -import Datarekisteri.Backend.Types -import Datarekisteri.Backend.Utils (checkPassword) +import Network.Wai.Middleware.Cors (CorsResourcePolicy(..), cors) +import Network.Wai.Middleware.Gzip (gzip) import System.Directory (findExecutable) import System.Process (callProcess) -import Options.Applicative hiding (Success, header) + import qualified Options.Applicative as O + +import Options.Applicative hiding (Success, header) import Web.Scotty.Trans hiding (readEither) -import qualified "base64" Data.ByteString.Base64 as B64 (decodeBase64) + +import Datarekisteri.Backend.Sql (MonadSql) +import Datarekisteri.Backend.Utils (checkPassword) + +import qualified Datarekisteri.Backend.Sql as Sql + +import Datarekisteri.Backend.API +import Datarekisteri.Backend.Types +import Datarekisteri.Core.Types + import Paths_datarekisteri_backend main :: IO () diff --git a/backend/src/Datarekisteri/Backend/API.hs b/backend/src/Datarekisteri/Backend/API.hs index 2f7f161..33dae46 100644 --- a/backend/src/Datarekisteri/Backend/API.hs +++ b/backend/src/Datarekisteri/Backend/API.hs @@ -8,9 +8,9 @@ {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PackageImports #-} {-# LANGUAGE RecordWildCards #-} +{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TupleSections #-} {-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE NoGeneralizedNewtypeDeriving #-} @@ -21,17 +21,20 @@ module Datarekisteri.Backend.API (coreApp, runApp, resolver) where import Relude hiding (Undefined, get) import "cryptonite" Crypto.Random (getRandomBytes, MonadRandom) +import qualified "base64" Data.ByteString.Base64 as B64 + import Control.Monad.Except (MonadError, throwError, catchError) import Data.Morpheus.Server (deriveApp, runApp) import Data.Morpheus.Server.Types (defaultRootResolver, RootResolver(..), Undefined) import Data.Morpheus.Types (Arg(..), GQLType, GQLError, App) -import Datarekisteri.Core.Types -import Datarekisteri.Backend.Email (sendVerificationEmail, sendApplicationAcceptedEmail, sendApplicationRejectedEmail) -import Datarekisteri.Backend.Types + +import qualified Data.Text as T + +import Datarekisteri.Backend.Email import Datarekisteri.Backend.DB +import Datarekisteri.Backend.Types import Datarekisteri.Backend.Utils -import qualified "base64" Data.ByteString.Base64 as B64 (encodeBase64) -import qualified Data.Text as T (null, chunksOf, intercalate) +import Datarekisteri.Core.Types -- General functions, maybe migrate to Utils or API.Utils diff --git a/backend/src/Datarekisteri/Backend/Email.hs b/backend/src/Datarekisteri/Backend/Email.hs index 046ab31..f20593a 100644 --- a/backend/src/Datarekisteri/Backend/Email.hs +++ b/backend/src/Datarekisteri/Backend/Email.hs @@ -2,11 +2,12 @@ module Datarekisteri.Backend.Email where -import Datarekisteri.Backend.Types import Data.Text (Text) import Data.Text.Lazy (fromStrict) +import Network.Mail.Mime (Address(..), simpleMail') + +import Datarekisteri.Backend.Types import Datarekisteri.Core.Types -import Network.Mail.Mime sendDatarekisteriEmail :: MonadEmail m => Text -> Text -> Email -> m () sendDatarekisteriEmail subject content to = do diff --git a/backend/src/Datarekisteri/Backend/Sql.hs b/backend/src/Datarekisteri/Backend/Sql.hs index 5715d42..6fe83ea 100644 --- a/backend/src/Datarekisteri/Backend/Sql.hs +++ b/backend/src/Datarekisteri/Backend/Sql.hs @@ -1,5 +1,5 @@ -{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE NoImplicitPrelude #-} @@ -7,14 +7,17 @@ module Datarekisteri.Backend.Sql where import Relude +import Data.Aeson (Result(..), fromJSON, toJSON) import Data.Time (nominalDay) -import Datarekisteri.Backend.Sql.Types +import Database.Persist (Entity(..), (=.)) + import Datarekisteri.Backend.Sql.Queries (SqlM, UserUpdate(..)) + import qualified Datarekisteri.Backend.Sql.Queries as Sql + +import Datarekisteri.Backend.Sql.Types import Datarekisteri.Backend.Types import Datarekisteri.Core.Types -import Database.Persist (Entity(..), (=.)) -import Data.Aeson (Result(..), fromJSON, toJSON) class Monad m => MonadSql m where runQuery :: SqlM a -> m a diff --git a/backend/src/Datarekisteri/Backend/Sql/Queries.hs b/backend/src/Datarekisteri/Backend/Sql/Queries.hs index d1e84bc..256f470 100644 --- a/backend/src/Datarekisteri/Backend/Sql/Queries.hs +++ b/backend/src/Datarekisteri/Backend/Sql/Queries.hs @@ -6,16 +6,19 @@ module Datarekisteri.Backend.Sql.Queries where -import Datarekisteri.Backend.Sql.Types -import Datarekisteri.Backend.Types (MemberData(..)) -import Datarekisteri.Core.Types -import Data.Text (Text) -import Database.Esqueleto.Experimental import Control.Monad.Logger (LoggingT) -import qualified Database.Persist as Persist (update, (=.)) -import qualified Database.Persist.Types as Persist (Update) -import Data.Maybe (listToMaybe) import Data.Aeson (fromJSON, toJSON, Result(..)) +import Data.Maybe (listToMaybe) +import Data.Text (Text) + +import qualified Database.Persist as Persist + +import Database.Esqueleto.Experimental + +import Datarekisteri.Backend.Types (MemberData(..)) + +import Datarekisteri.Backend.Sql.Types +import Datarekisteri.Core.Types type SqlM a = SqlPersistT (LoggingT IO) a diff --git a/backend/src/Datarekisteri/Backend/Sql/Types.hs b/backend/src/Datarekisteri/Backend/Sql/Types.hs index 14a068c..95ab18a 100644 --- a/backend/src/Datarekisteri/Backend/Sql/Types.hs +++ b/backend/src/Datarekisteri/Backend/Sql/Types.hs @@ -1,5 +1,6 @@ {-# LANGUAGE DataKinds #-} {-# LANGUAGE DerivingStrategies #-} +{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} @@ -10,16 +11,16 @@ {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} -{-# LANGUAGE FlexibleContexts #-} module Datarekisteri.Backend.Sql.Types where import Data.ByteString (ByteString) import Data.Text (Text) -import Database.Persist.TH (persistUpperCase, mkPersist, sqlSettings) import Database.Persist (Entity, Key, entityKey, PersistEntity) -import Database.Persist.Sql (fromSqlKey, toSqlKey) import Database.Persist.Postgresql.JSON (Value) +import Database.Persist.Sql (fromSqlKey, toSqlKey) +import Database.Persist.TH (persistUpperCase, mkPersist, sqlSettings) + import Datarekisteri.Core.Types import Datarekisteri.Backend.Types diff --git a/backend/src/Datarekisteri/Backend/Types.hs b/backend/src/Datarekisteri/Backend/Types.hs index 0d3bbb8..4c13841 100644 --- a/backend/src/Datarekisteri/Backend/Types.hs +++ b/backend/src/Datarekisteri/Backend/Types.hs @@ -18,8 +18,9 @@ module Datarekisteri.Backend.Types where import Relude +import "cryptonite" Crypto.Random (MonadRandom(..)) + import Control.Monad.Except (throwError) -import Datarekisteri.Core.Types import Data.Aeson (ToJSON(..), FromJSON(..)) import Data.ByteArray (ByteArray, ByteArrayAccess) import Data.Morpheus.App.Internal.Resolving (Resolver, LiftOperation) @@ -28,7 +29,8 @@ import Data.Time (getCurrentTime) import Database.Persist.Class (PersistField(..)) import Database.Persist.Sql (PersistFieldSql(..)) import Network.Mail.Mime (Mail, Address(..)) -import "cryptonite" Crypto.Random (MonadRandom(..)) + +import Datarekisteri.Core.Types forward :: Monad m => [a] -> m [Maybe a] forward = pure . map Just diff --git a/backend/src/Datarekisteri/Backend/Utils.hs b/backend/src/Datarekisteri/Backend/Utils.hs index e709d30..7a043bd 100644 --- a/backend/src/Datarekisteri/Backend/Utils.hs +++ b/backend/src/Datarekisteri/Backend/Utils.hs @@ -2,12 +2,15 @@ module Datarekisteri.Backend.Utils where +import "cryptonite" Crypto.Random (MonadRandom) + import Data.ByteArray.Encoding (convertToBase, Base(..)) import Data.ByteString (ByteString) -import Data.Text.Encoding (decodeUtf8, encodeUtf8) import Data.Text (Text) +import Data.Text.Encoding (decodeUtf8, encodeUtf8) + import qualified Crypto.KDF.BCrypt as Crypt (hashPassword, validatePassword) -import "cryptonite" Crypto.Random (MonadRandom) + import Datarekisteri.Backend.Types base32 :: ByteString -> Text diff --git a/backend/src/Datarekisteri/CLI.hs b/backend/src/Datarekisteri/CLI.hs index 04fcf7f..835a7cf 100644 --- a/backend/src/Datarekisteri/CLI.hs +++ b/backend/src/Datarekisteri/CLI.hs @@ -12,14 +12,18 @@ import "cryptonite" Crypto.Random (MonadRandom(..)) import Control.Monad.Logger (runStderrLoggingT) import Data.Aeson (toJSON) import Database.Persist.Postgresql (withPostgresqlConn, runSqlConn) -import qualified Datarekisteri.Backend.Sql.Queries as Sql +import System.IO.Echo (withoutInputEcho) + +import Options.Applicative + import Datarekisteri.Backend.Sql (MonadSql, runQuery) + +import qualified Datarekisteri.Backend.Sql.Queries as Sql + import Datarekisteri.Backend.Sql.Types import Datarekisteri.Backend.Types import Datarekisteri.Backend.Utils import Datarekisteri.Core.Types -import Options.Applicative -import System.IO.Echo (withoutInputEcho) main :: IO () main = do @@ -49,12 +53,11 @@ addUserMain AddUserOpts {..} = do , phoneNumber = addUserPhoneNumber } } - _ <- Sql.addEmail $ SqlEmail + void $ Sql.addEmail $ SqlEmail { sqlEmailUid = fromID userID , sqlEmailEmail = addUserEmail , sqlEmailVid = Nothing } - pure () gcEmailsMain :: CLIM () gcEmailsMain = do diff --git a/core/src/Datarekisteri/Core/Types.hs b/core/src/Datarekisteri/Core/Types.hs index ad386d9..80d5e87 100644 --- a/core/src/Datarekisteri/Core/Types.hs +++ b/core/src/Datarekisteri/Core/Types.hs @@ -1,14 +1,17 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} -{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE PackageImports #-} {-# LANGUAGE TypeFamilies #-} +{-# LANGUAGE NoImplicitPrelude #-} + module Datarekisteri.Core.Types where import Relude +import qualified "base64" Data.ByteString.Base64 as B64 + import Data.Aeson (ToJSON(..), FromJSON(..)) import Data.Char (isSpace) import Data.Morpheus.Server.Types (SCALAR) @@ -21,7 +24,6 @@ import Database.Persist.PersistValue (PersistValue(..)) import Database.Persist.Sql (PersistFieldSql(..)) import Text.Email.Validate (EmailAddress, toByteString, validate, emailAddress) -import qualified "base64" Data.ByteString.Base64 as B64 (encodeBase64, decodeBase64) import qualified Data.Text as T base64Encode :: ByteString -> Base64 diff --git a/frontend/src/Datarekisteri/Frontend.hs b/frontend/src/Datarekisteri/Frontend.hs index 5b5ce1e..0262815 100644 --- a/frontend/src/Datarekisteri/Frontend.hs +++ b/frontend/src/Datarekisteri/Frontend.hs @@ -1,26 +1,27 @@ -{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} +{-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE RankNTypes #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE RankNTypes #-} -{-# LANGUAGE FlexibleContexts #-} -{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE ViewPatterns #-} {-# LANGUAGE NoImplicitPrelude #-} import Relude hiding (get) -import Yesod -import Yesod.Auth +import System.Directory (createDirectoryIfMissing) +import Yesod.Static (static, Static) +import Yesod (mkYesodDispatch, warp) +import Yesod.Auth (getAuth) + +import Options.Applicative + import Datarekisteri.Frontend.Types import Datarekisteri.Frontend.Handlers -import Datarekisteri.Frontend.Auth () -import Yesod.Static (static, Static) -import Options.Applicative -import System.Directory (createDirectoryIfMissing) mkYesodDispatch "DataIdClient" resourcesDataIdClient diff --git a/frontend/src/Datarekisteri/Frontend/ApiRequests.hs b/frontend/src/Datarekisteri/Frontend/ApiRequests.hs index ba7c16a..681e573 100644 --- a/frontend/src/Datarekisteri/Frontend/ApiRequests.hs +++ b/frontend/src/Datarekisteri/Frontend/ApiRequests.hs @@ -13,9 +13,10 @@ module Datarekisteri.Frontend.ApiRequests where import Relude -import Data.Morpheus.Client -import Yesod hiding (Header) -import Yesod.Auth +import Data.Aeson (ToJSON, FromJSON) +import Data.Morpheus.Client (RequestType, RequestArgs, Args, GQLClientResult, FetchError(..), single, request, withHeaders) +import Yesod (HandlerFor, getYesod, liftHandler) +import Yesod.Auth (YesodAuth, AuthId, requireAuthId, maybeAuthId) type ClientTypeConstraint (a :: Type) = (RequestType a, ToJSON (RequestArgs a), FromJSON a) -- From Data.Morpheus.Client.Fetch.RequestType diff --git a/frontend/src/Datarekisteri/Frontend/Auth.hs b/frontend/src/Datarekisteri/Frontend/Auth.hs index 3224790..75f2144 100644 --- a/frontend/src/Datarekisteri/Frontend/Auth.hs +++ b/frontend/src/Datarekisteri/Frontend/Auth.hs @@ -1,12 +1,12 @@ -{-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE QuasiQuotes #-} -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeApplications #-} {-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE PackageImports #-} +{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} -{-# LANGUAGE PackageImports #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} @@ -14,11 +14,11 @@ module Datarekisteri.Frontend.Auth where import Relude -import Datarekisteri.Core.Types -import Data.Morpheus.Client +import qualified "base64" Data.ByteString.Base64 as B64 + import Yesod import Yesod.Auth -import qualified "base64" Data.ByteString.Base64 as B64 (encodeBase64) + import qualified Yesod.Auth.Message as Msg pluginName = "externalBasic" diff --git a/frontend/src/Datarekisteri/Frontend/FormFields.hs b/frontend/src/Datarekisteri/Frontend/FormFields.hs index e7af9c0..3833fbc 100644 --- a/frontend/src/Datarekisteri/Frontend/FormFields.hs +++ b/frontend/src/Datarekisteri/Frontend/FormFields.hs @@ -1,5 +1,5 @@ -{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE NoImplicitPrelude #-} @@ -8,8 +8,9 @@ module Datarekisteri.Frontend.FormFields where import Relude import Yesod -import Datarekisteri.Frontend.Types + import Datarekisteri.Core.Types +import Datarekisteri.Frontend.Types emailField :: Field Handler Email emailField = Field diff --git a/frontend/src/Datarekisteri/Frontend/Handlers.hs b/frontend/src/Datarekisteri/Frontend/Handlers.hs index 7b827fc..3421762 100644 --- a/frontend/src/Datarekisteri/Frontend/Handlers.hs +++ b/frontend/src/Datarekisteri/Frontend/Handlers.hs @@ -1,31 +1,33 @@ -{-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE DisambiguateRecordFields #-} +{-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} module Datarekisteri.Frontend.Handlers ( module Datarekisteri.Frontend.Handlers.Profile - , module Datarekisteri.Frontend.Handlers.Apply , module Datarekisteri.Frontend.Handlers.Applications - , module Datarekisteri.Frontend.Handlers.VerifyEmail + , module Datarekisteri.Frontend.Handlers.Apply , module Datarekisteri.Frontend.Handlers.Members + , module Datarekisteri.Frontend.Handlers.VerifyEmail , getHomeR ) where import Relude +import Yesod +import Yesod.Auth + import Datarekisteri.Frontend.Handlers.Profile import Datarekisteri.Frontend.Handlers.Apply import Datarekisteri.Frontend.Handlers.Applications import Datarekisteri.Frontend.Handlers.VerifyEmail import Datarekisteri.Frontend.Handlers.Members import Datarekisteri.Frontend.Types -import Yesod -import Yesod.Auth getHomeR :: Handler Html getHomeR = ifM (isJust <$> maybeAuthId) (redirect OwnProfileR) (redirect $ AuthR LoginR) diff --git a/frontend/src/Datarekisteri/Frontend/Handlers/Applications.hs b/frontend/src/Datarekisteri/Frontend/Handlers/Applications.hs index 3a09cea..d772162 100644 --- a/frontend/src/Datarekisteri/Frontend/Handlers/Applications.hs +++ b/frontend/src/Datarekisteri/Frontend/Handlers/Applications.hs @@ -1,12 +1,12 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} -{-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeApplications #-} {-# LANGUAGE RecordWildCards #-} -{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} @@ -14,15 +14,17 @@ module Datarekisteri.Frontend.Handlers.Applications where import Relude hiding (id) -import Datarekisteri.Frontend.ApiRequests -import Datarekisteri.Frontend.Types -import Data.Morpheus.Client -import Datarekisteri.Core.Types hiding (Applications) +import Data.Maybe (fromJust) +import Data.Time (Day) +import Data.Morpheus.Client (raw, declareLocalTypesInline) + import Yesod hiding (emailField) import Yesod.Auth + +import Datarekisteri.Core.Types hiding (Applications) +import Datarekisteri.Frontend.ApiRequests import Datarekisteri.Frontend.FormFields -import Data.Time (Day) -import Data.Maybe (fromJust) +import Datarekisteri.Frontend.Types declareLocalTypesInline "schema.gql" [raw| query Applications { diff --git a/frontend/src/Datarekisteri/Frontend/Handlers/Apply.hs b/frontend/src/Datarekisteri/Frontend/Handlers/Apply.hs index a3bbc2b..fc30256 100644 --- a/frontend/src/Datarekisteri/Frontend/Handlers/Apply.hs +++ b/frontend/src/Datarekisteri/Frontend/Handlers/Apply.hs @@ -1,12 +1,12 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} -{-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeApplications #-} {-# LANGUAGE RecordWildCards #-} -{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} @@ -14,14 +14,16 @@ module Datarekisteri.Frontend.Handlers.Apply where import Relude hiding (id) -import Datarekisteri.Frontend.ApiRequests -import Datarekisteri.Frontend.Types -import Data.Morpheus.Client -import Datarekisteri.Core.Types +import Data.Morpheus.Client (raw, declareLocalTypesInline) +import Data.Time (Day) + import Yesod hiding (emailField) import Yesod.Auth + +import Datarekisteri.Core.Types +import Datarekisteri.Frontend.ApiRequests import Datarekisteri.Frontend.FormFields -import Data.Time (Day) +import Datarekisteri.Frontend.Types declareLocalTypesInline "schema.gql" [raw| mutation Apply($name: String!, $nickname: String, $homeplace: String!, diff --git a/frontend/src/Datarekisteri/Frontend/Handlers/Members.hs b/frontend/src/Datarekisteri/Frontend/Handlers/Members.hs index 39f9735..961fdc6 100644 --- a/frontend/src/Datarekisteri/Frontend/Handlers/Members.hs +++ b/frontend/src/Datarekisteri/Frontend/Handlers/Members.hs @@ -12,12 +12,14 @@ module Datarekisteri.Frontend.Handlers.Members where import Relude hiding (id) -import Data.Morpheus.Client +import Data.Morpheus.Client (raw, declareLocalTypesInline) + +import Yesod +import Yesod.Auth + import Datarekisteri.Frontend.Types import Datarekisteri.Frontend.ApiRequests import Datarekisteri.Core.Types -import Yesod -import Yesod.Auth declareLocalTypesInline "schema.gql" [raw| query MembersPage { diff --git a/frontend/src/Datarekisteri/Frontend/Handlers/Profile.hs b/frontend/src/Datarekisteri/Frontend/Handlers/Profile.hs index 4c09eed..920387a 100644 --- a/frontend/src/Datarekisteri/Frontend/Handlers/Profile.hs +++ b/frontend/src/Datarekisteri/Frontend/Handlers/Profile.hs @@ -1,12 +1,12 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} -{-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeFamilies #-} -{-# LANGUAGE TypeApplications #-} {-# LANGUAGE RecordWildCards #-} -{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeApplications #-} +{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} @@ -14,14 +14,16 @@ module Datarekisteri.Frontend.Handlers.Profile where import Relude hiding (id) +import Data.Maybe (fromJust) +import Data.Morpheus.Client (raw, declareLocalTypesInline) + +import Yesod hiding (emailField) +import Yesod.Auth + +import Datarekisteri.Core.Types import Datarekisteri.Frontend.ApiRequests import Datarekisteri.Frontend.Types import Datarekisteri.Frontend.FormFields -import Data.Morpheus.Client -import Datarekisteri.Core.Types -import Data.Maybe (fromJust) -import Yesod hiding (emailField) -import Yesod.Auth declareLocalTypesInline "schema.gql" [raw| query ProfilePage($id: UserID) { diff --git a/frontend/src/Datarekisteri/Frontend/Handlers/VerifyEmail.hs b/frontend/src/Datarekisteri/Frontend/Handlers/VerifyEmail.hs index 5cd5c70..3840a92 100644 --- a/frontend/src/Datarekisteri/Frontend/Handlers/VerifyEmail.hs +++ b/frontend/src/Datarekisteri/Frontend/Handlers/VerifyEmail.hs @@ -1,11 +1,11 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DuplicateRecordFields #-} +{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} -{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeApplications #-} -{-# LANGUAGE FlexibleContexts #-} +{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE NoImplicitPrelude #-} @@ -13,12 +13,14 @@ module Datarekisteri.Frontend.Handlers.VerifyEmail where import Relude +import Data.Morpheus.Client (raw, declareLocalTypesInline) + +import Yesod +import Yesod.Auth + import Datarekisteri.Frontend.ApiRequests import Datarekisteri.Frontend.Types import Datarekisteri.Core.Types -import Data.Morpheus.Client -import Yesod -import Yesod.Auth declareLocalTypesInline "schema.gql" [raw| mutation VerifyEmail($secret: String!) { diff --git a/frontend/src/Datarekisteri/Frontend/Types.hs b/frontend/src/Datarekisteri/Frontend/Types.hs index 079e124..129d80f 100644 --- a/frontend/src/Datarekisteri/Frontend/Types.hs +++ b/frontend/src/Datarekisteri/Frontend/Types.hs @@ -16,20 +16,22 @@ module Datarekisteri.Frontend.Types where import Relude hiding (id) -import Relude.Extra.Foldable1 (maximum1) -import Yesod -import Yesod.Core.Handler (getCurrentRoute) -import Yesod.Default.Util (addStaticContentExternal) -import Yesod.Auth -import Yesod.Static -import Datarekisteri.Core.Types (UserID(..), Scope(..), Permission(..), readPermission) +import Data.Map (findWithDefault) +import Data.Morpheus.Client (raw, declareLocalTypesInline) import Data.Time (getCurrentTime) import Data.Time.Format.ISO8601 (iso8601Show) -import Datarekisteri.Frontend.Auth +import Relude.Extra.Foldable1 (maximum1) +import Yesod.Core.Handler (getCurrentRoute) +import Yesod.Default.Util (addStaticContentExternal) + +import Yesod +import Yesod.Auth +import Yesod.Static + +import Datarekisteri.Core.Types (UserID(..), Scope(..), Permission(..), readPermission) import Datarekisteri.Frontend.ApiRequests -import Data.Morpheus.Client -import Data.Map (findWithDefault) +import Datarekisteri.Frontend.Auth data DataIdClient = DataIdClient { getStatic :: Static