mirror of
https://github.com/TheAnachronism/docspell.git
synced 2025-06-22 02:18:26 +00:00
Add a reset-password admin route
This commit is contained in:
@ -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,
|
||||
|
Reference in New Issue
Block a user