2016-02-18 01:43:23 +09:00
|
|
|
{- This file is part of Vervis.
|
|
|
|
-
|
2018-03-04 06:33:59 +09:00
|
|
|
- Written in 2016, 2018 by fr33domlover <fr33domlover@riseup.net>.
|
2016-02-18 01:43:23 +09:00
|
|
|
-
|
|
|
|
- ♡ Copying is an act of love. Please copy, reuse and share.
|
|
|
|
-
|
|
|
|
- The author(s) have dedicated all copyright and related and neighboring
|
|
|
|
- rights to this software to the public domain worldwide. This software is
|
|
|
|
- distributed without any warranty.
|
|
|
|
-
|
|
|
|
- You should have received a copy of the CC0 Public Domain Dedication along
|
|
|
|
- with this software. If not, see
|
|
|
|
- <http://creativecommons.org/publicdomain/zero/1.0/>.
|
|
|
|
-}
|
|
|
|
|
2016-02-23 17:45:03 +09:00
|
|
|
module Vervis.Handler.Person
|
2016-02-18 01:43:23 +09:00
|
|
|
( getPeopleR
|
2016-02-23 11:27:01 +09:00
|
|
|
, postPeopleR
|
2016-02-19 13:10:42 +09:00
|
|
|
, getPersonNewR
|
2016-02-18 01:43:23 +09:00
|
|
|
, getPersonR
|
|
|
|
)
|
|
|
|
where
|
|
|
|
|
2016-02-23 17:45:03 +09:00
|
|
|
import Vervis.Import hiding ((==.))
|
2016-02-18 01:43:23 +09:00
|
|
|
--import Prelude
|
|
|
|
|
2016-07-28 06:46:48 +09:00
|
|
|
import Database.Esqueleto hiding (isNothing, count)
|
2016-02-25 12:10:30 +09:00
|
|
|
import Vervis.Form.Person
|
2016-02-18 01:43:23 +09:00
|
|
|
--import Model
|
2016-03-07 09:39:07 +09:00
|
|
|
import Text.Blaze.Html (toHtml)
|
2018-03-04 06:33:59 +09:00
|
|
|
import Yesod.Auth.Account (newAccountR)
|
2016-02-18 01:43:23 +09:00
|
|
|
|
2016-05-24 05:46:54 +09:00
|
|
|
import Vervis.Model.Ident
|
2018-03-06 09:55:52 +09:00
|
|
|
import Vervis.Secure
|
2016-05-26 06:10:41 +09:00
|
|
|
import Vervis.Widget (avatarW)
|
2016-05-24 05:46:54 +09:00
|
|
|
|
2016-02-19 13:10:42 +09:00
|
|
|
-- | Get list of users
|
2016-02-18 01:43:23 +09:00
|
|
|
getPeopleR :: Handler Html
|
|
|
|
getPeopleR = do
|
|
|
|
people <- runDB $ select $ from $ \ (sharer, person) -> do
|
|
|
|
where_ $ sharer ^. SharerId ==. person ^. PersonIdent
|
|
|
|
orderBy [asc $ sharer ^. SharerIdent]
|
|
|
|
return $ sharer ^. SharerIdent
|
2016-05-24 05:46:54 +09:00
|
|
|
defaultLayout $(widgetFile "people")
|
2016-02-18 01:43:23 +09:00
|
|
|
|
2016-02-19 13:10:42 +09:00
|
|
|
-- | Create new user
|
2016-02-23 11:27:01 +09:00
|
|
|
postPeopleR :: Handler Html
|
2018-03-04 06:33:59 +09:00
|
|
|
postPeopleR = redirect $ AuthR newAccountR
|
|
|
|
{-
|
2016-07-28 06:46:48 +09:00
|
|
|
settings <- getsYesod appSettings
|
|
|
|
if appRegister settings
|
2016-04-20 01:03:27 +09:00
|
|
|
then do
|
2016-07-28 06:46:48 +09:00
|
|
|
room <- case appAccounts settings of
|
|
|
|
Nothing -> return True
|
|
|
|
Just cap -> do
|
|
|
|
current <- runDB $ count ([] :: [Filter Person])
|
|
|
|
return $ current < cap
|
|
|
|
if room
|
|
|
|
then do
|
|
|
|
((result, widget), enctype) <- runFormPost newPersonForm
|
|
|
|
case result of
|
|
|
|
FormSuccess np -> do
|
|
|
|
now <- liftIO getCurrentTime
|
|
|
|
runDB $ do
|
|
|
|
let sharer = Sharer
|
|
|
|
{ sharerIdent = npLogin np
|
|
|
|
, sharerName = npName np
|
|
|
|
, sharerCreated = now
|
|
|
|
}
|
|
|
|
sid <- insert sharer
|
|
|
|
let person = Person
|
|
|
|
{ personIdent = sid
|
|
|
|
, personLogin = shr2text $ npLogin np
|
|
|
|
, personHash = Nothing
|
|
|
|
, personEmail = npEmail np
|
|
|
|
}
|
|
|
|
person' <- setPassword (npPass np) person
|
|
|
|
insert_ person'
|
|
|
|
redirectUltDest HomeR
|
|
|
|
FormMissing -> do
|
|
|
|
setMessage "Field(s) missing"
|
|
|
|
defaultLayout $(widgetFile "person-new")
|
|
|
|
FormFailure _l -> do
|
|
|
|
setMessage
|
|
|
|
"User registration failed, see errors below"
|
|
|
|
defaultLayout $(widgetFile "person-new")
|
|
|
|
else do
|
|
|
|
setMessage "Maximal number of registered users reached"
|
|
|
|
redirect PeopleR
|
|
|
|
else do
|
|
|
|
setMessage "User registration disabled"
|
|
|
|
redirect PeopleR
|
2018-03-04 06:33:59 +09:00
|
|
|
-}
|
2016-02-19 13:10:42 +09:00
|
|
|
|
|
|
|
getPersonNewR :: Handler Html
|
2018-03-04 06:33:59 +09:00
|
|
|
getPersonNewR = redirect $ AuthR newAccountR
|
|
|
|
{-
|
2016-05-25 06:48:21 +09:00
|
|
|
regEnabled <- getsYesod $ appRegister . appSettings
|
|
|
|
if regEnabled
|
|
|
|
then do
|
|
|
|
((_result, widget), enctype) <- runFormPost newPersonForm
|
|
|
|
defaultLayout $(widgetFile "person-new")
|
|
|
|
else notFound
|
2018-03-04 06:33:59 +09:00
|
|
|
-}
|
2016-02-19 13:10:42 +09:00
|
|
|
|
2016-05-23 21:24:14 +09:00
|
|
|
getPersonR :: ShrIdent -> Handler Html
|
2016-02-18 01:43:23 +09:00
|
|
|
getPersonR ident = do
|
2016-03-03 17:35:29 +09:00
|
|
|
person <- runDB $ do
|
2016-05-24 05:46:54 +09:00
|
|
|
Entity sid _s <- getBy404 $ UniqueSharer ident
|
2016-03-03 17:35:29 +09:00
|
|
|
Entity _pid p <- getBy404 $ UniquePersonIdent sid
|
|
|
|
return p
|
2018-03-06 09:55:52 +09:00
|
|
|
secure <- getSecure
|
2016-05-23 21:24:14 +09:00
|
|
|
defaultLayout $(widgetFile "person")
|