diff --git a/.scala-steward.conf b/.scala-steward.conf index f8af846a49..6f769e8519 100644 --- a/.scala-steward.conf +++ b/.scala-steward.conf @@ -1,8 +1,5 @@ # ignore the following dependencies: - # jodd -> hard to update and only used in DateUtilV1 -# swagger-akka-http -> should be removed in separate PR updates.ignore = [ - { groupId = "org.jodd", artifactId="jodd", version = "3.2.7" }, - { groupId = "com.github.swagger-akka-http", artifactId="swagger-akka-http", version = "1.6.0" } + { groupId = "org.jodd", artifactId="jodd", version = "3.2.7" } ] diff --git a/docs/03-apis/api-admin/introduction.md b/docs/03-apis/api-admin/introduction.md index d36ecc37c8..a7d68548dd 100644 --- a/docs/03-apis/api-admin/introduction.md +++ b/docs/03-apis/api-admin/introduction.md @@ -52,16 +52,6 @@ API server can authenticate the user making the request. Credentials can be sent as a part of the HTTP header or as parts of the URL (see [Authentication in Knora](../../05-internals/design/principles/authentication.md)). -## OpenAPI/Swagger - -The Admin API uses -[OpenAPI](https://github.com/OAI/OpenAPI-Specification) for -documentation purposes. To try it out, run webapi and open -http://host/api-docs/swagger.json in . -Alternatively, the documentation can be looked at by using -[ReDoc](https://github.com/Rebilly/ReDoc), which is provided in -`knora/docs/redoc/index.html` and is published under . - ## Admin API Endpoints TODO diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index cd626abc86..0000000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs-api.dasch.swiss diff --git a/docs/Readme.md b/docs/Readme.md index 8f79349761..9b568b13af 100644 --- a/docs/Readme.md +++ b/docs/Readme.md @@ -1,47 +1,26 @@ # DSP-API Documentation -## MkDocs Documentation +This folder contains the sources to the DSP-API part of documentation published +under and managed by +[DSP-DOCS](https://github.com/dasch-swiss/dsp-docs) repository. -This folder contains the sources to the DSP-API documentation website published -under +## Build and serve the docs locally -The `src` folder contains the following documentation sources: - -- `src/api-v1`: The DSP-API V1 (JSON) Request and Response Format documentation. Source can be found in `salsah1/src/typescript_interfaces` -- `src/api-v2`: The DSP-API V2 (JSON-LD) Request and Response Format documentation. -- `src/api-admin`: The DSP-API Admin (JSON) Request and Response format Swagger-based documentation. - -All the different documentations are build by invoking the following make -commands from the project root directory: +Documentation can be build by invoking the following make commands from +the project root directory: ```shell +make docs-install-requirements: ## install requirements make docs-build # build the documentation make docs-serve # serve it locally -make docs-publish # publish it do Github pages -make docs-install-requirements: ## install requirements ``` -This command will build all documentation and publish it to the `gh-pages` branch. - -## Prerequisites +### Prerequisites -1. You will need [Graphviz](http://www.graphviz.org/). On macOS: +You will need [Graphviz](http://www.graphviz.org/). On macOS: ```shell brew install graphviz ``` On Linux, use your distribution's package manager. - -1. The DSP-API V1 / V2 Request and Response Format documentation is -formally described using typescript interfaces. To create the documentation -from these interfaces, we use `typedoc`. - - Install `typedoc` using `npm`: - - ```shell - npm install --global typedoc - ``` - - If you do not have `npm` (node package manager), install it first. You will - find more information about `npm` here: . diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 476fbe768d..f3050fa406 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -84,20 +84,19 @@ object Dependencies { val chill = "com.twitter" %% "chill" % "0.10.0" // Scala 3 incompatible // other - val diff = "com.sksamuel.diff" % "diff" % "1.1.11" - val gwtServlet = "com.google.gwt" % "gwt-servlet" % "2.10.0" - val icu4j = "com.ibm.icu" % "icu4j" % "71.1" - val jakartaJSON = "org.glassfish" % "jakarta.json" % "2.0.1" - val jodd = "org.jodd" % "jodd" % "3.2.7" - val rdf4jClient = "org.eclipse.rdf4j" % "rdf4j-client" % "4.1.0" - val rdf4jShacl = "org.eclipse.rdf4j" % "rdf4j-shacl" % "4.1.0" - val saxonHE = "net.sf.saxon" % "Saxon-HE" % "11.4" - val scalaGraph = "org.scala-graph" %% "graph-core" % "1.13.5" // Scala 3 incompatible - val scallop = "org.rogach" %% "scallop" % "4.1.0" // Scala 3 compatible - val swaggerAkkaHttp = "com.github.swagger-akka-http" %% "swagger-akka-http" % "1.6.0" // Scala 3 incompatible - val titaniumJSONLD = "com.apicatalog" % "titanium-json-ld" % "1.3.1" - val xmlunitCore = "org.xmlunit" % "xmlunit-core" % "2.9.0" - val jacksonDatabind = "com.fasterxml.jackson.core" % "jackson-databind" % "2.13.4" + val diff = "com.sksamuel.diff" % "diff" % "1.1.11" + val gwtServlet = "com.google.gwt" % "gwt-servlet" % "2.10.0" + val icu4j = "com.ibm.icu" % "icu4j" % "71.1" + val jakartaJSON = "org.glassfish" % "jakarta.json" % "2.0.1" + val jodd = "org.jodd" % "jodd" % "3.2.7" + val rdf4jClient = "org.eclipse.rdf4j" % "rdf4j-client" % "4.1.0" + val rdf4jShacl = "org.eclipse.rdf4j" % "rdf4j-shacl" % "4.1.0" + val saxonHE = "net.sf.saxon" % "Saxon-HE" % "11.4" + val scalaGraph = "org.scala-graph" %% "graph-core" % "1.13.5" // Scala 3 incompatible + val scallop = "org.rogach" %% "scallop" % "4.1.0" // Scala 3 compatible + val titaniumJSONLD = "com.apicatalog" % "titanium-json-ld" % "1.3.1" + val xmlunitCore = "org.xmlunit" % "xmlunit-core" % "2.9.0" + val jacksonDatabind = "com.fasterxml.jackson.core" % "jackson-databind" % "2.13.4" // test val akkaHttpTestkit = "com.typesafe.akka" %% "akka-http-testkit" % AkkaHttpVersion // Scala 3 incompatible @@ -148,7 +147,6 @@ object Dependencies { slf4jApi, springSecurityCore, bouncyCastle, - swaggerAkkaHttp, testcontainers % Test, titaniumJSONLD, xmlunitCore % Test, diff --git a/webapi/src/main/scala/org/knora/webapi/annotation/ApiMayChange.scala b/webapi/src/main/scala/org/knora/webapi/annotation/ApiMayChange.scala deleted file mode 100644 index 4609ce14d9..0000000000 --- a/webapi/src/main/scala/org/knora/webapi/annotation/ApiMayChange.scala +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright © 2021 - 2022 Swiss National Data and Service Center for the Humanities and/or DaSCH Service Platform contributors. - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.knora.webapi.annotation - -/** - * Creates the ApiMayChange annotation. - * - * Marks APIs that are meant to evolve towards becoming stable APIs, but are not stable APIs yet. - * - *

Evolving interfaces MAY change from one patch release to another (i.e. 2.4.10 to 2.4.11) - * without up-front notice. A best-effort approach is taken to not cause more breakage than really - * necessary, and usual deprecation techniques are utilised while evolving these APIs, however there - * is NO strong guarantee regarding the source or binary compatibility of APIs marked using this - * annotation. - * - *

It MAY also change when promoting the API to stable, for example such changes may include - * removal of deprecated methods that were introduced during the evolution and final refactoring - * that were deferred because they would have introduced to much breaking changes during the - * evolution phase. - * - *

Promoting the API to stable MAY happen in a patch release. - * - *

It is encouraged to document in ScalaDoc how exactly this API is expected to evolve. - */ -class ApiMayChange() extends scala.annotation.StaticAnnotation diff --git a/webapi/src/main/scala/org/knora/webapi/annotation/ProjectUnique.scala b/webapi/src/main/scala/org/knora/webapi/annotation/ProjectUnique.scala deleted file mode 100644 index 647755bf49..0000000000 --- a/webapi/src/main/scala/org/knora/webapi/annotation/ProjectUnique.scala +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright © 2021 - 2022 Swiss National Data and Service Center for the Humanities and/or DaSCH Service Platform contributors. - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.knora.webapi.annotation - -/** - * Creates the ProjectUnique annotation. - * - * Marks values which need to be unique on the level of the PROJECT. - */ -class ProjectUnique() extends scala.annotation.StaticAnnotation diff --git a/webapi/src/main/scala/org/knora/webapi/annotation/ServerUnique.scala b/webapi/src/main/scala/org/knora/webapi/annotation/ServerUnique.scala deleted file mode 100644 index 480875f6d4..0000000000 --- a/webapi/src/main/scala/org/knora/webapi/annotation/ServerUnique.scala +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright © 2021 - 2022 Swiss National Data and Service Center for the Humanities and/or DaSCH Service Platform contributors. - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.knora.webapi.annotation - -/** - * Creates the ServerUnique annotation. - * - * Marks values which need to be unique on the level of the SERVER. - */ -class ServerUnique() extends scala.annotation.StaticAnnotation diff --git a/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADM.scala b/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADM.scala index 409e86369c..ce48e72c57 100644 --- a/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/messages/admin/responder/projectsmessages/ProjectsMessagesADM.scala @@ -20,8 +20,6 @@ import dsp.errors.DataConversionException import dsp.errors.OntologyConstraintException import dsp.valueobjects.V2 import org.knora.webapi.IRI -import org.knora.webapi.annotation.ApiMayChange -import org.knora.webapi.annotation.ServerUnique import org.knora.webapi.messages.ResponderRequest.KnoraRequestADM import org.knora.webapi.messages.StringFormatter import org.knora.webapi.messages.admin.responder.KnoraResponseADM @@ -247,7 +245,6 @@ case class ProjectKeywordsGetRequestADM( * @param identifier the identifier of the project. * @param requestingUser the user making the request. */ -@ApiMayChange case class ProjectRestrictedViewSettingsGetADM( identifier: ProjectIdentifierADM, requestingUser: UserADM @@ -259,7 +256,6 @@ case class ProjectRestrictedViewSettingsGetADM( * @param identifier the identifier of the project. * @param requestingUser the user making the request. */ -@ApiMayChange case class ProjectRestrictedViewSettingsGetRequestADM( identifier: ProjectIdentifierADM, requestingUser: UserADM @@ -365,11 +361,10 @@ case class ProjectKeywordsGetResponseADM(keywords: Seq[String]) extends KnoraRes } /** - * API MAY CHANGE: Represents a response to a request for the project's restricted view settings. + * Represents a response to a request for the project's restricted view settings. * * @param settings the restricted view settings. */ -@ApiMayChange case class ProjectRestrictedViewSettingsGetResponseADM(settings: ProjectRestrictedViewSettingsADM) extends KnoraResponseADM with ProjectsADMJsonProtocol { @@ -399,8 +394,8 @@ case class ProjectDataGetResponseADM(projectDataFile: Path) * Represents basic information about a project. * * @param id The project's IRI. - * @param shortname The project's shortname. [[ServerUnique]]. - * @param shortcode The project's shortcode. [[ServerUnique]]. + * @param shortname The project's shortname. + * @param shortcode The project's shortcode. * @param longname The project's long name. * @param description The project's description. * @param keywords The project's keywords. @@ -411,8 +406,8 @@ case class ProjectDataGetResponseADM(projectDataFile: Path) */ case class ProjectADM( id: IRI, - @ServerUnique shortname: String, - @ServerUnique shortcode: String, + shortname: String, + shortcode: String, longname: Option[String], description: Seq[StringLiteralV2], keywords: Seq[String], @@ -639,12 +634,11 @@ object ProjectIdentifierType { } /** - * API MAY CHANGE: Represents the project's restricted view settings. + * Represents the project's restricted view settings. * * @param size the restricted view size. * @param watermark the watermark file. */ -@ApiMayChange case class ProjectRestrictedViewSettingsADM(size: Option[String] = None, watermark: Option[String] = None) /** diff --git a/webapi/src/main/scala/org/knora/webapi/responders/admin/ProjectsResponderADM.scala b/webapi/src/main/scala/org/knora/webapi/responders/admin/ProjectsResponderADM.scala index 2da00de35d..718c54afa1 100644 --- a/webapi/src/main/scala/org/knora/webapi/responders/admin/ProjectsResponderADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/responders/admin/ProjectsResponderADM.scala @@ -20,7 +20,6 @@ import scala.util.Try import dsp.errors._ import org.knora.webapi._ -import org.knora.webapi.annotation.ApiMayChange import org.knora.webapi.instrumentation.InstrumentationSupport import org.knora.webapi.messages.IriConversions._ import org.knora.webapi.messages.OntologyConstants @@ -686,7 +685,6 @@ class ProjectsResponderADM(responderData: ResponderData) extends Responder(respo * @param requestingUser the user making the request. * @return [[ProjectRestrictedViewSettingsADM]] */ - @ApiMayChange private def projectRestrictedViewSettingsGetADM( identifier: ProjectIdentifierADM, requestingUser: UserADM @@ -738,7 +736,6 @@ class ProjectsResponderADM(responderData: ResponderData) extends Responder(respo * @param requestingUser the user making the request. * @return [[ProjectRestrictedViewSettingsGetResponseADM]] */ - @ApiMayChange private def projectRestrictedViewSettingsGetRequestADM( identifier: ProjectIdentifierADM, requestingUser: UserADM diff --git a/webapi/src/main/scala/org/knora/webapi/routing/ApiRoutes.scala b/webapi/src/main/scala/org/knora/webapi/routing/ApiRoutes.scala index 1e0fed172e..4e92a92f35 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/ApiRoutes.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/ApiRoutes.scala @@ -20,7 +20,6 @@ import org.knora.webapi.routing.AroundDirectives import org.knora.webapi.routing.HealthRoute import org.knora.webapi.routing.KnoraRouteData import org.knora.webapi.routing.RejectingRoute -import org.knora.webapi.routing.SwaggerApiDocsRoute import org.knora.webapi.routing.VersionRoute import org.knora.webapi.routing.admin.FilesRouteADM import org.knora.webapi.routing.admin.GroupsRouteADM @@ -117,8 +116,7 @@ private final case class ApiRoutesImpl(routeData: KnoraRouteData, runtime: Runti new ProjectsRouteADM(routeData).makeRoute ~ new StoreRouteADM(routeData).makeRoute ~ new UsersRouteADM(routeData).makeRoute ~ - new FilesRouteADM(routeData).makeRoute ~ - new SwaggerApiDocsRoute(routeData).makeRoute + new FilesRouteADM(routeData).makeRoute } } } diff --git a/webapi/src/main/scala/org/knora/webapi/routing/SwaggerApiDocsRoute.scala b/webapi/src/main/scala/org/knora/webapi/routing/SwaggerApiDocsRoute.scala deleted file mode 100644 index cb0bcbf939..0000000000 --- a/webapi/src/main/scala/org/knora/webapi/routing/SwaggerApiDocsRoute.scala +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright © 2021 - 2022 Swiss National Data and Service Center for the Humanities and/or DaSCH Service Platform contributors. - * SPDX-License-Identifier: Apache-2.0 - */ - -package org.knora.webapi.routing - -import akka.http.scaladsl.server.Route -import com.github.swagger.akka.SwaggerHttpService -import com.github.swagger.akka.model.Info -import io.swagger.models.ExternalDocs -import io.swagger.models.Scheme -import io.swagger.models.auth.BasicAuthDefinition - -import org.knora.webapi.routing.admin._ -import org.knora.webapi.routing.admin.lists._ - -/** - * Provides the '/api-docs' endpoint serving the 'swagger.json' OpenAPI specification - */ -class SwaggerApiDocsRoute(routeData: KnoraRouteData) extends KnoraRoute(routeData) with SwaggerHttpService { - - // List all routes here - override val apiClasses: Set[Class[_]] = Set( - classOf[GroupsRouteADM], - classOf[DeleteListItemsRouteADM], - classOf[CreateListItemsRouteADM], - classOf[GetListItemsRouteADM], - classOf[UpdateListItemsRouteADM], - classOf[PermissionsRouteADM], - classOf[ProjectsRouteADM], - classOf[StoreRouteADM], - classOf[UsersRouteADM], - classOf[HealthRoute] - ) - - override val schemes: List[Scheme] = if (settings.externalKnoraApiProtocol == "http") { - List(Scheme.HTTP) - } else if (settings.externalKnoraApiProtocol == "https") { - List(Scheme.HTTPS) - } else { - List(Scheme.HTTP) - } - - // swagger will publish at: http://locahost:3333/api-docs/swagger.json - - override val host: String = settings.externalKnoraApiHostPort // the url of your api, not swagger's json endpoint - override val basePath = "/" // the basePath for the API you are exposing - override val apiDocsPath = "api-docs" // where you want the swagger-json endpoint exposed - override val info: Info = Info(version = "1.8.0") // provides license and other description details - override val externalDocs: Option[ExternalDocs] = Some(new ExternalDocs("Knora Docs", "http://docs.knora.org")) - override val securitySchemeDefinitions = Map("basicAuth" -> new BasicAuthDefinition()) - - /** - * Returns the route. - */ - override def makeRoute: Route = - routes - -} diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/GroupsRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/GroupsRouteADM.scala index b57fc60533..2bd5fc1644 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/GroupsRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/GroupsRouteADM.scala @@ -8,11 +8,9 @@ package org.knora.webapi.routing.admin import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.PathMatcher import akka.http.scaladsl.server.Route -import io.swagger.annotations._ import zio.prelude.Validation import java.util.UUID -import javax.ws.rs.Path import dsp.errors.BadRequestException import dsp.valueobjects.Group._ @@ -26,9 +24,6 @@ import org.knora.webapi.routing.RouteUtilADM /** * Provides a routing function for API routes that deal with groups. */ - -@Api(value = "groups", produces = "application/json") -@Path("/admin/groups") class GroupsRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with Authenticator diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/ProjectsRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/ProjectsRouteADM.scala index 9af61fcba1..5689aae857 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/ProjectsRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/ProjectsRouteADM.scala @@ -18,12 +18,10 @@ import akka.stream.IOResult import akka.stream.scaladsl.FileIO import akka.stream.scaladsl.Source import akka.util.ByteString -import io.swagger.annotations._ import zio.prelude.Validation import java.nio.file.Files import java.util.UUID -import javax.ws.rs.Path import scala.concurrent.Future import scala.util.Try @@ -31,15 +29,12 @@ import dsp.errors.BadRequestException import dsp.valueobjects.Iri.ProjectIri import dsp.valueobjects.Project._ import org.knora.webapi.IRI -import org.knora.webapi.annotation.ApiMayChange import org.knora.webapi.messages.admin.responder.projectsmessages._ import org.knora.webapi.routing.Authenticator import org.knora.webapi.routing.KnoraRoute import org.knora.webapi.routing.KnoraRouteData import org.knora.webapi.routing.RouteUtilADM -@Api(value = "projects", produces = "application/json") -@Path("/admin/projects") class ProjectsRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with Authenticator @@ -72,17 +67,6 @@ class ProjectsRouteADM(routeData: KnoraRouteData) getProjectData() /* return all projects */ - @ApiOperation( - value = "Get projects", - nickname = "getProjects", - httpMethod = "GET", - response = classOf[ProjectsGetResponseADM] - ) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) private def getProjects(): Route = path(projectsBasePath) { get { requestContext => log.info("All projects requested.") @@ -105,28 +89,6 @@ class ProjectsRouteADM(routeData: KnoraRouteData) } /* create a new project */ - @ApiOperation( - value = "Add new project", - nickname = "addProject", - httpMethod = "POST", - response = classOf[ProjectOperationResponseADM] - ) - @ApiImplicitParams( - Array( - new ApiImplicitParam( - name = "body", - value = "\"project\" to create", - required = true, - dataTypeClass = classOf[CreateProjectApiRequestADM], - paramType = "body" - ) - ) - ) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) private def addProject(): Route = path(projectsBasePath) { post { entity(as[CreateProjectApiRequestADM]) { apiRequest => requestContext => @@ -335,9 +297,8 @@ class ProjectsRouteADM(routeData: KnoraRouteData) } /** - * API MAY CHANGE: update project status to false + * update project status to false */ - @ApiMayChange private def deleteProject(): Route = path(projectsBasePath / "iri" / Segment) { value => delete { requestContext => @@ -366,9 +327,8 @@ class ProjectsRouteADM(routeData: KnoraRouteData) } /** - * API MAY CHANGE: returns all members part of a project identified through iri + * returns all members part of a project identified through iri */ - @ApiMayChange private def getProjectMembersByIri(): Route = path(projectsBasePath / "iri" / Segment / "members") { value => get { requestContext => @@ -395,9 +355,8 @@ class ProjectsRouteADM(routeData: KnoraRouteData) } /** - * API MAY CHANGE: returns all members part of a project identified through shortname + * returns all members part of a project identified through shortname */ - @ApiMayChange private def getProjectMembersByShortname(): Route = path(projectsBasePath / "shortname" / Segment / "members") { value => get { requestContext => @@ -426,9 +385,8 @@ class ProjectsRouteADM(routeData: KnoraRouteData) } /** - * API MAY CHANGE: returns all members part of a project identified through shortcode + * returns all members part of a project identified through shortcode */ - @ApiMayChange private def getProjectMembersByShortcode(): Route = path(projectsBasePath / "shortcode" / Segment / "members") { value => get { requestContext => @@ -457,9 +415,8 @@ class ProjectsRouteADM(routeData: KnoraRouteData) } /** - * API MAY CHANGE: returns all admin members part of a project identified through iri + * returns all admin members part of a project identified through iri */ - @ApiMayChange private def getProjectAdminMembersByIri(): Route = path(projectsBasePath / "iri" / Segment / "admin-members") { value => get { requestContext => @@ -486,9 +443,8 @@ class ProjectsRouteADM(routeData: KnoraRouteData) } /** - * API MAY CHANGE: returns all admin members part of a project identified through shortname + * returns all admin members part of a project identified through shortname */ - @ApiMayChange private def getProjectAdminMembersByShortname(): Route = path(projectsBasePath / "shortname" / Segment / "admin-members") { value => get { requestContext => @@ -517,9 +473,8 @@ class ProjectsRouteADM(routeData: KnoraRouteData) } /** - * API MAY CHANGE: returns all admin members part of a project identified through shortcode + * returns all admin members part of a project identified through shortcode */ - @ApiMayChange private def getProjectAdminMembersByShortcode(): Route = path(projectsBasePath / "shortcode" / Segment / "admin-members") { value => get { requestContext => @@ -550,7 +505,6 @@ class ProjectsRouteADM(routeData: KnoraRouteData) /** * Returns the project's restricted view settings identified through IRI. */ - @ApiMayChange private def getProjectRestrictedViewSettingsByIri(): Route = path(projectsBasePath / "iri" / Segment / "RestrictedViewSettings") { value: String => get { requestContext => @@ -577,7 +531,6 @@ class ProjectsRouteADM(routeData: KnoraRouteData) /** * Returns the project's restricted view settings identified through shortname. */ - @ApiMayChange private def getProjectRestrictedViewSettingsByShortname(): Route = path(projectsBasePath / "shortname" / Segment / "RestrictedViewSettings") { value: String => get { requestContext => @@ -605,7 +558,6 @@ class ProjectsRouteADM(routeData: KnoraRouteData) /** * Returns the project's restricted view settings identified through shortcode. */ - @ApiMayChange private def getProjectRestrictedViewSettingsByShortcode(): Route = path(projectsBasePath / "shortcode" / Segment / "RestrictedViewSettings") { value: String => get { requestContext => diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/StoreRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/StoreRouteADM.scala index f7fda2646e..9331b62540 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/StoreRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/StoreRouteADM.scala @@ -7,9 +7,7 @@ package org.knora.webapi.routing.admin import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.Route -import io.swagger.annotations.Api -import javax.ws.rs.Path import scala.concurrent.Future import scala.concurrent.duration._ @@ -25,8 +23,6 @@ import org.knora.webapi.routing.RouteUtilADM * A route used to send requests which can directly affect the data stored inside the triplestore. */ -@Api(value = "store", produces = "application/json") -@Path("/admin/store") class StoreRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with Authenticator diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/UsersRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/UsersRouteADM.scala index 3c7cef3855..b1296c51e0 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/UsersRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/UsersRouteADM.scala @@ -8,18 +8,15 @@ package org.knora.webapi.routing.admin import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.PathMatcher import akka.http.scaladsl.server.Route -import io.swagger.annotations._ import zio.prelude.Validation import java.util.UUID -import javax.ws.rs.Path import scala.concurrent.Future import dsp.errors.BadRequestException import dsp.valueobjects.Iri.UserIri import dsp.valueobjects.LanguageCode import dsp.valueobjects.User._ -import org.knora.webapi.annotation.ApiMayChange import org.knora.webapi.messages.admin.responder.usersmessages.UsersADMJsonProtocol._ import org.knora.webapi.messages.admin.responder.usersmessages._ import org.knora.webapi.messages.util.KnoraSystemInstances @@ -31,8 +28,6 @@ import org.knora.webapi.routing.RouteUtilADM /** * Provides an akka-http-routing function for API routes that deal with users. */ -@Api(value = "users", produces = "application/json") -@Path("/admin/users") class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with Authenticator { val usersBasePath: PathMatcher[Unit] = PathMatcher("admin" / "users") @@ -60,12 +55,7 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit getUsersGroupMemberships() ~ addUserToGroupMembership() ~ removeUserFromGroupMembership() - @ApiOperation(value = "Get users", nickname = "getUsers", httpMethod = "GET", response = classOf[UsersGetResponseADM]) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) + /* return all users */ def getUsers(): Route = path(usersBasePath) { get { requestContext => @@ -87,28 +77,6 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } } - @ApiOperation( - value = "Add new user", - nickname = "addUser", - httpMethod = "POST", - response = classOf[UserOperationResponseADM] - ) - @ApiImplicitParams( - Array( - new ApiImplicitParam( - name = "body", - value = "\"user\" to create", - required = true, - dataTypeClass = classOf[CreateUserApiRequestADM], - paramType = "body" - ) - ) - ) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) /* create a new user */ def addUser(): Route = path(usersBasePath) { post { @@ -239,9 +207,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: Change existing user's basic information. + * Change existing user's basic information. */ - @ApiMayChange private def changeUserBasicInformation(): Route = path(usersBasePath / "iri" / Segment / "BasicUserInformation") { userIri => put { @@ -317,9 +284,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: Change user's password. + * Change user's password. */ - @ApiMayChange private def changeUserPassword(): Route = path(usersBasePath / "iri" / Segment / "Password") { userIri => put { @@ -369,9 +335,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: Change user's status. + * Change user's status. */ - @ApiMayChange private def changeUserStatus(): Route = path(usersBasePath / "iri" / Segment / "Status") { userIri => put { @@ -417,9 +382,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: delete a user identified by iri (change status to false). + * delete a user identified by iri (change status to false). */ - @ApiMayChange private def deleteUser(): Route = path(usersBasePath / "iri" / Segment) { userIri => delete { requestContext => if (userIri.isEmpty) throw BadRequestException("User IRI cannot be empty") @@ -460,9 +424,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: Change user's SystemAdmin membership. + * Change user's SystemAdmin membership. */ - @ApiMayChange private def changeUserSystemAdminMembership(): Route = path(usersBasePath / "iri" / Segment / "SystemAdmin") { userIri => put { @@ -508,9 +471,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: get user's project memberships + * get user's project memberships */ - @ApiMayChange private def getUsersProjectMemberships(): Route = path(usersBasePath / "iri" / Segment / "project-memberships") { userIri => get { requestContext => @@ -539,9 +501,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: add user to project + * add user to project */ - @ApiMayChange private def addUserToProjectMembership(): Route = path(usersBasePath / "iri" / Segment / "project-memberships" / Segment) { (userIri, projectIri) => post { requestContext => @@ -586,9 +547,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: remove user from project (and all groups belonging to this project) + * remove user from project (and all groups belonging to this project) */ - @ApiMayChange private def removeUserFromProjectMembership(): Route = path(usersBasePath / "iri" / Segment / "project-memberships" / Segment) { (userIri, projectIri) => delete { requestContext => @@ -633,9 +593,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: get user's project admin memberships + * get user's project admin memberships */ - @ApiMayChange private def getUsersProjectAdminMemberships(): Route = path(usersBasePath / "iri" / Segment / "project-admin-memberships") { userIri => get { requestContext => @@ -665,9 +624,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: add user to project admin + * add user to project admin */ - @ApiMayChange private def addUserToProjectAdminMembership(): Route = path(usersBasePath / "iri" / Segment / "project-admin-memberships" / Segment) { (userIri, projectIri) => post { requestContext => @@ -712,9 +670,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: remove user from project admin membership + * remove user from project admin membership */ - @ApiMayChange private def removeUserFromProjectAdminMembership(): Route = path(usersBasePath / "iri" / Segment / "project-admin-memberships" / Segment) { (userIri, projectIri) => delete { requestContext => @@ -759,9 +716,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: get user's group memberships + * get user's group memberships */ - @ApiMayChange private def getUsersGroupMemberships(): Route = path(usersBasePath / "iri" / Segment / "group-memberships") { userIri => get { requestContext => @@ -790,9 +746,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: add user to group + * add user to group */ - @ApiMayChange private def addUserToGroupMembership(): Route = path(usersBasePath / "iri" / Segment / "group-memberships" / Segment) { (userIri, groupIri) => post { requestContext => @@ -834,9 +789,8 @@ class UsersRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) wit } /** - * API MAY CHANGE: remove user from group + * remove user from group */ - @ApiMayChange private def removeUserFromGroupMembership(): Route = path(usersBasePath / "iri" / Segment / "group-memberships" / Segment) { (userIri, groupIri) => delete { requestContext => diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/CreateListItemsRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/CreateListItemsRouteADM.scala index 60671706f5..25b7fe9271 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/CreateListItemsRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/CreateListItemsRouteADM.scala @@ -8,11 +8,9 @@ package org.knora.webapi.routing.admin.lists import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.PathMatcher import akka.http.scaladsl.server.Route -import io.swagger.annotations._ import zio.prelude.Validation import java.util.UUID -import javax.ws.rs.Path import scala.concurrent.Future import dsp.errors.BadRequestException @@ -33,8 +31,6 @@ import org.knora.webapi.routing.RouteUtilADM * * @param routeData the [[KnoraRouteData]] to be used in constructing the route. */ -@Api(value = "lists", produces = "application/json") -@Path("/admin/lists") class CreateListItemsRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with Authenticator @@ -46,28 +42,6 @@ class CreateListItemsRouteADM(routeData: KnoraRouteData) createListRootNode() ~ createListChildNode() - @ApiOperation( - value = "Add new list", - nickname = "addList", - httpMethod = "POST", - response = classOf[ListGetResponseADM] - ) - @ApiImplicitParams( - Array( - new ApiImplicitParam( - name = "body", - value = "\"list\" to create", - required = true, - dataTypeClass = classOf[ListRootNodeCreateApiRequestADM], - paramType = "body" - ) - ) - ) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) /** * Creates a new list (root node). */ @@ -115,29 +89,6 @@ class CreateListItemsRouteADM(routeData: KnoraRouteData) } } - @Path("/{IRI}") - @ApiOperation( - value = "Add new node", - nickname = "addListNode", - httpMethod = "POST", - response = classOf[ChildNodeInfoGetResponseADM] - ) - @ApiImplicitParams( - Array( - new ApiImplicitParam( - name = "body", - value = "\"node\" to create", - required = true, - dataTypeClass = classOf[ListChildNodeCreateApiRequestADM], - paramType = "body" - ) - ) - ) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) /** * Creates a new list child node. */ @@ -192,5 +143,4 @@ class CreateListItemsRouteADM(routeData: KnoraRouteData) } } } - } diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/GetListItemsRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/GetListItemsRouteADM.scala index bed8f2f9e9..dc60b1e20a 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/GetListItemsRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/GetListItemsRouteADM.scala @@ -8,9 +8,7 @@ package org.knora.webapi.routing.admin.lists import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.PathMatcher import akka.http.scaladsl.server.Route -import io.swagger.annotations._ -import javax.ws.rs.Path import scala.concurrent.Future import dsp.errors.BadRequestException @@ -26,8 +24,6 @@ import org.knora.webapi.routing.RouteUtilADM * * @param routeData the [[KnoraRouteData]] to be used in constructing the route. */ -@Api(value = "lists", produces = "application/json") -@Path("/admin/lists") class GetListItemsRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with Authenticator @@ -42,12 +38,6 @@ class GetListItemsRouteADM(routeData: KnoraRouteData) getListOrNodeInfo("nodes") ~ getListInfo() - @ApiOperation(value = "Get lists", nickname = "getlists", httpMethod = "GET", response = classOf[ListsGetResponseADM]) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) /** * Returns all lists optionally filtered by project. */ @@ -80,13 +70,6 @@ class GetListItemsRouteADM(routeData: KnoraRouteData) } } - @Path("/{IRI}") - @ApiOperation(value = "Get a list", nickname = "getlist", httpMethod = "GET", response = classOf[ListGetResponseADM]) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) /** * Returns a list node, root or child, with children (if exist). */ diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/UpdateListItemsRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/UpdateListItemsRouteADM.scala index 2fcda0fea9..448e1eba94 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/UpdateListItemsRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/lists/UpdateListItemsRouteADM.scala @@ -8,11 +8,9 @@ package org.knora.webapi.routing.admin.lists import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.PathMatcher import akka.http.scaladsl.server.Route -import io.swagger.annotations._ import zio.prelude.Validation import java.util.UUID -import javax.ws.rs.Path import scala.concurrent.Future import dsp.errors.BadRequestException @@ -45,29 +43,6 @@ class UpdateListItemsRouteADM(routeData: KnoraRouteData) updateNodePosition() ~ updateList() - @Path("/{IRI}/name") - @ApiOperation( - value = "Update Node Name", - nickname = "putNodeName", - httpMethod = "PUT", - response = classOf[NodeInfoGetResponseADM] - ) - @ApiImplicitParams( - Array( - new ApiImplicitParam( - name = "body", - value = "\"node name\" to update", - required = true, - dataTypeClass = classOf[ChangeNodeNameApiRequestADM], - paramType = "body" - ) - ) - ) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) /** * Update name of an existing list node, either root or child. */ @@ -101,29 +76,6 @@ class UpdateListItemsRouteADM(routeData: KnoraRouteData) } } - @Path("/{IRI}/labels") - @ApiOperation( - value = "Update Node Labels", - nickname = "putNodeLabels", - httpMethod = "PUT", - response = classOf[NodeInfoGetResponseADM] - ) - @ApiImplicitParams( - Array( - new ApiImplicitParam( - name = "body", - value = "\"node labels\" to update", - required = true, - dataTypeClass = classOf[ChangeNodeLabelsApiRequestADM], - paramType = "body" - ) - ) - ) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) /** * Update labels of an existing list node, either root or child. */ @@ -157,29 +109,6 @@ class UpdateListItemsRouteADM(routeData: KnoraRouteData) } } - @Path("/{IRI}/comments") - @ApiOperation( - value = "Update Node Comments", - nickname = "putNodeComments", - httpMethod = "PUT", - response = classOf[NodeInfoGetResponseADM] - ) - @ApiImplicitParams( - Array( - new ApiImplicitParam( - name = "body", - value = "\"node comments\" to update", - required = true, - dataTypeClass = classOf[ChangeNodeCommentsApiRequestADM], - paramType = "body" - ) - ) - ) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) /** * Updates comments of an existing list node, either root or child. */ @@ -213,29 +142,6 @@ class UpdateListItemsRouteADM(routeData: KnoraRouteData) } } - @Path("/{IRI}/position") - @ApiOperation( - value = "Update Node Position", - nickname = "putNodePosition", - httpMethod = "PUT", - response = classOf[ListGetResponseADM] - ) - @ApiImplicitParams( - Array( - new ApiImplicitParam( - name = "body", - value = "\"node position\" to update", - required = true, - dataTypeClass = classOf[ChangeNodeCommentsApiRequestADM], - paramType = "body" - ) - ) - ) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) /** * Updates position of an existing list child node. */ @@ -266,29 +172,6 @@ class UpdateListItemsRouteADM(routeData: KnoraRouteData) } } - @Path("/{IRI}") - @ApiOperation( - value = "Update basic list information", - nickname = "putList", - httpMethod = "PUT", - response = classOf[RootNodeInfoGetResponseADM] - ) - @ApiImplicitParams( - Array( - new ApiImplicitParam( - name = "body", - value = "\"list\" to update", - required = true, - dataTypeClass = classOf[ListNodeChangeApiRequestADM], - paramType = "body" - ) - ) - ) - @ApiResponses( - Array( - new ApiResponse(code = 500, message = "Internal server error") - ) - ) /** * Updates existing list node, either root or child. */ diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/CreatePermissionRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/CreatePermissionRouteADM.scala index d144711181..1a7698e195 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/CreatePermissionRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/CreatePermissionRouteADM.scala @@ -8,10 +8,8 @@ package org.knora.webapi.routing.admin.permissions import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.PathMatcher import akka.http.scaladsl.server.Route -import io.swagger.annotations._ import java.util.UUID -import javax.ws.rs.Path import scala.concurrent.Future import org.knora.webapi.messages.admin.responder.permissionsmessages._ @@ -20,8 +18,6 @@ import org.knora.webapi.routing.KnoraRoute import org.knora.webapi.routing.KnoraRouteData import org.knora.webapi.routing.RouteUtilADM -@Api(value = "permissions", produces = "application/json") -@Path("/admin/permissions") class CreatePermissionRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with Authenticator diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/DeletePermissionRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/DeletePermissionRouteADM.scala index f5c2dbc48f..1b58a5a151 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/DeletePermissionRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/DeletePermissionRouteADM.scala @@ -8,10 +8,8 @@ package org.knora.webapi.routing.admin.permissions import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.PathMatcher import akka.http.scaladsl.server.Route -import io.swagger.annotations._ import java.util.UUID -import javax.ws.rs.Path import org.knora.webapi.messages.admin.responder.permissionsmessages._ import org.knora.webapi.routing.Authenticator @@ -19,8 +17,6 @@ import org.knora.webapi.routing.KnoraRoute import org.knora.webapi.routing.KnoraRouteData import org.knora.webapi.routing.RouteUtilADM -@Api(value = "permissions", produces = "application/json") -@Path("/admin/permissions") class DeletePermissionRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with Authenticator diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/GetPermissionsRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/GetPermissionsRouteADM.scala index 748d436d02..4a2513fe5c 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/GetPermissionsRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/GetPermissionsRouteADM.scala @@ -8,10 +8,8 @@ package org.knora.webapi.routing.admin.permissions import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.PathMatcher import akka.http.scaladsl.server.Route -import io.swagger.annotations._ import java.util.UUID -import javax.ws.rs.Path import org.knora.webapi.messages.admin.responder.permissionsmessages._ import org.knora.webapi.routing.Authenticator @@ -19,8 +17,6 @@ import org.knora.webapi.routing.KnoraRoute import org.knora.webapi.routing.KnoraRouteData import org.knora.webapi.routing.RouteUtilADM -@Api(value = "permissions", produces = "application/json") -@Path("/admin/permissions") class GetPermissionsRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with Authenticator diff --git a/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/UpdatePermissionRouteADM.scala b/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/UpdatePermissionRouteADM.scala index b8c40dbb38..cb7a9ed7c7 100644 --- a/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/UpdatePermissionRouteADM.scala +++ b/webapi/src/main/scala/org/knora/webapi/routing/admin/permissions/UpdatePermissionRouteADM.scala @@ -8,10 +8,8 @@ package org.knora.webapi.routing.admin.permissions import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.PathMatcher import akka.http.scaladsl.server.Route -import io.swagger.annotations._ import java.util.UUID -import javax.ws.rs.Path import dsp.errors.BadRequestException import org.knora.webapi.messages.admin.responder.permissionsmessages._ @@ -20,8 +18,6 @@ import org.knora.webapi.routing.KnoraRoute import org.knora.webapi.routing.KnoraRouteData import org.knora.webapi.routing.RouteUtilADM -@Api(value = "permissions", produces = "application/json") -@Path("/admin/permissions") class UpdatePermissionRouteADM(routeData: KnoraRouteData) extends KnoraRoute(routeData) with Authenticator