63 lines
1.8 KiB
Haskell
63 lines
1.8 KiB
Haskell
{-# LANGUAGE DeriveGeneric #-}
|
|
{-# LANGUAGE DuplicateRecordFields #-}
|
|
{-# LANGUAGE FlexibleContexts #-}
|
|
{-# LANGUAGE OverloadedStrings #-}
|
|
{-# LANGUAGE QuasiQuotes #-}
|
|
{-# LANGUAGE TemplateHaskell #-}
|
|
{-# LANGUAGE TypeApplications #-}
|
|
{-# LANGUAGE TypeFamilies #-}
|
|
|
|
{-# LANGUAGE NoImplicitPrelude #-}
|
|
|
|
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.Frontend.Widgets
|
|
import Datarekisteri.Core.Types
|
|
|
|
declareLocalTypesInline "schema.gql" [raw|
|
|
mutation VerifyEmail($secret: String!) {
|
|
verifyEmail(secret: $secret)
|
|
}
|
|
|]
|
|
|
|
getVerifyEmailR = do
|
|
codeForm <- generateFormPost verifyForm
|
|
defaultLayout $ verifyEmailW codeForm
|
|
|
|
postVerifyEmailR :: Handler Html
|
|
postVerifyEmailR = do
|
|
((result, widget), enctype) <- runFormPost verifyForm
|
|
case result of
|
|
FormSuccess verify -> do
|
|
success <- apiRequest @VerifyEmail False verify
|
|
case success of
|
|
VerifyEmail True -> do
|
|
setMessage "Sähköpostiosoite vahvistettu"
|
|
user <- userID <$> requireAuthId
|
|
redirect $ ProfileR user
|
|
VerifyEmail False -> setMessage "Virheellinen vahvistuskoodi" >> redirect VerifyEmailR
|
|
_ -> defaultLayout $ verifyEmailW (widget, enctype)
|
|
|
|
verifyEmailW (codeWidget, codeEnctype) = do
|
|
setTitle "Vahvista sähköpostiosoite"
|
|
let formContent = [whamlet|
|
|
^{codeWidget}
|
|
^{submitButton "Vahvista"}
|
|
|]
|
|
[whamlet|
|
|
<h1>
|
|
Vahvista sähköpostiosoite
|
|
^{form VerifyEmailR codeEnctype formContent}
|
|
|]
|
|
|
|
verifyForm = renderDivs $ VerifyEmailArgs <$> areq textField "Vahvistuskoodi" Nothing
|