{-# 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|

Vahvista sähköpostiosoite ^{form VerifyEmailR codeEnctype formContent} |] verifyForm = renderDivs $ VerifyEmailArgs <$> areq textField "Vahvistuskoodi" Nothing