Fix compile warnings after scala update

This commit is contained in:
eikek
2024-03-03 18:43:54 +01:00
parent 3e76385d08
commit 924aaf720e
79 changed files with 383 additions and 256 deletions

View File

@ -329,7 +329,7 @@ trait Conversions {
sourceName,
None,
validFileTypes,
false,
skipDuplicates = false,
Glob.all,
Nil,
None,
@ -641,82 +641,86 @@ trait Conversions {
def basicResult(r: SetValueResult): BasicResult =
r match {
case SetValueResult.FieldNotFound =>
BasicResult(false, "The given field is unknown")
BasicResult(success = false, "The given field is unknown")
case SetValueResult.ItemNotFound =>
BasicResult(false, "The given item is unknown")
BasicResult(success = false, "The given item is unknown")
case SetValueResult.ValueInvalid(msg) =>
BasicResult(false, s"The value is invalid: $msg")
BasicResult(success = false, s"The value is invalid: $msg")
case SetValueResult.Success =>
BasicResult(true, "Custom field value set successfully.")
BasicResult(success = true, "Custom field value set successfully.")
}
def basicResult(cr: JobCancelResult): BasicResult =
cr match {
case JobCancelResult.JobNotFound => BasicResult(false, "Job not found")
case JobCancelResult.JobNotFound => BasicResult(success = false, "Job not found")
case JobCancelResult.CancelRequested =>
BasicResult(true, "Cancel was requested at the job executor")
BasicResult(success = true, "Cancel was requested at the job executor")
case JobCancelResult.Removed =>
BasicResult(true, "The job has been removed from the queue.")
BasicResult(success = true, "The job has been removed from the queue.")
}
def idResult(ar: AddResult, id: Ident, successMsg: String): IdResult =
ar match {
case AddResult.Success => IdResult(true, successMsg, id)
case AddResult.EntityExists(msg) => IdResult(false, msg, Ident.unsafe(""))
case AddResult.Success => IdResult(success = true, successMsg, id)
case AddResult.EntityExists(msg) => IdResult(success = false, msg, Ident.unsafe(""))
case AddResult.Failure(ex) =>
IdResult(false, s"Internal error: ${ex.getMessage}", Ident.unsafe(""))
IdResult(success = false, s"Internal error: ${ex.getMessage}", Ident.unsafe(""))
}
def basicResult(ar: AddResult, successMsg: String): BasicResult =
ar match {
case AddResult.Success => BasicResult(true, successMsg)
case AddResult.EntityExists(msg) => BasicResult(false, msg)
case AddResult.Success => BasicResult(success = true, successMsg)
case AddResult.EntityExists(msg) => BasicResult(success = false, msg)
case AddResult.Failure(ex) =>
BasicResult(false, s"Internal error: ${ex.getMessage}")
BasicResult(success = false, s"Internal error: ${ex.getMessage}")
}
def basicResult(ar: UpdateResult, successMsg: String): BasicResult =
ar match {
case UpdateResult.Success => BasicResult(true, successMsg)
case UpdateResult.NotFound => BasicResult(false, "Not found")
case UpdateResult.Success => BasicResult(success = true, successMsg)
case UpdateResult.NotFound => BasicResult(success = false, "Not found")
case UpdateResult.Failure(ex) =>
BasicResult(false, s"Error: ${ex.getMessage}")
BasicResult(success = false, s"Error: ${ex.getMessage}")
}
def basicResult(ur: OUpload.UploadResult): BasicResult =
ur match {
case UploadResult.Success => BasicResult(true, "Files submitted.")
case UploadResult.NoFiles => BasicResult(false, "There were no files to submit.")
case UploadResult.NoSource => BasicResult(false, "The source id is not valid.")
case UploadResult.NoItem => BasicResult(false, "The item could not be found.")
case UploadResult.Success => BasicResult(success = true, "Files submitted.")
case UploadResult.NoFiles =>
BasicResult(success = false, "There were no files to submit.")
case UploadResult.NoSource =>
BasicResult(success = false, "The source id is not valid.")
case UploadResult.NoItem =>
BasicResult(success = false, "The item could not be found.")
case UploadResult.NoCollective =>
BasicResult(false, "The collective could not be found.")
BasicResult(success = false, "The collective could not be found.")
case UploadResult.StoreFailure(_) =>
BasicResult(
false,
success = false,
"There were errors storing a file! See the server logs for details."
)
}
def basicResult(cr: PassChangeResult): BasicResult =
cr match {
case PassChangeResult.Success => BasicResult(true, "Password changed.")
case PassChangeResult.Success => BasicResult(success = true, "Password changed.")
case PassChangeResult.UpdateFailed =>
BasicResult(false, "The database update failed.")
BasicResult(success = false, "The database update failed.")
case PassChangeResult.PasswordMismatch =>
BasicResult(false, "The current password is incorrect.")
case PassChangeResult.UserNotFound => BasicResult(false, "User not found.")
BasicResult(success = false, "The current password is incorrect.")
case PassChangeResult.UserNotFound =>
BasicResult(success = false, "User not found.")
case PassChangeResult.InvalidSource(source) =>
BasicResult(
false,
success = false,
s"User has invalid soure: $source. Passwords are managed elsewhere."
)
}
def basicResult(e: Either[Throwable, _], successMsg: String): BasicResult =
e match {
case Right(_) => BasicResult(true, successMsg)
case Left(ex) => BasicResult(false, ex.getMessage)
case Right(_) => BasicResult(success = true, successMsg)
case Left(ex) => BasicResult(success = false, ex.getMessage)
}
// MIME Type

View File

@ -38,7 +38,7 @@ object BinaryUtil {
if (matches) withResponseHeaders(dsl, NotModified())(data)
else makeByteResp(dsl)(data)
}
.getOrElse(NotFound(BasicResult(false, "Not found")))
.getOrElse(NotFound(BasicResult(success = false, "Not found")))
}
def respondHead[F[_]: Async](dsl: Http4sDsl[F])(
@ -48,7 +48,7 @@ object BinaryUtil {
fileData
.map(data => withResponseHeaders(dsl, Ok())(data))
.getOrElse(NotFound(BasicResult(false, "Not found")))
.getOrElse(NotFound(BasicResult(success = false, "Not found")))
}
def respondPreview[F[_]: Async](dsl: Http4sDsl[F], req: Request[F])(
@ -56,7 +56,7 @@ object BinaryUtil {
): F[Response[F]] = {
import dsl._
def notFound =
NotFound(BasicResult(false, "Not found"))
NotFound(BasicResult(success = false, "Not found"))
QP.WithFallback.unapply(req.multiParams) match {
case Some(bool) =>
@ -75,7 +75,7 @@ object BinaryUtil {
)
case None =>
BadRequest(BasicResult(false, "Invalid query parameter 'withFallback'"))
BadRequest(BasicResult(success = false, "Invalid query parameter 'withFallback'"))
}
}
@ -85,7 +85,7 @@ object BinaryUtil {
import dsl._
fileData
.map(data => withResponseHeaders(dsl, Ok())(data))
.getOrElse(NotFound(BasicResult(false, "Not found")))
.getOrElse(NotFound(BasicResult(success = false, "Not found")))
}
def withResponseHeaders[F[_]: Sync](dsl: Http4sDsl[F], resp: F[Response[F]])(

View File

@ -33,10 +33,10 @@ object ThrowableResponseMapper {
def toResponse(ex: Throwable): F[Response[F]] =
ex match {
case _: IllegalArgumentException =>
BadRequest(BasicResult(false, ex.getMessage))
BadRequest(BasicResult(success = false, ex.getMessage))
case _ =>
InternalServerError(BasicResult(false, ex.getMessage))
InternalServerError(BasicResult(success = false, ex.getMessage))
}
}
}

View File

@ -52,7 +52,7 @@ object AddonArchiveRoutes extends AddonValidationSupport {
case req @ POST -> Root :? Sync(sync) =>
def create(r: Option[RAddonArchive]) =
IdResult(
true,
success = true,
r.fold("Addon submitted for installation")(r =>
s"Addon installed: ${r.id.id}"
),
@ -77,7 +77,7 @@ object AddonArchiveRoutes extends AddonValidationSupport {
case PUT -> Root / Ident(id) :? Sync(sync) =>
def create(r: Option[AddonMeta]) =
BasicResult(
true,
success = true,
r.fold("Addon updated in background")(m =>
s"Addon updated: ${m.nameAndVersion}"
)
@ -99,8 +99,8 @@ object AddonArchiveRoutes extends AddonValidationSupport {
for {
flag <- backend.addons.deleteAddon(token.account.collectiveId, id)
resp <-
if (flag) Ok(BasicResult(true, "Addon deleted"))
else NotFound(BasicResult(false, "Addon not found"))
if (flag) Ok(BasicResult(success = true, "Addon deleted"))
else NotFound(BasicResult(success = false, "Addon not found"))
} yield resp
}
}
@ -112,11 +112,11 @@ object AddonArchiveRoutes extends AddonValidationSupport {
import dsl._
def failWith(msg: String): F[Response[F]] =
Ok(IdResult(false, msg, Ident.unsafe("")))
Ok(IdResult(success = false, msg, Ident.unsafe("")))
e match {
case AddonValidationError.AddonNotFound =>
NotFound(BasicResult(false, "Addon not found."))
NotFound(BasicResult(success = false, "Addon not found."))
case _ =>
failWith(validationErrorToMessage(e))

View File

@ -35,5 +35,5 @@ object AddonRoutes {
"run" -> AddonRunRoutes(backend, token)
)
else
Responses.notFoundRoute(BasicResult(false, "Addons disabled"))
Responses.notFoundRoute(BasicResult(success = false, "Addons disabled"))
}

View File

@ -43,8 +43,8 @@ object AddonRunConfigRoutes {
.map(_.leftMap(_.message))
)
resp <- res.fold(
msg => Ok(BasicResult(false, msg)),
id => Ok(IdResult(true, s"Addon run config added", id))
msg => Ok(BasicResult(success = false, msg)),
id => Ok(IdResult(success = true, s"Addon run config added", id))
)
} yield resp
@ -58,8 +58,8 @@ object AddonRunConfigRoutes {
.map(_.leftMap(_.message))
)
resp <- res.fold(
msg => Ok(BasicResult(false, msg)),
id => Ok(IdResult(true, s"Addon run config updated", id))
msg => Ok(BasicResult(success = false, msg)),
id => Ok(IdResult(success = true, s"Addon run config updated", id))
)
} yield resp
@ -67,8 +67,8 @@ object AddonRunConfigRoutes {
for {
flag <- backend.addons.deleteAddonRunConfig(token.account.collectiveId, id)
resp <-
if (flag) Ok(BasicResult(true, "Addon task deleted"))
else NotFound(BasicResult(false, "Addon task not found"))
if (flag) Ok(BasicResult(success = true, "Addon task deleted"))
else NotFound(BasicResult(success = false, "Addon task not found"))
} yield resp
}
}

View File

@ -35,7 +35,7 @@ object AddonRunRoutes {
input.addonRunConfigIds.toSet,
UserTaskScope(token.account)
)
resp <- Ok(BasicResult(true, "Job for running addons submitted."))
resp <- Ok(BasicResult(success = true, "Job for running addons submitted."))
} yield resp
}
}

View File

@ -66,7 +66,7 @@ object AttachmentRoutes {
resp <-
fileData
.map(data => withResponseHeaders(Ok())(data))
.getOrElse(NotFound(BasicResult(false, "Not found")))
.getOrElse(NotFound(BasicResult(success = false, "Not found")))
} yield resp
case req @ GET -> Root / Ident(id) / "original" =>
@ -83,7 +83,7 @@ object AttachmentRoutes {
if (matches) withResponseHeaders(NotModified())(data)
else makeByteResp(data)
}
.getOrElse(NotFound(BasicResult(false, "Not found")))
.getOrElse(NotFound(BasicResult(success = false, "Not found")))
} yield resp
case HEAD -> Root / Ident(id) / "archive" =>
@ -93,7 +93,7 @@ object AttachmentRoutes {
resp <-
fileData
.map(data => withResponseHeaders(Ok())(data))
.getOrElse(NotFound(BasicResult(false, "Not found")))
.getOrElse(NotFound(BasicResult(success = false, "Not found")))
} yield resp
case req @ GET -> Root / Ident(id) / "archive" =>
@ -108,7 +108,7 @@ object AttachmentRoutes {
if (matches) withResponseHeaders(NotModified())(data)
else makeByteResp(data)
}
.getOrElse(NotFound(BasicResult(false, "Not found")))
.getOrElse(NotFound(BasicResult(success = false, "Not found")))
} yield resp
case req @ GET -> Root / Ident(id) / "preview" =>
@ -148,7 +148,9 @@ object AttachmentRoutes {
for {
rm <- backend.itemSearch.findAttachmentMeta(id, user.account.collectiveId)
md = rm.map(Conversions.mkAttachmentMeta)
resp <- md.map(Ok(_)).getOrElse(NotFound(BasicResult(false, "Not found.")))
resp <- md
.map(Ok(_))
.getOrElse(NotFound(BasicResult(success = false, "Not found.")))
} yield resp
case req @ POST -> Root / Ident(id) / "name" =>
@ -169,8 +171,11 @@ object AttachmentRoutes {
backend.attachment
.setExtractedText(user.account.collectiveId, itemId, id, newText)
)
resp <- OptionT.liftF(Ok(BasicResult(true, "Extracted text updated.")))
} yield resp).getOrElseF(NotFound(BasicResult(false, "Attachment not found")))
resp <- OptionT.liftF(
Ok(BasicResult(success = true, "Extracted text updated."))
)
} yield resp)
.getOrElseF(NotFound(BasicResult(success = false, "Attachment not found")))
case DELETE -> Root / Ident(id) / "extracted-text" =>
(for {
@ -181,7 +186,9 @@ object AttachmentRoutes {
backend.attachment
.setExtractedText(user.account.collectiveId, itemId, id, "".pure[F])
)
resp <- OptionT.liftF(Ok(BasicResult(true, "Extracted text cleared.")))
resp <- OptionT.liftF(
Ok(BasicResult(success = true, "Extracted text cleared."))
)
} yield resp).getOrElseF(NotFound())
case GET -> Root / Ident(id) / "extracted-text" =>
@ -190,14 +197,15 @@ object AttachmentRoutes {
backend.itemSearch.findAttachmentMeta(id, user.account.collectiveId)
)
resp <- OptionT.liftF(Ok(OptionalText(meta.content)))
} yield resp).getOrElseF(NotFound(BasicResult(false, "Attachment not found")))
} yield resp)
.getOrElseF(NotFound(BasicResult(success = false, "Attachment not found")))
case DELETE -> Root / Ident(id) =>
for {
n <- backend.item.deleteAttachment(id, user.account.collectiveId)
res =
if (n == 0) BasicResult(false, "Attachment not found")
else BasicResult(true, "Attachment deleted.")
if (n == 0) BasicResult(success = false, "Attachment not found")
else BasicResult(success = true, "Attachment deleted.")
resp <- Ok(res)
} yield resp
}

View File

@ -40,9 +40,9 @@ object CalEventCheckRoutes {
val next = ev
.nextElapses(now.toUtcDateTime, 2)
.map(Timestamp.atUtc)
CalEventCheckResult(true, "Valid.", ev.some, next)
CalEventCheckResult(success = true, "Valid.", ev.some, next)
case Left(err) =>
CalEventCheckResult(false, err, None, Nil)
CalEventCheckResult(success = false, err, None, Nil)
}
}
}

View File

@ -66,7 +66,7 @@ object ClientSettingsRoutes {
for {
data <- req.as[Json]
_ <- backend.clientSettings.saveUser(clientId, user.account.userId, data)
res <- Ok(BasicResult(true, "Settings stored"))
res <- Ok(BasicResult(success = true, "Settings stored"))
} yield res
case GET -> Root / "user" / Ident(clientId) =>
@ -97,7 +97,7 @@ object ClientSettingsRoutes {
user.account.collectiveId,
data
)
res <- Ok(BasicResult(true, "Settings stored"))
res <- Ok(BasicResult(success = true, "Settings stored"))
} yield res
case GET -> Root / "collective" / Ident(clientId) =>

View File

@ -118,7 +118,7 @@ object CollectiveRoutes {
case POST -> Root / "classifier" / "startonce" =>
for {
_ <- backend.collective.startLearnClassifier(user.account.collectiveId)
resp <- Ok(BasicResult(true, "Task submitted"))
resp <- Ok(BasicResult(success = true, "Task submitted"))
} yield resp
case req @ POST -> Root / "emptytrash" / "startonce" =>
@ -127,7 +127,7 @@ object CollectiveRoutes {
_ <- backend.collective.startEmptyTrash(
EmptyTrashArgs(user.account.collectiveId, data.minAge)
)
resp <- Ok(BasicResult(true, "Task submitted"))
resp <- Ok(BasicResult(success = true, "Task submitted"))
} yield resp
}
}

View File

@ -56,7 +56,7 @@ object CustomFieldRoutes {
(for {
field <- OptionT(backend.customFields.findById(user.account.collectiveId, id))
res <- OptionT.liftF(Ok(convertField(field)))
} yield res).getOrElseF(NotFound(BasicResult(false, "Not found")))
} yield res).getOrElseF(NotFound(BasicResult(success = false, "Not found")))
case req @ PUT -> Root / Ident(id) =>
for {

View File

@ -126,7 +126,7 @@ object DownloadAllRoutes {
case DELETE -> Root / "file" / Ident(id) =>
for {
_ <- backend.downloadAll.deleteFile(id)
resp <- Ok(BasicResult(true, "File deleted."))
resp <- Ok(BasicResult(success = true, "File deleted."))
} yield resp
case PUT -> Root / "cancel" / Ident(id) =>

View File

@ -118,12 +118,12 @@ object FolderRoutes {
private def mkFolderChangeResult(r: OFolder.FolderChangeResult): BasicResult =
r match {
case OFolder.FolderChangeResult.Success =>
BasicResult(true, "Successfully changed folder.")
BasicResult(success = true, "Successfully changed folder.")
case OFolder.FolderChangeResult.NotFound =>
BasicResult(false, "Folder or user not found.")
BasicResult(success = false, "Folder or user not found.")
case OFolder.FolderChangeResult.Forbidden =>
BasicResult(false, "Not allowed to edit folder.")
BasicResult(success = false, "Not allowed to edit folder.")
case OFolder.FolderChangeResult.Exists =>
BasicResult(false, "The member already exists.")
BasicResult(success = false, "The member already exists.")
}
}

View File

@ -37,7 +37,7 @@ class ItemLinkRoutes[F[_]: Async](account: AccountInfo, backend: OItemLink[F])
case DELETE -> Root / Ident(target) / Ident(id) =>
for {
_ <- backend.removeAll(account.collectiveId, target, NonEmptyList.of(id))
resp <- Ok(BasicResult(true, "Related items removed"))
resp <- Ok(BasicResult(success = true, "Related items removed"))
} yield resp
case req @ POST -> Root / "addAll" =>
@ -58,19 +58,21 @@ class ItemLinkRoutes[F[_]: Async](account: AccountInfo, backend: OItemLink[F])
_ <- related
.map(backend.removeAll(account.collectiveId, input.item, _))
.getOrElse(
BadRequest(BasicResult(false, "List of related items must not be empty"))
BadRequest(
BasicResult(success = false, "List of related items must not be empty")
)
)
resp <- Ok(BasicResult(true, "Related items removed"))
resp <- Ok(BasicResult(success = true, "Related items removed"))
} yield resp
}
private def convertResult(r: Option[LinkResult]): BasicResult =
r match {
case Some(LinkResult.Success) => BasicResult(true, "Related items added")
case Some(LinkResult.Success) => BasicResult(success = true, "Related items added")
case Some(LinkResult.LinkTargetItemError) =>
BasicResult(false, "Items cannot be related to itself.")
BasicResult(success = false, "Items cannot be related to itself.")
case None =>
BasicResult(false, "List of related items must not be empty")
BasicResult(success = false, "List of related items must not be empty")
}
}

View File

@ -49,7 +49,7 @@ object ItemRoutes {
resp <-
result
.map(r => Ok(r))
.getOrElse(NotFound(BasicResult(false, "Not found.")))
.getOrElse(NotFound(BasicResult(success = false, "Not found.")))
} yield resp
case POST -> Root / Ident(id) / "confirm" =>
@ -285,7 +285,7 @@ object ItemRoutes {
case req @ GET -> Root / Ident(id) / "preview" :? QP.WithFallback(flag) =>
def notFound =
NotFound(BasicResult(false, "Not found"))
NotFound(BasicResult(success = false, "Not found"))
for {
preview <- backend.itemSearch.findItemPreview(id, user.account.collectiveId)
inm = req.headers.get[`If-None-Match`].flatMap(_.tags)
@ -309,7 +309,7 @@ object ItemRoutes {
resp <-
preview
.map(data => BinaryUtil.withResponseHeaders(dsl, Ok())(data))
.getOrElse(NotFound(BasicResult(false, "Not found")))
.getOrElse(NotFound(BasicResult(success = false, "Not found")))
} yield resp
case req @ POST -> Root / Ident(id) / "reprocess" =>

View File

@ -196,17 +196,17 @@ final class ItemSearchPart[F[_]: Async](
Right(s)
case QueryParseResult.ParseFailed(err) =>
BadRequest(BasicResult(false, s"Invalid query: $err")).asLeft
BadRequest(BasicResult(success = false, s"Invalid query: $err")).asLeft
case QueryParseResult.FulltextMismatch(Result.TooMany) =>
BadRequest(
BasicResult(false, "Only one fulltext search expression is allowed.")
BasicResult(success = false, "Only one fulltext search expression is allowed.")
).asLeft
case QueryParseResult.FulltextMismatch(Result.UnsupportedPosition) =>
BadRequest(
BasicResult(
false,
success = false,
"A fulltext search may only appear in the root and expression."
)
).asLeft

View File

@ -41,7 +41,9 @@ object LoginRoutes {
makeResponse(dsl, cfg, req, result, token.account.asString)
)
case Left(err) =>
BadRequest(BasicResult(false, s"Invalid authentication token: $err"))
BadRequest(
BasicResult(success = false, s"Invalid authentication token: $err")
)
}
} yield resp
@ -97,7 +99,7 @@ object LoginRoutes {
AuthResult(
token.account.collective.id,
token.account.login.id,
true,
success = true,
"Login successful",
Some(cd.asString),
cfg.auth.sessionValid.millis,
@ -112,7 +114,17 @@ object LoginRoutes {
} yield resp
case _ =>
Ok(AuthResult("", account, false, "Login failed.", None, 0L, false))
Ok(
AuthResult(
"",
account,
success = false,
"Login failed.",
None,
0L,
requireSecondFactor = false
)
)
}
}

View File

@ -36,7 +36,7 @@ object MailSendRoutes {
backend.mail.sendMail(user.account.userId, user.account.collectiveId, name, m)
)
resp <- res.fold(
err => Ok(BasicResult(false, s"Invalid mail data: $err")),
err => Ok(BasicResult(success = false, s"Invalid mail data: $err")),
res => Ok(convertOut(res))
)
} yield resp
@ -56,15 +56,15 @@ object MailSendRoutes {
def convertOut(res: SendResult): BasicResult =
res match {
case SendResult.Success(_) =>
BasicResult(true, "Mail sent.")
BasicResult(success = true, "Mail sent.")
case SendResult.SendFailure(ex) =>
BasicResult(false, s"Mail sending failed: ${ex.getMessage}")
BasicResult(success = false, s"Mail sending failed: ${ex.getMessage}")
case SendResult.StoreFailure(ex) =>
BasicResult(
false,
success = false,
s"Mail was sent, but could not be store to database: ${ex.getMessage}"
)
case SendResult.NotFound =>
BasicResult(false, s"There was no mail-connection or item found.")
BasicResult(success = false, s"There was no mail-connection or item found.")
}
}

View File

@ -69,7 +69,7 @@ object MailSettingsRoutes {
resp <- OptionT.liftF(
Ok(
up.fold(
err => BasicResult(false, err),
err => BasicResult(success = false, err),
ar => Conversions.basicResult(ar, "Mail settings stored.")
)
)
@ -86,7 +86,7 @@ object MailSettingsRoutes {
resp <- OptionT.liftF(
Ok(
up.fold(
err => BasicResult(false, err),
err => BasicResult(success = false, err),
ar => Conversions.basicResult(ar, "Mail settings stored.")
)
)
@ -105,10 +105,10 @@ object MailSettingsRoutes {
resp <- OptionT.liftF(
Ok(
up.fold(
err => BasicResult(false, err),
err => BasicResult(success = false, err),
n =>
if (n > 0) BasicResult(true, "Mail settings stored.")
else BasicResult(false, "Mail settings could not be saved")
if (n > 0) BasicResult(success = true, "Mail settings stored.")
else BasicResult(success = false, "Mail settings could not be saved")
)
)
)
@ -126,10 +126,10 @@ object MailSettingsRoutes {
resp <- OptionT.liftF(
Ok(
up.fold(
err => BasicResult(false, err),
err => BasicResult(success = false, err),
n =>
if (n > 0) BasicResult(true, "Mail settings stored.")
else BasicResult(false, "Mail settings could not be saved")
if (n > 0) BasicResult(success = true, "Mail settings stored.")
else BasicResult(success = false, "Mail settings could not be saved")
)
)
)
@ -139,8 +139,8 @@ object MailSettingsRoutes {
for {
n <- backend.mail.deleteSmtpSettings(user.account.userId, name)
resp <- Ok(
if (n > 0) BasicResult(true, "Mail settings removed")
else BasicResult(false, "Mail settings could not be removed")
if (n > 0) BasicResult(success = true, "Mail settings removed")
else BasicResult(success = false, "Mail settings could not be removed")
)
} yield resp
@ -148,8 +148,8 @@ object MailSettingsRoutes {
for {
n <- backend.mail.deleteImapSettings(user.account.userId, name)
resp <- Ok(
if (n > 0) BasicResult(true, "Mail settings removed")
else BasicResult(false, "Mail settings could not be removed")
if (n > 0) BasicResult(success = true, "Mail settings removed")
else BasicResult(success = false, "Mail settings could not be removed")
)
} yield resp
}

View File

@ -72,7 +72,7 @@ object NotificationRoutes extends NonEmptyListSupport {
.createChannel(c, user.account.userId)
.map(res => Conversions.basicResult(res, "Channel created"))
}
.foldF(ex => BadRequest(BasicResult(false, ex.getMessage)), Ok(_))
.foldF(ex => BadRequest(BasicResult(success = false, ex.getMessage)), Ok(_))
} yield resp
case req @ PUT -> Root =>
@ -86,7 +86,7 @@ object NotificationRoutes extends NonEmptyListSupport {
.updateChannel(c, user.account.userId)
.map(res => Conversions.basicResult(res, "Channel created"))
}
.foldF(ex => BadRequest(BasicResult(false, ex.getMessage)), Ok(_))
.foldF(ex => BadRequest(BasicResult(success = false, ex.getMessage)), Ok(_))
} yield resp
}
}
@ -173,7 +173,7 @@ object NotificationRoutes extends NonEmptyListSupport {
resp <- data.asJsonWithMessage match {
case Right(m) => Ok(m)
case Left(err) =>
BadRequest(BasicResult(false, s"Unable to render message: $err"))
BadRequest(BasicResult(success = false, s"Unable to render message: $err"))
}
} yield resp
}

View File

@ -86,7 +86,8 @@ object NotifyDueItemsRoutes extends MailAddressCodec with NonEmptyListSupport {
for {
data <- req.as[PeriodicDueItemsSettings]
resp <-
if (data.id.isEmpty) Ok(BasicResult(false, "Empty id is not allowed"))
if (data.id.isEmpty)
Ok(BasicResult(success = false, "Empty id is not allowed"))
else run(data)
} yield resp

View File

@ -87,7 +87,8 @@ object PeriodicQueryRoutes extends MailAddressCodec with NonEmptyListSupport {
for {
data <- req.as[PeriodicQuerySettings]
resp <-
if (data.id.isEmpty) Ok(BasicResult(false, "Empty id is not allowed"))
if (data.id.isEmpty)
Ok(BasicResult(success = false, "Empty id is not allowed"))
else run(data)
} yield resp

View File

@ -48,26 +48,26 @@ object RegisterRoutes {
def convert(r: NewInviteResult): InviteResult =
r match {
case NewInviteResult.Success(id) =>
InviteResult(true, "New invitation created.", Some(id))
InviteResult(success = true, "New invitation created.", Some(id))
case NewInviteResult.InvitationDisabled =>
InviteResult(false, "Signing up is not enabled for invitations.", None)
InviteResult(success = false, "Signing up is not enabled for invitations.", None)
case NewInviteResult.PasswordMismatch =>
InviteResult(false, "Password is invalid.", None)
InviteResult(success = false, "Password is invalid.", None)
}
def convert(r: SignupResult): BasicResult =
r match {
case SignupResult.CollectiveExists =>
BasicResult(false, "A collective with this name already exists.")
BasicResult(success = false, "A collective with this name already exists.")
case SignupResult.InvalidInvitationKey =>
BasicResult(false, "Invalid invitation key.")
BasicResult(success = false, "Invalid invitation key.")
case SignupResult.SignupClosed =>
BasicResult(false, "Sorry, registration is closed.")
BasicResult(success = false, "Sorry, registration is closed.")
case SignupResult.Failure(ex) =>
logger.error(ex)("Error signing up")
BasicResult(false, s"Internal error: ${ex.getMessage}")
BasicResult(success = false, s"Internal error: ${ex.getMessage}")
case SignupResult.Success =>
BasicResult(true, "Signup successful")
BasicResult(success = true, "Signup successful")
}
def convert(r: Registration): RegisterData =

View File

@ -82,7 +82,8 @@ object ScanMailboxRoutes {
for {
data <- req.as[ScanMailboxSettings]
resp <-
if (data.id.isEmpty) Ok(BasicResult(false, "Empty id is not allowed"))
if (data.id.isEmpty)
Ok(BasicResult(success = false, "Empty id is not allowed"))
else run(data)
} yield resp

View File

@ -34,7 +34,7 @@ object ShareItemRoutes {
resp <-
result
.map(r => Ok(r))
.getOrElse(NotFound(BasicResult(false, "Not found.")))
.getOrElse(NotFound(BasicResult(success = false, "Not found.")))
} yield resp
}
}

View File

@ -81,7 +81,7 @@ object ShareRoutes {
.sendMail(user.account.collectiveId, user.account.userId, name, m)
)
resp <- res.fold(
err => Ok(BasicResult(false, s"Invalid mail data: $err")),
err => Ok(BasicResult(success = false, s"Invalid mail data: $err")),
res => Ok(convertOut(res))
)
} yield resp
@ -100,14 +100,46 @@ object ShareRoutes {
resp <- res match {
case VerifyResult.Success(token, name) =>
val cd = ShareCookieData(token)
Ok(ShareVerifyResult(true, token.asString, false, "Success", name))
Ok(
ShareVerifyResult(
success = true,
token.asString,
passwordRequired = false,
"Success",
name
)
)
.map(cd.addCookie(ClientRequestInfo.getBaseUrl(cfg, req)))
case VerifyResult.PasswordMismatch =>
Ok(ShareVerifyResult(false, "", true, "Failed", None))
Ok(
ShareVerifyResult(
success = false,
"",
passwordRequired = true,
"Failed",
None
)
)
case VerifyResult.NotFound =>
Ok(ShareVerifyResult(false, "", false, "Failed", None))
Ok(
ShareVerifyResult(
success = false,
"",
passwordRequired = false,
"Failed",
None
)
)
case VerifyResult.InvalidToken =>
Ok(ShareVerifyResult(false, "", false, "Failed", None))
Ok(
ShareVerifyResult(
success = false,
"",
passwordRequired = false,
"Failed",
None
)
)
}
} yield resp
}
@ -125,18 +157,18 @@ object ShareRoutes {
def mkIdResult(r: OShare.ChangeResult, msg: => String): IdResult =
r match {
case OShare.ChangeResult.Success(id) => IdResult(true, msg, id)
case OShare.ChangeResult.Success(id) => IdResult(success = true, msg, id)
case OShare.ChangeResult.PublishUntilInPast =>
IdResult(false, "Until date must not be in the past", Ident.unsafe(""))
IdResult(success = false, "Until date must not be in the past", Ident.unsafe(""))
case OShare.ChangeResult.NotFound =>
IdResult(
false,
success = false,
"Share not found or not owner. Only the owner can update a share.",
Ident.unsafe("")
)
case OShare.ChangeResult.QueryWithFulltext =>
IdResult(
false,
success = false,
"Sorry, shares with fulltext queries are currently not supported.",
Ident.unsafe("")
)
@ -144,17 +176,17 @@ object ShareRoutes {
def mkBasicResult(r: OShare.ChangeResult, msg: => String): BasicResult =
r match {
case OShare.ChangeResult.Success(_) => BasicResult(true, msg)
case OShare.ChangeResult.Success(_) => BasicResult(success = true, msg)
case OShare.ChangeResult.PublishUntilInPast =>
BasicResult(false, "Until date must not be in the past")
BasicResult(success = false, "Until date must not be in the past")
case OShare.ChangeResult.NotFound =>
BasicResult(
false,
success = false,
"Share not found or not owner. Only the owner can update a share."
)
case OShare.ChangeResult.QueryWithFulltext =>
BasicResult(
false,
success = false,
"Sorry, shares with fulltext queries are currently not supported."
)
}
@ -184,10 +216,10 @@ object ShareRoutes {
def convertOut(res: SendResult): BasicResult =
res match {
case SendResult.Success(_) =>
BasicResult(true, "Mail sent.")
BasicResult(success = true, "Mail sent.")
case SendResult.SendFailure(ex) =>
BasicResult(false, s"Mail sending failed: ${ex.getMessage}")
BasicResult(success = false, s"Mail sending failed: ${ex.getMessage}")
case SendResult.NotFound =>
BasicResult(false, s"There was no mail-connection or item found.")
BasicResult(success = false, s"There was no mail-connection or item found.")
}
}

View File

@ -36,7 +36,10 @@ object TotpRoutes {
for {
result <- backend.totp.state(user.account)
resp <- Ok(
result.fold(en => OtpState(true, en.created.some), _ => OtpState(false, None))
result.fold(
en => OtpState(enabled = true, en.created.some),
_ => OtpState(enabled = false, None)
)
)
} yield resp
case POST -> Root / "init" =>
@ -44,11 +47,13 @@ object TotpRoutes {
result <- backend.totp.initialize(user.account)
resp <- result match {
case OTotp.InitResult.AlreadyExists =>
UnprocessableEntity(BasicResult(false, "A totp setup already exists!"))
UnprocessableEntity(
BasicResult(success = false, "A totp setup already exists!")
)
case OTotp.InitResult.NotFound =>
NotFound(BasicResult(false, "User not found"))
NotFound(BasicResult(success = false, "User not found"))
case OTotp.InitResult.Failed(ex) =>
InternalServerError(BasicResult(false, ex.getMessage))
InternalServerError(BasicResult(success = false, ex.getMessage))
case s @ OTotp.InitResult.Success(_, key) =>
val issuer = cfg.appName
val uri = s.authenticatorUrl(issuer)
@ -62,9 +67,9 @@ object TotpRoutes {
result <- backend.totp.confirmInit(user.account, OnetimePassword(data.otp.pass))
resp <- result match {
case OTotp.ConfirmResult.Success =>
Ok(BasicResult(true, "TOTP setup successful."))
Ok(BasicResult(success = true, "TOTP setup successful."))
case OTotp.ConfirmResult.Failed =>
Ok(BasicResult(false, "TOTP setup failed!"))
Ok(BasicResult(success = false, "TOTP setup failed!"))
}
} yield resp

View File

@ -97,7 +97,7 @@ object UserRoutes {
)
case None =>
NotFound(BasicResult(false, s"User '${username.id}' not found"))
NotFound(BasicResult(success = false, s"User '${username.id}' not found"))
}
} yield resp
}
@ -119,16 +119,16 @@ object UserRoutes {
)
resp <- Ok(result match {
case OCollective.PassResetResult.Success(np) =>
ResetPasswordResult(true, np, "Password updated")
ResetPasswordResult(success = true, np, "Password updated")
case OCollective.PassResetResult.NotFound =>
ResetPasswordResult(
false,
success = false,
Password(""),
"Password update failed. User not found."
)
case OCollective.PassResetResult.InvalidSource(source) =>
ResetPasswordResult(
false,
success = false,
Password(""),
s"Password update failed. User has unexpected source: $source. Passwords are managed externally."
)