Initial impl of search route

This commit is contained in:
eikek
2021-10-04 09:46:08 +02:00
parent f4596db63d
commit a286556116
4 changed files with 102 additions and 15 deletions

View File

@ -81,16 +81,16 @@ object ShareRoutes {
res <- backend.share
.verify(cfg.auth.serverSecret)(secret.shareId, secret.password)
resp <- res match {
case VerifyResult.Success(token) =>
case VerifyResult.Success(token, name) =>
val cd = ShareCookieData(token)
Ok(ShareVerifyResult(true, token.asString, false, "Success"))
Ok(ShareVerifyResult(true, token.asString, false, "Success", name))
.map(cd.addCookie(ClientRequestInfo.getBaseUrl(cfg, req)))
case VerifyResult.PasswordMismatch =>
Ok(ShareVerifyResult(false, "", true, "Failed"))
Ok(ShareVerifyResult(false, "", true, "Failed", None))
case VerifyResult.NotFound =>
Ok(ShareVerifyResult(false, "", false, "Failed"))
Ok(ShareVerifyResult(false, "", false, "Failed", None))
case VerifyResult.InvalidToken =>
Ok(ShareVerifyResult(false, "", false, "Failed"))
Ok(ShareVerifyResult(false, "", false, "Failed", None))
}
} yield resp
}

View File

@ -7,13 +7,20 @@
package docspell.restserver.routes
import cats.effect._
import cats.implicits._
import docspell.backend.BackendApp
import docspell.backend.auth.ShareToken
import docspell.common.Logger
import docspell.backend.ops.OSimpleSearch
import docspell.common._
import docspell.restapi.model.ItemQuery
import docspell.restserver.Config
import docspell.store.qb.Batch
import docspell.store.queries.Query
import org.http4s.HttpRoutes
import org.http4s.circe.CirceEntityDecoder._
import org.http4s.dsl.Http4sDsl
object ShareSearchRoutes {
@ -23,7 +30,37 @@ object ShareSearchRoutes {
token: ShareToken
): HttpRoutes[F] = {
val logger = Logger.log4s[F](org.log4s.getLogger)
logger.trace(s"$backend $cfg $token")
???
val dsl = new Http4sDsl[F] {}
import dsl._
HttpRoutes.of { case req @ POST -> Root =>
backend.share
.findShareQuery(token.id)
.semiflatMap { share =>
for {
userQuery <- req.as[ItemQuery]
batch = Batch(
userQuery.offset.getOrElse(0),
userQuery.limit.getOrElse(cfg.maxItemPageSize)
).restrictLimitTo(
cfg.maxItemPageSize
)
itemQuery = ItemQueryString(userQuery.query)
settings = OSimpleSearch.Settings(
batch,
cfg.fullTextSearch.enabled,
userQuery.withDetails.getOrElse(false),
cfg.maxNoteLength,
searchMode = SearchMode.Normal
)
account = AccountId(share.cid, Ident.unsafe(""))
fixQuery = Query.Fix(account, Some(share.query.expr), None)
_ <- logger.debug(s"Searching in share ${share.id.id}: ${userQuery.query}")
resp <- ItemRoutes.searchItems(backend, dsl)(settings, fixQuery, itemQuery)
} yield resp
}
.getOrElseF(NotFound())
}
}
}