From 0114bb4d72e815953eb326dc20bb44eb6a3dea35 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Mon, 26 Oct 2020 22:35:25 +0100 Subject: [PATCH] Use source name from config file for integration endpoint uploads Fixes: #389 --- .../src/main/scala/docspell/common/DocspellSystem.scala | 3 ++- modules/restserver/src/main/resources/reference.conf | 4 ++++ .../src/main/scala/docspell/restserver/Config.scala | 1 + .../main/scala/docspell/restserver/conv/Conversions.scala | 5 +++-- .../restserver/routes/IntegrationEndpointRoutes.scala | 3 ++- .../scala/docspell/restserver/routes/UploadRoutes.scala | 1 + nix/module-server.nix | 8 ++++++++ 7 files changed, 21 insertions(+), 4 deletions(-) diff --git a/modules/common/src/main/scala/docspell/common/DocspellSystem.scala b/modules/common/src/main/scala/docspell/common/DocspellSystem.scala index 21247829..52cbb717 100644 --- a/modules/common/src/main/scala/docspell/common/DocspellSystem.scala +++ b/modules/common/src/main/scala/docspell/common/DocspellSystem.scala @@ -2,7 +2,8 @@ package docspell.common object DocspellSystem { - val taskGroup = Ident.unsafe("docspell-system") + val user = Ident.unsafe("docspell-system") + val taskGroup = user val migrationTaskTracker = Ident.unsafe("full-text-index-tracker") } diff --git a/modules/restserver/src/main/resources/reference.conf b/modules/restserver/src/main/resources/reference.conf index f3fd0278..d78d5233 100644 --- a/modules/restserver/src/main/resources/reference.conf +++ b/modules/restserver/src/main/resources/reference.conf @@ -73,6 +73,10 @@ docspell.server { # The priority to use when submitting files through this endpoint. priority = "low" + # The name used for the item "source" property when uploaded + # through this endpoint. + source-name = "integration" + # IPv4 addresses to allow access. An empty list, if enabled, # prohibits all requests. IP addresses may be specified as simple # globs: a part marked as `*' matches any octet, like in diff --git a/modules/restserver/src/main/scala/docspell/restserver/Config.scala b/modules/restserver/src/main/scala/docspell/restserver/Config.scala index dead60f9..f90616a6 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/Config.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/Config.scala @@ -28,6 +28,7 @@ object Config { case class IntegrationEndpoint( enabled: Boolean, priority: Priority, + sourceName: String, allowedIps: IntegrationEndpoint.AllowedIps, httpBasic: IntegrationEndpoint.HttpBasic, httpHeader: IntegrationEndpoint.HttpHeader diff --git a/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala b/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala index 4e872606..3b40c1d8 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala @@ -273,6 +273,7 @@ trait Conversions { // upload def readMultipart[F[_]: Effect]( mp: Multipart[F], + sourceName: String, logger: Logger, prio: Priority, validFileTypes: Seq[MimeType] @@ -300,7 +301,7 @@ trait Conversions { m.multiple, UploadMeta( m.direction, - "webapp", + sourceName, m.folder, validFileTypes, m.skipDuplicates.getOrElse(false) @@ -309,7 +310,7 @@ trait Conversions { ) ) .getOrElse( - (true, UploadMeta(None, "webapp", None, validFileTypes, false)).pure[F] + (true, UploadMeta(None, sourceName, None, validFileTypes, false)).pure[F] ) val files = mp.parts diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/IntegrationEndpointRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/IntegrationEndpointRoutes.scala index 6ff78e13..86b6342d 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/IntegrationEndpointRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/IntegrationEndpointRoutes.scala @@ -99,11 +99,12 @@ object IntegrationEndpointRoutes { multipart <- req.as[Multipart[F]] updata <- readMultipart( multipart, + cfg.integrationEndpoint.sourceName, logger, cfg.integrationEndpoint.priority, cfg.backend.files.validMimeTypes ) - account = AccountId(coll, Ident.unsafe("docspell-system")) + account = AccountId(coll, DocspellSystem.user) result <- backend.upload.submit(updata, account, true, None) res <- Ok(basicResult(result)) } yield res diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/UploadRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/UploadRoutes.scala index e3b21a04..f50c5da9 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/UploadRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/UploadRoutes.scala @@ -78,6 +78,7 @@ object UploadRoutes { multipart <- req.as[Multipart[F]] updata <- readMultipart( multipart, + "webapp", logger, prio, cfg.backend.files.validMimeTypes diff --git a/nix/module-server.nix b/nix/module-server.nix index 6b070cc7..cd23429f 100644 --- a/nix/module-server.nix +++ b/nix/module-server.nix @@ -23,6 +23,7 @@ let integration-endpoint = { enabled = false; priority = "low"; + source-name = "integration"; allowed-ips = { enabled = false; ips = [ "127.0.0.1" ]; @@ -214,6 +215,13 @@ in { default = defaults.integration-endpoint.priority; description = "The priority to use when submitting files through this endpoint."; }; + source-name = mkOption { + type = types.str; + default = defaults.integration-endpoint.source-name; + description = '' + The name used for the item "source" property when uploaded through this endpoint. + ''; + }; allowed-ips = mkOption { type = types.submodule({ options = {