-- SPDX-FileCopyrightText: 2022-2024 Sarah Vaupel , Steffen Jost -- -- SPDX-License-Identifier: AGPL-3.0-or-later {-# OPTIONS_GHC -fno-warn-unused-top-binds #-} module Utils.Users ( AddUserData(..) , addNewUser ) where import Import data AddUserData = AddUserData { audTitle :: Maybe Text , audFirstName :: Text , audSurname :: UserSurname , audDisplayName :: UserDisplayName , audDisplayEmail :: UserEmail , audMatriculation :: Maybe UserMatriculation , audSex :: Maybe Sex , audBirthday :: Maybe Day , audMobile :: Maybe Text , audTelephone :: Maybe Text , audFPersonalNumber :: Maybe Text , audFDepartment :: Maybe Text , audPostAddress :: Maybe StoredMarkup , audPrefersPostal :: Bool , audPinPassword :: Maybe Text , audEmail :: UserEmail , audIdent :: UserIdent , audPassword :: Maybe Text } -- | Adds a new user to database; no background jobs are scheduled, no notifications sent addNewUser :: AddUserData -> Handler (Maybe UserId) addNewUser AddUserData{..} = do now <- liftIO getCurrentTime UserDefaultConf{..} <- getsYesod $ view _appUserDefaults let newUser = User { userIdent = audIdent , userLastAuthentication = Nothing , userPasswordHash = audPassword , userMaxFavourites = userDefaultMaxFavourites , userMaxFavouriteTerms = userDefaultMaxFavouriteTerms , userTheme = userDefaultTheme , userDateTimeFormat = userDefaultDateTimeFormat , userDateFormat = userDefaultDateFormat , userTimeFormat = userDefaultTimeFormat , userDownloadFiles = userDefaultDownloadFiles , userWarningDays = userDefaultWarningDays , userShowSex = userDefaultShowSex , userExamOfficeGetSynced = userDefaultExamOfficeGetSynced , userExamOfficeGetLabels = userDefaultExamOfficeGetLabels , userNotificationSettings = def , userLanguages = Nothing , userCsvOptions = def { csvFormat = review csvPreset CsvPresetXlsx } , userTokensIssuedAfter = Nothing , userCreated = now , userEmail = audEmail , userDisplayName = audDisplayName , userDisplayEmail = audDisplayEmail , userFirstName = audFirstName , userSurname = audSurname , userTitle = audTitle , userSex = audSex , userBirthday = audBirthday , userMobile = audMobile , userTelephone = audTelephone , userCompanyPersonalNumber = audFPersonalNumber , userCompanyDepartment = audFDepartment , userPostAddress = audPostAddress , userPostLastUpdate = Nothing , userPrefersPostal = audPrefersPostal , userPinPassword = audPinPassword , userMatrikelnummer = audMatriculation , userLastSync = Nothing -- TODO: combine add user with external sync? } runDB $ insertUnique newUser