Add a reset-password admin route

This commit is contained in:
Eike Kettner
2021-01-04 16:32:54 +01:00
parent 2a172ce720
commit 668abf2140
7 changed files with 120 additions and 15 deletions

View File

@ -44,6 +44,8 @@ trait OCollective[F[_]] {
newPass: Password
): F[PassChangeResult]
def resetPassword(accountId: AccountId): F[PassResetResult]
def getContacts(
collective: Ident,
query: Option[String],
@ -77,6 +79,15 @@ object OCollective {
type Classifier = RClassifierSetting.Classifier
val Classifier = RClassifierSetting.Classifier
sealed trait PassResetResult
object PassResetResult {
case class Success(newPw: Password) extends PassResetResult
case object NotFound extends PassResetResult
def success(np: Password): PassResetResult = Success(np)
def notFound: PassResetResult = NotFound
}
sealed trait PassChangeResult
object PassChangeResult {
case object UserNotFound extends PassChangeResult
@ -184,6 +195,17 @@ object OCollective {
def tagCloud(collective: Ident): F[List[TagCount]] =
store.transact(QCollective.tagCloud(collective))
def resetPassword(accountId: AccountId): F[PassResetResult] =
for {
newPass <- Password.generate[F]
n <- store.transact(
RUser.updatePassword(accountId, PasswordCrypt.crypt(newPass))
)
res =
if (n <= 0) PassResetResult.notFound
else PassResetResult.success(newPass)
} yield res
def changePassword(
accountId: AccountId,
current: Password,