diff --git a/Jenkinsfile b/Jenkinsfile index f9bce763ed..545c2527ac 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -8,7 +8,7 @@ pipeline { agent { docker { - image 'scmmanager/java-build:11.0.15_10-2' + image 'scmmanager/java-build:17.0.9_9' args '-v /var/run/docker.sock:/var/run/docker.sock --group-add 998' label 'scmm-core' } @@ -72,8 +72,8 @@ pipeline { // in parallel with check? stage('Integration Tests') { steps { - // TODO remove obligatory rerun flag when flappy tests have been fixed - gradle '-PrerunIntegrationTests integrationTest' + // To rerun integration tests with each build, add '-PrerunIntegrationTests' to the gradle command + gradle 'integrationTest' junit allowEmptyResults: true, testResults: 'scm-it/build/test-results/javaIntegrationTests/*.xml,scm-ui/build/reports/e2e/*.xml' archiveArtifacts allowEmptyArchive: true, artifacts: 'scm-ui/e2e-tests/cypress/videos/*.mp4' archiveArtifacts allowEmptyArchive: true, artifacts: 'scm-ui/e2e-tests/cypress/screenshots/**/*.png' diff --git a/build-plugins/src/main/groovy/com/cloudogu/scm/IntegrationTestPlugin.groovy b/build-plugins/src/main/groovy/com/cloudogu/scm/IntegrationTestPlugin.groovy index a4344bb01f..01ecc6d025 100644 --- a/build-plugins/src/main/groovy/com/cloudogu/scm/IntegrationTestPlugin.groovy +++ b/build-plugins/src/main/groovy/com/cloudogu/scm/IntegrationTestPlugin.groovy @@ -45,6 +45,7 @@ class IntegrationTestPlugin implements Plugin { it.extension = extension it.waitForCompletion = false it.frontend = false + it.configFileDirectory = './src/main/resources' dependsOn 'write-server-config', 'prepare-home' } diff --git a/build-plugins/src/main/groovy/com/cloudogu/scm/JavaModulePlugin.groovy b/build-plugins/src/main/groovy/com/cloudogu/scm/JavaModulePlugin.groovy index d215022b51..99d7ac4bce 100644 --- a/build-plugins/src/main/groovy/com/cloudogu/scm/JavaModulePlugin.groovy +++ b/build-plugins/src/main/groovy/com/cloudogu/scm/JavaModulePlugin.groovy @@ -39,14 +39,15 @@ class JavaModulePlugin implements Plugin { project.java { toolchain { - languageVersion = JavaLanguageVersion.of(11) + languageVersion = JavaLanguageVersion.of(17) } - withJavadocJar() + //TODO Fix javadoc errors which breaks the build +// withJavadocJar() withSourcesJar() } project.tasks.withType(JavaCompile) { - options.release = 11 + options.release = 17 options.encoding = 'UTF-8' } @@ -56,7 +57,7 @@ class JavaModulePlugin implements Plugin { project.sonarqube { properties { - property "sonar.java.source", "11" + property "sonar.java.source", "17" } } diff --git a/build-plugins/src/main/groovy/com/cloudogu/scm/RunTask.groovy b/build-plugins/src/main/groovy/com/cloudogu/scm/RunTask.groovy index d4c73e9d06..58683dcccf 100644 --- a/build-plugins/src/main/groovy/com/cloudogu/scm/RunTask.groovy +++ b/build-plugins/src/main/groovy/com/cloudogu/scm/RunTask.groovy @@ -60,6 +60,10 @@ class RunTask extends DefaultTask { @Option(option = 'debug-port', description = 'Port for debugger') String debugPort = "5005" + @Input + @Option(option = 'configFileDirectory', description = 'Path to config file') + String configFileDirectory = '' + @TaskAction void exec() { List> actions = new ArrayList<>() @@ -85,8 +89,9 @@ class RunTask extends DefaultTask { return } } catch (IOException ex) { - Thread.sleep(500) + ex.printStackTrace() } + Thread.sleep(500) } throw new GradleException("scm-server not reachable") } @@ -124,6 +129,9 @@ class RunTask extends DefaultTask { args(new File(project.buildDir, 'server/config.json').toString()) environment 'NODE_ENV', 'development' classpath project.buildscript.configurations.classpath + if (configFileDirectory != '') { + classpath configFileDirectory + } systemProperties = runProperties if (debugJvm) { debug = true diff --git a/build-plugins/src/main/groovy/com/cloudogu/scm/ScmServer.groovy b/build-plugins/src/main/groovy/com/cloudogu/scm/ScmServer.groovy index 5fa371fc99..d7143bc3f9 100644 --- a/build-plugins/src/main/groovy/com/cloudogu/scm/ScmServer.groovy +++ b/build-plugins/src/main/groovy/com/cloudogu/scm/ScmServer.groovy @@ -26,16 +26,15 @@ package com.cloudogu.scm import com.google.common.base.Strings import groovy.json.JsonSlurper +import org.eclipse.jetty.server.Handler import org.eclipse.jetty.server.HttpConfiguration import org.eclipse.jetty.server.HttpConnectionFactory import org.eclipse.jetty.server.Server import org.eclipse.jetty.server.ServerConnector -import org.eclipse.jetty.util.component.AbstractLifeCycle -import org.eclipse.jetty.util.component.LifeCycle -import org.eclipse.jetty.webapp.WebAppContext -import org.eclipse.jetty.server.Handler import org.eclipse.jetty.server.handler.HandlerList import org.eclipse.jetty.server.handler.ShutdownHandler +import org.eclipse.jetty.util.component.LifeCycle +import org.eclipse.jetty.webapp.WebAppContext import java.awt.Desktop @@ -51,7 +50,7 @@ class ScmServer { void start() throws Exception { info('start scm-server at port %s', configuration.port) - System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); + System.setProperty("jakarta.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); System.setProperty('scm.home', configuration.home) if (configuration.disableCorePlugins) { @@ -59,10 +58,6 @@ class ScmServer { System.setProperty('sonia.scm.boot.disable-core-plugin-extraction', 'true') } - if (!Strings.isNullOrEmpty(configuration.loggingConfiguration)) { - System.setProperty('logback.configurationFile', configuration.loggingConfiguration) - } - info('set stage %s', configuration.stage) System.setProperty('scm.stage', configuration.stage) @@ -80,7 +75,7 @@ class ScmServer { createShutdownHandler() ] as Handler[]) server.setHandler(handlerList) - server.addLifeCycleListener(new AbstractLifeCycle.AbstractLifeCycleListener() { + server.addEventListener(new LifeCycle.Listener() { @Override void lifeCycleStarted(LifeCycle event) { diff --git a/build-plugins/src/main/groovy/com/cloudogu/scm/UploadTask.groovy b/build-plugins/src/main/groovy/com/cloudogu/scm/UploadTask.groovy index af057b5d0b..44d6ff1f94 100644 --- a/build-plugins/src/main/groovy/com/cloudogu/scm/UploadTask.groovy +++ b/build-plugins/src/main/groovy/com/cloudogu/scm/UploadTask.groovy @@ -70,8 +70,7 @@ abstract class UploadTask extends DefaultTask { } private void doUpload() { - SslContextFactory.Client sslContextFactory = new SslContextFactory.Client() - HttpClient client = new HttpClient(sslContextFactory) + HttpClient client = new HttpClient() try { client.start() ContentResponse response = createRequest(client).send() diff --git a/build.gradle b/build.gradle index 1d35524d91..1a35cb6009 100644 --- a/build.gradle +++ b/build.gradle @@ -52,6 +52,9 @@ dependencies { // lombok api libraries.lombok + // jakarta + api libraries.jakartaAnnotationApi + // servlet api api libraries.servletApi diff --git a/docs/en/administration/scm-server.md b/docs/en/administration/scm-server.md index fb382e03f2..9bfdce633b 100644 --- a/docs/en/administration/scm-server.md +++ b/docs/en/administration/scm-server.md @@ -4,14 +4,139 @@ subtitle: Various configuration options for the SCM-Server displayToc: true --- -## Https +SCM-Manager can be configured in several ways. We recommend using `config.yml` to have most of the settings in +one place. +However, if required, each option in this configuration can also be set via environment variables. +See the relevant topics below for more information. -In order to use https with scm-server, you need a keystore with a certificate and the corresponding secret key. -In the following we will use `openssl` to create a self signed certificate for demonstration purposes. +## Change log level -### Create self signed certificate +The log level can be configured in the `config.yml`. +You may either change the root log level to change the log level globally for all loggers. +Also, new specific logger can be added to control logging in a fine-grained style. -**Warning**: Do not use self signed certificates in production, this is only for demonstration purposes. +#### Example + +```yaml +log: + # General logging level + rootLevel: WARN + + # Custom specific loggers + # The "name" has to be the path of the classes to be logged with this logger + logger: + - name: sonia.scm + level: DEBUG + - name: com.cloudogu.scm + level: DEBUG +``` + +To override this config with environment variables you could set it like: + +`SCM_LOG_ROOT_LEVEL` to one of the log levels, like `DEBUG` +`SCM_LOG_LOGGER` with a comma-separated list of your loggers, like `sonia.scm:DEBUG,com.cloudogu.scm:TRACE` + +Supported log levels are: TRACE, DEBUG, INFO, WARN, ERROR + +### Logback + +If you want to configure more advanced loggers which are beyond this simple configuration, you may still use +a logback configuration file. +You have to enable your logback configuration by setting the file path with the system +property `logback.configurationFile`, like `-Dlogback.configurationFile=logging.xml`. +If the logback configuration is enabled, the log configuration of the `config.yml` will be ignored. + +#### Example + +```xml + + + + /var/log/scm/scm-manager.log + + + /var/log/scm/scm-manager-%i.log + 1 + 10 + + + + 10MB + + + true + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n + + + + + + + + + + + + + + + + + + + + + + +``` + +## Change host and port + +The listener host and port of your SCM-Server can directly be edited in the top level of your `config.yml`. + +#### Example + +```yaml +# This is the host adresse, `0.0.0.0` means it listens on every interface +addressBinding: 0.0.0.0 +# This is the exposed port for your application +port: 8080 +``` + +To override this config with environment variables you could set it like: + +`SCM_SERVER_PORT` to your port +`SCM_SERVER_ADDRESS_BINDING` to the destination ip / hostname + +## Change context path + +SCM-Server context path can be set directly in the top level of your `config.yml`. +If you want your server without a context path (use `root`), you can change this option to be `/`. + +#### Example + +```yaml +contextPath: / +``` + +To override this config with environment variables you could set it like: + +`SCM_SERVER_CONTEXT_PATH` to `/myContextPath` + +## SSL + +In order to use https with SCM-Server, you need a keystore with a certificate and the corresponding secret key. +In the following we will use openssl to create a self-signed certificate for demonstration purposes. + +**Warning**: Do not use self-signed certificates in production, this is only for demonstration purposes. ```bash openssl req -new -x509 -newkey rsa:2048 -sha256 -keyout tls.key -out tls.crt @@ -19,32 +144,32 @@ openssl req -new -x509 -newkey rsa:2048 -sha256 -keyout tls.key -out tls.crt This command will ask a few questions about metadata for generated certificate: -* PEM pass phrase: This is a password to protect the scret key -* Country Name (2 letter code) -* State or Province Name (full name) -* Locality Name (eg, city) -* Organization Name (eg, company) -* Organizational Unit Name (eg, section) -* Common Name (eg, fully qualified host name) -* Email Address +- PEM pass phrase: This is a password to protect the scret key +- Country Name (2 letter code) +- State or Province Name (full name) +- Locality Name (eg, city) +- Organization Name (eg, company) +- Organizational Unit Name (eg, section) +- Common Name (eg, fully qualified host name) +- Email Address Make sure that the common name matches the fqdn, which you are using to access SCM-Manager. -#### Browsers +### Browsers -In order to use a self signed certificate the certificate must be imported into you browser. +In order to use a self-signed certificate the certificate must be imported into you browser. -#### Configure Git +### Configure Git -To use git with a self signed certificate, we have to add the certificate path to the configuration. +To use git with a self-signed certificate, we have to add the certificate path to the configuration. ```bash git config http.sslCAInfo /complete/path/to/tls.crt ``` -#### Configure Mercurial +### Configure Mercurial -To use mercurial with a self signed certificate, we have to add the certificate path to the configuration. +To use mercurial with a self-signed certificate, we have to add the certificate path to the configuration. ```ini [web] @@ -53,131 +178,46 @@ cacerts = /complete/path/to/cert.pem ### Create keystore -Create a keystore in pkcs12 format. -This command can be used with the self signed certificate from above or with a valid certificate from an authority. +Create a keystore in pkcs12 format. This command can be used with the self-signed certificate from above or with a valid +certificate from an authority. ```bash openssl pkcs12 -inkey tls.key -in tls.crt -export -out keystore.pkcs12 ``` -If your secret key is protected with a pass phrase, you have to enter it first. -Than you have to enter an export password to protect your keystore. +If your secret key is protected with a passphrase, you must enter this first. You must then enter an export password to +protect your keystore. ### Server configuration -Add the following snippet at the end of your `server-config.xml`, be sure it is inside the `Configure` tag: +Adjust your `config.yml` to apply your prepared keystore with configured certificate. -```xml - +#### Example - - - - /conf/keystore.pkcs12 - - - PKCS12 - - secret - - - - - - - TLSv1.2 - TLSv1.3 - - - - - - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 - TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - http/1.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - +```yaml +https: + # If the key store path is not set, the https config will be ignored entirely. + # This must be set to your created keystore from above. + keyStorePath: /conf/keystore.pkcs12 + # The password of your keystore. + keyStorePassword: secret + # The type of your keystore. Use pkcs12 or jks for java keystore. + keyStoreType: PKCS12 + # The port of your https connector + sslPort: 443 + # Automatically redirects incoming http requests to this https connector + redirectHttpToHttps: true ``` -The snipped above assumes your keystore is in the pkcs12 format and is stored at `conf/keystore.pkcs12` with the password `secret`. -You have to tweek this settings to match your setup. -After modifying your `server-config.xml`, you have to **restart** your SCM-Manager instance. -Now SCM-Manager should open a second port with **https** (in the example above **8443**). +## Change directories + +The default directories are platform-specific and therefore could be different if you try scm-server on different +operation systems. Paths starting with `/` are absolute to your file system. If you use relative paths without a +starting `/`, your configured path will be located under the base directory of your scm-server. + +#### Example + +```yaml +tempDir: /tmp +homeDir: scm-home +``` diff --git a/docs/en/development/decision-table.md b/docs/en/development/decision-table.md index b4e5c9ab12..78590bba99 100644 --- a/docs/en/development/decision-table.md +++ b/docs/en/development/decision-table.md @@ -15,7 +15,7 @@ Using this has the following implications: - The generated code is not explicit (the lombok plugin generates bytecode) - Especially for `hashCode` and `equals` a lot of code with a high complexity is generated. This has implications for test coverage. Even though lombok supports the generation of `Generated` - annotations (own or javax), this has no effect in Sonar. + annotations (own or jakarta), this has no effect in Sonar. First, this will be used for data transfer objects (DTO) in the REST endpoints. To avoid the mentioned complexity of `hashCode` and `equals`, these should not be generated. @@ -30,7 +30,11 @@ The following lombok annotations will be used for DTOs: ### /repo/ & /repos/ as URI prefixes -The URI-format for accessing a repository, be it with a browser, or cloning/pulling via git/hg/svn, is defined to be `/repo/:namespace/:name`. The decision was made to allow users to choose namespaces as they please. If there would not be a prefix, some namespaces (e.g. `user`, `users`) would have to be reserved, since the names are already in use by SCM Manager itself. The `/repos` URI linked to a list of repositories, as well as operations such as creating a repositoriy (`/repos/create`). +The URI-format for accessing a repository, be it with a browser, or cloning/pulling via git/hg/svn, is defined to +be `/repo/:namespace/:name`. The decision was made to allow users to choose namespaces as they please. If there would +not be a prefix, some namespaces (e.g. `user`, `users`) would have to be reserved, since the names are already in use by +SCM Manager itself. The `/repos` URI linked to a list of repositories, as well as operations such as creating a +repositoriy (`/repos/create`). ### Error handling @@ -57,9 +61,15 @@ For simple objects like users and groups we don't think that we will need more e ### Logging -Logging can be cucial when it comes to identify bugs in test or production environments. At implementation time one cannot foresee all possible error cases and therefore cannot determine with full certanty what informations will be needed and what can be neglected. Logging only crucial errors leaves the developer with no idea what events might have lead to the error. On the other hand logging too much will overburden the log, making it harder to handle and maybe hiding interesting steps. +Logging can be cucial when it comes to identify bugs in test or production environments. At implementation time one +cannot foresee all possible error cases and therefore cannot determine with full certanty what informations will be +needed and what can be neglected. Logging only crucial errors leaves the developer with no idea what events might have +lead to the error. On the other hand logging too much will overburden the log, making it harder to handle and maybe +hiding interesting steps. -Therefore it is best practice to be able to select the detail level of informations to log (called the "log level"). To support this feature SCM-Manager uses [slf4j](https://www.slf4j.org/). Using this library one can log informations with the following log levels: +Therefore it is best practice to be able to select the detail level of informations to log (called the "log level"). To +support this feature SCM-Manager uses [slf4j](https://www.slf4j.org/). Using this library one can log informations with +the following log levels: * ERROR * WARN @@ -67,13 +77,15 @@ Therefore it is best practice to be able to select the detail level of informati * DEBUG * TRACE -As a default the log level for SCM-Manager is INFO, so that by default all logs with the levels ERROR, WARN and INFO are stored. Finer levels can be enabled manually. +As a default the log level for SCM-Manager is INFO, so that by default all logs with the levels ERROR, WARN and INFO are +stored. Finer levels can be enabled manually. ### Log levels to use We have agreed to apply to the following guidelines regarding log levels: -- ERROR should be used for fatal errors that could not be handled by the program and therefore leads to failures for the user, for example +- ERROR should be used for fatal errors that could not be handled by the program and therefore leads to failures for the + user, for example - IO errors reading a database file - IO errors accessing repositories - WARN should be used for errors that could be handled somewhat graceful, but that should be inspected, for example diff --git a/docs/en/development/error-handling.md b/docs/en/development/error-handling.md index 518bd58fad..c5231f10d4 100644 --- a/docs/en/development/error-handling.md +++ b/docs/en/development/error-handling.md @@ -8,7 +8,11 @@ As a highly extensible product, SCM-Manager offers at least three ways to intera - the REST API, and - the Java API -Having these three layers, the error handling should be consistent among these. That is, as a developer I would not like to have custom made error codes in the REST layer that I cannot find in the Java API. Furthermore it is essential to get precise error messages with hints how to find a way out (if possible), not only for a programmer making interactive calls, but also for other programs. Last but not least it should be easy for plugin developers to adapt the error handling. +Having these three layers, the error handling should be consistent among these. That is, as a developer I would not like +to have custom made error codes in the REST layer that I cannot find in the Java API. Furthermore it is essential to get +precise error messages with hints how to find a way out (if possible), not only for a programmer making interactive +calls, but also for other programs. Last but not least it should be easy for plugin developers to adapt the error +handling. On the GUI layer, these information have to be translated into messages that can be easily handled. @@ -18,21 +22,21 @@ Here are some example error cases: *Possible errors:* - - The repository is missing - - There is no such branch - - The user is not authorized to read the metadata - - The repository is corrupt on file system level +- The repository is missing +- There is no such branch +- The user is not authorized to read the metadata +- The repository is corrupt on file system level --- - *Use case:* Create a new user +*Use case:* Create a new user - *Possible errors:* +*Possible errors:* - - Invalid characters in name - - Missing mandatory property - - Conflict with an existing user - - Insufficient priviliges +- Invalid characters in name +- Missing mandatory property +- Conflict with an existing user +- Insufficient priviliges --- @@ -40,18 +44,24 @@ Here are some example error cases: *Possible errors:* - - The repository does not exist - - The repository was modified concurrently - - Invalid e-mail address +- The repository does not exist +- The repository was modified concurrently +- Invalid e-mail address ## Java API -In SCM-Manager we make heavy use of Java `Exception`s, not only for technical exceptions in the program flow like reading corrupt file systems, but also for "user errors" like illegal values or requests for missing data. +In SCM-Manager we make heavy use of Java `Exception`s, not only for technical exceptions in the program flow like +reading corrupt file systems, but also for "user errors" like illegal values or requests for missing data. -These exceptions are handled by JEE [`ExceptionMapper`](https://docs.oracle.com/javaee/7/api/javax/ws/rs/ext/ExceptionMapper.html) s. Doing so, it is possible to concentrate on implementing the "happy path" without the need to explicitly handle error cases everywhere (for example you do not have to check whether got `null` as a result). Nonetheless we still had to decide whether to use checked or unchecked exceptions. We have chosen to use unchecked exceptions due to the following reasons: +These exceptions are handled by +JEE [`ExceptionMapper`](https://docs.oracle.com/javaee/7/api/jakarta/ws/rs/ext/ExceptionMapper.html) s. Doing so, it is +possible to concentrate on implementing the "happy path" without the need to explicitly handle error cases everywhere ( +for example you do not have to check whether got `null` as a result). Nonetheless we still had to decide whether to use +checked or unchecked exceptions. We have chosen to use unchecked exceptions due to the following reasons: - - Checked exceptions would have had to be declared everywhere. - - A checked exception can somehow trigger a "I have to handle this though I don't know how" feeling that would be wrong, because we do have mappers for these exceptions. +- Checked exceptions would have had to be declared everywhere. +- A checked exception can somehow trigger a "I have to handle this though I don't know how" feeling that would be wrong, + because we do have mappers for these exceptions. Therefore handling such an exception has to be a concious decision. @@ -65,58 +75,84 @@ A `NotFoundException` is thrown, whenever "things" where requested but were not #### `AlreadyExistsException` -This exception is thrown whenever an entity cannot be created, because another entity with the same key identifyer exists. +This exception is thrown whenever an entity cannot be created, because another entity with the same key identifyer +exists. #### `ConcurrentModificationException` -When you try to modify an entity based on an outdated version, this exception is thrown. For entities like user, group or repository the "last modified" timestamp of `ModelObject` is used to check this. +When you try to modify an entity based on an outdated version, this exception is thrown. For entities like user, group +or repository the "last modified" timestamp of `ModelObject` is used to check this. #### `NativeRepositoryAccessException` -Failures while accessing native repositories (most of the time) result in `java.io.IOException`s. To distinguish these exceptions from other I/O errors like network exceptions and to make them unchecked, we wrap them in `NativeRepositoryAccessException`. +Failures while accessing native repositories (most of the time) result in `java.io.IOException`s. To distinguish these +exceptions from other I/O errors like network exceptions and to make them unchecked, we wrap them +in `NativeRepositoryAccessException`. #### `ResteasyViolationException` -Input validation is handled using [RESTEasy's validation support](https://docs.jboss.org/resteasy/docs/3.0.0.Final/userguide/html/Validation.html). Constraint violations result in `ResteasyViolationException`s. +Input validation is handled +using [RESTEasy's validation support](https://docs.jboss.org/resteasy/docs/3.0.0.Final/userguide/html/Validation.html). +Constraint violations result in `ResteasyViolationException`s. #### All other runtime exceptions -All other `java.lang.RuntimeException`s can be treated as unexpected errors, that either hint to severe problems (eg. disk access failures) or implementation errors. It is unlikely that these can be handled by the program gracefully. They will be caught by a generic exception handler which will wrap them in a new exception providing further SCM specific information. +All other `java.lang.RuntimeException`s can be treated as unexpected errors, that either hint to severe problems (eg. +disk access failures) or implementation errors. It is unlikely that these can be handled by the program gracefully. They +will be caught by a generic exception handler which will wrap them in a new exception providing further SCM specific +information. #### Checked exceptions -Above we mentioned, that we want to use unchecked exceptions only. Therefore we have to wrap checked exceptions for example created by libraries or frarmeworks to make them unchecked. Normally it is sufficiant to wrap them in a RuntimeException using a proper message, except you plan to handle them somewhere else than at resource level (then it would be appropriate to introduce a new exception class extending `RuntimeException`). +Above we mentioned, that we want to use unchecked exceptions only. Therefore we have to wrap checked exceptions for +example created by libraries or frarmeworks to make them unchecked. Normally it is sufficiant to wrap them in a +RuntimeException using a proper message, except you plan to handle them somewhere else than at resource level (then it +would be appropriate to introduce a new exception class extending `RuntimeException`). ### Enrichment of exceptions #### Context -Most of these exceptions must provide information about _what_ could not have been found, updated, whatsoever. This is necessary, because otherwise it may not be clear at what step of a potentionally complex process this exception occured. Though this sounds easy, it has some complexity because for example the access of a file in a repository can fail on many levels (the file is missing in the given revision, the revision is missing, or the repository itself is missing). In these cases you have to know the complete access path (what file in what revision of what changeset in what repository). +Most of these exceptions must provide information about _what_ could not have been found, updated, whatsoever. This is +necessary, because otherwise it may not be clear at what step of a potentionally complex process this exception occured. +Though this sounds easy, it has some complexity because for example the access of a file in a repository can fail on +many levels (the file is missing in the given revision, the revision is missing, or the repository itself is missing). +In these cases you have to know the complete access path (what file in what revision of what changeset in what +repository). -To ensure that this is done in a reproducable and consistent way, SCM-Manager will provide utility functions to creaate such exceptions. +To ensure that this is done in a reproducable and consistent way, SCM-Manager will provide utility functions to creaate +such exceptions. #### Transaction IDs -To be able to retrace the cause for exceptions, it is helpful to link log messages to these exceptions. To do so, SCM-Manager introduces transaction ids that are generated for single requests or other related actions like the processing of hooks or cron jobs. This transaction id will be part of every log message and every API response. +To be able to retrace the cause for exceptions, it is helpful to link log messages to these exceptions. To do so, +SCM-Manager introduces transaction ids that are generated for single requests or other related actions like the +processing of hooks or cron jobs. This transaction id will be part of every log message and every API response. For http requests, this can be done using MDC filter. #### Identification of exceptions -To be able to identify different types of exceptions even outside of the java ecosystem, each SCM-Manager exception class will get a unique type id that will be created using the `DefaultKeyGenerator` during development. We chose to generate these ids and not "human readable" ones to prevent collisions between plugins. +To be able to identify different types of exceptions even outside of the java ecosystem, each SCM-Manager exception +class will get a unique type id that will be created using the `DefaultKeyGenerator` during development. We chose to +generate these ids and not "human readable" ones to prevent collisions between plugins. ### Logging of exceptions -To be able to retrace errors a proper logging is indispensible. So we decided to use the following rules for logging exceptions: +To be able to retrace errors a proper logging is indispensible. So we decided to use the following rules for logging +exceptions: - - Native SCM manager exceptions will be logged at log level `INFO` with their message, only. The complete stacktrace will be logged at log level `DEBUG`. - - All other exceptions will be logged on level `WARN` with the complete stacktrace, because they indicate something going wrong on a fundamental level. +- Native SCM manager exceptions will be logged at log level `INFO` with their message, only. The complete stacktrace + will be logged at log level `DEBUG`. +- All other exceptions will be logged on level `WARN` with the complete stacktrace, because they indicate something + going wrong on a fundamental level. ## REST API ### Status codes -SCM-Manager uses [http status codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) to identify types of errors (and successes, that is) and doing so provides a first hint, what may have gone wrong: +SCM-Manager uses [http status codes](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) to identify types of +errors (and successes, that is) and doing so provides a first hint, what may have gone wrong: | Status code | Principal error cause | |-------------|-----------------------| @@ -127,12 +163,14 @@ SCM-Manager uses [http status codes](https://en.wikipedia.org/wiki/List_of_HTTP_ | 401 | Missing authentication (not logged in?) | | 403 | Missing authorization | | 404 | The thing you are looking does not exist | -| 409 | Your update was rejected because you relate to an outdated version (maybe this item was changed in the meantime) _or_ the item could not be created because the key already exists | +| 409 | Your update was rejected because you relate to an outdated version (maybe this item was changed in the meantime) _ +or_ the item could not be created because the key already exists | | 500 | The "You are not to blame" error; something unexpected went wrong while processing the request | ### Further information -Whenever possible, an error response contains useful details about the error in a simple json format. These information are _not_ translated, so this is the responsibility of the frontend. +Whenever possible, an error response contains useful details about the error in a simple json format. These information +are _not_ translated, so this is the responsibility of the frontend. | key | content | availability | |-----|---------|--------------| @@ -144,7 +182,8 @@ Whenever possible, an error response contains useful details about the error in Error objects will contain no stack traces. -For SCM exceptions, the message will be created from the message of the java exception. For other exceptions this will be a generic message in most cases. +For SCM exceptions, the message will be created from the message of the java exception. For other exceptions this will +be a generic message in most cases. Here is an example, how a concrete exception may look like in a json response: @@ -153,10 +192,19 @@ Here is an example, how a concrete exception may look like in a json response: "transactionId": "7D82atGf3", "errorCode": "H823fFAt", "context": [ - {"type": "repository", "id": "scmmanager/test"}, - {"type": "branch", "id": "master"}, - {"type": "file", "id": ".gitignore"} - ], + { + "type": "repository", + "id": "scmmanager/test" + }, + { + "type": "branch", + "id": "master" + }, + { + "type": "file", + "id": ".gitignore" + } + ], "message": "file not found", "url": "https://www.scm-manager.org/errors/H823fFAt" } @@ -164,27 +212,38 @@ Here is an example, how a concrete exception may look like in a json response: ### Missing resources (404) -The http status code 404 is a special case, because it is a fundamental status code that can be created on a lot of events: +The http status code 404 is a special case, because it is a fundamental status code that can be created on a lot of +events: - Your proxy has a misconfiguration and you are talking with a static website instead of SCM-Manager - You are using a path without a valid endpoint in SCM-Manager - You are requesting a entity that does not exists -Some say, that you should not try to interpret the body of a 404 response, because the origin of the response cannot be taken for granted. Nonetheless we decided to use this http status code to indicate requests for missing resources, because in our view this is what most people would expect. +Some say, that you should not try to interpret the body of a 404 response, because the origin of the response cannot be +taken for granted. Nonetheless we decided to use this http status code to indicate requests for missing resources, +because in our view this is what most people would expect. ### Internal errors (500) -Internal errors boil down to the following message: An error occured, that could not be handled in a reasonable way by the program. In these cases often only an administrator can help. Examples are out-of-memory errors, failing disk I/O, timeouts accessing other services, or (to be honest) simple programming errors that have to be fixed in further releases. To be able to trace these errors in the logs one can use the transaction ids. +Internal errors boil down to the following message: An error occured, that could not be handled in a reasonable way by +the program. In these cases often only an administrator can help. Examples are out-of-memory errors, failing disk I/O, +timeouts accessing other services, or (to be honest) simple programming errors that have to be fixed in further +releases. To be able to trace these errors in the logs one can use the transaction ids. ## GUI -As an end user of the SCM-Manager I would not like to see confusing internals, but rather have a meaningful message in my language of choice. Therefore it is necessary to identify error types on a fine level. This can be done using the errorCode provided in each error object. +As an end user of the SCM-Manager I would not like to see confusing internals, but rather have a meaningful message in +my language of choice. Therefore it is necessary to identify error types on a fine level. This can be done using the +errorCode provided in each error object. -Basically we have to differentiate between errors the user can handle ("user errors") and technical exceptions. For user errors a meaningful message can be generated giving hints to what the user has done "wrong". All other exceptions can be handled by displaying a "sorry, this did not work as expected" message with the transaction id. +Basically we have to differentiate between errors the user can handle ("user errors") and technical exceptions. For user +errors a meaningful message can be generated giving hints to what the user has done "wrong". All other exceptions can be +handled by displaying a "sorry, this did not work as expected" message with the transaction id. ## Resources / Best Practices -While creating this concepts we tried to adhere to best practices considering APIs of Twitter, Facebook, Bing, Spotify and others, as summarized in the following articles: +While creating this concepts we tried to adhere to best practices considering APIs of Twitter, Facebook, Bing, Spotify +and others, as summarized in the following articles: * [RESTful API Design: What About Errors? (Apigee)](https://apigee.com/about/blog/technology/restful-api-design-what-about-errors) * [Best Practices for API Error Handling (Nordic APIS)](https://nordicapis.com/best-practices-api-error-handling/) diff --git a/docs/en/development/intellij-idea-configuration.md b/docs/en/development/intellij-idea-configuration.md index 9cda371957..8b0510f843 100644 --- a/docs/en/development/intellij-idea-configuration.md +++ b/docs/en/development/intellij-idea-configuration.md @@ -12,15 +12,15 @@ title: Intellij IDEA Configuration ### Settings * Build, Execution, Deployment / Compiler - * Add runtime assertions for non-null-annotated methods and parameters (must be checked) - * Configure annotation ... (of "Add runtime assertions...") - * Nullable annotations: select (✓) `javax.annotation.Nullable` - * NotNull annotations: select (✓) `javax.annotation.Nonnull` and check Instrument + * Add runtime assertions for non-null-annotated methods and parameters (must be checked) + * Configure annotation ... (of "Add runtime assertions...") + * Nullable annotations: select (✓) `jakarta.annotation.Nullable` + * NotNull annotations: select (✓) `jakarta.annotation.Nonnull` and check Instrument * Editor / Code Style / Java - * Tab Imports - * Class count to use import with '*': - * Names count to use static import with '*': + * Tab Imports + * Class count to use import with '*': + * Names count to use static import with '*': ## Frontend @@ -32,22 +32,22 @@ title: Intellij IDEA Configuration ### Settings * Languages & Frameworks / Node.js and NPM - * Package Manager: yarn + * Package Manager: yarn * Languages & Frameworks / Javascript / Code Quality Tools / ESLint - * Enable - * ESLint package: .../node_modules/eslint - * -OR- Automatic ESLint configuration + * Enable + * ESLint package: .../node_modules/eslint + * -OR- Automatic ESLint configuration * Languages & Frameworks / Javascript / Prettier - * Prettier package: .../node_modules/prettier + * Prettier package: .../node_modules/prettier * Tools / File Watchers - * Add Prettier - * Deselect: Track only root files - * Scope: Current File - * Program: $ProjectFileDir$/node_modules/.bin/prettier - * Working Directory: $ProjectFileDir$ + * Add Prettier + * Deselect: Track only root files + * Scope: Current File + * Program: $ProjectFileDir$/node_modules/.bin/prettier + * Working Directory: $ProjectFileDir$ ## Both @@ -58,16 +58,16 @@ title: Intellij IDEA Configuration ### Settings * Editor / Copyright / Copyright Profiles - * Add Profile - * Name: SCM-MIT - * Copyright text: *see LICENSE.txt in the main directory* - * Regex: MIT License - + * Add Profile + * Name: SCM-MIT + * Copyright text: *see LICENSE.txt in the main directory* + * Regex: MIT License + * Editor / Copyright - * Default project copyright: SCM-MIT + * Default project copyright: SCM-MIT * Editor / Copyright / Formatting / XML - * Use custom formatting options - * Use block comment, check prefix each line - * Select: Separator before, Length: 0 - * Separator: *space* + * Use custom formatting options + * Use block comment, check prefix each line + * Select: Separator before, Length: 0 + * Separator: *space* diff --git a/docs/en/development/plugins/migrate-plugin-from-v1.md b/docs/en/development/plugins/migrate-plugin-from-v1.md index 2c8877cd33..4377664713 100644 --- a/docs/en/development/plugins/migrate-plugin-from-v1.md +++ b/docs/en/development/plugins/migrate-plugin-from-v1.md @@ -11,9 +11,11 @@ To migrate an existing SCM-Manager 1.x Plugin, you have to do the following step * create a separate branch for the new version * It might be helpful to start and review the old version of the plugin via `mvn scmp:run` for later reference. * Import .gitignore & .editorconfig from SCMM -* You might run the build once and review and fix SCMMv1 deprecation warnings. SCMMv2 gets rids of all deprecated classes. -* update the version of the parent artifact (sonia.scm.plugins:scm-plugins) to the minimum version of SCM-Manager 2 you are planning for your plugin -* change the packaging type of your plugin to smp +* You might run the build once and review and fix SCMMv1 deprecation warnings. SCMMv2 gets rids of all deprecated + classes. +* update the version of the parent artifact (sonia.scm.plugins:scm-plugins) to the minimum version of SCM-Manager 2 you + are planning for your plugin +* change the packaging type of your plugin to smp * remove the sonia.scm.maven:scm-maven-plugin from the pom * remove servlet-api from the list of dependencies (not always the case) @@ -41,7 +43,7 @@ diff -r a988f4cfb7ab pom.xml - -- javax.servlet +- jakarta.servlet - servlet-api - ${servlet.version} - provided @@ -52,7 +54,7 @@ diff -r a988f4cfb7ab pom.xml simple-java-mail 2.4 @@ -52,18 +46,6 @@ - 1.4.7 + 1.4.7 - @@ -74,7 +76,8 @@ diff -r a988f4cfb7ab pom.xml ### Plugin Descriptor (src/main/resources/META-INF/scm/plugin.xml) -* add the following dtd to the top of the plugin.xml: `` +* add the following dtd to the top of the + plugin.xml: `` * add an scm-version element with the value 2 to the plugin.xml * remove resources and packages from plugin.xml @@ -120,8 +123,9 @@ diff -r a988f4cfb7ab src/main/resources/META-INF/scm/plugin.xml * try to compile the sources: `mvn compile` * fix problems (TODO more help here) -* Remove XML accept headers from REST Resource classes -> SCMMv2 supports JSON only -* Migrate REST Resources (e.g. `v2`, add to Index Resource, Update Links) - See core plugins Git, Hg, Svn, e.g. [`GitConfigResource`](https://github.com/scm-manager/scm-manager/blob/develop/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java) +* Remove XML accept headers from REST Resource classes -> SCMMv2 supports JSON only +* Migrate REST Resources (e.g. `v2`, add to Index Resource, Update Links) - See core plugins Git, Hg, Svn, + e.g. [`GitConfigResource`](https://github.com/scm-manager/scm-manager/blob/develop/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java) ### UI (src/main/js, src/main/webapp) @@ -131,15 +135,15 @@ diff -r a988f4cfb7ab src/main/resources/META-INF/scm/plugin.xml ```json { "name": "@scm-manager/name-of-plugin", - "license" : "MIT", + "license": "MIT", "main": "src/main/js/index.tsx", "scripts": { - "build" : "ui-scripts plugin", - "watch" : "ui-scripts plugin-watch", - "postinstall" : "ui-plugins postinstall" + "build": "ui-scripts plugin", + "watch": "ui-scripts plugin-watch", + "postinstall": "ui-plugins postinstall" }, "dependencies": { - "@scm-manager/ui-plugins" : "2.0.0" + "@scm-manager/ui-plugins": "2.0.0" } } ``` @@ -162,12 +166,18 @@ diff -r a988f4cfb7ab src/main/resources/META-INF/scm/plugin.xml Some more hints: - * For Configuration UIs use [`ConfigurationBinder`](https://github.com/scm-manager/scm-manager/blob/develop/scm-ui/ui-components/src/config/ConfigurationBinder.tsx) - See core plugins Git, Hg, Svn, e.g. [scm-git-plugin/index.ts](https://github.com/scm-manager/scm-manager/blob/develop/scm-plugins/scm-git-plugin/src/main/js/index.ts). +* For Configuration UIs + use [`ConfigurationBinder`](https://github.com/scm-manager/scm-manager/blob/develop/scm-ui/ui-components/src/config/ConfigurationBinder.tsx) + - See core plugins Git, Hg, Svn, + e.g. [scm-git-plugin/index.ts](https://github.com/scm-manager/scm-manager/blob/develop/scm-plugins/scm-git-plugin/src/main/js/index.ts) + . Note that `readOnly` property checks if update link is returned by REST resource - * Don't forget [i18n for Plugins](../i18n-for-plugins) +* Don't forget [i18n for Plugins](../i18n-for-plugins) # Further reading * [UI Extensions](../../ui-extensions) - Extend the SCM-Manager UI -* [scm-manager/ui-components](https://github.com/scm-manager/scm-manager/tree/develop/scm-ui/ui-components) - Reusable UI components within SCM-Manager -* [smp-maven-plugin](https://github.com/scm-manager/smp-maven-plugin) - Plugin that facilitates efficient plugin development for SCMM +* [scm-manager/ui-components](https://github.com/scm-manager/scm-manager/tree/develop/scm-ui/ui-components) - Reusable + UI components within SCM-Manager +* [smp-maven-plugin](https://github.com/scm-manager/smp-maven-plugin) - Plugin that facilitates efficient plugin + development for SCMM diff --git a/gradle.properties b/gradle.properties index abfe3d1459..e297107b0f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,5 +22,5 @@ # SOFTWARE. # group = sonia.scm -version = 2.48.2-SNAPSHOT +version = 3.0.0-SNAPSHOT org.gradle.jvmargs=-Xmx1024M diff --git a/gradle/dependencies.gradle b/gradle/dependencies.gradle index 0935f96b85..551e5dadad 100644 --- a/gradle/dependencies.gradle +++ b/gradle/dependencies.gradle @@ -1,36 +1,39 @@ ext { slf4jVersion = '1.7.36' - guiceVersion = '5.0.1' - resteasyVersion = '4.7.9.Final' + guiceVersion = '7.0.0' + resteasyVersion = '6.2.5.Final' - jacksonVersion = '2.13.4' + jacksonVersion = '2.15.2' legmanVersion = '2.0.1' mapstructVersion = '1.3.1.Final' - jaxbVersion = '2.3.3' + jaxbVersion = '4.0.1' shiroVersion = '1.12.0' sspVersion = '1.3.0' jjwtVersion = '0.11.5' - bouncycastleVersion = '1.75' - jettyVersion = '9.4.51.v20230217' + bouncycastleVersion = '2.73.3' + jettyVersion = '11.0.16' luceneVersion = '8.9.0' junitJupiterVersion = '5.9.3' hamcrestVersion = '2.1' - mockitoVersion = '3.6.28' - jerseyClientVersion = '1.19.4' - micrometerVersion = '1.6.4' + mockitoVersion = '5.5.0' + jerseyVersion = '3.1.3' + micrometerVersion = '1.11.4' nodeVersion = '16.14.2' yarnVersion = '1.22.18' libraries = [ // lombok - lombok: 'org.projectlombok:lombok:1.18.28', + lombok: 'org.projectlombok:lombok:1.18.30', + + // jakarta + jakartaAnnotationApi: 'jakarta.annotation:jakarta.annotation-api:2.1.1', // servlet api - servletApi: 'javax.servlet:javax.servlet-api:3.1.0', + servletApi: 'jakarta.servlet:jakarta.servlet-api:6.0.0', // logging slf4jApi: "org.slf4j:slf4j-api:${slf4jVersion}", @@ -44,12 +47,11 @@ ext { guiceAssistedinject: "com.google.inject.extensions:guice-assistedinject:${guiceVersion}", // rest api - jaxRs: 'javax.ws.rs:javax.ws.rs-api:2.1.1', + jaxRs: 'jakarta.ws.rs:jakarta.ws.rs-api:3.1.0', resteasyCore: "org.jboss.resteasy:resteasy-core:${resteasyVersion}", resteasyJaxbProvider: "org.jboss.resteasy:resteasy-jaxb-provider:${resteasyVersion}", resteasyJackson2Provider: "org.jboss.resteasy:resteasy-jackson2-provider:${resteasyVersion}", resteasyMultiartProvider: "org.jboss.resteasy:resteasy-multipart-provider:${resteasyVersion}", - resteasyGuice: "org.jboss.resteasy:resteasy-guice:${resteasyVersion}", resteasyServletInitializer: "org.jboss.resteasy:resteasy-servlet-initializer:${resteasyVersion}", resteasyValidatorProvider: "org.jboss.resteasy:resteasy-validator-provider:${resteasyVersion}", @@ -60,17 +62,18 @@ ext { jacksonCore: "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}!!", jacksonAnnotations: "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}!!", jacksonDatabind: "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}!!", - jacksonJaxbAnnotations: "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:${jacksonVersion}", + jacksonJaxbAnnotations: "com.fasterxml.jackson.module:jackson-module-jakarta-xmlbind-annotations:${jacksonVersion}", jacksonJaxRsBase: "com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:${jacksonVersion}", - jacksonJaxRsJsonProvider: "com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:${jacksonVersion}", + jacksonJaxRsJsonProvider: "com.fasterxml.jackson.jakarta.rs:jackson-jakarta-rs-json-provider:${jacksonVersion}", jacksonDatatypeJdk8: "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:${jacksonVersion}", jacksonDatatypeJsr310: "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:${jacksonVersion}", + jacksonDataFormatYaml: "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${jacksonVersion}", // hypermedia edison: 'de.otto.edison:edison-hal:2.1.0', // openapi - swaggerJaxRs: 'io.swagger.core.v3:swagger-jaxrs2:2.1.12', + swaggerJaxRs: 'io.swagger.core.v3:swagger-jaxrs2-jakarta:2.2.19', // dto mapping mapstruct: "org.mapstruct:mapstruct-jdk8:${mapstructVersion}", @@ -86,9 +89,9 @@ ext { jaxbRuntime: "org.glassfish.jaxb:jaxb-runtime:${jaxbVersion}", // validation - validator: 'org.hibernate.validator:hibernate-validator:6.1.6.Final', - elApi: 'javax.el:javax.el-api:3.0.0', - elRuntime: 'org.glassfish:javax.el:3.0.1-b11', + validator: 'org.hibernate.validator:hibernate-validator:8.0.1.Final', + elApi: 'jakarta.el:jakarta.el-api:5.0.1', + elRuntime: 'org.glassfish:jakarta.el:4.0.2', // utils guava: 'com.google.guava:guava:32.0.1-jre', @@ -98,9 +101,9 @@ ext { commonsLang3: 'org.apache.commons:commons-lang3:3.13.0', // security - shiroCore: "org.apache.shiro:shiro-core:${shiroVersion}", - shiroWeb: "org.apache.shiro:shiro-web:${shiroVersion}", - shiroGuice: "org.apache.shiro:shiro-guice:${shiroVersion}", + shiroCore: "org.apache.shiro:shiro-core:${shiroVersion}:jakarta", + shiroWeb: "org.apache.shiro:shiro-web:${shiroVersion}:jakarta", + shiroGuice: "org.apache.shiro:shiro-guice:${shiroVersion}:jakarta", ssp: "com.github.sdorra:ssp-lib:${sspVersion}", sspProcessor: "com.github.sdorra:ssp-processor:${sspVersion}", @@ -114,9 +117,9 @@ ext { jjwtJackson: "io.jsonwebtoken:jjwt-jackson:${jjwtVersion}", // gpg - bouncycastlePg: "org.bouncycastle:bcpg-jdk15to18:${bouncycastleVersion}", - bouncycastleProv: "org.bouncycastle:bcprov-jdk15to18:${bouncycastleVersion}", - bouncycastlePkix: "org.bouncycastle:bcpkix-jdk15to18:${bouncycastleVersion}", + bouncycastlePg: "org.bouncycastle:bcpg-lts8on:${bouncycastleVersion}", + bouncycastleProv: "org.bouncycastle:bcprov-lts8on:${bouncycastleVersion}", + bouncycastlePkix: "org.bouncycastle:bcpkix-lts8on:${bouncycastleVersion}", // service registration metainfServices: 'org.kohsuke.metainf-services:metainf-services:1.8', @@ -128,7 +131,7 @@ ext { mustache: 'com.github.spullara.mustache.java:compiler:0.9.10', // static resources - webResources: 'com.github.sdorra:web-resources:1.1.1', + webResources: 'com.github.sdorra:web-resources:2.0.0', // content type detection spotter: 'com.cloudogu.spotter:spotter-core:4.0.0', @@ -145,12 +148,11 @@ ext { jsvc: 'commons-daemon:commons-daemon-native:1.1.0@tar.gz', // yaml - snakeYml: 'org.yaml:snakeyaml:1.21', + snakeYml: 'org.yaml:snakeyaml:2.2', // jetty jettyServer: "org.eclipse.jetty:jetty-server:${jettyVersion}", jettyWebapp: "org.eclipse.jetty:jetty-webapp:${jettyVersion}", - jettyJmx: "org.eclipse.jetty:jetty-jmx:${jettyVersion}", jettyClient: "org.eclipse.jetty:jetty-client:${jettyVersion}", // search @@ -184,8 +186,10 @@ ext { awaitility: 'org.awaitility:awaitility:4.0.2', // rest api client for testing - jerseyClientApi: "com.sun.jersey:jersey-client:${jerseyClientVersion}", - jerseyClientRuntime: "com.sun.jersey.contribs:jersey-apache-client:${jerseyClientVersion}", + jerseyCommon: "org.glassfish.jersey.core:jersey-common:${jerseyVersion}", + jerseyClientApi: "org.glassfish.jersey.core:jersey-client:${jerseyVersion}", + jerseyClientRuntime: "com.sun.jersey.contribs:jersey-apache-client:${jerseyVersion}", + jerseyMediaJson: "org.glassfish.jersey.media:jersey-media-json-jackson:${jerseyVersion}", // metrics micrometerCore: "io.micrometer:micrometer-core:${micrometerVersion}", diff --git a/scm-annotation-processor/src/main/java/sonia/scm/annotation/ConfigElement.java b/scm-annotation-processor/src/main/java/sonia/scm/annotation/ConfigElement.java new file mode 100644 index 0000000000..a988a9dc80 --- /dev/null +++ b/scm-annotation-processor/src/main/java/sonia/scm/annotation/ConfigElement.java @@ -0,0 +1,59 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.annotation; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import java.util.Map; + +public class ConfigElement implements DescriptorElement { + + private final Map attributes; + private final String type; + + public ConfigElement(Map attributes, String type) { + this.attributes = attributes; + this.type = type; + } + + @Override + public void append(Document doc, Element root) { + + Element configEl = doc.createElement("config-value"); + + for (Map.Entry entry : attributes.entrySet()) { + Element attributeEl = doc.createElement(entry.getKey()); + attributeEl.setTextContent(entry.getValue()); + configEl.appendChild(attributeEl); + } + + Element typeEl = doc.createElement("type"); + typeEl.setTextContent(type); + configEl.appendChild(typeEl); + + root.appendChild(configEl); + } +} diff --git a/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java b/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java index 2e82d492b5..2bcc23e4ad 100644 --- a/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java +++ b/scm-annotation-processor/src/main/java/sonia/scm/annotation/ScmAnnotationProcessor.java @@ -29,6 +29,8 @@ import com.google.common.base.Throwables; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.ext.Provider; import org.kohsuke.MetaInfServices; import org.mapstruct.Mapper; import org.w3c.dom.DOMException; @@ -36,6 +38,7 @@ import org.w3c.dom.Document; import org.xml.sax.SAXException; import picocli.CommandLine; import sonia.scm.annotation.ClassSetElement.ClassWithAttributes; +import sonia.scm.config.ConfigValue; import sonia.scm.plugin.PluginAnnotation; import sonia.scm.plugin.Requires; @@ -56,8 +59,6 @@ import javax.lang.model.element.VariableElement; import javax.tools.Diagnostic.Kind; import javax.tools.FileObject; import javax.tools.StandardLocation; -import javax.ws.rs.Path; -import javax.ws.rs.ext.Provider; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -75,18 +76,18 @@ import java.lang.annotation.Annotation; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import static javax.lang.model.util.ElementFilter.methodsIn; + /** * @author Sebastian Sdorra */ @SupportedAnnotationTypes("*") @MetaInfServices(Processor.class) @SuppressWarnings({"Since16"}) -@SupportedSourceVersion(SourceVersion.RELEASE_11) +@SupportedSourceVersion(SourceVersion.RELEASE_17) public final class ScmAnnotationProcessor extends AbstractProcessor { private static final String DESCRIPTOR_MODULE = "META-INF/scm/module.xml"; @@ -96,6 +97,8 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { private static final String PROPERTY_VALUE = "yes"; private static final Set SUBSCRIBE_ANNOTATIONS = ImmutableSet.of(Subscribe.class.getName()); + + private static final Set CONFIG_ANNOTATIONS = ImmutableSet.of(ConfigValue.class.getName()); private static final Set CLASS_ANNOTATIONS = ImmutableSet.of(new ClassAnnotation("rest-resource", Path.class), new ClassAnnotation("rest-provider", Provider.class), @@ -108,6 +111,7 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { if (!roundEnv.processingOver()) { Set descriptorElements = Sets.newHashSet(); Set subscriberAnnotations = Sets.newHashSet(); + Set configAnnotations = Sets.newHashSet(); for (TypeElement e : annotations) { PluginAnnotation pa = e.getAnnotation(PluginAnnotation.class); @@ -119,6 +123,10 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { if (SUBSCRIBE_ANNOTATIONS.contains(e.getQualifiedName().toString())) { subscriberAnnotations.add(e); } + + if (CONFIG_ANNOTATIONS.contains(e.getQualifiedName().toString())) { + configAnnotations.add(e); + } } for (ClassAnnotation ca : CLASS_ANNOTATIONS) { @@ -134,6 +142,9 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { for (TypeElement annotation : subscriberAnnotations) { scanForSubscriberAnnotations(descriptorElements, roundEnv, annotation); } + for (TypeElement annotation : configAnnotations) { + scanForConfigAnnotations(descriptorElements, roundEnv, annotation); + } write(descriptorElements); } @@ -141,6 +152,19 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { return false; } + private void scanForConfigAnnotations(Set descriptorElements, RoundEnvironment roundEnv, TypeElement annotation) { + + Set elementsAnnotatedWith = roundEnv.getElementsAnnotatedWith(annotation); + + for (Element element : elementsAnnotatedWith) { + Map attributesFromAnnotation = getAttributesFromAnnotation(element, annotation); + String type = element.asType().toString(); + + descriptorElements.add(new ConfigElement(attributesFromAnnotation, type)); + } + + } + private TypeElement findAnnotation(Set annotations, Class annotationClass) { TypeElement annotation = null; @@ -353,8 +377,8 @@ public final class ScmAnnotationProcessor extends AbstractProcessor { String qn = annotationMirror.getAnnotationType().asElement().toString(); if (qn.equals(annotation.toString())) { - for (Entry entry : annotationMirror.getElementValues().entrySet()) { + for (Map.Entry entry : annotationMirror.getElementValues().entrySet()) { attributes.put(entry.getKey().getSimpleName().toString(), getValue(entry.getValue())); } diff --git a/scm-annotations/src/main/java/sonia/scm/config/ConfigValue.java b/scm-annotations/src/main/java/sonia/scm/config/ConfigValue.java new file mode 100644 index 0000000000..a19d9c2a43 --- /dev/null +++ b/scm-annotations/src/main/java/sonia/scm/config/ConfigValue.java @@ -0,0 +1,46 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.config; + + +import com.google.inject.BindingAnnotation; +import sonia.scm.plugin.PluginAnnotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Documented +@BindingAnnotation +@Target({ ElementType.PARAMETER, ElementType.FIELD }) +@Retention(RetentionPolicy.RUNTIME) +@PluginAnnotation("config-value") +public @interface ConfigValue { + String key(); + String defaultValue(); + String description() default ""; +} diff --git a/scm-annotations/src/main/resources/META-INF/scm/module.xml b/scm-annotations/src/main/resources/META-INF/scm/module.xml index d37ac4d643..e9599685f2 100644 --- a/scm-annotations/src/main/resources/META-INF/scm/module.xml +++ b/scm-annotations/src/main/resources/META-INF/scm/module.xml @@ -25,10 +25,10 @@ - javax.servlet.ServletContextListener + jakarta.servlet.ServletContextListener - javax.servlet.http.HttpSessionListener + jakarta.servlet.http.HttpSessionListener com.google.inject.Module diff --git a/scm-core/build.gradle b/scm-core/build.gradle index f4ced1ea13..d10215047f 100644 --- a/scm-core/build.gradle +++ b/scm-core/build.gradle @@ -47,6 +47,9 @@ dependencies { annotationProcessor libraries.lombok testAnnotationProcessor libraries.lombok + // jakarta + api libraries.jakartaAnnotationApi + // servlet api implementation libraries.servletApi diff --git a/scm-core/src/main/java/sonia/scm/BaseDirectory.java b/scm-core/src/main/java/sonia/scm/BaseDirectory.java index b8b59e5726..1db670cfda 100644 --- a/scm-core/src/main/java/sonia/scm/BaseDirectory.java +++ b/scm-core/src/main/java/sonia/scm/BaseDirectory.java @@ -25,6 +25,7 @@ package sonia.scm; import com.google.common.base.Strings; +import sonia.scm.config.WebappConfigProvider; import sonia.scm.util.SystemUtil; import java.io.IOException; @@ -35,29 +36,27 @@ import java.util.Map; import java.util.Properties; /** - * Determines the base directory for SCM-Manager. - * This class should not be used directory, use {@link SCMContextProvider#getBaseDirectory()} instead. + * Determines the home directory for SCM-Manager aka "scm-home". + * This class should not be used directly, use {@link SCMContextProvider#getBaseDirectory()} instead. * * @since 2.0.0 */ final class BaseDirectory { - /** Environment variable for the SCM-Manager base directory */ - static final String ENVIRONMENT_VARIABLE = "SCM_HOME"; - - /** Java system property for the SCM-Manager base directory */ - static final String SYSTEM_PROPERTY = "scm.home"; - - /** Classpath resource for the SCM-Manager base directory */ + /** + * Classpath resource for the SCM-Manager base directory + */ @SuppressWarnings("java:S1075") // it is already configurable static final String CLASSPATH_RESOURCE = "/scm.properties"; - /** Property name in resource file */ + /** + * Property name in resource file + */ static final String RESOURCE_PROPERTY = "scm.home"; private final Platform platform; private final String classPathResource; - private final Map environment; + private final Map environment; private final Properties systemProperties; BaseDirectory(Platform platform, String classPathResource, Map environment, Properties systemProperties) { @@ -74,21 +73,22 @@ final class BaseDirectory { */ @SuppressWarnings("java:S5304") // it is safe to use environment in this case static Path get() { - return new BaseDirectory( - SystemUtil.getPlatform(), - CLASSPATH_RESOURCE, - System.getenv(), - System.getProperties() - ).find(); + return + new BaseDirectory( + SystemUtil.getPlatform(), + CLASSPATH_RESOURCE, + System.getenv(), + System.getProperties() + ) + .find() + .normalize() + .toAbsolutePath(); } Path find() { String directory = getFromResource(); if (Strings.isNullOrEmpty(directory)) { - directory = getFromSystemProperty(); - } - if (Strings.isNullOrEmpty(directory)) { - directory = getFromEnvironmentVariable(); + directory = WebappConfigProvider.resolveAsString("homeDir").orElse(null); } if (Strings.isNullOrEmpty(directory)) { directory = getOsSpecificDefault(); @@ -98,30 +98,18 @@ final class BaseDirectory { } private String getFromResource() { - try (InputStream input = BasicContextProvider.class.getResourceAsStream(classPathResource)) - { - if (input != null) - { + try (InputStream input = BasicContextProvider.class.getResourceAsStream(classPathResource)) { + if (input != null) { Properties properties = new Properties(); properties.load(input); return properties.getProperty(RESOURCE_PROPERTY); } - } - catch (IOException ex) - { + } catch (IOException ex) { throw new ConfigurationException("could not load properties form resource " + CLASSPATH_RESOURCE, ex); } return null; } - private String getFromEnvironmentVariable() { - return environment.get(ENVIRONMENT_VARIABLE); - } - - private String getFromSystemProperty() { - return systemProperties.getProperty(SYSTEM_PROPERTY); - } - private String getOsSpecificDefault() { if (platform.isMac()) { return getOsxDefault(); @@ -132,7 +120,7 @@ final class BaseDirectory { } private String getOsxDefault() { - return systemProperties.getProperty("user.home") + "/Library/Application Support/SCM-Manager"; + return systemProperties.getProperty("user.home") + "/Library/Application Support/SCM-Manager"; } private String getWindowsDefault() { diff --git a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java index 507e63d299..33d38d46dc 100644 --- a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java +++ b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java @@ -29,15 +29,14 @@ package sonia.scm; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.common.io.Files; +import sonia.scm.config.WebappConfigProvider; import sonia.scm.util.IOUtil; -import sonia.scm.util.Util; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Path; -import java.util.Locale; import java.util.Properties; import java.util.UUID; @@ -55,24 +54,12 @@ public class BasicContextProvider implements SCMContextProvider /** Default version {@link String} */ public static final String VERSION_DEFAULT = "unknown"; - /** - * System property to override scm-manager version. - * Note: This should only be used for testing and never in production. - **/ - public static final String VERSION_PROPERTY = "sonia.scm.version.override"; - /** Default name of the SCM-Manager base directory */ public static final String DIRECTORY_DEFAULT = ".scm"; - /** Environment varibale for the SCM-Manager base directory */ - public static final String DIRECTORY_ENVIRONMENT = "SCM_HOME"; - /** Java system property for the SCM-Manager base directory */ public static final String DIRECTORY_PROPERTY = "scm.home"; - /** Classpath resource for the SCM-Manager base directory */ - public static final String DIRECTORY_RESOURCE = "/scm.properties"; - /** Path to the maven properties file of the scm-core artifact */ public static final String MAVEN_PROPERTIES = "/META-INF/scm/build-info.properties"; @@ -80,11 +67,6 @@ public class BasicContextProvider implements SCMContextProvider /** Maven property for the version of the artifact */ public static final String MAVEN_PROPERTY_VERSION = "version"; - /** - * Java system property for the SCM-Manager project stage - * @since 1.12 - */ - public static final String STAGE_PROPERTY = "scm.stage"; public static final String DEVELOPMENT_INSTANCE_ID = "00000000-0000-0000-0000-000000000000"; @@ -100,7 +82,7 @@ public class BasicContextProvider implements SCMContextProvider { baseDirectory = findBaseDirectory(); version = determineVersion(); - stage = loadProjectStage(); + stage = Stage.valueOf(WebappConfigProvider.resolveAsString("stage").orElse(Stage.PRODUCTION.name())); instanceId = readOrCreateInstanceId(); } catch (Exception ex) @@ -209,37 +191,8 @@ public class BasicContextProvider implements SCMContextProvider throw new IllegalStateException(msg); } - /** - * Find the current stage. - * - * - * @return current stage - */ - private Stage loadProjectStage() - { - Stage s = Stage.PRODUCTION; - String stageProperty = System.getProperty(STAGE_PROPERTY); - - if (Util.isNotEmpty(stageProperty)) - { - try - { - s = Stage.valueOf(stageProperty.toUpperCase(Locale.ENGLISH)); - } - catch (IllegalArgumentException ex) - { - - // do not use logger or IOUtil, - // http://www.slf4j.org/codes.html#substituteLogger - ex.printStackTrace(System.err); - } - } - - return s; - } - private String determineVersion() { - String v = System.getProperty(VERSION_PROPERTY); + String v = WebappConfigProvider.resolveAsString("versionOverride").orElse(null); if (Strings.isNullOrEmpty(v)) { v = loadVersion(); } @@ -288,7 +241,7 @@ public class BasicContextProvider implements SCMContextProvider } private String readOrCreateInstanceId() throws IOException { - if (stage == Stage.DEVELOPMENT) { + if (stage != Stage.PRODUCTION) { return DEVELOPMENT_INSTANCE_ID; } File configDirectory = new File(baseDirectory, "config"); diff --git a/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java b/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java index 5830b5566c..d554a2a52e 100644 --- a/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java +++ b/scm-core/src/main/java/sonia/scm/BasicPropertiesAware.java @@ -28,11 +28,11 @@ package sonia.scm; import com.google.common.base.Objects; import com.google.common.collect.Maps; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import sonia.scm.xml.XmlMapStringAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.io.Serializable; import java.util.Map; diff --git a/scm-core/src/main/java/sonia/scm/ClientMessages.java b/scm-core/src/main/java/sonia/scm/ClientMessages.java index 4ff78ad232..742b706800 100644 --- a/scm-core/src/main/java/sonia/scm/ClientMessages.java +++ b/scm-core/src/main/java/sonia/scm/ClientMessages.java @@ -26,7 +26,7 @@ package sonia.scm; //~--- non-JDK imports -------------------------------------------------------- -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import sonia.scm.i18n.I18nMessages; //~--- JDK imports ------------------------------------------------------------ @@ -43,7 +43,7 @@ public final class ClientMessages /** * Constructs a new instance of ClientMessages. This constructor should not be - * used. Use the {@link #get(javax.servlet.http.HttpServletRequest)} method + * used. Use the {@link #get(jakarta.servlet.http.HttpServletRequest)} method * instead. */ public ClientMessages() {} diff --git a/scm-core/src/main/java/sonia/scm/ServletContainerDetector.java b/scm-core/src/main/java/sonia/scm/ServletContainerDetector.java index 96026991c6..6e45576faa 100644 --- a/scm-core/src/main/java/sonia/scm/ServletContainerDetector.java +++ b/scm-core/src/main/java/sonia/scm/ServletContainerDetector.java @@ -26,14 +26,11 @@ package sonia.scm; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.RequestDispatcher; +import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.RequestDispatcher; -import javax.servlet.http.HttpServletRequest; - /** * Detects the ServletContainer. * This class is inspired by diff --git a/scm-core/src/main/java/sonia/scm/Type.java b/scm-core/src/main/java/sonia/scm/Type.java index 1870442426..ac82688ba6 100644 --- a/scm-core/src/main/java/sonia/scm/Type.java +++ b/scm-core/src/main/java/sonia/scm/Type.java @@ -26,13 +26,10 @@ package sonia.scm; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.util.AssertUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - -import javax.xml.bind.annotation.XmlRootElement; - /** * Base class for all objects which supports different types. * diff --git a/scm-core/src/main/java/sonia/scm/api/v2/resources/ConfigurationAdapterBase.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/ConfigurationAdapterBase.java index 4c5646dd6c..78483a15c2 100644 --- a/scm-core/src/main/java/sonia/scm/api/v2/resources/ConfigurationAdapterBase.java +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/ConfigurationAdapterBase.java @@ -29,23 +29,22 @@ import com.google.common.annotations.Beta; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Link; import de.otto.edison.hal.Links; +import jakarta.inject.Provider; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.UriInfo; import lombok.extern.slf4j.Slf4j; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; - import javax.annotation.Nullable; -import javax.inject.Provider; -import javax.validation.Valid; -import javax.validation.constraints.NotNull; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.UriInfo; /** * This can be used as a base class for configuration resources. diff --git a/scm-core/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java index 737d4b1fc2..d93e38f395 100644 --- a/scm-core/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/ErrorDto.java @@ -25,12 +25,12 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Getter; import lombok.Setter; import sonia.scm.ContextEntry; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; import java.util.List; @Getter @Setter diff --git a/scm-core/src/main/java/sonia/scm/api/v2/resources/HalAppenderMapper.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/HalAppenderMapper.java index 746f0b97d0..4b9a7903a6 100644 --- a/scm-core/src/main/java/sonia/scm/api/v2/resources/HalAppenderMapper.java +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/HalAppenderMapper.java @@ -25,10 +25,9 @@ package sonia.scm.api.v2.resources; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; -import javax.inject.Inject; - @Slf4j public class HalAppenderMapper { diff --git a/scm-core/src/main/java/sonia/scm/api/v2/resources/HalEnricherRegistry.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/HalEnricherRegistry.java index 91a41829d8..1ce9a503d7 100644 --- a/scm-core/src/main/java/sonia/scm/api/v2/resources/HalEnricherRegistry.java +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/HalEnricherRegistry.java @@ -26,10 +26,9 @@ package sonia.scm.api.v2.resources; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; +import jakarta.inject.Singleton; import sonia.scm.plugin.Extension; -import javax.inject.Singleton; - /** * The {@link HalEnricherRegistry} is responsible for binding {@link HalEnricher} instances to their source types. * diff --git a/scm-core/src/main/java/sonia/scm/api/v2/resources/LinkBuilder.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/LinkBuilder.java index faf3e763a1..9a601f2d30 100644 --- a/scm-core/src/main/java/sonia/scm/api/v2/resources/LinkBuilder.java +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/LinkBuilder.java @@ -25,8 +25,8 @@ package sonia.scm.api.v2.resources; import com.google.common.collect.ImmutableList; +import jakarta.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriBuilder; import java.net.URI; import java.util.Arrays; diff --git a/scm-core/src/main/java/sonia/scm/api/v2/resources/MergeCommandDto.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/MergeCommandDto.java index ad9ceb0f80..060c25b155 100644 --- a/scm-core/src/main/java/sonia/scm/api/v2/resources/MergeCommandDto.java +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/MergeCommandDto.java @@ -24,9 +24,9 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.NotEmpty; import lombok.Getter; import lombok.Setter; -import javax.validation.constraints.NotEmpty; @Getter @Setter public class MergeCommandDto { diff --git a/scm-core/src/main/java/sonia/scm/auditlog/AuditLogConfigurationStoreDecoratorFactory.java b/scm-core/src/main/java/sonia/scm/auditlog/AuditLogConfigurationStoreDecoratorFactory.java index 3b475def5d..56f0312e4c 100644 --- a/scm-core/src/main/java/sonia/scm/auditlog/AuditLogConfigurationStoreDecoratorFactory.java +++ b/scm-core/src/main/java/sonia/scm/auditlog/AuditLogConfigurationStoreDecoratorFactory.java @@ -24,11 +24,11 @@ package sonia.scm.auditlog; +import jakarta.inject.Inject; import sonia.scm.repository.RepositoryDAO; import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreDecoratorFactory; -import javax.inject.Inject; import java.util.Set; public class AuditLogConfigurationStoreDecoratorFactory implements ConfigurationStoreDecoratorFactory { diff --git a/scm-core/src/main/java/sonia/scm/cli/CliContext.java b/scm-core/src/main/java/sonia/scm/cli/CliContext.java index 0832acc36d..3ffb746a83 100644 --- a/scm-core/src/main/java/sonia/scm/cli/CliContext.java +++ b/scm-core/src/main/java/sonia/scm/cli/CliContext.java @@ -56,7 +56,6 @@ public interface CliContext { /** * Sets the exit code for the current command execution and stops the execution. * @param exitcode exit code which will be return to the client terminal - * @see {@link ExitCode} */ void exit(int exitcode); diff --git a/scm-core/src/main/java/sonia/scm/cli/Client.java b/scm-core/src/main/java/sonia/scm/cli/Client.java index d93127acae..3a52be3f42 100644 --- a/scm-core/src/main/java/sonia/scm/cli/Client.java +++ b/scm-core/src/main/java/sonia/scm/cli/Client.java @@ -24,10 +24,10 @@ package sonia.scm.cli; +import jakarta.annotation.Nullable; import lombok.RequiredArgsConstructor; import lombok.Value; -import javax.annotation.Nullable; import java.time.Instant; import java.util.Optional; diff --git a/scm-core/src/main/java/sonia/scm/cli/CommandValidator.java b/scm-core/src/main/java/sonia/scm/cli/CommandValidator.java index f8a9b9af78..07697ecf97 100644 --- a/scm-core/src/main/java/sonia/scm/cli/CommandValidator.java +++ b/scm-core/src/main/java/sonia/scm/cli/CommandValidator.java @@ -24,15 +24,15 @@ package sonia.scm.cli; +import jakarta.inject.Inject; +import jakarta.validation.ConstraintValidatorFactory; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.MessageInterpolator; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; import picocli.CommandLine; -import javax.inject.Inject; -import javax.validation.ConstraintValidatorFactory; -import javax.validation.ConstraintViolation; -import javax.validation.MessageInterpolator; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; import java.util.Locale; import java.util.ResourceBundle; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/cli/Table.java b/scm-core/src/main/java/sonia/scm/cli/Table.java index 9a66a10437..b8441fc5fa 100644 --- a/scm-core/src/main/java/sonia/scm/cli/Table.java +++ b/scm-core/src/main/java/sonia/scm/cli/Table.java @@ -25,9 +25,9 @@ package sonia.scm.cli; import com.google.common.base.Strings; +import jakarta.annotation.Nullable; import lombok.Value; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; diff --git a/scm-core/src/main/java/sonia/scm/cli/TemplateRenderer.java b/scm-core/src/main/java/sonia/scm/cli/TemplateRenderer.java index c62591a7ad..029fa11ae8 100644 --- a/scm-core/src/main/java/sonia/scm/cli/TemplateRenderer.java +++ b/scm-core/src/main/java/sonia/scm/cli/TemplateRenderer.java @@ -27,14 +27,14 @@ package sonia.scm.cli; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableMap; +import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.template.Template; import sonia.scm.template.TemplateEngine; import sonia.scm.template.TemplateEngineFactory; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.inject.Inject; import java.io.IOException; import java.io.PrintWriter; import java.io.StringReader; diff --git a/scm-core/src/main/java/sonia/scm/collect/EvictingQueue.java b/scm-core/src/main/java/sonia/scm/collect/EvictingQueue.java index 5bc56469fa..3a273a7c35 100644 --- a/scm-core/src/main/java/sonia/scm/collect/EvictingQueue.java +++ b/scm-core/src/main/java/sonia/scm/collect/EvictingQueue.java @@ -28,10 +28,10 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.ForwardingQueue; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import jakarta.validation.constraints.NotNull; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; -import javax.validation.constraints.NotNull; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; import java.util.ArrayDeque; import java.util.Queue; diff --git a/scm-webapp/src/main/java/sonia/scm/security/JwtSystemProperties.java b/scm-core/src/main/java/sonia/scm/config/ConfigBinding.java similarity index 82% rename from scm-webapp/src/main/java/sonia/scm/security/JwtSystemProperties.java rename to scm-core/src/main/java/sonia/scm/config/ConfigBinding.java index 5200c23932..a9a3d3f7bb 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/JwtSystemProperties.java +++ b/scm-core/src/main/java/sonia/scm/config/ConfigBinding.java @@ -22,13 +22,12 @@ * SOFTWARE. */ -package sonia.scm.security; +package sonia.scm.config; -public class JwtSystemProperties { +import lombok.Value; - public static final String ENDLESS_JWT = "scm.endlessJwt"; - - public static boolean isEndlessJwtEnabled() { - return Boolean.parseBoolean(System.getProperty(ENDLESS_JWT)); - } +@Value +public class ConfigBinding { + ConfigElement configElement; + Object value; } diff --git a/scm-core/src/main/java/sonia/scm/config/ConfigElement.java b/scm-core/src/main/java/sonia/scm/config/ConfigElement.java new file mode 100644 index 0000000000..293c62bace --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/config/ConfigElement.java @@ -0,0 +1,48 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.config; + +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +/** + * + * @since 3.0.0 + */ +@XmlRootElement(name = "config-value") +@XmlAccessorType(XmlAccessType.FIELD) +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class ConfigElement { + private String key; + private String defaultValue; + private String description; + private String type; +} diff --git a/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java b/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java index 42373dd91b..1f946cb664 100644 --- a/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java +++ b/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java @@ -26,6 +26,13 @@ package sonia.scm.config; import com.google.common.collect.Sets; +import jakarta.inject.Singleton; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.auditlog.AuditEntry; @@ -35,13 +42,6 @@ import sonia.scm.util.HttpUtil; import sonia.scm.xml.XmlCipherStringAdapter; import sonia.scm.xml.XmlSetStringAdapter; -import javax.inject.Singleton; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.io.File; import java.net.URI; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/config/WebappConfigProvider.java b/scm-core/src/main/java/sonia/scm/config/WebappConfigProvider.java new file mode 100644 index 0000000000..1bd4555ad0 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/config/WebappConfigProvider.java @@ -0,0 +1,60 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.config; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class WebappConfigProvider { + + private WebappConfigProvider() {} + + private static Map configBindings = new HashMap<>(); + + public static void setConfigBindings(Map newBindings) { + configBindings = newBindings; + } + + public static Optional resolveAsString(String key) { + return resolveConfig(key); + } + + public static Optional resolveAsBoolean(String key) { + return resolveConfig(key).map(Boolean::parseBoolean); + } + + public static Optional resolveAsInteger(String key) { + return resolveConfig(key).map(Integer::parseInt); + } + + public static Optional resolveAsLong(String key) { + return resolveConfig(key).map(Long::parseLong); + } + + private static Optional resolveConfig(String key) { + return Optional.ofNullable(configBindings.get(key)); + } +} diff --git a/scm-core/src/main/java/sonia/scm/filter/GZipResponseFilter.java b/scm-core/src/main/java/sonia/scm/filter/GZipResponseFilter.java index caaca339f7..caf0013378 100644 --- a/scm-core/src/main/java/sonia/scm/filter/GZipResponseFilter.java +++ b/scm-core/src/main/java/sonia/scm/filter/GZipResponseFilter.java @@ -24,22 +24,22 @@ package sonia.scm.filter; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.ext.WriterInterceptor; +import jakarta.ws.rs.ext.WriterInterceptorContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.ext.WriterInterceptor; -import javax.ws.rs.ext.WriterInterceptorContext; import java.io.IOException; import java.io.OutputStream; import java.util.Locale; import java.util.zip.GZIPOutputStream; -@javax.ws.rs.ext.Provider +@jakarta.ws.rs.ext.Provider public class GZipResponseFilter implements WriterInterceptor { private static final Logger LOG = LoggerFactory.getLogger(GZipResponseFilter.class); diff --git a/scm-core/src/main/java/sonia/scm/filter/GZipResponseStream.java b/scm-core/src/main/java/sonia/scm/filter/GZipResponseStream.java index 2693fdf3b0..5f33019c8a 100644 --- a/scm-core/src/main/java/sonia/scm/filter/GZipResponseStream.java +++ b/scm-core/src/main/java/sonia/scm/filter/GZipResponseStream.java @@ -26,22 +26,17 @@ package sonia.scm.filter; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.util.IOUtil; -//~--- JDK imports ------------------------------------------------------------ - import java.io.ByteArrayOutputStream; import java.io.IOException; - import java.util.zip.GZIPOutputStream; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletResponse; - /** * Response stream for gzip encoding. * diff --git a/scm-core/src/main/java/sonia/scm/filter/GZipResponseWrapper.java b/scm-core/src/main/java/sonia/scm/filter/GZipResponseWrapper.java index 5f0e813f2a..b6a39f1b70 100644 --- a/scm-core/src/main/java/sonia/scm/filter/GZipResponseWrapper.java +++ b/scm-core/src/main/java/sonia/scm/filter/GZipResponseWrapper.java @@ -26,18 +26,15 @@ package sonia.scm.filter; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import sonia.scm.util.IOUtil; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - /** * Response wrapper for gzip encoding. * diff --git a/scm-core/src/main/java/sonia/scm/group/Group.java b/scm-core/src/main/java/sonia/scm/group/Group.java index 36e868bb7e..1f7b775245 100644 --- a/scm-core/src/main/java/sonia/scm/group/Group.java +++ b/scm-core/src/main/java/sonia/scm/group/Group.java @@ -31,6 +31,9 @@ import com.github.sdorra.ssp.StaticPermissions; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.Lists; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.BasicPropertiesAware; import sonia.scm.ModelObject; import sonia.scm.ReducedModelObject; @@ -41,9 +44,6 @@ import sonia.scm.search.IndexedType; import sonia.scm.util.Util; import sonia.scm.util.ValidationUtil; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; import java.util.Arrays; import java.util.Collections; import java.util.List; diff --git a/scm-core/src/main/java/sonia/scm/i18n/I18nMessages.java b/scm-core/src/main/java/sonia/scm/i18n/I18nMessages.java index dfab7c6caa..9aa45ff898 100644 --- a/scm-core/src/main/java/sonia/scm/i18n/I18nMessages.java +++ b/scm-core/src/main/java/sonia/scm/i18n/I18nMessages.java @@ -29,9 +29,9 @@ package sonia.scm.i18n; import com.google.common.base.Objects; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; +import jakarta.servlet.http.HttpServletRequest; import sonia.scm.util.ClassLoaders; -import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; import java.util.Locale; diff --git a/scm-core/src/main/java/sonia/scm/io/INIConfiguration.java b/scm-core/src/main/java/sonia/scm/io/INIConfiguration.java index 63785fd40e..1e8ac9666a 100644 --- a/scm-core/src/main/java/sonia/scm/io/INIConfiguration.java +++ b/scm-core/src/main/java/sonia/scm/io/INIConfiguration.java @@ -27,8 +27,8 @@ package sonia.scm.io; //~--- JDK imports ------------------------------------------------------------ import com.google.common.collect.ImmutableList; +import jakarta.annotation.Nullable; -import javax.annotation.Nullable; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; diff --git a/scm-core/src/main/java/sonia/scm/net/GlobalProxyConfiguration.java b/scm-core/src/main/java/sonia/scm/net/GlobalProxyConfiguration.java index 53bebc9232..d21afa31c4 100644 --- a/scm-core/src/main/java/sonia/scm/net/GlobalProxyConfiguration.java +++ b/scm-core/src/main/java/sonia/scm/net/GlobalProxyConfiguration.java @@ -25,9 +25,9 @@ package sonia.scm.net; import com.google.common.base.Strings; +import jakarta.inject.Inject; import sonia.scm.config.ScmConfiguration; -import javax.inject.Inject; import java.util.Collection; import java.util.Collections; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/net/HttpURLConnectionFactory.java b/scm-core/src/main/java/sonia/scm/net/HttpURLConnectionFactory.java index 55b6fc3c9c..cbfe539119 100644 --- a/scm-core/src/main/java/sonia/scm/net/HttpURLConnectionFactory.java +++ b/scm-core/src/main/java/sonia/scm/net/HttpURLConnectionFactory.java @@ -27,14 +27,14 @@ package sonia.scm.net; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.base.Strings; +import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import lombok.Value; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.inject.Inject; -import javax.inject.Provider; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManager; diff --git a/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java b/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java index b439f80545..71dc07bf13 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java +++ b/scm-core/src/main/java/sonia/scm/plugin/ClassElement.java @@ -26,6 +26,9 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; @@ -33,9 +36,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.ToString; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; import java.util.HashSet; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/plugin/ExtensionPointElement.java b/scm-core/src/main/java/sonia/scm/plugin/ExtensionPointElement.java index 48842d8790..5952ea01da 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/ExtensionPointElement.java +++ b/scm-core/src/main/java/sonia/scm/plugin/ExtensionPointElement.java @@ -28,11 +28,10 @@ package sonia.scm.plugin; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-core/src/main/java/sonia/scm/plugin/ExtensionProcessor.java b/scm-core/src/main/java/sonia/scm/plugin/ExtensionProcessor.java index e5940dd25f..7641c62df1 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/ExtensionProcessor.java +++ b/scm-core/src/main/java/sonia/scm/plugin/ExtensionProcessor.java @@ -27,8 +27,9 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Binder; +import sonia.scm.config.ConfigBinding; -import java.util.Collections; +import static java.util.Collections.emptySet; /** * Process and resolve extensions. @@ -79,6 +80,13 @@ public interface ExtensionProcessor */ Iterable getWebElements(); + /** + * @since 3.0.0 + */ + default Iterable getConfigBindings() { + return emptySet(); + } + /** * Returns all collected indexable types. * @@ -86,6 +94,6 @@ public interface ExtensionProcessor * @since 2.21.0 */ default Iterable> getIndexedTypes() { - return Collections.emptySet(); + return emptySet(); } } diff --git a/scm-core/src/main/java/sonia/scm/plugin/InstalledPlugin.java b/scm-core/src/main/java/sonia/scm/plugin/InstalledPlugin.java index e6c597b339..1ec805078c 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/InstalledPlugin.java +++ b/scm-core/src/main/java/sonia/scm/plugin/InstalledPlugin.java @@ -39,6 +39,7 @@ public final class InstalledPlugin implements Plugin { public static final String UNINSTALL_MARKER_FILENAME = "uninstall"; + public static final String COMPATIBILITY_MARKER_FILENAME = ".jakarta-compatible"; /** * Constructs a new plugin wrapper. diff --git a/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java b/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java index 9d57c2a5dd..bdaeaec06b 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java +++ b/scm-core/src/main/java/sonia/scm/plugin/InstalledPluginDescriptor.java @@ -30,12 +30,12 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; import java.util.Set; import java.util.stream.Collectors; diff --git a/scm-core/src/main/java/sonia/scm/plugin/NameAndVersion.java b/scm-core/src/main/java/sonia/scm/plugin/NameAndVersion.java index 414d3fcf98..447b165f69 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/NameAndVersion.java +++ b/scm-core/src/main/java/sonia/scm/plugin/NameAndVersion.java @@ -25,16 +25,16 @@ package sonia.scm.plugin; import com.google.common.base.Strings; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlValue; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.EqualsAndHashCode; import lombok.Getter; import sonia.scm.version.Version; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlValue; -import javax.xml.bind.annotation.adapters.XmlAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.Optional; /** diff --git a/scm-core/src/main/java/sonia/scm/plugin/NamedClassElement.java b/scm-core/src/main/java/sonia/scm/plugin/NamedClassElement.java index 40c00c7d4e..7395822ceb 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/NamedClassElement.java +++ b/scm-core/src/main/java/sonia/scm/plugin/NamedClassElement.java @@ -24,14 +24,14 @@ package sonia.scm.plugin; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.ToString; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; import java.util.HashSet; @Getter diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginCondition.java b/scm-core/src/main/java/sonia/scm/plugin/PluginCondition.java index f07bceab82..6b6d5f609d 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginCondition.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginCondition.java @@ -28,17 +28,17 @@ package sonia.scm.plugin; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.PlatformType; import sonia.scm.SCMContext; import sonia.scm.util.SystemUtil; import sonia.scm.util.Util; import sonia.scm.version.Version; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; import java.util.ArrayList; import java.util.List; diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java b/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java index 7b90cf4d36..a858cdfa87 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginInformation.java @@ -26,13 +26,13 @@ package sonia.scm.plugin; import com.github.sdorra.ssp.PermissionObject; import com.github.sdorra.ssp.StaticPermissions; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Data; import sonia.scm.Validateable; import sonia.scm.util.Util; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; @Data diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginResources.java b/scm-core/src/main/java/sonia/scm/plugin/PluginResources.java index 524698ad79..25a4891ac3 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/PluginResources.java +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginResources.java @@ -28,10 +28,10 @@ package sonia.scm.plugin; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; import java.util.Set; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-core/src/main/java/sonia/scm/plugin/PluginTransformException.java b/scm-core/src/main/java/sonia/scm/plugin/PluginTransformException.java new file mode 100644 index 0000000000..fca986ad89 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/plugin/PluginTransformException.java @@ -0,0 +1,35 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.plugin; + +public class PluginTransformException extends PluginException{ + public PluginTransformException(String message) { + super(message); + } + + public PluginTransformException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/scm-core/src/main/java/sonia/scm/plugin/Plugins.java b/scm-core/src/main/java/sonia/scm/plugin/Plugins.java index ab6dd83250..25c6a7123d 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/Plugins.java +++ b/scm-core/src/main/java/sonia/scm/plugin/Plugins.java @@ -29,17 +29,13 @@ package sonia.scm.plugin; import com.google.common.base.Preconditions; import com.google.common.io.ByteSource; import com.google.common.io.Files; - -//~--- JDK imports ------------------------------------------------------------ +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; import java.io.IOException; import java.io.InputStream; - import java.nio.file.Path; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; - /** * Util methods to handle plugins. * diff --git a/scm-core/src/main/java/sonia/scm/plugin/ScmModule.java b/scm-core/src/main/java/sonia/scm/plugin/ScmModule.java index d4796d9d3e..fba7993c81 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/ScmModule.java +++ b/scm-core/src/main/java/sonia/scm/plugin/ScmModule.java @@ -25,11 +25,12 @@ package sonia.scm.plugin; import com.google.common.collect.ImmutableSet; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import sonia.scm.config.ConfigElement; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.util.Set; /** @@ -67,6 +68,9 @@ public class ScmModule { @XmlElement(name = "subscriber") private Set subscribers; + @XmlElement(name = "config-value") + private Set configElements; + @XmlElement(name = "web-element") private Set webElements; @@ -110,6 +114,14 @@ public class ScmModule { return nonNull(indexedTypes); } + /** + * @since 3.0.0 + + */ + public Iterable getConfigElements() { + return nonNull(configElements); + } + private Iterable nonNull(Iterable iterable) { if (iterable == null) { iterable = ImmutableSet.of(); diff --git a/scm-core/src/main/java/sonia/scm/plugin/SubscriberElement.java b/scm-core/src/main/java/sonia/scm/plugin/SubscriberElement.java index 47c38cd391..1d6bcd73e0 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/SubscriberElement.java +++ b/scm-core/src/main/java/sonia/scm/plugin/SubscriberElement.java @@ -28,11 +28,10 @@ package sonia.scm.plugin; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-core/src/main/java/sonia/scm/plugin/UberWebResourceLoader.java b/scm-core/src/main/java/sonia/scm/plugin/UberWebResourceLoader.java index 68459e01e6..8ff0589669 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/UberWebResourceLoader.java +++ b/scm-core/src/main/java/sonia/scm/plugin/UberWebResourceLoader.java @@ -26,12 +26,11 @@ package sonia.scm.plugin; //~--- JDK imports ------------------------------------------------------------ +import jakarta.servlet.ServletContext; + import java.net.URL; - import java.util.List; -import javax.servlet.ServletContext; - /** * Load resources from {@link ServletContext} and from the installed plugins. * The UberWebResourceLoader will first look into the {@link ServletContext} and diff --git a/scm-core/src/main/java/sonia/scm/plugin/WebElementDescriptor.java b/scm-core/src/main/java/sonia/scm/plugin/WebElementDescriptor.java index d5dabb9698..913c3e9697 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/WebElementDescriptor.java +++ b/scm-core/src/main/java/sonia/scm/plugin/WebElementDescriptor.java @@ -26,6 +26,11 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; @@ -34,11 +39,6 @@ import lombok.NoArgsConstructor; import lombok.ToString; import sonia.scm.xml.XmlArrayStringAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.Arrays; /** diff --git a/scm-core/src/main/java/sonia/scm/plugin/WebResourceLoader.java b/scm-core/src/main/java/sonia/scm/plugin/WebResourceLoader.java index a539b0acef..a84deecb76 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/WebResourceLoader.java +++ b/scm-core/src/main/java/sonia/scm/plugin/WebResourceLoader.java @@ -26,7 +26,8 @@ package sonia.scm.plugin; //~--- JDK imports ------------------------------------------------------------ -import javax.servlet.ServletContext; +import jakarta.servlet.ServletContext; + import java.net.URL; /** diff --git a/scm-core/src/main/java/sonia/scm/repository/Branch.java b/scm-core/src/main/java/sonia/scm/repository/Branch.java index c99093c36e..1961580469 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Branch.java +++ b/scm-core/src/main/java/sonia/scm/repository/Branch.java @@ -26,11 +26,11 @@ package sonia.scm.repository; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.Validateable; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; import java.util.Optional; import java.util.regex.Pattern; diff --git a/scm-core/src/main/java/sonia/scm/repository/EventDrivenRepositoryArchiveCheckInitializer.java b/scm-core/src/main/java/sonia/scm/repository/EventDrivenRepositoryArchiveCheckInitializer.java index 10e7430399..787db668c1 100644 --- a/scm-core/src/main/java/sonia/scm/repository/EventDrivenRepositoryArchiveCheckInitializer.java +++ b/scm-core/src/main/java/sonia/scm/repository/EventDrivenRepositoryArchiveCheckInitializer.java @@ -24,13 +24,12 @@ package sonia.scm.repository; +import jakarta.inject.Inject; import sonia.scm.EagerSingleton; import sonia.scm.Initable; import sonia.scm.SCMContextProvider; import sonia.scm.plugin.Extension; -import javax.inject.Inject; - @Extension @EagerSingleton final class EventDrivenRepositoryArchiveCheckInitializer implements Initable { diff --git a/scm-core/src/main/java/sonia/scm/repository/FileObject.java b/scm-core/src/main/java/sonia/scm/repository/FileObject.java index 82d6bed205..a8b1d49e72 100644 --- a/scm-core/src/main/java/sonia/scm/repository/FileObject.java +++ b/scm-core/src/main/java/sonia/scm/repository/FileObject.java @@ -25,11 +25,11 @@ package sonia.scm.repository; import com.google.common.base.Strings; +import jakarta.xml.bind.annotation.XmlElement; import lombok.EqualsAndHashCode; import lombok.ToString; import sonia.scm.LastModifiedAware; -import javax.xml.bind.annotation.XmlElement; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; diff --git a/scm-core/src/main/java/sonia/scm/repository/HealthCheckFailure.java b/scm-core/src/main/java/sonia/scm/repository/HealthCheckFailure.java index 21c7662b6f..4bbc7e7900 100644 --- a/scm-core/src/main/java/sonia/scm/repository/HealthCheckFailure.java +++ b/scm-core/src/main/java/sonia/scm/repository/HealthCheckFailure.java @@ -28,10 +28,10 @@ package sonia.scm.repository; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; import java.text.MessageFormat; diff --git a/scm-core/src/main/java/sonia/scm/repository/InitialRepositoryLocationResolver.java b/scm-core/src/main/java/sonia/scm/repository/InitialRepositoryLocationResolver.java index 9bb4266df8..8ec95c5c9a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/InitialRepositoryLocationResolver.java +++ b/scm-core/src/main/java/sonia/scm/repository/InitialRepositoryLocationResolver.java @@ -26,7 +26,7 @@ package sonia.scm.repository; import com.google.common.base.CharMatcher; -import javax.inject.Inject; +import jakarta.inject.Inject; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/repository/MetadataHealthCheck.java b/scm-core/src/main/java/sonia/scm/repository/MetadataHealthCheck.java index 17825277fe..b55f166a2a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/MetadataHealthCheck.java +++ b/scm-core/src/main/java/sonia/scm/repository/MetadataHealthCheck.java @@ -24,9 +24,9 @@ package sonia.scm.repository; +import jakarta.inject.Inject; import sonia.scm.plugin.Extension; -import javax.inject.Inject; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-core/src/main/java/sonia/scm/repository/Namespace.java b/scm-core/src/main/java/sonia/scm/repository/Namespace.java index d25a2f0f7c..7d00dab13d 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Namespace.java +++ b/scm-core/src/main/java/sonia/scm/repository/Namespace.java @@ -26,13 +26,13 @@ package sonia.scm.repository; import com.github.sdorra.ssp.PermissionObject; import com.github.sdorra.ssp.StaticPermissions; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import sonia.scm.auditlog.AuditEntry; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; import java.util.Collection; import java.util.HashSet; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/repository/ReadOnlyCheckInitializer.java b/scm-core/src/main/java/sonia/scm/repository/ReadOnlyCheckInitializer.java index bc8e1956c4..04c676b2d2 100644 --- a/scm-core/src/main/java/sonia/scm/repository/ReadOnlyCheckInitializer.java +++ b/scm-core/src/main/java/sonia/scm/repository/ReadOnlyCheckInitializer.java @@ -24,12 +24,12 @@ package sonia.scm.repository; +import jakarta.inject.Inject; import sonia.scm.EagerSingleton; import sonia.scm.Initable; import sonia.scm.SCMContextProvider; import sonia.scm.plugin.Extension; -import javax.inject.Inject; import java.util.Set; /** diff --git a/scm-core/src/main/java/sonia/scm/repository/RemoveDeletedRepositoryRole.java b/scm-core/src/main/java/sonia/scm/repository/RemoveDeletedRepositoryRole.java index ee96d83b9e..2585964016 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RemoveDeletedRepositoryRole.java +++ b/scm-core/src/main/java/sonia/scm/repository/RemoveDeletedRepositoryRole.java @@ -25,11 +25,10 @@ package sonia.scm.repository; import com.github.legman.Subscribe; +import jakarta.inject.Inject; import sonia.scm.EagerSingleton; import sonia.scm.plugin.Extension; -import javax.inject.Inject; - import java.util.Optional; import static sonia.scm.HandlerEventType.DELETE; diff --git a/scm-core/src/main/java/sonia/scm/repository/Repository.java b/scm-core/src/main/java/sonia/scm/repository/Repository.java index 6997b31f44..918a778045 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Repository.java +++ b/scm-core/src/main/java/sonia/scm/repository/Repository.java @@ -29,6 +29,11 @@ import com.github.sdorra.ssp.PermissionObject; import com.github.sdorra.ssp.StaticPermissions; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; import sonia.scm.BasicPropertiesAware; import sonia.scm.ModelObject; import sonia.scm.auditlog.AuditEntry; @@ -38,11 +43,6 @@ import sonia.scm.search.IndexedType; import sonia.scm.util.Util; import sonia.scm.util.ValidationUtil; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; import java.util.Arrays; import java.util.Collection; import java.util.Collections; diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryConfig.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryConfig.java index 9be87c6fba..cbb53c1d2e 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryConfig.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryConfig.java @@ -24,12 +24,11 @@ package sonia.scm.repository; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; import sonia.scm.Validateable; import sonia.scm.config.Configuration; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - /** * Basic {@link Repository} configuration class. * diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryName.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryName.java index 3ce550ca3b..4160419a13 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryName.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryName.java @@ -24,8 +24,9 @@ package sonia.scm.repository; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryNameConstrainValidator.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryNameConstrainValidator.java index 91a6474436..02027b1841 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryNameConstrainValidator.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryNameConstrainValidator.java @@ -24,11 +24,10 @@ package sonia.scm.repository; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import sonia.scm.util.ValidationUtil; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; - public class RepositoryNameConstrainValidator implements ConstraintValidator { private RepositoryName.Namespace namespace; diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryPermission.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryPermission.java index 49ddbd4a27..afccec2dd8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryPermission.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryPermission.java @@ -28,13 +28,13 @@ package sonia.scm.repository; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.apache.commons.collections.CollectionUtils; import sonia.scm.security.PermissionObject; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; import java.util.Collection; import java.util.Collections; diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryReadOnlyChecker.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryReadOnlyChecker.java index d3b5b3b8ae..b7bfa384bc 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryReadOnlyChecker.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryReadOnlyChecker.java @@ -25,8 +25,8 @@ package sonia.scm.repository; import com.google.common.collect.ImmutableSet; +import jakarta.inject.Inject; -import javax.inject.Inject; import java.util.Arrays; import java.util.Collection; import java.util.Collections; diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListener.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListener.java index 92a18648b9..c2929d4044 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListener.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListener.java @@ -26,10 +26,10 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.plugin.ExtensionPoint; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListenerUtil.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListenerUtil.java index b7c3652fd5..700a22c694 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListenerUtil.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryRequestListenerUtil.java @@ -28,19 +28,14 @@ package sonia.scm.repository; import com.google.inject.Inject; import com.google.inject.Singleton; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Set; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryRole.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryRole.java index 3aca190a42..0e97edb316 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryRole.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryRole.java @@ -29,14 +29,14 @@ import com.github.sdorra.ssp.StaticPermissions; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.base.Strings; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.ModelObject; import sonia.scm.auditlog.AuditEntry; import sonia.scm.auditlog.AuditLogEntity; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.util.Collection; import java.util.Collections; import java.util.LinkedHashSet; diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryTypeConstraint.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryTypeConstraint.java index ec2c8988e3..be31009dce 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryTypeConstraint.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryTypeConstraint.java @@ -24,8 +24,9 @@ package sonia.scm.repository; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryTypeConstraintValidator.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryTypeConstraintValidator.java index 735c0f1ae1..6d0276f8d1 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryTypeConstraintValidator.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryTypeConstraintValidator.java @@ -24,11 +24,11 @@ package sonia.scm.repository; +import jakarta.inject.Inject; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import sonia.scm.Type; -import javax.inject.Inject; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; import java.util.stream.Collectors; /** diff --git a/scm-core/src/main/java/sonia/scm/repository/api/AbstractPushOrPullResponse.java b/scm-core/src/main/java/sonia/scm/repository/api/AbstractPushOrPullResponse.java index d7ab08557e..7162838506 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/AbstractPushOrPullResponse.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/AbstractPushOrPullResponse.java @@ -26,9 +26,9 @@ package sonia.scm.repository.api; //~--- JDK imports ------------------------------------------------------------ -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; /** * Abstract base class for {@link PushResponse} and {@link PullResponse}. diff --git a/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java index 6358e72b89..bd2f5e686d 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/MergeCommandBuilder.java @@ -25,6 +25,7 @@ package sonia.scm.repository.api; import com.google.common.base.Preconditions; +import jakarta.annotation.Nullable; import sonia.scm.repository.Person; import sonia.scm.repository.spi.MergeCommand; import sonia.scm.repository.spi.MergeCommandRequest; @@ -33,7 +34,6 @@ import sonia.scm.repository.util.AuthorUtil; import sonia.scm.user.DisplayUser; import sonia.scm.user.EMail; -import javax.annotation.Nullable; import java.util.Set; /** diff --git a/scm-core/src/main/java/sonia/scm/repository/api/MirrorCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/MirrorCommandBuilder.java index 128559b35c..4f7517874a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/MirrorCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/MirrorCommandBuilder.java @@ -26,15 +26,15 @@ package sonia.scm.repository.api; import com.google.common.annotations.Beta; import com.google.common.base.Preconditions; +import jakarta.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.net.ProxyConfiguration; import sonia.scm.repository.Repository; import sonia.scm.repository.spi.MirrorCommand; import sonia.scm.repository.spi.MirrorCommandRequest; import sonia.scm.security.PublicKey; -import sonia.scm.net.ProxyConfiguration; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; diff --git a/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java index 20e85786bf..24970cc510 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/ModifyCommandBuilder.java @@ -28,6 +28,7 @@ import com.google.common.base.Preconditions; import com.google.common.io.ByteSource; import com.google.common.io.ByteStreams; import com.google.common.io.Files; +import jakarta.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.Person; @@ -38,7 +39,6 @@ import sonia.scm.repository.work.WorkdirProvider; import sonia.scm.user.EMail; import sonia.scm.util.IOUtil; -import javax.annotation.Nullable; import java.io.File; import java.io.IOException; import java.io.InputStream; diff --git a/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java b/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java index ca10dae16e..473a59cd6d 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/RepositoryService.java @@ -24,6 +24,7 @@ package sonia.scm.repository.api; +import jakarta.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.cache.CacheManager; @@ -40,7 +41,6 @@ import sonia.scm.repository.work.WorkdirProvider; import sonia.scm.security.Authentications; import sonia.scm.user.EMail; -import javax.annotation.Nullable; import java.io.Closeable; import java.io.IOException; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/repository/api/RepositoryServiceFactory.java b/scm-core/src/main/java/sonia/scm/repository/api/RepositoryServiceFactory.java index 61e01693ee..b2636094f7 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/RepositoryServiceFactory.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/RepositoryServiceFactory.java @@ -34,6 +34,7 @@ import com.google.common.base.Strings; import com.google.common.collect.Sets; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.HandlerEventType; @@ -61,7 +62,6 @@ import sonia.scm.security.PublicKeyDeletedEvent; import sonia.scm.security.ScmSecurityException; import sonia.scm.user.EMail; -import javax.annotation.Nullable; import java.util.Set; import static sonia.scm.ContextEntry.ContextBuilder.entity; diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/HttpScmProtocol.java b/scm-core/src/main/java/sonia/scm/repository/spi/HttpScmProtocol.java index 04a7244b0d..448b013f93 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/HttpScmProtocol.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/HttpScmProtocol.java @@ -24,14 +24,14 @@ package sonia.scm.repository.spi; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.repository.Repository; import sonia.scm.repository.api.ScmProtocol; import sonia.scm.util.HttpUtil; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URI; diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java b/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java index c6a656f276..ef4c93a816 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapper.java @@ -24,6 +24,11 @@ package sonia.scm.repository.spi; +import jakarta.inject.Provider; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import sonia.scm.RootURL; import sonia.scm.api.v2.resources.ScmPathInfoStore; @@ -31,11 +36,6 @@ import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.Repository; import sonia.scm.repository.api.ScmProtocolProvider; -import javax.inject.Provider; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Optional; import java.util.function.Supplier; diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/MirrorCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/MirrorCommandRequest.java index eadc48ac83..f3c9f8591f 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/MirrorCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/MirrorCommandRequest.java @@ -25,13 +25,13 @@ package sonia.scm.repository.spi; import com.google.common.annotations.Beta; +import jakarta.annotation.Nullable; import org.apache.commons.lang.StringUtils; +import sonia.scm.net.ProxyConfiguration; import sonia.scm.repository.api.Credential; import sonia.scm.repository.api.MirrorFilter; import sonia.scm.security.PublicKey; -import sonia.scm.net.ProxyConfiguration; -import javax.annotation.Nullable; import java.util.Collection; import java.util.Collections; import java.util.List; diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServlet.java b/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServlet.java index bba487ed30..276942d2e7 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServlet.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServlet.java @@ -24,12 +24,12 @@ package sonia.scm.repository.spi; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.repository.Repository; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; public interface ScmProviderHttpServlet { diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletDecorator.java b/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletDecorator.java index 10404a7cc4..a7379960e2 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletDecorator.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletDecorator.java @@ -24,12 +24,12 @@ package sonia.scm.repository.spi; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.repository.Repository; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class ScmProviderHttpServletDecorator implements ScmProviderHttpServlet { diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletProvider.java b/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletProvider.java index 11b3996f33..c0294195d0 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletProvider.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/ScmProviderHttpServletProvider.java @@ -25,9 +25,9 @@ package sonia.scm.repository.spi; import com.google.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.util.Decorators; -import javax.inject.Provider; import java.util.List; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/repository/util/AuthorUtil.java b/scm-core/src/main/java/sonia/scm/repository/util/AuthorUtil.java index e5a6501604..6b2d11bebf 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/AuthorUtil.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/AuthorUtil.java @@ -24,14 +24,13 @@ package sonia.scm.repository.util; +import jakarta.annotation.Nullable; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import sonia.scm.repository.Person; import sonia.scm.user.EMail; import sonia.scm.user.User; -import javax.annotation.Nullable; - public class AuthorUtil { public static void setAuthorIfNotAvailable(CommandWithAuthor request) { diff --git a/scm-core/src/main/java/sonia/scm/repository/work/NoneCachingWorkingCopyPool.java b/scm-core/src/main/java/sonia/scm/repository/work/NoneCachingWorkingCopyPool.java index 4a8efb7e7e..5092fadfc8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/work/NoneCachingWorkingCopyPool.java +++ b/scm-core/src/main/java/sonia/scm/repository/work/NoneCachingWorkingCopyPool.java @@ -24,9 +24,9 @@ package sonia.scm.repository.work; +import jakarta.inject.Inject; import sonia.scm.util.IOUtil; -import javax.inject.Inject; import java.io.File; /** diff --git a/scm-core/src/main/java/sonia/scm/repository/work/SimpleCachingWorkingCopyPool.java b/scm-core/src/main/java/sonia/scm/repository/work/SimpleCachingWorkingCopyPool.java index ed2e4822e9..cb7e0d776d 100644 --- a/scm-core/src/main/java/sonia/scm/repository/work/SimpleCachingWorkingCopyPool.java +++ b/scm-core/src/main/java/sonia/scm/repository/work/SimpleCachingWorkingCopyPool.java @@ -29,12 +29,13 @@ import com.google.common.base.Stopwatch; import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Timer; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.config.ConfigValue; import sonia.scm.util.IOUtil; -import javax.inject.Inject; -import javax.inject.Singleton; import java.io.File; import java.util.LinkedHashMap; import java.util.Map; @@ -43,7 +44,6 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import static java.lang.Integer.getInteger; import static java.util.Optional.empty; import static java.util.Optional.of; @@ -85,9 +85,6 @@ import static java.util.Optional.of; @Singleton public class SimpleCachingWorkingCopyPool implements WorkingCopyPool { - public static final int DEFAULT_WORKING_COPY_POOL_SIZE = 5; - public static final String WORKING_COPY_POOL_SIZE_PROPERTY = "scm.workingCopyPoolSize"; - private static final Logger LOG = LoggerFactory.getLogger(SimpleCachingWorkingCopyPool.class); private final WorkdirProvider workdirProvider; @@ -105,12 +102,16 @@ public class SimpleCachingWorkingCopyPool implements WorkingCopyPool { private final Timer deleteTimer; @Inject - public SimpleCachingWorkingCopyPool(WorkdirProvider workdirProvider, MeterRegistry meterRegistry) { - this(getInteger(WORKING_COPY_POOL_SIZE_PROPERTY, DEFAULT_WORKING_COPY_POOL_SIZE), workdirProvider, meterRegistry); + public SimpleCachingWorkingCopyPool( + @ConfigValue(key="workingCopyPoolSize", defaultValue="5", description = "Amount of cached working copies") Integer workingCopyPoolSize, + WorkdirProvider workdirProvider, + MeterRegistry meterRegistry + ) { + this(workdirProvider, meterRegistry, workingCopyPoolSize); } @VisibleForTesting - SimpleCachingWorkingCopyPool(int size, WorkdirProvider workdirProvider, MeterRegistry meterRegistry) { + SimpleCachingWorkingCopyPool(WorkdirProvider workdirProvider, MeterRegistry meterRegistry, int size) { this.workdirProvider = workdirProvider; this.workdirs = new LruMap(size); this.locks = new ConcurrentHashMap<>(); diff --git a/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java b/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java index 9454994d15..1af78ce7e8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java +++ b/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java @@ -27,14 +27,14 @@ package sonia.scm.repository.work; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Timer; import io.micrometer.core.instrument.composite.CompositeMeterRegistry; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.metrics.Metrics; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryProvider; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; import java.io.File; /** diff --git a/scm-core/src/main/java/sonia/scm/repository/work/WorkdirProvider.java b/scm-core/src/main/java/sonia/scm/repository/work/WorkdirProvider.java index 385b6a5dd6..cc01d5c671 100644 --- a/scm-core/src/main/java/sonia/scm/repository/work/WorkdirProvider.java +++ b/scm-core/src/main/java/sonia/scm/repository/work/WorkdirProvider.java @@ -24,15 +24,17 @@ package sonia.scm.repository.work; +import com.google.common.base.Strings; +import jakarta.inject.Inject; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.config.ConfigValue; import sonia.scm.plugin.Extension; import sonia.scm.repository.RepositoryLocationResolver; import sonia.scm.util.IOUtil; -import javax.inject.Inject; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -49,8 +51,11 @@ public class WorkdirProvider implements ServletContextListener { private final boolean useRepositorySpecificDir; @Inject - public WorkdirProvider(RepositoryLocationResolver repositoryLocationResolver) { - this(new File(System.getProperty("scm.workdir" , System.getProperty("java.io.tmpdir")), "scm-work"), repositoryLocationResolver, System.getProperty("scm.workdir") == null); + public WorkdirProvider( + @ConfigValue(key = "workdir", defaultValue = "", description = "Working directory for internal repository operations") String workDir, + RepositoryLocationResolver repositoryLocationResolver + ) { + this(new File(!Strings.isNullOrEmpty(workDir) ? workDir : System.getProperty("java.io.tmpdir") , "scm-work"), repositoryLocationResolver, workDir == null); } public WorkdirProvider(File rootDirectory, RepositoryLocationResolver repositoryLocationResolver, boolean useRepositorySpecificDir) { diff --git a/scm-core/src/main/java/sonia/scm/search/IndexLog.java b/scm-core/src/main/java/sonia/scm/search/IndexLog.java index 41231ce2ef..ab2073791d 100644 --- a/scm-core/src/main/java/sonia/scm/search/IndexLog.java +++ b/scm-core/src/main/java/sonia/scm/search/IndexLog.java @@ -25,13 +25,13 @@ package sonia.scm.search; import com.google.common.annotations.Beta; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.Data; import sonia.scm.xml.XmlInstantAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; /** diff --git a/scm-core/src/main/java/sonia/scm/security/AccessTokenCookieIssuer.java b/scm-core/src/main/java/sonia/scm/security/AccessTokenCookieIssuer.java index b6fc8a042e..b22cbaed65 100644 --- a/scm-core/src/main/java/sonia/scm/security/AccessTokenCookieIssuer.java +++ b/scm-core/src/main/java/sonia/scm/security/AccessTokenCookieIssuer.java @@ -24,8 +24,8 @@ package sonia.scm.security; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * Generates cookies and invalidates access token cookies. diff --git a/scm-core/src/main/java/sonia/scm/security/AssignedPermission.java b/scm-core/src/main/java/sonia/scm/security/AssignedPermission.java index b64b6940df..45e7e0c657 100644 --- a/scm-core/src/main/java/sonia/scm/security/AssignedPermission.java +++ b/scm-core/src/main/java/sonia/scm/security/AssignedPermission.java @@ -28,13 +28,13 @@ package sonia.scm.security; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.auditlog.AuditEntry; import sonia.scm.auditlog.AuditLogEntity; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-core/src/main/java/sonia/scm/security/BearerToken.java b/scm-core/src/main/java/sonia/scm/security/BearerToken.java index 31cc6c815e..7140c8fe6d 100644 --- a/scm-core/src/main/java/sonia/scm/security/BearerToken.java +++ b/scm-core/src/main/java/sonia/scm/security/BearerToken.java @@ -28,10 +28,9 @@ package sonia.scm.security; import com.google.common.base.Preconditions; import com.google.common.base.Strings; +import jakarta.annotation.Nullable; import org.apache.shiro.authc.AuthenticationToken; -import javax.annotation.Nullable; - /** * Token used for authentication with bearer tokens. * diff --git a/scm-core/src/main/java/sonia/scm/security/DAORealmHelperFactory.java b/scm-core/src/main/java/sonia/scm/security/DAORealmHelperFactory.java index ba15ce19f2..24fb2d6eaa 100644 --- a/scm-core/src/main/java/sonia/scm/security/DAORealmHelperFactory.java +++ b/scm-core/src/main/java/sonia/scm/security/DAORealmHelperFactory.java @@ -24,11 +24,10 @@ package sonia.scm.security; +import jakarta.inject.Inject; import sonia.scm.cache.CacheManager; import sonia.scm.user.UserDAO; -import javax.inject.Inject; - /** * Factory to create {@link DAORealmHelper} instances. * diff --git a/scm-core/src/main/java/sonia/scm/security/DefaultCipherHandler.java b/scm-core/src/main/java/sonia/scm/security/DefaultCipherHandler.java index 77e08ac0d5..9ef89ba725 100644 --- a/scm-core/src/main/java/sonia/scm/security/DefaultCipherHandler.java +++ b/scm-core/src/main/java/sonia/scm/security/DefaultCipherHandler.java @@ -27,15 +27,16 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.annotations.VisibleForTesting; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.SCMContextProvider; import sonia.scm.util.IOUtil; -//~--- JDK imports ------------------------------------------------------------ - +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.spec.GCMParameterSpec; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; @@ -45,20 +46,12 @@ import java.io.PrintWriter; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; - import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; - import java.util.Arrays; import java.util.Base64; -import javax.crypto.Cipher; -import javax.crypto.SecretKey; -import javax.crypto.spec.GCMParameterSpec; -import javax.crypto.spec.IvParameterSpec; -import javax.crypto.spec.SecretKeySpec; - /** * Default implementation of the {@link CipherHandler}, which uses AES for * encryption and decryption. @@ -72,7 +65,7 @@ public class DefaultCipherHandler implements CipherHandler { * Cipher type used before v2. * @see Issue 1110 */ - public static final String OLD_CIPHER_TYPE = "AES/CTR/PKCS5PADDING"; + public static final String OLD_CIPHER_TYPE = "AES/CTR/NoPadding"; /** used cipher type for format v2 */ public static final String CIPHER_TYPE = "AES/GCM/NoPadding"; diff --git a/scm-core/src/main/java/sonia/scm/security/PermissionDescriptor.java b/scm-core/src/main/java/sonia/scm/security/PermissionDescriptor.java index 6d2eacadb8..97c6a7771f 100644 --- a/scm-core/src/main/java/sonia/scm/security/PermissionDescriptor.java +++ b/scm-core/src/main/java/sonia/scm/security/PermissionDescriptor.java @@ -28,10 +28,10 @@ package sonia.scm.security; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-core/src/main/java/sonia/scm/security/Scope.java b/scm-core/src/main/java/sonia/scm/security/Scope.java index 4b24519fca..3fae3f4def 100644 --- a/scm-core/src/main/java/sonia/scm/security/Scope.java +++ b/scm-core/src/main/java/sonia/scm/security/Scope.java @@ -25,13 +25,13 @@ package sonia.scm.security; import com.google.common.collect.ImmutableList; -import java.util.Collection; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import java.util.Collection; import java.util.Collections; import java.util.Iterator; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; /** * Scope of a token. A scope is able to reduce the permissions of a token authentication. That means we can issue a diff --git a/scm-core/src/main/java/sonia/scm/security/SessionId.java b/scm-core/src/main/java/sonia/scm/security/SessionId.java index 1f9a8e7da5..ba75be2547 100644 --- a/scm-core/src/main/java/sonia/scm/security/SessionId.java +++ b/scm-core/src/main/java/sonia/scm/security/SessionId.java @@ -26,10 +26,10 @@ package sonia.scm.security; import com.google.common.base.Preconditions; import com.google.common.base.Strings; +import jakarta.servlet.http.HttpServletRequest; import lombok.EqualsAndHashCode; import sonia.scm.util.HttpUtil; -import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.util.Optional; diff --git a/scm-core/src/main/java/sonia/scm/security/StoredAssignedPermission.java b/scm-core/src/main/java/sonia/scm/security/StoredAssignedPermission.java index c25628a452..5fbc16bd76 100644 --- a/scm-core/src/main/java/sonia/scm/security/StoredAssignedPermission.java +++ b/scm-core/src/main/java/sonia/scm/security/StoredAssignedPermission.java @@ -26,9 +26,9 @@ package sonia.scm.security; //~--- JDK imports ------------------------------------------------------------ -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; /** * Permission object which is stored and assigned to a specific user or group. diff --git a/scm-core/src/main/java/sonia/scm/security/Tokens.java b/scm-core/src/main/java/sonia/scm/security/Tokens.java index b3c431310d..61307074ea 100644 --- a/scm-core/src/main/java/sonia/scm/security/Tokens.java +++ b/scm-core/src/main/java/sonia/scm/security/Tokens.java @@ -26,14 +26,11 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.subject.Subject; -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.http.HttpServletRequest; - /** * Create tokens for security reasons. * diff --git a/scm-core/src/main/java/sonia/scm/sse/ChannelCleanupTask.java b/scm-core/src/main/java/sonia/scm/sse/ChannelCleanupTask.java index 9f5170f515..3b5f1d284a 100644 --- a/scm-core/src/main/java/sonia/scm/sse/ChannelCleanupTask.java +++ b/scm-core/src/main/java/sonia/scm/sse/ChannelCleanupTask.java @@ -24,7 +24,7 @@ package sonia.scm.sse; -import javax.inject.Inject; +import jakarta.inject.Inject; public class ChannelCleanupTask implements Runnable { diff --git a/scm-core/src/main/java/sonia/scm/sse/ChannelRegistry.java b/scm-core/src/main/java/sonia/scm/sse/ChannelRegistry.java index 8ded5162a8..a8acb472a6 100644 --- a/scm-core/src/main/java/sonia/scm/sse/ChannelRegistry.java +++ b/scm-core/src/main/java/sonia/scm/sse/ChannelRegistry.java @@ -25,8 +25,8 @@ package sonia.scm.sse; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Singleton; -import javax.inject.Singleton; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; diff --git a/scm-core/src/main/java/sonia/scm/sse/Client.java b/scm-core/src/main/java/sonia/scm/sse/Client.java index af7da4d466..b1950cff1e 100644 --- a/scm-core/src/main/java/sonia/scm/sse/Client.java +++ b/scm-core/src/main/java/sonia/scm/sse/Client.java @@ -24,12 +24,12 @@ package sonia.scm.sse; +import jakarta.ws.rs.sse.OutboundSseEvent; +import jakarta.ws.rs.sse.SseEventSink; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.security.SessionId; -import javax.ws.rs.sse.OutboundSseEvent; -import javax.ws.rs.sse.SseEventSink; import java.io.Closeable; import java.time.Instant; import java.util.function.Function; diff --git a/scm-core/src/main/java/sonia/scm/sse/Registration.java b/scm-core/src/main/java/sonia/scm/sse/Registration.java index b558c8ffb2..5d8f42d741 100644 --- a/scm-core/src/main/java/sonia/scm/sse/Registration.java +++ b/scm-core/src/main/java/sonia/scm/sse/Registration.java @@ -25,12 +25,11 @@ package sonia.scm.sse; import com.google.common.base.Preconditions; +import jakarta.ws.rs.sse.Sse; +import jakarta.ws.rs.sse.SseEventSink; import lombok.Value; import sonia.scm.security.SessionId; -import javax.ws.rs.sse.Sse; -import javax.ws.rs.sse.SseEventSink; - @Value public class Registration { diff --git a/scm-core/src/main/java/sonia/scm/sse/SseContextListener.java b/scm-core/src/main/java/sonia/scm/sse/SseContextListener.java index 85572f4229..6f1f77b70f 100644 --- a/scm-core/src/main/java/sonia/scm/sse/SseContextListener.java +++ b/scm-core/src/main/java/sonia/scm/sse/SseContextListener.java @@ -24,13 +24,12 @@ package sonia.scm.sse; +import jakarta.inject.Inject; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import sonia.scm.plugin.Extension; import sonia.scm.schedule.Scheduler; -import javax.inject.Inject; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - @Extension public class SseContextListener implements ServletContextListener { diff --git a/scm-core/src/main/java/sonia/scm/sse/SseEventAdapter.java b/scm-core/src/main/java/sonia/scm/sse/SseEventAdapter.java index 28daeff9c2..80bc954c4d 100644 --- a/scm-core/src/main/java/sonia/scm/sse/SseEventAdapter.java +++ b/scm-core/src/main/java/sonia/scm/sse/SseEventAdapter.java @@ -24,9 +24,9 @@ package sonia.scm.sse; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.sse.OutboundSseEvent; -import javax.ws.rs.sse.Sse; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.sse.OutboundSseEvent; +import jakarta.ws.rs.sse.Sse; class SseEventAdapter { diff --git a/scm-core/src/main/java/sonia/scm/sse/SseResponse.java b/scm-core/src/main/java/sonia/scm/sse/SseResponse.java index 74678b1abc..1bc3a64f2e 100644 --- a/scm-core/src/main/java/sonia/scm/sse/SseResponse.java +++ b/scm-core/src/main/java/sonia/scm/sse/SseResponse.java @@ -24,7 +24,8 @@ package sonia.scm.sse; -import javax.ws.rs.NameBinding; +import jakarta.ws.rs.NameBinding; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/scm-core/src/main/java/sonia/scm/store/BlobStore.java b/scm-core/src/main/java/sonia/scm/store/BlobStore.java index cc28c6fbbb..80b9910d16 100644 --- a/scm-core/src/main/java/sonia/scm/store/BlobStore.java +++ b/scm-core/src/main/java/sonia/scm/store/BlobStore.java @@ -55,7 +55,7 @@ public interface BlobStore extends MultiEntryStore * * @return new blob * - * @throws EntryAllreadyExistsStoreException if a blob with given id already + * @throws sonia.scm.store.EntryAlreadyExistsStoreException if a blob with given id already * exists */ public Blob create(String id); diff --git a/scm-core/src/main/java/sonia/scm/store/TypedStoreParameters.java b/scm-core/src/main/java/sonia/scm/store/TypedStoreParameters.java index 4f80078743..4285d8e413 100644 --- a/scm-core/src/main/java/sonia/scm/store/TypedStoreParameters.java +++ b/scm-core/src/main/java/sonia/scm/store/TypedStoreParameters.java @@ -24,7 +24,8 @@ package sonia.scm.store; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; + import java.util.Optional; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/store/TypedStoreParametersBuilder.java b/scm-core/src/main/java/sonia/scm/store/TypedStoreParametersBuilder.java index 15e90516fd..308a75e134 100644 --- a/scm-core/src/main/java/sonia/scm/store/TypedStoreParametersBuilder.java +++ b/scm-core/src/main/java/sonia/scm/store/TypedStoreParametersBuilder.java @@ -25,6 +25,7 @@ package sonia.scm.store; import com.google.common.collect.ImmutableSet; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -33,7 +34,6 @@ import lombok.Setter; import sonia.scm.plugin.PluginLoader; import sonia.scm.repository.Repository; -import javax.xml.bind.annotation.adapters.XmlAdapter; import java.util.HashSet; import java.util.Optional; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/trace/SpanContext.java b/scm-core/src/main/java/sonia/scm/trace/SpanContext.java index d158933d7a..becf2c71a3 100644 --- a/scm-core/src/main/java/sonia/scm/trace/SpanContext.java +++ b/scm-core/src/main/java/sonia/scm/trace/SpanContext.java @@ -24,6 +24,10 @@ package sonia.scm.trace; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; @@ -31,10 +35,6 @@ import lombok.Getter; import lombok.NoArgsConstructor; import sonia.scm.xml.XmlInstantAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Duration; import java.time.Instant; import java.util.Map; diff --git a/scm-core/src/main/java/sonia/scm/trace/Tracer.java b/scm-core/src/main/java/sonia/scm/trace/Tracer.java index 7f35c16dff..e4fef586f6 100644 --- a/scm-core/src/main/java/sonia/scm/trace/Tracer.java +++ b/scm-core/src/main/java/sonia/scm/trace/Tracer.java @@ -24,7 +24,8 @@ package sonia.scm.trace; -import javax.inject.Inject; +import jakarta.inject.Inject; + import java.util.Set; /** diff --git a/scm-core/src/main/java/sonia/scm/update/V1Properties.java b/scm-core/src/main/java/sonia/scm/update/V1Properties.java index fdafd2525c..801d6739ec 100644 --- a/scm-core/src/main/java/sonia/scm/update/V1Properties.java +++ b/scm-core/src/main/java/sonia/scm/update/V1Properties.java @@ -24,10 +24,11 @@ package sonia.scm.update; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; + import java.util.List; import java.util.Optional; import java.util.stream.Stream; diff --git a/scm-core/src/main/java/sonia/scm/update/V1Property.java b/scm-core/src/main/java/sonia/scm/update/V1Property.java index 883efcec34..62178fc82b 100644 --- a/scm-core/src/main/java/sonia/scm/update/V1Property.java +++ b/scm-core/src/main/java/sonia/scm/update/V1Property.java @@ -24,8 +24,9 @@ package sonia.scm.update; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; + import java.util.Objects; @XmlAccessorType(XmlAccessType.FIELD) diff --git a/scm-core/src/main/java/sonia/scm/user/EMail.java b/scm-core/src/main/java/sonia/scm/user/EMail.java index 740fd99b7f..ec83bfeed6 100644 --- a/scm-core/src/main/java/sonia/scm/user/EMail.java +++ b/scm-core/src/main/java/sonia/scm/user/EMail.java @@ -25,11 +25,10 @@ package sonia.scm.user; import com.google.common.base.Strings; +import jakarta.inject.Inject; import sonia.scm.config.ScmConfiguration; import sonia.scm.util.ValidationUtil; -import javax.inject.Inject; - /** * Email is able to resolve email addresses of users. * diff --git a/scm-core/src/main/java/sonia/scm/user/User.java b/scm-core/src/main/java/sonia/scm/user/User.java index 6ebe29df80..324e619c8a 100644 --- a/scm-core/src/main/java/sonia/scm/user/User.java +++ b/scm-core/src/main/java/sonia/scm/user/User.java @@ -28,6 +28,9 @@ import com.github.sdorra.ssp.PermissionObject; import com.github.sdorra.ssp.StaticPermissions; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -42,9 +45,6 @@ import sonia.scm.search.IndexedType; import sonia.scm.util.Util; import sonia.scm.util.ValidationUtil; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; import java.security.Principal; @StaticPermissions( diff --git a/scm-core/src/main/java/sonia/scm/util/HttpUtil.java b/scm-core/src/main/java/sonia/scm/util/HttpUtil.java index 951ac33d1d..42b987578e 100644 --- a/scm-core/src/main/java/sonia/scm/util/HttpUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/HttpUtil.java @@ -29,12 +29,12 @@ package sonia.scm.util; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.CharMatcher; import com.google.common.base.Strings; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.config.ScmConfiguration; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; diff --git a/scm-core/src/main/java/sonia/scm/util/JsonMerger.java b/scm-core/src/main/java/sonia/scm/util/JsonMerger.java index 9bde2379e9..36e22cc3ab 100644 --- a/scm-core/src/main/java/sonia/scm/util/JsonMerger.java +++ b/scm-core/src/main/java/sonia/scm/util/JsonMerger.java @@ -28,9 +28,9 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import jakarta.inject.Inject; import sonia.scm.web.api.DtoValidator; -import javax.inject.Inject; import java.util.Iterator; /** diff --git a/scm-core/src/main/java/sonia/scm/util/WebUtil.java b/scm-core/src/main/java/sonia/scm/util/WebUtil.java index e8846843a2..7f2db1c2b4 100644 --- a/scm-core/src/main/java/sonia/scm/util/WebUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/WebUtil.java @@ -26,25 +26,20 @@ package sonia.scm.util; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; - import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; - import java.util.Date; import java.util.Locale; import java.util.TimeZone; import java.util.function.Function; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/util/XmlUtil.java b/scm-core/src/main/java/sonia/scm/util/XmlUtil.java index f14346a11e..c704f76668 100644 --- a/scm-core/src/main/java/sonia/scm/util/XmlUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/XmlUtil.java @@ -28,21 +28,16 @@ package sonia.scm.util; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; - import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; - import org.xml.sax.SAXException; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; -import java.io.InputStream; - import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.io.InputStream; /** * Util methods to handle xml files. diff --git a/scm-core/src/main/java/sonia/scm/web/JsonEnricherContext.java b/scm-core/src/main/java/sonia/scm/web/JsonEnricherContext.java index 34e5d1e810..3455227009 100644 --- a/scm-core/src/main/java/sonia/scm/web/JsonEnricherContext.java +++ b/scm-core/src/main/java/sonia/scm/web/JsonEnricherContext.java @@ -25,8 +25,8 @@ package sonia.scm.web; import com.fasterxml.jackson.databind.JsonNode; +import jakarta.ws.rs.core.MediaType; -import javax.ws.rs.core.MediaType; import java.net.URI; /** diff --git a/scm-core/src/main/java/sonia/scm/web/SchemeBasedWebTokenGenerator.java b/scm-core/src/main/java/sonia/scm/web/SchemeBasedWebTokenGenerator.java index 160e0e25d4..2f600a8cfe 100644 --- a/scm-core/src/main/java/sonia/scm/web/SchemeBasedWebTokenGenerator.java +++ b/scm-core/src/main/java/sonia/scm/web/SchemeBasedWebTokenGenerator.java @@ -27,16 +27,11 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Strings; - +import jakarta.servlet.http.HttpServletRequest; import org.apache.shiro.authc.AuthenticationToken; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.http.HttpServletRequest; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/web/ScmClientDetector.java b/scm-core/src/main/java/sonia/scm/web/ScmClientDetector.java index 5937e19437..a0ebc63867 100644 --- a/scm-core/src/main/java/sonia/scm/web/ScmClientDetector.java +++ b/scm-core/src/main/java/sonia/scm/web/ScmClientDetector.java @@ -24,10 +24,9 @@ package sonia.scm.web; +import jakarta.servlet.http.HttpServletRequest; import sonia.scm.plugin.ExtensionPoint; -import javax.servlet.http.HttpServletRequest; - /** * This can be used to determine, whether a web request should be handled as a scm client request. * diff --git a/scm-core/src/main/java/sonia/scm/web/UserAgentParser.java b/scm-core/src/main/java/sonia/scm/web/UserAgentParser.java index 307e09fdca..d62341d058 100644 --- a/scm-core/src/main/java/sonia/scm/web/UserAgentParser.java +++ b/scm-core/src/main/java/sonia/scm/web/UserAgentParser.java @@ -30,21 +30,16 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.inject.Inject; import com.google.inject.Singleton; - +import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; import sonia.scm.util.HttpUtil; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Locale; import java.util.Set; -import javax.servlet.http.HttpServletRequest; - /** * Parser for User-Agent header. The UserAgentParser parses the User-Agent * header and returns a {@link UserAgent} object. diff --git a/scm-core/src/main/java/sonia/scm/web/VndMediaType.java b/scm-core/src/main/java/sonia/scm/web/VndMediaType.java index a7c94d4e8a..2597de9e2c 100644 --- a/scm-core/src/main/java/sonia/scm/web/VndMediaType.java +++ b/scm-core/src/main/java/sonia/scm/web/VndMediaType.java @@ -24,7 +24,7 @@ package sonia.scm.web; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; /** * Vendor media types used by SCMM. diff --git a/scm-core/src/main/java/sonia/scm/web/WebTokenGenerator.java b/scm-core/src/main/java/sonia/scm/web/WebTokenGenerator.java index 7f87e06e5e..000fe6bdeb 100644 --- a/scm-core/src/main/java/sonia/scm/web/WebTokenGenerator.java +++ b/scm-core/src/main/java/sonia/scm/web/WebTokenGenerator.java @@ -26,14 +26,10 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; import org.apache.shiro.authc.AuthenticationToken; - import sonia.scm.plugin.ExtensionPoint; -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.http.HttpServletRequest; - /** * Creates an {@link AuthenticationToken} from a {@link HttpServletRequest}. * diff --git a/scm-core/src/main/java/sonia/scm/web/api/DtoValidator.java b/scm-core/src/main/java/sonia/scm/web/api/DtoValidator.java index 2b81fe6c62..7ff917c96c 100644 --- a/scm-core/src/main/java/sonia/scm/web/api/DtoValidator.java +++ b/scm-core/src/main/java/sonia/scm/web/api/DtoValidator.java @@ -24,11 +24,12 @@ package sonia.scm.web.api; -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; + import java.util.Set; public final class DtoValidator { diff --git a/scm-core/src/main/java/sonia/scm/web/cgi/CGIExceptionHandler.java b/scm-core/src/main/java/sonia/scm/web/cgi/CGIExceptionHandler.java index b1a32b651f..f858ea24f3 100644 --- a/scm-core/src/main/java/sonia/scm/web/cgi/CGIExceptionHandler.java +++ b/scm-core/src/main/java/sonia/scm/web/cgi/CGIExceptionHandler.java @@ -26,8 +26,8 @@ package sonia.scm.web.cgi; //~--- JDK imports ------------------------------------------------------------ -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; /** * Handles exception thrown by an {@link CGIExecutor} diff --git a/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutor.java b/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutor.java index 7498b3803d..a9ecf51c27 100644 --- a/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutor.java +++ b/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutor.java @@ -26,7 +26,8 @@ package sonia.scm.web.cgi; //~--- JDK imports ------------------------------------------------------------ -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; + import java.io.File; import java.io.IOException; import java.util.Collections; diff --git a/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutorFactory.java b/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutorFactory.java index 4f63af0f53..7d23ec12ca 100644 --- a/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutorFactory.java +++ b/scm-core/src/main/java/sonia/scm/web/cgi/CGIExecutorFactory.java @@ -26,14 +26,11 @@ package sonia.scm.web.cgi; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.config.ScmConfiguration; -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/web/cgi/CGIStatusCodeHandler.java b/scm-core/src/main/java/sonia/scm/web/cgi/CGIStatusCodeHandler.java index 02eacbbfe9..c6cbacb00c 100644 --- a/scm-core/src/main/java/sonia/scm/web/cgi/CGIStatusCodeHandler.java +++ b/scm-core/src/main/java/sonia/scm/web/cgi/CGIStatusCodeHandler.java @@ -26,12 +26,12 @@ package sonia.scm.web.cgi; //~--- JDK imports ------------------------------------------------------------ +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + import java.io.IOException; import java.io.OutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * Interface for handling return codes of processes * executed by the {@link CGIExecutor}. diff --git a/scm-core/src/main/java/sonia/scm/web/filter/AuthenticationFilter.java b/scm-core/src/main/java/sonia/scm/web/filter/AuthenticationFilter.java index 12f1d0df5f..2cb132dedd 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/AuthenticationFilter.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/AuthenticationFilter.java @@ -28,6 +28,10 @@ package sonia.scm.web.filter; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationToken; @@ -45,10 +49,6 @@ import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; import sonia.scm.web.WebTokenGenerator; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletRequest.java b/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletRequest.java index e674d1d2e2..e698cc5af8 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletRequest.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletRequest.java @@ -26,21 +26,18 @@ package sonia.scm.web.filter; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//~--- JDK imports ------------------------------------------------------------ - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletResponse.java b/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletResponse.java index 0d13ed752f..df2eb080ba 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletResponse.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/BufferedHttpServletResponse.java @@ -26,25 +26,23 @@ package sonia.scm.web.filter; //~--- JDK imports ------------------------------------------------------------ +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintWriter; - import java.util.Date; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; - /** * * @author Sebastian Sdorra @@ -345,14 +343,15 @@ public class BufferedHttpServletResponse extends HttpServletResponseWrapper * @param sc * @param sm */ - @Override - @SuppressWarnings("deprecation") - public void setStatus(int sc, String sm) - { - this.statusCode = sc; - this.statusMessage = sm; - super.setStatus(sc, sm); - } +//// @Override +// @SuppressWarnings("deprecation") + //TODO What to do? +// public void setStatus(int sc, String sm) +// { +// this.statusCode = sc; +// this.statusMessage = sm; +// super.setStatus(sc); +// } //~--- inner classes -------------------------------------------------------- diff --git a/scm-core/src/main/java/sonia/scm/web/filter/HttpFilter.java b/scm-core/src/main/java/sonia/scm/web/filter/HttpFilter.java index 4a4f6ad551..ec384d0fe3 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/HttpFilter.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/HttpFilter.java @@ -26,16 +26,16 @@ package sonia.scm.web.filter; //~--- JDK imports ------------------------------------------------------------ -import java.io.IOException; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import java.io.IOException; /** * diff --git a/scm-core/src/main/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBase.java b/scm-core/src/main/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBase.java index 3750673ed3..df7e531cf5 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBase.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBase.java @@ -24,6 +24,10 @@ package sonia.scm.web.filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.config.ScmConfiguration; import sonia.scm.security.TokenExpiredException; import sonia.scm.util.HttpUtil; @@ -31,10 +35,6 @@ import sonia.scm.web.UserAgent; import sonia.scm.web.UserAgentParser; import sonia.scm.web.WebTokenGenerator; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/web/filter/LoggingFilter.java b/scm-core/src/main/java/sonia/scm/web/filter/LoggingFilter.java index 86256cd5ee..5fc553d2aa 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/LoggingFilter.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/LoggingFilter.java @@ -28,29 +28,23 @@ package sonia.scm.web.filter; import com.google.common.base.Strings; import com.google.inject.Singleton; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.util.IOUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.util.Enumeration; import java.util.Locale; import java.util.Map.Entry; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java b/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java index e82dde656c..04f9f3d3f9 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java @@ -24,6 +24,9 @@ package sonia.scm.web.filter; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.subject.Subject; @@ -39,9 +42,6 @@ import sonia.scm.security.Authentications; import sonia.scm.security.ScmSecurityException; import sonia.scm.util.HttpUtil; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** diff --git a/scm-core/src/main/java/sonia/scm/web/filter/PropagatePrincipleServletRequestWrapper.java b/scm-core/src/main/java/sonia/scm/web/filter/PropagatePrincipleServletRequestWrapper.java index db34a3707b..ccfb6e1d97 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/PropagatePrincipleServletRequestWrapper.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/PropagatePrincipleServletRequestWrapper.java @@ -26,8 +26,8 @@ package sonia.scm.web.filter; //~--- JDK imports ------------------------------------------------------------ -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; public class PropagatePrincipleServletRequestWrapper extends HttpServletRequestWrapper { diff --git a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java index 6d13e2d94b..c8a1d00de4 100644 --- a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java +++ b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfiguration.java @@ -28,12 +28,12 @@ package sonia.scm.web.proxy; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; import java.net.URL; import java.util.Collections; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfigurationProvider.java b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfigurationProvider.java index a909573346..f72f998ef9 100644 --- a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfigurationProvider.java +++ b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyConfigurationProvider.java @@ -26,7 +26,7 @@ package sonia.scm.web.proxy; //~--- JDK imports ------------------------------------------------------------ -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; /** * diff --git a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyServlet.java b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyServlet.java index 0e951b23e0..1908e6f2a6 100644 --- a/scm-core/src/main/java/sonia/scm/web/proxy/ProxyServlet.java +++ b/scm-core/src/main/java/sonia/scm/web/proxy/ProxyServlet.java @@ -31,13 +31,17 @@ import com.google.common.io.ByteStreams; import com.google.common.io.Closer; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.*; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.net.HttpURLConnection; import java.util.Enumeration; import java.util.List; diff --git a/scm-core/src/main/java/sonia/scm/work/CentralWorkQueue.java b/scm-core/src/main/java/sonia/scm/work/CentralWorkQueue.java index c526fd642e..bc8609ff3d 100644 --- a/scm-core/src/main/java/sonia/scm/work/CentralWorkQueue.java +++ b/scm-core/src/main/java/sonia/scm/work/CentralWorkQueue.java @@ -25,10 +25,9 @@ package sonia.scm.work; import com.google.common.annotations.Beta; +import jakarta.annotation.Nullable; import sonia.scm.ModelObject; -import javax.annotation.Nullable; - /** * The {@link CentralWorkQueue} provides an api to submit and coordinate long-running or resource intensive tasks. * diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlArrayStringAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlArrayStringAdapter.java index 8818b34781..7331f76100 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlArrayStringAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlArrayStringAdapter.java @@ -28,10 +28,7 @@ package sonia.scm.xml; import com.google.common.base.Joiner; import com.google.common.base.Splitter; - -//~--- JDK imports ------------------------------------------------------------ - -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; /** * Converts a string to a string array and vice versa. The string is divided by diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlCipherByteArrayAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlCipherByteArrayAdapter.java index 1a980334ec..5f44395406 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlCipherByteArrayAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlCipherByteArrayAdapter.java @@ -24,10 +24,9 @@ package sonia.scm.xml; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import sonia.scm.security.CipherUtil; -import javax.xml.bind.annotation.adapters.XmlAdapter; - /** * @since 2.19.0 */ diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlCipherStringAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlCipherStringAdapter.java index 722827a358..004a238a4e 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlCipherStringAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlCipherStringAdapter.java @@ -26,12 +26,9 @@ package sonia.scm.xml; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import sonia.scm.security.CipherUtil; -//~--- JDK imports ------------------------------------------------------------ - -import javax.xml.bind.annotation.adapters.XmlAdapter; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlDateAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlDateAdapter.java index fb8ee89c91..0ff8c195db 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlDateAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlDateAdapter.java @@ -26,14 +26,11 @@ package sonia.scm.xml; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Date; -import javax.xml.bind.annotation.adapters.XmlAdapter; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlEncryptionAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlEncryptionAdapter.java index f24a9ce589..1408594793 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlEncryptionAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlEncryptionAdapter.java @@ -24,7 +24,7 @@ package sonia.scm.xml; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; public class XmlEncryptionAdapter extends XmlAdapter { diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlInstantAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlInstantAdapter.java index 33222df242..87b143d675 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlInstantAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlInstantAdapter.java @@ -24,7 +24,8 @@ package sonia.scm.xml; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; + import java.time.Instant; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAccessor; diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlIntervalAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlIntervalAdapter.java index 22da632e76..2746c4a90c 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlIntervalAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlIntervalAdapter.java @@ -26,12 +26,9 @@ package sonia.scm.xml; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - -import javax.xml.bind.annotation.adapters.XmlAdapter; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlMapMultiStringAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlMapMultiStringAdapter.java index d8a41266cc..ba2a37a7fa 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlMapMultiStringAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlMapMultiStringAdapter.java @@ -24,9 +24,9 @@ package sonia.scm.xml; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import sonia.scm.util.Util; -import javax.xml.bind.annotation.adapters.XmlAdapter; import java.util.HashMap; import java.util.Map; import java.util.Set; diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlMapMultiStringElement.java b/scm-core/src/main/java/sonia/scm/xml/XmlMapMultiStringElement.java index 1ffe490f9e..766b11a162 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlMapMultiStringElement.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlMapMultiStringElement.java @@ -24,10 +24,11 @@ package sonia.scm.xml; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + import java.util.Set; @XmlRootElement(name = "element") diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlMapStringAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlMapStringAdapter.java index 052b0a7d22..bc5062244e 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlMapStringAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlMapStringAdapter.java @@ -26,15 +26,12 @@ package sonia.scm.xml; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.util.HashMap; import java.util.Map; -import javax.xml.bind.annotation.adapters.XmlAdapter; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlMapStringElement.java b/scm-core/src/main/java/sonia/scm/xml/XmlMapStringElement.java index fa53406837..473418d32a 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlMapStringElement.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlMapStringElement.java @@ -26,9 +26,9 @@ package sonia.scm.xml; //~--- JDK imports ------------------------------------------------------------ -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; /** * diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlSetStringAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlSetStringAdapter.java index 169a3d6123..92044380e7 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlSetStringAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlSetStringAdapter.java @@ -26,12 +26,12 @@ package sonia.scm.xml; //~--- JDK imports ------------------------------------------------------------ +import jakarta.xml.bind.annotation.adapters.XmlAdapter; + import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import javax.xml.bind.annotation.adapters.XmlAdapter; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlTimestampDateAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlTimestampDateAdapter.java index 43deb2801b..e3f3236507 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlTimestampDateAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlTimestampDateAdapter.java @@ -26,14 +26,11 @@ package sonia.scm.xml; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Date; -import javax.xml.bind.annotation.adapters.XmlAdapter; - /** * * @author Sebastian Sdorra diff --git a/scm-core/src/main/java/sonia/scm/xml/XmlUTCDateAdapter.java b/scm-core/src/main/java/sonia/scm/xml/XmlUTCDateAdapter.java index 188b703620..f61047d978 100644 --- a/scm-core/src/main/java/sonia/scm/xml/XmlUTCDateAdapter.java +++ b/scm-core/src/main/java/sonia/scm/xml/XmlUTCDateAdapter.java @@ -24,7 +24,8 @@ package sonia.scm.xml; -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; + import java.text.SimpleDateFormat; import java.util.Date; diff --git a/scm-core/src/test/java/sonia/scm/BaseDirectoryTest.java b/scm-core/src/test/java/sonia/scm/BaseDirectoryTest.java index d33dae1306..b45390799b 100644 --- a/scm-core/src/test/java/sonia/scm/BaseDirectoryTest.java +++ b/scm-core/src/test/java/sonia/scm/BaseDirectoryTest.java @@ -25,32 +25,35 @@ package sonia.scm; import com.google.common.collect.ImmutableMap; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import sonia.scm.config.WebappConfigProvider; import java.nio.file.Paths; import java.util.Map; import java.util.Properties; +import static java.util.Collections.emptyMap; import static org.assertj.core.api.Assertions.assertThat; class BaseDirectoryTest { + @AfterEach + void clearConfig() { + WebappConfigProvider.setConfigBindings(emptyMap()); + } + @Test void shouldGetFromClassPathResource() { BaseDirectory directory = builder().withClassPathResource("/sonia/scm/basedirectory.properties").create(); assertThat(directory.find()).isEqualTo(Paths.get("/tmp/scm_home")); } - @Test - void shouldGetFromSystemProperty() { - BaseDirectory directory = builder().withSystemProperty(BaseDirectory.SYSTEM_PROPERTY, "/tmp/scm_home").create(); - assertThat(directory.find()).isEqualTo(Paths.get("/tmp/scm_home")); - } - @Test void shouldGetFromEnvironmentVariable() { - BaseDirectory directory = builder().withEnvironment(BaseDirectory.ENVIRONMENT_VARIABLE, "/tmp/scm_home").create(); + WebappConfigProvider.setConfigBindings(Map.of("homeDir", "/tmp/scm_home")); + BaseDirectory directory = builder().create(); assertThat(directory.find()).isEqualTo(Paths.get("/tmp/scm_home")); } diff --git a/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java b/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java index c32dd3beab..c5e88cf01b 100644 --- a/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java +++ b/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java @@ -29,13 +29,14 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import sonia.scm.config.WebappConfigProvider; import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; import static sonia.scm.BasicContextProvider.DEVELOPMENT_INSTANCE_ID; -import static sonia.scm.BasicContextProvider.STAGE_PROPERTY; class BasicContextProviderTest { @@ -43,14 +44,10 @@ class BasicContextProviderTest { class VersionTests { @Test - void shouldReturnVersionFromSystemProperty() { - System.setProperty(BasicContextProvider.VERSION_PROPERTY, "3.0.0"); - try { - SCMContextProvider context = new BasicContextProvider(); - assertThat(context.getVersion()).isEqualTo("3.0.0"); - } finally { - System.clearProperty(BasicContextProvider.VERSION_PROPERTY); - } + void shouldReturnVersionFromVersionOverride() { + WebappConfigProvider.setConfigBindings(Map.of("versionOverride", "3.0.0")); + SCMContextProvider context = new BasicContextProvider(); + assertThat(context.getVersion()).isEqualTo("3.0.0"); } @Test @@ -134,26 +131,15 @@ class BasicContextProviderTest { @Nested class WithStageDevelopment { - private String stage; - - @BeforeEach - void setStage() { - stage = new BasicContextProvider().getStage().name(); - System.setProperty(STAGE_PROPERTY, Stage.DEVELOPMENT.name()); - } - @Test void shouldReturnHardCodeInstanceIfIfStageDevelopment() { + WebappConfigProvider.setConfigBindings(Map.of("stage", Stage.DEVELOPMENT.name())); + BasicContextProvider basicContextProvider = new BasicContextProvider(); String instanceId = basicContextProvider.getInstanceId(); assertThat(instanceId).isEqualTo(DEVELOPMENT_INSTANCE_ID); } - - @AfterEach - void resetStage() { - System.setProperty(STAGE_PROPERTY, stage); - } } } } diff --git a/scm-core/src/test/java/sonia/scm/cli/CommandValidatorTest.java b/scm-core/src/test/java/sonia/scm/cli/CommandValidatorTest.java index 4927c93a5d..e786de6bc5 100644 --- a/scm-core/src/test/java/sonia/scm/cli/CommandValidatorTest.java +++ b/scm-core/src/test/java/sonia/scm/cli/CommandValidatorTest.java @@ -24,15 +24,15 @@ package sonia.scm.cli; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorFactory; +import jakarta.validation.constraints.Email; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import picocli.CommandLine; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorFactory; -import javax.validation.constraints.Email; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Locale; diff --git a/scm-core/src/test/java/sonia/scm/filter/GZipResponseFilterTest.java b/scm-core/src/test/java/sonia/scm/filter/GZipResponseFilterTest.java index 5fa10e3969..2d7e692102 100644 --- a/scm-core/src/test/java/sonia/scm/filter/GZipResponseFilterTest.java +++ b/scm-core/src/test/java/sonia/scm/filter/GZipResponseFilterTest.java @@ -25,6 +25,10 @@ package sonia.scm.filter; import com.google.inject.util.Providers; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.WriterInterceptorContext; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -32,16 +36,16 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.WriterInterceptorContext; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.zip.GZIPOutputStream; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class GZipResponseFilterTest { diff --git a/scm-core/src/test/java/sonia/scm/net/HttpURLConnectionFactoryTest.java b/scm-core/src/test/java/sonia/scm/net/HttpURLConnectionFactoryTest.java index 847c6948aa..068d794f92 100644 --- a/scm-core/src/test/java/sonia/scm/net/HttpURLConnectionFactoryTest.java +++ b/scm-core/src/test/java/sonia/scm/net/HttpURLConnectionFactoryTest.java @@ -57,7 +57,6 @@ import java.security.NoSuchAlgorithmException; import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; diff --git a/scm-core/src/test/java/sonia/scm/plugin/InstalledPluginDescriptorTest.java b/scm-core/src/test/java/sonia/scm/plugin/InstalledPluginDescriptorTest.java index ce78d659a5..441c29ebae 100644 --- a/scm-core/src/test/java/sonia/scm/plugin/InstalledPluginDescriptorTest.java +++ b/scm-core/src/test/java/sonia/scm/plugin/InstalledPluginDescriptorTest.java @@ -25,10 +25,10 @@ package sonia.scm.plugin; import com.google.common.io.Resources; +import jakarta.xml.bind.JAXB; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import javax.xml.bind.JAXB; import java.net.URL; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-core/src/test/java/sonia/scm/plugin/ScmModuleTest.java b/scm-core/src/test/java/sonia/scm/plugin/ScmModuleTest.java index 6ed7aac287..770a601b7a 100644 --- a/scm-core/src/test/java/sonia/scm/plugin/ScmModuleTest.java +++ b/scm-core/src/test/java/sonia/scm/plugin/ScmModuleTest.java @@ -28,19 +28,14 @@ package sonia.scm.plugin; import com.google.common.collect.Iterables; import com.google.common.io.Resources; - +import jakarta.xml.bind.JAXB; import org.junit.Test; -import static org.hamcrest.Matchers.*; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.net.URL; -import java.util.Collections; -import javax.xml.bind.JAXB; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.instanceOf; +import static org.junit.Assert.assertThat; /** * diff --git a/scm-core/src/test/java/sonia/scm/plugin/WebElementDescriptorTest.java b/scm-core/src/test/java/sonia/scm/plugin/WebElementDescriptorTest.java index bbbefb1dcd..2d641e1a78 100644 --- a/scm-core/src/test/java/sonia/scm/plugin/WebElementDescriptorTest.java +++ b/scm-core/src/test/java/sonia/scm/plugin/WebElementDescriptorTest.java @@ -24,10 +24,9 @@ package sonia.scm.plugin; +import jakarta.xml.bind.JAXB; import org.junit.jupiter.api.Test; -import javax.xml.bind.JAXB; - import java.io.StringReader; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-core/src/test/java/sonia/scm/repository/RepositoryNameConstrainValidatorTest.java b/scm-core/src/test/java/sonia/scm/repository/RepositoryNameConstrainValidatorTest.java index b20309d3bc..fabbc7f011 100644 --- a/scm-core/src/test/java/sonia/scm/repository/RepositoryNameConstrainValidatorTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/RepositoryNameConstrainValidatorTest.java @@ -24,13 +24,13 @@ package sonia.scm.repository; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junitpioneer.jupiter.DefaultLocale; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-core/src/test/java/sonia/scm/repository/RepositoryTypeConstraintValidatorTest.java b/scm-core/src/test/java/sonia/scm/repository/RepositoryTypeConstraintValidatorTest.java index 9bbf9a4258..600f622783 100644 --- a/scm-core/src/test/java/sonia/scm/repository/RepositoryTypeConstraintValidatorTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/RepositoryTypeConstraintValidatorTest.java @@ -24,17 +24,17 @@ package sonia.scm.repository; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorFactory; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junitpioneer.jupiter.DefaultLocale; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorFactory; -import javax.validation.ConstraintViolation; -import javax.validation.Validation; -import javax.validation.Validator; import java.util.Arrays; import java.util.Collections; import java.util.List; diff --git a/scm-core/src/test/java/sonia/scm/repository/api/RepositoryServiceTest.java b/scm-core/src/test/java/sonia/scm/repository/api/RepositoryServiceTest.java index b8f3581c61..e8c94d6935 100644 --- a/scm-core/src/test/java/sonia/scm/repository/api/RepositoryServiceTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/api/RepositoryServiceTest.java @@ -24,6 +24,9 @@ package sonia.scm.repository.api; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; import org.junit.jupiter.api.AfterEach; @@ -45,9 +48,6 @@ import sonia.scm.repository.spi.HttpScmProtocol; import sonia.scm.repository.spi.RepositoryServiceProvider; import sonia.scm.user.EMail; -import javax.servlet.ServletConfig; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.util.Collections; import java.util.stream.Collectors; import java.util.stream.Stream; diff --git a/scm-core/src/test/java/sonia/scm/repository/spi/HttpScmProtocolTest.java b/scm-core/src/test/java/sonia/scm/repository/spi/HttpScmProtocolTest.java index 57609b4785..8821bacf12 100644 --- a/scm-core/src/test/java/sonia/scm/repository/spi/HttpScmProtocolTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/spi/HttpScmProtocolTest.java @@ -24,6 +24,9 @@ package sonia.scm.repository.spi; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DynamicTest; import org.junit.jupiter.api.Nested; @@ -31,9 +34,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestFactory; import sonia.scm.repository.Repository; -import javax.servlet.ServletConfig; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-core/src/test/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapperTest.java b/scm-core/src/test/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapperTest.java index f450eb380a..f62faefb77 100644 --- a/scm-core/src/test/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapperTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/spi/InitializingHttpScmProtocolWrapperTest.java @@ -26,6 +26,11 @@ package sonia.scm.repository.spi; import com.google.inject.ProvisionException; import com.google.inject.util.Providers; +import jakarta.inject.Provider; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -39,17 +44,16 @@ import sonia.scm.api.v2.resources.ScmPathInfoStore; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.Repository; -import javax.inject.Provider; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URI; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class InitializingHttpScmProtocolWrapperTest { diff --git a/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java b/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java index 6f88f71597..4a2b2d6689 100644 --- a/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java +++ b/scm-core/src/test/java/sonia/scm/security/DefaultCipherHandlerTest.java @@ -46,7 +46,7 @@ import static org.mockito.Mockito.when; * @author Sebastian Sdorra */ @ExtendWith({MockitoExtension.class}) -public class DefaultCipherHandlerTest { +class DefaultCipherHandlerTest { @Mock private SCMContextProvider context; diff --git a/scm-core/src/test/java/sonia/scm/security/SessionIdTest.java b/scm-core/src/test/java/sonia/scm/security/SessionIdTest.java index 3bfc8f82fc..0d629a6b42 100644 --- a/scm-core/src/test/java/sonia/scm/security/SessionIdTest.java +++ b/scm-core/src/test/java/sonia/scm/security/SessionIdTest.java @@ -23,13 +23,12 @@ */ package sonia.scm.security; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.servlet.http.HttpServletRequest; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.when; diff --git a/scm-core/src/test/java/sonia/scm/sse/ClientTest.java b/scm-core/src/test/java/sonia/scm/sse/ClientTest.java index caaf2782b2..5fa5d7fc37 100644 --- a/scm-core/src/test/java/sonia/scm/sse/ClientTest.java +++ b/scm-core/src/test/java/sonia/scm/sse/ClientTest.java @@ -24,15 +24,15 @@ package sonia.scm.sse; +import jakarta.ws.rs.sse.OutboundSseEvent; +import jakarta.ws.rs.sse.Sse; +import jakarta.ws.rs.sse.SseEventSink; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.security.SessionId; -import javax.ws.rs.sse.OutboundSseEvent; -import javax.ws.rs.sse.Sse; -import javax.ws.rs.sse.SseEventSink; import java.util.concurrent.CompletionStage; import java.util.function.Function; diff --git a/scm-core/src/test/java/sonia/scm/trace/SpanContextTest.java b/scm-core/src/test/java/sonia/scm/trace/SpanContextTest.java index 87bba53753..bcabe478b9 100644 --- a/scm-core/src/test/java/sonia/scm/trace/SpanContextTest.java +++ b/scm-core/src/test/java/sonia/scm/trace/SpanContextTest.java @@ -25,9 +25,9 @@ package sonia.scm.trace; import com.google.common.collect.ImmutableMap; +import jakarta.xml.bind.JAXB; import org.junit.jupiter.api.Test; -import javax.xml.bind.JAXB; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.time.Instant; diff --git a/scm-core/src/test/java/sonia/scm/util/HttpUtilTest.java b/scm-core/src/test/java/sonia/scm/util/HttpUtilTest.java index 953c36e768..a8c99625d1 100644 --- a/scm-core/src/test/java/sonia/scm/util/HttpUtilTest.java +++ b/scm-core/src/test/java/sonia/scm/util/HttpUtilTest.java @@ -26,21 +26,22 @@ package sonia.scm.util; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Test; - import sonia.scm.config.ScmConfiguration; -import sonia.scm.security.SessionId; + +import java.io.IOException; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.*; - -import static org.mockito.Mockito.*; - -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; /** * diff --git a/scm-core/src/test/java/sonia/scm/util/JsonMergerTest.java b/scm-core/src/test/java/sonia/scm/util/JsonMergerTest.java index 1f51033ffd..680374d5cb 100644 --- a/scm-core/src/test/java/sonia/scm/util/JsonMergerTest.java +++ b/scm-core/src/test/java/sonia/scm/util/JsonMergerTest.java @@ -28,10 +28,10 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableList; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.constraints.NotNull; import org.junit.jupiter.api.Test; -import javax.validation.ConstraintViolationException; -import javax.validation.constraints.NotNull; import java.util.List; import static java.util.Collections.emptyList; diff --git a/scm-core/src/test/java/sonia/scm/web/AbstractRepositoryJsonEnricherTest.java b/scm-core/src/test/java/sonia/scm/web/AbstractRepositoryJsonEnricherTest.java index 89d4d4b53e..ede1b06895 100644 --- a/scm-core/src/test/java/sonia/scm/web/AbstractRepositoryJsonEnricherTest.java +++ b/scm-core/src/test/java/sonia/scm/web/AbstractRepositoryJsonEnricherTest.java @@ -27,6 +27,7 @@ package sonia.scm.web; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.io.Resources; +import jakarta.ws.rs.core.MediaType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -34,7 +35,6 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.api.v2.resources.ScmPathInfoStore; -import javax.ws.rs.core.MediaType; import java.io.IOException; import java.net.URI; import java.net.URL; diff --git a/scm-core/src/test/java/sonia/scm/web/JsonEnricherBaseTest.java b/scm-core/src/test/java/sonia/scm/web/JsonEnricherBaseTest.java index 859d7c997c..7c7e350756 100644 --- a/scm-core/src/test/java/sonia/scm/web/JsonEnricherBaseTest.java +++ b/scm-core/src/test/java/sonia/scm/web/JsonEnricherBaseTest.java @@ -27,10 +27,9 @@ package sonia.scm.web; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import jakarta.ws.rs.core.MediaType; import org.junit.Test; -import javax.ws.rs.core.MediaType; - import static java.util.Collections.singletonMap; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java b/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java index 1a9a4b3b09..42147873da 100644 --- a/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java +++ b/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java @@ -28,27 +28,21 @@ package sonia.scm.web; import com.google.common.base.Charsets; import com.google.common.collect.Sets; - +import jakarta.servlet.http.HttpServletRequest; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; - import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; - import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; import sonia.scm.util.HttpUtil; -import static org.junit.Assert.*; - -import static org.mockito.Mockito.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.util.Set; -import javax.servlet.http.HttpServletRequest; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.mockito.Mockito.when; /** * diff --git a/scm-core/src/test/java/sonia/scm/web/api/DtoValidatorTest.java b/scm-core/src/test/java/sonia/scm/web/api/DtoValidatorTest.java index f3370bd252..da6b2b1ff2 100644 --- a/scm-core/src/test/java/sonia/scm/web/api/DtoValidatorTest.java +++ b/scm-core/src/test/java/sonia/scm/web/api/DtoValidatorTest.java @@ -24,12 +24,11 @@ package sonia.scm.web.api; +import jakarta.validation.ValidationException; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; import org.junit.jupiter.api.Test; -import javax.validation.ValidationException; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; - import static org.junit.jupiter.api.Assertions.assertThrows; class DtoValidatorTest { diff --git a/scm-core/src/test/java/sonia/scm/web/filter/AuthenticationFilterTest.java b/scm-core/src/test/java/sonia/scm/web/filter/AuthenticationFilterTest.java index 6adf973b43..f62c8f3e4a 100644 --- a/scm-core/src/test/java/sonia/scm/web/filter/AuthenticationFilterTest.java +++ b/scm-core/src/test/java/sonia/scm/web/filter/AuthenticationFilterTest.java @@ -27,6 +27,10 @@ package sonia.scm.web.filter; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; import com.google.common.collect.ImmutableSet; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.UsernamePasswordToken; import org.junit.Before; @@ -39,10 +43,6 @@ import sonia.scm.config.ScmConfiguration; import sonia.scm.security.BearerToken; import sonia.scm.web.WebTokenGenerator; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import static org.mockito.Mockito.any; diff --git a/scm-core/src/test/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBaseTest.java b/scm-core/src/test/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBaseTest.java index f76b116f69..3612b35fa9 100644 --- a/scm-core/src/test/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBaseTest.java +++ b/scm-core/src/test/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBaseTest.java @@ -24,6 +24,10 @@ package sonia.scm.web.filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -36,10 +40,6 @@ import sonia.scm.web.UserAgent; import sonia.scm.web.UserAgentParser; import sonia.scm.web.WebTokenGenerator; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collections; import java.util.Set; diff --git a/scm-core/src/test/java/sonia/scm/web/filter/PermissionFilterTest.java b/scm-core/src/test/java/sonia/scm/web/filter/PermissionFilterTest.java index 5ba99bd2f1..3829d4bdb9 100644 --- a/scm-core/src/test/java/sonia/scm/web/filter/PermissionFilterTest.java +++ b/scm-core/src/test/java/sonia/scm/web/filter/PermissionFilterTest.java @@ -26,15 +26,15 @@ package sonia.scm.web.filter; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Rule; import org.junit.Test; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.Repository; import sonia.scm.repository.spi.ScmProviderHttpServlet; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import static org.mockito.ArgumentMatchers.anyString; diff --git a/scm-core/src/test/java/sonia/scm/xml/IndentXMLStreamWriterTest.java b/scm-core/src/test/java/sonia/scm/xml/IndentXMLStreamWriterTest.java index c9d9a694b1..1ba8f05cb5 100644 --- a/scm-core/src/test/java/sonia/scm/xml/IndentXMLStreamWriterTest.java +++ b/scm-core/src/test/java/sonia/scm/xml/IndentXMLStreamWriterTest.java @@ -26,16 +26,13 @@ package sonia.scm.xml; //~--- non-JDK imports -------------------------------------------------------- +import org.junit.Assert; import org.junit.Test; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.ByteArrayOutputStream; - import javax.xml.stream.XMLOutputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; -import org.junit.Assert; +import java.io.ByteArrayOutputStream; /** * diff --git a/scm-core/src/test/java/sonia/scm/xml/XmlInstantAdapterTest.java b/scm-core/src/test/java/sonia/scm/xml/XmlInstantAdapterTest.java index 3abac6c132..804f6f5a81 100644 --- a/scm-core/src/test/java/sonia/scm/xml/XmlInstantAdapterTest.java +++ b/scm-core/src/test/java/sonia/scm/xml/XmlInstantAdapterTest.java @@ -24,14 +24,14 @@ package sonia.scm.xml; +import jakarta.xml.bind.JAXB; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import javax.xml.bind.JAXB; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.nio.file.Path; import java.time.Instant; diff --git a/scm-core/src/test/resources/META-INF/validation.xml b/scm-core/src/test/resources/META-INF/validation.xml index c09458c79e..ee18496d03 100644 --- a/scm-core/src/test/resources/META-INF/validation.xml +++ b/scm-core/src/test/resources/META-INF/validation.xml @@ -25,7 +25,7 @@ org.hibernate.validator.parameternameprovider.ReflectionParameterNameProvider diff --git a/scm-dao-xml/build.gradle b/scm-dao-xml/build.gradle index 163f05e4c7..bf096dca24 100644 --- a/scm-dao-xml/build.gradle +++ b/scm-dao-xml/build.gradle @@ -34,6 +34,7 @@ dependencies { api platform(project(':')) api project(':scm-core') + annotationProcessor project(':scm-annotation-processor') testImplementation project(':scm-test') // lombok diff --git a/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupDatabase.java b/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupDatabase.java index 9f0715c829..7f482a9c93 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupDatabase.java +++ b/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupDatabase.java @@ -24,15 +24,15 @@ package sonia.scm.group.xml; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import sonia.scm.auditlog.AuditEntry; import sonia.scm.group.Group; import sonia.scm.xml.XmlDatabase; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.Collection; import java.util.Map; import java.util.TreeMap; diff --git a/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupList.java b/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupList.java index f8f79b4b73..eb780bdd28 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupList.java +++ b/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupList.java @@ -26,19 +26,16 @@ package sonia.scm.group.xml; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.group.Group; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Iterator; import java.util.LinkedList; import java.util.Map; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - /** * * @author Sebastian Sdorra diff --git a/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupMapAdapter.java b/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupMapAdapter.java index 0ff384bf53..85e7d2ed63 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupMapAdapter.java +++ b/scm-dao-xml/src/main/java/sonia/scm/group/xml/XmlGroupMapAdapter.java @@ -24,9 +24,9 @@ package sonia.scm.group.xml; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import sonia.scm.group.Group; -import javax.xml.bind.annotation.adapters.XmlAdapter; import java.util.Map; import java.util.TreeMap; diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/MetadataStore.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/MetadataStore.java index c30431e71c..2cd5dda122 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/MetadataStore.java +++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/MetadataStore.java @@ -24,6 +24,9 @@ package sonia.scm.repository.xml; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ContextEntry; @@ -33,9 +36,6 @@ import sonia.scm.store.CopyOnWrite; import sonia.scm.store.StoreConstants; import sonia.scm.update.UpdateStepRepositoryMetadataAccess; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; import java.nio.file.Path; import static sonia.scm.store.CopyOnWrite.compute; diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolver.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolver.java index aeb608fea5..de0575ce51 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolver.java +++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolver.java @@ -24,6 +24,8 @@ package sonia.scm.repository.xml; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import lombok.EqualsAndHashCode; import lombok.Getter; import org.apache.commons.io.FileUtils; @@ -35,8 +37,6 @@ import sonia.scm.repository.InitialRepositoryLocationResolver; import sonia.scm.repository.Repository; import sonia.scm.store.StoreConstants; -import javax.inject.Inject; -import javax.inject.Singleton; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/SingleRepositoryUpdateProcessor.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/SingleRepositoryUpdateProcessor.java index 0b2e5740aa..c7ee3b734d 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/SingleRepositoryUpdateProcessor.java +++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/SingleRepositoryUpdateProcessor.java @@ -24,9 +24,9 @@ package sonia.scm.repository.xml; +import jakarta.inject.Inject; import sonia.scm.repository.RepositoryLocationResolver; -import javax.inject.Inject; import java.nio.file.Path; import java.util.function.BiConsumer; diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java index 7df734cd8e..ff9e646a5c 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java +++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java @@ -28,6 +28,7 @@ package sonia.scm.repository.xml; import com.google.common.collect.ImmutableList; import com.google.inject.Singleton; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; import sonia.scm.io.FileSystem; import sonia.scm.repository.InternalRepositoryException; @@ -40,7 +41,6 @@ import sonia.scm.repository.xml.PathBasedRepositoryLocationResolver.DownForMaint import sonia.scm.repository.xml.PathBasedRepositoryLocationResolver.UpAfterMaintenanceContext; import sonia.scm.store.StoreReadOnlyException; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Path; import java.util.Collection; diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleDAO.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleDAO.java index 478ed6b3f4..c82b057401 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleDAO.java +++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleDAO.java @@ -25,12 +25,12 @@ package sonia.scm.repository.xml; import com.google.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRoleDAO; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.xml.AbstractXmlDAO; -import javax.inject.Singleton; import java.util.List; @Singleton diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleDatabase.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleDatabase.java index 0b8da6fea6..94bcd09a07 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleDatabase.java +++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleDatabase.java @@ -24,15 +24,15 @@ package sonia.scm.repository.xml; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import sonia.scm.auditlog.AuditEntry; import sonia.scm.repository.RepositoryRole; import sonia.scm.xml.XmlDatabase; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.Collection; import java.util.Map; import java.util.TreeMap; diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleList.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleList.java index f57e4235a6..83c95be90a 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleList.java +++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleList.java @@ -24,12 +24,12 @@ package sonia.scm.repository.xml; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.repository.RepositoryRole; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.util.Iterator; import java.util.LinkedList; import java.util.Map; diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleMapAdapter.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleMapAdapter.java index b0373a0238..ea060129f8 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleMapAdapter.java +++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryRoleMapAdapter.java @@ -24,9 +24,9 @@ package sonia.scm.repository.xml; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import sonia.scm.repository.RepositoryRole; -import javax.xml.bind.annotation.adapters.XmlAdapter; import java.util.Map; import java.util.TreeMap; diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/DataFileCache.java b/scm-dao-xml/src/main/java/sonia/scm/store/DataFileCache.java index 9b31f51140..b1f1766f31 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/DataFileCache.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/DataFileCache.java @@ -25,13 +25,14 @@ package sonia.scm.store; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; +import sonia.scm.config.ConfigValue; -import javax.inject.Inject; -import javax.inject.Singleton; import java.io.File; import java.util.function.Supplier; @@ -39,8 +40,6 @@ import java.util.function.Supplier; public class DataFileCache { private static final String CACHE_NAME = "sonia.cache.dataFileCache"; - private static final String ENABLE_CACHE_PROPERTY_NAME = "scm.cache.dataFileCache.enabled"; - private static final Logger LOG = LoggerFactory.getLogger(DataFileCache.class); private static final NoDataFileCacheInstance NO_CACHE = new NoDataFileCacheInstance(); @@ -49,8 +48,11 @@ public class DataFileCache { private final boolean cacheEnabled; @Inject - DataFileCache(CacheManager cacheManager) { - this(cacheManager.getCache(CACHE_NAME), Boolean.getBoolean(ENABLE_CACHE_PROPERTY_NAME)); + DataFileCache( + @ConfigValue(key = "cache.dataFile.enabled", defaultValue = "true", description = "Enabled caching for all read files") Boolean cacheEnabled, + CacheManager cacheManager + ) { + this(cacheManager.getCache(CACHE_NAME), cacheEnabled); } @VisibleForTesting diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/DefaultBlobDirectoryAccess.java b/scm-dao-xml/src/main/java/sonia/scm/store/DefaultBlobDirectoryAccess.java index 9f6b804c4a..d8bc126c63 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/DefaultBlobDirectoryAccess.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/DefaultBlobDirectoryAccess.java @@ -24,6 +24,7 @@ package sonia.scm.store; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; @@ -31,7 +32,6 @@ import sonia.scm.repository.RepositoryLocationResolver; import sonia.scm.update.BlobDirectoryAccess; import sonia.scm.util.IOUtil; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/FileBlob.java b/scm-dao-xml/src/main/java/sonia/scm/store/FileBlob.java index ba2618bbdb..3570fa0eeb 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/FileBlob.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/FileBlob.java @@ -51,7 +51,7 @@ public final class FileBlob implements Blob { @Override public void commit() throws IOException { - // nothing todo + // nothing to do } @Override diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/FileNamespaceUpdateIterator.java b/scm-dao-xml/src/main/java/sonia/scm/store/FileNamespaceUpdateIterator.java index 366d0d1b0b..11ca7e9b7a 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/FileNamespaceUpdateIterator.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/FileNamespaceUpdateIterator.java @@ -29,9 +29,9 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryLocationResolver; import sonia.scm.update.NamespaceUpdateIterator; -import javax.inject.Inject; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; import java.nio.file.Path; import java.util.Collection; import java.util.HashSet; diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/FileRepositoryUpdateIterator.java b/scm-dao-xml/src/main/java/sonia/scm/store/FileRepositoryUpdateIterator.java index 11278b4729..4c7d8b625f 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/FileRepositoryUpdateIterator.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/FileRepositoryUpdateIterator.java @@ -24,10 +24,10 @@ package sonia.scm.store; +import jakarta.inject.Inject; import sonia.scm.repository.RepositoryLocationResolver; import sonia.scm.update.RepositoryUpdateIterator; -import javax.inject.Inject; import java.nio.file.Path; import java.util.function.Consumer; diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/FileStoreExporter.java b/scm-dao-xml/src/main/java/sonia/scm/store/FileStoreExporter.java index 853a903aa6..4e78d72a80 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/FileStoreExporter.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/FileStoreExporter.java @@ -24,6 +24,7 @@ package sonia.scm.store; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.Repository; @@ -32,7 +33,6 @@ import sonia.scm.repository.api.ExportFailedException; import sonia.scm.xml.XmlStreams; import sonia.scm.xml.XmlStreams.AutoCloseableXMLReader; -import javax.inject.Inject; import javax.xml.stream.XMLStreamException; import java.io.IOException; import java.nio.file.Files; diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/FileStoreUpdateStepUtilFactory.java b/scm-dao-xml/src/main/java/sonia/scm/store/FileStoreUpdateStepUtilFactory.java index bae718cd8f..a0a3a8274f 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/FileStoreUpdateStepUtilFactory.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/FileStoreUpdateStepUtilFactory.java @@ -24,12 +24,11 @@ package sonia.scm.store; +import jakarta.inject.Inject; import sonia.scm.SCMContextProvider; import sonia.scm.repository.RepositoryLocationResolver; import sonia.scm.update.StoreUpdateStepUtilFactory; -import javax.inject.Inject; - public class FileStoreUpdateStepUtilFactory implements StoreUpdateStepUtilFactory { private final RepositoryLocationResolver locationResolver; diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStore.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStore.java index 6440eda94a..865c7033ed 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStore.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStore.java @@ -24,8 +24,9 @@ package sonia.scm.store; -import com.google.common.collect.Collections2; import com.google.common.collect.Maps; +import jakarta.xml.bind.JAXBElement; +import jakarta.xml.bind.Marshaller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.security.KeyGenerator; @@ -33,15 +34,11 @@ import sonia.scm.xml.XmlStreams; import sonia.scm.xml.XmlStreams.AutoCloseableXMLReader; import sonia.scm.xml.XmlStreams.AutoCloseableXMLWriter; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.Marshaller; import javax.xml.namespace.QName; import java.io.File; -import java.util.Collection; import java.util.Collections; import java.util.Map; import java.util.Map.Entry; -import java.util.function.Predicate; import static javax.xml.stream.XMLStreamConstants.END_ELEMENT; import static sonia.scm.store.CopyOnWrite.execute; diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStoreFactory.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStoreFactory.java index 16c21c6ca3..b7c37350d2 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStoreFactory.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationEntryStoreFactory.java @@ -43,10 +43,16 @@ public class JAXBConfigurationEntryStoreFactory extends FileBasedStoreFactory private final StoreCache> storeCache; @Inject - public JAXBConfigurationEntryStoreFactory(SCMContextProvider contextProvider, RepositoryLocationResolver repositoryLocationResolver, KeyGenerator keyGenerator, RepositoryReadOnlyChecker readOnlyChecker) { + public JAXBConfigurationEntryStoreFactory( + SCMContextProvider contextProvider, + RepositoryLocationResolver repositoryLocationResolver, + KeyGenerator keyGenerator, + RepositoryReadOnlyChecker readOnlyChecker, + StoreCacheConfigProvider storeCacheConfigProvider + ) { super(contextProvider, repositoryLocationResolver, Store.CONFIG, readOnlyChecker); this.keyGenerator = keyGenerator; - this.storeCache = new StoreCache<>(this::createStore); + this.storeCache = new StoreCache<>(this::createStore, storeCacheConfigProvider.isStoreCacheEnabled()); } @Override diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationStoreFactory.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationStoreFactory.java index 59611e2c30..bee8708f79 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationStoreFactory.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBConfigurationStoreFactory.java @@ -50,10 +50,16 @@ public class JAXBConfigurationStoreFactory extends FileBasedStoreFactory impleme * @param repositoryLocationResolver Resolver to get the repository Directory */ @Inject - public JAXBConfigurationStoreFactory(SCMContextProvider contextProvider, RepositoryLocationResolver repositoryLocationResolver, RepositoryReadOnlyChecker readOnlyChecker, Set decoratorFactories) { + public JAXBConfigurationStoreFactory( + SCMContextProvider contextProvider, + RepositoryLocationResolver repositoryLocationResolver, + RepositoryReadOnlyChecker readOnlyChecker, + Set decoratorFactories, + StoreCacheConfigProvider storeCacheConfigProvider + ) { super(contextProvider, repositoryLocationResolver, Store.CONFIG, readOnlyChecker); this.decoratorFactories = decoratorFactories; - this.storeCache = new StoreCache<>(this::createStore); + this.storeCache = new StoreCache<>(this::createStore, storeCacheConfigProvider.isStoreCacheEnabled()); } @Override @@ -62,7 +68,7 @@ public class JAXBConfigurationStoreFactory extends FileBasedStoreFactory impleme return (ConfigurationStore) storeCache.getStore(storeParameters); } - private ConfigurationStore createStore(TypedStoreParameters storeParameters) { + private ConfigurationStore createStore(TypedStoreParameters storeParameters) { TypedStoreContext context = TypedStoreContext.of(storeParameters); ConfigurationStore store = new JAXBConfigurationStore<>( diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStore.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStore.java index 5c4159f68b..af7a27a647 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStore.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStore.java @@ -26,13 +26,13 @@ package sonia.scm.store; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap.Builder; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.security.KeyGenerator; import sonia.scm.xml.XmlStreams; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; import java.io.File; import java.util.Map; import java.util.Objects; diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStoreFactory.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStoreFactory.java index 67d64a80f1..2ada93ed81 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStoreFactory.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBDataStoreFactory.java @@ -49,11 +49,18 @@ public class JAXBDataStoreFactory extends FileBasedStoreFactory private final DataFileCache dataFileCache; @Inject - public JAXBDataStoreFactory(SCMContextProvider contextProvider , RepositoryLocationResolver repositoryLocationResolver, KeyGenerator keyGenerator, RepositoryReadOnlyChecker readOnlyChecker, DataFileCache dataFileCache) { + public JAXBDataStoreFactory( + SCMContextProvider contextProvider, + RepositoryLocationResolver repositoryLocationResolver, + KeyGenerator keyGenerator, + RepositoryReadOnlyChecker readOnlyChecker, + DataFileCache dataFileCache, + StoreCacheConfigProvider storeCacheConfigProvider + ) { super(contextProvider, repositoryLocationResolver, Store.DATA, readOnlyChecker); this.keyGenerator = keyGenerator; this.dataFileCache = dataFileCache; - this.storeCache = new StoreCache<>(this::createStore); + this.storeCache = new StoreCache<>(this::createStore, storeCacheConfigProvider.isStoreCacheEnabled()); } @Override diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBPropertyFileAccess.java b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBPropertyFileAccess.java index 887479285f..e082f055f8 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/JAXBPropertyFileAccess.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/JAXBPropertyFileAccess.java @@ -24,6 +24,7 @@ package sonia.scm.store; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; @@ -31,7 +32,6 @@ import sonia.scm.repository.RepositoryLocationResolver; import sonia.scm.update.PropertyFileAccess; import sonia.scm.util.IOUtil; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/RepositoryStoreImporter.java b/scm-dao-xml/src/main/java/sonia/scm/store/RepositoryStoreImporter.java index 927510175b..706c4f8ef1 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/RepositoryStoreImporter.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/RepositoryStoreImporter.java @@ -24,10 +24,10 @@ package sonia.scm.store; +import jakarta.inject.Inject; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryLocationResolver; -import javax.inject.Inject; import java.nio.file.Path; public class RepositoryStoreImporter implements StoreImporter { diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/StoreCache.java b/scm-dao-xml/src/main/java/sonia/scm/store/StoreCache.java index a8d921ca2d..4e541cddda 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/StoreCache.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/StoreCache.java @@ -37,12 +37,11 @@ class StoreCache { private static final Logger LOG = LoggerFactory.getLogger(StoreCache.class); - public static final String ENABLE_STORE_CACHE_PROPERTY = "scm.storeCache.enabled"; private final Function, S> cachingStoreCreator; - StoreCache(Function, S> storeCreator) { - if (Boolean.getBoolean(ENABLE_STORE_CACHE_PROPERTY)) { + StoreCache(Function, S> storeCreator, Boolean storeCacheEnabled) { + if (storeCacheEnabled) { LOG.info("store cache enabled"); Map, S> storeCache = synchronizedMap(new HashMap<>()); cachingStoreCreator = storeParameters -> storeCache.computeIfAbsent(storeParameters, storeCreator); diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/StoreCacheConfigProvider.java b/scm-dao-xml/src/main/java/sonia/scm/store/StoreCacheConfigProvider.java new file mode 100644 index 0000000000..64dff72318 --- /dev/null +++ b/scm-dao-xml/src/main/java/sonia/scm/store/StoreCacheConfigProvider.java @@ -0,0 +1,46 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.store; + +import jakarta.inject.Inject; +import sonia.scm.EagerSingleton; +import sonia.scm.config.ConfigValue; + +@EagerSingleton +public class StoreCacheConfigProvider { + + private final Boolean storeCacheEnabled; + + @Inject + public StoreCacheConfigProvider( + @ConfigValue(key = "cache.store.enabled", defaultValue = "true", description = "Enabled caching for all persistence stores") Boolean storeCacheEnabled + ) { + this.storeCacheEnabled = storeCacheEnabled; + } + + public Boolean isStoreCacheEnabled() { + return storeCacheEnabled; + } +} diff --git a/scm-dao-xml/src/main/java/sonia/scm/store/TypedStoreContext.java b/scm-dao-xml/src/main/java/sonia/scm/store/TypedStoreContext.java index 05f8644f01..ba698c2669 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/store/TypedStoreContext.java +++ b/scm-dao-xml/src/main/java/sonia/scm/store/TypedStoreContext.java @@ -24,14 +24,14 @@ package sonia.scm.store; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.Unmarshaller; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import lombok.extern.slf4j.Slf4j; import sonia.scm.xml.XmlStreams; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.annotation.adapters.XmlAdapter; import java.io.File; import java.util.HashMap; import java.util.Map; diff --git a/scm-dao-xml/src/main/java/sonia/scm/update/xml/XmlV1PropertyDAO.java b/scm-dao-xml/src/main/java/sonia/scm/update/xml/XmlV1PropertyDAO.java index 244a7507ab..1d4d01003b 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/update/xml/XmlV1PropertyDAO.java +++ b/scm-dao-xml/src/main/java/sonia/scm/update/xml/XmlV1PropertyDAO.java @@ -24,13 +24,13 @@ package sonia.scm.update.xml; +import jakarta.inject.Inject; import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.update.V1Properties; import sonia.scm.update.V1PropertyDAO; import sonia.scm.update.V1PropertyReader; -import javax.inject.Inject; import java.util.Map; public class XmlV1PropertyDAO implements V1PropertyDAO { diff --git a/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserDatabase.java b/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserDatabase.java index 3d5a4c2a77..156935c13a 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserDatabase.java +++ b/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserDatabase.java @@ -24,15 +24,15 @@ package sonia.scm.user.xml; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import sonia.scm.auditlog.AuditEntry; import sonia.scm.user.User; import sonia.scm.xml.XmlDatabase; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.Collection; import java.util.Map; import java.util.TreeMap; diff --git a/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserList.java b/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserList.java index 3a54179d9a..aeb771162f 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserList.java +++ b/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserList.java @@ -26,19 +26,16 @@ package sonia.scm.user.xml; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.user.User; -//~--- JDK imports ------------------------------------------------------------ - import java.util.Iterator; import java.util.LinkedList; import java.util.Map; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - /** * * @author Sebastian Sdorra diff --git a/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserMapAdapter.java b/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserMapAdapter.java index dd2afde6d2..e6756ab597 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserMapAdapter.java +++ b/scm-dao-xml/src/main/java/sonia/scm/user/xml/XmlUserMapAdapter.java @@ -24,9 +24,9 @@ package sonia.scm.user.xml; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; import sonia.scm.user.User; -import javax.xml.bind.annotation.adapters.XmlAdapter; import java.util.Map; import java.util.TreeMap; diff --git a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationEntryStoreTest.java b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationEntryStoreTest.java index 7347876a55..f520872aef 100644 --- a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationEntryStoreTest.java +++ b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationEntryStoreTest.java @@ -154,7 +154,7 @@ public class JAXBConfigurationEntryStoreTest @Override protected ConfigurationEntryStoreFactory createConfigurationStoreFactory() { - return new JAXBConfigurationEntryStoreFactory(contextProvider, repositoryLocationResolver, new UUIDKeyGenerator(), null); + return new JAXBConfigurationEntryStoreFactory(contextProvider, repositoryLocationResolver, new UUIDKeyGenerator(), null, new StoreCacheConfigProvider(false)); } /** diff --git a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationStoreTest.java b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationStoreTest.java index 34a4753cbb..af917a4f05 100644 --- a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationStoreTest.java +++ b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBConfigurationStoreTest.java @@ -25,12 +25,9 @@ package sonia.scm.store; import org.junit.Test; -import org.junit.jupiter.api.extension.ExtendWith; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryReadOnlyChecker; -import java.util.Collections; - import static java.util.Collections.emptySet; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; @@ -50,7 +47,7 @@ public class JAXBConfigurationStoreTest extends StoreTestBase { @Override protected JAXBConfigurationStoreFactory createStoreFactory() { - return new JAXBConfigurationStoreFactory(contextProvider, repositoryLocationResolver, readOnlyChecker, emptySet()); + return new JAXBConfigurationStoreFactory(contextProvider, repositoryLocationResolver, readOnlyChecker, emptySet(), new StoreCacheConfigProvider(false)); } diff --git a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBDataStoreTest.java b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBDataStoreTest.java index 08d2194dc0..dcb78c1614 100644 --- a/scm-dao-xml/src/test/java/sonia/scm/store/JAXBDataStoreTest.java +++ b/scm-dao-xml/src/test/java/sonia/scm/store/JAXBDataStoreTest.java @@ -54,7 +54,8 @@ public class JAXBDataStoreTest extends DataStoreTestBase { repositoryLocationResolver, new UUIDKeyGenerator(), readOnlyChecker, - new DataFileCache(null, false) + new DataFileCache(null, false), + new StoreCacheConfigProvider(false) ); } diff --git a/scm-dao-xml/src/test/java/sonia/scm/store/TypedStoreContextTest.java b/scm-dao-xml/src/test/java/sonia/scm/store/TypedStoreContextTest.java index d937a88c32..cb2192fb1d 100644 --- a/scm-dao-xml/src/test/java/sonia/scm/store/TypedStoreContextTest.java +++ b/scm-dao-xml/src/test/java/sonia/scm/store/TypedStoreContextTest.java @@ -24,16 +24,16 @@ package sonia.scm.store; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; import org.mockito.junit.jupiter.MockitoExtension; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlAdapter; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.io.File; import java.net.URL; import java.net.URLClassLoader; diff --git a/scm-dao-xml/src/test/java/sonia/scm/update/xml/XmlV1PropertyDAOTest.java b/scm-dao-xml/src/test/java/sonia/scm/update/xml/XmlV1PropertyDAOTest.java index 0dbfed6288..12f2095556 100644 --- a/scm-dao-xml/src/test/java/sonia/scm/update/xml/XmlV1PropertyDAOTest.java +++ b/scm-dao-xml/src/test/java/sonia/scm/update/xml/XmlV1PropertyDAOTest.java @@ -32,6 +32,7 @@ import sonia.scm.Stage; import sonia.scm.repository.RepositoryReadOnlyChecker; import sonia.scm.security.KeyGenerator; import sonia.scm.store.JAXBConfigurationEntryStoreFactory; +import sonia.scm.store.StoreCacheConfigProvider; import sonia.scm.update.RepositoryV1PropertyReader; import java.io.File; @@ -112,7 +113,7 @@ class XmlV1PropertyDAOTest { Path propFile = configPath.resolve("repository-properties-v1.xml"); Files.write(propFile, PROPERTIES.getBytes()); RepositoryReadOnlyChecker readOnlyChecker = mock(RepositoryReadOnlyChecker.class); - XmlV1PropertyDAO dao = new XmlV1PropertyDAO(new JAXBConfigurationEntryStoreFactory(new SimpleContextProvider(temp), null, new SimpleKeyGenerator(), readOnlyChecker)); + XmlV1PropertyDAO dao = new XmlV1PropertyDAO(new JAXBConfigurationEntryStoreFactory(new SimpleContextProvider(temp), null, new SimpleKeyGenerator(), readOnlyChecker, new StoreCacheConfigProvider(false))); dao.getProperties(new RepositoryV1PropertyReader()) .forEachEntry((key, prop) -> { diff --git a/scm-it/build.gradle b/scm-it/build.gradle index 2195109c94..41a3b28028 100644 --- a/scm-it/build.gradle +++ b/scm-it/build.gradle @@ -49,16 +49,19 @@ dependencies { testImplementation project(':scm-plugins:scm-svn-plugin') testImplementation project(path: ':scm-plugins:scm-svn-plugin', configuration: 'tests') - testImplementation 'io.rest-assured:rest-assured:4.3.0' + testImplementation 'io.rest-assured:rest-assured:5.3.2' testImplementation 'org.glassfish:javax.json:1.1.4' + testImplementation libraries.jacksonDatatypeJsr310 // dependencies for tests in sonia.scm.it.webapp testImplementation project(':scm-webapp') testImplementation libraries.jerseyClientApi - testImplementation libraries.jerseyClientRuntime + testImplementation libraries.jerseyCommon + testImplementation libraries.jerseyMediaJson testImplementation libraries.jacksonJaxbAnnotations testImplementation libraries.junitPioneer + testImplementation 'org.eclipse.parsson:parsson:1.1.5' itWebApp project(path: ':scm-webapp', configuration: 'webapp') itPlugin project(path: ':scm-plugins:scm-integration-test-plugin', configuration: 'smp') diff --git a/scm-it/src/main/resources/config.yml b/scm-it/src/main/resources/config.yml new file mode 100644 index 0000000000..7ec00af994 --- /dev/null +++ b/scm-it/src/main/resources/config.yml @@ -0,0 +1,40 @@ +# +# MIT License +# +# Copyright (c) 2020-present Cloudogu GmbH and Contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +# base server config +webapp: + cache: + dataFile: + enabled: true + initialUser: scmadmin + initialPassword: scmadmin + stage: DEVELOPMENT + homeDir: ./build/scm-home + +# increase http header size for mercurial +httpHeaderSize: 16384 + +# logging +log: + rootLevel: INFO diff --git a/scm-it/src/test/java/sonia/scm/it/AnonymousAccessITCase.java b/scm-it/src/test/java/sonia/scm/it/AnonymousAccessITCase.java index 9fac411b27..86fb490a56 100644 --- a/scm-it/src/test/java/sonia/scm/it/AnonymousAccessITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/AnonymousAccessITCase.java @@ -25,6 +25,9 @@ package sonia.scm.it; import io.restassured.RestAssured; +import jakarta.json.Json; +import jakarta.json.JsonArray; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -42,9 +45,6 @@ import sonia.scm.repository.client.api.RepositoryClient; import sonia.scm.repository.client.api.RepositoryClientException; import sonia.scm.security.AnonymousMode; -import javax.json.Json; -import javax.json.JsonArray; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-it/src/test/java/sonia/scm/it/ApiKeyITCase.java b/scm-it/src/test/java/sonia/scm/it/ApiKeyITCase.java index 24ce46581f..d53f60e5cb 100644 --- a/scm-it/src/test/java/sonia/scm/it/ApiKeyITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/ApiKeyITCase.java @@ -25,6 +25,7 @@ package sonia.scm.it; import io.restassured.RestAssured; +import jakarta.ws.rs.core.MediaType; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -39,7 +40,6 @@ import sonia.scm.repository.client.api.RepositoryClient; import sonia.scm.repository.client.api.RepositoryClientException; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.MediaType; import java.io.IOException; import java.util.Collection; import java.util.Objects; diff --git a/scm-it/src/test/java/sonia/scm/it/GitNonFastForwardITCase.java b/scm-it/src/test/java/sonia/scm/it/GitNonFastForwardITCase.java index 832f2d8606..3bf27b0fea 100644 --- a/scm-it/src/test/java/sonia/scm/it/GitNonFastForwardITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/GitNonFastForwardITCase.java @@ -26,6 +26,7 @@ package sonia.scm.it; import com.google.common.base.Charsets; import com.google.common.io.Files; +import jakarta.servlet.http.HttpServletResponse; import org.eclipse.jgit.api.CommitCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; @@ -44,7 +45,6 @@ import sonia.scm.it.utils.RestUtil; import sonia.scm.it.utils.TestData; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.nio.file.Path; diff --git a/scm-it/src/test/java/sonia/scm/it/utils/NullAwareJsonObjectBuilder.java b/scm-it/src/test/java/sonia/scm/it/utils/NullAwareJsonObjectBuilder.java index 9735187277..fe0e8d558c 100644 --- a/scm-it/src/test/java/sonia/scm/it/utils/NullAwareJsonObjectBuilder.java +++ b/scm-it/src/test/java/sonia/scm/it/utils/NullAwareJsonObjectBuilder.java @@ -24,10 +24,11 @@ package sonia.scm.it.utils; -import javax.json.JsonArrayBuilder; -import javax.json.JsonObject; -import javax.json.JsonObjectBuilder; -import javax.json.JsonValue; +import jakarta.json.JsonArrayBuilder; +import jakarta.json.JsonObject; +import jakarta.json.JsonObjectBuilder; +import jakarta.json.JsonValue; + import java.math.BigDecimal; import java.math.BigInteger; diff --git a/scm-it/src/test/java/sonia/scm/it/utils/TestData.java b/scm-it/src/test/java/sonia/scm/it/utils/TestData.java index c766d659bf..3bd789c596 100644 --- a/scm-it/src/test/java/sonia/scm/it/utils/TestData.java +++ b/scm-it/src/test/java/sonia/scm/it/utils/TestData.java @@ -25,6 +25,8 @@ package sonia.scm.it.utils; import io.restassured.response.ValidatableResponse; +import jakarta.json.Json; +import jakarta.json.JsonObjectBuilder; import org.apache.http.HttpStatus; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.lib.StoredConfig; @@ -33,8 +35,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.web.VndMediaType; -import javax.json.Json; -import javax.json.JsonObjectBuilder; import java.io.IOException; import java.net.URI; import java.util.Collection; diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/AbstractPermissionITCaseBase.java b/scm-it/src/test/java/sonia/scm/it/webapp/AbstractPermissionITCaseBase.java index 0454fdc835..94518e2b1d 100644 --- a/scm-it/src/test/java/sonia/scm/it/webapp/AbstractPermissionITCaseBase.java +++ b/scm-it/src/test/java/sonia/scm/it/webapp/AbstractPermissionITCaseBase.java @@ -26,8 +26,9 @@ package sonia.scm.it.webapp; //~--- non-JDK imports -------------------------------------------------------- -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -40,7 +41,6 @@ import sonia.scm.user.UserTestData; import java.util.Collection; import static java.util.Arrays.asList; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static sonia.scm.it.webapp.IntegrationTestUtil.createAdminClient; import static sonia.scm.it.webapp.IntegrationTestUtil.createResource; @@ -105,7 +105,7 @@ public abstract class AbstractPermissionITCaseBase ScmClient client = createAdminClient(); - ClientResponse response = UserITUtil.postUser(client, trillian); + Response response = UserITUtil.postUser(client, trillian); assertNotNull(response); Assert.assertEquals(201, response.getStatus()); @@ -194,9 +194,9 @@ public abstract class AbstractPermissionITCaseBase @Test public void delete() { - WebResource.Builder wr = createResource(client, getDeletePath()); + Invocation.Builder wr = createResource(client, getDeletePath()); - checkResponse(wr.delete(ClientResponse.class)); + checkResponse(wr.delete(Response.class)); } /** @@ -206,9 +206,9 @@ public abstract class AbstractPermissionITCaseBase @Test public void modify() { - WebResource.Builder wr = createResource(client, getModifyPath()); + Invocation.Builder wr = createResource(client, getModifyPath(), getMediaType()); - checkResponse(wr.type(getMediaType()).put(ClientResponse.class, getModifyItem())); + checkResponse(wr.put(Entity.entity(getModifyItem(), getMediaType()), Response.class)); } //~--- get methods ---------------------------------------------------------- @@ -220,9 +220,9 @@ public abstract class AbstractPermissionITCaseBase @Test public void get() { - WebResource.Builder wr = createResource(client, getGetPath()); + Invocation.Builder wr = createResource(client, getGetPath()); - checkGetResponse(wr.get(ClientResponse.class)); + checkGetResponse(wr.buildGet().invoke()); } /** @@ -232,9 +232,9 @@ public abstract class AbstractPermissionITCaseBase @Test public void getAll() { - WebResource.Builder wr = createResource(client, getBasePath()); + Invocation.Builder wr = createResource(client, getBasePath()); - checkGetAllResponse(wr.get(ClientResponse.class)); + checkGetAllResponse(wr.buildGet().invoke()); } //~--- methods -------------------------------------------------------------- @@ -245,7 +245,7 @@ public abstract class AbstractPermissionITCaseBase * * @param response */ - protected void checkGetAllResponse(ClientResponse response) + protected void checkGetAllResponse(Response response) { checkResponse(response); } @@ -256,7 +256,7 @@ public abstract class AbstractPermissionITCaseBase * * @param response */ - protected void checkGetResponse(ClientResponse response) + protected void checkGetResponse(Response response) { checkResponse(response); } @@ -267,7 +267,7 @@ public abstract class AbstractPermissionITCaseBase * * @param response */ - private void checkResponse(ClientResponse response) + private void checkResponse(Response response) { assertNotNull(response); diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/ConfigUtil.java b/scm-it/src/test/java/sonia/scm/it/webapp/ConfigUtil.java index ef6abc09d9..02c2a7f52c 100644 --- a/scm-it/src/test/java/sonia/scm/it/webapp/ConfigUtil.java +++ b/scm-it/src/test/java/sonia/scm/it/webapp/ConfigUtil.java @@ -24,36 +24,26 @@ package sonia.scm.it.webapp; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.core.Response; import org.junit.Assert; -import sonia.scm.api.rest.ObjectMapperProvider; import sonia.scm.api.v2.resources.ConfigDto; import sonia.scm.web.VndMediaType; -import java.io.IOException; - import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; import static sonia.scm.it.webapp.IntegrationTestUtil.createResource; public class ConfigUtil { public static ConfigDto readConfig(ScmClient client) { - WebResource.Builder wr = createResource(client, "config"); - ClientResponse response = wr.get(ClientResponse.class); + Invocation.Builder wr = createResource(client, "config"); + Response response = wr.buildGet().invoke(); assertNotNull(response); Assert.assertEquals(200, response.getStatus()); - String json = response.getEntity(String.class); - - ConfigDto config = null; - try { - config = new ObjectMapperProvider().get().readerFor(ConfigDto.class).readValue(json); - } catch (IOException e) { - fail("could not read json:\n" + json); - } + ConfigDto config = response.readEntity(ConfigDto.class); response.close(); assertNotNull(config); @@ -61,11 +51,9 @@ public class ConfigUtil { } public static void writeConfig(ScmClient client, ConfigDto config) { - ClientResponse response = - createResource(client, "config") - .accept("*/*") - .type(VndMediaType.CONFIG) - .put(ClientResponse.class, config); + Response response = + createResource(client, "config", VndMediaType.CONFIG) + .put(Entity.entity(config, VndMediaType.CONFIG)); Assert.assertEquals(204, response.getStatus()); response.close(); diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/CustomJacksonMapperProvider.java b/scm-it/src/test/java/sonia/scm/it/webapp/CustomJacksonMapperProvider.java new file mode 100644 index 0000000000..ec5e9533f8 --- /dev/null +++ b/scm-it/src/test/java/sonia/scm/it/webapp/CustomJacksonMapperProvider.java @@ -0,0 +1,55 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.it.webapp; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import jakarta.ws.rs.ext.ContextResolver; +import jakarta.ws.rs.ext.Provider; + +@Provider +public class CustomJacksonMapperProvider + implements ContextResolver { + + final ObjectMapper mapper; + + public CustomJacksonMapperProvider() { + // enable pretty print + mapper = new ObjectMapper() + .registerModule(new JavaTimeModule()) + .configure(JsonParser.Feature.IGNORE_UNDEFINED, true) + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) + .enable(SerializationFeature.INDENT_OUTPUT); + } + + @Override + public ObjectMapper getContext(Class type) { + return mapper; + } + +} diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/GitLfsITCase.java b/scm-it/src/test/java/sonia/scm/it/webapp/GitLfsITCase.java index c2bce30af4..64b4591ca0 100644 --- a/scm-it/src/test/java/sonia/scm/it/webapp/GitLfsITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/webapp/GitLfsITCase.java @@ -26,10 +26,13 @@ package sonia.scm.it.webapp; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.type.TypeFactory; -import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector; +import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationIntrospector; import com.google.common.base.Charsets; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.UniformInterfaceException; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.Response; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import org.apache.shiro.crypto.hash.Sha256Hash; import org.hamcrest.Matchers; import org.junit.After; @@ -39,24 +42,20 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; -import sonia.scm.api.rest.ObjectMapperProvider; import sonia.scm.api.v2.resources.RepositoryDto; import sonia.scm.api.v2.resources.UserDto; -import sonia.scm.api.v2.resources.UserToUserDtoMapperImpl; import sonia.scm.it.utils.TestData; import sonia.scm.user.User; import sonia.scm.user.UserTestData; import sonia.scm.util.HttpUtil; import sonia.scm.web.VndMediaType; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; import java.io.IOException; import java.net.URI; import java.util.UUID; import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; import static sonia.scm.it.webapp.IntegrationTestUtil.BASE_URL; import static sonia.scm.it.webapp.IntegrationTestUtil.REST_BASE_URL; import static sonia.scm.it.webapp.IntegrationTestUtil.createAdminClient; @@ -85,7 +84,7 @@ public class GitLfsITCase { private RepositoryDto repository; public GitLfsITCase() { - mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(TypeFactory.defaultInstance())); + mapper.setAnnotationIntrospector(new JakartaXmlBindAnnotationIntrospector(TypeFactory.defaultInstance())); } @BeforeClass @@ -103,7 +102,11 @@ public class GitLfsITCase { @After public void tearDownTestDependencies() { - deleteRepository(adminClient, repository); + try { + deleteRepository(adminClient, repository); + } catch (Exception e) { + // ignore error after cleanup + } } // tests @@ -120,11 +123,7 @@ public class GitLfsITCase { createUser(trillian); try { - String permissionsUrl = repository.getLinks().getLinkBy("permissions").get().getHref(); - IntegrationTestUtil.createResource(adminClient, URI.create(permissionsUrl)) - .accept("*/*") - .type(VndMediaType.REPOSITORY_PERMISSION) - .post(ClientResponse.class, "{\"name\": \""+ trillian.getId() +"\", \"verbs\":[\"*\"]}"); + setPermissions(trillian.getId(), "*"); ScmClient client = new ScmClient(trillian.getId(), "secret123"); @@ -142,10 +141,10 @@ public class GitLfsITCase { dto.setType(user.getType()); dto.setActive(user.isActive()); dto.setPassword(user.getPassword()); - createResource(adminClient, "users") + Response response = createResource(adminClient, "users", VndMediaType.USER) .accept("*/*") - .type(VndMediaType.USER) - .post(ClientResponse.class, dto); + .post(Entity.entity(dto, VndMediaType.USER)); + assertEquals(201, response.getStatus()); } private void removeUser(User user) { @@ -158,16 +157,11 @@ public class GitLfsITCase { trillian.setPassword("secret123"); createUser(trillian); - expectedException.expect(UniformInterfaceException.class); + expectedException.expect(IllegalStateException.class); expectedException.expectMessage(Matchers.containsString("403")); - try { - String permissionsUrl = repository.getLinks().getLinkBy("permissions").get().getHref(); - IntegrationTestUtil.createResource(adminClient, URI.create(permissionsUrl)) - .accept("*/*") - .type(VndMediaType.REPOSITORY_PERMISSION) - .post(ClientResponse.class, "{\"name\": \""+ trillian.getId() +"\", \"verbs\":[\"read\"]}"); + setPermissions(trillian.getId(), "read"); ScmClient client = new ScmClient(trillian.getId(), "secret123"); uploadAndDownload(client); @@ -182,13 +176,8 @@ public class GitLfsITCase { trillian.setPassword("secret123"); createUser(trillian); - try { - String permissionsUrl = repository.getLinks().getLinkBy("permissions").get().getHref(); - IntegrationTestUtil.createResource(adminClient, URI.create(permissionsUrl)) - .accept("*/*") - .type(VndMediaType.REPOSITORY_PERMISSION) - .post(ClientResponse.class, "{\"name\": \""+ trillian.getId() +"\", \"verbs\":[\"read\",\"pull\"]}"); + setPermissions(trillian.getId(), "read", "pull"); // upload data as admin String data = UUID.randomUUID().toString(); @@ -207,7 +196,13 @@ public class GitLfsITCase { } } - // lfs api + private void setPermissions(String user, String... verbs) { + String permissionsUrl = repository.getLinks().getLinkBy("permissions").get().getHref(); + String verbsInJson = "\"" + String.join("\",\"", verbs) + "\""; + Response response = createResource(adminClient, URI.create(permissionsUrl)) + .post(Entity.entity("{\"name\": \"" + user + "\", \"verbs\":[" + verbsInJson + "]}", VndMediaType.REPOSITORY_PERMISSION)); + assertEquals(201, response.getStatus()); + } private void uploadAndDownload(ScmClient client) throws IOException { String data = UUID.randomUUID().toString(); @@ -217,35 +212,37 @@ public class GitLfsITCase { assertArrayEquals(dataAsBytes, downloadedData); } - private LfsObject upload(ScmClient client, byte[] data) throws IOException { + private LfsObject upload(ScmClient client, byte[] data) { LfsObject lfsObject = createLfsObject(data); LfsRequestBody request = LfsRequestBody.createUploadRequest(lfsObject); LfsResponseBody response = request(client, request); String uploadURL = response.objects[0].actions.upload.href; - client.resource(uploadURL).header(HttpUtil.HEADER_USERAGENT, "git-lfs/z").put(data); + client.resource(uploadURL).header(HttpUtil.HEADER_USERAGENT, "git-lfs/z").put(Entity.json(data)); return lfsObject; } - private LfsResponseBody request(ScmClient client, LfsRequestBody request) throws IOException { + private LfsResponseBody request(ScmClient client, LfsRequestBody request) { String batchUrl = createBatchUrl(); - String requestAsString = mapper.writeValueAsString(request); - String json = client + Response response = client .resource(batchUrl) .accept("application/vnd.git-lfs+json") .header(HttpUtil.HEADER_USERAGENT, "git-lfs/z") - .header("Content-Type", "application/vnd.git-lfs+json") - .post(String.class, requestAsString); - return new ObjectMapperProvider().get().readValue(json, LfsResponseBody.class); + .post(Entity.entity(request, "application/vnd.git-lfs+json")); + if (response.getStatus() > 299) { + throw new IllegalStateException("status " + response.getStatus()); + } + return response + .readEntity(LfsResponseBody.class); } private String createBatchUrl() { return String.format("%srepo/%s/%s/info/lfs/objects/batch", BASE_URL, repository.getNamespace(), repository.getName()); } - private byte[] download(ScmClient client, LfsObject lfsObject) throws IOException { + private byte[] download(ScmClient client, LfsObject lfsObject) { LfsRequestBody request = LfsRequestBody.createDownloadRequest(lfsObject); LfsResponseBody response = request(client, request); @@ -285,6 +282,29 @@ public class GitLfsITCase { return new LfsRequestBody("download", new LfsObject[]{object}); } + public String getOperation() { + return operation; + } + + public void setOperation(String operation) { + this.operation = operation; + } + + public String[] getTransfers() { + return transfers; + } + + public void setTransfers(String[] transfers) { + this.transfers = transfers; + } + + public LfsObject[] getObjects() { + return objects; + } + + public void setObjects(LfsObject[] objects) { + this.objects = objects; + } } @XmlRootElement @@ -299,6 +319,14 @@ public class GitLfsITCase { public LfsResponseBody(LfsObject[] objects) { this.objects = objects; } + + public LfsObject[] getObjects() { + return objects; + } + + public void setObjects(LfsObject[] objects) { + this.objects = objects; + } } @XmlRootElement @@ -323,6 +351,29 @@ public class GitLfsITCase { this.actions = actions; } + public String getOid() { + return oid; + } + + public void setOid(String oid) { + this.oid = oid; + } + + public long getSize() { + return size; + } + + public void setSize(long size) { + this.size = size; + } + + public LfsActions getActions() { + return actions; + } + + public void setActions(LfsActions actions) { + this.actions = actions; + } } @XmlRootElement @@ -334,6 +385,22 @@ public class GitLfsITCase { public LfsActions() { } + + public LfsAction getUpload() { + return upload; + } + + public void setUpload(LfsAction upload) { + this.upload = upload; + } + + public LfsAction getDownload() { + return download; + } + + public void setDownload(LfsAction download) { + this.download = download; + } } @XmlRootElement @@ -349,6 +416,13 @@ public class GitLfsITCase { this.href = href; } + public String getHref() { + return href; + } + + public void setHref(String href) { + this.href = href; + } } } diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/IntegrationTestUtil.java b/scm-it/src/test/java/sonia/scm/it/webapp/IntegrationTestUtil.java index f25b725ff6..a32767a9a1 100644 --- a/scm-it/src/test/java/sonia/scm/it/webapp/IntegrationTestUtil.java +++ b/scm-it/src/test/java/sonia/scm/it/webapp/IntegrationTestUtil.java @@ -26,18 +26,14 @@ package sonia.scm.it.webapp; //~--- non-JDK imports -------------------------------------------------------- -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.io.Resources; -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; -import com.sun.jersey.client.apache.ApacheHttpClient; -import com.sun.jersey.client.apache.config.ApacheHttpClientConfig; -import com.sun.jersey.client.apache.config.DefaultApacheHttpClientConfig; import de.otto.edison.hal.HalRepresentation; -import sonia.scm.api.rest.JSONContextResolver; -import sonia.scm.api.rest.ObjectMapperProvider; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import sonia.scm.repository.Person; import sonia.scm.util.IOUtil; @@ -90,25 +86,15 @@ public final class IntegrationTestUtil /** * Method description * - * * @return */ public static Client createClient() { - DefaultApacheHttpClientConfig config = new DefaultApacheHttpClientConfig(); - config.getSingletons().add(new JSONContextResolver(new ObjectMapperProvider().get())); - config.getProperties().put(ApacheHttpClientConfig.PROPERTY_HANDLE_COOKIES, true); - - return ApacheHttpClient.create(config); + return ClientBuilder.newBuilder().register(new CustomJacksonMapperProvider()).build(); } - public static String serialize(Object o) { - ObjectMapper mapper = new ObjectMapperProvider().get(); - try { - return mapper.writeValueAsString(o); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } + public static Entity serialize(Object o, String mediaType) { + return Entity.entity(o, mediaType); } public static Collection createRepositoryTypeParameters() { @@ -129,17 +115,23 @@ public final class IntegrationTestUtil return URI.create(object.getLinks().getLinkBy("delete").get().getHref()); } - public static WebResource.Builder createResource(ScmClient client, String url) { + public static Invocation.Builder createResource(ScmClient client, String url) { return createResource(client, createResourceUrl(url)); } - public static WebResource.Builder createResource(ScmClient client, URI url) { + public static Invocation.Builder createResource(ScmClient client, String url, String mediaType) { + return createResource(client, createResourceUrl(url), mediaType); + } + public static Invocation.Builder createResource(ScmClient client, URI url) { return client.resource(url.toString()); } - public static ClientResponse post(ScmClient client, String path, String mediaType, Object o) { - return createResource(client, path) - .type(mediaType) - .post(ClientResponse.class, serialize(o)); + public static Invocation.Builder createResource(ScmClient client, URI url, String mediaType) { + return client.resource(url.toString(), MediaType.valueOf(mediaType)); + } + + public static Response post(ScmClient client, String path, String mediaType, Object o) { + return createResource(client, path, mediaType) + .post(serialize(o, mediaType)); } /** diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/RepositoryHookITCase.java b/scm-it/src/test/java/sonia/scm/it/webapp/RepositoryHookITCase.java index 22c1d0b825..c20b5f69de 100644 --- a/scm-it/src/test/java/sonia/scm/it/webapp/RepositoryHookITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/webapp/RepositoryHookITCase.java @@ -26,7 +26,7 @@ package sonia.scm.it.webapp; import com.google.common.base.Charsets; import com.google.common.io.Files; -import com.sun.jersey.api.client.WebResource; +import jakarta.ws.rs.client.Invocation; import org.junit.After; import org.junit.Assume; import org.junit.Before; @@ -138,8 +138,8 @@ public class RepositoryHookITCase extends AbstractAdminITCaseBase Thread.sleep(WAIT_TIME); // check debug servlet for pushed commit - WebResource.Builder wr = createResource(client, "../debug/" + repository.getNamespace() + "/" + repository.getName() + "/post-receive/last"); - DebugHookData data = wr.get(DebugHookData.class); + Invocation.Builder wr = createResource(client, "../debug/" + repository.getNamespace() + "/" + repository.getName() + "/post-receive/last"); + DebugHookData data = wr.buildGet().invoke(DebugHookData.class); assertNotNull(data); assertThat(data.getChangesets(), contains(changeset.getId())); } @@ -173,8 +173,8 @@ public class RepositoryHookITCase extends AbstractAdminITCaseBase Thread.sleep(WAIT_TIME); // check debug servlet that only one commit is present - WebResource.Builder wr = createResource(client, String.format("../debug/%s/%s/post-receive/last", repository.getNamespace(), repository.getName())); - DebugHookData data = wr.get(DebugHookData.class); + Invocation.Builder wr = createResource(client, String.format("../debug/%s/%s/post-receive/last", repository.getNamespace(), repository.getName())); + DebugHookData data = wr.buildGet().invoke(DebugHookData.class); assertNotNull(data); assertThat(data.getChangesets(), allOf( contains(b.getId()), diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/RepositoryITUtil.java b/scm-it/src/test/java/sonia/scm/it/webapp/RepositoryITUtil.java index 64844782c4..a0615b7867 100644 --- a/scm-it/src/test/java/sonia/scm/it/webapp/RepositoryITUtil.java +++ b/scm-it/src/test/java/sonia/scm/it/webapp/RepositoryITUtil.java @@ -26,19 +26,18 @@ package sonia.scm.it.webapp; //~--- non-JDK imports -------------------------------------------------------- -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.junit.Assert; -import sonia.scm.api.rest.ObjectMapperProvider; import sonia.scm.api.v2.resources.ConfigDto; import sonia.scm.api.v2.resources.RepositoryDto; import sonia.scm.web.VndMediaType; -import java.io.IOException; import java.net.URI; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; import static sonia.scm.it.webapp.ConfigUtil.readConfig; import static sonia.scm.it.webapp.IntegrationTestUtil.BASE_URL; import static sonia.scm.it.webapp.IntegrationTestUtil.createResource; @@ -62,16 +61,15 @@ public final class RepositoryITUtil public static RepositoryDto createRepository(ScmClient client, String repositoryJson) { setNamespaceStrategy(client, "UsernameNamespaceStrategy"); - ClientResponse response = + Response response = createResource(client, "repositories") .accept("*/*") - .type(VndMediaType.REPOSITORY) - .post(ClientResponse.class, repositoryJson); + .post(Entity.entity(repositoryJson, MediaType.valueOf(VndMediaType.REPOSITORY))); assertNotNull(response); Assert.assertEquals(201, response.getStatus()); - URI url = URI.create(response.getHeaders().get("Location").get(0)); + URI url = URI.create(response.getHeaders().get("Location").get(0).toString()); response.close(); @@ -88,14 +86,14 @@ public final class RepositoryITUtil public static void deleteRepository(ScmClient client, RepositoryDto repository) { URI deleteUrl = getLink(repository, "delete"); - ClientResponse response = createResource(client, deleteUrl).delete(ClientResponse.class); + Response response = createResource(client, deleteUrl).delete(Response.class); assertNotNull(response); Assert.assertEquals(204, response.getStatus()); response.close(); URI selfUrl = getLink(repository, "self"); - response = createResource(client, selfUrl).get(ClientResponse.class); + response = createResource(client, selfUrl).get(Response.class); assertNotNull(response); Assert.assertEquals(404, response.getStatus()); response.close(); @@ -103,19 +101,13 @@ public final class RepositoryITUtil public static RepositoryDto getRepository(ScmClient client, URI url) { - WebResource.Builder wr = createResource(client, url); - ClientResponse response = wr.get(ClientResponse.class); + Invocation.Builder wr = createResource(client, url); + Response response = wr.buildGet().invoke(); assertNotNull(response); Assert.assertEquals(200, response.getStatus()); - String json = response.getEntity(String.class); - RepositoryDto repository = null; - try { - repository = new ObjectMapperProvider().get().readerFor(RepositoryDto.class).readValue(json); - } catch (IOException e) { - fail("could not read json:\n" + json); - } + RepositoryDto repository = response.readEntity(RepositoryDto.class); response.close(); assertNotNull(repository); diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/RepositorySimplePermissionITCase.java b/scm-it/src/test/java/sonia/scm/it/webapp/RepositorySimplePermissionITCase.java index 10962145a6..22cad62277 100644 --- a/scm-it/src/test/java/sonia/scm/it/webapp/RepositorySimplePermissionITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/webapp/RepositorySimplePermissionITCase.java @@ -26,26 +26,23 @@ package sonia.scm.it.webapp; //~--- non-JDK imports -------------------------------------------------------- -import com.sun.jersey.api.client.ClientResponse; -import com.sun.jersey.api.client.WebResource; import de.otto.edison.hal.HalRepresentation; +import jakarta.ws.rs.core.Response; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import sonia.scm.api.rest.ObjectMapperProvider; import sonia.scm.api.v2.resources.RepositoryDto; import sonia.scm.web.VndMediaType; import java.io.IOException; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static sonia.scm.it.webapp.IntegrationTestUtil.createAdminClient; import static sonia.scm.it.webapp.IntegrationTestUtil.createResource; -import static sonia.scm.it.webapp.IntegrationTestUtil.serialize; +import static sonia.scm.it.webapp.IntegrationTestUtil.post; //~--- JDK imports ------------------------------------------------------------ @@ -89,23 +86,24 @@ public class RepositorySimplePermissionITCase ScmClient client = createAdminClient(); - WebResource.Builder wr = createResource(client, "repositories"); - ClientResponse response = wr.type(VndMediaType.REPOSITORY).post(ClientResponse.class, serialize(repository)); + String repositoryUrl; + try (Response response = post(client, "repositories", VndMediaType.REPOSITORY, repository)) { - assertNotNull(response); - Assert.assertEquals(201, response.getStatus()); + assertNotNull(response); + Assert.assertEquals(201, response.getStatus()); - String repositoryUrl = response.getHeaders().getFirst("Location"); + repositoryUrl = response.getHeaders().getFirst("Location").toString(); - assertNotNull(repositoryUrl); - response.close(); - response = client.resource(repositoryUrl).get(ClientResponse.class); - assertNotNull(response); - Assert.assertEquals(200, response.getStatus()); - repository = new ObjectMapperProvider().get().readValue(response.getEntity(String.class), RepositoryDto.class); + assertNotNull(repositoryUrl); + } + + Response clientResponse = client.resource(repositoryUrl).get(); + assertNotNull(clientResponse); + Assert.assertEquals(200, clientResponse.getStatus()); + repository = clientResponse.readEntity(RepositoryDto.class); REPOSITORY_PATH = repository.getNamespace() + "/" + repository.getName(); assertNotNull(REPOSITORY_PATH); - response.close(); + clientResponse.close(); } /** @@ -125,20 +123,14 @@ public class RepositorySimplePermissionITCase * @param response */ @Override - protected void checkGetAllResponse(ClientResponse response) + protected void checkGetAllResponse(Response response) { if (!credentials.isAnonymous()) { assertNotNull(response); Assert.assertEquals(200, response.getStatus()); - HalRepresentation repositories = - null; - try { - repositories = new ObjectMapperProvider().get().readValue(response.getEntity(String.class), HalRepresentation.class); - } catch (IOException e) { - throw new RuntimeException(e); - } + HalRepresentation repositories = response.readEntity(HalRepresentation.class); assertNotNull(repositories); assertTrue(repositories.getEmbedded().getItemsBy("repositories").isEmpty()); @@ -153,7 +145,7 @@ public class RepositorySimplePermissionITCase * @param response */ @Override - protected void checkGetResponse(ClientResponse response) + protected void checkGetResponse(Response response) { if (!credentials.isAnonymous()) { diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/ScmClient.java b/scm-it/src/test/java/sonia/scm/it/webapp/ScmClient.java index a2620dbd9a..fcb759a167 100644 --- a/scm-it/src/test/java/sonia/scm/it/webapp/ScmClient.java +++ b/scm-it/src/test/java/sonia/scm/it/webapp/ScmClient.java @@ -24,8 +24,9 @@ package sonia.scm.it.webapp; -import com.sun.jersey.api.client.Client; -import com.sun.jersey.api.client.WebResource; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.core.MediaType; import java.util.Base64; @@ -47,11 +48,19 @@ public class ScmClient { this.client = createClient(); } - public WebResource.Builder resource(String url) { + public Invocation.Builder resource(String url) { if (user == null) { - return client.resource(url).getRequestBuilder(); + return client.target(url).request(); } else { - return client.resource(url).header("Authorization", createAuthHeaderValue()); + return client.target(url).request().header("Authorization", createAuthHeaderValue()); + } + } + + public Invocation.Builder resource(String url, MediaType mediaType) { + if (user == null) { + return client.target(url).request(mediaType); + } else { + return client.target(url).request(mediaType).header("Authorization", createAuthHeaderValue()); } } diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/UserITUtil.java b/scm-it/src/test/java/sonia/scm/it/webapp/UserITUtil.java index 500627736e..2bbca3c01f 100644 --- a/scm-it/src/test/java/sonia/scm/it/webapp/UserITUtil.java +++ b/scm-it/src/test/java/sonia/scm/it/webapp/UserITUtil.java @@ -24,14 +24,14 @@ package sonia.scm.it.webapp; -import com.sun.jersey.api.client.ClientResponse; +import jakarta.ws.rs.core.Response; import sonia.scm.user.User; import sonia.scm.web.VndMediaType; import static sonia.scm.it.webapp.IntegrationTestUtil.post; public class UserITUtil { - public static ClientResponse postUser(ScmClient client, User user) { + public static Response postUser(ScmClient client, User user) { return post(client, "users", VndMediaType.USER, user); } } diff --git a/scm-it/src/test/java/sonia/scm/it/webapp/UserPermissionITCase.java b/scm-it/src/test/java/sonia/scm/it/webapp/UserPermissionITCase.java index b072990278..1cf9be8315 100644 --- a/scm-it/src/test/java/sonia/scm/it/webapp/UserPermissionITCase.java +++ b/scm-it/src/test/java/sonia/scm/it/webapp/UserPermissionITCase.java @@ -26,20 +26,16 @@ package sonia.scm.it.webapp; //~--- non-JDK imports -------------------------------------------------------- -import com.sun.jersey.api.client.ClientResponse; import de.otto.edison.hal.HalRepresentation; +import jakarta.ws.rs.core.Response; import org.junit.Assert; import org.junit.Assume; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import sonia.scm.api.rest.ObjectMapperProvider; import sonia.scm.user.User; import sonia.scm.user.UserTestData; import sonia.scm.web.VndMediaType; -import java.io.IOException; - -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -148,7 +144,7 @@ public class UserPermissionITCase extends AbstractPermissionITCaseBase } @Override - protected void checkGetAllResponse(ClientResponse response) + protected void checkGetAllResponse(Response response) { Assume.assumeTrue(credentials.getUsername() == null); if (!credentials.isAnonymous()) @@ -156,13 +152,7 @@ public class UserPermissionITCase extends AbstractPermissionITCaseBase assertNotNull(response); Assert.assertEquals(200, response.getStatus()); - HalRepresentation repositories = - null; - try { - repositories = new ObjectMapperProvider().get().readValue(response.getEntity(String.class), HalRepresentation.class); - } catch (IOException e) { - throw new RuntimeException(e); - } + HalRepresentation repositories = (HalRepresentation) response.getEntity(); assertNotNull(repositories); assertTrue(repositories.getEmbedded().getItemsBy("users").isEmpty()); diff --git a/scm-packaging/deb/build.gradle b/scm-packaging/deb/build.gradle index d193aef76b..682f4d8990 100644 --- a/scm-packaging/deb/build.gradle +++ b/scm-packaging/deb/build.gradle @@ -107,8 +107,7 @@ task deb(type: Deb) { expand([version: version]) } // https://github.com/nebula-plugins/gradle-ospackage-plugin/issues/118 - configurationFile('/etc/scm/server-config.xml') - configurationFile('/etc/scm/logging.xml') + configurationFile('/etc/scm/config.yml') from('src/main/fs/etc/systemd') { into '/etc/systemd' diff --git a/scm-packaging/deb/src/main/bin/scm-server b/scm-packaging/deb/src/main/bin/scm-server index 4adbc09294..8281b36718 100755 --- a/scm-packaging/deb/src/main/bin/scm-server +++ b/scm-packaging/deb/src/main/bin/scm-server @@ -19,7 +19,7 @@ # reserved. # extra jvm arguments -EXTRA_JVM_ARGUMENTS="-Djava.awt.headless=true -Dlogback.configurationFile=logging.xml" +EXTRA_JVM_ARGUMENTS="-Djava.awt.headless=true" BASEDIR="/opt/scm-server" diff --git a/scm-packaging/deb/src/main/fs/etc/default/scm-server b/scm-packaging/deb/src/main/fs/etc/default/scm-server index 619e61eaf9..5b26fe7c8c 100644 --- a/scm-packaging/deb/src/main/fs/etc/default/scm-server +++ b/scm-packaging/deb/src/main/fs/etc/default/scm-server @@ -23,15 +23,6 @@ # SOFTWARE. # -# scm-server host interface -HOST=0.0.0.0 - -# scm-server port -PORT=8080 - -# home of scm-manager -export SCM_HOME=/var/lib/scm - # force jvm path # JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" @@ -39,4 +30,4 @@ export SCM_HOME=/var/lib/scm # EXTRA_JVM_ARGUMENTS="$EXTRA_JVM_ARGUMENTS -Xms1g -Xmx1g" # pass extra jvm arguments -EXTRA_JVM_ARGUMENTS="$EXTRA_JVM_ARGUMENTS -Djetty.host=$HOST -Djetty.port=$PORT" +EXTRA_JVM_ARGUMENTS="$EXTRA_JVM_ARGUMENTS" diff --git a/scm-packaging/deb/src/main/fs/etc/scm/config.yml b/scm-packaging/deb/src/main/fs/etc/scm/config.yml new file mode 100644 index 0000000000..eb571dd157 --- /dev/null +++ b/scm-packaging/deb/src/main/fs/etc/scm/config.yml @@ -0,0 +1,57 @@ +# base server config +## Address to listen 0.0.0.0 means on every interface +addressBinding: 0.0.0.0 +port: 8080 +contextPath: /scm + +## Evaluates headers set by a reverse proxy like X-Forwarded-For, X-Forwarded-Proto and X-Forwarded-Host +forwardHeadersEnabled: false + +## increase http header size for mercurial +httpHeaderSize: 16384 + +# ssl config - ssl is only evaluated if key store path is set +## path to your cert file +https: + keyStorePath: "" + keyStorePassword: secret + keyStoreType: PKCS12 + sslPort: 8443 + redirectHttpToHttps: false + +tempDir: /var/cache/scm/work + +# logging +log: + ## Destination of logging files + logDir: /var/log/scm + rootLevel: WARN + enableFileAppender: true + enableConsoleAppender: false + logger: + sonia.scm: INFO + com.cloudogu.scm: INFO + +webapp: + ## Sets explicit working directory for internal processes, empty means default java temp dir + workDir: + ## Home directory "scm-home" which is also set for classpath + homeDir: /var/lib/scm + cache: + dataFile: + enabled: true + store: + enabled: true + ## Warning: Enabling this option can lead to security issue. + endlessJwt: false + #### Number of async threads + asyncThreads: 4 + #### Max seconds to abort async execution + maxAsyncAbortSeconds: 60 + #### Amount of central work queue workers + central-work-queue: + workers: 4 + #### Strategy for the working copy pool implementation [sonia.scm.repository.work.NoneCachingWorkingCopyPool, sonia.scm.repository.work.SimpleCachingWorkingCopyPool] + workingCopyPoolStrategy: sonia.scm.repository.work.SimpleCachingWorkingCopyPool + #### Amount of "cached" working copies + workingCopyPoolSize: 5 diff --git a/scm-packaging/deb/src/main/fs/etc/scm/logging.xml b/scm-packaging/deb/src/main/fs/etc/scm/logging.xml deleted file mode 100644 index 39a4bfc37c..0000000000 --- a/scm-packaging/deb/src/main/fs/etc/scm/logging.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - /var/log/scm/scm-manager.log - - - /var/log/scm/scm-manager-%i.log - 1 - 10 - - - - 10MB - - - true - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scm-packaging/deb/src/main/fs/etc/scm/server-config.xml b/scm-packaging/deb/src/main/fs/etc/scm/server-config.xml deleted file mode 100644 index d88ff30eab..0000000000 --- a/scm-packaging/deb/src/main/fs/etc/scm/server-config.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - 16384 - 16384 - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /scm - - /var/webapp/scm-webapp.war - - - - org.eclipse.jetty.servlet.Default.dirAllowed - false - - /var/cache/scm/work/webapp - - - - / - - - - - - /var/webapp/docroot - - - - - /var/cache/scm/work/work/docroot - - - - - - - - - - - - - - - - - - diff --git a/scm-packaging/deb/src/main/scripts/preinst b/scm-packaging/deb/src/main/scripts/preinst index 55ce22c06b..2ccd51844f 100644 --- a/scm-packaging/deb/src/main/scripts/preinst +++ b/scm-packaging/deb/src/main/scripts/preinst @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # MIT License # @@ -23,6 +23,23 @@ # SOFTWARE. # +current_version=$(dpkg -s scm-server | grep '^Version:' | awk '{print $2}') + +if $(dpkg --compare-versions "$current_version" lt "3.0.0"); then + read -n 1 -s -r -p " +######################################################### + +You are upgrading to a new major version which could break your current server +configuration. Find more information about the migration here: + + + +Press any key to continue + +######################################################### +" +fi + getent group scm >/dev/null || groupadd -r scm getent passwd scm >/dev/null || \ useradd -r -g scm -M \ diff --git a/scm-packaging/docker/build.gradle b/scm-packaging/docker/build.gradle index f34a0367a0..553042032d 100644 --- a/scm-packaging/docker/build.gradle +++ b/scm-packaging/docker/build.gradle @@ -27,8 +27,8 @@ plugins { id 'org.scm-manager.license' } + import org.gradle.util.VersionNumber -import groovy.json.JsonSlurper configurations { server @@ -90,7 +90,7 @@ task setupBuilder() { } task build(type: Exec) { - commandLine = ["docker", "buildx", "bake", "--builder", "scm-builder", isSnapshot ? "dev": "prod"] + commandLine = ["docker", "buildx", "bake", "--builder", "scm-builder", isSnapshot ? "dev": "prod", "--load"] environment "VERSION", dockerTag environment "COMMIT_SHA", revision environment "IMAGE", dockerRepository diff --git a/scm-packaging/docker/src/main/fs/etc/scm/config.yml b/scm-packaging/docker/src/main/fs/etc/scm/config.yml new file mode 100644 index 0000000000..81eec6afc3 --- /dev/null +++ b/scm-packaging/docker/src/main/fs/etc/scm/config.yml @@ -0,0 +1,55 @@ +# base server config +## Address to listen 0.0.0.0 means on every interface +addressBinding: 0.0.0.0 +port: 8080 +contextPath: /scm + +## Evaluates headers set by a reverse proxy like X-Forwarded-For, X-Forwarded-Proto and X-Forwarded-Host +forwardHeadersEnabled: false + +## increase http header size for mercurial +httpHeaderSize: 16384 + +# ssl config - ssl is only evaluated if key store path is set +## path to your cert file +https: + keyStorePath: "" + keyStorePassword: secret + keyStoreType: PKCS12 + sslPort: 8443 + redirectHttpToHttps: false + +tempDir: /var/cache/scm/work + +# logging +log: + rootLevel: WARN + enableFileAppender: false + enableConsoleAppender: true + logger: + sonia.scm: INFO + com.cloudogu.scm: INFO + +webapp: + ## Sets explicit working directory for internal processes, empty means default java temp dir + workDir: + ## Home directory "scm-home" which is also set for classpath + homeDir: /var/lib/scm + cache: + dataFile: + enabled: true + store: + enabled: true + ## Warning: Enabling this option can lead to security issue. + endlessJwt: false + #### Number of async threads + asyncThreads: 4 + #### Max seconds to abort async execution + maxAsyncAbortSeconds: 60 + #### Amount of central work queue workers + central-work-queue: + workers: 4 + #### Strategy for the working copy pool implementation [sonia.scm.repository.work.NoneCachingWorkingCopyPool, sonia.scm.repository.work.SimpleCachingWorkingCopyPool] + workingCopyPoolStrategy: sonia.scm.repository.work.SimpleCachingWorkingCopyPool + #### Amount of "cached" working copies + workingCopyPoolSize: 5 diff --git a/scm-packaging/docker/src/main/fs/etc/scm/logging.xml b/scm-packaging/docker/src/main/fs/etc/scm/logging.xml deleted file mode 100644 index c6c0bdbe57..0000000000 --- a/scm-packaging/docker/src/main/fs/etc/scm/logging.xml +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scm-packaging/docker/src/main/fs/etc/scm/server-config.xml b/scm-packaging/docker/src/main/fs/etc/scm/server-config.xml deleted file mode 100644 index 3048cf72bd..0000000000 --- a/scm-packaging/docker/src/main/fs/etc/scm/server-config.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - 16384 - 16384 - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /scm - - /var/webapp/scm-webapp.war - - - - org.eclipse.jetty.servlet.Default.dirAllowed - false - - /var/cache/scm/work/webapp - - - - / - - - - - - /var/webapp/docroot - - - - - /var/cache/scm/work/work/docroot - - - - - - - - - - - - - - - - - - diff --git a/scm-packaging/docker/src/main/fs/opt/scm-server/bin/healthcheck b/scm-packaging/docker/src/main/fs/opt/scm-server/bin/healthcheck index bc19368b52..8aa45337f2 100755 --- a/scm-packaging/docker/src/main/fs/opt/scm-server/bin/healthcheck +++ b/scm-packaging/docker/src/main/fs/opt/scm-server/bin/healthcheck @@ -2,5 +2,4 @@ exec java -cp "/etc/scm:/opt/scm-server/lib/*" \ -client -Xmx64m \ -Djava.awt.headless=true \ - -Dlogback.configurationFile=logging.xml \ sonia.scm.server.HealthCheck diff --git a/scm-packaging/docker/src/main/fs/opt/scm-server/bin/scm-server b/scm-packaging/docker/src/main/fs/opt/scm-server/bin/scm-server index 82f8a2f74b..18e5680815 100755 --- a/scm-packaging/docker/src/main/fs/opt/scm-server/bin/scm-server +++ b/scm-packaging/docker/src/main/fs/opt/scm-server/bin/scm-server @@ -1,6 +1,5 @@ #!/bin/sh exec java -cp "/etc/scm:/opt/scm-server/lib/*" \ -Djava.awt.headless=true \ - -Dlogback.configurationFile=logging.xml \ $JAVA_OPTS $* \ sonia.scm.server.ScmServerDaemon diff --git a/scm-packaging/helm/src/main/chart/templates/configmap.yaml b/scm-packaging/helm/src/main/chart/templates/configmap.yaml index e0d7dd151a..522553fa6d 100644 --- a/scm-packaging/helm/src/main/chart/templates/configmap.yaml +++ b/scm-packaging/helm/src/main/chart/templates/configmap.yaml @@ -32,154 +32,62 @@ metadata: release: "{{ .Release.Name }}" heritage: "{{ .Release.Service }}" data: - server-config.xml: | - - - + config.yml: | + # base server config + ## Address to listen 0.0.0.0 means on every interface - - - 16384 - 16384 - false + {{- if .Values.ingress.enabled -}} + ## Evaluates headers set by a reverse proxy like X-Forwarded-For, X-Forwarded-Proto and X-Forwarded-Host + forwardHeadersEnabled: true + {{- end }} - {{- if .Values.ingress.enabled -}} - - - - - {{- end }} - + addressBinding: 0.0.0.0 + port: 8080 + contextPath: /scm - - - - - - - - - - - - - - - - - - - - - - - - + ## increase http header size for mercurial + httpHeaderSize: 16384 - - /scm - - /var/webapp/scm-webapp.war - - - org.eclipse.jetty.servlet.Default.dirAllowed - false - - - /work/scm - - + # ssl config - ssl is only evaluated if key store path is set + ## path to your cert file + https: + keyStorePath: "" + keyStorePassword: secret + keyStoreType: PKCS12 + sslPort: 8443 + redirectHttpToHttps: false - - / - - - - - - /var/webapp/docroot - - - - - - /work/docroot - - + tempDir: /var/cache/scm/work - - - - - - - - - - - - - - + # logging + log: + rootLevel: WARN + enableFileAppender: false + enableConsoleAppender: true + logger: + sonia.scm: INFO + com.cloudogu.scm: INFO - - - logging.xml: | - - - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + webapp: + ## Sets explicit working directory for internal processes, empty means default java temp dir + workDir: + ## Home directory "scm-home" which is also set for classpath + homeDir: /var/lib/scm + cache: + dataFile: + enabled: true + store: + enabled: true + ## Warning: Enabling this option can lead to security issue. + endlessJwt: false + #### Number of async threads + asyncThreads: 4 + #### Max seconds to abort async execution + maxAsyncAbortSeconds: 60 + #### Amount of central work queue workers + central-work-queue: + workers: 4 + #### Strategy for the working copy pool implementation [sonia.scm.repository.work.NoneCachingWorkingCopyPool, sonia.scm.repository.work.SimpleCachingWorkingCopyPool] + workingCopyPoolStrategy: sonia.scm.repository.work.SimpleCachingWorkingCopyPool + #### Amount of "cached" working copies + workingCopyPoolSize: 5 diff --git a/scm-packaging/helm/src/main/chart/templates/deployment.yaml b/scm-packaging/helm/src/main/chart/templates/deployment.yaml index 3c90b0c971..560ca263d6 100644 --- a/scm-packaging/helm/src/main/chart/templates/deployment.yaml +++ b/scm-packaging/helm/src/main/chart/templates/deployment.yaml @@ -100,7 +100,7 @@ spec: - name: data mountPath: /var/lib/scm - name: config - mountPath: /opt/scm-server/conf + mountPath: /etc/scm {{- with .Values.extraVolumeMounts }} {{- tpl . $ | nindent 10 }} {{- end }} diff --git a/scm-packaging/rpm/Vagrantfile b/scm-packaging/rpm/Vagrantfile index 6a7fe40042..3235b5bb99 100644 --- a/scm-packaging/rpm/Vagrantfile +++ b/scm-packaging/rpm/Vagrantfile @@ -32,6 +32,21 @@ Vagrant.configure("2") do |config| end config.vm.provision "shell", inline: <<-SHELL + cd /etc/yum.repos.d/ + sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-* + sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-* + + cat << EOF | sudo tee /etc/yum.repos.d/SCM-Manager.repo +[scm-manager] +name=SCM-Manager Repository +baseurl=https://packages.scm-manager.org/repository/yum-v2-releases/ +enabled=1 +gpgcheck=1 +priority=1 +gpgkey=file:///etc/pki/rpm-gpg/SCM-Manager +EOF + sudo curl -o /etc/pki/rpm-gpg/SCM-Manager https://packages.scm-manager.org/repository/keys/gpg/oss-cloudogu-com.pub + yum install -y /vagrant/build/distributions/scm-server-*.rpm SHELL end diff --git a/scm-packaging/rpm/src/main/bin/scm-server b/scm-packaging/rpm/src/main/bin/scm-server index 4adbc09294..8281b36718 100755 --- a/scm-packaging/rpm/src/main/bin/scm-server +++ b/scm-packaging/rpm/src/main/bin/scm-server @@ -19,7 +19,7 @@ # reserved. # extra jvm arguments -EXTRA_JVM_ARGUMENTS="-Djava.awt.headless=true -Dlogback.configurationFile=logging.xml" +EXTRA_JVM_ARGUMENTS="-Djava.awt.headless=true" BASEDIR="/opt/scm-server" diff --git a/scm-packaging/rpm/src/main/fs/etc/default/scm-server b/scm-packaging/rpm/src/main/fs/etc/default/scm-server index 8f882580c4..ad2a18d8cd 100644 --- a/scm-packaging/rpm/src/main/fs/etc/default/scm-server +++ b/scm-packaging/rpm/src/main/fs/etc/default/scm-server @@ -23,15 +23,6 @@ # SOFTWARE. # -# scm-server host interface -HOST=0.0.0.0 - -# scm-server port -PORT=8080 - -# home of scm-manager -export SCM_HOME=/var/lib/scm - # force jvm path # JAVA_HOME="/usr/lib/jvm/jre-11" @@ -39,4 +30,4 @@ export SCM_HOME=/var/lib/scm # EXTRA_JVM_ARGUMENTS="$EXTRA_JVM_ARGUMENTS -Xms1g -Xmx1g" # pass extra jvm arguments -EXTRA_JVM_ARGUMENTS="$EXTRA_JVM_ARGUMENTS -Djetty.host=$HOST -Djetty.port=$PORT" +EXTRA_JVM_ARGUMENTS="$EXTRA_JVM_ARGUMENTS" diff --git a/scm-packaging/rpm/src/main/fs/etc/scm/config.yml b/scm-packaging/rpm/src/main/fs/etc/scm/config.yml new file mode 100644 index 0000000000..5b3dd681b6 --- /dev/null +++ b/scm-packaging/rpm/src/main/fs/etc/scm/config.yml @@ -0,0 +1,58 @@ +# base server config +## Address to listen 0.0.0.0 means on every interface +addressBinding: 0.0.0.0 +port: 8080 +contextPath: /scm + +## Evaluates headers set by a reverse proxy like X-Forwarded-For, X-Forwarded-Proto and X-Forwarded-Host +forwardHeadersEnabled: false + +## increase http header size for mercurial +httpHeaderSize: 16384 + +# ssl config - ssl is only evaluated if key store path is set +https: + ## path to your cert file + keyStorePath: "" + keyStorePassword: secret + keyStoreType: PKCS12 + sslPort: 8443 + redirectHttpToHttps: false + +# Temp directory used for jetty webserver. The temporary directory for internal operations can be configured as "workDir" in webapp. +tempDir: /var/cache/scm/work + +# logging +log: + ## Destination of logging files + logDir: /var/log/scm + rootLevel: WARN + enableFileAppender: true + enableConsoleAppender: true + logger: + sonia.scm: INFO + com.cloudogu.scm: INFO + +webapp: + ## Sets explicit working directory for internal processes, empty means default java temp dir + workDir: + ## Home directory "scm-home" which is also set for classpath + homeDir: /var/lib/scm + cache: + dataFile: + enabled: true + store: + enabled: true + ## Warning: Enabling this option can lead to security issue. + endlessJwt: false + #### Number of async threads + asyncThreads: 4 + #### Max seconds to abort async execution + maxAsyncAbortSeconds: 60 + #### Amount of central work queue workers + central-work-queue: + workers: 4 + #### Strategy for the working copy pool implementation [sonia.scm.repository.work.NoneCachingWorkingCopyPool, sonia.scm.repository.work.SimpleCachingWorkingCopyPool] + workingCopyPoolStrategy: sonia.scm.repository.work.SimpleCachingWorkingCopyPool + #### Amount of "cached" working copies + workingCopyPoolSize: 5 diff --git a/scm-packaging/rpm/src/main/fs/etc/scm/logging.xml b/scm-packaging/rpm/src/main/fs/etc/scm/logging.xml deleted file mode 100644 index 39a4bfc37c..0000000000 --- a/scm-packaging/rpm/src/main/fs/etc/scm/logging.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - /var/log/scm/scm-manager.log - - - /var/log/scm/scm-manager-%i.log - 1 - 10 - - - - 10MB - - - true - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scm-packaging/rpm/src/main/fs/etc/scm/server-config.xml b/scm-packaging/rpm/src/main/fs/etc/scm/server-config.xml deleted file mode 100644 index d88ff30eab..0000000000 --- a/scm-packaging/rpm/src/main/fs/etc/scm/server-config.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - 16384 - 16384 - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /scm - - /var/webapp/scm-webapp.war - - - - org.eclipse.jetty.servlet.Default.dirAllowed - false - - /var/cache/scm/work/webapp - - - - / - - - - - - /var/webapp/docroot - - - - - /var/cache/scm/work/work/docroot - - - - - - - - - - - - - - - - - - diff --git a/scm-packaging/rpm/src/main/scripts/before-installation.sh b/scm-packaging/rpm/src/main/scripts/before-installation.sh index 55ce22c06b..dacc8d0c17 100644 --- a/scm-packaging/rpm/src/main/scripts/before-installation.sh +++ b/scm-packaging/rpm/src/main/scripts/before-installation.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # MIT License # @@ -22,6 +22,27 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # +current_version=$(yum info scm-server | grep Version | awk '{ print $3 }' | awk -F "" '{print $1}') + +if [ $((current_version)) -lt $(("3")) ]; then + echo " + +######################################################### + +You are upgrading to a new major version which could break your current server +configuration. Find more information about the migration here: + + + +Press Enter to continue + +######################################################### + +" >/dev/tty + if exec /dev/null || groupadd -r scm getent passwd scm >/dev/null || \ diff --git a/scm-packaging/unix/build.gradle b/scm-packaging/unix/build.gradle index 9fa60b3e55..901df0e516 100644 --- a/scm-packaging/unix/build.gradle +++ b/scm-packaging/unix/build.gradle @@ -54,11 +54,11 @@ task unix(type: Tar) { into('scm-server') { into('conf') { from 'src/main/fs/conf' - include 'server-config.xml' + include 'config.yml' expand([version: version]) } from('src/main/fs') { - exclude('**/server-config.xml') + exclude('**/config.yml') } into('bin') { from('src/main/bin') { diff --git a/scm-packaging/unix/src/main/bin/scm-server b/scm-packaging/unix/src/main/bin/scm-server index 4695381ce5..bede449265 100755 --- a/scm-packaging/unix/src/main/bin/scm-server +++ b/scm-packaging/unix/src/main/bin/scm-server @@ -22,7 +22,7 @@ USER="" # extra jvm arguments -EXTRA_JVM_ARGUMENTS="-Djava.awt.headless=true -Dlogback.configurationFile=logging.xml" +EXTRA_JVM_ARGUMENTS="-Djava.awt.headless=true" BASEDIR=`dirname $0`/.. BASEDIR=`(cd "$BASEDIR"; pwd)` diff --git a/scm-packaging/unix/src/main/fs/conf/config.yml b/scm-packaging/unix/src/main/fs/conf/config.yml new file mode 100644 index 0000000000..5b3dd681b6 --- /dev/null +++ b/scm-packaging/unix/src/main/fs/conf/config.yml @@ -0,0 +1,58 @@ +# base server config +## Address to listen 0.0.0.0 means on every interface +addressBinding: 0.0.0.0 +port: 8080 +contextPath: /scm + +## Evaluates headers set by a reverse proxy like X-Forwarded-For, X-Forwarded-Proto and X-Forwarded-Host +forwardHeadersEnabled: false + +## increase http header size for mercurial +httpHeaderSize: 16384 + +# ssl config - ssl is only evaluated if key store path is set +https: + ## path to your cert file + keyStorePath: "" + keyStorePassword: secret + keyStoreType: PKCS12 + sslPort: 8443 + redirectHttpToHttps: false + +# Temp directory used for jetty webserver. The temporary directory for internal operations can be configured as "workDir" in webapp. +tempDir: /var/cache/scm/work + +# logging +log: + ## Destination of logging files + logDir: /var/log/scm + rootLevel: WARN + enableFileAppender: true + enableConsoleAppender: true + logger: + sonia.scm: INFO + com.cloudogu.scm: INFO + +webapp: + ## Sets explicit working directory for internal processes, empty means default java temp dir + workDir: + ## Home directory "scm-home" which is also set for classpath + homeDir: /var/lib/scm + cache: + dataFile: + enabled: true + store: + enabled: true + ## Warning: Enabling this option can lead to security issue. + endlessJwt: false + #### Number of async threads + asyncThreads: 4 + #### Max seconds to abort async execution + maxAsyncAbortSeconds: 60 + #### Amount of central work queue workers + central-work-queue: + workers: 4 + #### Strategy for the working copy pool implementation [sonia.scm.repository.work.NoneCachingWorkingCopyPool, sonia.scm.repository.work.SimpleCachingWorkingCopyPool] + workingCopyPoolStrategy: sonia.scm.repository.work.SimpleCachingWorkingCopyPool + #### Amount of "cached" working copies + workingCopyPoolSize: 5 diff --git a/scm-packaging/unix/src/main/fs/conf/logging.xml b/scm-packaging/unix/src/main/fs/conf/logging.xml deleted file mode 100644 index b6689c7acb..0000000000 --- a/scm-packaging/unix/src/main/fs/conf/logging.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - ${LOGDIR}/scm-manager.log - - - ${LOGDIR}/scm-manager-%i.log - 1 - 10 - - - - 10MB - - - true - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scm-packaging/unix/src/main/fs/conf/server-config.xml b/scm-packaging/unix/src/main/fs/conf/server-config.xml deleted file mode 100644 index 526ef3ecae..0000000000 --- a/scm-packaging/unix/src/main/fs/conf/server-config.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - 16384 - 16384 - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /scm - - /var/webapp/scm-webapp.war - - - - org.eclipse.jetty.servlet.Default.dirAllowed - false - - - /work/scm - - - - - / - - - - - - /var/webapp/docroot - - - - - - /work/docroot - - - - - - - - - - - - - - - - - - - diff --git a/scm-packaging/windows/Vagrantfile b/scm-packaging/windows/Vagrantfile new file mode 100644 index 0000000000..440798f832 --- /dev/null +++ b/scm-packaging/windows/Vagrantfile @@ -0,0 +1,32 @@ +# +# MIT License +# +# Copyright (c) 2020-present Cloudogu GmbH and Contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +Vagrant.configure("2") do |config| + config.vm.box = "gusztavvargadr/windows-10" + config.vm.network "forwarded_port", guest: 8080, host: 8080 + + config.vm.provider "virtualbox" do |vb| + vb.memory = "1024" + end +end diff --git a/scm-packaging/windows/build.gradle b/scm-packaging/windows/build.gradle index 9fcbc44064..04babce3a4 100644 --- a/scm-packaging/windows/build.gradle +++ b/scm-packaging/windows/build.gradle @@ -73,16 +73,16 @@ task windows(type: Zip) { into('scm-server') { into('conf') { from 'src/main/fs/conf' - include 'server-config.xml' + include 'config.yml' expand([version: version]) } from('src/main/fs') { - exclude('**/server-config.xml') + exclude('**/config.yml') } into('lib') { from project.configurations.server } - into('webapp') { + into('var/webapp') { from project.configurations.webapp rename { 'scm-webapp.war' diff --git a/scm-packaging/windows/src/main/fs/conf/config.yml b/scm-packaging/windows/src/main/fs/conf/config.yml new file mode 100644 index 0000000000..5b3dd681b6 --- /dev/null +++ b/scm-packaging/windows/src/main/fs/conf/config.yml @@ -0,0 +1,58 @@ +# base server config +## Address to listen 0.0.0.0 means on every interface +addressBinding: 0.0.0.0 +port: 8080 +contextPath: /scm + +## Evaluates headers set by a reverse proxy like X-Forwarded-For, X-Forwarded-Proto and X-Forwarded-Host +forwardHeadersEnabled: false + +## increase http header size for mercurial +httpHeaderSize: 16384 + +# ssl config - ssl is only evaluated if key store path is set +https: + ## path to your cert file + keyStorePath: "" + keyStorePassword: secret + keyStoreType: PKCS12 + sslPort: 8443 + redirectHttpToHttps: false + +# Temp directory used for jetty webserver. The temporary directory for internal operations can be configured as "workDir" in webapp. +tempDir: /var/cache/scm/work + +# logging +log: + ## Destination of logging files + logDir: /var/log/scm + rootLevel: WARN + enableFileAppender: true + enableConsoleAppender: true + logger: + sonia.scm: INFO + com.cloudogu.scm: INFO + +webapp: + ## Sets explicit working directory for internal processes, empty means default java temp dir + workDir: + ## Home directory "scm-home" which is also set for classpath + homeDir: /var/lib/scm + cache: + dataFile: + enabled: true + store: + enabled: true + ## Warning: Enabling this option can lead to security issue. + endlessJwt: false + #### Number of async threads + asyncThreads: 4 + #### Max seconds to abort async execution + maxAsyncAbortSeconds: 60 + #### Amount of central work queue workers + central-work-queue: + workers: 4 + #### Strategy for the working copy pool implementation [sonia.scm.repository.work.NoneCachingWorkingCopyPool, sonia.scm.repository.work.SimpleCachingWorkingCopyPool] + workingCopyPoolStrategy: sonia.scm.repository.work.SimpleCachingWorkingCopyPool + #### Amount of "cached" working copies + workingCopyPoolSize: 5 diff --git a/scm-packaging/windows/src/main/fs/conf/logging.xml b/scm-packaging/windows/src/main/fs/conf/logging.xml deleted file mode 100644 index a042102119..0000000000 --- a/scm-packaging/windows/src/main/fs/conf/logging.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - ${BASE_DIR}\logs\scm-manager.log - - - ${BASE_DIR}\scm-manager-%i.log - 1 - 10 - - - - 10MB - - - true - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scm-packaging/windows/src/main/fs/conf/server-config.xml b/scm-packaging/windows/src/main/fs/conf/server-config.xml deleted file mode 100644 index 7b3439c618..0000000000 --- a/scm-packaging/windows/src/main/fs/conf/server-config.xml +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - 16384 - 16384 - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /scm - - /webapp/scm-webapp.war - - - - org.eclipse.jetty.servlet.Default.dirAllowed - false - - - /work/scm-webapp - - - - - / - - - - - - /webapp/docroot - - - - - - - /work/docroot - - - - - - - - - - - - - - - - - - - diff --git a/scm-packaging/windows/src/main/fs/scm-server.xml b/scm-packaging/windows/src/main/fs/scm-server.xml index cd7ee27d59..41403e9aea 100644 --- a/scm-packaging/windows/src/main/fs/scm-server.xml +++ b/scm-packaging/windows/src/main/fs/scm-server.xml @@ -38,7 +38,7 @@ --> %JAVA_HOME%\bin\java - -cp "%BASE%\conf";"%BASE%\lib\*" -DBASE_DIR="%BASE%" -Djava.awt.headless=true -Dlogback.configurationFile=logging.xml sonia.scm.server.ScmServerDaemon + -cp "%BASE%\conf";"%BASE%\lib\*" -DBASE_DIR="%BASE%" -Djava.awt.headless=true sonia.scm.server.ScmServerDaemon %BASE%\logs rotate diff --git a/scm-packaging/windows/src/main/fs/webapp/docroot/index.html b/scm-packaging/windows/src/main/fs/var/webapp/docroot/index.html similarity index 100% rename from scm-packaging/windows/src/main/fs/webapp/docroot/index.html rename to scm-packaging/windows/src/main/fs/var/webapp/docroot/index.html diff --git a/scm-plugins/scm-git-plugin/build.gradle b/scm-plugins/scm-git-plugin/build.gradle index d849a801fd..e8fb24ff1c 100644 --- a/scm-plugins/scm-git-plugin/build.gradle +++ b/scm-plugins/scm-git-plugin/build.gradle @@ -23,10 +23,10 @@ */ plugins { - id 'org.scm-manager.smp' version '0.13.0' + id 'org.scm-manager.smp' version '0.16.1' } -def jgitVersion = '6.7.0.202309050840-r-scm1' +def jgitVersion = '6.7.0.202309050840-r-scm1-jakarta' dependencies { // required by scm-it diff --git a/scm-plugins/scm-git-plugin/package.json b/scm-plugins/scm-git-plugin/package.json index 9a035ef1dc..d75e9b051e 100644 --- a/scm-plugins/scm-git-plugin/package.json +++ b/scm-plugins/scm-git-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-git-plugin", "private": true, - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -11,7 +11,7 @@ "typecheck": "tsc" }, "dependencies": { - "@scm-manager/ui-plugins": "2.48.2-SNAPSHOT" + "@scm-manager/ui-plugins": "3.0.0-SNAPSHOT" }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigDto.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigDto.java index ae67cbcb1d..5de61b1fae 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigDto.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigDto.java @@ -26,15 +26,14 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.hibernate.validator.constraints.Length; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; - import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; @NoArgsConstructor diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigInIndexResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigInIndexResource.java index 0d440d9b4e..1f0aa71023 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigInIndexResource.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigInIndexResource.java @@ -26,15 +26,14 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.plugin.Extension; import sonia.scm.repository.GitConfig; import sonia.scm.web.JsonEnricherBase; import sonia.scm.web.JsonEnricherContext; -import javax.inject.Inject; -import javax.inject.Provider; - import static java.util.Collections.singletonMap; import static sonia.scm.web.VndMediaType.INDEX; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java index e366a35abb..982bd78350 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java @@ -32,22 +32,21 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.repository.GitConfig; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.web.GitVndMediaType; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - /** * RESTful Web Service Resource to manage the configuration of the git plugin. */ diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigToGitConfigDtoMapper.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigToGitConfigDtoMapper.java index bf049fc6d8..5f512ba651 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigToGitConfigDtoMapper.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigToGitConfigDtoMapper.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.AfterMapping; import org.mapstruct.Mapper; import org.mapstruct.MappingTarget; @@ -32,8 +33,6 @@ import sonia.scm.config.ConfigurationPermissions; import sonia.scm.repository.GitConfig; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; - import static de.otto.edison.hal.Link.link; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigEnricher.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigEnricher.java index 6ac47aa26f..5fd12a6560 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigEnricher.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigEnricher.java @@ -26,15 +26,14 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.plugin.Extension; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.RepositoryManager; import sonia.scm.web.AbstractRepositoryJsonEnricher; -import javax.inject.Inject; -import javax.inject.Provider; - @Extension public class GitRepositoryConfigEnricher extends AbstractRepositoryJsonEnricher { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigMapper.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigMapper.java index 94f74902e8..5ec04f4747 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigMapper.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigMapper.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.AfterMapping; import org.mapstruct.Context; import org.mapstruct.Mapper; @@ -34,8 +35,6 @@ import sonia.scm.repository.GitRepositoryConfig; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryPermissions; -import javax.inject.Inject; - import static de.otto.edison.hal.Link.link; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java index 40170a56dd..40fe18afc1 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java @@ -31,6 +31,14 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import lombok.AllArgsConstructor; import lombok.Getter; import org.slf4j.Logger; @@ -45,15 +53,6 @@ import sonia.scm.store.ConfigurationStore; import sonia.scm.web.GitVndMediaType; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - import static sonia.scm.ContextEntry.ContextBuilder.entity; import static sonia.scm.NotFoundException.notFound; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigStoreProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigStoreProvider.java index 8c73ea2244..2d558097e2 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigStoreProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigStoreProvider.java @@ -24,14 +24,13 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.event.ScmEventBus; import sonia.scm.repository.GitRepositoryConfig; import sonia.scm.repository.Repository; import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; -import javax.inject.Inject; - public class GitRepositoryConfigStoreProvider { private final ConfigurationStoreFactory configurationStoreFactory; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/RepositoryLinkEnricher.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/RepositoryLinkEnricher.java index dbf7efe056..9d20d2a7af 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/RepositoryLinkEnricher.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/RepositoryLinkEnricher.java @@ -24,13 +24,12 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.plugin.Extension; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryPermissions; -import javax.inject.Inject; -import javax.inject.Provider; - @Extension @Enrich(Repository.class) public class RepositoryLinkEnricher implements HalEnricher { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java index 66bdcd7278..67f1862734 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java @@ -24,11 +24,10 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import org.hibernate.validator.constraints.Length; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; - import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; interface UpdateGitConfigDto { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandInterpreterFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandInterpreterFactory.java index 840d562ba1..383cf8c9a2 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandInterpreterFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandInterpreterFactory.java @@ -24,11 +24,11 @@ package sonia.scm.protocolcommand.git; +import jakarta.inject.Inject; import sonia.scm.plugin.Extension; import sonia.scm.protocolcommand.CommandInterpreter; import sonia.scm.protocolcommand.CommandInterpreterFactory; -import javax.inject.Inject; import java.util.Optional; import static java.util.Optional.empty; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandProtocol.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandProtocol.java index 900340566f..06e78d432f 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandProtocol.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitCommandProtocol.java @@ -24,6 +24,7 @@ package sonia.scm.protocolcommand.git; +import jakarta.inject.Inject; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.RepositoryCache; import org.eclipse.jgit.transport.ReceivePack; @@ -40,7 +41,6 @@ import sonia.scm.protocolcommand.RepositoryContext; import sonia.scm.protocolcommand.ScmCommandProtocol; import sonia.scm.repository.RepositoryPermissions; -import javax.inject.Inject; import java.io.IOException; @Extension diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitRepositoryContextResolver.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitRepositoryContextResolver.java index e67e518bb0..9c4c26109b 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitRepositoryContextResolver.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/protocolcommand/git/GitRepositoryContextResolver.java @@ -25,6 +25,7 @@ package sonia.scm.protocolcommand.git; import com.google.common.base.Splitter; +import jakarta.inject.Inject; import sonia.scm.ContextEntry; import sonia.scm.NotFoundException; import sonia.scm.config.ScmConfiguration; @@ -35,7 +36,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryLocationResolver; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; import java.nio.file.Path; import java.util.Iterator; import java.util.Optional; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/DefaultBranchChangedDispatcher.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/DefaultBranchChangedDispatcher.java index b7581c0928..4e438f87a6 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/DefaultBranchChangedDispatcher.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/DefaultBranchChangedDispatcher.java @@ -26,13 +26,12 @@ package sonia.scm.repository; import com.github.legman.Subscribe; import com.google.common.base.Strings; +import jakarta.inject.Inject; import sonia.scm.EagerSingleton; import sonia.scm.api.v2.resources.GitRepositoryConfigChangedEvent; import sonia.scm.event.ScmEventBus; import sonia.scm.plugin.Extension; -import javax.inject.Inject; - @Extension @EagerSingleton public class DefaultBranchChangedDispatcher { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverterFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverterFactory.java index 2cc518fa2e..7e8078f658 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverterFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitChangesetConverterFactory.java @@ -24,12 +24,12 @@ package sonia.scm.repository; +import jakarta.inject.Inject; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevWalk; import sonia.scm.security.GPG; import sonia.scm.security.PublicKey; -import javax.inject.Inject; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitConfig.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitConfig.java index d827d97cf5..f3fd00538b 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitConfig.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitConfig.java @@ -27,14 +27,13 @@ package sonia.scm.repository; //~--- JDK imports ------------------------------------------------------------ import com.google.common.base.Strings; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; import sonia.scm.auditlog.AuditEntry; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - /** * @author Sebastian Sdorra */ diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitHeadModifier.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitHeadModifier.java index 00be9ec9f6..ce629100c4 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitHeadModifier.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitHeadModifier.java @@ -24,13 +24,13 @@ package sonia.scm.repository; +import jakarta.inject.Inject; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.RefUpdate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.util.Objects; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitHttpTransportRegistration.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitHttpTransportRegistration.java index 985fe4128f..7de2778324 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitHttpTransportRegistration.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitHttpTransportRegistration.java @@ -24,14 +24,13 @@ package sonia.scm.repository; +import jakarta.inject.Inject; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.eclipse.jgit.transport.HttpTransport; import sonia.scm.plugin.Extension; import sonia.scm.web.ScmHttpConnectionFactory; -import javax.inject.Inject; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - @Extension public class GitHttpTransportRegistration implements ServletContextListener { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryConfig.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryConfig.java index 157c551794..ac9798842b 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryConfig.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryConfig.java @@ -24,12 +24,11 @@ package sonia.scm.repository; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.auditlog.AuditEntry; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; - @XmlRootElement(name = "config") @XmlAccessorType(XmlAccessType.FIELD) @AuditEntry(labels = {"git", "config"}) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryConfigInitializer.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryConfigInitializer.java index 3a6f2b31e5..7d43d1f044 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryConfigInitializer.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryConfigInitializer.java @@ -26,12 +26,12 @@ package sonia.scm.repository; import com.github.legman.Subscribe; import com.google.common.base.Strings; +import jakarta.inject.Inject; import sonia.scm.EagerSingleton; import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider; import sonia.scm.plugin.Extension; import sonia.scm.store.ConfigurationStore; -import javax.inject.Inject; import java.util.Comparator; import java.util.List; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryModifyListener.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryModifyListener.java index a5bd1c058a..851a480cda 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryModifyListener.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryModifyListener.java @@ -25,13 +25,12 @@ package sonia.scm.repository; import com.github.legman.Subscribe; +import jakarta.inject.Inject; import sonia.scm.EagerSingleton; import sonia.scm.api.v2.resources.GitRepositoryConfigChangedEvent; import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider; import sonia.scm.plugin.Extension; -import javax.inject.Inject; - /** * Repository listener which handles git related repository events. * diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java index bad75b3641..4f5fe7701a 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitUtil.java @@ -30,6 +30,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; +import jakarta.servlet.http.HttpServletRequest; import org.eclipse.jgit.api.FetchCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; @@ -62,7 +63,6 @@ import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; import sonia.scm.web.GitUserAgentProvider; -import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; import java.io.InputStream; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitWorkQueueShutdownListener.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitWorkQueueShutdownListener.java index 63c552c2a4..2631dd2f21 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitWorkQueueShutdownListener.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitWorkQueueShutdownListener.java @@ -24,14 +24,13 @@ package sonia.scm.repository; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.eclipse.jgit.lib.internal.WorkQueue; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.Extension; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - @Extension public class GitWorkQueueShutdownListener implements ServletContextListener { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/ScmGpgSigner.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/ScmGpgSigner.java index 423cd2aca8..edd876f41f 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/ScmGpgSigner.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/ScmGpgSigner.java @@ -24,6 +24,7 @@ package sonia.scm.repository; +import jakarta.inject.Inject; import org.eclipse.jgit.api.errors.CanceledException; import org.eclipse.jgit.lib.CommitBuilder; import org.eclipse.jgit.lib.GpgSignature; @@ -32,7 +33,6 @@ import org.eclipse.jgit.lib.PersonIdent; import org.eclipse.jgit.transport.CredentialsProvider; import sonia.scm.security.GPG; -import javax.inject.Inject; import java.io.UnsupportedEncodingException; public class ScmGpgSigner extends GpgSigner { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/ScmGpgSignerInitializer.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/ScmGpgSignerInitializer.java index 144601275d..175f448b2f 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/ScmGpgSignerInitializer.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/ScmGpgSignerInitializer.java @@ -24,13 +24,12 @@ package sonia.scm.repository; +import jakarta.inject.Inject; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.eclipse.jgit.lib.GpgSigner; import sonia.scm.plugin.Extension; -import javax.inject.Inject; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - @Extension public class ScmGpgSignerInitializer implements ServletContextListener { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/FileLockPreCommitHook.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/FileLockPreCommitHook.java index 4a99b8eb7a..e94244ba02 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/FileLockPreCommitHook.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/FileLockPreCommitHook.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.github.legman.Subscribe; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.EagerSingleton; @@ -37,7 +38,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; -import javax.inject.Inject; import java.io.IOException; @Extension diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBlameCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBlameCommand.java index a919206509..8785cad613 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBlameCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBlameCommand.java @@ -29,6 +29,7 @@ package sonia.scm.repository.spi; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.ObjectId; @@ -42,7 +43,6 @@ import sonia.scm.repository.GitUtil; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Person; -import javax.inject.Inject; import java.io.IOException; import java.util.ArrayList; import java.util.List; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchCommand.java index 77754e4a3f..f31f1b9a0c 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchCommand.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.CannotDeleteCurrentBranchException; @@ -56,7 +57,6 @@ import sonia.scm.repository.api.HookContextFactory; import sonia.scm.repository.api.HookFeature; import sonia.scm.repository.api.HookModificationsProvider; -import javax.inject.Inject; import java.io.IOException; import java.util.Collection; import java.util.List; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchDetailsCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchDetailsCommand.java index 51f29edb31..2233e7f785 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchDetailsCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchDetailsCommand.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.lib.ObjectId; @@ -38,7 +39,6 @@ import sonia.scm.repository.BranchDetails; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.api.BranchDetailsCommandResult; -import javax.inject.Inject; import java.io.IOException; import static sonia.scm.ContextEntry.ContextBuilder.entity; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java index d397b6ea3d..9a6c621134 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java @@ -27,6 +27,7 @@ package sonia.scm.repository.spi; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.checkerframework.checker.nullness.qual.Nullable; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; @@ -42,7 +43,6 @@ import sonia.scm.repository.GitUtil; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Person; -import javax.inject.Inject; import java.io.IOException; import java.util.List; import java.util.Optional; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java index 2c99c9c4e5..fbd6946079 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBrowseCommand.java @@ -29,6 +29,8 @@ import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.inject.assistedinject.Assisted; +import jakarta.annotation.Nullable; +import jakarta.inject.Inject; import org.eclipse.jgit.attributes.Attributes; import org.eclipse.jgit.lfs.LfsPointer; import org.eclipse.jgit.lib.Constants; @@ -56,8 +58,6 @@ import sonia.scm.store.BlobStore; import sonia.scm.util.Util; import sonia.scm.web.lfs.LfsBlobStoreFactory; -import javax.annotation.Nullable; -import javax.inject.Inject; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayDeque; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBundleCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBundleCommand.java index 9835372ef4..26e5939027 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBundleCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBundleCommand.java @@ -24,11 +24,11 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import sonia.scm.ContextEntry; import sonia.scm.repository.api.BundleResponse; import sonia.scm.repository.api.ExportFailedException; -import javax.inject.Inject; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Files; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java index b7f8723b51..7e4f762fa8 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitCatCommand.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.lfs.LfsPointer; import org.eclipse.jgit.lib.Constants; @@ -45,7 +46,6 @@ import sonia.scm.util.IOUtil; import sonia.scm.util.Util; import sonia.scm.web.lfs.LfsBlobStoreFactory; -import javax.inject.Inject; import java.io.Closeable; import java.io.FilterInputStream; import java.io.IOException; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitChangesetsCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitChangesetsCommand.java index 2f5bc461aa..9f7872be7d 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitChangesetsCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitChangesetsCommand.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; @@ -35,7 +36,6 @@ import sonia.scm.repository.GitChangesetConverterFactory; import sonia.scm.repository.GitUtil; import sonia.scm.repository.InternalRepositoryException; -import javax.inject.Inject; import java.io.IOException; import java.util.Comparator; import java.util.Iterator; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitConfigContextListener.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitConfigContextListener.java index 59c4bd816c..583891931c 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitConfigContextListener.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitConfigContextListener.java @@ -24,13 +24,13 @@ package sonia.scm.repository.spi; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.eclipse.jgit.util.SystemReader; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.Extension; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; import java.util.Map; @Extension diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitContextFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitContextFactory.java index 214eb090b8..cb187e8251 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitContextFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitContextFactory.java @@ -24,12 +24,11 @@ package sonia.scm.repository.spi; +import jakarta.inject.Inject; import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.Repository; -import javax.inject.Inject; - class GitContextFactory { private final GitRepositoryHandler handler; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java index 9999f1214e..a57366ada3 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffCommand.java @@ -25,12 +25,12 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.diff.DiffEntry; import org.eclipse.jgit.diff.DiffFormatter; import org.eclipse.jgit.util.QuotedString; import sonia.scm.repository.api.DiffCommandBuilder; -import javax.inject.Inject; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffResultCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffResultCommand.java index e0ca5411d6..8753b20000 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffResultCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitDiffResultCommand.java @@ -25,12 +25,12 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.errors.AmbiguousObjectException; import sonia.scm.NotUniqueRevisionException; import sonia.scm.repository.Repository; import sonia.scm.repository.api.DiffResult; -import javax.inject.Inject; import java.io.IOException; public class GitDiffResultCommand extends AbstractGitCommand implements DiffResultCommand { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitFileLockCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitFileLockCommand.java index 62db72b1c5..55eb7486ec 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitFileLockCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitFileLockCommand.java @@ -25,12 +25,12 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import sonia.scm.repository.api.FileLock; import sonia.scm.repository.api.LockCommandResult; import sonia.scm.repository.api.UnlockCommandResult; import sonia.scm.repository.spi.GitFileLockStoreFactory.GitFileLockStore; -import javax.inject.Inject; import java.util.Collection; import java.util.Optional; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitFileLockStoreFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitFileLockStoreFactory.java index c3583a76cc..7180e18512 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitFileLockStoreFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitFileLockStoreFactory.java @@ -24,6 +24,12 @@ package sonia.scm.repository.spi; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.shiro.SecurityUtils; @@ -34,12 +40,6 @@ import sonia.scm.security.KeyGenerator; import sonia.scm.store.DataStore; import sonia.scm.store.DataStoreFactory; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; import java.time.Clock; import java.time.Instant; import java.util.Collection; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitIncomingCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitIncomingCommand.java index 1b30e16f98..cfe54d4b39 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitIncomingCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitIncomingCommand.java @@ -27,13 +27,13 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.api.LogCommand; import org.eclipse.jgit.lib.ObjectId; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.GitChangesetConverterFactory; import sonia.scm.repository.GitRepositoryHandler; -import javax.inject.Inject; import java.io.IOException; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLfsFilterContextListener.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLfsFilterContextListener.java index fd6ae90952..88cb62a4fa 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLfsFilterContextListener.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLfsFilterContextListener.java @@ -25,6 +25,8 @@ package sonia.scm.repository.spi; import com.google.common.io.ByteStreams; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.eclipse.jgit.attributes.FilterCommand; import org.eclipse.jgit.attributes.FilterCommandRegistry; import org.eclipse.jgit.lib.Repository; @@ -33,8 +35,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.Extension; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java index 63cbfcde64..5470964260 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitLogCommand.java @@ -28,6 +28,7 @@ package sonia.scm.repository.spi; import com.google.common.base.Strings; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.revwalk.RevCommit; @@ -42,7 +43,6 @@ import sonia.scm.repository.GitUtil; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.util.IOUtil; -import javax.inject.Inject; import java.io.IOException; import static sonia.scm.ContextEntry.ContextBuilder.entity; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java index f9810f665a..cd31673199 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java @@ -26,6 +26,7 @@ package sonia.scm.repository.spi; import com.google.common.collect.ImmutableSet; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.MergeResult; import org.eclipse.jgit.api.Status; @@ -45,7 +46,6 @@ import sonia.scm.repository.api.MergeDryRunCommandResult; import sonia.scm.repository.api.MergeStrategy; import sonia.scm.repository.api.MergeStrategyNotSupportedException; -import javax.inject.Inject; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Set; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMirrorCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMirrorCommand.java index 306aac1dac..09478613ac 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMirrorCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMirrorCommand.java @@ -27,6 +27,7 @@ package sonia.scm.repository.spi; import com.google.common.base.Stopwatch; import com.google.common.base.Strings; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.apache.commons.lang.StringUtils; import org.eclipse.jgit.api.FetchCommand; import org.eclipse.jgit.api.Git; @@ -63,7 +64,6 @@ import sonia.scm.repository.api.MirrorFilter.Result; import sonia.scm.repository.api.UsernamePasswordCredential; import sonia.scm.repository.spi.LfsLoader.LfsLoaderLogger; -import javax.inject.Inject; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java index cb9a41a8c6..b6ef30aad1 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModificationsCommand.java @@ -25,11 +25,11 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Modifications; -import javax.inject.Inject; import java.io.IOException; import static sonia.scm.ContextEntry.ContextBuilder.entity; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModifyCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModifyCommand.java index 1db49122b3..e24aeb6f26 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModifyCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModifyCommand.java @@ -26,6 +26,7 @@ package sonia.scm.repository.spi; import com.google.common.util.concurrent.Striped; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.apache.commons.lang.StringUtils; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; @@ -42,7 +43,6 @@ import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; import sonia.scm.web.lfs.LfsBlobStoreFactory; -import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.nio.file.Path; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitOutgoingCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitOutgoingCommand.java index bebcbd88db..867bdbf98d 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitOutgoingCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitOutgoingCommand.java @@ -27,13 +27,13 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.api.LogCommand; import org.eclipse.jgit.lib.ObjectId; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.GitChangesetConverterFactory; import sonia.scm.repository.GitRepositoryHandler; -import javax.inject.Inject; import java.io.IOException; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java index 02d07e4547..25c7957a5e 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java @@ -28,6 +28,7 @@ import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.Iterables; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.ObjectId; @@ -48,7 +49,6 @@ import sonia.scm.repository.api.ImportFailedException; import sonia.scm.repository.api.MirrorCommandResult; import sonia.scm.repository.api.PullResponse; -import javax.inject.Inject; import java.io.File; import java.io.IOException; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPushCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPushCommand.java index 4e7d80b939..9e36dc07f5 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPushCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPushCommand.java @@ -25,12 +25,12 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.api.PushResponse; -import javax.inject.Inject; import java.io.IOException; public class GitPushCommand extends AbstractGitPushOrPullCommand implements PushCommand { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryHookEventFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryHookEventFactory.java index 69b3bd2f77..994e437851 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryHookEventFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryHookEventFactory.java @@ -24,6 +24,7 @@ package sonia.scm.repository.spi; +import jakarta.inject.Inject; import sonia.scm.repository.GitChangesetConverter; import sonia.scm.repository.GitChangesetConverterFactory; import sonia.scm.repository.RepositoryHookEvent; @@ -31,7 +32,6 @@ import sonia.scm.repository.Tag; import sonia.scm.repository.api.HookContext; import sonia.scm.repository.api.HookContextFactory; -import javax.inject.Inject; import java.io.IOException; import java.util.List; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagCommand.java index 9af85d07fb..fc129e11be 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagCommand.java @@ -26,6 +26,7 @@ package sonia.scm.repository.spi; import com.google.common.base.Strings; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.eclipse.jgit.api.Git; @@ -57,7 +58,6 @@ import sonia.scm.repository.api.TagCreateRequest; import sonia.scm.repository.api.TagDeleteRequest; import sonia.scm.user.User; -import javax.inject.Inject; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagConverter.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagConverter.java index 917574fff5..fe30f5ec60 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagConverter.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagConverter.java @@ -24,6 +24,7 @@ package sonia.scm.repository.spi; +import jakarta.inject.Inject; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.lib.Repository; @@ -37,7 +38,6 @@ import sonia.scm.repository.GitUtil; import sonia.scm.repository.Tag; import sonia.scm.security.GPG; -import javax.inject.Inject; import java.io.IOException; class GitTagConverter { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagsCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagsCommand.java index adc3208bc5..69df34b30a 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagsCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitTagsCommand.java @@ -27,6 +27,7 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Ref; @@ -34,7 +35,6 @@ import org.eclipse.jgit.revwalk.RevWalk; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Tag; -import javax.inject.Inject; import java.io.IOException; import java.util.List; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitUnbundleCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitUnbundleCommand.java index 21c38ef355..a67bb8b97c 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitUnbundleCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitUnbundleCommand.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.google.common.io.ByteSource; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Ref; @@ -36,7 +37,6 @@ import sonia.scm.repository.Tag; import sonia.scm.repository.api.ImportFailedException; import sonia.scm.repository.api.UnbundleResponse; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/LfsLoader.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/LfsLoader.java index 088bf23dfd..b7a077aacc 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/LfsLoader.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/LfsLoader.java @@ -24,6 +24,7 @@ package sonia.scm.repository.spi; +import jakarta.inject.Inject; import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.lfs.Lfs; import org.eclipse.jgit.lfs.LfsPointer; @@ -46,7 +47,6 @@ import sonia.scm.repository.api.MirrorCommandResult.LfsUpdateResult; import sonia.scm.store.BlobStore; import sonia.scm.web.lfs.LfsBlobStoreFactory; -import javax.inject.Inject; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/MirrorHttpConnectionProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/MirrorHttpConnectionProvider.java index bb4f4ea381..979c223304 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/MirrorHttpConnectionProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/MirrorHttpConnectionProvider.java @@ -24,6 +24,7 @@ package sonia.scm.repository.spi; +import jakarta.inject.Inject; import org.eclipse.jgit.transport.http.HttpConnectionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,7 +35,6 @@ import sonia.scm.repository.api.UsernamePasswordCredential; import sonia.scm.util.HttpUtil; import sonia.scm.web.ScmHttpConnectionFactory; -import javax.inject.Inject; import javax.net.ssl.KeyManager; import javax.net.ssl.KeyManagerFactory; import java.io.ByteArrayInputStream; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/PostReceiveRepositoryHookEventFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/PostReceiveRepositoryHookEventFactory.java index 30775dc1d0..f239c03621 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/PostReceiveRepositoryHookEventFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/PostReceiveRepositoryHookEventFactory.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.transport.FetchResult; import sonia.scm.ContextEntry; @@ -34,7 +35,6 @@ import sonia.scm.repository.Tag; import sonia.scm.repository.WrappedRepositoryHookEvent; import sonia.scm.repository.api.ImportFailedException; -import javax.inject.Inject; import java.io.IOException; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/PullHttpConnectionProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/PullHttpConnectionProvider.java index ed5ef7070f..3aae79b289 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/PullHttpConnectionProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/PullHttpConnectionProvider.java @@ -25,12 +25,12 @@ package sonia.scm.repository.spi; import com.google.common.base.Strings; +import jakarta.inject.Inject; import org.eclipse.jgit.transport.http.HttpConnectionFactory; import sonia.scm.net.HttpConnectionOptions; import sonia.scm.net.HttpURLConnectionFactory; import sonia.scm.web.ScmHttpConnectionFactory; -import javax.inject.Inject; import java.nio.charset.StandardCharsets; import java.util.Base64; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java index 7190881ae3..6148bed06d 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.inject.Inject; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.transport.ScmTransportProtocol; import sonia.scm.repository.GitWorkingCopyFactory; @@ -32,7 +33,6 @@ import sonia.scm.repository.work.SimpleWorkingCopyFactory; import sonia.scm.repository.work.WorkingCopyPool; import sonia.scm.util.SystemUtil; -import javax.inject.Inject; import java.io.File; public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory implements GitWorkingCopyFactory { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/GitV2UpdateStep.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/GitV2UpdateStep.java index d805fae53c..836ec3b9a5 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/GitV2UpdateStep.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/GitV2UpdateStep.java @@ -24,6 +24,7 @@ package sonia.scm.repository.update; +import jakarta.inject.Inject; import org.eclipse.jgit.storage.file.FileRepositoryBuilder; import sonia.scm.migration.UpdateException; import sonia.scm.migration.UpdateStep; @@ -35,7 +36,6 @@ import sonia.scm.repository.RepositoryLocationResolver; import sonia.scm.update.UpdateStepRepositoryMetadataAccess; import sonia.scm.version.Version; -import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.nio.file.Files; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitContextListener.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitContextListener.java index a48446458d..8fb0787999 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitContextListener.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitContextListener.java @@ -27,20 +27,14 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; - +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.eclipse.jgit.transport.ScmTransportProtocol; import org.eclipse.jgit.transport.Transport; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.plugin.Extension; -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - /** * * @author Sebastian Sdorra diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitLfsLockApiDetector.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitLfsLockApiDetector.java index c70b62c56f..47fcd16dd0 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitLfsLockApiDetector.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitLfsLockApiDetector.java @@ -24,11 +24,11 @@ package sonia.scm.web; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.MediaType; import lombok.extern.slf4j.Slf4j; import sonia.scm.plugin.Extension; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.MediaType; import java.util.Arrays; @Slf4j diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitLfsObjectApiDetector.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitLfsObjectApiDetector.java index db9cfa8711..fd2d491111 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitLfsObjectApiDetector.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitLfsObjectApiDetector.java @@ -24,10 +24,10 @@ package sonia.scm.web; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import sonia.scm.plugin.Extension; -import javax.servlet.http.HttpServletRequest; import java.util.regex.Pattern; @Slf4j diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitPermissionFilter.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitPermissionFilter.java index 7dee1a0283..e086a3f177 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitPermissionFilter.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitPermissionFilter.java @@ -25,6 +25,8 @@ package sonia.scm.web; import com.google.common.annotations.VisibleForTesting; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.eclipse.jgit.http.server.GitSmartHttpTools; import sonia.scm.ClientMessages; import sonia.scm.config.ScmConfiguration; @@ -32,8 +34,6 @@ import sonia.scm.repository.GitUtil; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.web.filter.PermissionFilter; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitPermissionFilterFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitPermissionFilterFactory.java index efa8fd6ff6..db03e6deb4 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitPermissionFilterFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitPermissionFilterFactory.java @@ -24,14 +24,13 @@ package sonia.scm.web; +import jakarta.inject.Inject; import sonia.scm.config.ScmConfiguration; import sonia.scm.plugin.Extension; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.repository.spi.ScmProviderHttpServletDecoratorFactory; -import javax.inject.Inject; - @Extension public class GitPermissionFilterFactory implements ScmProviderHttpServletDecoratorFactory { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceivePackFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceivePackFactory.java index 298df8482f..ae9457cfe7 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceivePackFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitReceivePackFactory.java @@ -27,6 +27,7 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; import org.eclipse.jgit.http.server.resolver.DefaultReceivePackFactory; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.transport.ReceivePack; @@ -39,8 +40,6 @@ import sonia.scm.repository.GitChangesetConverterFactory; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.spi.HookEventFacade; -import javax.servlet.http.HttpServletRequest; - //~--- JDK imports ------------------------------------------------------------ /** diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryResolver.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryResolver.java index d52829cf4a..dd053f951b 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryResolver.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryResolver.java @@ -28,10 +28,10 @@ package sonia.scm.web; import com.google.common.base.Preconditions; import com.google.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; import org.eclipse.jgit.errors.RepositoryNotFoundException; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.transport.resolver.RepositoryResolver; -import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException; import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,7 +40,6 @@ import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.GitUtil; import sonia.scm.repository.RepositoryProvider; -import javax.servlet.http.HttpServletRequest; import java.io.File; import java.io.IOException; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryViewer.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryViewer.java index e502e606be..2ddcf326e3 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryViewer.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitRepositoryViewer.java @@ -31,6 +31,8 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.io.Closeables; import com.google.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.Branch; @@ -48,8 +50,6 @@ import sonia.scm.util.HttpUtil; import sonia.scm.util.IOUtil; import sonia.scm.util.Util; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Writer; import java.util.Date; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java index 318282d7bb..c90abc4952 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitScmProtocolProviderWrapper.java @@ -24,14 +24,13 @@ package sonia.scm.web; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.RootURL; import sonia.scm.plugin.Extension; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper; -import javax.inject.Inject; -import javax.inject.Singleton; - @Singleton @Extension public class GitScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/LfsLockingProtocolServlet.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/LfsLockingProtocolServlet.java index bbc815a486..dd13564d45 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/LfsLockingProtocolServlet.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/LfsLockingProtocolServlet.java @@ -29,6 +29,9 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sdorra.ssp.PermissionCheck; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter; @@ -45,9 +48,6 @@ import sonia.scm.repository.spi.GitFileLockStoreFactory.GitFileLockStore; import sonia.scm.user.DisplayUser; import sonia.scm.user.UserDisplayManager; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collection; import java.util.Collections; @@ -59,6 +59,12 @@ import java.util.regex.Pattern; import java.util.stream.Stream; import static com.google.common.base.Strings.isNullOrEmpty; +import static jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST; +import static jakarta.servlet.http.HttpServletResponse.SC_CONFLICT; +import static jakarta.servlet.http.HttpServletResponse.SC_CREATED; +import static jakarta.servlet.http.HttpServletResponse.SC_FORBIDDEN; +import static jakarta.servlet.http.HttpServletResponse.SC_NOT_FOUND; +import static jakarta.servlet.http.HttpServletResponse.SC_OK; import static java.lang.Integer.parseInt; import static java.lang.Math.max; import static java.lang.Math.min; @@ -67,12 +73,6 @@ import static java.util.Optional.empty; import static java.util.Optional.ofNullable; import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.toList; -import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; -import static javax.servlet.http.HttpServletResponse.SC_CONFLICT; -import static javax.servlet.http.HttpServletResponse.SC_CREATED; -import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN; -import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; -import static javax.servlet.http.HttpServletResponse.SC_OK; public class LfsLockingProtocolServlet extends HttpServlet { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java index b520baa8b5..649a5c5012 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServlet.java @@ -27,6 +27,11 @@ package sonia.scm.web; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.MediaType; import org.eclipse.jgit.http.server.GitServlet; import org.eclipse.jgit.lfs.lib.Constants; import org.slf4j.Logger; @@ -36,11 +41,6 @@ import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.util.HttpUtil; import sonia.scm.web.lfs.servlet.LfsServletFactory; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.MediaType; import java.io.IOException; import java.util.regex.Pattern; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServletProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServletProvider.java index d5a5aa9b1c..5d8fb7e68e 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServletProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmGitServletProvider.java @@ -25,12 +25,11 @@ package sonia.scm.web; import com.google.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.repository.spi.ScmProviderHttpServletProvider; -import javax.inject.Provider; - public class ScmGitServletProvider extends ScmProviderHttpServletProvider { @Inject diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmHttpConnectionFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmHttpConnectionFactory.java index 0dbd8b6f37..d718affde0 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmHttpConnectionFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/ScmHttpConnectionFactory.java @@ -24,13 +24,13 @@ package sonia.scm.web; +import jakarta.inject.Inject; import org.eclipse.jgit.transport.http.HttpConnection; import org.eclipse.jgit.transport.http.HttpConnectionFactory; import org.eclipse.jgit.transport.http.WrappedHttpUrlConnection; import sonia.scm.net.HttpConnectionOptions; import sonia.scm.net.HttpURLConnectionFactory; -import javax.inject.Inject; import java.io.IOException; import java.net.Proxy; import java.net.URL; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LFSAuthCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LFSAuthCommand.java index 0735431724..64d7dc0b55 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LFSAuthCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LFSAuthCommand.java @@ -26,6 +26,7 @@ package sonia.scm.web.lfs; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Charsets; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.config.ScmConfiguration; @@ -39,7 +40,6 @@ import sonia.scm.protocolcommand.git.GitRepositoryContextResolver; import sonia.scm.repository.Repository; import sonia.scm.security.AccessToken; -import javax.inject.Inject; import java.io.IOException; import java.util.Optional; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LfsAccessTokenFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LfsAccessTokenFactory.java index fe92c6c3e7..a97e41f072 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LfsAccessTokenFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LfsAccessTokenFactory.java @@ -25,6 +25,7 @@ package sonia.scm.web.lfs; import com.github.sdorra.ssp.PermissionCheck; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.GitConfig; @@ -35,7 +36,6 @@ import sonia.scm.security.AccessToken; import sonia.scm.security.AccessTokenBuilderFactory; import sonia.scm.security.Scope; -import javax.inject.Inject; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LfsV1UpdateStep.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LfsV1UpdateStep.java index bddedb0ada..491f7c1ddb 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LfsV1UpdateStep.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/LfsV1UpdateStep.java @@ -24,12 +24,12 @@ package sonia.scm.web.lfs; +import jakarta.inject.Inject; import sonia.scm.migration.UpdateStep; import sonia.scm.plugin.Extension; import sonia.scm.update.BlobDirectoryAccess; import sonia.scm.version.Version; -import javax.inject.Inject; import java.nio.file.Path; @Extension diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/RemoveRepositoryIdFromBlobStoreUpdateStep.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/RemoveRepositoryIdFromBlobStoreUpdateStep.java index 919a656b16..1e162e72fb 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/RemoveRepositoryIdFromBlobStoreUpdateStep.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/RemoveRepositoryIdFromBlobStoreUpdateStep.java @@ -24,6 +24,7 @@ package sonia.scm.web.lfs; +import jakarta.inject.Inject; import sonia.scm.migration.UpdateStep; import sonia.scm.plugin.Extension; import sonia.scm.store.StoreType; @@ -31,8 +32,6 @@ import sonia.scm.update.RepositoryUpdateIterator; import sonia.scm.update.StoreUpdateStepUtilFactory; import sonia.scm.version.Version; -import javax.inject.Inject; - import static sonia.scm.version.Version.parse; @Extension diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/LfsServletFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/LfsServletFactory.java index 541e935899..5c7bdc85f8 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/LfsServletFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/LfsServletFactory.java @@ -26,6 +26,10 @@ package sonia.scm.web.lfs.servlet; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; import org.eclipse.jgit.lfs.server.LargeFileRepository; import org.eclipse.jgit.lfs.server.LfsProtocolServlet; import org.eclipse.jgit.lfs.server.fs.FileLfsServlet; @@ -41,11 +45,6 @@ import sonia.scm.web.lfs.LfsAccessTokenFactory; import sonia.scm.web.lfs.LfsBlobStoreFactory; import sonia.scm.web.lfs.ScmBlobLfsRepository; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; - /** * This factory class is a helper class to provide the {@link LfsProtocolServlet} and the {@link FileLfsServlet} * belonging to a SCM Repository. diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/ScmFileTransferServlet.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/ScmFileTransferServlet.java index 91e5ceadfb..6fcabf5c32 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/ScmFileTransferServlet.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/lfs/servlet/ScmFileTransferServlet.java @@ -28,6 +28,11 @@ import com.google.common.annotations.VisibleForTesting; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.codec.binary.Hex; import org.apache.http.HttpStatus; import org.eclipse.jgit.lfs.errors.CorruptLongObjectException; @@ -45,11 +50,6 @@ import sonia.scm.store.Blob; import sonia.scm.store.BlobStore; import sonia.scm.util.IOUtil; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitConfigInIndexResourceTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitConfigInIndexResourceTest.java index 344b2f5b41..bafdafe7c7 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitConfigInIndexResourceTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitConfigInIndexResourceTest.java @@ -29,12 +29,12 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; import com.google.inject.util.Providers; +import jakarta.ws.rs.core.MediaType; import org.junit.Rule; import org.junit.Test; import sonia.scm.web.JsonEnricherContext; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.MediaType; import java.net.URI; import static org.junit.Assert.assertEquals; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitConfigResourceTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitConfigResourceTest.java index 18aab1cc6f..e8dda53c24 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitConfigResourceTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitConfigResourceTest.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; +import jakarta.servlet.http.HttpServletResponse; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.junit.Before; @@ -51,7 +52,6 @@ import sonia.scm.web.GitVndMediaType; import sonia.scm.web.JsonMockHttpRequest; import sonia.scm.web.RestDispatcher; -import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitRepositoryConfigEnricherTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitRepositoryConfigEnricherTest.java index 9400c3481c..ce28169dd7 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitRepositoryConfigEnricherTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/GitRepositoryConfigEnricherTest.java @@ -29,6 +29,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.io.Resources; import com.google.inject.Provider; import com.google.inject.util.Providers; +import jakarta.ws.rs.core.MediaType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -41,7 +42,6 @@ import sonia.scm.repository.RepositoryManager; import sonia.scm.web.JsonEnricherContext; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.MediaType; import java.io.IOException; import java.net.URI; import java.net.URL; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/RepositoryLinkEnricherTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/RepositoryLinkEnricherTest.java index cff10b201f..6527d25a86 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/RepositoryLinkEnricherTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/api/v2/resources/RepositoryLinkEnricherTest.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import com.google.inject.util.Providers; +import jakarta.inject.Provider; import org.github.sdorra.jse.ShiroExtension; import org.github.sdorra.jse.SubjectAware; import org.junit.jupiter.api.BeforeEach; @@ -35,7 +36,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryTestData; -import javax.inject.Provider; import java.net.URI; import static org.mockito.ArgumentMatchers.any; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitUtilTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitUtilTest.java index 9dba9926d5..afe8b812cf 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitUtilTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/GitUtilTest.java @@ -26,6 +26,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; import org.assertj.core.api.Assertions; import org.eclipse.jgit.attributes.Attribute; import org.eclipse.jgit.attributes.Attributes; @@ -35,25 +36,20 @@ import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectLoader; import org.eclipse.jgit.lib.ObjectStream; import org.eclipse.jgit.lib.Repository; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.TemporaryFolder; +import sonia.scm.util.HttpUtil; -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.*; - -import static org.mockito.Mockito.*; - -//~--- JDK imports ------------------------------------------------------------ - -import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.util.Optional; -import javax.servlet.http.HttpServletRequest; -import sonia.scm.util.HttpUtil; +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * Unit tests for {@link GitUtil}. diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/AbstractGitCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/AbstractGitCommandTest.java index 0b7e8e059e..f74b173dc2 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/AbstractGitCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/AbstractGitCommandTest.java @@ -95,7 +95,7 @@ public class AbstractGitCommandTest extends AbstractGitCommandTestBase { void doSomething() { inClone( git -> new Worker(context, repository, git), - new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry()), + new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(null, repositoryLocationResolver)), new SimpleMeterRegistry()), "master" ); } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchCommandTest.java index 0fbc1a4113..8786db0cdc 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchCommandTest.java @@ -71,7 +71,7 @@ public class GitBranchCommandTest extends AbstractGitCommandTestBase { GitChangesetConverter gitChangesetConverter = mock(GitChangesetConverter.class); when(converterFactory.create(any(), any())) .thenReturn(gitChangesetConverter); - when(gitChangesetConverter.createChangeset(any(), (String[]) any())) + when(gitChangesetConverter.createChangeset(any(), any(String[].class))) .thenAnswer(invocation -> { RevCommit revCommit = invocation.getArgument(0, RevCommit.class); Changeset changeset = new Changeset(revCommit.name(), null, null); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommand_BrokenSubmoduleTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommand_BrokenSubmoduleTest.java index 4d73bef0f2..115794af00 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommand_BrokenSubmoduleTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommand_BrokenSubmoduleTest.java @@ -24,6 +24,7 @@ package sonia.scm.repository.spi; +import jakarta.annotation.Nonnull; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -33,7 +34,6 @@ import sonia.scm.repository.BrowserResult; import sonia.scm.repository.FileObject; import sonia.scm.web.lfs.LfsBlobStoreFactory; -import javax.annotation.Nonnull; import java.io.IOException; import java.util.Collection; import java.util.List; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHookChangesetCollectorTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHookChangesetCollectorTest.java index 227aedf21d..d7e6ae58d7 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHookChangesetCollectorTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitHookChangesetCollectorTest.java @@ -74,7 +74,7 @@ public class GitHookChangesetCollectorTest extends AbstractGitCommandTestBase { when(rpack.getRevWalk()).thenReturn(revWalk); when(rpack.getPackParserListener()).thenReturn(listener); when(converterFactory.create(repository, revWalk)).thenReturn(converter); - when(converter.createChangeset(any(), (String[]) any())) + when(converter.createChangeset(any(), any(String[].class))) .thenAnswer(invocation -> new Changeset(invocation.getArgument(0, RevCommit.class).name(), null, null)); } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java index 5ce95f11f6..b112302eba 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommandTest.java @@ -517,7 +517,7 @@ public class GitMergeCommandTest extends AbstractGitCommandTestBase { } private GitMergeCommand createCommand(Consumer interceptor) { - return new GitMergeCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry())) { + return new GitMergeCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(null, repositoryLocationResolver)), new SimpleMeterRegistry())) { @Override > R inClone(Function workerSupplier, GitWorkingCopyFactory workingCopyFactory, String initialBranch) { Function interceptedWorkerSupplier = git -> { diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java index 568db57e2e..31fad05474 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java @@ -93,7 +93,7 @@ public class GitMergeCommand_Conflict_Test extends AbstractGitCommandTestBase { } private MergeConflictResult computeMergeConflictResult(String branchToMerge, String targetBranch) { - GitMergeCommand gitMergeCommand = new GitMergeCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry())); + GitMergeCommand gitMergeCommand = new GitMergeCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(null, repositoryLocationResolver)), new SimpleMeterRegistry())); MergeCommandRequest mergeCommandRequest = new MergeCommandRequest(); mergeCommandRequest.setBranchToMerge(branchToMerge); mergeCommandRequest.setTargetBranch(targetBranch); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMirrorCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMirrorCommandTest.java index e73369b1df..1f786960c2 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMirrorCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMirrorCommandTest.java @@ -118,7 +118,7 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase { GitContext emptyContext = createMirrorContext(clone); SimpleGitWorkingCopyFactory workingCopyFactory = new SimpleGitWorkingCopyFactory( - new KeepingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), + new KeepingWorkingCopyPool(new WorkdirProvider(null, repositoryLocationResolver)), new SimpleMeterRegistry() ); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTestBase.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTestBase.java index e5fb2c5fcd..8e4f45f08c 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTestBase.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTestBase.java @@ -68,7 +68,7 @@ class GitModifyCommandTestBase extends AbstractGitCommandTestBase { GitModifyCommand createCommand() { return new GitModifyCommand( createContext(), - new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry()), + new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(null, repositoryLocationResolver)), new SimpleMeterRegistry()), lfsBlobStoreFactory, createGitRepositoryConfigStoreProvider()); } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitTagCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitTagCommandTest.java index fc8c7e51ce..44ba5a811f 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitTagCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitTagCommandTest.java @@ -104,7 +104,7 @@ public class GitTagCommandTest extends AbstractGitCommandTestBase { GitChangesetConverter gitChangesetConverter = mock(GitChangesetConverter.class); when(converterFactory.create(any(), any())) .thenReturn(gitChangesetConverter); - when(gitChangesetConverter.createChangeset(any(), (String[]) any())) + when(gitChangesetConverter.createChangeset(any(), any(String[].class))) .thenAnswer(invocation -> { RevCommit revCommit = invocation.getArgument(0, RevCommit.class); Changeset changeset = new Changeset(revCommit.name(), null, null); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/CapturingServletOutputStream.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/CapturingServletOutputStream.java index e8ed7fe855..e61f886206 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/CapturingServletOutputStream.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/CapturingServletOutputStream.java @@ -27,9 +27,9 @@ package sonia.scm.web; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitLfsLockApiDetectorTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitLfsLockApiDetectorTest.java index d4fe77e196..93607d310b 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitLfsLockApiDetectorTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitLfsLockApiDetectorTest.java @@ -24,6 +24,7 @@ package sonia.scm.web; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; @@ -31,7 +32,6 @@ import org.junit.jupiter.params.provider.MethodSource; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.servlet.http.HttpServletRequest; import java.util.stream.Stream; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitLfsObjectApiDetectorTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitLfsObjectApiDetectorTest.java index af3e989bdc..08b3b5750d 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitLfsObjectApiDetectorTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitLfsObjectApiDetectorTest.java @@ -24,15 +24,13 @@ package sonia.scm.web; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.servlet.http.HttpServletRequest; - import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java index 4debf707d4..28c888c215 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/GitPermissionFilterTest.java @@ -24,6 +24,8 @@ package sonia.scm.web; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -32,8 +34,6 @@ import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.util.HttpUtil; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import static org.hamcrest.Matchers.containsString; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/LfsLockingProtocolServletTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/LfsLockingProtocolServletTest.java index 3defb4ba91..d2082b4913 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/LfsLockingProtocolServletTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/LfsLockingProtocolServletTest.java @@ -28,6 +28,8 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.assertj.core.api.Condition; import org.github.sdorra.jse.ShiroExtension; import org.github.sdorra.jse.SubjectAware; @@ -45,8 +47,6 @@ import sonia.scm.user.DisplayUser; import sonia.scm.user.User; import sonia.scm.user.UserDisplayManager; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.time.Instant; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/servlet/LfsServletFactoryTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/servlet/LfsServletFactoryTest.java index 3fc2c88096..c916b7b449 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/servlet/LfsServletFactoryTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/web/lfs/servlet/LfsServletFactoryTest.java @@ -24,11 +24,10 @@ package sonia.scm.web.lfs.servlet; +import jakarta.servlet.http.HttpServletRequest; import org.junit.Test; import sonia.scm.repository.Repository; -import javax.servlet.http.HttpServletRequest; - import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; diff --git a/scm-plugins/scm-hg-plugin/build.gradle b/scm-plugins/scm-hg-plugin/build.gradle index 7eba5133bc..92dcb62270 100644 --- a/scm-plugins/scm-hg-plugin/build.gradle +++ b/scm-plugins/scm-hg-plugin/build.gradle @@ -23,7 +23,7 @@ */ plugins { - id 'org.scm-manager.smp' version '0.13.0' + id 'org.scm-manager.smp' version '0.16.1' } dependencies { diff --git a/scm-plugins/scm-hg-plugin/package.json b/scm-plugins/scm-hg-plugin/package.json index 18cf834401..1cb50cad17 100644 --- a/scm-plugins/scm-hg-plugin/package.json +++ b/scm-plugins/scm-hg-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-hg-plugin", "private": true, - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -10,7 +10,7 @@ "typecheck": "tsc" }, "dependencies": { - "@scm-manager/ui-plugins": "2.48.2-SNAPSHOT" + "@scm-manager/ui-plugins": "3.0.0-SNAPSHOT" }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/Encoding.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/Encoding.java index 98d96824c8..b3c47a14a8 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/Encoding.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/Encoding.java @@ -24,13 +24,17 @@ package sonia.scm.api.v2.resources; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; -import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; @Documented diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/EncodingValidator.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/EncodingValidator.java index 07e55d5b18..c8b73eb9ea 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/EncodingValidator.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/EncodingValidator.java @@ -25,9 +25,9 @@ package sonia.scm.api.v2.resources; import com.google.common.base.Strings; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigLinks.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigLinks.java index 6273bc71aa..e96920fbbc 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigLinks.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigLinks.java @@ -26,11 +26,10 @@ package sonia.scm.api.v2.resources; import com.google.common.annotations.VisibleForTesting; import com.google.inject.util.Providers; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.repository.Repository; -import javax.inject.Inject; -import javax.inject.Provider; - public class HgConfigLinks { private final Provider pathInfoStore; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigResource.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigResource.java index b110348e43..fc0a13f717 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigResource.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigResource.java @@ -32,6 +32,15 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.repository.HgGlobalConfig; import sonia.scm.repository.HgRepositoryHandler; @@ -39,16 +48,6 @@ import sonia.scm.repository.HgVerifier; import sonia.scm.web.HgVndMediaType; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - import static sonia.scm.ScmConstraintViolationException.Builder.doThrow; /** diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigAutoConfigurationResource.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigAutoConfigurationResource.java index c8302c4ee2..1a9e81ac39 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigAutoConfigurationResource.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigAutoConfigurationResource.java @@ -31,17 +31,16 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.Response; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.repository.HgGlobalConfig; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.web.HgVndMediaType; import sonia.scm.web.VndMediaType; -import javax.ws.rs.Consumes; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.core.Response; - import static sonia.scm.api.v2.resources.HgConfigResource.HG_CONFIG_PATH_V2; @Path(HG_CONFIG_PATH_V2 + "/auto-configuration") diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigInIndexResource.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigInIndexResource.java index a6949e0391..e7ccde1c19 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigInIndexResource.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigInIndexResource.java @@ -26,15 +26,14 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.plugin.Extension; import sonia.scm.repository.HgGlobalConfig; import sonia.scm.web.JsonEnricherBase; import sonia.scm.web.JsonEnricherContext; -import javax.inject.Inject; -import javax.inject.Provider; - import static java.util.Collections.singletonMap; import static sonia.scm.web.VndMediaType.INDEX; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigToHgGlobalConfigDtoMapper.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigToHgGlobalConfigDtoMapper.java index 0fc1e71499..df7e4e9cc2 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigToHgGlobalConfigDtoMapper.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgGlobalConfigToHgGlobalConfigDtoMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import com.google.common.annotations.VisibleForTesting; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.AfterMapping; import org.mapstruct.Mapper; import org.mapstruct.MappingTarget; @@ -33,8 +34,6 @@ import sonia.scm.config.ConfigurationPermissions; import sonia.scm.repository.HgGlobalConfig; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; - import static de.otto.edison.hal.Link.link; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigEnricher.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigEnricher.java index 51987ad263..a110b88c88 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigEnricher.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigEnricher.java @@ -24,12 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.plugin.Extension; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; -import javax.inject.Inject; - @Extension @Enrich(Repository.class) public class HgRepositoryConfigEnricher implements HalEnricher { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigMapper.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigMapper.java index 060b4ea80c..1ad05ab0ad 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigMapper.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import com.google.common.annotations.VisibleForTesting; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -34,8 +35,6 @@ import sonia.scm.repository.HgRepositoryConfig; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryPermissions; -import javax.inject.Inject; - import static de.otto.edison.hal.Link.link; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigResource.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigResource.java index 759b8b4b86..b04b8a9f5b 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigResource.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgRepositoryConfigResource.java @@ -30,6 +30,15 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.repository.HgRepositoryConfigStore; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; @@ -37,16 +46,6 @@ import sonia.scm.repository.RepositoryManager; import sonia.scm.web.HgVndMediaType; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - import static sonia.scm.ContextEntry.ContextBuilder.entity; import static sonia.scm.NotFoundException.notFound; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/autoconfig/AutoConfiguratorProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/autoconfig/AutoConfiguratorProvider.java index a1ee4d3213..d14d2e0e62 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/autoconfig/AutoConfiguratorProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/autoconfig/AutoConfiguratorProvider.java @@ -25,13 +25,12 @@ package sonia.scm.autoconfig; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.Platform; import sonia.scm.repository.HgVerifier; import sonia.scm.util.SystemUtil; -import javax.inject.Inject; -import javax.inject.Provider; - public class AutoConfiguratorProvider implements Provider { private final HgVerifier verifier; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/log/HgLoggerFactoryBinder.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/log/HgLoggerFactoryBinder.java index 455c2c4327..b34299b201 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/log/HgLoggerFactoryBinder.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/log/HgLoggerFactoryBinder.java @@ -24,12 +24,11 @@ package sonia.scm.log; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.javahg.log.LoggerFactory; import sonia.scm.plugin.Extension; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - @Extension public class HgLoggerFactoryBinder implements ServletContextListener { @Override diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java index dcd7f9e942..f24b25762e 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java @@ -27,6 +27,8 @@ package sonia.scm.repository; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.TransactionId; import sonia.scm.repository.hooks.HookEnvironment; import sonia.scm.repository.hooks.HookServer; @@ -35,8 +37,6 @@ import sonia.scm.security.AccessTokenBuilderFactory; import sonia.scm.security.CipherUtil; import sonia.scm.security.Xsrf; -import javax.inject.Inject; -import javax.inject.Singleton; import java.io.File; import java.io.IOException; import java.util.Map; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfigResolver.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfigResolver.java index 70197e36ad..d369b55ee4 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfigResolver.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfigResolver.java @@ -26,8 +26,8 @@ package sonia.scm.repository; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.MoreObjects; +import jakarta.inject.Inject; -import javax.inject.Inject; import java.io.File; import java.util.function.Function; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgGlobalConfig.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgGlobalConfig.java index 708e49e3c2..e96eaa4f29 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgGlobalConfig.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgGlobalConfig.java @@ -25,12 +25,11 @@ package sonia.scm.repository; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; import sonia.scm.auditlog.AuditEntry; import sonia.scm.util.Util; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - /** * diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryConfig.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryConfig.java index eaf7515a84..ffbf62a6eb 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryConfig.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryConfig.java @@ -24,11 +24,10 @@ package sonia.scm.repository; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Data; import sonia.scm.auditlog.AuditEntry; -import javax.xml.bind.annotation.XmlRootElement; - @Data @XmlRootElement @AuditEntry(labels = {"hg", "config"}) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryConfigStore.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryConfigStore.java index 0d1c08c12b..40ff1c43ec 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryConfigStore.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryConfigStore.java @@ -24,11 +24,10 @@ package sonia.scm.repository; +import jakarta.inject.Inject; import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; -import javax.inject.Inject; - public class HgRepositoryConfigStore { private static final String STORE_NAME = "hgConfig"; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryFactory.java index 26b087eac8..72d52f158f 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryFactory.java @@ -24,6 +24,8 @@ package sonia.scm.repository; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.javahg.RepositoryConfiguration; import org.javahg.ext.purge.PurgeExtension; import org.slf4j.Logger; @@ -31,8 +33,6 @@ import org.slf4j.LoggerFactory; import sonia.scm.repository.hooks.HookEnvironment; import sonia.scm.repository.spi.javahg.HgFileviewExtension; -import javax.inject.Inject; -import javax.inject.Singleton; import java.io.File; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVerifier.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVerifier.java index df4de270a9..3c6c9ec509 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVerifier.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVerifier.java @@ -29,9 +29,6 @@ import org.slf4j.LoggerFactory; import sonia.scm.io.SimpleCommand; import sonia.scm.io.SimpleCommandResult; -import javax.xml.bind.annotation.XmlEnum; -import javax.xml.bind.annotation.XmlEnumValue; -import javax.xml.bind.annotation.XmlType; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java index c189299d72..6e00e2cfc7 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java @@ -25,6 +25,8 @@ package sonia.scm.repository.hooks; import com.google.inject.assistedinject.Assisted; +import jakarta.annotation.Nonnull; +import jakarta.inject.Inject; import lombok.AllArgsConstructor; import lombok.Data; import org.apache.shiro.SecurityUtils; @@ -42,8 +44,6 @@ import sonia.scm.repository.spi.HookEventFacade; import sonia.scm.security.BearerToken; import sonia.scm.security.CipherUtil; -import javax.annotation.Nonnull; -import javax.inject.Inject; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookContextProviderFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookContextProviderFactory.java index fa9773fad2..d329cb2f81 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookContextProviderFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookContextProviderFactory.java @@ -24,6 +24,7 @@ package sonia.scm.repository.hooks; +import jakarta.inject.Inject; import sonia.scm.NotFoundException; import sonia.scm.repository.HgConfigResolver; import sonia.scm.repository.HgRepositoryFactory; @@ -31,8 +32,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.spi.HgHookContextProvider; -import javax.inject.Inject; - public class HookContextProviderFactory { private final RepositoryManager repositoryManager; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookEnvironment.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookEnvironment.java index a1d205a9d5..74d50a75d3 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookEnvironment.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookEnvironment.java @@ -24,7 +24,8 @@ package sonia.scm.repository.hooks; -import javax.inject.Singleton; +import jakarta.inject.Singleton; + import java.util.UUID; @Singleton diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java index fbb6de035a..662da255ff 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java @@ -26,6 +26,9 @@ package sonia.scm.repository.hooks; import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.annotation.Nonnull; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.apache.shiro.SecurityUtils; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.util.ThreadContext; @@ -33,9 +36,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.metrics.Metrics; -import javax.annotation.Nonnull; -import javax.inject.Inject; -import javax.inject.Singleton; import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBlameCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBlameCommand.java index 1316ec33d2..8705e6f606 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBlameCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBlameCommand.java @@ -27,6 +27,7 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.Changeset; import org.javahg.commands.AnnotateCommand; import org.javahg.AnnotateLine; @@ -39,7 +40,6 @@ import sonia.scm.repository.BlameResult; import sonia.scm.repository.Person; import sonia.scm.web.HgUtil; -import javax.inject.Inject; import java.io.IOException; import java.util.List; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchCommand.java index 4eba50f9b3..036bb015da 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchCommand.java @@ -25,10 +25,11 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import org.apache.shiro.SecurityUtils; import org.javahg.Changeset; import org.javahg.commands.CommitCommand; -import com.google.common.annotations.VisibleForTesting; -import org.apache.shiro.SecurityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ContextEntry; @@ -39,8 +40,6 @@ import sonia.scm.repository.api.BranchRequest; import sonia.scm.repository.work.WorkingCopy; import sonia.scm.user.User; -import javax.inject.Inject; - /** * Mercurial implementation of the {@link BranchCommand}. * Note that this creates an empty commit to "persist" the new branch. diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchDetailsCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchDetailsCommand.java index e28fed1737..5e9d8c4419 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchDetailsCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchDetailsCommand.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.Changeset; import org.javahg.commands.ExecutionException; import org.javahg.commands.LogCommand; @@ -32,7 +33,6 @@ import sonia.scm.repository.Branch; import sonia.scm.repository.BranchDetails; import sonia.scm.repository.api.BranchDetailsCommandResult; -import javax.inject.Inject; import java.util.List; import static org.javahg.commands.flags.LogCommandFlags.on; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java index 172a30a617..7ee7260f8e 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java @@ -27,12 +27,12 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.Changeset; import com.google.common.collect.Lists; import sonia.scm.repository.Branch; import sonia.scm.repository.Person; -import javax.inject.Inject; import java.util.List; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java index cf4d8f039b..58a38d0a28 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBrowseCommand.java @@ -27,6 +27,7 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.Changeset; import org.javahg.commands.LogCommand; import com.google.common.base.MoreObjects; @@ -35,7 +36,6 @@ import sonia.scm.repository.BrowserResult; import sonia.scm.repository.FileObject; import sonia.scm.repository.spi.javahg.HgFileviewCommand; -import javax.inject.Inject; import java.io.IOException; import static sonia.scm.ContextEntry.ContextBuilder.entity; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBundleCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBundleCommand.java index 799712599d..4dc9f19d6c 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBundleCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBundleCommand.java @@ -25,11 +25,11 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import sonia.scm.ContextEntry; import sonia.scm.repository.api.BundleResponse; import sonia.scm.repository.api.ExportFailedException; -import javax.inject.Inject; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Files; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java index 12a9fb5656..b9ed43830f 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCatCommand.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.commands.ExecutionException; import com.google.common.io.ByteStreams; import com.google.common.io.Closeables; @@ -34,7 +35,6 @@ import sonia.scm.ContextEntry; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.web.HgUtil; -import javax.inject.Inject; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgChangesetsCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgChangesetsCommand.java index 4c3296db56..4a8e517c4e 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgChangesetsCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgChangesetsCommand.java @@ -25,10 +25,10 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import sonia.scm.repository.Changeset; import sonia.scm.repository.spi.javahg.HgLogChangesetCommand; -import javax.inject.Inject; import java.util.Optional; import static sonia.scm.repository.spi.javahg.HgLogChangesetCommand.on; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContextFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContextFactory.java index 1721c4a5e1..1a1c5b78ef 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContextFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContextFactory.java @@ -24,12 +24,11 @@ package sonia.scm.repository.spi; +import jakarta.inject.Inject; import sonia.scm.repository.HgConfigResolver; import sonia.scm.repository.HgRepositoryFactory; import sonia.scm.repository.Repository; -import javax.inject.Inject; - public class HgCommandContextFactory { private final HgConfigResolver configResolver; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgDiffCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgDiffCommand.java index 57bc408ab4..8166d41577 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgDiffCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgDiffCommand.java @@ -25,16 +25,16 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; -import org.javahg.Repository; import com.google.common.base.Strings; import com.google.common.io.ByteStreams; +import jakarta.annotation.Nonnull; +import jakarta.inject.Inject; +import org.javahg.Repository; import sonia.scm.repository.api.DiffCommandBuilder; import sonia.scm.repository.api.DiffFormat; import sonia.scm.repository.spi.javahg.HgDiffInternalCommand; import sonia.scm.web.HgUtil; -import javax.annotation.Nonnull; -import javax.inject.Inject; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgFullHealthCheckCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgFullHealthCheckCommand.java index f4ab29a14c..0e3d5e3c9f 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgFullHealthCheckCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgFullHealthCheckCommand.java @@ -25,13 +25,13 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.commands.ExecutionException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.HealthCheckFailure; import sonia.scm.repository.HealthCheckResult; -import javax.inject.Inject; import java.io.IOException; public class HgFullHealthCheckCommand extends AbstractCommand implements FullHealthCheckCommand { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgIncomingCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgIncomingCommand.java index c320a7fc0a..da4ddee2bf 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgIncomingCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgIncomingCommand.java @@ -27,6 +27,7 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.commands.ExecutionException; import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; @@ -34,7 +35,6 @@ import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.spi.javahg.HgIncomingChangesetCommand; -import javax.inject.Inject; import java.io.File; import java.util.Collections; import java.util.List; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLazyChangesetResolver.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLazyChangesetResolver.java index 5ffb766b29..b8cb698835 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLazyChangesetResolver.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLazyChangesetResolver.java @@ -25,13 +25,13 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.commands.LogCommand; import sonia.scm.repository.Changeset; import sonia.scm.repository.HgRepositoryFactory; import sonia.scm.repository.Person; import sonia.scm.repository.Repository; -import javax.inject.Inject; import java.util.Iterator; import java.util.concurrent.Callable; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLogCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLogCommand.java index 97830ed24b..6ab9b655fd 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLogCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgLogCommand.java @@ -27,11 +27,11 @@ package sonia.scm.repository.spi; import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.spi.javahg.HgLogChangesetCommand; -import javax.inject.Inject; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModificationsCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModificationsCommand.java index 660861878a..0eae1c968b 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModificationsCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModificationsCommand.java @@ -25,12 +25,12 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import sonia.scm.repository.Modification; import sonia.scm.repository.Modifications; import sonia.scm.repository.spi.javahg.HgLogChangesetCommand; import sonia.scm.repository.spi.javahg.StateCommand; -import javax.inject.Inject; import java.io.IOException; import java.util.Collection; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java index 3a0b110847..0aa9a1a371 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java @@ -25,6 +25,8 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import org.javahg.Changeset; import org.javahg.Repository; import org.javahg.commands.AddCommand; @@ -32,7 +34,6 @@ import org.javahg.commands.CommitCommand; import org.javahg.commands.ExecutionException; import org.javahg.commands.RemoveCommand; import org.javahg.commands.StatusCommand; -import com.google.common.annotations.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ContextEntry; @@ -41,7 +42,6 @@ import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.work.WorkingCopy; -import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.nio.file.Path; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgOutgoingCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgOutgoingCommand.java index 128dbd1230..f9eab06eff 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgOutgoingCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgOutgoingCommand.java @@ -27,6 +27,7 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.commands.ExecutionException; import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; @@ -34,7 +35,6 @@ import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.spi.javahg.HgOutgoingChangesetCommand; -import javax.inject.Inject; import java.io.File; import java.util.Collections; import java.util.List; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPullCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPullCommand.java index 99336e6b66..93fce52e81 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPullCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPullCommand.java @@ -24,10 +24,11 @@ package sonia.scm.repository.spi; +import com.google.common.base.Strings; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.Changeset; import org.javahg.commands.ExecutionException; -import com.google.common.base.Strings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.event.ScmEventBus; @@ -35,7 +36,6 @@ import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.api.ImportFailedException; import sonia.scm.repository.api.PullResponse; -import javax.inject.Inject; import java.io.IOException; import java.util.List; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPushCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPushCommand.java index 76968be469..d0378fb7e3 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPushCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgPushCommand.java @@ -28,6 +28,7 @@ package sonia.scm.repository.spi; import com.google.common.base.Strings; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.javahg.Changeset; import org.javahg.commands.ExecutionException; import org.slf4j.Logger; @@ -36,7 +37,6 @@ import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.api.PushFailedException; import sonia.scm.repository.api.PushResponse; -import javax.inject.Inject; import java.io.IOException; import java.util.List; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryHookEventFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryHookEventFactory.java index c34a50b91f..f58c886c7b 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryHookEventFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryHookEventFactory.java @@ -25,12 +25,12 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import sonia.scm.repository.RepositoryHookEvent; import sonia.scm.repository.Tag; import sonia.scm.repository.api.HookContext; import sonia.scm.repository.api.HookContextFactory; -import javax.inject.Inject; import java.util.List; import static sonia.scm.repository.RepositoryHookType.POST_RECEIVE; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgTagCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgTagCommand.java index e6b3f1d0df..e325b7f8f8 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgTagCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgTagCommand.java @@ -25,10 +25,11 @@ package sonia.scm.repository.spi; import com.google.inject.assistedinject.Assisted; -import org.javahg.Repository; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; +import jakarta.inject.Inject; import org.apache.shiro.SecurityUtils; +import org.javahg.Repository; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Tag; import sonia.scm.repository.api.TagCreateRequest; @@ -36,8 +37,6 @@ import sonia.scm.repository.api.TagDeleteRequest; import sonia.scm.repository.work.WorkingCopy; import sonia.scm.user.User; -import javax.inject.Inject; - import static sonia.scm.repository.spi.UserFormatter.getUserStringFor; public class HgTagCommand extends AbstractWorkingCopyCommand implements TagCommand { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgTagsCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgTagsCommand.java index 8e8014c87d..6f43d874ff 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgTagsCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgTagsCommand.java @@ -30,10 +30,10 @@ import com.google.common.base.Function; import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import sonia.scm.repository.Tag; import sonia.scm.util.Util; -import javax.inject.Inject; import java.util.List; /** diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgUnbundleCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgUnbundleCommand.java index 4836d40154..c1bd0a5694 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgUnbundleCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgUnbundleCommand.java @@ -26,12 +26,12 @@ package sonia.scm.repository.spi; import com.google.common.io.ByteSource; import com.google.inject.assistedinject.Assisted; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.RepositoryHookEvent; import sonia.scm.repository.api.UnbundleResponse; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java index a3d2d3432b..22fc7498ce 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java @@ -24,6 +24,8 @@ package sonia.scm.repository.spi; +import io.micrometer.core.instrument.MeterRegistry; +import jakarta.inject.Inject; import org.javahg.BaseRepository; import org.javahg.Repository; import org.javahg.commands.CloneCommand; @@ -33,14 +35,12 @@ import org.javahg.commands.StatusCommand; import org.javahg.commands.UpdateCommand; import org.javahg.commands.flags.CloneCommandFlags; import org.javahg.ext.purge.PurgeCommand; -import io.micrometer.core.instrument.MeterRegistry; import sonia.scm.repository.HgExtensions; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.work.SimpleWorkingCopyFactory; import sonia.scm.repository.work.WorkingCopyPool; import sonia.scm.util.IOUtil; -import javax.inject.Inject; import java.io.File; import java.io.IOException; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/TemporaryConfigFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/TemporaryConfigFactory.java index 7ad9e9f498..6db85e25a7 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/TemporaryConfigFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/TemporaryConfigFactory.java @@ -26,6 +26,7 @@ package sonia.scm.repository.spi; import com.google.common.base.Joiner; import com.google.common.base.Strings; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.io.INIConfiguration; @@ -36,7 +37,6 @@ import sonia.scm.net.GlobalProxyConfiguration; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.util.Util; -import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.net.URI; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIExceptionHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIExceptionHandler.java index cbddda8b1b..3336252fdf 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIExceptionHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIExceptionHandler.java @@ -28,27 +28,21 @@ package sonia.scm.web; import com.google.common.base.Charsets; import com.google.common.base.Strings; - +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.i18n.Bundle; import sonia.scm.util.IOUtil; import sonia.scm.util.Util; import sonia.scm.web.cgi.CGIExceptionHandler; import sonia.scm.web.cgi.CGIStatusCodeHandler; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; - import java.util.Locale; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * * @author Sebastian Sdorra diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java index 7ed011fa98..bee43b84e5 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java @@ -27,6 +27,11 @@ package sonia.scm.web; import com.google.common.base.Stopwatch; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.annotation.Nonnull; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContext; @@ -43,11 +48,6 @@ import sonia.scm.web.cgi.CGIExecutor; import sonia.scm.web.cgi.CGIExecutorFactory; import sonia.scm.web.cgi.EnvList; -import javax.annotation.Nonnull; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; import java.util.ArrayList; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServletProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServletProvider.java index 323915a89a..552869f11e 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServletProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServletProvider.java @@ -25,12 +25,11 @@ package sonia.scm.web; import com.google.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.repository.spi.ScmProviderHttpServletProvider; -import javax.inject.Provider; - public class HgCGIServletProvider extends ScmProviderHttpServletProvider { @Inject diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilter.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilter.java index 6e8449113e..0c51d8f581 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilter.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilter.java @@ -25,15 +25,15 @@ package sonia.scm.web; import com.google.common.annotations.VisibleForTesting; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.web.filter.PermissionFilter; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilterFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilterFactory.java index cd73edd94b..e114661366 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilterFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgPermissionFilterFactory.java @@ -24,13 +24,12 @@ package sonia.scm.web; +import jakarta.inject.Inject; import sonia.scm.plugin.Extension; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.repository.spi.ScmProviderHttpServletDecoratorFactory; -import javax.inject.Inject; - @Extension public class HgPermissionFilterFactory implements ScmProviderHttpServletDecoratorFactory { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.java index 12b85a1746..2a74803bb1 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgScmProtocolProviderWrapper.java @@ -24,14 +24,13 @@ package sonia.scm.web; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.RootURL; import sonia.scm.plugin.Extension; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper; -import javax.inject.Inject; -import javax.inject.Singleton; - @Singleton @Extension public class HgScmProtocolProviderWrapper extends InitializingHttpScmProtocolWrapper { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletInputStream.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletInputStream.java index 1f435703df..1008a7a332 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletInputStream.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletInputStream.java @@ -25,9 +25,9 @@ package sonia.scm.web; import com.google.common.base.Preconditions; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletRequest.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletRequest.java index aac6961391..8e6eaaed18 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletRequest.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletRequest.java @@ -24,8 +24,9 @@ package sonia.scm.web; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; + import java.io.IOException; /** diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/WireProtocol.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/WireProtocol.java index acb5f0a994..533231b044 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/WireProtocol.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/WireProtocol.java @@ -25,16 +25,15 @@ package sonia.scm.web; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Charsets; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.base.Throwables; import com.google.common.collect.HashMultimap; import com.google.common.collect.Lists; import com.google.common.collect.Multimap; +import jakarta.servlet.http.HttpServletRequest; import sonia.scm.util.HttpUtil; -import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Collection; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgConfigResourceTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgConfigResourceTest.java index 90a39a6ff4..7676ad2171 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgConfigResourceTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgConfigResourceTest.java @@ -28,6 +28,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletResponse; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.junit.Before; @@ -35,7 +37,6 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mapstruct.factory.Mappers; -import org.mockito.Answers; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; @@ -46,8 +47,6 @@ import sonia.scm.repository.RepositoryTestData; import sonia.scm.web.HgVndMediaType; import sonia.scm.web.RestDispatcher; -import javax.inject.Provider; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgGlobalConfigAutoConfigurationResourceTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgGlobalConfigAutoConfigurationResourceTest.java index 891225f3cd..3e0b735144 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgGlobalConfigAutoConfigurationResourceTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgGlobalConfigAutoConfigurationResourceTest.java @@ -24,6 +24,8 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; @@ -41,8 +43,6 @@ import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.web.HgVndMediaType; import sonia.scm.web.RestDispatcher; -import javax.inject.Provider; -import javax.servlet.http.HttpServletResponse; import java.net.URISyntaxException; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgGlobalConfigInIndexResourceTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgGlobalConfigInIndexResourceTest.java index 02b8cbc6b2..c88ee83052 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgGlobalConfigInIndexResourceTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgGlobalConfigInIndexResourceTest.java @@ -29,12 +29,12 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; import com.google.inject.util.Providers; +import jakarta.ws.rs.core.MediaType; import org.junit.Rule; import org.junit.Test; import sonia.scm.web.JsonEnricherContext; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.MediaType; import java.net.URI; import static org.junit.Assert.assertEquals; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgRepositoryConfigResourceTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgRepositoryConfigResourceTest.java index d453fda7e0..29c69b5354 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgRepositoryConfigResourceTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgRepositoryConfigResourceTest.java @@ -28,6 +28,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.util.Providers; import de.otto.edison.hal.Links; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; import org.jboss.resteasy.mock.MockHttpRequest; @@ -50,13 +51,15 @@ import sonia.scm.repository.RepositoryTestData; import sonia.scm.web.HgVndMediaType; import sonia.scm.web.RestDispatcher; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class HgRepositoryConfigResourceTest { diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java index 812b127ae2..058cce9c63 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java @@ -24,6 +24,7 @@ package sonia.scm.repository; +import jakarta.annotation.Nonnull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -41,7 +42,6 @@ import sonia.scm.security.AccessTokenBuilderFactory; import sonia.scm.security.CipherUtil; import sonia.scm.security.Xsrf; -import javax.annotation.Nonnull; import java.io.IOException; import java.nio.file.Path; import java.util.Map; @@ -50,7 +50,13 @@ import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static sonia.scm.repository.DefaultHgEnvironmentBuilder.*; +import static sonia.scm.repository.DefaultHgEnvironmentBuilder.ENV_BEARER_TOKEN; +import static sonia.scm.repository.DefaultHgEnvironmentBuilder.ENV_CHALLENGE; +import static sonia.scm.repository.DefaultHgEnvironmentBuilder.ENV_HOOK_PORT; +import static sonia.scm.repository.DefaultHgEnvironmentBuilder.ENV_REPOSITORY_ID; +import static sonia.scm.repository.DefaultHgEnvironmentBuilder.ENV_REPOSITORY_NAME; +import static sonia.scm.repository.DefaultHgEnvironmentBuilder.ENV_REPOSITORY_PATH; +import static sonia.scm.repository.DefaultHgEnvironmentBuilder.ENV_TRANSACTION_ID; @ExtendWith(MockitoExtension.class) class DefaultHgEnvironmentBuilderTest { diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryFactoryTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryFactoryTest.java index 3402c57ee9..2d8de0c522 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryFactoryTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryFactoryTest.java @@ -25,6 +25,7 @@ package sonia.scm.repository; import com.google.common.collect.ImmutableMap; +import jakarta.annotation.Nonnull; import org.javahg.Repository; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -35,7 +36,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.repository.hooks.HookEnvironment; -import javax.annotation.Nonnull; import java.nio.charset.StandardCharsets; import java.nio.file.Path; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java index 85ff937b22..5f3f8b8821 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java @@ -27,6 +27,7 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.annotation.Nonnull; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,7 +38,6 @@ import sonia.scm.plugin.PluginLoader; import sonia.scm.repository.spi.HgVersionCommand; import sonia.scm.store.ConfigurationStoreFactory; -import javax.annotation.Nonnull; import java.io.File; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgVerifierTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgVerifierTest.java index 6a1e624907..d88420aca2 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgVerifierTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgVerifierTest.java @@ -25,6 +25,7 @@ package sonia.scm.repository; import com.google.common.base.Splitter; +import jakarta.annotation.Nonnull; import org.assertj.core.util.Strings; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Nested; @@ -36,7 +37,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import sonia.scm.util.SystemUtil; -import javax.annotation.Nonnull; import java.io.File; import java.io.IOException; import java.nio.file.Files; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java index eed006b6ce..9090076e56 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java @@ -24,6 +24,7 @@ package sonia.scm.repository.hooks; +import jakarta.annotation.Nonnull; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.subject.Subject; @@ -44,7 +45,6 @@ import sonia.scm.repository.spi.HgHookContextProvider; import sonia.scm.repository.spi.HookEventFacade; import sonia.scm.security.CipherUtil; -import javax.annotation.Nonnull; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -57,7 +57,10 @@ import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class DefaultHookHandlerTest { diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchCommandTest.java index e191d46d94..687e61cd4d 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchCommandTest.java @@ -24,8 +24,8 @@ package sonia.scm.repository.spi; -import org.javahg.commands.PullCommand; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import org.javahg.commands.PullCommand; import org.junit.Before; import org.junit.Test; import sonia.scm.repository.Branch; @@ -46,7 +46,7 @@ public class HgBranchCommandTest extends AbstractHgCommandTestBase { @Before public void initWorkingCopyFactory() { - workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry()) { + workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(null, repositoryLocationResolver)), new SimpleMeterRegistry()) { @Override public void configure(PullCommand pullCommand) { // we do not want to configure http hooks in this unit test diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java index a87a95bd23..b0b5c19bf4 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java @@ -58,7 +58,7 @@ public class HgModifyCommandTest extends AbstractHgCommandTestBase { @Before public void initHgModifyCommand() { - SimpleHgWorkingCopyFactory workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry()) { + SimpleHgWorkingCopyFactory workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(null, repositoryLocationResolver)), new SimpleMeterRegistry()) { @Override public void configure(org.javahg.commands.PullCommand pullCommand) { // we do not want to configure http hooks in this unit test diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgTagCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgTagCommandTest.java index 9cf6f8135f..336e7eca59 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgTagCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgTagCommandTest.java @@ -24,8 +24,8 @@ package sonia.scm.repository.spi; -import org.javahg.commands.PullCommand; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import org.javahg.commands.PullCommand; import org.junit.Before; import org.junit.Test; import sonia.scm.repository.Tag; @@ -45,7 +45,7 @@ public class HgTagCommandTest extends AbstractHgCommandTestBase { @Before public void initWorkingCopyFactory() { - workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(repositoryLocationResolver)), new SimpleMeterRegistry()) { + workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(null, repositoryLocationResolver)), new SimpleMeterRegistry()) { @Override public void configure(PullCommand pullCommand) { // we do not want to configure http hooks in this unit test diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java index 70d971f910..16cb31b43f 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java @@ -24,14 +24,14 @@ package sonia.scm.repository.spi; +import io.micrometer.core.instrument.MeterRegistry; +import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import org.javahg.BaseRepository; import org.javahg.Repository; import org.javahg.commands.BranchCommand; import org.javahg.commands.RemoveCommand; import org.javahg.commands.StatusCommand; import org.javahg.commands.results.StatusResult; -import io.micrometer.core.instrument.MeterRegistry; -import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -63,7 +63,7 @@ public class SimpleHgWorkingCopyFactoryTest extends AbstractHgCommandTestBase { @Before public void bindScmProtocol() throws IOException { workdirProvider = new WorkdirProvider(temporaryFolder.newFolder(), repositoryLocationResolver, false); - workingCopyFactory = new SimpleHgWorkingCopyFactory(new SimpleCachingWorkingCopyPool(workdirProvider, meterRegistry), new SimpleMeterRegistry()) { + workingCopyFactory = new SimpleHgWorkingCopyFactory(new SimpleCachingWorkingCopyPool(5, workdirProvider, meterRegistry), new SimpleMeterRegistry()) { @Override public void configure(org.javahg.commands.PullCommand pullCommand) { // we do not want to configure http hooks in this unit test diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgPermissionFilterTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgPermissionFilterTest.java index f331175c54..cda2b2ebb4 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgPermissionFilterTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgPermissionFilterTest.java @@ -24,6 +24,7 @@ package sonia.scm.web; +import jakarta.servlet.http.HttpServletRequest; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -33,8 +34,6 @@ import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.repository.HgGlobalConfig; import sonia.scm.repository.HgRepositoryHandler; -import javax.servlet.http.HttpServletRequest; - import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertSame; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgServletInputStreamTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgServletInputStreamTest.java index 1f06ede4c1..7640dfdf86 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgServletInputStreamTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgServletInputStreamTest.java @@ -26,10 +26,10 @@ package sonia.scm.web; import com.google.common.base.Charsets; import com.google.common.io.ByteStreams; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; import org.junit.Test; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java index eeefbdcaf6..20e5c52e84 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/WireProtocolTest.java @@ -25,19 +25,18 @@ package sonia.scm.web; import com.google.common.collect.Lists; +import jakarta.servlet.http.HttpServletRequest; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Collections; import java.util.List; import static org.hamcrest.Matchers.contains; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; diff --git a/scm-plugins/scm-integration-test-plugin/build.gradle b/scm-plugins/scm-integration-test-plugin/build.gradle index 441171cca1..162d4cccdc 100644 --- a/scm-plugins/scm-integration-test-plugin/build.gradle +++ b/scm-plugins/scm-integration-test-plugin/build.gradle @@ -23,7 +23,7 @@ */ plugins { - id 'org.scm-manager.smp' version '0.13.0' + id 'org.scm-manager.smp' version '0.16.1' } dependencies { diff --git a/scm-plugins/scm-integration-test-plugin/src/main/java/sonia/scm/it/resource/IntegrationTestResource.java b/scm-plugins/scm-integration-test-plugin/src/main/java/sonia/scm/it/resource/IntegrationTestResource.java index f6b606e001..6d0b83e6d6 100644 --- a/scm-plugins/scm-integration-test-plugin/src/main/java/sonia/scm/it/resource/IntegrationTestResource.java +++ b/scm-plugins/scm-integration-test-plugin/src/main/java/sonia/scm/it/resource/IntegrationTestResource.java @@ -27,18 +27,17 @@ package sonia.scm.it.resource; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; import lombok.Getter; import lombok.Setter; import sonia.scm.api.v2.resources.LinkBuilder; import sonia.scm.api.v2.resources.ScmPathInfoStore; -import javax.inject.Inject; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - import static de.otto.edison.hal.Embedded.embeddedBuilder; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-plugins/scm-legacy-plugin/build.gradle b/scm-plugins/scm-legacy-plugin/build.gradle index b4f4951bed..9911adea7b 100644 --- a/scm-plugins/scm-legacy-plugin/build.gradle +++ b/scm-plugins/scm-legacy-plugin/build.gradle @@ -23,7 +23,7 @@ */ plugins { - id 'org.scm-manager.smp' version '0.13.0' + id 'org.scm-manager.smp' version '0.16.1' } dependencies { diff --git a/scm-plugins/scm-legacy-plugin/package.json b/scm-plugins/scm-legacy-plugin/package.json index d6826044ca..ddf29173fe 100644 --- a/scm-plugins/scm-legacy-plugin/package.json +++ b/scm-plugins/scm-legacy-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-legacy-plugin", "private": true, - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.tsx", "scripts": { @@ -10,7 +10,7 @@ "typecheck": "tsc" }, "dependencies": { - "@scm-manager/ui-plugins": "2.48.2-SNAPSHOT" + "@scm-manager/ui-plugins": "3.0.0-SNAPSHOT" }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", @@ -32,4 +32,4 @@ "eslintConfig": { "extends": "@scm-manager/eslint-config" } -} \ No newline at end of file +} diff --git a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyIndexHalEnricher.java b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyIndexHalEnricher.java index c0ebca3d00..d84c070440 100644 --- a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyIndexHalEnricher.java +++ b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyIndexHalEnricher.java @@ -25,6 +25,7 @@ package sonia.scm.legacy; import com.google.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.api.v2.resources.Enrich; import sonia.scm.api.v2.resources.HalAppender; import sonia.scm.api.v2.resources.HalEnricher; @@ -34,8 +35,6 @@ import sonia.scm.api.v2.resources.LinkBuilder; import sonia.scm.api.v2.resources.ScmPathInfoStore; import sonia.scm.plugin.Extension; -import javax.inject.Provider; - @Extension @Enrich(Index.class) public class LegacyIndexHalEnricher implements HalEnricher { diff --git a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyProtocolServletAuthenticationFilter.java b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyProtocolServletAuthenticationFilter.java index 079558b110..b10cf985d5 100644 --- a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyProtocolServletAuthenticationFilter.java +++ b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyProtocolServletAuthenticationFilter.java @@ -24,6 +24,7 @@ package sonia.scm.legacy; +import jakarta.inject.Inject; import sonia.scm.Priority; import sonia.scm.config.ScmConfiguration; import sonia.scm.filter.Filters; @@ -32,7 +33,6 @@ import sonia.scm.web.UserAgentParser; import sonia.scm.web.WebTokenGenerator; import sonia.scm.web.filter.HttpProtocolServletAuthenticationFilterBase; -import javax.inject.Inject; import java.util.Set; @Priority(Filters.PRIORITY_AUTHENTICATION) diff --git a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRealm.java b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRealm.java index 60fab3b9a6..4787f68a65 100644 --- a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRealm.java +++ b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRealm.java @@ -27,12 +27,13 @@ package sonia.scm.legacy; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.CharMatcher; import com.google.common.base.Preconditions; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authc.credential.HashedCredentialsMatcher; -import org.apache.shiro.crypto.hash.Sha1Hash; import org.apache.shiro.realm.AuthenticatingRealm; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,9 +41,6 @@ import sonia.scm.plugin.Extension; import sonia.scm.security.DAORealmHelper; import sonia.scm.security.DAORealmHelperFactory; -import javax.inject.Inject; -import javax.inject.Singleton; - /** * Support for SCM-Manager 1.x password hashes. * @@ -81,7 +79,7 @@ public class LegacyRealm extends AuthenticatingRealm { HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(); - matcher.setHashAlgorithmName(Sha1Hash.ALGORITHM_NAME); + matcher.setHashAlgorithmName("SHA-1"); matcher.setHashIterations(1); matcher.setStoredCredentialsHexEncoded(true); setCredentialsMatcher(helper.wrapCredentialsMatcher(matcher)); diff --git a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRepositoryService.java b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRepositoryService.java index e754543c8b..0bc4820259 100644 --- a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRepositoryService.java +++ b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/LegacyRepositoryService.java @@ -26,16 +26,15 @@ package sonia.scm.legacy; import com.google.inject.Inject; import io.swagger.v3.oas.annotations.Operation; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import sonia.scm.NotFoundException; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; - @Path("v2/legacy/repository") public class LegacyRepositoryService { diff --git a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilter.java b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilter.java index 3478f4773a..3e77b87df0 100644 --- a/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilter.java +++ b/scm-plugins/scm-legacy-plugin/src/main/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilter.java @@ -24,6 +24,12 @@ package sonia.scm.legacy; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.Priority; import sonia.scm.filter.Filters; import sonia.scm.migration.MigrationDAO; @@ -31,12 +37,6 @@ import sonia.scm.migration.MigrationInfo; import sonia.scm.repository.RepositoryDAO; import sonia.scm.web.filter.HttpFilter; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Collection; import java.util.HashMap; diff --git a/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilterTest.java b/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilterTest.java index d9dfd4fab7..0197a4fd47 100644 --- a/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilterTest.java +++ b/scm-plugins/scm-legacy-plugin/src/test/java/sonia/scm/legacy/RepositoryLegacyProtocolRedirectFilterTest.java @@ -24,6 +24,10 @@ package sonia.scm.legacy; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -34,10 +38,6 @@ import sonia.scm.migration.MigrationInfo; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryDAO; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import static java.util.Collections.singletonList; diff --git a/scm-plugins/scm-svn-plugin/build.gradle b/scm-plugins/scm-svn-plugin/build.gradle index ebd8303666..ead255959c 100644 --- a/scm-plugins/scm-svn-plugin/build.gradle +++ b/scm-plugins/scm-svn-plugin/build.gradle @@ -23,10 +23,10 @@ */ plugins { - id 'org.scm-manager.smp' version '0.13.0' + id 'org.scm-manager.smp' version '0.16.1' } -def svnkitVersion = '1.10.10-scm2' +def svnkitVersion = '1.10.10-scm2-jakarta' dependencies { implementation("sonia.svnkit:svnkit:${svnkitVersion}") { diff --git a/scm-plugins/scm-svn-plugin/package.json b/scm-plugins/scm-svn-plugin/package.json index 4a8fe44ad5..f79a726591 100644 --- a/scm-plugins/scm-svn-plugin/package.json +++ b/scm-plugins/scm-svn-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-svn-plugin", "private": true, - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -10,7 +10,7 @@ "typecheck": "tsc" }, "dependencies": { - "@scm-manager/ui-plugins": "2.48.2-SNAPSHOT" + "@scm-manager/ui-plugins": "3.0.0-SNAPSHOT" }, "devDependencies": { "@scm-manager/babel-preset": "^2.13.1", diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigInIndexResource.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigInIndexResource.java index eb616fdde4..fe2d8c6cc5 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigInIndexResource.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigInIndexResource.java @@ -26,15 +26,14 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.plugin.Extension; import sonia.scm.repository.SvnConfig; import sonia.scm.web.JsonEnricherBase; import sonia.scm.web.JsonEnricherContext; -import javax.inject.Inject; -import javax.inject.Provider; - import static java.util.Collections.singletonMap; import static sonia.scm.web.VndMediaType.INDEX; diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java index 394000c48a..1268534d89 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java @@ -32,20 +32,19 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.repository.SvnConfig; import sonia.scm.repository.SvnRepositoryHandler; import sonia.scm.web.SvnVndMediaType; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - /** * RESTful Web Service Resource to manage the configuration of the svn plugin. */ diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigToSvnConfigDtoMapper.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigToSvnConfigDtoMapper.java index db9322665a..39fd1b58e7 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigToSvnConfigDtoMapper.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigToSvnConfigDtoMapper.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.AfterMapping; import org.mapstruct.Mapper; import org.mapstruct.MappingTarget; @@ -32,8 +33,6 @@ import sonia.scm.config.ConfigurationPermissions; import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.SvnConfig; -import javax.inject.Inject; - import static de.otto.edison.hal.Link.link; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfig.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfig.java index d05f5b2016..097a30e3a8 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfig.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfig.java @@ -24,14 +24,13 @@ package sonia.scm.repository; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlTransient; import sonia.scm.auditlog.AuditEntry; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlTransient; - /** * * @author Sebastian Sdorra diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java index a90322761c..e602222908 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnUtil.java @@ -29,6 +29,8 @@ package sonia.scm.repository; import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.common.io.Closeables; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tmatesoft.svn.core.SVNErrorCode; @@ -43,8 +45,6 @@ import org.tmatesoft.svn.core.wc.SVNClientManager; import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Collection; diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV2UpdateStep.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV2UpdateStep.java index 6090bb5f11..1b472c02cc 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV2UpdateStep.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV2UpdateStep.java @@ -24,13 +24,13 @@ package sonia.scm.repository; +import jakarta.inject.Inject; import sonia.scm.migration.UpdateException; import sonia.scm.migration.UpdateStep; import sonia.scm.plugin.Extension; import sonia.scm.update.UpdateStepRepositoryMetadataAccess; import sonia.scm.version.Version; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Path; diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java index 499f6f118d..b113c96788 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java @@ -25,11 +25,11 @@ package sonia.scm.repository.spi; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.inject.Inject; import sonia.scm.repository.SvnWorkingCopyFactory; import sonia.scm.repository.work.SimpleWorkingCopyFactory; import sonia.scm.repository.work.WorkingCopyPool; -import javax.inject.Inject; import java.io.File; public class SimpleSvnWorkingCopyFactory extends SimpleWorkingCopyFactory implements SvnWorkingCopyFactory { diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnMirrorAuthenticationFactory.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnMirrorAuthenticationFactory.java index a4d2b4943a..6602e53484 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnMirrorAuthenticationFactory.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnMirrorAuthenticationFactory.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.google.common.base.Strings; +import jakarta.annotation.Nonnull; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.auth.BasicAuthenticationManager; import org.tmatesoft.svn.core.auth.SVNAuthentication; @@ -35,7 +36,6 @@ import sonia.scm.net.ProxyConfiguration; import sonia.scm.repository.api.Pkcs12ClientCertificateCredential; import sonia.scm.repository.api.UsernamePasswordCredential; -import javax.annotation.Nonnull; import javax.net.ssl.TrustManager; import java.util.ArrayList; import java.util.Collection; diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java index 892346c3ce..f691164a12 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServlet.java @@ -26,6 +26,10 @@ package sonia.scm.web; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.tmatesoft.svn.core.internal.server.dav.DAVConfig; @@ -38,10 +42,6 @@ import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.util.AssertUtil; import sonia.scm.util.HttpUtil; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletRequestWrapper; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServletProvider.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServletProvider.java index c257ef8c67..fe0071d5ce 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServletProvider.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnDAVServletProvider.java @@ -25,12 +25,11 @@ package sonia.scm.web; import com.google.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.repository.SvnRepositoryHandler; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.repository.spi.ScmProviderHttpServletProvider; -import javax.inject.Provider; - public class SvnDAVServletProvider extends ScmProviderHttpServletProvider { @Inject diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnGZipFilter.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnGZipFilter.java index a63766ba8b..1eb8e72267 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnGZipFilter.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnGZipFilter.java @@ -24,6 +24,10 @@ package sonia.scm.web; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.filter.GZipFilterConfig; @@ -33,10 +37,6 @@ import sonia.scm.repository.SvnRepositoryHandler; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.util.WebUtil; -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; class SvnGZipFilter implements ScmProviderHttpServlet { diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilter.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilter.java index b6b673a731..aa972b9f29 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilter.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilter.java @@ -25,6 +25,8 @@ package sonia.scm.web; import com.google.common.collect.ImmutableSet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.ClientMessages; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.ScmSvnErrorCode; @@ -32,8 +34,6 @@ import sonia.scm.repository.SvnUtil; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.web.filter.PermissionFilter; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Set; diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilterFactory.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilterFactory.java index bf148c0fbf..fa32369d4a 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilterFactory.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnPermissionFilterFactory.java @@ -24,14 +24,13 @@ package sonia.scm.web; +import jakarta.inject.Inject; import sonia.scm.config.ScmConfiguration; import sonia.scm.plugin.Extension; import sonia.scm.repository.SvnRepositoryHandler; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.repository.spi.ScmProviderHttpServletDecoratorFactory; -import javax.inject.Inject; - @Extension public class SvnPermissionFilterFactory implements ScmProviderHttpServletDecoratorFactory { diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java index fbe71d4bb2..49be759901 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnScmProtocolProviderWrapper.java @@ -24,17 +24,17 @@ package sonia.scm.web; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; import sonia.scm.RootURL; import sonia.scm.plugin.Extension; import sonia.scm.repository.SvnRepositoryHandler; import sonia.scm.repository.spi.InitializingHttpScmProtocolWrapper; import sonia.scm.repository.spi.ScmProviderHttpServlet; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; import java.util.Enumeration; @Singleton diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/api/v2/resources/SvnConfigInIndexResourceTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/api/v2/resources/SvnConfigInIndexResourceTest.java index e0dd61fd5c..d3de955d3b 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/api/v2/resources/SvnConfigInIndexResourceTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/api/v2/resources/SvnConfigInIndexResourceTest.java @@ -29,12 +29,12 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; import com.google.inject.util.Providers; +import jakarta.ws.rs.core.MediaType; import org.junit.Rule; import org.junit.Test; import sonia.scm.web.JsonEnricherContext; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.MediaType; import java.net.URI; import static org.junit.Assert.assertEquals; diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/api/v2/resources/SvnConfigResourceTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/api/v2/resources/SvnConfigResourceTest.java index 5118d8e2ab..48daaa9d6e 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/api/v2/resources/SvnConfigResourceTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/api/v2/resources/SvnConfigResourceTest.java @@ -28,6 +28,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; +import jakarta.servlet.http.HttpServletResponse; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.junit.Before; @@ -44,7 +45,6 @@ import sonia.scm.repository.SvnRepositoryHandler; import sonia.scm.web.RestDispatcher; import sonia.scm.web.SvnVndMediaType; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactoryTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactoryTest.java index 2a44af2fcd..f885282714 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactoryTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactoryTest.java @@ -30,9 +30,8 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; -import org.tmatesoft.svn.core.SVNException; -import sonia.scm.repository.work.SimpleCachingWorkingCopyPool; import sonia.scm.repository.work.NoneCachingWorkingCopyPool; +import sonia.scm.repository.work.SimpleCachingWorkingCopyPool; import sonia.scm.repository.work.WorkdirProvider; import sonia.scm.repository.work.WorkingCopy; @@ -99,7 +98,7 @@ public class SimpleSvnWorkingCopyFactoryTest extends AbstractSvnCommandTestBase @Test public void shouldDeleteUntrackedFileOnReclaim() throws IOException { - SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new SimpleCachingWorkingCopyPool(workdirProvider, meterRegistry), new SimpleMeterRegistry()); + SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new SimpleCachingWorkingCopyPool(5, workdirProvider, meterRegistry), new SimpleMeterRegistry()); WorkingCopy workingCopy = factory.createWorkingCopy(createContext(), null); File directory = workingCopy.getWorkingRepository(); @@ -117,7 +116,7 @@ public class SimpleSvnWorkingCopyFactoryTest extends AbstractSvnCommandTestBase @Test public void shouldRestoreDeletedFileOnReclaim() { - SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new SimpleCachingWorkingCopyPool(workdirProvider, meterRegistry), new SimpleMeterRegistry()); + SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new SimpleCachingWorkingCopyPool(5, workdirProvider, meterRegistry), new SimpleMeterRegistry()); WorkingCopy workingCopy = factory.createWorkingCopy(createContext(), null); File directory = workingCopy.getWorkingRepository(); diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnDiffCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnDiffCommandTest.java index e7a46b18be..aa976dd091 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnDiffCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnDiffCommandTest.java @@ -25,6 +25,7 @@ package sonia.scm.repository.spi; import com.google.common.collect.ImmutableMap; +import jakarta.annotation.Nonnull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -38,7 +39,6 @@ import org.tmatesoft.svn.core.wc.SVNRevision; import sonia.scm.repository.RepositoryTestData; import sonia.scm.repository.api.DiffFormat; -import javax.annotation.Nonnull; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; diff --git a/scm-server/build.gradle b/scm-server/build.gradle index 1bec43b8e1..26135e0dcf 100644 --- a/scm-server/build.gradle +++ b/scm-server/build.gradle @@ -33,8 +33,9 @@ dependencies { implementation libraries.commonsDaemon implementation libraries.jettyServer implementation libraries.jettyWebapp - // TODO do we need jetty jmx? - implementation libraries.jettyJmx + + // Server Config + implementation libraries.snakeYml // tests testImplementation libraries.junitJupiterApi diff --git a/scm-server/src/main/java/sonia/scm/server/HealthCheck.java b/scm-server/src/main/java/sonia/scm/server/HealthCheck.java index 43b3734b49..2be5c8d901 100644 --- a/scm-server/src/main/java/sonia/scm/server/HealthCheck.java +++ b/scm-server/src/main/java/sonia/scm/server/HealthCheck.java @@ -24,11 +24,12 @@ package sonia.scm.server; +import jakarta.servlet.http.HttpServletResponse; + import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; import javax.net.ssl.X509TrustManager; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; diff --git a/scm-server/src/main/java/sonia/scm/server/ScmServer.java b/scm-server/src/main/java/sonia/scm/server/ScmServer.java index 054175da20..dafbca9a7c 100644 --- a/scm-server/src/main/java/sonia/scm/server/ScmServer.java +++ b/scm-server/src/main/java/sonia/scm/server/ScmServer.java @@ -21,56 +21,34 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - -package sonia.scm.server; -//~--- non-JDK imports -------------------------------------------------------- +package sonia.scm.server; import org.eclipse.jetty.server.Server; -/** - * - * @author Sebastian Sdorra - */ -public class ScmServer extends Thread -{ - /** Field description */ +public class ScmServer extends Thread { static final int GRACEFUL_TIMEOUT = 2000; + private boolean initialized = false; + private final Server server; - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - */ - public ScmServer() - { - ServerConfiguration config = new ServerConfiguration(); + public ScmServer() { server = new org.eclipse.jetty.server.Server(); - config.configure(server); + ServerConfiguration config = new ServerConfiguration(); + config.configureServer(server); } - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - */ @Override - public void run() - { - try - { - if (!initialized) - { + public void run() { + try { + if (!initialized) { init(); } server.join(); - } - catch (InterruptedException ex) - { - throw new ScmServerException("could not start scm-server", ex); + } catch (InterruptedException ex) { + System.err.println("server interrupted"); + ex.printStackTrace(); + Thread.currentThread().interrupt(); } } @@ -79,43 +57,23 @@ public class ScmServer extends Thread * * @see http://goo.gl/Zfy0Ev */ - public void stopServer() - { - try - { + public void stopServer() { + try { server.setStopTimeout(GRACEFUL_TIMEOUT); server.setStopAtShutdown(true); server.stop(); initialized = false; - } - catch (Exception ex) - { + } catch (Exception ex) { ex.printStackTrace(System.err); } } - /** - * Method description - * - */ - void init() - { - try - { + void init() { + try { server.start(); initialized = true; - } - catch (Exception ex) - { + } catch (Exception ex) { throw new ScmServerException("could not initialize server", ex); } } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private boolean initialized = false; - - /** Field description */ - private Server server = new Server(); } diff --git a/scm-server/src/main/java/sonia/scm/server/ServerConfigParser.java b/scm-server/src/main/java/sonia/scm/server/ServerConfigParser.java new file mode 100644 index 0000000000..8eadb7f653 --- /dev/null +++ b/scm-server/src/main/java/sonia/scm/server/ServerConfigParser.java @@ -0,0 +1,66 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.server; + +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.representer.Representer; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +public class ServerConfigParser { + + private static final String CONFIGURATION_FILE = "/config.yml"; + + ServerConfigParser() { + } + + ServerConfigYaml parse() { + return parse(this.getClass().getResource(CONFIGURATION_FILE)); + } + + ServerConfigYaml parse(URL configFile) { + if (configFile == null) { + //TODO add link + throw new ServerConfigurationException(""" + Could not find config.yml. + + If you have upgraded from an older SCM-Manager version, you have to migrate your server-config.xml + to the new format using the official instructions: + + + """); + } + try (InputStream is = configFile.openStream()) { + Representer representer = new Representer(new DumperOptions()); + representer.getPropertyUtils().setSkipMissingProperties(true); + return new Yaml(representer).loadAs(is, ServerConfigYaml.class); + } catch (IOException e) { + throw new ServerConfigurationException("Could not parse config.yml", e); + } + } +} diff --git a/scm-server/src/main/java/sonia/scm/server/ServerConfigYaml.java b/scm-server/src/main/java/sonia/scm/server/ServerConfigYaml.java new file mode 100644 index 0000000000..3ab6f0f491 --- /dev/null +++ b/scm-server/src/main/java/sonia/scm/server/ServerConfigYaml.java @@ -0,0 +1,170 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.server; + +public class ServerConfigYaml { + + private static final String SCM_SERVER_PREFIX = "SCM_"; + + // ### Server + private String addressBinding = "0.0.0.0"; + private int port = 8080; + private String contextPath = "/scm"; + private int httpHeaderSize = 16384; + // The default temp dir path depends on the platform + private String tempDir = "work/scm"; + // Resolves the client ip instead of the reverse proxy ip if the X-Forwarded-For header is present + private boolean forwardHeadersEnabled = false; + + // ### SSL-related config + // Only configure SSL if the key store path is set + private SSLConfig https = new SSLConfig(); + + public static class SSLConfig { + private String keyStorePath = ""; + private String keyStorePassword = ""; + private String keyStoreType = "PKCS12"; + // If the ssl port is set, the http port will automatically redirect to this + private int sslPort = 8443; + + private boolean redirectHttpToHttps = false; + + public String getKeyStorePath() { + return getEnvWithDefault("HTTPS_KEY_STORE_PATH", keyStorePath); + } + + public String getKeyStorePassword() { + return getEnvWithDefault("HTTPS_KEY_STORE_PASSWORD", keyStorePassword); + } + + public String getKeyStoreType() { + return getEnvWithDefault("HTTPS_KEY_STORE_TYPE", keyStoreType); + } + + public int getSslPort() { + return getEnvWithDefault("HTTPS_SSL_PORT", sslPort); + } + + public boolean isRedirectHttpToHttps() { + return getEnvWithDefault("HTTPS_REDIRECT_HTTP_TO_HTTPS", redirectHttpToHttps); + } + + public void setKeyStorePath(String keyStorePath) { + this.keyStorePath = keyStorePath; + } + + public void setKeyStorePassword(String keyStorePassword) { + this.keyStorePassword = keyStorePassword; + } + + + public void setKeyStoreType(String keyStoreType) { + this.keyStoreType = keyStoreType; + } + + public void setSslPort(int sslPort) { + this.sslPort = sslPort; + } + + public void setRedirectHttpToHttps(boolean redirectHttpToHttps) { + this.redirectHttpToHttps = redirectHttpToHttps; + } + } + + public String getAddressBinding() { + return getEnvWithDefault("ADDRESS_BINDING", addressBinding); + } + + public void setAddressBinding(String addressBinding) { + this.addressBinding = addressBinding; + } + + public int getPort() { + return getEnvWithDefault("PORT", port); + } + + public void setPort(int port) { + this.port = port; + } + + public String getContextPath() { + return getEnvWithDefault("CONTEXT_PATH", contextPath); + } + + public void setContextPath(String contextPath) { + this.contextPath = contextPath; + } + + public int getHttpHeaderSize() { + return getEnvWithDefault("HTTP_HEADER_SIZE", httpHeaderSize); + } + + public void setHttpHeaderSize(int httpHeaderSize) { + this.httpHeaderSize = httpHeaderSize; + } + + public SSLConfig getHttps() { + return https; + } + + public void setHttps(SSLConfig https) { + this.https = https; + } + + public String getTempDir() { + return getEnvWithDefault("TEMP_DIR", tempDir); + } + + public void setTempDir(String tempDir) { + this.tempDir = tempDir; + } + + public boolean isForwardHeadersEnabled() { + return getEnvWithDefault("FORWARD_REMOTE_ADDRESS", forwardHeadersEnabled); + } + + public void setForwardHeadersEnabled(boolean forwardHeadersEnabled) { + this.forwardHeadersEnabled = forwardHeadersEnabled; + } + + static int getEnvWithDefault(String envKey, int configValue) { + String value = getEnv(envKey); + return value != null ? Integer.parseInt(value) : configValue; + } + + static String getEnvWithDefault(String envKey, String configValue) { + String value = getEnv(envKey); + return value != null ? value : configValue; + } + + static boolean getEnvWithDefault(String envKey, boolean configValue) { + String value = getEnv(envKey); + return value != null ? Boolean.getBoolean(value) : configValue; + } + + private static String getEnv(String envKey) { + return System.getenv(SCM_SERVER_PREFIX + envKey); + } +} diff --git a/scm-server/src/main/java/sonia/scm/server/ServerConfiguration.java b/scm-server/src/main/java/sonia/scm/server/ServerConfiguration.java index ac426680e1..6e7f2fc78c 100644 --- a/scm-server/src/main/java/sonia/scm/server/ServerConfiguration.java +++ b/scm-server/src/main/java/sonia/scm/server/ServerConfiguration.java @@ -25,54 +25,155 @@ package sonia.scm.server; import org.eclipse.jetty.server.Connector; +import org.eclipse.jetty.server.ForwardedRequestCustomizer; import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.SecureRequestCustomizer; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.server.SslConnectionFactory; import org.eclipse.jetty.server.handler.HandlerCollection; -import org.eclipse.jetty.util.resource.Resource; +import org.eclipse.jetty.util.resource.ResourceCollection; +import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.webapp.WebAppContext; -import org.eclipse.jetty.xml.XmlConfiguration; -import org.xml.sax.SAXException; -import java.io.IOException; import java.net.URL; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; public final class ServerConfiguration { - private static final String CONFIGURATION = "/server-config.xml"; @SuppressWarnings("java:S1075") // not a real uri private static final String DEFAULT_CONTEXT_PATH = "/scm"; - - private final XmlConfiguration jettyConfiguration; + private final ServerConfigYaml configYaml; + private Path testTempDir; public ServerConfiguration() { - this(CONFIGURATION); + this.configYaml = new ServerConfigParser().parse(); } - public ServerConfiguration(String configurationUrl) { - this.jettyConfiguration = read(configurationUrl); + // Visible for testing + public ServerConfiguration(URL configFile, Path tempDir) { + this.configYaml = new ServerConfigParser().parse(configFile); + this.testTempDir = tempDir; } - public ServerConfiguration(Path configurationPath) { - this.jettyConfiguration = parse(Resource.newResource(configurationPath)); - } - - public void configure(Server server) { + public void configureServer(Server server) { try { - jettyConfiguration.configure(server); + configureHttp(server); + configureHandler(server); + if (configYaml.getHttps().getKeyStorePath() != null && !configYaml.getHttps().getKeyStorePath().isEmpty()) { + configureSSL(server); + } } catch (Exception ex) { throw new ScmServerException("error during server configuration", ex); } } + private void configureSSL(Server server) { + SslContextFactory.Server sslServer = new SslContextFactory.Server(); + ServerConfigYaml.SSLConfig https = configYaml.getHttps(); + sslServer.setKeyStorePath(https.getKeyStorePath()); + sslServer.setKeyStorePassword(https.getKeyStorePassword()); + sslServer.setKeyStoreType(https.getKeyStoreType()); + + sslServer.setIncludeProtocols("TLSv1.2", "TLSv1.3"); + sslServer.setIncludeCipherSuites( + "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", + "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", + "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256", + "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384", + "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"); + sslServer.setUseCipherSuitesOrder(false); + HttpConfiguration sslHttpConfig = new HttpConfiguration(createCustomHttpConfig()); + sslHttpConfig.addCustomizer(new SecureRequestCustomizer( + false, + true, + -1, + false + ) + ); + ServerConnector sslConnector = new ServerConnector(server, ( + new SslConnectionFactory(sslServer, "http/1.1")), + new HttpConnectionFactory(sslHttpConfig)); + sslConnector.setHost(configYaml.getAddressBinding()); + sslConnector.setPort(https.getSslPort()); + server.addConnector(sslConnector); + } + + private void configureHttp(Server server) { + HttpConfiguration httpConfig = createCustomHttpConfig(); + redirectHttpToHttps(httpConfig); + ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(httpConfig)); + System.out.println("Set http address binding to " + configYaml.getAddressBinding()); + connector.setHost(configYaml.getAddressBinding()); + System.out.println("Set http port to " + configYaml.getPort()); + connector.setPort(configYaml.getPort()); + server.addConnector(connector); + } + + private void redirectHttpToHttps(HttpConfiguration httpConfig) { + ServerConfigYaml.SSLConfig https = configYaml.getHttps(); + if (configYaml.getHttps().isRedirectHttpToHttps()) { + httpConfig.setSecurePort(https.getSslPort()); + httpConfig.setSecureScheme("https"); + } + } + + private void configureHandler(Server server) { + HandlerCollection handlerCollection = new HandlerCollection(); + handlerCollection.setHandlers(new Handler[]{createWebAppContext(), createDocRoot()}); + server.setHandler(handlerCollection); + } + + private WebAppContext createWebAppContext() { + WebAppContext webApp = new WebAppContext(); + webApp.setContextPath(configYaml.getContextPath()); + // disable directory listings + webApp.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false"); + + String baseDir = resolveBaseDir(); + webApp.setWar(baseDir + "/var/webapp/scm-webapp.war"); + String tempDir = configYaml.getTempDir(); + webApp.setTempDirectory(tempDir.startsWith("/") ? Paths.get(tempDir, "webapp").toFile() : Paths.get(baseDir, tempDir).toFile()); + return webApp; + } + + private WebAppContext createDocRoot() { + WebAppContext docRoot = new WebAppContext(); + docRoot.setContextPath("/"); + String baseDir = resolveBaseDir(); + docRoot.setBaseResource(new ResourceCollection(new String[]{baseDir + "/var/webapp/docroot"})); + String tempDir = configYaml.getTempDir(); + docRoot.setTempDirectory(tempDir.startsWith("/") ? Paths.get(tempDir, "work/docroot").toFile() : Paths.get(baseDir, tempDir).toFile()); + return docRoot; + } + + private HttpConfiguration createCustomHttpConfig() { + HttpConfiguration httpConfig = new HttpConfiguration(); + System.out.println("Set http request header size to " + configYaml.getHttpHeaderSize()); + httpConfig.setRequestHeaderSize(configYaml.getHttpHeaderSize()); + System.out.println("Set http response header size to " + configYaml.getHttpHeaderSize()); + httpConfig.setResponseHeaderSize(configYaml.getHttpHeaderSize()); + httpConfig.setSendServerVersion(false); + System.out.println("Set forward request customizer: " + configYaml.isForwardHeadersEnabled()); + if (configYaml.isForwardHeadersEnabled()) { + httpConfig.addCustomizer(new ForwardedRequestCustomizer()); + } + return httpConfig; + } + public List getListeners() { List listeners = new ArrayList<>(); Server server = new Server(); - configure(server); + configureServer(server); String contextPath = findContextPath(server.getHandlers()); if (contextPath == null) { @@ -94,6 +195,11 @@ public final class ServerConfiguration { return listeners; } + + private String resolveBaseDir() { + return testTempDir != null ? testTempDir.toString() : System.getProperty("baseDir", "."); + } + private String findContextPath(Handler[] handlers) { for (Handler handler : handlers) { if (handler instanceof WebAppContext) { @@ -107,23 +213,4 @@ public final class ServerConfiguration { } return null; } - - private static XmlConfiguration read(String configurationUrl) { - URL configURL = ScmServer.class.getResource(configurationUrl); - - if (configURL == null) { - throw new ScmServerException("could not find server-config.xml"); - } - - return parse(Resource.newResource(configURL)); - } - - private static XmlConfiguration parse(Resource resource) { - try { - return new XmlConfiguration(resource); - } catch (IOException | SAXException ex) { - throw new ScmServerException("could not read server configuration", ex); - } - } - } diff --git a/scm-server/src/main/java/sonia/scm/server/ServerConfigurationException.java b/scm-server/src/main/java/sonia/scm/server/ServerConfigurationException.java new file mode 100644 index 0000000000..a12356f459 --- /dev/null +++ b/scm-server/src/main/java/sonia/scm/server/ServerConfigurationException.java @@ -0,0 +1,36 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.server; + +public class ServerConfigurationException extends RuntimeException { + + public ServerConfigurationException(String message) { + super(message); + } + + public ServerConfigurationException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/scm-server/src/test/java/sonia/scm/server/HealthCheckTest.java b/scm-server/src/test/java/sonia/scm/server/HealthCheckTest.java index e4d810d68a..bd647a8d5f 100644 --- a/scm-server/src/test/java/sonia/scm/server/HealthCheckTest.java +++ b/scm-server/src/test/java/sonia/scm/server/HealthCheckTest.java @@ -24,6 +24,8 @@ package sonia.scm.server; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConnectionFactory; @@ -38,8 +40,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; @@ -144,7 +144,7 @@ class HealthCheckTest { } @Test - void shouldFailOnRedirectWithouLocation() throws Exception { + void shouldFailOnRedirectWithoutLocation() throws Exception { int redirector = startInvalidRedirector("/scm"); HealthCheck check = new HealthCheck( @@ -260,7 +260,7 @@ class HealthCheckTest { private ServerConnector createSslConnector(Server server, Path directory, String password) throws Exception { Path keystorePath = createSelfSignedKeyStore(directory, password); KeyStore keyStore = createKeyStore(keystorePath, password); - SslContextFactory sslContextFactory = createSslContextFactory(keyStore, password); + SslContextFactory.Server sslContextFactory = createSslContextFactory(keyStore, password); ServerConnector sslConnector = new ServerConnector( server, @@ -273,8 +273,8 @@ class HealthCheckTest { return sslConnector; } - private SslContextFactory createSslContextFactory(KeyStore keyStore, String password) { - SslContextFactory sslContextFactory = new SslContextFactory.Server(); + private SslContextFactory.Server createSslContextFactory(KeyStore keyStore, String password) { + SslContextFactory.Server sslContextFactory = new SslContextFactory.Server(); sslContextFactory.setKeyStore(keyStore); sslContextFactory.setKeyStorePassword(password); return sslContextFactory; @@ -298,7 +298,7 @@ class HealthCheckTest { "-storepass", password, "-validity", "360", "-keysize", "1024", - "-dname", "CN=localhost" + "-dname", "CN=127.0.0.1" ) .directory(directory.toFile()) .start() diff --git a/scm-server/src/test/java/sonia/scm/server/ServerConfigurationTest.java b/scm-server/src/test/java/sonia/scm/server/ServerConfigurationTest.java index b630530ba0..8dff23a8b7 100644 --- a/scm-server/src/test/java/sonia/scm/server/ServerConfigurationTest.java +++ b/scm-server/src/test/java/sonia/scm/server/ServerConfigurationTest.java @@ -27,8 +27,7 @@ package sonia.scm.server; import com.google.common.io.Resources; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import org.junitpioneer.jupiter.ClearSystemProperty; -import org.junitpioneer.jupiter.SetSystemProperty; +import org.junitpioneer.jupiter.SetEnvironmentVariable; import java.io.IOException; import java.net.URL; @@ -36,13 +35,18 @@ import java.nio.file.Files; import java.nio.file.Path; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; -@ClearSystemProperty(key = "basedir") class ServerConfigurationTest { @Test - void shouldReturnDefaultListener(@TempDir Path directory) throws IOException { - ServerConfiguration configuration = configure(directory, "default.xml"); + void shouldThrowServerConfigurationExceptionIfConfigYamlNotFound() { + assertThrows(ServerConfigurationException.class, () -> new ServerConfiguration(null, null)); + } + + @Test + void shouldConfigureServerWithYamlFormat(@TempDir Path directory) throws IOException { + ServerConfiguration configuration = configure(directory, "default.yml"); assertThat(configuration.getListeners()) .hasSize(1) @@ -54,9 +58,9 @@ class ServerConfigurationTest { } @Test - @SetSystemProperty(key = "jetty.port", value = "8081") + @SetEnvironmentVariable(key = "SCM_PORT", value = "8081") void shouldReturnCustomContextPathAndPort(@TempDir Path directory) throws IOException { - ServerConfiguration configuration = configure(directory, "ctxPath.xml"); + ServerConfiguration configuration = configure(directory, "ctxPath.yml"); assertThat(configuration.getListeners()) .hasSize(1) @@ -69,7 +73,7 @@ class ServerConfigurationTest { @Test void shouldReturnConfiguredSSListener(@TempDir Path directory) throws IOException { - ServerConfiguration configuration = configure(directory, "ssl.xml"); + ServerConfiguration configuration = configure(directory, "ssl.yml"); assertThat(configuration.getListeners()) .hasSize(2) @@ -87,17 +91,17 @@ class ServerConfigurationTest { } @SuppressWarnings("UnstableApiUsage") - private ServerConfiguration configure(Path directory, String configurationFilename) throws IOException { + private ServerConfiguration configure(Path tempDir, String configurationFilename) throws IOException { + System.setProperty("basedir", tempDir.toString()); + URL resource = Resources.getResource("sonia/scm/server/" + configurationFilename); - Path path = directory.resolve("server-config.xml"); + Path path = tempDir.resolve("config.yml"); Files.write(path, Resources.toByteArray(resource)); - Files.createDirectories(directory.resolve("var/webapp/docroot")); - Files.createFile(directory.resolve("var/webapp/scm-webapp.war")); + Files.createDirectories(tempDir.resolve("var/webapp/docroot")); + Files.createFile(tempDir.resolve("var/webapp/scm-webapp.war")); - System.setProperty("basedir", directory.toString()); - - return new ServerConfiguration(path); + return new ServerConfiguration(path.toUri().toURL(), tempDir); } } diff --git a/scm-server/src/test/resources/sonia/scm/server/ctxPath.xml b/scm-server/src/test/resources/sonia/scm/server/ctxPath.xml index 661c118252..f3f00cf494 100644 --- a/scm-server/src/test/resources/sonia/scm/server/ctxPath.xml +++ b/scm-server/src/test/resources/sonia/scm/server/ctxPath.xml @@ -108,10 +108,10 @@ - + - + diff --git a/scm-server/src/test/resources/sonia/scm/server/ctxPath.yml b/scm-server/src/test/resources/sonia/scm/server/ctxPath.yml new file mode 100644 index 0000000000..3939682ea9 --- /dev/null +++ b/scm-server/src/test/resources/sonia/scm/server/ctxPath.yml @@ -0,0 +1,40 @@ +# +# MIT License +# +# Copyright (c) 2020-present Cloudogu GmbH and Contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +# base server config +## Address to listen 0.0.0.0 means on every interface +addressBinding: 0.0.0.0 +port: 8080 +contextPath: /myscm + +# increase http header size for mercurial +httpHeaderSize: 16384 + +# ssl config - ssl is only evaluated if key store path is set +## path to your cert file +https: + keyStorePath: "" + keyStorePassword: secret # TODO obfuscate? + keyStoreType: PKCS12 + redirectHttpToHttps: true diff --git a/scm-server/src/test/resources/sonia/scm/server/default.xml b/scm-server/src/test/resources/sonia/scm/server/default.xml index d88ff30eab..fa5ce179a4 100644 --- a/scm-server/src/test/resources/sonia/scm/server/default.xml +++ b/scm-server/src/test/resources/sonia/scm/server/default.xml @@ -108,10 +108,10 @@ - + - + diff --git a/scm-server/src/test/resources/sonia/scm/server/default.yml b/scm-server/src/test/resources/sonia/scm/server/default.yml new file mode 100644 index 0000000000..5f0834e6bc --- /dev/null +++ b/scm-server/src/test/resources/sonia/scm/server/default.yml @@ -0,0 +1,40 @@ +# +# MIT License +# +# Copyright (c) 2020-present Cloudogu GmbH and Contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +# base server config +## Address to listen 0.0.0.0 means on every interface +addressBinding: 0.0.0.0 +port: 8080 +contextPath: /scm + +# increase http header size for mercurial +httpHeaderSize: 16384 + +https: + # ssl config - ssl is only evaluated if key store path is set + ## path to your cert file + keyStorePath: "" + keyStorePassword: secret + keyStoreType: PKCS12 + diff --git a/scm-server/src/test/resources/sonia/scm/server/ssl.xml b/scm-server/src/test/resources/sonia/scm/server/ssl.xml index c989c4f656..1548777ce3 100644 --- a/scm-server/src/test/resources/sonia/scm/server/ssl.xml +++ b/scm-server/src/test/resources/sonia/scm/server/ssl.xml @@ -108,10 +108,10 @@ - + - + diff --git a/scm-server/src/test/resources/sonia/scm/server/ssl.yml b/scm-server/src/test/resources/sonia/scm/server/ssl.yml new file mode 100644 index 0000000000..9cc2f4e910 --- /dev/null +++ b/scm-server/src/test/resources/sonia/scm/server/ssl.yml @@ -0,0 +1,41 @@ +# +# MIT License +# +# Copyright (c) 2020-present Cloudogu GmbH and Contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +# base server config +## Address to listen 0.0.0.0 means on every interface +addressBinding: 0.0.0.0 +port: 80 +contextPath: /scm + +# increase http header size for mercurial +httpHeaderSize: 16384 + +https: + # ssl config - ssl is only evaluated if key store path is set + ## path to your cert file + keyStorePath: /scm/certs/certificates.p12 + keyStorePassword: changeit + keyStoreType: PKCS12 + sslPort: 443 + redirectHttpToHttps: false diff --git a/scm-test/src/main/java/sonia/scm/repository/DummyRepositoryHandler.java b/scm-test/src/main/java/sonia/scm/repository/DummyRepositoryHandler.java index d8152b7353..09a0295751 100644 --- a/scm-test/src/main/java/sonia/scm/repository/DummyRepositoryHandler.java +++ b/scm-test/src/main/java/sonia/scm/repository/DummyRepositoryHandler.java @@ -27,10 +27,10 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.collect.Sets; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.AlreadyExistsException; import sonia.scm.store.ConfigurationStoreFactory; -import javax.xml.bind.annotation.XmlRootElement; import java.io.File; import java.util.HashSet; import java.util.Set; diff --git a/scm-test/src/main/java/sonia/scm/store/InMemoryByteConfigurationEntryStore.java b/scm-test/src/main/java/sonia/scm/store/InMemoryByteConfigurationEntryStore.java index 3f748243bf..8fe61cc9c4 100644 --- a/scm-test/src/main/java/sonia/scm/store/InMemoryByteConfigurationEntryStore.java +++ b/scm-test/src/main/java/sonia/scm/store/InMemoryByteConfigurationEntryStore.java @@ -24,10 +24,10 @@ package sonia.scm.store; +import jakarta.xml.bind.JAXB; import sonia.scm.security.KeyGenerator; import sonia.scm.security.UUIDKeyGenerator; -import javax.xml.bind.JAXB; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; diff --git a/scm-test/src/main/java/sonia/scm/store/InMemoryByteConfigurationStore.java b/scm-test/src/main/java/sonia/scm/store/InMemoryByteConfigurationStore.java index a8bdc44b96..2b530fa24f 100644 --- a/scm-test/src/main/java/sonia/scm/store/InMemoryByteConfigurationStore.java +++ b/scm-test/src/main/java/sonia/scm/store/InMemoryByteConfigurationStore.java @@ -24,7 +24,8 @@ package sonia.scm.store; -import javax.xml.bind.JAXB; +import jakarta.xml.bind.JAXB; + import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; diff --git a/scm-test/src/main/java/sonia/scm/store/InMemoryByteDataStore.java b/scm-test/src/main/java/sonia/scm/store/InMemoryByteDataStore.java index 1736b1d0d4..87d19e728a 100644 --- a/scm-test/src/main/java/sonia/scm/store/InMemoryByteDataStore.java +++ b/scm-test/src/main/java/sonia/scm/store/InMemoryByteDataStore.java @@ -24,10 +24,10 @@ package sonia.scm.store; +import jakarta.xml.bind.JAXB; import sonia.scm.security.KeyGenerator; import sonia.scm.security.UUIDKeyGenerator; -import javax.xml.bind.JAXB; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; diff --git a/scm-test/src/main/java/sonia/scm/store/SerializationTestUtil.java b/scm-test/src/main/java/sonia/scm/store/SerializationTestUtil.java index 7f785186ab..7092ca6ddd 100644 --- a/scm-test/src/main/java/sonia/scm/store/SerializationTestUtil.java +++ b/scm-test/src/main/java/sonia/scm/store/SerializationTestUtil.java @@ -26,8 +26,8 @@ package sonia.scm.store; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.xml.bind.JAXB; -import javax.xml.bind.JAXB; import java.io.StringReader; import java.io.StringWriter; diff --git a/scm-test/src/main/java/sonia/scm/store/StoreObject.java b/scm-test/src/main/java/sonia/scm/store/StoreObject.java index 87525f1115..45bb3a4351 100644 --- a/scm-test/src/main/java/sonia/scm/store/StoreObject.java +++ b/scm-test/src/main/java/sonia/scm/store/StoreObject.java @@ -26,9 +26,9 @@ package sonia.scm.store; //~--- JDK imports ------------------------------------------------------------ -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; /** * diff --git a/scm-test/src/main/java/sonia/scm/util/MockUtil.java b/scm-test/src/main/java/sonia/scm/util/MockUtil.java index 32d85f7b37..35271a4e48 100644 --- a/scm-test/src/main/java/sonia/scm/util/MockUtil.java +++ b/scm-test/src/main/java/sonia/scm/util/MockUtil.java @@ -27,32 +27,31 @@ package sonia.scm.util; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authz.Permission; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.SimplePrincipalCollection; import org.apache.shiro.subject.Subject; import org.apache.shiro.subject.Subject.Builder; - import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; - import sonia.scm.SCMContextProvider; +import sonia.scm.security.Role; import sonia.scm.user.User; import sonia.scm.user.UserTestData; -import static org.mockito.Mockito.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; - import java.nio.file.Path; import java.util.Arrays; import java.util.List; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import sonia.scm.security.Role; +import static org.mockito.ArgumentMatchers.anyCollection; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * @@ -87,7 +86,7 @@ public final class MockUtil Subject subject = mock(Subject.class); when(subject.isAuthenticated()).thenReturn(Boolean.TRUE); - when(subject.isPermitted(anyListOf(Permission.class))).then( + when(subject.isPermitted(anyList())).then( new Answer() { @@ -105,7 +104,7 @@ public final class MockUtil }); when(subject.isPermitted(any(Permission.class))).thenReturn(Boolean.TRUE); when(subject.isPermitted(any(String.class))).thenReturn(Boolean.TRUE); - when(subject.isPermittedAll(anyCollectionOf(Permission.class))).thenReturn( + when(subject.isPermittedAll(anyCollection())).thenReturn( Boolean.TRUE); when(subject.isPermittedAll()).thenReturn(Boolean.TRUE); when(subject.hasRole(Role.USER)).thenReturn(Boolean.TRUE); diff --git a/scm-test/src/main/java/sonia/scm/web/BufferedServletInputStream.java b/scm-test/src/main/java/sonia/scm/web/BufferedServletInputStream.java index 8f8909b907..4adefb29cd 100644 --- a/scm-test/src/main/java/sonia/scm/web/BufferedServletInputStream.java +++ b/scm-test/src/main/java/sonia/scm/web/BufferedServletInputStream.java @@ -24,8 +24,9 @@ package sonia.scm.web; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; + import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; diff --git a/scm-test/src/main/java/sonia/scm/web/JsonMockHttpRequest.java b/scm-test/src/main/java/sonia/scm/web/JsonMockHttpRequest.java index b19e17a5d6..0685558b64 100644 --- a/scm-test/src/main/java/sonia/scm/web/JsonMockHttpRequest.java +++ b/scm-test/src/main/java/sonia/scm/web/JsonMockHttpRequest.java @@ -24,14 +24,14 @@ package sonia.scm.web; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.specimpl.ResteasyUriInfo; import org.jboss.resteasy.spi.HttpRequest; import org.jboss.resteasy.spi.ResteasyAsynchronousContext; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; diff --git a/scm-test/src/main/java/sonia/scm/web/JsonMockHttpResponse.java b/scm-test/src/main/java/sonia/scm/web/JsonMockHttpResponse.java index c5aaa13390..eecd8d09ed 100644 --- a/scm-test/src/main/java/sonia/scm/web/JsonMockHttpResponse.java +++ b/scm-test/src/main/java/sonia/scm/web/JsonMockHttpResponse.java @@ -27,12 +27,12 @@ package sonia.scm.web; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.NewCookie; import org.jboss.resteasy.mock.MockHttpResponse; import org.jboss.resteasy.spi.AsyncOutputStream; import org.jboss.resteasy.spi.HttpResponse; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.NewCookie; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; diff --git a/scm-test/src/main/java/sonia/scm/web/MockScmPathInfoStore.java b/scm-test/src/main/java/sonia/scm/web/MockScmPathInfoStore.java index 6309b016cc..2e646dbf93 100644 --- a/scm-test/src/main/java/sonia/scm/web/MockScmPathInfoStore.java +++ b/scm-test/src/main/java/sonia/scm/web/MockScmPathInfoStore.java @@ -24,9 +24,9 @@ package sonia.scm.web; +import jakarta.inject.Provider; import sonia.scm.api.v2.resources.ScmPathInfoStore; -import javax.inject.Provider; import java.net.URI; import static com.google.inject.util.Providers.of; diff --git a/scm-test/src/main/java/sonia/scm/web/RestDispatcher.java b/scm-test/src/main/java/sonia/scm/web/RestDispatcher.java index 7b176ecbe5..fc5cb7826e 100644 --- a/scm-test/src/main/java/sonia/scm/web/RestDispatcher.java +++ b/scm-test/src/main/java/sonia/scm/web/RestDispatcher.java @@ -25,6 +25,13 @@ package sonia.scm.web; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.ext.ContextResolver; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.authz.UnauthorizedException; @@ -40,13 +47,6 @@ import sonia.scm.ConcurrentModificationException; import sonia.scm.NotFoundException; import sonia.scm.ScmConstraintViolationException; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.ext.ContextResolver; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; import java.util.HashMap; import java.util.Map; diff --git a/scm-ui/e2e-tests/package.json b/scm-ui/e2e-tests/package.json index 0933eca24f..0545d6aff2 100644 --- a/scm-ui/e2e-tests/package.json +++ b/scm-ui/e2e-tests/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/e2e-tests", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "description": "End to end Tests for SCM-Manager", "main": "index.js", "author": "Eduard Heimbuch ", diff --git a/scm-ui/ui-api/package.json b/scm-ui/ui-api/package.json index 13de495ea9..0e21fa3836 100644 --- a/scm-ui/ui-api/package.json +++ b/scm-ui/ui-api/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-api", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "description": "React hook api for the SCM-Manager backend", "main": "build/index.js", "module": "build/index.mjs", @@ -29,7 +29,7 @@ "tsup": "^5.12.6" }, "dependencies": { - "@scm-manager/ui-types": "2.48.2-SNAPSHOT", + "@scm-manager/ui-types": "3.0.0-SNAPSHOT", "fetch-mock-jest": "^1.5.1", "gitdiff-parser": "^0.2.2", "query-string": "6.14.1", diff --git a/scm-ui/ui-buttons/package.json b/scm-ui/ui-buttons/package.json index 75b39b240e..864b5407e9 100644 --- a/scm-ui/ui-buttons/package.json +++ b/scm-ui/ui-buttons/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-buttons", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "private": false, "main": "build/index.js", "module": "build/index.mjs", @@ -24,11 +24,11 @@ "react-dom": "^17.0.1", "react-router-dom": "^5.3.1", "classnames": "^2.2.6", - "@scm-manager/ui-components": "2.48.2-SNAPSHOT" + "@scm-manager/ui-components": "3.0.0-SNAPSHOT" }, "devDependencies": { "@scm-manager/prettier-config": "^2.11.1", - "@scm-manager/ui-api": "2.48.2-SNAPSHOT", + "@scm-manager/ui-api": "3.0.0-SNAPSHOT", "@scm-manager/eslint-config": "^2.17.0", "@babel/core": "^7.17.8", "@scm-manager/tsconfig": "^2.12.0", diff --git a/scm-ui/ui-components/package.json b/scm-ui/ui-components/package.json index 43701fb84b..f6f0a2cf4a 100644 --- a/scm-ui/ui-components/package.json +++ b/scm-ui/ui-components/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-components", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "description": "UI Components for SCM-Manager and its plugins", "main": "src/index.ts", "files": [ @@ -24,10 +24,10 @@ "@scm-manager/jest-preset": "^2.13.0", "@scm-manager/prettier-config": "^2.10.1", "@scm-manager/tsconfig": "^2.13.0", - "@scm-manager/ui-shortcuts": "2.48.2-SNAPSHOT", - "@scm-manager/ui-syntaxhighlighting": "2.48.2-SNAPSHOT", - "@scm-manager/ui-tests": "2.48.2-SNAPSHOT", - "@scm-manager/ui-text": "2.48.2-SNAPSHOT", + "@scm-manager/ui-shortcuts": "3.0.0-SNAPSHOT", + "@scm-manager/ui-syntaxhighlighting": "3.0.0-SNAPSHOT", + "@scm-manager/ui-tests": "3.0.0-SNAPSHOT", + "@scm-manager/ui-text": "3.0.0-SNAPSHOT", "@storybook/addon-actions": "^6.4.20", "@storybook/addon-essentials": "^6.4.20", "@storybook/addon-interactions": "^6.4.20", @@ -36,7 +36,7 @@ "@storybook/manager-webpack5": "^6.4.20", "@storybook/react": "^6.4.20", "@types/classnames": "^2.2.9", - "@types/css": "^0.0.34", + "@types/css": "^0.0.31", "@types/enzyme": "^3.10.3", "@types/fetch-mock": "^7.3.1", "@types/jest": "^24.0.19", @@ -65,9 +65,9 @@ }, "dependencies": { "@headlessui/react": "^1.4.3", - "@scm-manager/ui-api": "2.48.2-SNAPSHOT", - "@scm-manager/ui-extensions": "2.48.2-SNAPSHOT", - "@scm-manager/ui-types": "2.48.2-SNAPSHOT", + "@scm-manager/ui-api": "3.0.0-SNAPSHOT", + "@scm-manager/ui-extensions": "3.0.0-SNAPSHOT", + "@scm-manager/ui-types": "3.0.0-SNAPSHOT", "classnames": "^2.2.6", "date-fns": "^2.4.1", "deepmerge": "^4.2.2", diff --git a/scm-ui/ui-components/src/__resources__/Diff.simple.ts b/scm-ui/ui-components/src/__resources__/Diff.simple.ts index 88dc21b0cd..d58622915f 100644 --- a/scm-ui/ui-components/src/__resources__/Diff.simple.ts +++ b/scm-ui/ui-components/src/__resources__/Diff.simple.ts @@ -133,8 +133,8 @@ index 889cc49..d5a4811 100644 import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.security.SessionId; + - import javax.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.SseEventSink; - import java.time.Clock; import java.time.Instant; diff --git a/scm-ui/ui-components/src/__resources__/SearchHit.ts b/scm-ui/ui-components/src/__resources__/SearchHit.ts index 5f2920aeee..5b466cc718 100644 --- a/scm-ui/ui-components/src/__resources__/SearchHit.ts +++ b/scm-ui/ui-components/src/__resources__/SearchHit.ts @@ -78,7 +78,7 @@ export const filenameXmlHit: Hit = { content: { highlighted: false, value: - '\n\n\n 4.0.0\n\n \n scm-clients\n sonia.scm.clients\n 2.0.0-SNAPSHOT\n \n\n scm-cli-client\n 2.0.0-SNAPSHOT\n scm-cli-client\n\n \n\n \n\n \n javax.servlet\n javax.servlet-api\n ${servlet.version}\n \n\n \n javax.transaction\n jta\n 1.1\n provided\n \n\n \n sonia.scm.clients\n scm-client-impl\n 2.0.0-SNAPSHOT\n \n\n \n args4j\n args4j\n 2.0.29\n \n\n \n ch.qos.logback\n logback-classic\n ${logback.version}\n \n\n \n org.freemarker\n freemarker\n 2.3.21\n \n\n \n\n \n \n\n \n com.mycila.maven-license-plugin\n maven-license-plugin\n 1.9.0\n \n
http://download.scm-manager.org/licenses/mvn-license.txt
\n \n src/**\n **/test/**\n \n \n target/**\n .hg/**\n **/*.ftl\n \n true\n
\n
\n\n \n org.apache.maven.plugins\n maven-assembly-plugin\n 2.3\n \n \n \n sonia.scm.cli.App\n \n \n \n jar-with-dependencies\n \n \n \n \n package\n \n single\n \n \n \n \n\n
\n
\n\n
\n', + '\n\n\n 4.0.0\n\n \n scm-clients\n sonia.scm.clients\n 2.0.0-SNAPSHOT\n \n\n scm-cli-client\n 2.0.0-SNAPSHOT\n scm-cli-client\n\n \n\n \n\n \n jakarta.servlet\n jakarta.servlet-api\n ${servlet.version}\n \n\n \n jakarta.transaction\n jta\n 1.1\n provided\n \n\n \n sonia.scm.clients\n scm-client-impl\n 2.0.0-SNAPSHOT\n \n\n \n args4j\n args4j\n 2.0.29\n \n\n \n ch.qos.logback\n logback-classic\n ${logback.version}\n \n\n \n org.freemarker\n freemarker\n 2.3.21\n \n\n \n\n \n \n\n \n com.mycila.maven-license-plugin\n maven-license-plugin\n 1.9.0\n \n
http://download.scm-manager.org/licenses/mvn-license.txt
\n \n src/**\n **/test/**\n \n \n target/**\n .hg/**\n **/*.ftl\n \n true\n
\n
\n\n \n org.apache.maven.plugins\n maven-assembly-plugin\n 2.3\n \n \n \n sonia.scm.cli.App\n \n \n \n jar-with-dependencies\n \n \n \n \n package\n \n single\n \n \n \n \n\n
\n
\n\n
\n', }, }, _links: {}, diff --git a/scm-ui/ui-components/src/__resources__/markdown-changelog.md.ts b/scm-ui/ui-components/src/__resources__/markdown-changelog.md.ts index 79547d59bc..b2b49848ad 100644 --- a/scm-ui/ui-components/src/__resources__/markdown-changelog.md.ts +++ b/scm-ui/ui-components/src/__resources__/markdown-changelog.md.ts @@ -428,7 +428,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Add iconStyle + onClick option and story shot for icon component ([#1100](https://github.com/scm-manager/scm-manager/pull/1100)) - Making WebElements (Servlet or Filter) optional by using the \`@Requires\` annotation ([#1101](https://github.com/scm-manager/scm-manager/pull/1101)) -- Add class to manually validate rest data transfer objects with javax validation annotations ([#1114](https://github.com/scm-manager/scm-manager/pull/1114)) +- Add class to manually validate rest data transfer objects with jakarta validation annotations ([#1114](https://github.com/scm-manager/scm-manager/pull/1114)) - Missing stories for ui-components ([#1140](https://github.com/scm-manager/scm-manager/pull/1140)) ### Changed diff --git a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap index 3127877463..64255ef8bd 100644 --- a/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap +++ b/scm-ui/ui-components/src/__snapshots__/storyshots.test.ts.snap @@ -12641,7 +12641,7 @@ and this project adheres to
  • - Add class to manually validate rest data transfer objects with javax validation annotations ( + Add class to manually validate rest data transfer objects with jakarta validation annotations ( - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; - import javax.ws.rs.sse.OutboundSseEvent; + import jakarta.ws.rs.sse.OutboundSseEvent; - import javax.ws.rs.sse.SseEventSink; + import jakarta.ws.rs.sse.SseEventSink; ", @@ -17,7 +17,7 @@ "test": "jest" }, "dependencies": { - "@scm-manager/ui-types": "2.48.2-SNAPSHOT", + "@scm-manager/ui-types": "3.0.0-SNAPSHOT", "react": "^17.0.1" }, "devDependencies": { diff --git a/scm-ui/ui-forms/package.json b/scm-ui/ui-forms/package.json index 3fe0f40f97..6f12115d6f 100644 --- a/scm-ui/ui-forms/package.json +++ b/scm-ui/ui-forms/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/ui-forms", "private": false, - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "main": "build/index.js", "types": "build/index.d.ts", "module": "build/index.mjs", @@ -16,7 +16,7 @@ "@scm-manager/eslint-config": "^2.16.0", "@scm-manager/prettier-config": "^2.10.1", "@scm-manager/tsconfig": "^2.13.0", - "@scm-manager/ui-styles": "2.48.2-SNAPSHOT", + "@scm-manager/ui-styles": "3.0.0-SNAPSHOT", "@storybook/addon-actions": "^6.5.10", "@storybook/addon-docs": "^6.5.14", "@storybook/addon-essentials": "^6.5.10", @@ -32,7 +32,7 @@ "tsup": "^6.2.3" }, "peerDependencies": { - "@scm-manager/ui-components": "2.48.2-SNAPSHOT", + "@scm-manager/ui-components": "3.0.0-SNAPSHOT", "classnames": "^2.3.1", "react": "17", "react-hook-form": "7", @@ -45,9 +45,9 @@ "@radix-ui/react-radio-group": "^1.1.3", "@radix-ui/react-slot": "^1.0.1", "@radix-ui/react-visually-hidden": "^1.0.3", - "@scm-manager/ui-api": "2.48.2-SNAPSHOT", - "@scm-manager/ui-buttons": "2.48.2-SNAPSHOT", - "@scm-manager/ui-overlays": "2.48.2-SNAPSHOT" + "@scm-manager/ui-api": "3.0.0-SNAPSHOT", + "@scm-manager/ui-buttons": "3.0.0-SNAPSHOT", + "@scm-manager/ui-overlays": "3.0.0-SNAPSHOT" }, "prettier": "@scm-manager/prettier-config", "eslintConfig": { diff --git a/scm-ui/ui-forms/src/combobox/Combobox.tsx b/scm-ui/ui-forms/src/combobox/Combobox.tsx index 4ec61919e6..688884c4d5 100644 --- a/scm-ui/ui-forms/src/combobox/Combobox.tsx +++ b/scm-ui/ui-forms/src/combobox/Combobox.tsx @@ -162,7 +162,7 @@ function ComboboxComponent(props: ComboboxProps, ref: ForwardedRef { - props.onKeyDown && props.onKeyDown(e) + props.onKeyDown && props.onKeyDown(e); }} {...createAttributesForTesting(props.testId)} /> diff --git a/scm-ui/ui-layout/package.json b/scm-ui/ui-layout/package.json index 9634e56f60..657a9ebc76 100644 --- a/scm-ui/ui-layout/package.json +++ b/scm-ui/ui-layout/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/ui-layout", "private": false, - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "main": "build/index.js", "types": "build/index.d.ts", "module": "build/index.mjs", @@ -16,9 +16,9 @@ "@scm-manager/eslint-config": "^2.16.0", "@scm-manager/prettier-config": "^2.10.1", "@scm-manager/tsconfig": "^2.13.0", - "@scm-manager/ui-styles": "2.48.2-SNAPSHOT", - "@scm-manager/ui-overlays": "2.48.2-SNAPSHOT", - "@scm-manager/ui-forms": "2.48.2-SNAPSHOT", + "@scm-manager/ui-styles": "3.0.0-SNAPSHOT", + "@scm-manager/ui-overlays": "3.0.0-SNAPSHOT", + "@scm-manager/ui-forms": "3.0.0-SNAPSHOT", "@storybook/addon-actions": "^6.5.10", "@storybook/addon-docs": "^6.5.14", "@storybook/addon-essentials": "^6.5.10", @@ -39,7 +39,7 @@ "react-dom": "17", "react-router-dom": "5", "styled-components": "5", - "@scm-manager/ui-components": "2.48.2-SNAPSHOT" + "@scm-manager/ui-components": "3.0.0-SNAPSHOT" }, "prettier": "@scm-manager/prettier-config", "eslintConfig": { @@ -52,6 +52,6 @@ "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-slot": "^1.0.1", "@radix-ui/react-tabs": "^1.0.4", - "@scm-manager/ui-buttons": "2.48.2-SNAPSHOT" + "@scm-manager/ui-buttons": "3.0.0-SNAPSHOT" } -} \ No newline at end of file +} diff --git a/scm-ui/ui-legacy/package.json b/scm-ui/ui-legacy/package.json index 141da0d05f..37df08f402 100644 --- a/scm-ui/ui-legacy/package.json +++ b/scm-ui/ui-legacy/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-legacy", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "private": true, "main": "build/index.js", "module": "build/index.mjs", @@ -12,9 +12,9 @@ "test": "jest --passWithNoTests" }, "dependencies": { - "@scm-manager/ui-api": "2.48.2-SNAPSHOT", - "@scm-manager/ui-extensions": "2.48.2-SNAPSHOT", - "@scm-manager/ui-types": "2.48.2-SNAPSHOT", + "@scm-manager/ui-api": "3.0.0-SNAPSHOT", + "@scm-manager/ui-extensions": "3.0.0-SNAPSHOT", + "@scm-manager/ui-types": "3.0.0-SNAPSHOT", "react": "^17.0.1", "react-redux": "^5.0.7", "redux": "^4.0.0" diff --git a/scm-ui/ui-overlays/package.json b/scm-ui/ui-overlays/package.json index 945f06e3a0..2097168799 100644 --- a/scm-ui/ui-overlays/package.json +++ b/scm-ui/ui-overlays/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/ui-overlays", "private": false, - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "main": "build/index.js", "types": "build/index.d.ts", "module": "build/index.mjs", @@ -16,7 +16,7 @@ "@scm-manager/eslint-config": "^2.16.0", "@scm-manager/prettier-config": "^2.10.1", "@scm-manager/tsconfig": "^2.13.0", - "@scm-manager/ui-styles": "2.48.2-SNAPSHOT", + "@scm-manager/ui-styles": "3.0.0-SNAPSHOT", "@storybook/addon-actions": "^6.5.10", "@storybook/addon-docs": "^6.5.14", "@storybook/addon-essentials": "^6.5.10", @@ -44,7 +44,7 @@ "@radix-ui/react-dropdown-menu": "2.0.5", "@radix-ui/react-popover": "1.0.6", "@radix-ui/react-tooltip": "1.0.2", - "@scm-manager/ui-buttons": "2.48.2-SNAPSHOT" + "@scm-manager/ui-buttons": "3.0.0-SNAPSHOT" }, "prettier": "@scm-manager/prettier-config", "eslintConfig": { diff --git a/scm-ui/ui-plugins/package.json b/scm-ui/ui-plugins/package.json index a3118adab1..dbd2ddfd92 100644 --- a/scm-ui/ui-plugins/package.json +++ b/scm-ui/ui-plugins/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/ui-plugins", "description": "Defines the versions of SCM-Manager plugin dependencies provided by the core webapp. Exclusively used by the postinstall command of @scm-manager/plugin-scripts.", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "license": "MIT", "dependencies": { "react": "17", @@ -10,13 +10,13 @@ "react-router-dom": "^5.3.1", "react-i18next": "11", "styled-components": "^5.3.5", - "@scm-manager/ui-api": "2.48.2-SNAPSHOT", - "@scm-manager/ui-extensions": "2.48.2-SNAPSHOT", - "@scm-manager/ui-components": "2.48.2-SNAPSHOT", - "@scm-manager/ui-forms": "2.48.2-SNAPSHOT", - "@scm-manager/ui-buttons": "2.48.2-SNAPSHOT", - "@scm-manager/ui-overlays": "2.48.2-SNAPSHOT", - "@scm-manager/ui-layout": "2.48.2-SNAPSHOT", + "@scm-manager/ui-api": "3.0.0-SNAPSHOT", + "@scm-manager/ui-extensions": "3.0.0-SNAPSHOT", + "@scm-manager/ui-components": "3.0.0-SNAPSHOT", + "@scm-manager/ui-forms": "3.0.0-SNAPSHOT", + "@scm-manager/ui-buttons": "3.0.0-SNAPSHOT", + "@scm-manager/ui-overlays": "3.0.0-SNAPSHOT", + "@scm-manager/ui-layout": "3.0.0-SNAPSHOT", "classnames": "^2.2.6", "query-string": "6.14.1", "redux": "^4.0.0", @@ -31,8 +31,8 @@ "@scm-manager/plugin-scripts": "^1.2.2", "@scm-manager/prettier-config": "^2.10.1", "@scm-manager/tsconfig": "^2.13.0", - "@scm-manager/ui-tests": "2.48.2-SNAPSHOT", - "@scm-manager/ui-types": "2.48.2-SNAPSHOT", + "@scm-manager/ui-tests": "3.0.0-SNAPSHOT", + "@scm-manager/ui-types": "3.0.0-SNAPSHOT", "@types/classnames": "^2.2.9", "@types/enzyme": "^3.10.3", "@types/fetch-mock": "^7.3.1", diff --git a/scm-ui/ui-shortcuts/package.json b/scm-ui/ui-shortcuts/package.json index d93cc4122a..4f0e521be4 100644 --- a/scm-ui/ui-shortcuts/package.json +++ b/scm-ui/ui-shortcuts/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-shortcuts", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "license": "MIT", "private": true, "main": "build/index.js", diff --git a/scm-ui/ui-styles/package.json b/scm-ui/ui-styles/package.json index 1d7248bdb5..c6f577303f 100644 --- a/scm-ui/ui-styles/package.json +++ b/scm-ui/ui-styles/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-styles", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "description": "Styles for SCM-Manager", "main": "src/scm.scss", "license": "MIT", diff --git a/scm-ui/ui-syntaxhighlighting/package.json b/scm-ui/ui-syntaxhighlighting/package.json index df1a94a87a..cc9840a5da 100644 --- a/scm-ui/ui-syntaxhighlighting/package.json +++ b/scm-ui/ui-syntaxhighlighting/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-syntaxhighlighting", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "private": true, "main": "src/index.ts", "scripts": { @@ -13,7 +13,7 @@ "depcheck": "depcheck" }, "dependencies": { - "@scm-manager/ui-text": "2.48.2-SNAPSHOT", + "@scm-manager/ui-text": "3.0.0-SNAPSHOT", "nanoid": "^3.3.2", "react-diff-view": "^2.4.10", "refractor": "^4.5.0" diff --git a/scm-ui/ui-tests/package.json b/scm-ui/ui-tests/package.json index c4bb9eb42d..39ae2d24f6 100644 --- a/scm-ui/ui-tests/package.json +++ b/scm-ui/ui-tests/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-tests", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "description": "UI-Tests helpers", "author": "Sebastian Sdorra ", "license": "MIT", diff --git a/scm-ui/ui-text/package.json b/scm-ui/ui-text/package.json index 3cbb9e4cfb..186826ba7c 100644 --- a/scm-ui/ui-text/package.json +++ b/scm-ui/ui-text/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-text", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "private": true, "main": "build/index.js", "module": "build/index.mjs", diff --git a/scm-ui/ui-types/package.json b/scm-ui/ui-types/package.json index 200f45dab8..364d453246 100644 --- a/scm-ui/ui-types/package.json +++ b/scm-ui/ui-types/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-types", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "description": "Typescript types for SCM-Manager related Objects", "main": "src/index.ts", "files": [ diff --git a/scm-ui/ui-webapp/package.json b/scm-ui/ui-webapp/package.json index 8743379398..c048c94faf 100644 --- a/scm-ui/ui-webapp/package.json +++ b/scm-ui/ui-webapp/package.json @@ -1,20 +1,20 @@ { "name": "@scm-manager/ui-webapp", - "version": "2.48.2-SNAPSHOT", + "version": "3.0.0-SNAPSHOT", "private": true, "dependencies": { "@headlessui/react": "^1.7.15", - "@scm-manager/ui-components": "2.48.2-SNAPSHOT", - "@scm-manager/ui-api": "2.48.2-SNAPSHOT", - "@scm-manager/ui-extensions": "2.48.2-SNAPSHOT", - "@scm-manager/ui-syntaxhighlighting": "2.48.2-SNAPSHOT", - "@scm-manager/ui-text": "2.48.2-SNAPSHOT", - "@scm-manager/ui-shortcuts": "2.48.2-SNAPSHOT", - "@scm-manager/ui-legacy": "2.48.2-SNAPSHOT", - "@scm-manager/ui-forms": "2.48.2-SNAPSHOT", - "@scm-manager/ui-buttons": "2.48.2-SNAPSHOT", - "@scm-manager/ui-overlays": "2.48.2-SNAPSHOT", - "@scm-manager/ui-layout": "2.48.2-SNAPSHOT", + "@scm-manager/ui-components": "3.0.0-SNAPSHOT", + "@scm-manager/ui-api": "3.0.0-SNAPSHOT", + "@scm-manager/ui-extensions": "3.0.0-SNAPSHOT", + "@scm-manager/ui-syntaxhighlighting": "3.0.0-SNAPSHOT", + "@scm-manager/ui-text": "3.0.0-SNAPSHOT", + "@scm-manager/ui-shortcuts": "3.0.0-SNAPSHOT", + "@scm-manager/ui-legacy": "3.0.0-SNAPSHOT", + "@scm-manager/ui-forms": "3.0.0-SNAPSHOT", + "@scm-manager/ui-buttons": "3.0.0-SNAPSHOT", + "@scm-manager/ui-overlays": "3.0.0-SNAPSHOT", + "@scm-manager/ui-layout": "3.0.0-SNAPSHOT", "@radix-ui/react-portal": "^1.0.4", "react-aria": "^3.29.1", "classnames": "^2.2.5", @@ -44,7 +44,7 @@ "devDependencies": { "@scm-manager/eslint-config": "^2.17.0", "@scm-manager/jest-preset": "^2.13.0", - "@scm-manager/ui-tests": "2.48.2-SNAPSHOT", + "@scm-manager/ui-tests": "3.0.0-SNAPSHOT", "@testing-library/react": "^12.1.5", "@types/classnames": "^2.2.9", "@types/enzyme": "^3.10.3", @@ -93,4 +93,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/scm-webapp/build.gradle b/scm-webapp/build.gradle index 877aeb065d..53f4820567 100644 --- a/scm-webapp/build.gradle +++ b/scm-webapp/build.gradle @@ -27,7 +27,7 @@ plugins { id 'org.scm-manager.java' id 'org.scm-manager.run' id 'org.scm-manager.core-plugins' - id 'io.swagger.core.v3.swagger-gradle-plugin' version '2.1.12' + id 'io.swagger.core.v3.swagger-gradle-plugin' version '2.2.19' } configurations { @@ -35,6 +35,16 @@ configurations { webapp { canBeConsumed = true canBeResolved = false + create("swaggerCoreDeps").defaultDependencies(new Action() { + @Override + void execute(DependencySet dependencies) { + dependencies.add(project.getDependencies().create("org.apache.commons:commons-lang3:3.12.0")) + dependencies.add(project.getDependencies().create("jakarta.ws.rs:jakarta.ws.rs-api:3.1.0")) + dependencies.add(project.getDependencies().create("jakarta.servlet:jakarta.servlet-api:6.0.0")) + dependencies.add(project.getDependencies().create("io.swagger.core.v3:swagger-jaxrs2-jakarta:2.2.19")) + dependencies.add(project.getDependencies().create("com.fasterxml.jackson.core:jackson-core:2.15.2")) + } + }) } } @@ -81,14 +91,15 @@ dependencies { implementation libraries.jacksonJaxRsJsonProvider implementation libraries.jacksonDatatypeJdk8 implementation libraries.jacksonDatatypeJsr310 + implementation libraries.jacksonDataFormatYaml // rest api implementation libraries.resteasyJaxbProvider implementation libraries.resteasyJackson2Provider implementation libraries.resteasyMultiartProvider - implementation libraries.resteasyGuice implementation libraries.resteasyServletInitializer implementation libraries.resteasyValidatorProvider + implementation "org.apache.httpcomponents:httpcore:4.4.16" // openapi compileOnly libraries.swaggerJaxRs @@ -144,6 +155,10 @@ dependencies { // shiro unit testImplementation libraries.shiroUnit + + // plugin transformer + implementation 'org.eclipse.transformer:org.eclipse.transformer:0.5.0' + implementation 'org.eclipse.transformer:org.eclipse.transformer.jakarta:0.5.0' } war { @@ -161,9 +176,12 @@ artifacts { } // war without assets for development and livereload -task 'dev-war' (type: War) { +task 'dev-war'(type: War) { archiveName 'scm-webapp-dev.war' from 'build/war' + into('WEB-INF/classes') { + from('src/main/conf/config.yml') + } into('WEB-INF/classes/META-INF/scm') { from('build/openapi') } @@ -175,7 +193,6 @@ scmServer { liveReload = true openBrowser = true warFile = file('build/libs/scm-webapp-dev.war') - loggingConfiguration = file('src/main/conf/logback.serve.xml') } run { @@ -190,6 +207,7 @@ resolve { resourcePackages = ['sonia.scm.api.v2.resources'] outputDir = file('build/openapi') openApiFile = file('build/openapi_tmp/openapi.yml') + setBuildClasspath(project.configurations.swaggerCoreDeps) } task prepareOpenAPI(type: Copy) { @@ -199,6 +217,10 @@ task prepareOpenAPI(type: Copy) { expand(version: project.version) } +repositories { + mavenCentral() +} + tasks.getByName("resolve").configure { dependsOn 'prepareOpenAPI' } diff --git a/scm-webapp/src/main/conf/config.yml b/scm-webapp/src/main/conf/config.yml new file mode 100644 index 0000000000..cbc86dfed1 --- /dev/null +++ b/scm-webapp/src/main/conf/config.yml @@ -0,0 +1,14 @@ +webapp: + cache: + dataFile: + enabled: true + initialUser: scmadmin + initialPassword: scmadmin + stage: DEVELOPMENT + homeDir: ./build/scm-home + +log: + rootLevel: WARN + logger: + sonia.scm: DEBUG + com.cloudogu.scm: DEBUG diff --git a/scm-webapp/src/main/conf/logback.ci.xml b/scm-webapp/src/main/conf/logback.ci.xml deleted file mode 100644 index 428d3e1350..0000000000 --- a/scm-webapp/src/main/conf/logback.ci.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - diff --git a/scm-webapp/src/main/conf/logback.serve.xml b/scm-webapp/src/main/conf/logback.serve.xml deleted file mode 100644 index b1ba8641e4..0000000000 --- a/scm-webapp/src/main/conf/logback.serve.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scm-webapp/src/main/java/sonia/scm/DefaultRootURL.java b/scm-webapp/src/main/java/sonia/scm/DefaultRootURL.java index 8c4a53e9a2..27eb7efaec 100644 --- a/scm-webapp/src/main/java/sonia/scm/DefaultRootURL.java +++ b/scm-webapp/src/main/java/sonia/scm/DefaultRootURL.java @@ -30,14 +30,14 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import com.google.inject.OutOfScopeException; import com.google.inject.ProvisionException; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.config.ScmConfiguration; import sonia.scm.util.HttpUtil; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.servlet.http.HttpServletRequest; import java.net.MalformedURLException; import java.net.URL; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/ProxyPushStateDispatcher.java b/scm-webapp/src/main/java/sonia/scm/ProxyPushStateDispatcher.java index 811a0a7ae9..7a3f5a43ea 100644 --- a/scm-webapp/src/main/java/sonia/scm/ProxyPushStateDispatcher.java +++ b/scm-webapp/src/main/java/sonia/scm/ProxyPushStateDispatcher.java @@ -26,11 +26,11 @@ package sonia.scm; import com.google.common.annotations.VisibleForTesting; import com.google.common.io.ByteStreams; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/PushStateDispatcher.java b/scm-webapp/src/main/java/sonia/scm/PushStateDispatcher.java index 88f70f548b..3af43e6278 100644 --- a/scm-webapp/src/main/java/sonia/scm/PushStateDispatcher.java +++ b/scm-webapp/src/main/java/sonia/scm/PushStateDispatcher.java @@ -24,8 +24,9 @@ package sonia.scm; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + import java.io.IOException; /** diff --git a/scm-webapp/src/main/java/sonia/scm/PushStateDispatcherProvider.java b/scm-webapp/src/main/java/sonia/scm/PushStateDispatcherProvider.java index 54d9c8af10..4c4a1a2678 100644 --- a/scm-webapp/src/main/java/sonia/scm/PushStateDispatcherProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/PushStateDispatcherProvider.java @@ -26,9 +26,8 @@ package sonia.scm; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; - -import javax.inject.Inject; -import javax.inject.Provider; +import jakarta.inject.Inject; +import jakarta.inject.Provider; /** * Injection Provider for the {@link PushStateDispatcher}. The provider will return a {@link ProxyPushStateDispatcher} diff --git a/scm-webapp/src/main/java/sonia/scm/StaticResourceServlet.java b/scm-webapp/src/main/java/sonia/scm/StaticResourceServlet.java index 337ee8f276..95cc8a8a5c 100644 --- a/scm-webapp/src/main/java/sonia/scm/StaticResourceServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/StaticResourceServlet.java @@ -26,14 +26,14 @@ package sonia.scm; import com.github.sdorra.webresources.CacheControl; import com.github.sdorra.webresources.WebResourceSender; +import jakarta.inject.Singleton; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.util.HttpUtil; -import javax.inject.Singleton; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; diff --git a/scm-webapp/src/main/java/sonia/scm/TemplatingPushStateDispatcher.java b/scm-webapp/src/main/java/sonia/scm/TemplatingPushStateDispatcher.java index decc6a09c5..ec4bcdb49a 100644 --- a/scm-webapp/src/main/java/sonia/scm/TemplatingPushStateDispatcher.java +++ b/scm-webapp/src/main/java/sonia/scm/TemplatingPushStateDispatcher.java @@ -25,13 +25,13 @@ package sonia.scm; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.template.Template; import sonia.scm.template.TemplateEngine; import sonia.scm.template.TemplateEngineFactory; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Writer; diff --git a/scm-webapp/src/main/java/sonia/scm/WebResourceServlet.java b/scm-webapp/src/main/java/sonia/scm/WebResourceServlet.java index d04b9257ca..ce5ce5a2f9 100644 --- a/scm-webapp/src/main/java/sonia/scm/WebResourceServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/WebResourceServlet.java @@ -27,6 +27,11 @@ package sonia.scm; import com.github.sdorra.webresources.CacheControl; import com.github.sdorra.webresources.WebResourceSender; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.filter.WebElement; @@ -34,11 +39,6 @@ import sonia.scm.plugin.PluginLoader; import sonia.scm.plugin.UberWebResourceLoader; import sonia.scm.util.HttpUtil; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URL; diff --git a/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedDto.java b/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedDto.java index 2e9139069d..db2af6ad63 100644 --- a/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedDto.java +++ b/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedDto.java @@ -24,17 +24,17 @@ package sonia.scm.admin; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import sonia.scm.xml.XmlUTCDateAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.Date; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedParser.java b/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedParser.java index 34cfc0a29d..19deb159a3 100644 --- a/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedParser.java +++ b/scm-webapp/src/main/java/sonia/scm/admin/ReleaseFeedParser.java @@ -28,14 +28,14 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.metrics.Metrics; import sonia.scm.net.ahc.AdvancedHttpClient; import sonia.scm.version.Version; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Comparator; import java.util.Optional; import java.util.concurrent.ExecutorService; diff --git a/scm-webapp/src/main/java/sonia/scm/admin/ReleaseVersionChecker.java b/scm-webapp/src/main/java/sonia/scm/admin/ReleaseVersionChecker.java index 3999850fa9..002ff3d3e5 100644 --- a/scm-webapp/src/main/java/sonia/scm/admin/ReleaseVersionChecker.java +++ b/scm-webapp/src/main/java/sonia/scm/admin/ReleaseVersionChecker.java @@ -25,6 +25,7 @@ package sonia.scm.admin; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; @@ -33,7 +34,6 @@ import sonia.scm.cache.CacheManager; import sonia.scm.config.ScmConfiguration; import sonia.scm.version.Version; -import javax.inject.Inject; import java.util.Optional; public class ReleaseVersionChecker { diff --git a/scm-webapp/src/main/java/sonia/scm/admin/ScmConfigurationStore.java b/scm-webapp/src/main/java/sonia/scm/admin/ScmConfigurationStore.java index 4360fe5341..98eee29d3e 100644 --- a/scm-webapp/src/main/java/sonia/scm/admin/ScmConfigurationStore.java +++ b/scm-webapp/src/main/java/sonia/scm/admin/ScmConfigurationStore.java @@ -24,13 +24,12 @@ package sonia.scm.admin; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.config.ScmConfiguration; import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; -import javax.inject.Inject; -import javax.inject.Singleton; - @Singleton public final class ScmConfigurationStore { diff --git a/scm-webapp/src/main/java/sonia/scm/api/ContextualFallbackExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/ContextualFallbackExceptionMapper.java index af9a80d3c7..c0d40d85c3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/ContextualFallbackExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/ContextualFallbackExceptionMapper.java @@ -24,14 +24,13 @@ package sonia.scm.api; +import jakarta.inject.Inject; +import jakarta.ws.rs.ext.Provider; import sonia.scm.ExceptionWithContext; import sonia.scm.api.rest.ContextualExceptionMapper; import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; -import javax.inject.Inject; -import javax.ws.rs.ext.Provider; - -import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR; +import static jakarta.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR; @Provider public class ContextualFallbackExceptionMapper extends ContextualExceptionMapper { diff --git a/scm-webapp/src/main/java/sonia/scm/api/FailureExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/FailureExceptionMapper.java index 2cd5f8e73a..982012cbf7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/FailureExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/FailureExceptionMapper.java @@ -26,20 +26,20 @@ package sonia.scm.api; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableSet; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; import org.jboss.resteasy.spi.Failure; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; import java.util.Set; -@javax.ws.rs.ext.Provider +@jakarta.ws.rs.ext.Provider public class FailureExceptionMapper implements ExceptionMapper { private static final Logger LOG = LoggerFactory.getLogger(FailureExceptionMapper.class); diff --git a/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java index a1165b3c7e..359de2704b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/FallbackExceptionMapper.java @@ -24,15 +24,15 @@ package sonia.scm.api; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; import java.util.Collections; @Provider diff --git a/scm-webapp/src/main/java/sonia/scm/api/InvalidFormatExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/InvalidFormatExceptionMapper.java index 97dd96a23a..01ad1163ec 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/InvalidFormatExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/InvalidFormatExceptionMapper.java @@ -25,15 +25,15 @@ package sonia.scm.api; import com.fasterxml.jackson.databind.exc.InvalidFormatException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; import java.util.Collections; @Provider diff --git a/scm-webapp/src/main/java/sonia/scm/api/JaxNotFoundExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/JaxNotFoundExceptionMapper.java index ff05a704be..55965626a0 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/JaxNotFoundExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/JaxNotFoundExceptionMapper.java @@ -24,16 +24,16 @@ package sonia.scm.api; +import jakarta.ws.rs.NotFoundException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.web.VndMediaType; -import javax.ws.rs.NotFoundException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; import java.util.Collections; @Provider diff --git a/scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java index 5e9e38be06..fe55bf4620 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/JsonParseExceptionMapper.java @@ -25,15 +25,15 @@ package sonia.scm.api; import com.fasterxml.jackson.core.JsonParseException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; import java.util.Collections; @Provider diff --git a/scm-webapp/src/main/java/sonia/scm/api/ModificationFailedExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/ModificationFailedExceptionMapper.java index d6b62f9767..7433936879 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/ModificationFailedExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/ModificationFailedExceptionMapper.java @@ -24,13 +24,12 @@ package sonia.scm.api; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.Response; import sonia.scm.api.rest.ContextualExceptionMapper; import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; import sonia.scm.repository.spi.ModificationFailedException; -import javax.inject.Inject; -import javax.ws.rs.core.Response; - public class ModificationFailedExceptionMapper extends ContextualExceptionMapper { @Inject diff --git a/scm-webapp/src/main/java/sonia/scm/api/NotSupportedExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/NotSupportedExceptionMapper.java index 9e10b89669..b243789ab1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/NotSupportedExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/NotSupportedExceptionMapper.java @@ -24,17 +24,16 @@ package sonia.scm.api; +import jakarta.ws.rs.NotSupportedException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.web.VndMediaType; -import javax.ws.rs.NotSupportedException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - @Provider public class NotSupportedExceptionMapper implements ExceptionMapper { diff --git a/scm-webapp/src/main/java/sonia/scm/api/RepositoryStorageExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/RepositoryStorageExceptionMapper.java index 076f0bf0ab..70924df91c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/RepositoryStorageExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/RepositoryStorageExceptionMapper.java @@ -24,16 +24,15 @@ package sonia.scm.api; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import lombok.extern.slf4j.Slf4j; import org.slf4j.MDC; import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.repository.RepositoryLocationResolver; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - import static java.util.Arrays.asList; @Slf4j diff --git a/scm-webapp/src/main/java/sonia/scm/api/WebApplicationExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/WebApplicationExceptionMapper.java index 3c091fdb52..77fb599d26 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/WebApplicationExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/WebApplicationExceptionMapper.java @@ -24,16 +24,15 @@ package sonia.scm.api; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.web.VndMediaType; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - @Provider public class WebApplicationExceptionMapper implements ExceptionMapper { diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java index c81fb617f6..cb14149714 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/AlreadyExistsExceptionMapper.java @@ -24,13 +24,12 @@ package sonia.scm.api.rest; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.ext.Provider; import sonia.scm.AlreadyExistsException; import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; -import javax.inject.Inject; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.ext.Provider; - @Provider public class AlreadyExistsExceptionMapper extends ContextualExceptionMapper { @Inject diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/AuthenticationExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/AuthenticationExceptionMapper.java index 4d8bda77e8..be33fcb465 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/AuthenticationExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/AuthenticationExceptionMapper.java @@ -24,11 +24,10 @@ package sonia.scm.api.rest; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import org.apache.shiro.authc.AuthenticationException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - @Provider public class AuthenticationExceptionMapper extends StatusExceptionMapper { public AuthenticationExceptionMapper() { diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/AuthorizationExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/AuthorizationExceptionMapper.java index 5b03c77fd3..9f3e842d22 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/AuthorizationExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/AuthorizationExceptionMapper.java @@ -26,16 +26,15 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import org.apache.shiro.authz.AuthorizationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.security.Authentications; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - //~--- JDK imports ------------------------------------------------------------ /** diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/BadRequestExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/BadRequestExceptionMapper.java index 34dc16a447..d2c9a0aef6 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/BadRequestExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/BadRequestExceptionMapper.java @@ -24,13 +24,12 @@ package sonia.scm.api.rest; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import sonia.scm.BadRequestException; import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; -import javax.inject.Inject; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - @Provider public class BadRequestExceptionMapper extends ContextualExceptionMapper { @Inject diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/ConcurrentModificationExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/ConcurrentModificationExceptionMapper.java index a5251ea4e0..eed05a1b4e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/ConcurrentModificationExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/ConcurrentModificationExceptionMapper.java @@ -24,13 +24,12 @@ package sonia.scm.api.rest; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import sonia.scm.ConcurrentModificationException; import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; -import javax.inject.Inject; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - @Provider public class ConcurrentModificationExceptionMapper extends ContextualExceptionMapper { @Inject diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java index f8f378b670..60c4a287ba 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/ContextualExceptionMapper.java @@ -24,15 +24,14 @@ package sonia.scm.api.rest; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ExceptionWithContext; import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; - public class ContextualExceptionMapper implements ExceptionMapper { private static final Logger logger = LoggerFactory.getLogger(ContextualExceptionMapper.class); diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/DisabledAccountExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/DisabledAccountExceptionMapper.java index e47ae45e84..02a923d730 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/DisabledAccountExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/DisabledAccountExceptionMapper.java @@ -26,13 +26,10 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import org.apache.shiro.authc.DisabledAccountException; -//~--- JDK imports ------------------------------------------------------------ - -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/ExcessiveAttemptsExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/ExcessiveAttemptsExceptionMapper.java index a905aaec95..7cb8544509 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/ExcessiveAttemptsExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/ExcessiveAttemptsExceptionMapper.java @@ -26,13 +26,10 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import org.apache.shiro.authc.ExcessiveAttemptsException; -//~--- JDK imports ------------------------------------------------------------ - -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/FileLockedExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/FileLockedExceptionMapper.java index e3629190b4..75c84dc6b2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/FileLockedExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/FileLockedExceptionMapper.java @@ -24,13 +24,12 @@ package sonia.scm.api.rest; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; import sonia.scm.repository.api.FileLockedException; -import javax.inject.Inject; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - @Provider public class FileLockedExceptionMapper extends ContextualExceptionMapper { @Inject diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/JSONContextResolver.java b/scm-webapp/src/main/java/sonia/scm/api/rest/JSONContextResolver.java index 641ee8aae7..330dc11251 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/JSONContextResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/JSONContextResolver.java @@ -25,11 +25,10 @@ package sonia.scm.api.rest; import com.fasterxml.jackson.databind.ObjectMapper; - -import javax.inject.Inject; -import javax.ws.rs.Produces; -import javax.ws.rs.ext.ContextResolver; -import javax.ws.rs.ext.Provider; +import jakarta.inject.Inject; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.ext.ContextResolver; +import jakarta.ws.rs.ext.Provider; /** * Configures the way objects are marshaled to json. diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/NotAllowedExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/NotAllowedExceptionMapper.java index 5c68420f43..edf699b749 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/NotAllowedExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/NotAllowedExceptionMapper.java @@ -24,9 +24,9 @@ package sonia.scm.api.rest; -import javax.ws.rs.NotAllowedException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.NotAllowedException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; @Provider public class NotAllowedExceptionMapper extends StatusExceptionMapper { diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/NotAuthorizedExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/NotAuthorizedExceptionMapper.java index ccc408c794..dd0553f912 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/NotAuthorizedExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/NotAuthorizedExceptionMapper.java @@ -24,9 +24,9 @@ package sonia.scm.api.rest; -import javax.ws.rs.NotAuthorizedException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; +import jakarta.ws.rs.NotAuthorizedException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; @Provider public class NotAuthorizedExceptionMapper extends StatusExceptionMapper { diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/ObjectMapperProvider.java b/scm-webapp/src/main/java/sonia/scm/api/rest/ObjectMapperProvider.java index f911f51c7b..a78393cbfb 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/ObjectMapperProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/ObjectMapperProvider.java @@ -34,10 +34,9 @@ import com.fasterxml.jackson.databind.type.TypeFactory; import com.fasterxml.jackson.databind.util.StdDateFormat; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector; - -import javax.inject.Provider; -import javax.inject.Singleton; +import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationIntrospector; +import jakarta.inject.Provider; +import jakarta.inject.Singleton; @Singleton public class ObjectMapperProvider implements Provider { @@ -58,7 +57,7 @@ public class ObjectMapperProvider implements Provider { private AnnotationIntrospector createAnnotationIntrospector() { return new AnnotationIntrospectorPair( - new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()), + new JakartaXmlBindAnnotationIntrospector(TypeFactory.defaultInstance()), new JacksonAnnotationIntrospector() ); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionResult.java b/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionResult.java index f0da7aa1c3..824b9c7ddb 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionResult.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionResult.java @@ -26,7 +26,7 @@ package sonia.scm.api.rest; //~--- JDK imports ------------------------------------------------------------ -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; /** * diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionUploadResult.java b/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionUploadResult.java index fc91f02641..c3a8f23719 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionUploadResult.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionUploadResult.java @@ -26,7 +26,7 @@ package sonia.scm.api.rest; //~--- JDK imports ------------------------------------------------------------ -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlRootElement; /** * diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionUploadResultMessageWriter.java b/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionUploadResultMessageWriter.java index dbff25a42d..7eaa5e5857 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionUploadResultMessageWriter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/RestActionUploadResultMessageWriter.java @@ -27,21 +27,17 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Charsets; - -//~--- JDK imports ------------------------------------------------------------ +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import java.io.IOException; import java.io.OutputStream; - import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; -import javax.ws.rs.ext.Provider; - /** * Force json output for uploads, because of a bug we have to use a html * mimetype for uploads. diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/RestExceptionResult.java b/scm-webapp/src/main/java/sonia/scm/api/rest/RestExceptionResult.java index f2b3ed4a6f..754afdadc4 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/RestExceptionResult.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/RestExceptionResult.java @@ -29,10 +29,9 @@ package sonia.scm.api.rest; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import com.google.common.base.Throwables; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/ScmSecurityExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/ScmSecurityExceptionMapper.java index 2cc3ed2fb0..c0bf8b5e91 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/ScmSecurityExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/ScmSecurityExceptionMapper.java @@ -26,13 +26,10 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import sonia.scm.security.ScmSecurityException; -//~--- JDK imports ------------------------------------------------------------ - -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/SseHeaderResponseFilter.java b/scm-webapp/src/main/java/sonia/scm/api/rest/SseHeaderResponseFilter.java index 373cdd6ffd..7ae9952a2a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/SseHeaderResponseFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/SseHeaderResponseFilter.java @@ -24,14 +24,14 @@ package sonia.scm.api.rest; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.core.CacheControl; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.Provider; import sonia.scm.sse.SseResponse; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.core.CacheControl; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.Provider; import java.io.IOException; @Provider diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/StatusExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/rest/StatusExceptionMapper.java index bf5bc32e8f..1d789892e1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/StatusExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/StatusExceptionMapper.java @@ -26,13 +26,12 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; - //~--- JDK imports ------------------------------------------------------------ /** diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/TemplateEngineViewable.java b/scm-webapp/src/main/java/sonia/scm/api/rest/TemplateEngineViewable.java index 0c14582707..94fb58e10d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/TemplateEngineViewable.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/TemplateEngineViewable.java @@ -27,25 +27,21 @@ package sonia.scm.api.rest; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; - +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.ws.rs.ext.Provider; import sonia.scm.template.Template; import sonia.scm.template.TemplateEngine; import sonia.scm.template.TemplateEngineFactory; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.template.Viewable; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.lang.annotation.Annotation; import java.lang.reflect.Type; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.MessageBodyWriter; - -import javax.ws.rs.ext.Provider; -import sonia.scm.template.Viewable; /** * diff --git a/scm-webapp/src/main/java/sonia/scm/api/rest/UriInfoFilter.java b/scm-webapp/src/main/java/sonia/scm/api/rest/UriInfoFilter.java index 240d9b0e6c..58bc952706 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/rest/UriInfoFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/rest/UriInfoFilter.java @@ -24,21 +24,20 @@ package sonia.scm.api.rest; +import jakarta.inject.Inject; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.core.UriInfo; +import jakarta.ws.rs.ext.Provider; import sonia.scm.api.v2.resources.ScmPathInfoStore; -import javax.inject.Inject; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.ext.Provider; - @Provider public class UriInfoFilter implements ContainerRequestFilter { - private final javax.inject.Provider storeProvider; + private final jakarta.inject.Provider storeProvider; @Inject - public UriInfoFilter(javax.inject.Provider storeProvider) { + public UriInfoFilter(jakarta.inject.Provider storeProvider) { this.storeProvider = storeProvider; } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/ApiKeysDisabledExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/ApiKeysDisabledExceptionMapper.java index 3b9b250b1a..e7401e93e5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/ApiKeysDisabledExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/ApiKeysDisabledExceptionMapper.java @@ -24,14 +24,13 @@ package sonia.scm.api.v2; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import sonia.scm.api.rest.ContextualExceptionMapper; import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; import sonia.scm.security.ApiKeysDisabledException; -import javax.inject.Inject; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - /** * @since 2.43.0 */ diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/CacheControlResponseFilter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/CacheControlResponseFilter.java index 97695c60b9..ca8ea2644f 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/CacheControlResponseFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/CacheControlResponseFilter.java @@ -24,14 +24,13 @@ package sonia.scm.api.v2; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.ext.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.ext.Provider; - /** * Adds the Cache-Control: no-cache header to every api call. But only if non caching headers are set to the response. * The Cache-Control header should fix stale resources on ie. diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/FieldContainerResponseFilter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/FieldContainerResponseFilter.java index dc3e72e2ff..f3d075682a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/FieldContainerResponseFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/FieldContainerResponseFilter.java @@ -25,13 +25,13 @@ package sonia.scm.api.v2; import com.fasterxml.jackson.databind.JsonNode; +import jakarta.annotation.Priority; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.Provider; -import javax.annotation.Priority; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.ext.Provider; import java.util.Collection; import java.util.Optional; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/InvalidAcceptHeaderFilter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/InvalidAcceptHeaderFilter.java index 7112ea1d4e..2229acbfd9 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/InvalidAcceptHeaderFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/InvalidAcceptHeaderFilter.java @@ -26,16 +26,16 @@ package sonia.scm.api.v2; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; +import jakarta.annotation.Priority; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.ext.Provider; import sonia.scm.TransactionId; import sonia.scm.api.v2.resources.ErrorDto; -import javax.annotation.Priority; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.ext.Provider; import java.util.List; @Provider diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/JsonMarshallingResponseFilter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/JsonMarshallingResponseFilter.java index 234c4aeffa..bee7b4b647 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/JsonMarshallingResponseFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/JsonMarshallingResponseFilter.java @@ -26,17 +26,17 @@ package sonia.scm.api.v2; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.annotation.Priority; +import jakarta.inject.Inject; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.ext.Provider; import sonia.scm.web.JsonEnricher; import sonia.scm.web.JsonEnricherContext; import sonia.scm.web.VndMediaType; -import javax.annotation.Priority; -import javax.inject.Inject; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.container.ContainerResponseFilter; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.ext.Provider; import java.util.Set; /** diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/NotFoundExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/NotFoundExceptionMapper.java index c3e7dae767..4c80a91de9 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/NotFoundExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/NotFoundExceptionMapper.java @@ -24,14 +24,13 @@ package sonia.scm.api.v2; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import sonia.scm.NotFoundException; import sonia.scm.api.rest.ContextualExceptionMapper; import sonia.scm.api.v2.resources.ExceptionWithContextToErrorDtoMapper; -import javax.inject.Inject; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - /** * @since 2.0.0 */ diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/ResponseFilterPriorities.java b/scm-webapp/src/main/java/sonia/scm/api/v2/ResponseFilterPriorities.java index 4002de0176..99800e0497 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/ResponseFilterPriorities.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/ResponseFilterPriorities.java @@ -25,10 +25,10 @@ package sonia.scm.api.v2; -import javax.ws.rs.Priorities; +import jakarta.ws.rs.Priorities; /** - * A collection of filter priorities used by custom {@link javax.ws.rs.container.ContainerResponseFilter}s. + * A collection of filter priorities used by custom {@link jakarta.ws.rs.container.ContainerResponseFilter}s. * Higher number means earlier execution in the response filter chain. */ final class ResponseFilterPriorities { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/ScmConstraintValidationExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/ScmConstraintValidationExceptionMapper.java index 4882db8eac..51a1e2d54a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/ScmConstraintValidationExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/ScmConstraintValidationExceptionMapper.java @@ -24,15 +24,14 @@ package sonia.scm.api.v2; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import sonia.scm.ScmConstraintViolationException; import sonia.scm.api.v2.resources.ScmViolationExceptionToErrorDtoMapper; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - @Provider public class ScmConstraintValidationExceptionMapper implements ExceptionMapper { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/JavaxValidationExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/ValidationExceptionMapper.java similarity index 81% rename from scm-webapp/src/main/java/sonia/scm/api/v2/JavaxValidationExceptionMapper.java rename to scm-webapp/src/main/java/sonia/scm/api/v2/ValidationExceptionMapper.java index 43f6be6e14..dac983b656 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/JavaxValidationExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/ValidationExceptionMapper.java @@ -24,22 +24,21 @@ package sonia.scm.api.v2; +import jakarta.inject.Inject; +import jakarta.validation.ConstraintViolationException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; import sonia.scm.api.v2.resources.ResteasyViolationExceptionToErrorDtoMapper; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.ConstraintViolationException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - @Provider -public class JavaxValidationExceptionMapper implements ExceptionMapper { +public class ValidationExceptionMapper implements ExceptionMapper { private final ResteasyViolationExceptionToErrorDtoMapper mapper; @Inject - public JavaxValidationExceptionMapper(ResteasyViolationExceptionToErrorDtoMapper mapper) { + public ValidationExceptionMapper(ResteasyViolationExceptionToErrorDtoMapper mapper) { this.mapper = mapper; } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AdminAccountStartupResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AdminAccountStartupResource.java index 7ae9df2f33..37e3f97567 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AdminAccountStartupResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AdminAccountStartupResource.java @@ -26,6 +26,18 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.Response; import lombok.Data; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.UnauthenticatedException; @@ -37,23 +49,8 @@ import sonia.scm.security.AllowAnonymousAccess; import sonia.scm.security.Tokens; import sonia.scm.util.ValidationUtil; -import javax.inject.Inject; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; - import static de.otto.edison.hal.Link.link; import static sonia.scm.ScmConstraintViolationException.Builder.doThrow; -import static sonia.scm.initialization.InitializationWebTokenGenerator.INIT_TOKEN_HEADER; @AllowAnonymousAccess @Extension diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AdminInfoResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AdminInfoResource.java index 3802e0788b..2e88b129c8 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AdminInfoResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AdminInfoResource.java @@ -30,14 +30,14 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import sonia.scm.admin.UpdateInfo; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; import sonia.scm.admin.ReleaseVersionChecker; +import sonia.scm.admin.UpdateInfo; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; import java.util.Optional; @OpenAPIDefinition(tags = { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AlertsResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AlertsResource.java index 52803bd612..600594477f 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AlertsResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AlertsResource.java @@ -37,7 +37,14 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.EqualsAndHashCode; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -48,15 +55,6 @@ import sonia.scm.plugin.PluginLoader; import sonia.scm.util.SystemUtil; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AnnotateResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AnnotateResource.java index 43f8d87130..e962d9b5e2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AnnotateResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AnnotateResource.java @@ -28,16 +28,16 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; import java.io.IOException; public class AnnotateResource { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyCollectionToDtoMapper.java index 6888b4dbbc..f86eef0cd7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyCollectionToDtoMapper.java @@ -27,9 +27,9 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import sonia.scm.security.ApiKey; -import javax.inject.Inject; import java.util.Collection; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyDto.java index 40cc0feaa0..22b7b2933f 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyDto.java @@ -26,11 +26,11 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.validation.constraints.NotEmpty; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import javax.validation.constraints.NotEmpty; import java.time.Instant; @Getter diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java index 37123e2785..f60d3847c4 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java @@ -32,26 +32,26 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.apache.shiro.SecurityUtils; import sonia.scm.ContextEntry; import sonia.scm.security.ApiKey; import sonia.scm.security.ApiKeyService; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import java.net.URI; -import static javax.ws.rs.core.Response.Status.CREATED; +import static jakarta.ws.rs.core.Response.Status.CREATED; import static sonia.scm.NotFoundException.notFound; /** diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyToApiKeyDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyToApiKeyDtoMapper.java index c5c0c3b619..01b520f7ed 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyToApiKeyDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyToApiKeyDtoMapper.java @@ -25,13 +25,12 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ObjectFactory; import sonia.scm.security.ApiKey; -import javax.inject.Inject; - import static de.otto.edison.hal.Link.link; @Mapper diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationRequestDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationRequestDto.java index 7604fc998b..a951669c59 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationRequestDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationRequestDto.java @@ -26,8 +26,8 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.base.Strings; +import jakarta.ws.rs.FormParam; -import javax.ws.rs.FormParam; import java.util.List; public class AuthenticationRequestDto { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationResource.java index b8ba0d1921..530b3dc635 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationResource.java @@ -38,9 +38,19 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.security.SecurityScheme; import io.swagger.v3.oas.annotations.security.SecuritySchemes; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.BeanParam; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; -import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.Subject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -56,17 +66,6 @@ import sonia.scm.security.Scope; import sonia.scm.security.Tokens; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.BeanParam; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import java.net.URI; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AutoCompleteResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AutoCompleteResource.java index 3bd20fc4f7..925c378c39 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AutoCompleteResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AutoCompleteResource.java @@ -30,6 +30,13 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Size; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; import sonia.scm.ReducedModelObject; import sonia.scm.group.GroupDisplayManager; import sonia.scm.repository.NamespaceManager; @@ -38,13 +45,6 @@ import sonia.scm.search.SearchUtil; import sonia.scm.user.UserDisplayManager; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Size; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AvailablePluginResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AvailablePluginResource.java index 9444675580..068d2c07d7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AvailablePluginResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AvailablePluginResource.java @@ -28,20 +28,20 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import sonia.scm.plugin.AvailablePlugin; import sonia.scm.plugin.InstalledPlugin; import sonia.scm.plugin.PluginManager; import sonia.scm.plugin.PluginPermissions; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BaseFileObjectDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BaseFileObjectDtoMapper.java index b676bde87a..30932e0cb3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BaseFileObjectDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BaseFileObjectDtoMapper.java @@ -27,6 +27,7 @@ package sonia.scm.api.v2.resources; import com.google.common.annotations.VisibleForTesting; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Context; import org.mapstruct.MapperConfig; import org.mapstruct.ObjectFactory; @@ -36,8 +37,6 @@ import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.SubRepository; import sonia.scm.repository.spi.BrowseCommandRequest; -import javax.inject.Inject; - import static de.otto.edison.hal.Embedded.embeddedBuilder; import static de.otto.edison.hal.Link.link; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BlameResultToBlameDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BlameResultToBlameDtoMapper.java index e0c718e707..bcc957371d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BlameResultToBlameDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BlameResultToBlameDtoMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import com.google.common.annotations.VisibleForTesting; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Mapper; import org.mapstruct.ObjectFactory; import sonia.scm.repository.BlameLine; @@ -33,7 +34,6 @@ import sonia.scm.repository.BlameResult; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Person; -import javax.inject.Inject; import java.util.stream.Collectors; @Mapper diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java index 96de0ce2dc..746a184f66 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchChangesetCollectionToDtoMapper.java @@ -24,12 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.PageResult; import sonia.scm.repository.Changeset; import sonia.scm.repository.Repository; -import javax.inject.Inject; - public class BranchChangesetCollectionToDtoMapper extends ChangesetCollectionToDtoMapperBase { private final ResourceLinks resourceLinks; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDetailsMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDetailsMapper.java index a7316cd6a9..06d6a087e7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDetailsMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDetailsMapper.java @@ -27,6 +27,7 @@ package sonia.scm.api.v2.resources; import com.google.common.annotations.VisibleForTesting; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.ObjectFactory; @@ -34,7 +35,6 @@ import sonia.scm.repository.BranchDetails; import sonia.scm.repository.Repository; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; import java.util.Optional; @Mapper diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDetailsResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDetailsResource.java index 5ae1c1380e..26b037c10b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDetailsResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDetailsResource.java @@ -31,6 +31,14 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.constraints.Pattern; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import org.hibernate.validator.constraints.Length; import sonia.scm.NotFoundException; import sonia.scm.repository.NamespaceAndName; @@ -39,21 +47,11 @@ import sonia.scm.repository.api.BranchDetailsCommandResult; import sonia.scm.repository.api.CommandNotSupportedException; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; -import sonia.scm.util.HttpUtil; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.constraints.Pattern; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.stream.Collectors; import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java index 9b0789aab2..8ea6ffaa75 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java @@ -28,15 +28,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.hibernate.validator.constraints.Length; import sonia.scm.repository.Branch; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; - import java.time.Instant; import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRequestDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRequestDto.java index f56de8c38b..ec775a1dde 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRequestDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRequestDto.java @@ -24,12 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import lombok.Getter; import lombok.Setter; import org.hibernate.validator.constraints.Length; -import javax.validation.constraints.NotEmpty; - -import javax.validation.constraints.Pattern; import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index ab059553d6..24693f3f53 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -32,6 +32,18 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import sonia.scm.PageResult; import sonia.scm.repository.Branch; import sonia.scm.repository.Branches; @@ -46,18 +58,6 @@ import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; import java.io.IOException; import java.net.URI; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java index e6b5f45fa1..c9ab98cad8 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -40,8 +41,6 @@ import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; - import java.time.Instant; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CRLFInjectionExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CRLFInjectionExceptionMapper.java index ca003f697f..6a90ee93e0 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CRLFInjectionExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CRLFInjectionExceptionMapper.java @@ -24,11 +24,10 @@ package sonia.scm.api.v2.resources; +import jakarta.ws.rs.core.Response; import sonia.scm.api.rest.StatusExceptionMapper; import sonia.scm.util.CRLFInjectionException; -import javax.ws.rs.core.Response; - public class CRLFInjectionExceptionMapper extends StatusExceptionMapper { public CRLFInjectionExceptionMapper() { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java index cf910bb083..666d622937 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetCollectionToDtoMapper.java @@ -24,12 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.PageResult; import sonia.scm.repository.Changeset; import sonia.scm.repository.Repository; -import javax.inject.Inject; - public class ChangesetCollectionToDtoMapper extends ChangesetCollectionToDtoMapperBase { private final ResourceLinks resourceLinks; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java index 12151c8217..5dbe3076c6 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetRootResource.java @@ -28,6 +28,14 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import lombok.extern.slf4j.Slf4j; import sonia.scm.PageResult; import sonia.scm.repository.Changeset; @@ -39,14 +47,6 @@ import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; import java.io.IOException; import static sonia.scm.ContextEntry.ContextBuilder.entity; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetToParentDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetToParentDtoMapper.java index 394dd9af2b..c2864157b2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetToParentDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ChangesetToParentDtoMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.AfterMapping; import org.mapstruct.Context; import org.mapstruct.Mapper; @@ -34,8 +35,6 @@ import org.mapstruct.MappingTarget; import sonia.scm.repository.Changeset; import sonia.scm.repository.Repository; -import javax.inject.Inject; - import static de.otto.edison.hal.Link.link; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CliResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CliResource.java index ed4a6bc100..62074e2fd5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CliResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CliResource.java @@ -29,23 +29,23 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.StreamingOutput; import lombok.Data; import org.apache.shiro.SecurityUtils; import sonia.scm.cli.CliProcessor; import sonia.scm.cli.JsonStreamingCliContext; import sonia.scm.security.ApiKeyService; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.StreamingOutput; import java.util.List; import static sonia.scm.cli.UserAgentClientParser.parse; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CollectionResourceManagerAdapter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CollectionResourceManagerAdapter.java index 8a00fa994f..6a62565c0e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CollectionResourceManagerAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CollectionResourceManagerAdapter.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; +import jakarta.ws.rs.core.Response; import sonia.scm.Manager; import sonia.scm.ModelObject; import sonia.scm.PageResult; @@ -32,14 +33,13 @@ import sonia.scm.util.AssertUtil; import sonia.scm.util.Comparables; import sonia.scm.util.Util; -import javax.ws.rs.core.Response; import java.net.URI; import java.util.Comparator; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; -import static javax.ws.rs.core.Response.Status.BAD_REQUEST; +import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST; /** * Adapter from resource http endpoints to managers, for Collection resources (e.g. {@code /users}). diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java index eb87a1ce9b..d036c9d5a7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java @@ -33,23 +33,22 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PATCH; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; +import sonia.scm.admin.ScmConfigurationStore; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.NamespaceStrategyValidator; import sonia.scm.util.JsonMerger; -import sonia.scm.admin.ScmConfigurationStore; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PATCH; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - /** * RESTful Web Service Resource to manage the configuration. */ diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java index 27d7420384..e0de2ffba8 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ContentResource.java @@ -29,6 +29,16 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HEAD; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.StreamingOutput; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.NotFoundException; @@ -40,16 +50,6 @@ import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.util.IOUtil; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.StreamingOutput; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java index cd7588ffb1..27f06e8532 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java @@ -24,7 +24,7 @@ package sonia.scm.api.v2.resources; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotEmpty; interface CreateApiKeyDto { @NotEmpty diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateGroupDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateGroupDto.java index 82ed359010..14bef64456 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateGroupDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateGroupDto.java @@ -24,9 +24,9 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.Pattern; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.Pattern; import java.util.List; interface CreateGroupDto { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java index cf69854f1f..4043d7e60c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java @@ -24,14 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; -import java.time.Instant; -import java.util.List; - interface CreateRepositoryDto { String getNamespace(); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java index 0f524d39f2..9dbb38cf9a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java @@ -24,7 +24,8 @@ package sonia.scm.api.v2.resources; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotEmpty; + import java.util.Collection; interface CreateRepositoryRoleDto { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java index ff0b36b404..321bc4daac 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java @@ -24,12 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; - interface CreateUserDto { @Pattern(regexp = ValidationUtil.REGEX_NAME) String getName(); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultBranchLinkProvider.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultBranchLinkProvider.java index f523c31323..54aa229df3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultBranchLinkProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultBranchLinkProvider.java @@ -24,10 +24,9 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.repository.NamespaceAndName; -import javax.inject.Inject; - public class DefaultBranchLinkProvider implements BranchLinkProvider { private final ResourceLinks resourceLinks; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultChangesetToChangesetDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultChangesetToChangesetDtoMapper.java index 0a8b6203bf..759ab18f30 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultChangesetToChangesetDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultChangesetToChangesetDtoMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -45,7 +46,6 @@ import sonia.scm.security.gpg.PublicKeyStore; import sonia.scm.security.gpg.RawGpgKey; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; import java.util.List; import java.util.Optional; import java.util.function.Function; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultRepositoryLinkProvider.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultRepositoryLinkProvider.java index 1c5937040e..f6b046ccfe 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultRepositoryLinkProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DefaultRepositoryLinkProvider.java @@ -24,10 +24,9 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.repository.NamespaceAndName; -import javax.inject.Inject; - public class DefaultRepositoryLinkProvider implements RepositoryLinkProvider { private final ResourceLinks resourceLinks; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffRootResource.java index 24fc55436f..5efd28b62c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/DiffRootResource.java @@ -28,6 +28,17 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Pattern; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import sonia.scm.NotFoundException; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.api.DiffCommandBuilder; @@ -38,17 +49,6 @@ import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.util.HttpUtil; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.constraints.Min; -import javax.validation.constraints.Pattern; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; import java.io.IOException; public class DiffRootResource { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/EitherRoleOrVerbs.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/EitherRoleOrVerbs.java index b0f6ad1ca6..682b61be3e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/EitherRoleOrVerbs.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/EitherRoleOrVerbs.java @@ -24,8 +24,9 @@ package sonia.scm.api.v2.resources; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/EitherRoleOrVerbsValidator.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/EitherRoleOrVerbsValidator.java index 25f12d0aee..b4e942c633 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/EitherRoleOrVerbsValidator.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/EitherRoleOrVerbsValidator.java @@ -25,12 +25,11 @@ package sonia.scm.api.v2.resources; import com.google.common.base.Strings; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; - public class EitherRoleOrVerbsValidator implements ConstraintValidator { private static final Logger LOG = LoggerFactory.getLogger(EitherRoleOrVerbsValidator.class); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryCollectionToDtoMapper.java index e59b4fe1f9..fc5c9d47d7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryCollectionToDtoMapper.java @@ -24,12 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.PageResult; import sonia.scm.repository.Changeset; import sonia.scm.repository.Repository; -import javax.inject.Inject; - public class FileHistoryCollectionToDtoMapper extends ChangesetCollectionToDtoMapperBase { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryRootResource.java index b1769ff29c..9aad28f0b1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/FileHistoryRootResource.java @@ -28,6 +28,14 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import lombok.extern.slf4j.Slf4j; import sonia.scm.PageResult; import sonia.scm.repository.Changeset; @@ -38,14 +46,6 @@ import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; import java.io.IOException; import static sonia.scm.ContextEntry.ContextBuilder.entity; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GlobalPermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GlobalPermissionResource.java index fe67c1ddaf..7a8862d71c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GlobalPermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GlobalPermissionResource.java @@ -30,16 +30,15 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - @OpenAPIDefinition(tags = { @Tag(name = "Permissions", description = "Permission related endpoints") }) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionResource.java index 90ee95148d..1aca1a0e65 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionResource.java @@ -31,6 +31,16 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; import sonia.scm.group.GroupPermissions; @@ -38,16 +48,6 @@ import sonia.scm.search.SearchRequest; import sonia.scm.search.SearchUtil; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; import java.util.function.Predicate; import static com.google.common.base.Strings.isNullOrEmpty; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionToDtoMapper.java index 958d11b4b8..8bcf141251 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupCollectionToDtoMapper.java @@ -24,11 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.PageResult; import sonia.scm.group.Group; import sonia.scm.group.GroupPermissions; -import javax.inject.Inject; import java.util.Optional; import static java.util.Optional.empty; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java index 8881470216..a84aa5b1f5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java @@ -28,12 +28,12 @@ import com.fasterxml.jackson.annotation.JsonInclude; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.validation.constraints.Pattern; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.Pattern; import java.time.Instant; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupPermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupPermissionResource.java index 9847b0558e..476b9ce2ee 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupPermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupPermissionResource.java @@ -30,19 +30,19 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; import sonia.scm.security.PermissionPermissions; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; import java.util.Arrays; import java.util.Collection; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java index 00a41d7526..08850a10e1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java @@ -30,21 +30,20 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - public class GroupResource { private final GroupToGroupDtoMapper groupToGroupDtoMapper; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupRootResource.java index e16c17b18b..8fa718959d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupRootResource.java @@ -26,10 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.tags.Tag; - -import javax.inject.Inject; -import javax.inject.Provider; -import javax.ws.rs.Path; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.ws.rs.Path; /** * RESTful Web Service Resource to manage groups and their members. diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupToGroupDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupToGroupDtoMapper.java index 87bdf37bac..5118d472c8 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupToGroupDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupToGroupDtoMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Mapper; import org.mapstruct.ObjectFactory; import sonia.scm.group.Group; @@ -34,7 +35,6 @@ import sonia.scm.security.PermissionPermissions; import sonia.scm.user.UserManager; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IdResourceManagerAdapter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IdResourceManagerAdapter.java index 6a7158fad0..50334c59aa 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IdResourceManagerAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IdResourceManagerAdapter.java @@ -25,12 +25,12 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; +import jakarta.ws.rs.core.Response; import sonia.scm.Manager; import sonia.scm.ModelObject; import sonia.scm.NotFoundException; import sonia.scm.PageResult; -import javax.ws.rs.core.Response; import java.util.Optional; import java.util.function.Function; import java.util.function.Predicate; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IncomingChangesetCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IncomingChangesetCollectionToDtoMapper.java index 1c698238ed..a9a99acd83 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IncomingChangesetCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IncomingChangesetCollectionToDtoMapper.java @@ -24,12 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.PageResult; import sonia.scm.repository.Changeset; import sonia.scm.repository.Repository; -import javax.inject.Inject; - public class IncomingChangesetCollectionToDtoMapper extends ChangesetCollectionToDtoMapper { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IncomingRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IncomingRootResource.java index f1b5e07566..5e4a0ffd64 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IncomingRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IncomingRootResource.java @@ -29,6 +29,16 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.Pattern; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import sonia.scm.PageResult; import sonia.scm.repository.Changeset; import sonia.scm.repository.ChangesetPagingResult; @@ -43,16 +53,6 @@ import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.util.HttpUtil; import sonia.scm.web.VndMediaType; -import javax.validation.constraints.Min; -import javax.validation.constraints.Pattern; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; import java.io.IOException; import static sonia.scm.api.v2.resources.DiffRootResource.DIFF_FORMAT_VALUES_REGEX; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java index 968171159e..659475b61d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java @@ -29,8 +29,10 @@ import com.google.common.collect.Lists; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Link; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.apache.shiro.SecurityUtils; import sonia.scm.SCMContextProvider; +import sonia.scm.config.ConfigValue; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.config.ScmConfiguration; import sonia.scm.group.GroupPermissions; @@ -45,7 +47,6 @@ import sonia.scm.security.PermissionPermissions; import sonia.scm.user.UserPermissions; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; @@ -61,18 +62,21 @@ public class IndexDtoGenerator extends HalAppenderMapper { private final ScmConfiguration configuration; private final InitializationFinisher initializationFinisher; private final SearchEngine searchEngine; + private final boolean disableFeedback; @Inject public IndexDtoGenerator(ResourceLinks resourceLinks, SCMContextProvider scmContextProvider, ScmConfiguration configuration, InitializationFinisher initializationFinisher, - SearchEngine searchEngine) { + SearchEngine searchEngine, + @ConfigValue(key = "disableFeedback", defaultValue = "false", description = "Disable feedback links in frontend page footer") Boolean disableFeedback) { this.resourceLinks = resourceLinks; this.scmContextProvider = scmContextProvider; this.configuration = configuration; this.initializationFinisher = initializationFinisher; this.searchEngine = searchEngine; + this.disableFeedback = disableFeedback; } public IndexDto generate() { @@ -86,7 +90,7 @@ public class IndexDtoGenerator extends HalAppenderMapper { builder.self(resourceLinks.index().self()); builder.single(link("uiPlugins", resourceLinks.uiPluginCollection().self())); - embeddedBuilder.with("feedback", new FeedbackDto(Boolean.getBoolean("sonia.scm.disableFeedback"))); + embeddedBuilder.with("feedback", new FeedbackDto(disableFeedback)); if (initializationFinisher.isFullyInitialized()) { return handleNormalIndex(builder, embeddedBuilder); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexResource.java index 7af2daa8d7..c96d66c011 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexResource.java @@ -31,16 +31,15 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; import sonia.scm.security.AllowAnonymousAccess; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; - @OpenAPIDefinition( security = { @SecurityRequirement(name = "Basic_Authentication"), diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InitializationResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InitializationResource.java index 1bd3ad77a2..d0dcbedd1a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InitializationResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InitializationResource.java @@ -24,12 +24,12 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; import sonia.scm.initialization.InitializationStep; import sonia.scm.initialization.InitializationStepResource; -import javax.inject.Inject; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; import java.util.Set; import static sonia.scm.ContextEntry.ContextBuilder.entity; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InstalledPluginResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InstalledPluginResource.java index 90ef2fbc97..c798727409 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InstalledPluginResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InstalledPluginResource.java @@ -29,20 +29,20 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import sonia.scm.plugin.AvailablePlugin; import sonia.scm.plugin.InstalledPlugin; import sonia.scm.plugin.PluginManager; import sonia.scm.plugin.PluginPermissions; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; import java.util.List; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InternalRepositoryExceptionMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InternalRepositoryExceptionMapper.java index 198249a900..5473a3d026 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InternalRepositoryExceptionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InternalRepositoryExceptionMapper.java @@ -24,13 +24,12 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.Provider; import sonia.scm.api.rest.ContextualExceptionMapper; import sonia.scm.repository.InternalRepositoryException; -import javax.inject.Inject; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.Provider; - @Provider public class InternalRepositoryExceptionMapper extends ContextualExceptionMapper { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InvalidationResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InvalidationResource.java index c0a4ccb093..1e22b331bf 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InvalidationResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/InvalidationResource.java @@ -30,15 +30,14 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; import sonia.scm.cache.CacheManager; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.search.IndexRebuilder; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.POST; -import javax.ws.rs.Path; - @OpenAPIDefinition(tags = { @Tag(name = "Invalidations", description = "Invalidations of different resources like caches and search index") }) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/LinkEnricherAutoRegistration.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/LinkEnricherAutoRegistration.java index 66adbcaea3..5594d7bcb8 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/LinkEnricherAutoRegistration.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/LinkEnricherAutoRegistration.java @@ -24,13 +24,13 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.Extension; -import javax.inject.Inject; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; import java.util.Set; /** diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeDtoFactory.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeDtoFactory.java index 23acf24b62..d55b5e7e97 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeDtoFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeDtoFactory.java @@ -27,6 +27,7 @@ package sonia.scm.api.v2.resources; import com.google.common.base.Strings; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.apache.shiro.SecurityUtils; import sonia.scm.config.ScmConfiguration; import sonia.scm.group.GroupCollector; @@ -35,8 +36,6 @@ import sonia.scm.user.User; import sonia.scm.user.UserPermissions; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; - import static de.otto.edison.hal.Embedded.embeddedBuilder; import static de.otto.edison.hal.Link.link; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java index 4291193fa5..442eca8a5c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java @@ -32,23 +32,22 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.Request; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; import org.apache.shiro.authc.credential.PasswordService; import sonia.scm.user.UserManager; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Request; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; - /** * RESTful Web Service Resource to get currently logged in users. diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MetricsIndexEnricher.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MetricsIndexEnricher.java index 98d3bafe5f..79846dee83 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MetricsIndexEnricher.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MetricsIndexEnricher.java @@ -24,12 +24,12 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import org.apache.shiro.SecurityUtils; import sonia.scm.metrics.MonitoringSystem; import sonia.scm.plugin.Extension; -import javax.inject.Inject; -import javax.inject.Provider; import java.util.List; import java.util.Set; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MetricsResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MetricsResource.java index 5df1648e03..9fe2c4d5e6 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MetricsResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MetricsResource.java @@ -30,18 +30,18 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import org.apache.shiro.SecurityUtils; import sonia.scm.NotFoundException; import sonia.scm.metrics.MonitoringSystem; import sonia.scm.metrics.ScrapeTarget; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; import java.util.HashMap; import java.util.Map; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsRootResource.java index 45e59562a6..35d95ea874 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsRootResource.java @@ -28,18 +28,18 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.repository.Modifications; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; import java.io.IOException; public class ModificationsRootResource { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java index ec545402b7..ec6e44a0db 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ModificationsToDtoMapper.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.AfterMapping; import org.mapstruct.Context; import org.mapstruct.Mapper; @@ -37,8 +38,6 @@ import sonia.scm.repository.Removed; import sonia.scm.repository.Renamed; import sonia.scm.repository.Repository; -import javax.inject.Inject; - import static de.otto.edison.hal.Links.linkingTo; @Mapper diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceCollectionResource.java index 10d33ab0fa..8b53cf0443 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceCollectionResource.java @@ -29,14 +29,13 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; import sonia.scm.repository.NamespaceManager; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - public class NamespaceCollectionResource { private final NamespaceManager manager; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceCollectionToDtoMapper.java index e9b584dc78..29b2e389c9 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceCollectionToDtoMapper.java @@ -26,9 +26,9 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; +import jakarta.inject.Inject; import sonia.scm.repository.Namespace; -import javax.inject.Inject; import java.util.Collection; import static de.otto.edison.hal.Embedded.embeddedBuilder; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java index 9ea37e55f7..8cfc3462d4 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java @@ -32,6 +32,17 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import lombok.extern.slf4j.Slf4j; import sonia.scm.NotFoundException; import sonia.scm.repository.Namespace; @@ -39,17 +50,6 @@ import sonia.scm.repository.NamespaceManager; import sonia.scm.repository.RepositoryPermission; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; import java.net.URI; import java.util.Optional; import java.util.function.Predicate; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceResource.java index c369f00ee4..0f010b5d50 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceResource.java @@ -31,12 +31,12 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import sonia.scm.repository.NamespaceManager; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; import static sonia.scm.ContextEntry.ContextBuilder.entity; import static sonia.scm.NotFoundException.notFound; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceRootResource.java index bf0757a057..470e38158e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceRootResource.java @@ -26,10 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.tags.Tag; - -import javax.inject.Inject; -import javax.inject.Provider; -import javax.ws.rs.Path; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.ws.rs.Path; /** * RESTful Web Service Resource to manage namespaces. diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceStrategyResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceStrategyResource.java index e03ea1ef5a..77bf1594f3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceStrategyResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceStrategyResource.java @@ -26,16 +26,16 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; import io.swagger.v3.oas.annotations.Operation; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.UriInfo; import sonia.scm.repository.NamespaceStrategy; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.UriInfo; import java.util.List; import java.util.Set; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceToNamespaceDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceToNamespaceDtoMapper.java index 1a42551c00..0932fefec1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceToNamespaceDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespaceToNamespaceDtoMapper.java @@ -28,6 +28,7 @@ import com.google.common.annotations.VisibleForTesting; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Link; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ObjectFactory; @@ -38,7 +39,6 @@ import sonia.scm.search.SearchEngine; import sonia.scm.search.SearchableType; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NoBlankStrings.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NoBlankStrings.java index fc2da51cb1..126bb67504 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NoBlankStrings.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NoBlankStrings.java @@ -24,8 +24,9 @@ package sonia.scm.api.v2.resources; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NoBlankStringsValidator.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NoBlankStringsValidator.java index 97577d5890..4d4542adb5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NoBlankStringsValidator.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NoBlankStringsValidator.java @@ -24,8 +24,9 @@ package sonia.scm.api.v2.resources; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; + import java.util.Collection; public class NoBlankStringsValidator implements ConstraintValidator { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NotificationResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NotificationResource.java index 63ae180ea8..50d2547177 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NotificationResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NotificationResource.java @@ -34,6 +34,19 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; +import jakarta.ws.rs.sse.Sse; +import jakarta.ws.rs.sse.SseEventSink; import sonia.scm.notifications.NotificationChannelId; import sonia.scm.notifications.NotificationStore; import sonia.scm.notifications.StoredNotification; @@ -44,19 +57,6 @@ import sonia.scm.sse.Registration; import sonia.scm.sse.SseResponse; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriInfo; -import javax.ws.rs.sse.Sse; -import javax.ws.rs.sse.SseEventSink; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PasswordChangeDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PasswordChangeDto.java index c8613b7c71..35cf8a0ee4 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PasswordChangeDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PasswordChangeDto.java @@ -24,10 +24,10 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.NotEmpty; import lombok.Getter; import lombok.Setter; import lombok.ToString; -import javax.validation.constraints.NotEmpty; @Getter @Setter diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PasswordOverwriteDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PasswordOverwriteDto.java index e21ce43055..25a10e583a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PasswordOverwriteDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PasswordOverwriteDto.java @@ -24,10 +24,10 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.NotEmpty; import lombok.Getter; import lombok.Setter; import lombok.ToString; -import javax.validation.constraints.NotEmpty; @Getter @Setter diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PendingPluginResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PendingPluginResource.java index 68dc07629a..b9d23fcc6a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PendingPluginResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PendingPluginResource.java @@ -31,18 +31,18 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.lifecycle.Restarter; import sonia.scm.plugin.PendingPlugins; import sonia.scm.plugin.PluginManager; import sonia.scm.plugin.PluginPermissions; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; import java.util.List; import static de.otto.edison.hal.Link.link; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionCollectionToDtoMapper.java index a8cd5a1841..da7c18eaf0 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionCollectionToDtoMapper.java @@ -25,10 +25,10 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import sonia.scm.security.PermissionDescriptor; import sonia.scm.security.PermissionPermissions; -import javax.inject.Inject; import java.util.Collection; import static de.otto.edison.hal.Link.link; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionListDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionListDto.java index 1cfd13d3ad..e32191d103 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionListDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionListDto.java @@ -26,13 +26,12 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import javax.validation.constraints.NotNull; - @Getter @Setter @AllArgsConstructor diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionOverviewToPermissionOverviewDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionOverviewToPermissionOverviewDtoMapper.java index dde0653d0a..58f94edf0d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionOverviewToPermissionOverviewDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionOverviewToPermissionOverviewDtoMapper.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; +import jakarta.inject.Inject; import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.ObjectFactory; @@ -32,7 +33,6 @@ import sonia.scm.group.GroupManager; import sonia.scm.repository.Repository; import sonia.scm.user.PermissionOverview; -import javax.inject.Inject; import java.util.List; import java.util.Objects; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginCenterAuthResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginCenterAuthResource.java index c51828f3c4..3d14c8dc54 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginCenterAuthResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginCenterAuthResource.java @@ -32,6 +32,20 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.annotation.Nullable; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.FormParam; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriBuilder; +import jakarta.ws.rs.core.UriInfo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -53,20 +67,6 @@ import sonia.scm.user.UserDisplayManager; import sonia.scm.util.HttpUtil; import sonia.scm.web.VndMediaType; -import javax.annotation.Nullable; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.ws.rs.DELETE; -import javax.ws.rs.FormParam; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; import java.io.IOException; import java.net.URI; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDtoMapper.java index 96e2be74dd..55a3578315 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginDtoMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import com.google.common.base.Strings; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.MappingTarget; @@ -36,7 +37,6 @@ import sonia.scm.plugin.Plugin; import sonia.scm.plugin.PluginInformation; import sonia.scm.plugin.PluginPermissions; -import javax.inject.Inject; import java.util.List; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginRootResource.java index 3251e9ca5d..d79a7b81cb 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginRootResource.java @@ -26,10 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.tags.Tag; - -import javax.inject.Inject; -import javax.inject.Provider; -import javax.ws.rs.Path; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.ws.rs.Path; @OpenAPIDefinition(tags = { @Tag(name = "Plugin Management", description = "Plugin management related endpoints") diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginSetDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginSetDtoMapper.java index d3f2d35b4d..2c6e787c4a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginSetDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginSetDtoMapper.java @@ -24,10 +24,10 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.plugin.AvailablePlugin; import sonia.scm.plugin.PluginSet; -import javax.inject.Inject; import java.util.Collection; import java.util.Comparator; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginSetsInstallDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginSetsInstallDto.java index 833b9881ab..09ed69c8ef 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginSetsInstallDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginSetsInstallDto.java @@ -24,12 +24,12 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import javax.validation.constraints.NotNull; import java.util.Set; @Getter diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginWizardStartupResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginWizardStartupResource.java index 25eee7de36..dae7652fe3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginWizardStartupResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PluginWizardStartupResource.java @@ -31,6 +31,16 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import sonia.scm.initialization.InitializationStepResource; import sonia.scm.lifecycle.PluginWizardStartupAction; import sonia.scm.lifecycle.PrivilegedStartupAction; @@ -42,16 +52,6 @@ import sonia.scm.security.AccessTokenCookieIssuer; import sonia.scm.web.VndMediaType; import sonia.scm.web.security.AdministrationContext; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import java.util.List; import java.util.Locale; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/QueryResultMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/QueryResultMapper.java index 2d63991f1e..8f0bbb9c11 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/QueryResultMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/QueryResultMapper.java @@ -31,6 +31,9 @@ import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; import de.otto.edison.hal.paging.NumberedPaging; import de.otto.edison.hal.paging.PagingRel; +import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; +import jakarta.inject.Inject; import lombok.Data; import org.mapstruct.AfterMapping; import org.mapstruct.Context; @@ -44,9 +47,6 @@ import sonia.scm.search.Hit; import sonia.scm.search.QueryResult; import sonia.scm.web.EdisonHalAppender; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.inject.Inject; import java.util.EnumSet; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryBasedResourceProvider.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryBasedResourceProvider.java index 8b150c6582..04ab545b52 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryBasedResourceProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryBasedResourceProvider.java @@ -24,8 +24,8 @@ package sonia.scm.api.v2.resources; -import javax.inject.Inject; -import javax.inject.Provider; +import jakarta.inject.Inject; +import jakarta.inject.Provider; public class RepositoryBasedResourceProvider { private final Provider tagRootResource; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java index e8ded70fe9..b4bc2bf07c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java @@ -31,6 +31,17 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import org.apache.shiro.SecurityUtils; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryInitializer; @@ -41,17 +52,6 @@ import sonia.scm.search.SearchUtil; import sonia.scm.user.User; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Predicate; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionToDtoMapper.java index aa05b38d52..739134e86e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionToDtoMapper.java @@ -24,11 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.PageResult; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryPermissions; -import javax.inject.Inject; import java.util.Optional; import static java.util.Optional.empty; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java index 9dee059407..5f652c18bd 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java @@ -28,14 +28,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; import java.time.Instant; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryExportInformationToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryExportInformationToDtoMapper.java index 96607fb666..72e7c4c717 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryExportInformationToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryExportInformationToDtoMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import com.google.common.annotations.VisibleForTesting; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -35,8 +36,6 @@ import sonia.scm.importexport.ExportStatus; import sonia.scm.importexport.RepositoryExportInformation; import sonia.scm.repository.Repository; -import javax.inject.Inject; - import static de.otto.edison.hal.Link.link; @Mapper diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryExportResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryExportResource.java index 5115ae4487..c0b01ad1f3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryExportResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryExportResource.java @@ -32,6 +32,22 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.Pattern; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; +import jakarta.ws.rs.core.UriInfo; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -58,22 +74,6 @@ import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.util.IOUtil; import sonia.scm.web.VndMediaType; -import javax.validation.Valid; -import javax.validation.constraints.Pattern; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; -import javax.ws.rs.core.UriInfo; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryImportResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryImportResource.java index 4d50a96df3..a5fe54713d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryImportResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryImportResource.java @@ -35,6 +35,23 @@ import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; +import jakarta.ws.rs.core.UriInfo; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -55,23 +72,6 @@ import sonia.scm.repository.api.ImportFailedException; import sonia.scm.web.VndMediaType; import sonia.scm.web.api.DtoValidator; -import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; -import javax.ws.rs.Consumes; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.WebApplicationException; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; -import javax.ws.rs.core.UriInfo; import java.io.IOException; import java.io.InputStream; import java.net.URI; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPathsResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPathsResource.java index 51083c8959..dfbdfbb7ac 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPathsResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPathsResource.java @@ -29,18 +29,18 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.UriInfo; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.RepositoryPathCollector; import sonia.scm.repository.RepositoryPaths; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.UriInfo; import java.io.IOException; public class RepositoryPathsResource { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java index 75dc0f11f9..8bcac97420 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java @@ -26,16 +26,14 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; -import javax.validation.constraints.NotEmpty; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Pattern; - import java.util.Collection; @Getter @Setter @ToString @NoArgsConstructor diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java index e0bfda0824..017f6cc3f5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java @@ -31,6 +31,17 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import lombok.extern.slf4j.Slf4j; import sonia.scm.AlreadyExistsException; import sonia.scm.NotFoundException; @@ -41,17 +52,6 @@ import sonia.scm.repository.RepositoryPermission; import sonia.scm.repository.RepositoryPermissions; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; import java.net.URI; import java.util.Optional; import java.util.function.Predicate; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionToRepositoryPermissionDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionToRepositoryPermissionDtoMapper.java index fea730bf9a..bebfe8ab8d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionToRepositoryPermissionDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionToRepositoryPermissionDtoMapper.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.AfterMapping; import org.mapstruct.Context; import org.mapstruct.Mapper; @@ -36,7 +37,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryPermission; import sonia.scm.repository.RepositoryPermissions; -import javax.inject.Inject; import java.util.Optional; import static de.otto.edison.hal.Link.link; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRenameDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRenameDto.java index 6f082a0b88..7e145f953e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRenameDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRenameDto.java @@ -24,12 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.Pattern; import lombok.Getter; import lombok.NoArgsConstructor; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.Pattern; - @Getter @NoArgsConstructor public class RepositoryRenameDto { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java index 1196a64d99..199e23e422 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java @@ -30,6 +30,17 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.event.ScmEventBus; import sonia.scm.repository.HealthCheckService; import sonia.scm.repository.NamespaceAndName; @@ -39,17 +50,6 @@ import sonia.scm.repository.RepositoryPermissions; import sonia.scm.search.ReindexRepositoryEvent; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; import java.util.Optional; import java.util.function.Predicate; import java.util.function.Supplier; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java index bd82ac4210..5011b6c0c0 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java @@ -31,21 +31,20 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRoleManager; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; - public class RepositoryRoleCollectionResource { private static final int DEFAULT_PAGE_SIZE = 10; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionToDtoMapper.java index 2642919e25..f9af389e3f 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionToDtoMapper.java @@ -24,11 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.PageResult; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRolePermissions; -import javax.inject.Inject; import java.util.Optional; import static java.util.Optional.empty; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleDto.java index 1174ea48af..31af47decd 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleDto.java @@ -27,10 +27,10 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.validation.constraints.NotEmpty; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import javax.validation.constraints.NotEmpty; import java.time.Instant; import java.util.Collection; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java index c9367cf655..cd5db49ccf 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java @@ -30,21 +30,20 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRoleManager; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - public class RepositoryRoleResource { private final RepositoryRoleDtoToRepositoryRoleMapper dtoToRepositoryRoleMapper; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleRootResource.java index b2c94c8074..49d1b9c1d8 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleRootResource.java @@ -26,10 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.tags.Tag; - -import javax.inject.Inject; -import javax.inject.Provider; -import javax.ws.rs.Path; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.ws.rs.Path; /** * RESTful web service resource to manage repository roles. diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleToRepositoryRoleDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleToRepositoryRoleDtoMapper.java index 75174fe5f0..e42f6fafbf 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleToRepositoryRoleDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleToRepositoryRoleDtoMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ObjectFactory; @@ -33,8 +34,6 @@ import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRolePermissions; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; - import static de.otto.edison.hal.Embedded.embeddedBuilder; import static de.otto.edison.hal.Link.link; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRootResource.java index e65fee4f6d..9fb290f91a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRootResource.java @@ -26,10 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.tags.Tag; - -import javax.inject.Inject; -import javax.inject.Provider; -import javax.ws.rs.Path; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.ws.rs.Path; /** * RESTful Web Service Resource to manage repositories. diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java index b277083b39..f72dc1980a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryToRepositoryDtoMapper.java @@ -27,6 +27,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Link; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; import org.mapstruct.AfterMapping; import org.mapstruct.Mapper; @@ -52,7 +53,6 @@ import sonia.scm.search.SearchableType; import sonia.scm.web.EdisonHalAppender; import sonia.scm.web.api.RepositoryToHalMapper; -import javax.inject.Inject; import java.util.List; import java.util.Set; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeCollectionResource.java index 0da33cf308..1e08a2dbcd 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeCollectionResource.java @@ -29,14 +29,13 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; import sonia.scm.repository.RepositoryManager; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - public class RepositoryTypeCollectionResource { private RepositoryManager repositoryManager; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeCollectionToDtoMapper.java index 40e33910a6..a6e0857510 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeCollectionToDtoMapper.java @@ -24,10 +24,9 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.repository.RepositoryType; -import javax.inject.Inject; - public class RepositoryTypeCollectionToDtoMapper extends CollectionToDtoMapper { private final ResourceLinks resourceLinks; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeResource.java index 7793504558..ccf79f8423 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeResource.java @@ -28,17 +28,16 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryType; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - public class RepositoryTypeResource { private RepositoryManager repositoryManager; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeRootResource.java index 24b51f8a12..c5c8ebd2d2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeRootResource.java @@ -24,9 +24,9 @@ package sonia.scm.api.v2.resources; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.ws.rs.Path; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.ws.rs.Path; /** * RESTful Web Service Resource to get available repository types. diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapper.java index 6b34efe051..60982ed809 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryTypeToRepositoryTypeDtoMapper.java @@ -27,6 +27,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Link; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Mapper; import org.mapstruct.ObjectFactory; import sonia.scm.repository.RepositoryPermissions; @@ -34,8 +35,6 @@ import sonia.scm.repository.RepositoryType; import sonia.scm.repository.api.Command; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; - import static de.otto.edison.hal.Embedded.embeddedBuilder; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryVerbResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryVerbResource.java index 4b09335db9..3a9423fc76 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryVerbResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryVerbResource.java @@ -29,14 +29,13 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; import sonia.scm.security.RepositoryPermissionProvider; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; - /** * RESTful Web Service Resource to get available repository verbs. */ diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java index 064b8d2288..dd61371190 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java @@ -26,10 +26,10 @@ package sonia.scm.api.v2.resources; import com.google.inject.OutOfScopeException; import com.google.inject.ProvisionException; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.security.gpg.UserPublicKeyResource; -import javax.inject.Inject; -import javax.inject.Provider; import java.net.URI; import java.net.URISyntaxException; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResteasyViolationExceptionToErrorDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResteasyViolationExceptionToErrorDtoMapper.java index 7132067499..b262b5a43b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResteasyViolationExceptionToErrorDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResteasyViolationExceptionToErrorDtoMapper.java @@ -24,14 +24,14 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; import org.mapstruct.AfterMapping; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.MappingTarget; import org.slf4j.MDC; -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ScmConfigurationToConfigDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ScmConfigurationToConfigDtoMapper.java index 6288211004..ef83a203a2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ScmConfigurationToConfigDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ScmConfigurationToConfigDtoMapper.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.AfterMapping; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -34,8 +35,6 @@ import sonia.scm.config.ConfigurationPermissions; import sonia.scm.config.ScmConfiguration; import sonia.scm.security.AnonymousMode; -import javax.inject.Inject; - import static de.otto.edison.hal.Link.link; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParameters.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParameters.java index a11e9e66a1..6447781544 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParameters.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParameters.java @@ -25,18 +25,17 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Parameter; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.UriInfo; import lombok.Getter; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Size; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.PathParam; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.UriInfo; - @Getter class SearchParameters { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParametersLimitedToNamespace.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParametersLimitedToNamespace.java index 2e9e3171e2..9d4321485a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParametersLimitedToNamespace.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParametersLimitedToNamespace.java @@ -25,10 +25,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Parameter; +import jakarta.ws.rs.PathParam; import lombok.Getter; -import javax.ws.rs.PathParam; - @Getter class SearchParametersLimitedToNamespace extends SearchParameters { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParametersLimitedToRepository.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParametersLimitedToRepository.java index ad983ff4a7..c18ebc1a75 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParametersLimitedToRepository.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchParametersLimitedToRepository.java @@ -25,10 +25,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Parameter; +import jakarta.ws.rs.PathParam; import lombok.Getter; -import javax.ws.rs.PathParam; - @Getter class SearchParametersLimitedToRepository extends SearchParameters { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchResource.java index 41280af69f..5943ba6fd7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SearchResource.java @@ -32,6 +32,13 @@ import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.BeanParam; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; @@ -42,13 +49,6 @@ import sonia.scm.search.SearchEngine; import sonia.scm.search.SearchableType; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.BeanParam; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; import java.util.Collection; import java.util.Collections; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java index 97bff82d2b..dd1b3c3ba1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SingleResourceManagerAdapter.java @@ -25,13 +25,13 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; +import jakarta.ws.rs.core.Response; import sonia.scm.ConcurrentModificationException; import sonia.scm.IllegalIdentifierChangeException; import sonia.scm.Manager; import sonia.scm.ModelObject; import sonia.scm.NotFoundException; -import javax.ws.rs.core.Response; import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SourceRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SourceRootResource.java index 791576c9e1..d442384654 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SourceRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/SourceRootResource.java @@ -25,6 +25,13 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; +import jakarta.inject.Inject; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; import sonia.scm.repository.BrowserResult; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.api.BrowseCommandBuilder; @@ -32,13 +39,6 @@ import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; import java.io.IOException; import static sonia.scm.ContextEntry.ContextBuilder.entity; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagRequestDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagRequestDto.java index 03a6e26dfa..aaf3441613 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagRequestDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagRequestDto.java @@ -24,13 +24,12 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import lombok.Getter; import lombok.Setter; import org.hibernate.validator.constraints.Length; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; - import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; import static sonia.scm.repository.Tag.VALID_REV; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagRootResource.java index 0f8e40c639..9b59fb821c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagRootResource.java @@ -31,6 +31,15 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.NotFoundException; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; @@ -42,15 +51,6 @@ import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.repository.api.TagCommandBuilder; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; import java.io.IOException; import java.net.URI; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagToTagDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagToTagDtoMapper.java index 290ad757aa..380436802c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagToTagDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/TagToTagDtoMapper.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Context; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -36,7 +37,6 @@ import sonia.scm.repository.RepositoryPermissions; import sonia.scm.repository.Tag; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; import java.time.Instant; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIPluginDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIPluginDtoMapper.java index 19e8c9024e..64d099b95c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIPluginDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIPluginDtoMapper.java @@ -26,12 +26,11 @@ package sonia.scm.api.v2.resources; import com.google.common.base.Strings; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; import sonia.scm.plugin.InstalledPlugin; import sonia.scm.util.HttpUtil; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; - import java.util.Collections; import java.util.Set; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIPluginResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIPluginResource.java index f4f3d6233f..a73347d743 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIPluginResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIPluginResource.java @@ -28,17 +28,17 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import sonia.scm.plugin.PluginLoader; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.plugin.InstalledPlugin; +import sonia.scm.plugin.PluginLoader; import sonia.scm.security.AllowAnonymousAccess; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIRootResource.java index 8fbda0ef3d..104c5c11dd 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UIRootResource.java @@ -24,9 +24,9 @@ package sonia.scm.api.v2.resources; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.ws.rs.Path; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.ws.rs.Path; @Path("v2/ui") public class UIRootResource { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java index ba91365c3c..cff37ebf2e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java @@ -25,10 +25,9 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.validation.constraints.Pattern; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; import java.time.Instant; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateInfoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateInfoMapper.java index c7843c122b..d6253ac42d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateInfoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateInfoMapper.java @@ -26,13 +26,12 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ObjectFactory; import sonia.scm.admin.UpdateInfo; -import javax.inject.Inject; - import static de.otto.edison.hal.Links.linkingTo; @Mapper diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java index 90fb81a34a..7ac6e4bc97 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java @@ -24,7 +24,7 @@ package sonia.scm.api.v2.resources; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.NotNull; interface UpdatePermissionListDto { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java index 9b50ba04df..7b05d12e78 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java @@ -25,11 +25,11 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; import java.time.Instant; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryPermissionDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryPermissionDto.java index c726ad5ca5..98ff1b3997 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryPermissionDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryPermissionDto.java @@ -24,9 +24,9 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.Pattern; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.Pattern; import java.util.Collection; interface UpdateRepositoryPermissionDto { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java index 499c0da7dd..a970817d64 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java @@ -24,7 +24,8 @@ package sonia.scm.api.v2.resources; -import javax.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotEmpty; + import java.time.Instant; import java.util.Collection; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java index a4b359c005..fe2806e6d2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java @@ -24,11 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; import java.time.Instant; interface UpdateUserDto { diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserApiKeyResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserApiKeyResource.java index 257051a45c..7328effcae 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserApiKeyResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserApiKeyResource.java @@ -32,25 +32,25 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import sonia.scm.ContextEntry; import sonia.scm.security.ApiKey; import sonia.scm.security.ApiKeyService; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import java.net.URI; -import static javax.ws.rs.core.Response.Status.CREATED; +import static jakarta.ws.rs.core.Response.Status.CREATED; import static sonia.scm.NotFoundException.notFound; @Path("v2/users/{id}/api_keys") diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java index 12d5294769..1a7d3399f6 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java @@ -31,6 +31,16 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DefaultValue; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Response; import org.apache.shiro.authc.credential.PasswordService; import sonia.scm.search.SearchRequest; import sonia.scm.search.SearchUtil; @@ -39,16 +49,6 @@ import sonia.scm.user.UserManager; import sonia.scm.user.UserPermissions; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.Response; import java.util.function.Predicate; import static com.google.common.base.Strings.isNullOrEmpty; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionToDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionToDtoMapper.java index 11eb21c91d..0ee2c03ebd 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionToDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionToDtoMapper.java @@ -24,11 +24,11 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Inject; import sonia.scm.PageResult; import sonia.scm.user.User; import sonia.scm.user.UserPermissions; -import javax.inject.Inject; import java.util.Optional; import static java.util.Optional.empty; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java index 26f120b870..804c443b91 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java @@ -28,14 +28,14 @@ import com.fasterxml.jackson.annotation.JsonInclude; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.Pattern; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import sonia.scm.util.ValidationUtil; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; import java.time.Instant; @NoArgsConstructor @Getter @Setter diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java index 773d344937..6052830237 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java @@ -30,20 +30,20 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; import sonia.scm.security.PermissionPermissions; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; import java.util.Arrays; import java.util.Collection; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java index 8066341308..88f83b04da 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java @@ -30,24 +30,23 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import org.apache.shiro.authc.credential.PasswordService; import sonia.scm.user.PermissionOverviewCollector; import sonia.scm.user.User; import sonia.scm.user.UserManager; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.validation.Valid; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - public class UserResource { private final UserDtoToUserMapper dtoToUserMapper; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserRootResource.java index 263cca5747..8eafdc5e10 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserRootResource.java @@ -26,10 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.tags.Tag; - -import javax.inject.Inject; -import javax.inject.Provider; -import javax.ws.rs.Path; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.ws.rs.Path; /** * RESTful Web Service Resource to manage users. diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserToUserDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserToUserDtoMapper.java index eff1db4a6d..9bbd5afd66 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserToUserDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserToUserDtoMapper.java @@ -26,11 +26,11 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ObjectFactory; import sonia.scm.admin.ScmConfigurationStore; -import sonia.scm.config.ScmConfiguration; import sonia.scm.group.GroupPermissions; import sonia.scm.security.PermissionPermissions; import sonia.scm.user.User; @@ -38,8 +38,6 @@ import sonia.scm.user.UserManager; import sonia.scm.user.UserPermissions; import sonia.scm.web.EdisonHalAppender; -import javax.inject.Inject; - import static de.otto.edison.hal.Embedded.embeddedBuilder; import static de.otto.edison.hal.Link.link; import static de.otto.edison.hal.Links.linkingTo; diff --git a/scm-webapp/src/main/java/sonia/scm/cache/DefaultCacheConfigurationLoader.java b/scm-webapp/src/main/java/sonia/scm/cache/DefaultCacheConfigurationLoader.java index da19c897c7..41133af3d1 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/DefaultCacheConfigurationLoader.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/DefaultCacheConfigurationLoader.java @@ -27,19 +27,15 @@ package sonia.scm.cache; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.collect.Iterators; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContext; import sonia.scm.plugin.PluginLoader; -//~--- JDK imports ------------------------------------------------------------ - -import javax.inject.Inject; import java.io.File; - import java.io.IOException; import java.net.URL; - import java.util.Enumeration; import java.util.Iterator; diff --git a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfiguration.java b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfiguration.java index 5724e58d12..e96b3d6afd 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfiguration.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfiguration.java @@ -25,12 +25,12 @@ package sonia.scm.cache; import com.google.common.base.MoreObjects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.io.Serializable; @XmlRootElement(name = "cache") diff --git a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfigurationReader.java b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfigurationReader.java index 40ca8a22f9..edf148c6d5 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfigurationReader.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheConfigurationReader.java @@ -28,26 +28,20 @@ package sonia.scm.cache; import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; - +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; - import java.net.MalformedURLException; import java.net.URL; - import java.util.Iterator; import java.util.List; import java.util.Map; -import javax.inject.Inject; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; - /** * @author Sebastian Sdorra */ diff --git a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheFactory.java b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheFactory.java index fb598e68d9..1339271614 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheFactory.java @@ -26,8 +26,8 @@ package sonia.scm.cache; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.binder.cache.GuavaCacheMetrics; +import jakarta.inject.Inject; -import javax.inject.Inject; import java.util.Collections; public class GuavaCacheFactory { diff --git a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManager.java b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManager.java index 35a8a4e4f3..06a3c03f45 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManager.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManager.java @@ -26,10 +26,10 @@ package sonia.scm.cache; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Singleton; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; diff --git a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManagerConfiguration.java b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManagerConfiguration.java index 24a828f954..12e7397f4d 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManagerConfiguration.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/GuavaCacheManagerConfiguration.java @@ -26,14 +26,14 @@ package sonia.scm.cache; //~--- JDK imports ------------------------------------------------------------ +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; + import java.util.Collections; import java.util.List; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/cache/GuavaNamedCacheConfiguration.java b/scm-webapp/src/main/java/sonia/scm/cache/GuavaNamedCacheConfiguration.java index 396dbe00c4..5d3a174e0e 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/GuavaNamedCacheConfiguration.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/GuavaNamedCacheConfiguration.java @@ -26,13 +26,14 @@ package sonia.scm.cache; //~--- JDK imports ------------------------------------------------------------ +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.config.WebappConfigProvider; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlRootElement; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; @@ -66,7 +67,7 @@ public class GuavaNamedCacheConfiguration extends GuavaCacheConfiguration { @Override void setCopyStrategy(CopyStrategy copyStrategy) { - setValue("copyStrategy", copyStrategy, super::setCopyStrategy, propertyName -> of(System.getProperty(propertyName)).map(CopyStrategy::valueOf).orElse(null)); + setValue("copyStrategy", copyStrategy, super::setCopyStrategy, propertyName -> of(WebappConfigProvider.resolveAsString(propertyName).orElse("")).map(CopyStrategy::valueOf).orElse(null)); } @Override @@ -115,15 +116,15 @@ public class GuavaNamedCacheConfiguration extends GuavaCacheConfiguration { } private void setIntegerValue(String propertyName, Integer originalValue, Consumer setter) { - setValue(propertyName, originalValue, setter, Integer::getInteger); + setValue(propertyName, originalValue, setter, value -> WebappConfigProvider.resolveAsInteger(value).orElse(null)); } private void setLongValue(String propertyName, Long originalValue, Consumer setter) { - setValue(propertyName, originalValue, setter, Long::getLong); + setValue(propertyName, originalValue, setter, value -> WebappConfigProvider.resolveAsLong(value).orElse(null)); } private void setBooleanValue(String propertyName, Boolean originalValue, Consumer setter) { - setValue(propertyName, originalValue, setter, Boolean::getBoolean); + setValue(propertyName, originalValue, setter, value -> WebappConfigProvider.resolveAsBoolean(value).orElse(null)); } private void setValue(String propertyName, T originalValue, Consumer setter, Function systemPropertyReader) { diff --git a/scm-webapp/src/main/java/sonia/scm/cache/XmlCopyStrategyAdapter.java b/scm-webapp/src/main/java/sonia/scm/cache/XmlCopyStrategyAdapter.java index abf38ddf61..1b11e4a272 100644 --- a/scm-webapp/src/main/java/sonia/scm/cache/XmlCopyStrategyAdapter.java +++ b/scm-webapp/src/main/java/sonia/scm/cache/XmlCopyStrategyAdapter.java @@ -26,7 +26,7 @@ package sonia.scm.cache; //~--- JDK imports ------------------------------------------------------------ -import javax.xml.bind.annotation.adapters.XmlAdapter; +import jakarta.xml.bind.annotation.adapters.XmlAdapter; /** * diff --git a/scm-webapp/src/main/java/sonia/scm/cli/CliExceptionHandlerFactory.java b/scm-webapp/src/main/java/sonia/scm/cli/CliExceptionHandlerFactory.java index 38be692343..14c8c1165d 100644 --- a/scm-webapp/src/main/java/sonia/scm/cli/CliExceptionHandlerFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/cli/CliExceptionHandlerFactory.java @@ -24,10 +24,9 @@ package sonia.scm.cli; +import jakarta.inject.Inject; import sonia.scm.i18n.I18nCollector; -import javax.inject.Inject; - class CliExceptionHandlerFactory { private final I18nCollector i18nCollector; diff --git a/scm-webapp/src/main/java/sonia/scm/cli/CliProcessor.java b/scm-webapp/src/main/java/sonia/scm/cli/CliProcessor.java index e9009dd362..9185a3ecb0 100644 --- a/scm-webapp/src/main/java/sonia/scm/cli/CliProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/cli/CliProcessor.java @@ -25,11 +25,11 @@ package sonia.scm.cli; import com.google.inject.Injector; +import jakarta.inject.Inject; import picocli.AutoComplete; import picocli.CommandLine; import sonia.scm.plugin.PluginLoader; -import javax.inject.Inject; import java.util.Locale; import java.util.ResourceBundle; diff --git a/scm-webapp/src/main/java/sonia/scm/cli/CommandRegistry.java b/scm-webapp/src/main/java/sonia/scm/cli/CommandRegistry.java index 315c54394b..3e012de3e8 100644 --- a/scm-webapp/src/main/java/sonia/scm/cli/CommandRegistry.java +++ b/scm-webapp/src/main/java/sonia/scm/cli/CommandRegistry.java @@ -24,8 +24,9 @@ package sonia.scm.cli; -import javax.inject.Inject; -import javax.inject.Singleton; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/cli/PermissionDescriptionResolverFactory.java b/scm-webapp/src/main/java/sonia/scm/cli/PermissionDescriptionResolverFactory.java index dbb7f70c1d..c4a123bbdb 100644 --- a/scm-webapp/src/main/java/sonia/scm/cli/PermissionDescriptionResolverFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/cli/PermissionDescriptionResolverFactory.java @@ -24,9 +24,9 @@ package sonia.scm.cli; +import jakarta.inject.Inject; import sonia.scm.i18n.I18nCollector; -import javax.inject.Inject; import java.util.Locale; class PermissionDescriptionResolverFactory { diff --git a/scm-webapp/src/main/java/sonia/scm/cli/PingCommand.java b/scm-webapp/src/main/java/sonia/scm/cli/PingCommand.java index d3690a46d2..4572195e2e 100644 --- a/scm-webapp/src/main/java/sonia/scm/cli/PingCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/cli/PingCommand.java @@ -24,10 +24,9 @@ package sonia.scm.cli; +import jakarta.inject.Inject; import picocli.CommandLine; -import javax.inject.Inject; - @CommandLine.Command(name = "ping", hidden = true) class PingCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/cli/RegisteredCommandCollector.java b/scm-webapp/src/main/java/sonia/scm/cli/RegisteredCommandCollector.java index 2c63cecfd4..6f82e06273 100644 --- a/scm-webapp/src/main/java/sonia/scm/cli/RegisteredCommandCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/cli/RegisteredCommandCollector.java @@ -24,13 +24,13 @@ package sonia.scm.cli; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.InstalledPlugin; import sonia.scm.plugin.PluginLoader; import sonia.scm.plugin.ScmModule; -import javax.inject.Inject; import java.util.Collections; import java.util.HashSet; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/cli/RegisteredCommandNode.java b/scm-webapp/src/main/java/sonia/scm/cli/RegisteredCommandNode.java index 6a4b1da296..3e59627b59 100644 --- a/scm-webapp/src/main/java/sonia/scm/cli/RegisteredCommandNode.java +++ b/scm-webapp/src/main/java/sonia/scm/cli/RegisteredCommandNode.java @@ -24,12 +24,9 @@ package sonia.scm.cli; -import lombok.Getter; - import java.util.ArrayList; import java.util.List; -@Getter class RegisteredCommandNode { private final String name; private final Class command; @@ -39,4 +36,16 @@ class RegisteredCommandNode { this.name = name; this.command = command; } + + public String getName() { + return name; + } + + public Class getCommand() { + return command; + } + + public List getChildren() { + return children; + } } diff --git a/scm-webapp/src/main/java/sonia/scm/cli/VersionCommand.java b/scm-webapp/src/main/java/sonia/scm/cli/VersionCommand.java index 2d010edee4..21892a54d1 100644 --- a/scm-webapp/src/main/java/sonia/scm/cli/VersionCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/cli/VersionCommand.java @@ -25,12 +25,11 @@ package sonia.scm.cli; import com.google.common.collect.ImmutableMap; +import jakarta.inject.Inject; import lombok.Value; import picocli.CommandLine; import sonia.scm.SCMContextProvider; -import javax.inject.Inject; - @CommandLine.Command(name = "version") class VersionCommand implements Runnable{ diff --git a/scm-webapp/src/main/java/sonia/scm/config/LoggingConfiguration.java b/scm-webapp/src/main/java/sonia/scm/config/LoggingConfiguration.java new file mode 100644 index 0000000000..0aa22b41b4 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/config/LoggingConfiguration.java @@ -0,0 +1,135 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.config; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.encoder.PatternLayoutEncoder; +import ch.qos.logback.core.ConsoleAppender; +import ch.qos.logback.core.rolling.FixedWindowRollingPolicy; +import ch.qos.logback.core.rolling.RollingFileAppender; +import ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy; +import ch.qos.logback.core.util.FileSize; +import com.google.common.base.Strings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@SuppressWarnings("java:S3740") // Accept usage of not-parameterized classes +public class LoggingConfiguration { + + private static final Logger LOG = LoggerFactory.getLogger(LoggingConfiguration.class); + + private final ServerConfigYaml.LogConfig config; + private final LoggerContext loggerContext; + + public LoggingConfiguration() { + this.config = new ServerConfigParser().parse().getLog(); + this.loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory(); + } + + public void configureLogging() { + if (!Strings.isNullOrEmpty(System.getProperty("logback.configurationFile"))) { + LOG.info("Found logback configuration file. Ignoring logging configuration from config.yml."); + return; + } + + ch.qos.logback.classic.Logger root = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME); + loggerContext.reset(); + root.setLevel(Level.valueOf(config.getRootLevel())); + configureSpecificLoggers(); + + if (config.isEnableFileAppender()) { + RollingFileAppender fileAppender = configureFileLogger(); + root.addAppender(fileAppender); + } + + if (config.isEnableConsoleAppender()) { + ConsoleAppender consoleAppender = configureConsoleLogger(); + root.addAppender(consoleAppender); + } + } + + private void configureSpecificLoggers() { + config.getLogger().forEach(this::addLogger); + } + + private ConsoleAppender configureConsoleLogger() { + PatternLayoutEncoder consoleLogEncoder = new PatternLayoutEncoder(); + consoleLogEncoder.setContext(loggerContext); + consoleLogEncoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n"); + consoleLogEncoder.start(); + + ConsoleAppender logConsoleAppender = new ConsoleAppender<>(); + logConsoleAppender.setContext(loggerContext); + logConsoleAppender.setName("STDOUT"); + logConsoleAppender.setEncoder(consoleLogEncoder); + logConsoleAppender.start(); + + return logConsoleAppender; + } + + private RollingFileAppender configureFileLogger() { + String logDirectory = config.getLogDir(); + + if (Strings.isNullOrEmpty(logDirectory)) { + logDirectory = new ScmLogFilePropertyDefiner().getPropertyValue(); + } + + RollingFileAppender logFileAppender = new RollingFileAppender(); + logFileAppender.setFile(logDirectory + "/scm-manager.log"); + logFileAppender.setContext(loggerContext); + logFileAppender.setName("FILE"); + + // Create File Logger + PatternLayoutEncoder fileLogEncoder = new PatternLayoutEncoder(); + fileLogEncoder.setContext(loggerContext); + fileLogEncoder.setPattern("%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n"); + fileLogEncoder.start(); + logFileAppender.setEncoder(fileLogEncoder); + logFileAppender.setAppend(true); + + FixedWindowRollingPolicy logFilePolicy = new FixedWindowRollingPolicy(); + logFilePolicy.setContext(loggerContext); + logFilePolicy.setParent(logFileAppender); + logFilePolicy.setFileNamePattern(logDirectory + "/scm-manager-%i.log"); + logFilePolicy.setMinIndex(1); + logFilePolicy.setMaxIndex(10); + logFilePolicy.start(); + + SizeBasedTriggeringPolicy triggeringPolicy = new SizeBasedTriggeringPolicy(); + triggeringPolicy.setMaxFileSize(FileSize.valueOf("10MB")); + triggeringPolicy.start(); + + logFileAppender.setTriggeringPolicy(triggeringPolicy); + logFileAppender.setRollingPolicy(logFilePolicy); + logFileAppender.start(); + + return logFileAppender; + } + + private void addLogger(String name, String level) { + loggerContext.getLogger(name).setLevel(Level.valueOf((level))); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/ScmLogFilePropertyDefiner.java b/scm-webapp/src/main/java/sonia/scm/config/ScmLogFilePropertyDefiner.java similarity index 94% rename from scm-webapp/src/main/java/sonia/scm/ScmLogFilePropertyDefiner.java rename to scm-webapp/src/main/java/sonia/scm/config/ScmLogFilePropertyDefiner.java index a839d95770..14775d1322 100644 --- a/scm-webapp/src/main/java/sonia/scm/ScmLogFilePropertyDefiner.java +++ b/scm-webapp/src/main/java/sonia/scm/config/ScmLogFilePropertyDefiner.java @@ -22,12 +22,16 @@ * SOFTWARE. */ -package sonia.scm; +package sonia.scm.config; //~--- non-JDK imports -------------------------------------------------------- import ch.qos.logback.core.PropertyDefinerBase; import com.google.common.annotations.VisibleForTesting; +import sonia.scm.ConfigurationException; +import sonia.scm.Platform; +import sonia.scm.SCMContext; +import sonia.scm.SCMContextProvider; import sonia.scm.util.SystemUtil; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-webapp/src/main/java/sonia/scm/config/ServerConfigParser.java b/scm-webapp/src/main/java/sonia/scm/config/ServerConfigParser.java new file mode 100644 index 0000000000..3ff291886d --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/config/ServerConfigParser.java @@ -0,0 +1,67 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.config; + +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.representer.Representer; +import sonia.scm.ConfigurationException; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +public class ServerConfigParser { + + private static final String CONFIGURATION_FILE = "/config.yml"; + + ServerConfigParser() { + } + + ServerConfigYaml parse() { + return parse(this.getClass().getResource(CONFIGURATION_FILE)); + } + + ServerConfigYaml parse(URL configFile) { + if (configFile == null) { + // TODO add link + throw new ConfigurationException(""" + Could not find config.yml. + + If you have upgraded from an older SCM-Manager version, you have to migrate your server-config.xml + to the new format using the official instructions: + + + """); + } + try (InputStream is = configFile.openStream()) { + Representer representer = new Representer(new DumperOptions()); + representer.getPropertyUtils().setSkipMissingProperties(true); + return new Yaml(representer).loadAs(is, ServerConfigYaml.class); + } catch (IOException e) { + throw new ConfigurationException("Could not parse config.yml", e); + } + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/config/ServerConfigYaml.java b/scm-webapp/src/main/java/sonia/scm/config/ServerConfigYaml.java new file mode 100644 index 0000000000..fe7f84335f --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/config/ServerConfigYaml.java @@ -0,0 +1,132 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.config; + +import java.util.HashMap; +import java.util.Map; + +public class ServerConfigYaml { + + private static final String SCM_PREFIX = "SCM_"; + + private LogConfig log = new LogConfig(); + + private Map webapp = new HashMap<>(); + + public static class LogConfig { + private String logDir = ""; + private String rootLevel = "INFO"; + private Map logger = new HashMap<>(); + private boolean enableFileAppender = true; + private boolean enableConsoleAppender = true; + + private LogConfig() {} + + public String getLogDir() { + return logDir; + } + + public void setLogDir(String logDir) { + this.logDir = logDir; + } + + public String getRootLevel() { + return getEnvWithDefault("LOG_ROOT_LEVEL", rootLevel); + } + + public Map getLogger() { + String envLoggers = System.getenv("SCM_LOG_LOGGER"); + if (envLoggers != null) { + String[] envLoggerEntries = envLoggers.split(","); + Map loggerMap = new HashMap<>(); + for (String envLoggerEntry : envLoggerEntries) { + if (!envLoggerEntry.contains(":")) { + // Skip because invalid format + continue; + } + String[] envLoggerEntryParts = envLoggerEntry.trim().split(":"); + loggerMap.put(envLoggerEntryParts[0], envLoggerEntryParts[1]); + } + return loggerMap; + } + return logger; + } + + public void setRootLevel(String rootLevel) { + this.rootLevel = rootLevel; + } + + public void setLogger(Map logger) { + this.logger = logger; + } + + public boolean isEnableFileAppender() { + return getEnvWithDefault("LOG_ENABLE_FILE_APPENDER", enableFileAppender); + } + + public void setEnableFileAppender(boolean enableFileAppender) { + this.enableFileAppender = enableFileAppender; + } + + public boolean isEnableConsoleAppender() { + return getEnvWithDefault("LOG_ENABLE_CONSOLE_APPENDER", enableConsoleAppender); + } + + public void setEnableConsoleAppender(boolean enableConsoleAppender) { + this.enableConsoleAppender = enableConsoleAppender; + } + } + + public LogConfig getLog() { + return log; + } + + public void setLog(LogConfig log) { + this.log = log; + } + + + public Map getWebapp() { + return webapp; + } + + public void setWebapp(Map webapp) { + this.webapp = webapp; + } + + static String getEnvWithDefault(String envKey, String configValue) { + String value = getEnv(envKey); + return value != null ? value : configValue; + } + + static boolean getEnvWithDefault(String envKey, boolean configValue) { + String value = getEnv(envKey); + return value != null ? Boolean.getBoolean(value) : configValue; + } + + private static String getEnv(String envKey) { + return System.getenv(SCM_PREFIX + envKey); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/debug/DebugHook.java b/scm-webapp/src/main/java/sonia/scm/debug/DebugHook.java index 101610e837..8d279c5bde 100644 --- a/scm-webapp/src/main/java/sonia/scm/debug/DebugHook.java +++ b/scm-webapp/src/main/java/sonia/scm/debug/DebugHook.java @@ -28,14 +28,13 @@ import com.github.legman.ReferenceType; import com.github.legman.Subscribe; import com.google.common.base.Function; import com.google.common.collect.Collections2; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.EagerSingleton; import sonia.scm.repository.Changeset; import sonia.scm.repository.PostReceiveRepositoryHookEvent; -import javax.inject.Inject; - /** * {@link PostReceiveRepositoryHookEvent} which stores receives data and passes it to the {@link DebugService}. * diff --git a/scm-webapp/src/main/java/sonia/scm/debug/DebugHookData.java b/scm-webapp/src/main/java/sonia/scm/debug/DebugHookData.java index fd361d30fe..f34255c5a6 100644 --- a/scm-webapp/src/main/java/sonia/scm/debug/DebugHookData.java +++ b/scm-webapp/src/main/java/sonia/scm/debug/DebugHookData.java @@ -24,11 +24,12 @@ package sonia.scm.debug; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; + import java.util.Collection; import java.util.Date; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; /** * Received data from repository hook event. diff --git a/scm-webapp/src/main/java/sonia/scm/debug/DebugResource.java b/scm-webapp/src/main/java/sonia/scm/debug/DebugResource.java index 0dc9a39aba..43307ebda8 100644 --- a/scm-webapp/src/main/java/sonia/scm/debug/DebugResource.java +++ b/scm-webapp/src/main/java/sonia/scm/debug/DebugResource.java @@ -24,14 +24,14 @@ package sonia.scm.debug; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import sonia.scm.repository.NamespaceAndName; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; import java.util.Collection; /** diff --git a/scm-webapp/src/main/java/sonia/scm/filter/BaseUrlFilter.java b/scm-webapp/src/main/java/sonia/scm/filter/BaseUrlFilter.java index 43d24b97fb..ff0495d135 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/BaseUrlFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/BaseUrlFilter.java @@ -26,7 +26,11 @@ package sonia.scm.filter; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Inject; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import sonia.scm.Priority; import sonia.scm.config.ScmConfiguration; import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; @@ -34,12 +38,6 @@ import sonia.scm.web.filter.HttpFilter; import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import sonia.scm.Priority; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java b/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java index d254546ff0..c818376f61 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java @@ -27,27 +27,21 @@ package sonia.scm.filter; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.annotations.VisibleForTesting; - +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; - import org.slf4j.MDC; - +import sonia.scm.Priority; import sonia.scm.SCMContext; import sonia.scm.TransactionId; import sonia.scm.security.DefaultKeyGenerator; import sonia.scm.web.filter.HttpFilter; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import sonia.scm.Priority; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/filter/PropagatePrincipleFilter.java b/scm-webapp/src/main/java/sonia/scm/filter/PropagatePrincipleFilter.java index 6711d753a4..b55e521e78 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/PropagatePrincipleFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/PropagatePrincipleFilter.java @@ -28,6 +28,10 @@ package sonia.scm.filter; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Inject; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import sonia.scm.Priority; @@ -37,10 +41,6 @@ import sonia.scm.security.AnonymousMode; import sonia.scm.web.filter.HttpFilter; import sonia.scm.web.filter.PropagatePrincipleServletRequestWrapper; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-webapp/src/main/java/sonia/scm/filter/SecurityHeadersFilter.java b/scm-webapp/src/main/java/sonia/scm/filter/SecurityHeadersFilter.java index 652aa78361..50537fc56d 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/SecurityHeadersFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/SecurityHeadersFilter.java @@ -24,16 +24,16 @@ package sonia.scm.filter; +import jakarta.inject.Inject; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.Priority; import sonia.scm.SCMContextProvider; import sonia.scm.Stage; import sonia.scm.web.filter.HttpFilter; -import javax.inject.Inject; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Priority(7000) diff --git a/scm-webapp/src/main/java/sonia/scm/filter/StaticResourceFilter.java b/scm-webapp/src/main/java/sonia/scm/filter/StaticResourceFilter.java index eecd08a5c6..609076d492 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/StaticResourceFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/StaticResourceFilter.java @@ -27,17 +27,17 @@ package sonia.scm.filter; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Singleton; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.util.WebUtil; import sonia.scm.web.filter.HttpFilter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; diff --git a/scm-webapp/src/main/java/sonia/scm/filter/WebElementCollector.java b/scm-webapp/src/main/java/sonia/scm/filter/WebElementCollector.java index d37a2e90c5..9504a192bd 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/WebElementCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/WebElementCollector.java @@ -29,22 +29,17 @@ package sonia.scm.filter; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; import com.google.common.primitives.Ints; - +import jakarta.servlet.Filter; +import jakarta.servlet.Servlet; +import jakarta.servlet.http.HttpServlet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.Priorities; import sonia.scm.plugin.PluginLoader; import sonia.scm.plugin.WebElementExtension; -//~--- JDK imports ------------------------------------------------------------ - import java.util.List; -import javax.servlet.Filter; -import javax.servlet.Servlet; -import javax.servlet.http.HttpServlet; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/filter/WebElementModule.java b/scm-webapp/src/main/java/sonia/scm/filter/WebElementModule.java index eb5f2c1cc8..c7a5289d33 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/WebElementModule.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/WebElementModule.java @@ -28,18 +28,13 @@ package sonia.scm.filter; import com.google.inject.Scopes; import com.google.inject.servlet.ServletModule; - +import jakarta.servlet.Filter; +import jakarta.servlet.http.HttpServlet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.plugin.PluginLoader; import sonia.scm.plugin.WebElementDescriptor; -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.Filter; -import javax.servlet.http.HttpServlet; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupCollector.java b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupCollector.java index 8818e27596..9dde661778 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupCollector.java @@ -27,6 +27,8 @@ package sonia.scm.group; import com.cronutils.utils.VisibleForTesting; import com.github.legman.Subscribe; import com.google.common.collect.ImmutableSet; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.HandlerEventType; @@ -38,8 +40,6 @@ import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.user.UserEvent; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.HashSet; import java.util.Set; import java.util.stream.Stream; diff --git a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupDisplayManager.java b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupDisplayManager.java index 023e59de27..7a6598df68 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupDisplayManager.java +++ b/scm-webapp/src/main/java/sonia/scm/group/DefaultGroupDisplayManager.java @@ -24,12 +24,11 @@ package sonia.scm.group; +import jakarta.inject.Inject; import sonia.scm.GenericDisplayManager; import sonia.scm.search.SearchRequest; import sonia.scm.search.SearchUtil; -import javax.inject.Inject; - public class DefaultGroupDisplayManager extends GenericDisplayManager implements GroupDisplayManager { @Inject diff --git a/scm-webapp/src/main/java/sonia/scm/group/GroupIndexer.java b/scm-webapp/src/main/java/sonia/scm/group/GroupIndexer.java index af6b3f59f6..d362bf1b83 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/GroupIndexer.java +++ b/scm-webapp/src/main/java/sonia/scm/group/GroupIndexer.java @@ -26,6 +26,8 @@ package sonia.scm.group; import com.github.legman.Subscribe; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.plugin.Extension; import sonia.scm.search.HandlerEventIndexSyncer; import sonia.scm.search.Id; @@ -35,9 +37,6 @@ import sonia.scm.search.Indexer; import sonia.scm.search.SearchEngine; import sonia.scm.search.SerializableIndexTask; -import javax.inject.Inject; -import javax.inject.Singleton; - @Extension @Singleton public class GroupIndexer implements Indexer { diff --git a/scm-webapp/src/main/java/sonia/scm/group/UserGroupCache.java b/scm-webapp/src/main/java/sonia/scm/group/UserGroupCache.java index 81f3c0b4f1..148b2a5864 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/UserGroupCache.java +++ b/scm-webapp/src/main/java/sonia/scm/group/UserGroupCache.java @@ -24,13 +24,13 @@ package sonia.scm.group; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import sonia.scm.auditlog.AuditEntry; import sonia.scm.xml.XmlMapMultiStringAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.util.HashMap; import java.util.Map; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupAddMemberCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupAddMemberCommand.java index 9a6903fcb6..ad82f8ffe0 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupAddMemberCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupAddMemberCommand.java @@ -25,12 +25,12 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; -import javax.inject.Inject; import java.util.Arrays; @ParentCommand(GroupCommand.class) diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupCreateCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupCreateCommand.java index 7d19779de5..29c7d978f9 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupCreateCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupCreateCommand.java @@ -25,13 +25,12 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; -import javax.inject.Inject; - @ParentCommand(GroupCommand.class) @CommandLine.Command(name = "create") class GroupCreateCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupDeleteCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupDeleteCommand.java index 2f2dce31d3..b398dd282b 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupDeleteCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupDeleteCommand.java @@ -25,12 +25,12 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; -import javax.inject.Inject; import java.util.Collections; @CommandLine.Command(name = "delete", aliases = "rm") diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupGetCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupGetCommand.java index 018e08a600..3b8543c9e0 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupGetCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupGetCommand.java @@ -25,13 +25,12 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; -import javax.inject.Inject; - @ParentCommand(GroupCommand.class) @CommandLine.Command(name = "get") class GroupGetCommand implements Runnable{ diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupListCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupListCommand.java index 0a302ef47c..9d746a64fd 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupListCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupListCommand.java @@ -26,13 +26,13 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.Table; import sonia.scm.cli.TemplateRenderer; import sonia.scm.group.GroupManager; -import javax.inject.Inject; import java.util.Collection; import static java.util.stream.Collectors.toList; diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupModifyCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupModifyCommand.java index bef4c4ad18..c2fc1361ec 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupModifyCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupModifyCommand.java @@ -25,13 +25,12 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; -import javax.inject.Inject; - import static java.util.Arrays.asList; @ParentCommand(GroupCommand.class) diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionAddCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionAddCommand.java index cadd51192e..953a0763fb 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionAddCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionAddCommand.java @@ -25,6 +25,7 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.group.Group; @@ -32,7 +33,6 @@ import sonia.scm.group.GroupManager; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; -import javax.inject.Inject; import java.util.Collection; @ParentCommand(value = GroupCommand.class) diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionAvailableCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionAvailableCommand.java index 55650e8b67..33c534e979 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionAvailableCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionAvailableCommand.java @@ -24,6 +24,7 @@ package sonia.scm.group.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.PermissionDescriptionResolver; @@ -31,7 +32,6 @@ import sonia.scm.cli.Table; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; -import javax.inject.Inject; import java.util.Collection; import java.util.Map; diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionClearCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionClearCommand.java index e253dd9837..82f7b7f4ab 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionClearCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionClearCommand.java @@ -25,13 +25,13 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; import sonia.scm.security.PermissionAssigner; -import javax.inject.Inject; import java.util.Collections; @ParentCommand(value = GroupCommand.class) diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionListCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionListCommand.java index 4def5f6cc2..1e285ddd24 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionListCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionListCommand.java @@ -25,6 +25,7 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.PermissionDescriptionResolver; @@ -33,7 +34,6 @@ import sonia.scm.group.GroupManager; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; -import javax.inject.Inject; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionRemoveCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionRemoveCommand.java index 55369325b0..6089404868 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionRemoveCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupPermissionRemoveCommand.java @@ -25,6 +25,7 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.group.Group; @@ -32,7 +33,6 @@ import sonia.scm.group.GroupManager; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; -import javax.inject.Inject; import java.util.Arrays; import java.util.Collection; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupRemoveMemberCommand.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupRemoveMemberCommand.java index 36166ee568..0a5cfdbd2f 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupRemoveMemberCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupRemoveMemberCommand.java @@ -25,12 +25,12 @@ package sonia.scm.group.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; -import javax.inject.Inject; import java.util.Arrays; @ParentCommand(GroupCommand.class) diff --git a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupTemplateRenderer.java b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupTemplateRenderer.java index 338cae742c..204cab61d5 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/cli/GroupTemplateRenderer.java +++ b/scm-webapp/src/main/java/sonia/scm/group/cli/GroupTemplateRenderer.java @@ -25,6 +25,7 @@ package sonia.scm.group.cli; import com.google.common.collect.ImmutableMap; +import jakarta.inject.Inject; import sonia.scm.cli.CliContext; import sonia.scm.cli.ExitCode; import sonia.scm.cli.Table; @@ -32,7 +33,6 @@ import sonia.scm.cli.TemplateRenderer; import sonia.scm.group.Group; import sonia.scm.template.TemplateEngineFactory; -import javax.inject.Inject; import java.util.Collection; import java.util.Collections; import java.util.Map; diff --git a/scm-webapp/src/main/java/sonia/scm/i18n/I18nCollector.java b/scm-webapp/src/main/java/sonia/scm/i18n/I18nCollector.java index e9b507d5aa..19bbbad10f 100644 --- a/scm-webapp/src/main/java/sonia/scm/i18n/I18nCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/i18n/I18nCollector.java @@ -26,18 +26,16 @@ package sonia.scm.i18n; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.github.legman.Subscribe; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; import sonia.scm.SCMContextProvider; import sonia.scm.Stage; import sonia.scm.cache.Cache; import sonia.scm.cache.CacheManager; -import sonia.scm.lifecycle.RestartEvent; import sonia.scm.plugin.PluginLoader; import sonia.scm.util.JsonMerger; -import javax.inject.Inject; import java.io.IOException; import java.net.URL; import java.util.Enumeration; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentCheckStep.java b/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentCheckStep.java index 2d8ab0a287..6036b84463 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentCheckStep.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentCheckStep.java @@ -24,14 +24,14 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXB; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import sonia.scm.ContextEntry; import sonia.scm.repository.api.ImportFailedException; import sonia.scm.repository.api.IncompatibleEnvironmentForImportException; import sonia.scm.web.security.AdministrationContext; -import javax.inject.Inject; -import javax.xml.bind.JAXB; import java.io.InputStream; import static sonia.scm.importexport.FullScmRepositoryExporter.SCM_ENVIRONMENT_FILE_NAME; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentInformationXmlGenerator.java b/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentInformationXmlGenerator.java index e332a179ee..525b9f7ce8 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentInformationXmlGenerator.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentInformationXmlGenerator.java @@ -24,6 +24,8 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXB; import sonia.scm.ContextEntry; import sonia.scm.SCMContextProvider; import sonia.scm.plugin.InstalledPlugin; @@ -32,8 +34,6 @@ import sonia.scm.plugin.PluginManager; import sonia.scm.repository.api.ExportFailedException; import sonia.scm.util.SystemUtil; -import javax.inject.Inject; -import javax.xml.bind.JAXB; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.ArrayList; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentPluginDescriptor.java b/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentPluginDescriptor.java index df900c9cbc..aa918e3e33 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentPluginDescriptor.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentPluginDescriptor.java @@ -24,13 +24,12 @@ package sonia.scm.importexport; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import javax.xml.bind.annotation.XmlRootElement; - @XmlRootElement(name = "plugin") @AllArgsConstructor @NoArgsConstructor diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentPluginsDescriptor.java b/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentPluginsDescriptor.java index e908fc2114..65ef26b67b 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentPluginsDescriptor.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/EnvironmentPluginsDescriptor.java @@ -24,12 +24,12 @@ package sonia.scm.importexport; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import javax.xml.bind.annotation.XmlRootElement; import java.util.List; @XmlRootElement(name = "plugins") diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/ExportFileExtensionResolver.java b/scm-webapp/src/main/java/sonia/scm/importexport/ExportFileExtensionResolver.java index 7ebff929d0..87a72c73be 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/ExportFileExtensionResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/ExportFileExtensionResolver.java @@ -24,12 +24,11 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import sonia.scm.repository.Repository; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; -import javax.inject.Inject; - public class ExportFileExtensionResolver { private final RepositoryServiceFactory serviceFactory; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/ExportGarbageCollector.java b/scm-webapp/src/main/java/sonia/scm/importexport/ExportGarbageCollector.java index 69152b6448..04969cda56 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/ExportGarbageCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/ExportGarbageCollector.java @@ -24,12 +24,11 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import sonia.scm.Initable; import sonia.scm.SCMContextProvider; import sonia.scm.schedule.Scheduler; -import javax.inject.Inject; - public class ExportGarbageCollector implements Initable { private final ExportService exportService; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/ExportNotificationHandler.java b/scm-webapp/src/main/java/sonia/scm/importexport/ExportNotificationHandler.java index 62db8ef446..3000d81947 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/ExportNotificationHandler.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/ExportNotificationHandler.java @@ -24,13 +24,12 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import sonia.scm.notifications.Notification; import sonia.scm.notifications.NotificationSender; import sonia.scm.notifications.Type; import sonia.scm.repository.Repository; -import javax.inject.Inject; - public class ExportNotificationHandler { private final NotificationSender notificationSender; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/ExportService.java b/scm-webapp/src/main/java/sonia/scm/importexport/ExportService.java index 07ae06ba15..fa7c42b5d2 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/ExportService.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/ExportService.java @@ -24,6 +24,7 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import org.apache.shiro.SecurityUtils; import sonia.scm.NotFoundException; import sonia.scm.repository.Repository; @@ -36,7 +37,6 @@ import sonia.scm.store.DataStore; import sonia.scm.store.DataStoreFactory; import sonia.scm.user.User; -import javax.inject.Inject; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/FromBundleImporter.java b/scm-webapp/src/main/java/sonia/scm/importexport/FromBundleImporter.java index 68b8f7cb13..d9224aeec0 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/FromBundleImporter.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/FromBundleImporter.java @@ -25,6 +25,7 @@ package sonia.scm.importexport; import com.google.common.io.Files; +import jakarta.inject.Inject; import org.apache.shiro.SecurityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,7 +46,6 @@ import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.repository.work.WorkdirProvider; import sonia.scm.util.IOUtil; -import javax.inject.Inject; import java.io.File; import java.io.IOException; import java.io.InputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/FromUrlImporter.java b/scm-webapp/src/main/java/sonia/scm/importexport/FromUrlImporter.java index 5851cfcecd..696037f978 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/FromUrlImporter.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/FromUrlImporter.java @@ -25,6 +25,7 @@ package sonia.scm.importexport; import com.google.common.base.Strings; +import jakarta.inject.Inject; import lombok.Getter; import lombok.Setter; import org.apache.shiro.SecurityUtils; @@ -46,7 +47,6 @@ import sonia.scm.repository.api.PullResponse; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; -import javax.inject.Inject; import java.io.IOException; import java.util.function.Consumer; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryExporter.java b/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryExporter.java index 7deec6ff15..8fa9ec247e 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryExporter.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryExporter.java @@ -24,6 +24,7 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; @@ -38,7 +39,6 @@ import sonia.scm.util.Archives; import sonia.scm.util.IOUtil; import sonia.scm.web.security.AdministrationContext; -import javax.inject.Inject; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryImporter.java b/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryImporter.java index 8591db9c61..a20034478e 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryImporter.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryImporter.java @@ -25,6 +25,7 @@ package sonia.scm.importexport; import com.google.common.base.Strings; +import jakarta.inject.Inject; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream; @@ -33,10 +34,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ContextEntry; import sonia.scm.event.ScmEventBus; -import sonia.scm.repository.*; +import sonia.scm.repository.FullRepositoryImporter; +import sonia.scm.repository.Repository; +import sonia.scm.repository.RepositoryImportEvent; +import sonia.scm.repository.RepositoryManager; +import sonia.scm.repository.RepositoryPermission; +import sonia.scm.repository.RepositoryPermissions; import sonia.scm.repository.api.ImportFailedException; -import javax.inject.Inject; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/ImportNotificationHandler.java b/scm-webapp/src/main/java/sonia/scm/importexport/ImportNotificationHandler.java index 18274c24a3..3bdcc89f10 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/ImportNotificationHandler.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/ImportNotificationHandler.java @@ -24,13 +24,13 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import sonia.scm.notifications.Notification; import sonia.scm.notifications.NotificationSender; import sonia.scm.notifications.Type; import sonia.scm.repository.Repository; import sonia.scm.repository.api.PullResponse; -import javax.inject.Inject; import java.util.Map; class ImportNotificationHandler { diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/MetadataImportStep.java b/scm-webapp/src/main/java/sonia/scm/importexport/MetadataImportStep.java index a096795da4..e436d6bf8e 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/MetadataImportStep.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/MetadataImportStep.java @@ -24,6 +24,8 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXB; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -31,8 +33,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryPermission; -import javax.inject.Inject; -import javax.xml.bind.JAXB; import java.io.InputStream; import java.util.Collection; import java.util.Collections; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryExportInformation.java b/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryExportInformation.java index f8e655e95a..546bfd0b20 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryExportInformation.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryExportInformation.java @@ -24,16 +24,16 @@ package sonia.scm.importexport; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import sonia.scm.xml.XmlInstantAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportExportEncryption.java b/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportExportEncryption.java index a62690b196..e6ccd3b315 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportExportEncryption.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportExportEncryption.java @@ -26,9 +26,9 @@ package sonia.scm.importexport; import com.google.common.base.Strings; +import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import javax.crypto.Cipher; import javax.crypto.CipherInputStream; import javax.crypto.CipherOutputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportLoggerFactory.java b/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportLoggerFactory.java index 2113d3e868..90f8263487 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportLoggerFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportLoggerFactory.java @@ -24,6 +24,7 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.subject.Subject; @@ -32,7 +33,6 @@ import sonia.scm.store.BlobStore; import sonia.scm.store.BlobStoreFactory; import sonia.scm.util.IOUtil; -import javax.inject.Inject; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportStep.java b/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportStep.java index 3647572eac..f9d87533c9 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportStep.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryImportStep.java @@ -24,6 +24,7 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,7 +39,6 @@ import sonia.scm.repository.api.UnbundleCommandBuilder; import sonia.scm.repository.work.WorkdirProvider; import sonia.scm.util.IOUtil; -import javax.inject.Inject; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryMetadataXmlGenerator.java b/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryMetadataXmlGenerator.java index 162e7f4167..6705cdc715 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryMetadataXmlGenerator.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/RepositoryMetadataXmlGenerator.java @@ -24,6 +24,10 @@ package sonia.scm.importexport; +import jakarta.xml.bind.JAXB; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -32,10 +36,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryPermission; import sonia.scm.repository.api.ExportFailedException; -import javax.xml.bind.JAXB; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.Collection; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/ScmEnvironment.java b/scm-webapp/src/main/java/sonia/scm/importexport/ScmEnvironment.java index 307daedc5c..ba22ffd99f 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/ScmEnvironment.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/ScmEnvironment.java @@ -24,12 +24,11 @@ package sonia.scm.importexport; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import javax.xml.bind.annotation.XmlRootElement; - @XmlRootElement(name = "scm-environment") @Getter @Setter diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/ScmEnvironmentCompatibilityChecker.java b/scm-webapp/src/main/java/sonia/scm/importexport/ScmEnvironmentCompatibilityChecker.java index f780a243fd..81bf08ce54 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/ScmEnvironmentCompatibilityChecker.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/ScmEnvironmentCompatibilityChecker.java @@ -24,6 +24,7 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; @@ -31,7 +32,6 @@ import sonia.scm.plugin.PluginInformation; import sonia.scm.plugin.PluginManager; import sonia.scm.version.Version; -import javax.inject.Inject; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/StoreImportStep.java b/scm-webapp/src/main/java/sonia/scm/importexport/StoreImportStep.java index 3ba952f325..5748c6f667 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/StoreImportStep.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/StoreImportStep.java @@ -24,13 +24,13 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.Repository; import sonia.scm.update.UpdateEngine; -import javax.inject.Inject; import java.io.InputStream; import static sonia.scm.importexport.FullScmRepositoryExporter.STORE_DATA_FILE_NAME; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/TarArchiveRepositoryStoreExporter.java b/scm-webapp/src/main/java/sonia/scm/importexport/TarArchiveRepositoryStoreExporter.java index 62c99ded6b..551cf869a3 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/TarArchiveRepositoryStoreExporter.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/TarArchiveRepositoryStoreExporter.java @@ -24,6 +24,7 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; import org.slf4j.Logger; @@ -37,7 +38,6 @@ import sonia.scm.store.StoreExporter; import sonia.scm.store.StoreType; import sonia.scm.util.Archives; -import javax.inject.Inject; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/TarArchiveRepositoryStoreImporter.java b/scm-webapp/src/main/java/sonia/scm/importexport/TarArchiveRepositoryStoreImporter.java index db4fe86eb7..19cba41808 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/TarArchiveRepositoryStoreImporter.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/TarArchiveRepositoryStoreImporter.java @@ -24,6 +24,7 @@ package sonia.scm.importexport; +import jakarta.inject.Inject; import org.apache.commons.compress.archivers.ArchiveEntry; import org.apache.commons.compress.archivers.tar.TarArchiveInputStream; import sonia.scm.ContextEntry; @@ -33,7 +34,6 @@ import sonia.scm.store.RepositoryStoreImporter; import sonia.scm.store.StoreEntryMetaData; import sonia.scm.store.StoreType; -import javax.inject.Inject; import java.io.IOException; import java.io.InputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/initialization/DefaultInitializationFinisher.java b/scm-webapp/src/main/java/sonia/scm/initialization/DefaultInitializationFinisher.java index b867906a9f..2cfa8150e8 100644 --- a/scm-webapp/src/main/java/sonia/scm/initialization/DefaultInitializationFinisher.java +++ b/scm-webapp/src/main/java/sonia/scm/initialization/DefaultInitializationFinisher.java @@ -24,10 +24,10 @@ package sonia.scm.initialization; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.EagerSingleton; -import javax.inject.Inject; -import javax.inject.Provider; import java.util.List; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/initialization/InitializationAuthenticationService.java b/scm-webapp/src/main/java/sonia/scm/initialization/InitializationAuthenticationService.java index ae656655eb..c28f7b4c3e 100644 --- a/scm-webapp/src/main/java/sonia/scm/initialization/InitializationAuthenticationService.java +++ b/scm-webapp/src/main/java/sonia/scm/initialization/InitializationAuthenticationService.java @@ -24,6 +24,10 @@ package sonia.scm.initialization; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authc.AuthenticationException; import sonia.scm.security.AccessToken; import sonia.scm.security.AccessTokenBuilderFactory; @@ -32,10 +36,6 @@ import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; import sonia.scm.web.security.AdministrationContext; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.util.Set; import java.util.concurrent.TimeUnit; diff --git a/scm-webapp/src/main/java/sonia/scm/initialization/InitializationCookieIssuer.java b/scm-webapp/src/main/java/sonia/scm/initialization/InitializationCookieIssuer.java index a9e7061be4..4a638226ba 100644 --- a/scm-webapp/src/main/java/sonia/scm/initialization/InitializationCookieIssuer.java +++ b/scm-webapp/src/main/java/sonia/scm/initialization/InitializationCookieIssuer.java @@ -24,11 +24,10 @@ package sonia.scm.initialization; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.security.AccessToken; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * Generates cookies and invalidates initialization token cookies. * diff --git a/scm-webapp/src/main/java/sonia/scm/initialization/InitializationRealm.java b/scm-webapp/src/main/java/sonia/scm/initialization/InitializationRealm.java index fe71442c77..91d0508f30 100644 --- a/scm-webapp/src/main/java/sonia/scm/initialization/InitializationRealm.java +++ b/scm-webapp/src/main/java/sonia/scm/initialization/InitializationRealm.java @@ -24,6 +24,8 @@ package sonia.scm.initialization; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; @@ -37,9 +39,6 @@ import sonia.scm.security.AccessTokenResolver; import sonia.scm.security.BearerToken; import sonia.scm.user.User; -import javax.inject.Inject; -import javax.inject.Singleton; - import static com.google.common.base.Preconditions.checkArgument; @Extension diff --git a/scm-webapp/src/main/java/sonia/scm/initialization/InitializationWebTokenGenerator.java b/scm-webapp/src/main/java/sonia/scm/initialization/InitializationWebTokenGenerator.java index 0f6db0ccfd..31553f3d13 100644 --- a/scm-webapp/src/main/java/sonia/scm/initialization/InitializationWebTokenGenerator.java +++ b/scm-webapp/src/main/java/sonia/scm/initialization/InitializationWebTokenGenerator.java @@ -24,13 +24,12 @@ package sonia.scm.initialization; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; import org.apache.shiro.authc.AuthenticationToken; import sonia.scm.plugin.Extension; import sonia.scm.web.WebTokenGenerator; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; - @Extension public class InitializationWebTokenGenerator implements WebTokenGenerator { diff --git a/scm-webapp/src/main/java/sonia/scm/io/DefaultContentTypeResolver.java b/scm-webapp/src/main/java/sonia/scm/io/DefaultContentTypeResolver.java index c7831f8087..1b809beb70 100644 --- a/scm-webapp/src/main/java/sonia/scm/io/DefaultContentTypeResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/io/DefaultContentTypeResolver.java @@ -27,8 +27,8 @@ package sonia.scm.io; import com.cloudogu.spotter.ContentType; import com.cloudogu.spotter.ContentTypeDetector; import com.cloudogu.spotter.Language; +import jakarta.inject.Inject; -import javax.inject.Inject; import java.util.Collections; import java.util.Map; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/AdminAccountStartupAction.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/AdminAccountStartupAction.java index cd029eceb5..ca04b0cf89 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/AdminAccountStartupAction.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/AdminAccountStartupAction.java @@ -24,10 +24,14 @@ package sonia.scm.lifecycle; +import com.google.common.base.Strings; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.apache.shiro.authc.credential.PasswordService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContext; +import sonia.scm.config.ConfigValue; import sonia.scm.initialization.InitializationStep; import sonia.scm.plugin.Extension; import sonia.scm.security.PermissionAssigner; @@ -36,8 +40,6 @@ import sonia.scm.user.User; import sonia.scm.user.UserManager; import sonia.scm.web.security.AdministrationContext; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Collections; import static sonia.scm.ScmConstraintViolationException.Builder.doThrow; @@ -48,19 +50,31 @@ public class AdminAccountStartupAction implements InitializationStep { private static final Logger LOG = LoggerFactory.getLogger(AdminAccountStartupAction.class); - public static final String INITIAL_PASSWORD_PROPERTY = "scm.initialPassword"; - private static final String INITIAL_USER_PROPERTY = "scm.initialUser"; - private final PasswordService passwordService; private final UserManager userManager; private final PermissionAssigner permissionAssigner; private final RandomPasswordGenerator randomPasswordGenerator; private final AdministrationContext context; + private final String adminUserName; + private final String initialPassword; + private final Boolean skipAdminCreation; private String initialToken; @Inject - public AdminAccountStartupAction(PasswordService passwordService, UserManager userManager, PermissionAssigner permissionAssigner, RandomPasswordGenerator randomPasswordGenerator, AdministrationContext context) { + public AdminAccountStartupAction( + @ConfigValue(key = "initialUser", defaultValue = "scmadmin", description = "Initial user for admin account") String initialUser, + @ConfigValue(key = "initialPassword", defaultValue = "", description = "Initial password for admin account") String initialPassword, + @ConfigValue(key = "skipAdminCreation", defaultValue = "false", description = "Skip creation of initial admin user") Boolean skipAdminCreation, + PasswordService passwordService, + UserManager userManager, + PermissionAssigner permissionAssigner, + RandomPasswordGenerator randomPasswordGenerator, + AdministrationContext context + ) { + this.initialPassword = initialPassword; + this.adminUserName = initialUser; + this.skipAdminCreation = skipAdminCreation; this.passwordService = passwordService; this.userManager = userManager; this.permissionAssigner = permissionAssigner; @@ -71,7 +85,7 @@ public class AdminAccountStartupAction implements InitializationStep { } private void initialize() { - context.runAsAdmin((PrivilegedStartupAction)() -> { + context.runAsAdmin((PrivilegedStartupAction) () -> { if (shouldCreateAdminAccount() && !adminUserCreatedWithGivenPassword()) { createStartupToken(); } @@ -79,13 +93,11 @@ public class AdminAccountStartupAction implements InitializationStep { } @SuppressWarnings({"java:S2639", "java:S2629"}) // Yes, we use '.' as a regex here - // No, we do not need conditional execution for 'replaceAll' here + // No, we do not need conditional execution for 'replaceAll' here private boolean adminUserCreatedWithGivenPassword() { - String startupTokenByProperty = System.getProperty(INITIAL_PASSWORD_PROPERTY); - if (startupTokenByProperty != null) { - String adminUserName = System.getProperty(INITIAL_USER_PROPERTY, "scmadmin"); + if (!Strings.isNullOrEmpty(initialPassword)) { context.runAsAdmin((PrivilegedStartupAction) () -> - createAdminUser(adminUserName, "SCM Administrator", "scm@example.com", startupTokenByProperty)); + createAdminUser(adminUserName, "SCM Administrator", "scm@example.com", initialPassword)); LOG.info("================={}========================", adminUserName.replaceAll(".", "=")); LOG.info("== {} ==", adminUserName.replaceAll(".", " ")); LOG.info("== Created user '{}' with given password ==", adminUserName); @@ -138,7 +150,7 @@ public class AdminAccountStartupAction implements InitializationStep { } private boolean shouldCreateAdminAccount() { - return !Boolean.getBoolean("sonia.scm.skipAdminCreation") && (userManager.getAll().isEmpty() || onlyAnonymousUserExists()); + return !skipAdminCreation && (userManager.getAll().isEmpty() || onlyAnonymousUserExists()); } private boolean onlyAnonymousUserExists() { diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/AnonymousUserStartupAction.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/AnonymousUserStartupAction.java index b138c9c156..1e45d2efc3 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/AnonymousUserStartupAction.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/AnonymousUserStartupAction.java @@ -24,14 +24,13 @@ package sonia.scm.lifecycle; +import jakarta.inject.Inject; import sonia.scm.SCMContext; import sonia.scm.config.ScmConfiguration; import sonia.scm.plugin.Extension; import sonia.scm.security.AnonymousMode; import sonia.scm.user.UserManager; -import javax.inject.Inject; - @Extension public class AnonymousUserStartupAction implements PrivilegedStartupAction { diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/AuthenticatedGroupStartupAction.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/AuthenticatedGroupStartupAction.java index a5fb10d39a..6e39300b06 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/AuthenticatedGroupStartupAction.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/AuthenticatedGroupStartupAction.java @@ -25,12 +25,11 @@ package sonia.scm.lifecycle; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; import sonia.scm.plugin.Extension; -import javax.inject.Inject; - import static sonia.scm.group.GroupCollector.AUTHENTICATED; @Extension diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/BootstrapContextFilter.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/BootstrapContextFilter.java index b5094e2aba..c9b2b1aec4 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/BootstrapContextFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/BootstrapContextFilter.java @@ -28,13 +28,13 @@ package sonia.scm.lifecycle; import com.github.legman.Subscribe; import com.google.inject.servlet.GuiceFilter; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.event.ScmEventBus; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletException; import java.util.Optional; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/BootstrapContextListener.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/BootstrapContextListener.java index 32d7b04bd7..b1408e9c75 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/BootstrapContextListener.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/BootstrapContextListener.java @@ -21,22 +21,26 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.lifecycle; -import com.google.common.collect.ImmutableList; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.servlet.GuiceServletContextListener; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.SCMContext; +import sonia.scm.config.LoggingConfiguration; import sonia.scm.lifecycle.classloading.ClassLoaderLifeCycle; import sonia.scm.lifecycle.modules.ApplicationModuleProvider; import sonia.scm.lifecycle.modules.BootstrapModule; import sonia.scm.lifecycle.modules.CloseableModule; +import sonia.scm.lifecycle.modules.ConfigModule; import sonia.scm.lifecycle.modules.EagerSingletonModule; -import sonia.scm.SCMContext; import sonia.scm.lifecycle.modules.InjectionLifeCycle; import sonia.scm.lifecycle.modules.ModuleProvider; import sonia.scm.lifecycle.modules.ScmEventBusModule; @@ -44,13 +48,11 @@ import sonia.scm.lifecycle.modules.ScmInitializerModule; import sonia.scm.lifecycle.modules.ServletContextModule; import sonia.scm.lifecycle.modules.UpdateStepModule; import sonia.scm.lifecycle.view.SingleView; +import sonia.scm.plugin.ConfigurationResolver; import sonia.scm.plugin.PluginLoader; import sonia.scm.update.MigrationWizardModuleProvider; import sonia.scm.update.UpdateEngine; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; @@ -61,7 +63,7 @@ public class BootstrapContextListener extends GuiceServletContextListener { private static final Logger LOG = LoggerFactory.getLogger(BootstrapContextListener.class); - private ClassLoaderLifeCycle classLoaderLifeCycle = ClassLoaderLifeCycle.create(); + private final ClassLoaderLifeCycle classLoaderLifeCycle = ClassLoaderLifeCycle.create(); private ServletContext context; private InjectionLifeCycle injectionLifeCycle; @@ -81,6 +83,8 @@ public class BootstrapContextListener extends GuiceServletContextListener { @Override protected Injector getInjector() { + ConfigurationResolver configurationResolver = new ConfigurationResolver(); + configureLoggers(); Throwable startupError = SCMContext.getContext().getStartupError(); if (startupError != null) { LOG.error("received unrecoverable error during startup", startupError); @@ -90,7 +94,7 @@ public class BootstrapContextListener extends GuiceServletContextListener { return createStageOneInjector(SingleView.view("/templates/too-old.mustache", HttpServletResponse.SC_CONFLICT)); } else { try { - return createStageTwoInjector(); + return createStageTwoInjector(configurationResolver); } catch (Exception ex) { LOG.error("failed to create stage two injector", ex); return createStageOneInjector(SingleView.error(ex)); @@ -98,6 +102,10 @@ public class BootstrapContextListener extends GuiceServletContextListener { } } + private void configureLoggers() { + new LoggingConfiguration().configureLogging(); + } + @Override public void contextDestroyed(ServletContextEvent sce) { LOG.info("shutdown scm-manager context"); @@ -111,8 +119,8 @@ public class BootstrapContextListener extends GuiceServletContextListener { super.contextDestroyed(sce); } - private Injector createStageTwoInjector() { - PluginBootstrap pluginBootstrap = new PluginBootstrap(context, classLoaderLifeCycle); + private Injector createStageTwoInjector(ConfigurationResolver configurationResolver) { + PluginBootstrap pluginBootstrap = new PluginBootstrap(context, classLoaderLifeCycle, configurationResolver); ModuleProvider provider = createMigrationOrNormalModuleProvider(pluginBootstrap); return createStageTwoInjector(provider, pluginBootstrap.getPluginLoader()); @@ -154,12 +162,13 @@ public class BootstrapContextListener extends GuiceServletContextListener { private List createBootstrapModules(PluginLoader pluginLoader) { List modules = new ArrayList<>(createBaseModules()); + modules.add(new ConfigModule(pluginLoader)); modules.add(new BootstrapModule(pluginLoader)); return modules; } private List createBaseModules() { - return ImmutableList.of( + return List.of( new EagerSingletonModule(), new ScmInitializerModule(), new ScmEventBusModule(), diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/DefaultRestarter.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/DefaultRestarter.java index 9e2a547f49..fe3ff4f7db 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/DefaultRestarter.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/DefaultRestarter.java @@ -24,11 +24,10 @@ package sonia.scm.lifecycle; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.event.ScmEventBus; -import javax.inject.Inject; -import javax.inject.Singleton; - @Singleton public class DefaultRestarter implements Restarter { private final ScmEventBus eventBus; diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/ExitRestartStrategy.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/ExitRestartStrategy.java index 04d58df731..e66b27d877 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/ExitRestartStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/ExitRestartStrategy.java @@ -23,12 +23,9 @@ */ package sonia.scm.lifecycle; -import com.google.common.annotations.VisibleForTesting; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.function.IntConsumer; - /** * {@link RestartStrategy} which tears down the scm-manager context and * then exists the java process with {@link System#exit(int)}. @@ -41,37 +38,18 @@ class ExitRestartStrategy extends RestartStrategy { static final String NAME = "exit"; - static final String PROPERTY_EXIT_CODE = "sonia.scm.restart.exit-code"; - - private IntConsumer exiter = System::exit; - - private int exitCode; ExitRestartStrategy() { } - @VisibleForTesting - void setExiter(IntConsumer exiter) { - this.exiter = exiter; - } - @Override public void prepareRestart(InjectionContext context) { - exitCode = determineExitCode(); + // Nothing to do } @Override protected void executeRestart(InjectionContext context) { - LOG.warn("exit scm-manager with exit code {}", exitCode); - exiter.accept(exitCode); - } - - private int determineExitCode() { - String exitCodeAsString = System.getProperty(PROPERTY_EXIT_CODE, "0"); - try { - return Integer.parseInt(exitCodeAsString); - } catch (NumberFormatException ex) { - throw new RestartNotSupportedException("invalid exit code " + exitCodeAsString, ex); - } + LOG.warn("exit scm-manager with exit code {}", 0); + System.exit(0); } } diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/PluginBootstrap.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/PluginBootstrap.java index 9fb042880f..ef0f0f1482 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/PluginBootstrap.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/PluginBootstrap.java @@ -21,34 +21,37 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.lifecycle; import com.google.common.base.Charsets; import com.google.common.collect.ImmutableList; import com.google.common.io.Files; +import jakarta.servlet.ServletContext; +import jakarta.xml.bind.DataBindingException; +import jakarta.xml.bind.JAXB; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContext; import sonia.scm.lifecycle.classloading.ClassLoaderLifeCycle; import sonia.scm.migration.UpdateException; +import sonia.scm.plugin.ConfigurationResolver; import sonia.scm.plugin.DefaultPluginLoader; +import sonia.scm.plugin.InstalledPlugin; import sonia.scm.plugin.InstalledPluginDescriptor; import sonia.scm.plugin.PluginException; import sonia.scm.plugin.PluginLoadException; import sonia.scm.plugin.PluginLoader; -import sonia.scm.plugin.InstalledPlugin; +import sonia.scm.plugin.PluginTransformException; +import sonia.scm.plugin.PluginTransformer; import sonia.scm.plugin.PluginsInternal; import sonia.scm.plugin.SmpArchive; import sonia.scm.util.IOUtil; -import javax.servlet.ServletContext; -import javax.xml.bind.DataBindingException; -import javax.xml.bind.JAXB; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; @@ -68,13 +71,15 @@ public final class PluginBootstrap { private static final String PLUGIN_COREINDEX = PLUGIN_DIRECTORY.concat("plugin-index.xml"); private final ClassLoaderLifeCycle classLoaderLifeCycle; + private final ConfigurationResolver configurationResolver; private final ServletContext servletContext; private final Set plugins; private final PluginLoader pluginLoader; - PluginBootstrap(ServletContext servletContext, ClassLoaderLifeCycle classLoaderLifeCycle) { + PluginBootstrap(ServletContext servletContext, ClassLoaderLifeCycle classLoaderLifeCycle, ConfigurationResolver configurationResolver) { this.servletContext = servletContext; this.classLoaderLifeCycle = classLoaderLifeCycle; + this.configurationResolver = configurationResolver; this.plugins = collectPlugins(); this.pluginLoader = createPluginLoader(); @@ -89,7 +94,7 @@ public final class PluginBootstrap { } private PluginLoader createPluginLoader() { - return new DefaultPluginLoader(servletContext, classLoaderLifeCycle.getBootstrapClassLoader(), plugins); + return new DefaultPluginLoader(servletContext, classLoaderLifeCycle.getBootstrapClassLoader(), plugins, configurationResolver); } private Set collectPlugins() { @@ -103,14 +108,36 @@ public final class PluginBootstrap { } else { LOG.info("core plugin extraction is disabled"); } - uninstallMarkedPlugins(pluginDirectory.toPath()); + transformIncompatiblePlugins(pluginDirectory.toPath()); return PluginsInternal.collectPlugins(classLoaderLifeCycle, pluginDirectory.toPath()); } catch (IOException ex) { throw new PluginLoadException("could not load plugins", ex); } } + private void transformIncompatiblePlugins(Path pluginsDirectory) { + try (Stream list = java.nio.file.Files.list(pluginsDirectory)) { + list + .filter(java.nio.file.Files::isDirectory) + .filter(this::isIncompatiblePlugin) + .forEach(plugin -> { + PluginTransformer.transform(plugin); + try { + Files.touch(plugin.resolve(InstalledPlugin.COMPATIBILITY_MARKER_FILENAME).toFile()); + } catch (IOException e) { + throw new PluginTransformException("Failed to create marker file for jakarta compatibility", e); + } + }); + } catch (IOException e) { + LOG.warn("error occurred while checking for plugins that should be transformed", e); + } + } + + private boolean isIncompatiblePlugin(Path path) { + return !new File(path.toFile(), InstalledPlugin.COMPATIBILITY_MARKER_FILENAME).exists(); + } + private void uninstallMarkedPlugins(Path pluginDirectory) { try (Stream list = java.nio.file.Files.list(pluginDirectory)) { list diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/PluginWizardStartupAction.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/PluginWizardStartupAction.java index 6ef9a6334d..2640e3a33e 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/PluginWizardStartupAction.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/PluginWizardStartupAction.java @@ -24,13 +24,13 @@ package sonia.scm.lifecycle; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import sonia.scm.config.WebappConfigProvider; import sonia.scm.initialization.InitializationStep; import sonia.scm.plugin.Extension; import sonia.scm.plugin.PluginSetConfigStore; -import javax.inject.Inject; -import javax.inject.Singleton; - @Extension @Singleton public class PluginWizardStartupAction implements InitializationStep { @@ -54,7 +54,7 @@ public class PluginWizardStartupAction implements InitializationStep { @Override public boolean done() { - return System.getProperty(AdminAccountStartupAction.INITIAL_PASSWORD_PROPERTY) != null || store.getPluginSets().isPresent(); + return WebappConfigProvider.resolveAsString("initialPassword").orElse(null) != null || store.getPluginSets().isPresent(); } } diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/RepositoryExportCleanupStartupAction.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/RepositoryExportCleanupStartupAction.java index c121d0e082..dc1dc9509c 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/RepositoryExportCleanupStartupAction.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/RepositoryExportCleanupStartupAction.java @@ -24,11 +24,10 @@ package sonia.scm.lifecycle; +import jakarta.inject.Inject; import sonia.scm.importexport.ExportService; import sonia.scm.plugin.Extension; -import javax.inject.Inject; - @Extension public class RepositoryExportCleanupStartupAction implements PrivilegedStartupAction { diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/RestartServlet.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/RestartServlet.java index b09cd72313..961205b893 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/RestartServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/RestartServlet.java @@ -25,6 +25,10 @@ package sonia.scm.lifecycle; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.Priority; @@ -33,10 +37,6 @@ import sonia.scm.Stage; import sonia.scm.event.ScmEventBus; import sonia.scm.filter.WebElement; -import javax.inject.Inject; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; import java.util.concurrent.atomic.AtomicBoolean; diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/ServletContextCleaner.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/ServletContextCleaner.java index 621229390a..aca565bce2 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/ServletContextCleaner.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/ServletContextCleaner.java @@ -25,10 +25,10 @@ package sonia.scm.lifecycle; import com.google.common.collect.ImmutableSet; +import jakarta.servlet.ServletContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletContext; import java.util.Enumeration; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/SetupContextListener.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/SetupContextListener.java index 130820f4fa..718a47752d 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/SetupContextListener.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/SetupContextListener.java @@ -24,12 +24,12 @@ package sonia.scm.lifecycle; +import jakarta.inject.Inject; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import sonia.scm.plugin.Extension; import sonia.scm.web.security.AdministrationContext; -import javax.inject.Inject; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; import java.util.Set; @Extension diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettings.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettings.java index 4fa9ed85a2..3156e15bde 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettings.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettings.java @@ -24,14 +24,13 @@ package sonia.scm.lifecycle.jwt; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; - @Data @XmlRootElement(name = "jwtSettings") @XmlAccessorType(XmlAccessType.FIELD) diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettingsStartupAction.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettingsStartupAction.java index 44cc1f61c0..31cca4e124 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettingsStartupAction.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettingsStartupAction.java @@ -24,13 +24,13 @@ package sonia.scm.lifecycle.jwt; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.lifecycle.PrivilegedStartupAction; import sonia.scm.plugin.Extension; -import sonia.scm.security.JwtSystemProperties; +import sonia.scm.security.JwtConfig; -import javax.inject.Inject; import java.time.Clock; import java.time.Instant; @@ -39,15 +39,17 @@ public class JwtSettingsStartupAction implements PrivilegedStartupAction { private static final Logger LOG = LoggerFactory.getLogger(JwtSettingsStartupAction.class); private final JwtSettingsStore store; + private final JwtConfig jwtConfig; private final Clock clock; @Inject - public JwtSettingsStartupAction(JwtSettingsStore store) { - this(store, Clock.systemDefaultZone()); + public JwtSettingsStartupAction(JwtSettingsStore store, JwtConfig jwtConfig) { + this(store, jwtConfig, Clock.systemDefaultZone()); } - public JwtSettingsStartupAction(JwtSettingsStore store, Clock clock) { + public JwtSettingsStartupAction(JwtSettingsStore store, JwtConfig jwtConfig, Clock clock) { this.store = store; + this.jwtConfig = jwtConfig; this.clock = clock; } @@ -56,7 +58,7 @@ public class JwtSettingsStartupAction implements PrivilegedStartupAction { LOG.debug("Checking JWT Settings"); JwtSettings settings = store.get(); - boolean isEndlessJwtEnabledNow = JwtSystemProperties.isEndlessJwtEnabled(); + boolean isEndlessJwtEnabledNow = jwtConfig.isEndlessJwtEnabled(); if(!areSettingsChanged(settings, isEndlessJwtEnabledNow)) { LOG.debug("JWT Settings unchanged"); diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettingsStore.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettingsStore.java index c0d43b8203..a4fa965abb 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettingsStore.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/jwt/JwtSettingsStore.java @@ -24,12 +24,11 @@ package sonia.scm.lifecycle.jwt; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; -import javax.inject.Inject; -import javax.inject.Singleton; - @Singleton public class JwtSettingsStore { diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ApplicationModuleProvider.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ApplicationModuleProvider.java index 5a3c4868d0..fe627586d4 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ApplicationModuleProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ApplicationModuleProvider.java @@ -26,6 +26,7 @@ package sonia.scm.lifecycle.modules; import com.google.common.base.Throwables; import com.google.inject.Module; +import jakarta.servlet.ServletContext; import org.apache.shiro.guice.web.ShiroWebModule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,7 +40,6 @@ import sonia.scm.plugin.PluginLoader; import sonia.scm.repository.ExecutorModule; import sonia.scm.validation.ValidationModule; -import javax.servlet.ServletContext; import java.util.ArrayList; import java.util.List; @@ -67,6 +67,7 @@ public class ApplicationModuleProvider implements ModuleProvider { moduleList.add(new ResteasyModule()); moduleList.add(ShiroWebModule.guiceFilterModule()); moduleList.add(new WebElementModule(pluginLoader)); + moduleList.add(new ConfigModule(pluginLoader)); moduleList.add(new ScmServletModule(pluginLoader, overrides)); moduleList.add( new ScmSecurityModule(servletContext, pluginLoader.getExtensionProcessor()) diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ClassOverride.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ClassOverride.java index 6f8cbc0f7d..6ba57812e7 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ClassOverride.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ClassOverride.java @@ -28,11 +28,10 @@ package sonia.scm.lifecycle.modules; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; import sonia.scm.Validateable; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; - //~--- JDK imports ------------------------------------------------------------ /** diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ClassOverrides.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ClassOverrides.java index fd9bceff34..4b273b35ea 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ClassOverrides.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ClassOverrides.java @@ -29,32 +29,25 @@ package sonia.scm.lifecycle.modules; import com.google.common.base.Function; import com.google.common.collect.Lists; import com.google.inject.Module; - +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.util.AssertUtil; import sonia.scm.util.ClassLoaders; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; - import java.net.URL; - import java.util.Collections; import java.util.Enumeration; import java.util.Iterator; import java.util.List; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ConfigModule.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ConfigModule.java new file mode 100644 index 0000000000..7b2c77e570 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ConfigModule.java @@ -0,0 +1,115 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.lifecycle.modules; + +import com.google.common.base.Strings; +import com.google.inject.AbstractModule; +import sonia.scm.config.ConfigBinding; +import sonia.scm.config.ConfigElement; +import sonia.scm.config.ConfigValue; +import sonia.scm.plugin.PluginLoader; + +import java.io.Serializable; +import java.lang.annotation.Annotation; +import java.util.Objects; + +public class ConfigModule extends AbstractModule { + + private final PluginLoader pluginLoader; + + public ConfigModule(PluginLoader pluginLoader) { + this.pluginLoader = pluginLoader; + } + + @Override + protected void configure() { + Iterable configBindings = pluginLoader.getExtensionProcessor().getConfigBindings(); + for (ConfigBinding binding : configBindings) { + ConfigElement configElement = binding.getConfigElement(); + Object value = binding.getValue(); + if (value != null) { + bind((Class) value.getClass()).annotatedWith( + new ConfigValueImpl(configElement.getKey(), configElement.getDefaultValue(), configElement.getDescription()) + ).toInstance(value); + } + } + } + + + public static final class ConfigValueImpl implements ConfigValue, Serializable { + + private final String key; + private final String defaultValue; + private final String description; + + public ConfigValueImpl(String key, String defaultValue, String description) { + this.key = key; + this.defaultValue = Strings.nullToEmpty(defaultValue); + this.description = Strings.nullToEmpty(description); + } + + @Override + public String key() { + return key; + } + + @Override + public String defaultValue() { + return defaultValue; + } + + @Override + public String description() { + return description; + } + + @Override + public Class annotationType() { + return ConfigValue.class; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o instanceof ConfigValue) { + ConfigValue that = (ConfigValue) o; + return Objects.equals(key, that.key()) + && Objects.equals(defaultValue, that.defaultValue()) + && Objects.equals(description, that.description()); + } + return false; + } + + /** + * https://docs.oracle.com/javase%2F7%2Fdocs%2Fapi%2F%2F/java/lang/annotation/Annotation.html + */ + @Override + public int hashCode() { + return ((127 * "key".hashCode()) ^ key.hashCode()) + + ((127 * "defaultValue".hashCode()) ^ defaultValue.hashCode()) + + ((127 * "description".hashCode()) ^ description.hashCode()); + } + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/InjectionLifeCycle.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/InjectionLifeCycle.java index 1eebe58e62..baef55a6bf 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/InjectionLifeCycle.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/InjectionLifeCycle.java @@ -27,11 +27,11 @@ package sonia.scm.lifecycle.modules; import com.google.inject.Binding; import com.google.inject.Injector; import com.google.inject.Key; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; import sonia.scm.Default; import sonia.scm.lifecycle.LifeCycle; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; import java.util.Optional; public class InjectionLifeCycle implements LifeCycle { diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java index 55791aa801..079e66d94a 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ResteasyAllInOneServletDispatcher.java @@ -25,7 +25,12 @@ package sonia.scm.lifecycle.modules; import com.google.inject.Injector; -import org.jboss.resteasy.plugins.guice.ModuleProcessor; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.ws.rs.ext.RuntimeDelegate; import org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher; import org.jboss.resteasy.plugins.server.servlet.ListenerBootstrap; import org.jboss.resteasy.spi.Registry; @@ -34,17 +39,10 @@ import org.jboss.resteasy.spi.ResteasyProviderFactory; import org.jboss.resteasy.spi.statistics.StatisticsController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.ServletConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.ws.rs.ext.RuntimeDelegate; +import sonia.scm.lifecycle.modules.resteasyguice.ModuleProcessor; /** * Resteasy initialization and dispatching. This servlet combines the initialization of - * {@link org.jboss.resteasy.plugins.guice.GuiceResteasyBootstrapServletContextListener} and the dispatching of * {@link HttpServletDispatcher}. The combination is required to fix the initialization order. */ @Singleton diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmConfigurationLoader.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmConfigurationLoader.java index f7ff3d95a3..569f70e70e 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmConfigurationLoader.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmConfigurationLoader.java @@ -24,13 +24,13 @@ package sonia.scm.lifecycle.modules; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Unmarshaller; import sonia.scm.ConfigurationException; import sonia.scm.SCMContext; import sonia.scm.config.ScmConfiguration; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; import java.io.File; public final class ScmConfigurationLoader { diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java index 9b994d5bf3..ac33189432 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java @@ -27,6 +27,7 @@ package sonia.scm.lifecycle.modules; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.name.Names; +import jakarta.servlet.ServletContext; import org.apache.shiro.authc.Authenticator; import org.apache.shiro.authc.credential.DefaultPasswordService; import org.apache.shiro.authc.credential.PasswordService; @@ -37,18 +38,12 @@ import org.apache.shiro.crypto.hash.DefaultHashService; import org.apache.shiro.guice.web.ShiroWebModule; import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; import org.apache.shiro.mgt.DefaultSubjectDAO; +import org.apache.shiro.mgt.RememberMeManager; import org.apache.shiro.mgt.SubjectDAO; import org.apache.shiro.realm.Realm; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.plugin.ExtensionProcessor; - -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.ServletContext; -import org.apache.shiro.mgt.RememberMeManager; import sonia.scm.security.DisabledRememberMeManager; import sonia.scm.security.ScmAtLeastOneSuccessfulStrategy; import sonia.scm.security.ScmPermissionResolver; diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ServletContextListenerHolder.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ServletContextListenerHolder.java index 0c791f83b3..55fe415d32 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ServletContextListenerHolder.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ServletContextListenerHolder.java @@ -28,15 +28,12 @@ package sonia.scm.lifecycle.modules; import com.google.inject.Inject; import com.google.inject.Singleton; - -//~--- JDK imports ------------------------------------------------------------ +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import java.util.Collections; import java.util.Set; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ServletContextModule.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ServletContextModule.java index ad02901333..7f12198c7c 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ServletContextModule.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ServletContextModule.java @@ -25,10 +25,9 @@ package sonia.scm.lifecycle.modules; import com.google.inject.servlet.ServletModule; +import jakarta.servlet.ServletContext; import sonia.scm.Default; -import javax.servlet.ServletContext; - public class ServletContextModule extends ServletModule { @Override diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModule.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModule.java index a6871b8b74..23c9375339 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModule.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModule.java @@ -25,13 +25,12 @@ package sonia.scm.lifecycle.modules; import com.google.inject.AbstractModule; +import sonia.scm.config.WebappConfigProvider; import sonia.scm.plugin.PluginLoader; import sonia.scm.repository.work.NoneCachingWorkingCopyPool; import sonia.scm.repository.work.WorkingCopyPool; public class WorkingCopyPoolModule extends AbstractModule { - public static final String DEFAULT_WORKING_COPY_POOL_STRATEGY = NoneCachingWorkingCopyPool.class.getName(); - public static final String WORKING_COPY_POOL_STRATEGY_PROPERTY = "scm.workingCopyPoolStrategy"; private final ClassLoader classLoader; public WorkingCopyPoolModule(PluginLoader pluginLoader) { @@ -40,7 +39,8 @@ public class WorkingCopyPoolModule extends AbstractModule { @Override protected void configure() { - String workingCopyPoolStrategy = System.getProperty(WORKING_COPY_POOL_STRATEGY_PROPERTY, DEFAULT_WORKING_COPY_POOL_STRATEGY); + String workingCopyPoolStrategy = WebappConfigProvider.resolveAsString("workingCopyPoolStrategy") + .orElse(NoneCachingWorkingCopyPool.class.getName()); try { Class strategyClass = (Class) classLoader.loadClass(workingCopyPoolStrategy); bind(WorkingCopyPool.class).to(strategyClass); diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/GuiceResourceFactory.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/GuiceResourceFactory.java new file mode 100644 index 0000000000..2577867e20 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/GuiceResourceFactory.java @@ -0,0 +1,75 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.lifecycle.modules.resteasyguice; + +import com.google.inject.Provider; +import org.jboss.resteasy.spi.HttpRequest; +import org.jboss.resteasy.spi.HttpResponse; +import org.jboss.resteasy.spi.PropertyInjector; +import org.jboss.resteasy.spi.ResourceFactory; +import org.jboss.resteasy.spi.ResteasyProviderFactory; + +import java.util.concurrent.CompletionStage; + +public class GuiceResourceFactory implements ResourceFactory +{ + + private final Provider provider; + private final Class scannableClass; + private PropertyInjector propertyInjector; + + public GuiceResourceFactory(final Provider provider, final Class scannableClass) + { + this.provider = provider; + this.scannableClass = scannableClass; + } + + public Class getScannableClass() + { + return scannableClass; + } + + public void registered(ResteasyProviderFactory factory) + { + propertyInjector = factory.getInjectorFactory().createPropertyInjector(scannableClass, factory); + } + + @Override + public Object createResource(final HttpRequest request, final HttpResponse response, final ResteasyProviderFactory factory) + { + final Object resource = provider.get(); + CompletionStage propertyStage = propertyInjector.inject(request, response, resource, true); + return propertyStage == null ? resource : propertyStage + .thenApply(v -> resource); + } + + public void requestFinished(final HttpRequest request, final HttpResponse response, final Object resource) + { + } + + public void unregistered() + { + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/GuiceResteasyBootstrapServletContextListener.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/GuiceResteasyBootstrapServletContextListener.java new file mode 100644 index 0000000000..2b2be06103 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/GuiceResteasyBootstrapServletContextListener.java @@ -0,0 +1,191 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.lifecycle.modules.resteasyguice; + +import com.google.inject.Guice; +import com.google.inject.Injector; +import com.google.inject.Module; +import com.google.inject.Stage; +import jakarta.annotation.PostConstruct; +import jakarta.annotation.PreDestroy; +import jakarta.inject.Inject; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; +import org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap; +import org.jboss.resteasy.spi.Registry; +import org.jboss.resteasy.spi.ResteasyDeployment; +import org.jboss.resteasy.spi.ResteasyProviderFactory; + +import java.lang.annotation.Annotation; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +public class GuiceResteasyBootstrapServletContextListener extends ResteasyBootstrap implements ServletContextListener +{ + + private List modules; + @Inject private Injector parentInjector; + + @Override + public void contextInitialized(final ServletContextEvent event) + { + super.contextInitialized(event); + final ServletContext context = event.getServletContext(); + final ResteasyDeployment deployment = (ResteasyDeployment) context.getAttribute(ResteasyDeployment.class.getName()); + final Registry registry = deployment.getRegistry(); + final ResteasyProviderFactory providerFactory = deployment.getProviderFactory(); + final ModuleProcessor processor = new ModuleProcessor(registry, providerFactory); + final List modules = getModules(context); + final Stage stage = getStage(context); + Injector injector; + + if (parentInjector != null) { + injector = parentInjector.createChildInjector(modules); + } else { + if (stage == null) + { + injector = Guice.createInjector(modules); + } + else + { + injector = Guice.createInjector(stage, modules); + } + } + withInjector(injector); + processor.processInjector(injector); + + //load parent injectors + while (injector.getParent() != null) { + injector = injector.getParent(); + processor.processInjector(injector); + } + this.modules = modules; + triggerAnnotatedMethods(PostConstruct.class); + } + + /** + * Override this method to interact with the {@link com.google.inject.Injector} after it has been created. The default is no-op. + * + * @param injector + */ + protected void withInjector(Injector injector) + { + } + + /** + * Override this method to set the Stage. By default it is taken from resteasy.guice.stage context param. + * + * @param context + * @return Guice Stage + */ + protected Stage getStage(ServletContext context) + { + final String stageAsString = context.getInitParameter("resteasy.guice.stage"); + if (stageAsString == null) + { + return null; + } + try + { + return Stage.valueOf(stageAsString.trim()); + } + catch (IllegalArgumentException e) + { + throw new RuntimeException(stageAsString); + } + } + + /** + * Override this method to instantiate your {@link com.google.inject.Module}s yourself. + * + * @param context + * @return + */ + protected List getModules(final ServletContext context) + { + final List result = new ArrayList(); + final String modulesString = context.getInitParameter("resteasy.guice.modules"); + if (modulesString != null) + { + final String[] moduleStrings = modulesString.trim().split(","); + for (final String moduleString : moduleStrings) + { + try + { + final Class clazz = Thread.currentThread().getContextClassLoader().loadClass(moduleString.trim()); + final Module module = (Module) clazz.newInstance(); + result.add(module); + } + catch (ClassNotFoundException e) + { + throw new RuntimeException(e); + } + catch (IllegalAccessException e) + { + throw new RuntimeException(e); + } + catch (InstantiationException e) + { + throw new RuntimeException(e); + } + } + + } + return result; + } + + @Override + public void contextDestroyed(final ServletContextEvent event) + { + triggerAnnotatedMethods(PreDestroy.class); + } + + private void triggerAnnotatedMethods(final Class annotationClass) + { + for (Module module : this.modules) + { + final Method[] methods = module.getClass().getMethods(); + for (Method method : methods) + { + if (method.isAnnotationPresent(annotationClass)) + { + if(method.getParameterTypes().length > 0) + { + continue; + } + try + { + method.invoke(module); + } catch (InvocationTargetException ex) { + } catch (IllegalAccessException ex) { + } + } + } + } + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/ModuleProcessor.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/ModuleProcessor.java new file mode 100644 index 0000000000..c3cb6a6fd2 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/ModuleProcessor.java @@ -0,0 +1,78 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.lifecycle.modules.resteasyguice; + +import com.google.inject.Binding; +import com.google.inject.Injector; +import jakarta.ws.rs.ext.Provider; +import org.jboss.resteasy.spi.Registry; +import org.jboss.resteasy.spi.ResourceFactory; +import org.jboss.resteasy.spi.ResteasyProviderFactory; +import org.jboss.resteasy.util.GetRestful; + +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.List; + +public class ModuleProcessor +{ + + private final Registry registry; + private final ResteasyProviderFactory providerFactory; + + public ModuleProcessor(final Registry registry, final ResteasyProviderFactory providerFactory) + { + this.registry = registry; + this.providerFactory = providerFactory; + } + + public void processInjector(final Injector injector) + { + List> rootResourceBindings = new ArrayList>(); + for (final Binding binding : injector.getBindings().values()) + { + final Type type = binding.getKey().getTypeLiteral().getRawType(); + if (type instanceof Class) + { + final Class beanClass = (Class) type; + if (GetRestful.isRootResource(beanClass)) + { + // deferred registration + rootResourceBindings.add(binding); + } + if (beanClass.isAnnotationPresent(Provider.class)) + { + providerFactory.registerProviderInstance(binding.getProvider().get()); + } + } + } + for (Binding binding : rootResourceBindings) + { + Class beanClass = (Class) binding.getKey().getTypeLiteral().getType(); + final ResourceFactory resourceFactory = new GuiceResourceFactory(binding.getProvider(), beanClass); + registry.addResourceFactory(resourceFactory); + } + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/RequestScopeModule.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/RequestScopeModule.java new file mode 100644 index 0000000000..3ae7b54745 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/RequestScopeModule.java @@ -0,0 +1,105 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.lifecycle.modules.resteasyguice; + +import com.google.inject.AbstractModule; +import com.google.inject.Key; +import com.google.inject.Provider; +import com.google.inject.Scope; +import jakarta.inject.Singleton; +import jakarta.servlet.ServletConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Request; +import jakarta.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.UriInfo; +import org.jboss.resteasy.core.ResteasyContext; + +/** + * Binds the {@link RequestScoped} to the current HTTP request and + * makes all the classes available via the {@link javax.ws.rs.core.Context} annotation injectable. + */ +public class RequestScopeModule extends AbstractModule +{ + @Override + protected void configure() + { + bindScope(RequestScoped.class, new Scope() + { + @Override + public Provider scope(final Key key, final Provider creator) + { + return new Provider() + { + @SuppressWarnings("unchecked") + @Override + public T get() + { + Class instanceClass = (Class) key.getTypeLiteral().getType(); + T instance = ResteasyContext.getContextData(instanceClass); + + if (instance == null) { + instance = creator.get(); + ResteasyContext.pushContext(instanceClass, instance); + } + + return instance; + } + + @Override + public String toString() { + return String.format("%s[%s]", creator, super.toString()); + } + }; + } + }); + + bind(HttpServletRequest.class).toProvider(new ResteasyContextProvider(HttpServletRequest.class)).in(RequestScoped.class); + bind(HttpServletResponse.class).toProvider(new ResteasyContextProvider(HttpServletResponse.class)).in(RequestScoped.class); + bind(Request.class).toProvider(new ResteasyContextProvider(Request.class)).in(RequestScoped.class); + bind(HttpHeaders.class).toProvider(new ResteasyContextProvider(HttpHeaders.class)).in(RequestScoped.class); + bind(UriInfo.class).toProvider(new ResteasyContextProvider(UriInfo.class)).in(RequestScoped.class); + bind(SecurityContext.class).toProvider(new ResteasyContextProvider(SecurityContext.class)).in(RequestScoped.class); + bind(ServletConfig.class).toProvider(new ResteasyContextProvider(ServletConfig.class)).in(Singleton.class); + bind(ServletContext.class).toProvider(new ResteasyContextProvider(ServletContext.class)).in(Singleton.class); + } + + private static class ResteasyContextProvider implements Provider { + + private final Class instanceClass; + + ResteasyContextProvider(final Class instanceClass) + { + this.instanceClass = instanceClass; + } + + @Override + public T get() { + return ResteasyContext.getContextData(instanceClass); + } + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/RequestScoped.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/RequestScoped.java new file mode 100644 index 0000000000..431b026aa2 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/RequestScoped.java @@ -0,0 +1,39 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.lifecycle.modules.resteasyguice; + +import jakarta.inject.Scope; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * Provides an instance-per-request. + */ +@Scope +@Retention(RetentionPolicy.RUNTIME) +public @interface RequestScoped +{ +} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/ResponseBuilderProvider.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/ResponseBuilderProvider.java new file mode 100644 index 0000000000..7448623de2 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/ResponseBuilderProvider.java @@ -0,0 +1,46 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.lifecycle.modules.resteasyguice; + +import com.google.inject.Inject; +import com.google.inject.Provider; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.RuntimeDelegate; + +public class ResponseBuilderProvider implements Provider +{ + private final RuntimeDelegate runtimeDelegate; + + @Inject + public ResponseBuilderProvider(final RuntimeDelegate runtimeDelegate) + { + this.runtimeDelegate = runtimeDelegate; + } + + public Response.ResponseBuilder get() + { + return runtimeDelegate.createResponseBuilder(); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/ResteasyGuiceModule.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/ResteasyGuiceModule.java new file mode 100644 index 0000000000..00944b5640 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/ResteasyGuiceModule.java @@ -0,0 +1,42 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.lifecycle.modules.resteasyguice; + +import com.google.inject.AbstractModule; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriBuilder; +import jakarta.ws.rs.core.Variant; +import jakarta.ws.rs.ext.RuntimeDelegate; + +public class ResteasyGuiceModule extends AbstractModule { + @Override + protected void configure() { +// bind(ClientHttpEngine.class).to(ApacheHttpClient43Engine.class); + bind(RuntimeDelegate.class).toInstance(RuntimeDelegate.getInstance()); + bind(Response.ResponseBuilder.class).toProvider(ResponseBuilderProvider.class); + bind(UriBuilder.class).toProvider(UriBuilderProvider.class); + bind(Variant.VariantListBuilder.class).toProvider(VariantListBuilderProvider.class); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/UriBuilderProvider.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/UriBuilderProvider.java new file mode 100644 index 0000000000..cfc07adff0 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/UriBuilderProvider.java @@ -0,0 +1,46 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.lifecycle.modules.resteasyguice; + +import com.google.inject.Inject; +import com.google.inject.Provider; +import jakarta.ws.rs.core.UriBuilder; +import jakarta.ws.rs.ext.RuntimeDelegate; + +public class UriBuilderProvider implements Provider +{ + private final RuntimeDelegate runtimeDelegate; + + @Inject + public UriBuilderProvider(final RuntimeDelegate runtimeDelegate) + { + this.runtimeDelegate = runtimeDelegate; + } + + public UriBuilder get() + { + return runtimeDelegate.createUriBuilder(); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/VariantListBuilderProvider.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/VariantListBuilderProvider.java new file mode 100644 index 0000000000..12fa31d6f0 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/resteasyguice/VariantListBuilderProvider.java @@ -0,0 +1,46 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.lifecycle.modules.resteasyguice; + +import com.google.inject.Inject; +import com.google.inject.Provider; +import jakarta.ws.rs.core.Variant; +import jakarta.ws.rs.ext.RuntimeDelegate; + +public class VariantListBuilderProvider implements Provider +{ + private final RuntimeDelegate runtimeDelegate; + + @Inject + public VariantListBuilderProvider(final RuntimeDelegate runtimeDelegate) + { + this.runtimeDelegate = runtimeDelegate; + } + + public Variant.VariantListBuilder get() + { + return runtimeDelegate.createVariantListBuilder(); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/view/SingleView.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/view/SingleView.java index 9db1226713..c619cbfbdd 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/view/SingleView.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/view/SingleView.java @@ -30,6 +30,8 @@ import com.google.common.collect.ImmutableMap; import com.google.inject.Module; import com.google.inject.multibindings.Multibinder; import com.google.inject.servlet.ServletModule; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.Default; import sonia.scm.SCMContext; import sonia.scm.SCMContextProvider; @@ -40,8 +42,6 @@ import sonia.scm.template.MustacheTemplateEngine; import sonia.scm.template.TemplateEngine; import sonia.scm.template.TemplateEngineFactory; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.util.Collection; public final class SingleView { diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/view/SingleViewServlet.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/view/SingleViewServlet.java index 05e3b1e0e7..e0d5e05c00 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/view/SingleViewServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/view/SingleViewServlet.java @@ -24,17 +24,17 @@ package sonia.scm.lifecycle.view; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.template.Template; import sonia.scm.template.TemplateEngine; import sonia.scm.template.TemplateEngineFactory; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/view/ViewController.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/view/ViewController.java index d8ddb9c6ad..ffaade7b44 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/view/ViewController.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/view/ViewController.java @@ -24,7 +24,7 @@ package sonia.scm.lifecycle.view; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; public interface ViewController { diff --git a/scm-webapp/src/main/java/sonia/scm/metrics/HttpMetricsFilter.java b/scm-webapp/src/main/java/sonia/scm/metrics/HttpMetricsFilter.java index 830c1936be..20f2fc6c65 100644 --- a/scm-webapp/src/main/java/sonia/scm/metrics/HttpMetricsFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/metrics/HttpMetricsFilter.java @@ -28,19 +28,18 @@ import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Tag; import io.micrometer.core.instrument.Tags; import io.micrometer.core.instrument.Timer; -import io.micrometer.core.instrument.binder.http.DefaultHttpServletRequestTagsProvider; -import io.micrometer.core.instrument.binder.http.HttpServletRequestTagsProvider; +import io.micrometer.core.instrument.binder.http.DefaultHttpJakartaServletRequestTagsProvider; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.Priority; import sonia.scm.filter.Filters; import sonia.scm.filter.WebElement; import sonia.scm.web.filter.HttpFilter; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebElement(Filters.PATTERN_ALL) @@ -49,7 +48,7 @@ public class HttpMetricsFilter extends HttpFilter { static final String METRIC_DURATION = "http.server.requests"; - private final HttpServletRequestTagsProvider tagsProvider = new DefaultHttpServletRequestTagsProvider(); + private final DefaultHttpJakartaServletRequestTagsProvider tagsProvider = new DefaultHttpJakartaServletRequestTagsProvider(); private final Provider registryProvider; private final RequestCategoryDetector detector; diff --git a/scm-webapp/src/main/java/sonia/scm/metrics/MeterRegistryProvider.java b/scm-webapp/src/main/java/sonia/scm/metrics/MeterRegistryProvider.java index 144bc4f727..a1fdb2e788 100644 --- a/scm-webapp/src/main/java/sonia/scm/metrics/MeterRegistryProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/metrics/MeterRegistryProvider.java @@ -39,12 +39,12 @@ import io.micrometer.core.instrument.binder.system.FileDescriptorMetrics; import io.micrometer.core.instrument.binder.system.ProcessorMetrics; import io.micrometer.core.instrument.binder.system.UptimeMetrics; import io.micrometer.core.instrument.composite.CompositeMeterRegistry; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.inject.Singleton; import java.util.List; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/metrics/RequestCategoryDetector.java b/scm-webapp/src/main/java/sonia/scm/metrics/RequestCategoryDetector.java index d433f5fbba..fb56ccc9c6 100644 --- a/scm-webapp/src/main/java/sonia/scm/metrics/RequestCategoryDetector.java +++ b/scm-webapp/src/main/java/sonia/scm/metrics/RequestCategoryDetector.java @@ -24,13 +24,12 @@ package sonia.scm.metrics; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; import sonia.scm.util.HttpUtil; import sonia.scm.web.UserAgent; import sonia.scm.web.UserAgentParser; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; - public final class RequestCategoryDetector { private final UserAgentParser userAgentParser; diff --git a/scm-webapp/src/main/java/sonia/scm/net/SSLContextProvider.java b/scm-webapp/src/main/java/sonia/scm/net/SSLContextProvider.java index d7370c7f78..1982ec0fd1 100644 --- a/scm-webapp/src/main/java/sonia/scm/net/SSLContextProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/net/SSLContextProvider.java @@ -26,15 +26,14 @@ package sonia.scm.net; import com.google.common.base.Throwables; import com.google.inject.Inject; - -import java.security.NoSuchAlgorithmException; -import javax.inject.Named; -import javax.inject.Provider; -import javax.net.ssl.SSLContext; - +import jakarta.inject.Named; +import jakarta.inject.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.net.ssl.SSLContext; +import java.security.NoSuchAlgorithmException; + /** * Provider for {@link SSLContext}. The provider will first try to retrieve the {@link SSLContext} from an "default" * named optional provider, if this fails the provider will return the jvm default context. diff --git a/scm-webapp/src/main/java/sonia/scm/net/TrustAllTrustManager.java b/scm-webapp/src/main/java/sonia/scm/net/TrustAllTrustManager.java index 3133e1fca7..f36081695b 100644 --- a/scm-webapp/src/main/java/sonia/scm/net/TrustAllTrustManager.java +++ b/scm-webapp/src/main/java/sonia/scm/net/TrustAllTrustManager.java @@ -26,11 +26,10 @@ package sonia.scm.net; //~--- JDK imports ------------------------------------------------------------ +import javax.net.ssl.X509TrustManager; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; -import javax.net.ssl.X509TrustManager; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/net/TrustManagerProvider.java b/scm-webapp/src/main/java/sonia/scm/net/TrustManagerProvider.java index 43835c0d1d..27d72dc5b4 100644 --- a/scm-webapp/src/main/java/sonia/scm/net/TrustManagerProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/net/TrustManagerProvider.java @@ -26,11 +26,11 @@ package sonia.scm.net; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Inject; +import jakarta.inject.Named; +import jakarta.inject.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Named; -import javax.inject.Provider; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; import java.security.KeyStore; diff --git a/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java b/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java index 9791e6e86c..fdca3092ef 100644 --- a/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java +++ b/scm-webapp/src/main/java/sonia/scm/net/ahc/DefaultAdvancedHttpClient.java @@ -28,6 +28,7 @@ package sonia.scm.net.ahc; import com.google.common.base.Strings; import com.google.common.collect.Multimap; import com.google.inject.Inject; +import jakarta.annotation.Nonnull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.net.HttpConnectionOptions; @@ -36,7 +37,6 @@ import sonia.scm.trace.Span; import sonia.scm.trace.Tracer; import sonia.scm.util.HttpUtil; -import javax.annotation.Nonnull; import java.io.IOException; import java.io.OutputStream; import java.net.HttpURLConnection; diff --git a/scm-webapp/src/main/java/sonia/scm/net/ahc/JsonContentTransformer.java b/scm-webapp/src/main/java/sonia/scm/net/ahc/JsonContentTransformer.java index be942b5cb6..78f6174e0f 100644 --- a/scm-webapp/src/main/java/sonia/scm/net/ahc/JsonContentTransformer.java +++ b/scm-webapp/src/main/java/sonia/scm/net/ahc/JsonContentTransformer.java @@ -32,21 +32,16 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair; import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; import com.fasterxml.jackson.databind.type.TypeFactory; -import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector; - +import com.fasterxml.jackson.module.jakarta.xmlbind.JakartaXmlBindAnnotationIntrospector; import com.google.common.io.ByteSource; - +import jakarta.ws.rs.core.MediaType; import sonia.scm.plugin.Extension; import sonia.scm.util.IOUtil; -//~--- JDK imports ------------------------------------------------------------ - import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import javax.ws.rs.core.MediaType; - /** * {@link ContentTransformer} for json. The {@link JsonContentTransformer} uses * jacksons {@link ObjectMapper} to marshalling/unmarshalling. @@ -68,7 +63,7 @@ public class JsonContentTransformer implements ContentTransformer // allow jackson and jaxb annotations AnnotationIntrospector jackson = new JacksonAnnotationIntrospector(); - AnnotationIntrospector jaxb = new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()); + AnnotationIntrospector jaxb = new JakartaXmlBindAnnotationIntrospector(TypeFactory.defaultInstance()); this.mapper.setAnnotationIntrospector(new AnnotationIntrospectorPair(jackson, jaxb)); diff --git a/scm-webapp/src/main/java/sonia/scm/net/ahc/XmlContentTransformer.java b/scm-webapp/src/main/java/sonia/scm/net/ahc/XmlContentTransformer.java index 052b915c2c..fdcf15b6ae 100644 --- a/scm-webapp/src/main/java/sonia/scm/net/ahc/XmlContentTransformer.java +++ b/scm-webapp/src/main/java/sonia/scm/net/ahc/XmlContentTransformer.java @@ -27,12 +27,12 @@ package sonia.scm.net.ahc; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.io.ByteSource; +import jakarta.ws.rs.core.MediaType; +import jakarta.xml.bind.DataBindingException; +import jakarta.xml.bind.JAXB; import sonia.scm.plugin.Extension; import sonia.scm.util.IOUtil; -import javax.ws.rs.core.MediaType; -import javax.xml.bind.DataBindingException; -import javax.xml.bind.JAXB; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/notifications/DefaultNotificationSender.java b/scm-webapp/src/main/java/sonia/scm/notifications/DefaultNotificationSender.java index fd11632c50..379a4decb6 100644 --- a/scm-webapp/src/main/java/sonia/scm/notifications/DefaultNotificationSender.java +++ b/scm-webapp/src/main/java/sonia/scm/notifications/DefaultNotificationSender.java @@ -25,12 +25,11 @@ package sonia.scm.notifications; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import sonia.scm.sse.Channel; import sonia.scm.sse.ChannelRegistry; import sonia.scm.sse.Message; -import javax.inject.Inject; - public class DefaultNotificationSender implements NotificationSender { @VisibleForTesting diff --git a/scm-webapp/src/main/java/sonia/scm/notifications/NotificationStore.java b/scm-webapp/src/main/java/sonia/scm/notifications/NotificationStore.java index 18770ef995..a565841563 100644 --- a/scm-webapp/src/main/java/sonia/scm/notifications/NotificationStore.java +++ b/scm-webapp/src/main/java/sonia/scm/notifications/NotificationStore.java @@ -26,6 +26,13 @@ package sonia.scm.notifications; import com.github.legman.Subscribe; import com.google.common.util.concurrent.Striped; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Data; import org.apache.shiro.SecurityUtils; import sonia.scm.HandlerEventType; @@ -34,13 +41,6 @@ import sonia.scm.store.DataStore; import sonia.scm.store.DataStoreFactory; import sonia.scm.user.UserEvent; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/notifications/StoredNotification.java b/scm-webapp/src/main/java/sonia/scm/notifications/StoredNotification.java index b9252edd55..b48fd917fa 100644 --- a/scm-webapp/src/main/java/sonia/scm/notifications/StoredNotification.java +++ b/scm-webapp/src/main/java/sonia/scm/notifications/StoredNotification.java @@ -24,14 +24,14 @@ package sonia.scm.notifications; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import sonia.scm.xml.XmlInstantAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; import java.util.Map; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/ConfigurationResolver.java b/scm-webapp/src/main/java/sonia/scm/plugin/ConfigurationResolver.java new file mode 100644 index 0000000000..49e6fd76bd --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/plugin/ConfigurationResolver.java @@ -0,0 +1,113 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.plugin; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.io.Resources; +import sonia.scm.config.WebappConfigProvider; + +import java.io.IOException; +import java.net.URL; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import java.util.Optional; + +public class ConfigurationResolver { + + private static final String PREFIX = "SCM_WEBAPP_"; + + private final JsonNode rootNode; + + private final Map environment; + + public ConfigurationResolver() { + this(System.getenv(), "config.yml"); + } + + @VisibleForTesting + ConfigurationResolver(Map environment, String configPath) { + this.environment = environment; + URL resource = Resources.getResource(configPath); + try { + rootNode = new ObjectMapper(new YAMLFactory()).readTree(resource).get("webapp"); + WebappConfigProvider.setConfigBindings(readConfigurationFile(rootNode)); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private Map readConfigurationFile(JsonNode rootNode) { + return readConfigurationFile(rootNode, ""); + } + + private Map readConfigurationFile(JsonNode rootNode, String prefix) { + Map configurationFile = new HashMap<>(); + rootNode.fields().forEachRemaining(entry -> { + if (entry.getValue().isValueNode()) { + configurationFile.put(prefix + entry.getKey(), entry.getValue().asText()); + } else { + configurationFile.putAll(readConfigurationFile(entry.getValue(), prefix + entry.getKey() + ".")); + } + }); + return configurationFile; + } + + public String resolve(String key, String defaultValue) { + Optional value = resolveFromEnv(key); + if (value.isEmpty()) { + value = resolveFromFile(key); + } + return value.orElse(defaultValue); + } + + private Optional resolveFromFile(String key) { + String[] keyFragments = key.split("\\."); + JsonNode node = rootNode; + for (String fragment : keyFragments) { + if (node.has(fragment)) { + node = node.get(fragment); + } else { + return Optional.empty(); + } + } + + return Optional.of(node.asText()); + } + + private Optional resolveFromEnv(String key) { + String envKey = createEnvKey(key); + String envVariable = environment.get(envKey); + + return Optional.ofNullable(envVariable); + } + + private String createEnvKey(String key) { + return PREFIX + key.toUpperCase(Locale.ENGLISH).replaceAll("\\.-/", "_"); + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/ConfigurationTypeConverter.java b/scm-webapp/src/main/java/sonia/scm/plugin/ConfigurationTypeConverter.java new file mode 100644 index 0000000000..a9a7ad4c66 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/plugin/ConfigurationTypeConverter.java @@ -0,0 +1,43 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.plugin; + +class ConfigurationTypeConverter { + + private ConfigurationTypeConverter() { + } + + static Object convert(String type, String value) { + return switch (type) { + case "java.lang.String" -> value; + case "int", "java.lang.Integer" -> Integer.parseInt(value); + case "boolean", "java.lang.Boolean" -> Boolean.parseBoolean(value); + case "long", "java.lang.Long" -> Long.parseLong(value); + case "double", "java.lang.Double" -> Double.parseDouble(value); + case "float", "java.lang.Float" -> Float.parseFloat(value); + default -> throw new IllegalArgumentException("Unknown type: " + type); + }; + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultExtensionProcessor.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultExtensionProcessor.java index de8ac87036..59f5a9c671 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultExtensionProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultExtensionProcessor.java @@ -28,17 +28,18 @@ package sonia.scm.plugin; import com.google.common.base.Stopwatch; import com.google.inject.Binder; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.config.ConfigBinding; + +import java.util.Set; +import java.util.stream.Collectors; /** - * * @author Sebastian Sdorra */ @SuppressWarnings("unchecked") -public class DefaultExtensionProcessor implements ExtensionProcessor -{ +public class DefaultExtensionProcessor implements ExtensionProcessor { /** * the logger for DefaultExtensionProcessor @@ -51,12 +52,15 @@ public class DefaultExtensionProcessor implements ExtensionProcessor /** * Constructs ... * - * * @param collector */ - public DefaultExtensionProcessor(ExtensionCollector collector) - { + public DefaultExtensionProcessor(ExtensionCollector collector, ConfigurationResolver configurationResolver) { this.collector = collector; + this.configBindings = collector.getConfigElements().stream().map(configElement -> { + String valueAsString = configurationResolver.resolve(configElement.getKey(), configElement.getDefaultValue()); + Object value = ConfigurationTypeConverter.convert(configElement.getType(), valueAsString); + return new ConfigBinding(configElement, value); + }).collect(Collectors.toSet()); } //~--- methods -------------------------------------------------------------- @@ -64,40 +68,32 @@ public class DefaultExtensionProcessor implements ExtensionProcessor /** * Method description * - * * @param extensionPoint - * * @return */ @Override - public Iterable byExtensionPoint(Class extensionPoint) - { + public Iterable byExtensionPoint(Class extensionPoint) { return collector.byExtensionPoint(extensionPoint); } /** * Method description * - * * @param extensionPoint - * * @return */ @Override - public Class oneByExtensionPoint(Class extensionPoint) - { + public Class oneByExtensionPoint(Class extensionPoint) { return collector.oneByExtensionPoint(extensionPoint); } /** * Method description * - * * @param binder */ @Override - public void processAutoBindExtensions(Binder binder) - { + public void processAutoBindExtensions(Binder binder) { logger.info("start processing extensions"); Stopwatch sw = Stopwatch.createStarted(); @@ -111,12 +107,10 @@ public class DefaultExtensionProcessor implements ExtensionProcessor /** * Method description * - * * @return */ @Override - public Iterable getWebElements() - { + public Iterable getWebElements() { return collector.getWebElements(); } @@ -125,8 +119,16 @@ public class DefaultExtensionProcessor implements ExtensionProcessor return collector.getIndexedTypes(); } + @Override + public Iterable getConfigBindings() { + return configBindings; + } + //~--- fields --------------------------------------------------------------- - /** Field description */ + /** + * Field description + */ private final ExtensionCollector collector; + private final Set configBindings; } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java index 90f349a3b1..d0f1684dab 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginLoader.java @@ -29,10 +29,10 @@ package sonia.scm.plugin; import com.google.common.base.Throwables; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; +import jakarta.servlet.ServletContext; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; -import javax.servlet.ServletContext; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; import java.io.IOException; import java.net.URL; import java.util.Collection; @@ -64,7 +64,7 @@ public class DefaultPluginLoader implements PluginLoader * @param installedPlugins */ public DefaultPluginLoader(ServletContext servletContext, ClassLoader parent, - Set installedPlugins) + Set installedPlugins, ConfigurationResolver configurationResolver) { this.installedPlugins = installedPlugins; this.uberClassLoader = new UberClassLoader(parent, installedPlugins); @@ -79,7 +79,7 @@ public class DefaultPluginLoader implements PluginLoader modules = getInstalled(parent, context, PATH_MODULECONFIG); ExtensionCollector collector = new ExtensionCollector(parent, modules, installedPlugins); - extensionProcessor = new DefaultExtensionProcessor(collector); + extensionProcessor = new DefaultExtensionProcessor(collector, configurationResolver); } catch (IOException | JAXBException ex) { diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java index d9a4349eaf..7e508370cf 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java @@ -27,6 +27,7 @@ package sonia.scm.plugin; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.inject.Singleton; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.NotFoundException; @@ -34,7 +35,6 @@ import sonia.scm.event.ScmEventBus; import sonia.scm.lifecycle.Restarter; import sonia.scm.version.Version; -import javax.inject.Inject; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultUberWebResourceLoader.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultUberWebResourceLoader.java index 972c1baea7..bf5d72fe5f 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultUberWebResourceLoader.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultUberWebResourceLoader.java @@ -32,12 +32,12 @@ import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; +import jakarta.servlet.ServletContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContext; import sonia.scm.Stage; -import javax.servlet.ServletContext; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java b/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java index f848a9d4b8..528bfb946c 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/ExtensionCollector.java @@ -31,6 +31,7 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.config.ConfigElement; import java.util.Collection; import java.util.Collections; @@ -53,6 +54,8 @@ public final class ExtensionCollector { private final Set restProviders = Sets.newHashSet(); private final Set mappers = Sets.newHashSet(); private final Set looseExtensions = Sets.newHashSet(); + + private final Set configElements = Sets.newHashSet(); private final Multimap extensions = HashMultimap.create(); private final Map extensionPointIndex = Maps.newHashMap(); @@ -137,6 +140,10 @@ public final class ExtensionCollector { return mappers; } + public Set getConfigElements() { + return configElements; + } + public Set getWebElements() { return webElements; } @@ -233,5 +240,6 @@ public final class ExtensionCollector { webElements.addAll(collectWebElementExtensions(classLoader, module.getWebElements())); indexedTypes.addAll(collectIndexedTypes(classLoader, module.getIndexedTypes())); + Iterables.addAll(configElements, module.getConfigElements()); } } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenter.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenter.java index 85cbf163b7..22dd0421fa 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenter.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenter.java @@ -26,6 +26,8 @@ package sonia.scm.plugin; import com.github.legman.Subscribe; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; @@ -36,8 +38,6 @@ import sonia.scm.config.ScmConfigurationChangedEvent; import sonia.scm.util.HttpUtil; import sonia.scm.util.SystemUtil; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Set; @Singleton diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterAuthenticator.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterAuthenticator.java index 6fbac78b77..40b7036dd9 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterAuthenticator.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterAuthenticator.java @@ -29,6 +29,12 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -46,12 +52,6 @@ import sonia.scm.util.HttpUtil; import sonia.scm.xml.XmlEncryptionAdapter; import sonia.scm.xml.XmlInstantAdapter; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.io.IOException; import java.time.Instant; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDto.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDto.java index 5bad3327e5..8fad506ab8 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDto.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterDto.java @@ -24,14 +24,14 @@ package sonia.scm.plugin; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; import java.util.List; import java.util.Map; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterLoader.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterLoader.java index 60cf4deb81..c2eac53c4b 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterLoader.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterLoader.java @@ -26,14 +26,13 @@ package sonia.scm.plugin; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.event.ScmEventBus; import sonia.scm.net.ahc.AdvancedHttpClient; import sonia.scm.net.ahc.AdvancedHttpRequest; -import javax.inject.Inject; - import static sonia.scm.plugin.Tracing.SPAN_KIND; class PluginCenterLoader { diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterRefresh.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterRefresh.java index e38b363b2a..99dd3dbb5d 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterRefresh.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginCenterRefresh.java @@ -24,10 +24,9 @@ package sonia.scm.plugin; +import jakarta.inject.Inject; import sonia.scm.EagerSingleton; import sonia.scm.schedule.Scheduler; - -import javax.inject.Inject; import java.util.Random; /** diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java index 4317df013c..a6144d969f 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginInstaller.java @@ -27,11 +27,11 @@ package sonia.scm.plugin; import com.google.common.hash.HashCode; import com.google.common.hash.Hashing; import com.google.common.hash.HashingInputStream; +import jakarta.inject.Inject; import sonia.scm.SCMContextProvider; import sonia.scm.net.ahc.AdvancedHttpClient; import sonia.scm.net.ahc.AdvancedHttpRequest; -import javax.inject.Inject; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java index 936e2f2c3e..3c2c0470fe 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java @@ -33,13 +33,13 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.common.hash.Hashing; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContext; import sonia.scm.lifecycle.classloading.ClassLoaderLifeCycle; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; @@ -177,6 +177,11 @@ public final class PluginProcessor Set newlyInstalledPlugins = installPending(installedPlugins); logger.debug("finished installation of {} plugins", newlyInstalledPlugins.size()); + for (ExplodedSmp newInstalledSmp : newlyInstalledPlugins) { + PluginTransformer.transform(newInstalledSmp.getPath()); + } + logger.debug("finished jakarta transformation of {} plugins", newlyInstalledPlugins.size()); + Set plugins = concat(installedPlugins, newlyInstalledPlugins); logger.trace("start building plugin tree"); diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginSetConfigStore.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginSetConfigStore.java index 106894d92c..eb4abf0307 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginSetConfigStore.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginSetConfigStore.java @@ -24,11 +24,11 @@ package sonia.scm.plugin; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Optional; @Singleton diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginSetsConfig.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginSetsConfig.java index 11c3ec5735..6aec2a1e11 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginSetsConfig.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginSetsConfig.java @@ -24,14 +24,14 @@ package sonia.scm.plugin; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.util.Set; @Data diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginTransformer.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginTransformer.java new file mode 100644 index 0000000000..c4344a7e0e --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginTransformer.java @@ -0,0 +1,105 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.plugin; + +import org.eclipse.transformer.AppOption; +import org.eclipse.transformer.TransformOptions; +import org.eclipse.transformer.Transformer; +import org.eclipse.transformer.jakarta.JakartaTransform; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Comparator; +import java.util.function.Function; +import java.util.stream.Stream; + +public class PluginTransformer { + + private PluginTransformer() { + } + + public static void transform(Path pluginPath) { + Transformer transformer = new Transformer(createOptions(pluginPath.toString())); + transformer.inputPath = pluginPath.resolve("classes").toString(); + transformer.outputName = pluginPath + "-transformed"; + Transformer.ResultCode resultCode = transformer.run(); + + if (resultCode.ordinal() == 0) { + try { + try (Stream paths = Files.walk(Path.of(transformer.inputPath))) { + paths + .sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(File::delete); + } + Files.move(Path.of(transformer.outputPath), Path.of(transformer.inputPath), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + throw new PluginTransformException("Failed to overwrite transformed classes", e); + } + } else { + throw new PluginTransformException( + String.format("Failed to transform downloaded plugin: %s", + pluginPath) + ); + } + } + + private static TransformOptions createOptions(String inputFileName) { + return new TransformOptions() { + @Override + public boolean hasOption(AppOption option) { + if (option == AppOption.OVERWRITE) { + return true; + } + return TransformOptions.super.hasOption(option); + } + + @Override + public String getDefaultValue(AppOption option) { + return JakartaTransform.getOptionDefaults().get(option.getLongTag()); + } + + @Override + public Function getRuleLoader() { + return JakartaTransform.getRuleLoader(); + } + + @Override + public String getInputFileName() { + return inputFileName; + } + + @Override + public String getOutputFileName() { + // Ignore this because we want to keep the input file name + return null; + } + }; + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/SmpDescriptorExtractor.java b/scm-webapp/src/main/java/sonia/scm/plugin/SmpDescriptorExtractor.java index 5e0e89aa35..0f1a08a7fe 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/SmpDescriptorExtractor.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/SmpDescriptorExtractor.java @@ -24,8 +24,9 @@ package sonia.scm.plugin; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; + import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginAddCommand.java b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginAddCommand.java index aa1efc0e95..1aa858bcb7 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginAddCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginAddCommand.java @@ -25,12 +25,11 @@ package sonia.scm.plugin.cli; import com.cronutils.utils.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.plugin.PluginManager; -import javax.inject.Inject; - @ParentCommand(value = PluginCommand.class) @CommandLine.Command(name = "add") class PluginAddCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginApplyCommand.java b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginApplyCommand.java index 4da85c5ca3..f4c7c1d4cf 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginApplyCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginApplyCommand.java @@ -25,12 +25,11 @@ package sonia.scm.plugin.cli; import com.cronutils.utils.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.plugin.PluginManager; -import javax.inject.Inject; - @ParentCommand(value = PluginCommand.class) @CommandLine.Command(name = "apply") class PluginApplyCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListAvailableCommand.java b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListAvailableCommand.java index 2d18bd3837..93d2fb315b 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListAvailableCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListAvailableCommand.java @@ -24,13 +24,13 @@ package sonia.scm.plugin.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.TemplateRenderer; import sonia.scm.plugin.PluginInformation; import sonia.scm.plugin.PluginManager; -import javax.inject.Inject; import java.util.Collection; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListCommand.java b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListCommand.java index e3622029f7..883bfc8f6e 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListCommand.java @@ -25,6 +25,7 @@ package sonia.scm.plugin.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import lombok.Getter; import lombok.Setter; import picocli.CommandLine; @@ -37,7 +38,6 @@ import sonia.scm.plugin.PendingPlugins; import sonia.scm.plugin.PluginDescriptor; import sonia.scm.plugin.PluginManager; -import javax.inject.Inject; import java.util.Collection; import java.util.HashSet; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListInstalledCommand.java b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListInstalledCommand.java index f0882b763a..5357da1809 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListInstalledCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginListInstalledCommand.java @@ -24,13 +24,13 @@ package sonia.scm.plugin.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.TemplateRenderer; import sonia.scm.plugin.PluginInformation; import sonia.scm.plugin.PluginManager; -import javax.inject.Inject; import java.util.Collection; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginRemoveCommand.java b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginRemoveCommand.java index 35eb640ad2..14c8478305 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginRemoveCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginRemoveCommand.java @@ -25,12 +25,11 @@ package sonia.scm.plugin.cli; import com.cronutils.utils.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.plugin.PluginManager; -import javax.inject.Inject; - @ParentCommand(value = PluginCommand.class) @CommandLine.Command(name = "remove", aliases = "rm") class PluginRemoveCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginResetChangesCommand.java b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginResetChangesCommand.java index a43c44d09c..e986b6ea7f 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginResetChangesCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginResetChangesCommand.java @@ -24,12 +24,11 @@ package sonia.scm.plugin.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.plugin.PluginManager; -import javax.inject.Inject; - @ParentCommand(value = PluginCommand.class) @CommandLine.Command(name = "cancel-pending", aliases = "reset") class PluginResetChangesCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginTemplateRenderer.java b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginTemplateRenderer.java index 0f99d4d3c8..5f48bc87a7 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginTemplateRenderer.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginTemplateRenderer.java @@ -24,12 +24,12 @@ package sonia.scm.plugin.cli; +import jakarta.inject.Inject; import sonia.scm.cli.CliContext; import sonia.scm.cli.ExitCode; import sonia.scm.cli.TemplateRenderer; import sonia.scm.template.TemplateEngineFactory; -import javax.inject.Inject; import java.util.Collections; import java.util.Map; diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginUpdateAllCommand.java b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginUpdateAllCommand.java index 5f3653f8cc..c9cd0c6280 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginUpdateAllCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginUpdateAllCommand.java @@ -25,12 +25,11 @@ package sonia.scm.plugin.cli; import com.cronutils.utils.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.plugin.PluginManager; -import javax.inject.Inject; - @ParentCommand(value = PluginCommand.class) @CommandLine.Command(name = "update-all") class PluginUpdateAllCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginUpdateCommand.java b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginUpdateCommand.java index 4a3eec6d2e..e97286b4ec 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginUpdateCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/cli/PluginUpdateCommand.java @@ -25,11 +25,11 @@ package sonia.scm.plugin.cli; import com.cronutils.utils.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.plugin.PluginManager; -import javax.inject.Inject; import java.util.Objects; @ParentCommand(value = PluginCommand.class) diff --git a/scm-webapp/src/main/java/sonia/scm/repository/CurrentYearNamespaceStrategy.java b/scm-webapp/src/main/java/sonia/scm/repository/CurrentYearNamespaceStrategy.java index ef398c291c..b83a913a47 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/CurrentYearNamespaceStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/CurrentYearNamespaceStrategy.java @@ -25,9 +25,9 @@ package sonia.scm.repository; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import sonia.scm.plugin.Extension; -import javax.inject.Inject; import java.time.Clock; import java.time.Year; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultBranchDeleteProtection.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultBranchDeleteProtection.java index 1356b8fcb5..4471f5b411 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultBranchDeleteProtection.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultBranchDeleteProtection.java @@ -25,6 +25,7 @@ package sonia.scm.repository; import com.github.legman.Subscribe; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.EagerSingleton; @@ -34,7 +35,6 @@ import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.repository.spi.CannotDeleteDefaultBranchException; -import javax.inject.Inject; import java.io.IOException; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultHealthCheckService.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultHealthCheckService.java index 8c68ea3a47..d4fa49986b 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultHealthCheckService.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultHealthCheckService.java @@ -24,7 +24,7 @@ package sonia.scm.repository; -import javax.inject.Inject; +import jakarta.inject.Inject; public class DefaultHealthCheckService implements HealthCheckService { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultNamespaceManager.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultNamespaceManager.java index 99c1d5609d..5c6a85b86a 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultNamespaceManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultNamespaceManager.java @@ -25,11 +25,11 @@ package sonia.scm.repository; import com.github.legman.Subscribe; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.HandlerEventType; import sonia.scm.event.ScmEventBus; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Collection; import java.util.Optional; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java index 65c6da4115..9432be20f0 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryManager.java @@ -28,6 +28,7 @@ import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.inject.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ConfigurationException; @@ -45,7 +46,6 @@ import sonia.scm.util.AssertUtil; import sonia.scm.util.IOUtil; import sonia.scm.util.Util; -import javax.inject.Provider; import java.util.Collection; import java.util.Collections; import java.util.Comparator; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryProvider.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryProvider.java index d7017d74fc..69713823d9 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultRepositoryProvider.java @@ -27,8 +27,7 @@ package sonia.scm.repository; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.servlet.RequestScoped; - -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; @RequestScoped public class DefaultRepositoryProvider implements RepositoryProvider { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/DefaultSyncAsyncExecutorProvider.java b/scm-webapp/src/main/java/sonia/scm/repository/DefaultSyncAsyncExecutorProvider.java index e99e77cc50..03d4f07f73 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/DefaultSyncAsyncExecutorProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/DefaultSyncAsyncExecutorProvider.java @@ -26,12 +26,13 @@ package sonia.scm.repository; import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import sonia.scm.config.ConfigValue; import sonia.scm.metrics.Metrics; import sonia.scm.repository.spi.SyncAsyncExecutor; import sonia.scm.repository.spi.SyncAsyncExecutorProvider; -import javax.inject.Inject; -import javax.inject.Singleton; import java.io.Closeable; import java.time.Instant; import java.time.temporal.ChronoUnit; @@ -41,18 +42,16 @@ import java.util.concurrent.Executors; @Singleton public class DefaultSyncAsyncExecutorProvider implements SyncAsyncExecutorProvider, Closeable { - public static final int DEFAULT_MAX_ASYNC_ABORT_SECONDS = 60; - public static final String MAX_ASYNC_ABORT_SECONDS_PROPERTY = "scm.maxAsyncAbortSeconds"; - - public static final int DEFAULT_NUMBER_OF_THREADS = 4; - public static final String NUMBER_OF_THREADS_PROPERTY = "scm.asyncThreads"; - private final ExecutorService executor; private final int defaultMaxAsyncAbortSeconds; @Inject - public DefaultSyncAsyncExecutorProvider(MeterRegistry registry) { - this(createExecutorService(registry, getProperty(NUMBER_OF_THREADS_PROPERTY, DEFAULT_NUMBER_OF_THREADS))); + public DefaultSyncAsyncExecutorProvider( + @ConfigValue(key="asyncThreads", defaultValue = "4", description = "Amount of async threads for execution") Integer asyncThreads, + @ConfigValue(key="maxAsyncAbortSeconds", defaultValue = "60", description = "Max seconds for an asynchronous execution before abort") Integer maxAsyncAbortSeconds, + MeterRegistry registry + ) { + this(createExecutorService(registry, asyncThreads), maxAsyncAbortSeconds); } private static ExecutorService createExecutorService(MeterRegistry registry, int fixed) { @@ -66,9 +65,9 @@ public class DefaultSyncAsyncExecutorProvider implements SyncAsyncExecutorProvid return executorService; } - public DefaultSyncAsyncExecutorProvider(ExecutorService executor) { + public DefaultSyncAsyncExecutorProvider(ExecutorService executor, Integer maxAsyncAbortSeconds) { this.executor = executor; - this.defaultMaxAsyncAbortSeconds = getProperty(MAX_ASYNC_ABORT_SECONDS_PROPERTY, DEFAULT_MAX_ASYNC_ABORT_SECONDS); + this.defaultMaxAsyncAbortSeconds = maxAsyncAbortSeconds; } public SyncAsyncExecutor createExecutorWithSecondsToTimeout(int switchToAsyncInSeconds) { @@ -86,8 +85,4 @@ public class DefaultSyncAsyncExecutorProvider implements SyncAsyncExecutorProvid public void close() { executor.shutdownNow(); } - - private static int getProperty(String key, int defaultValue) { - return Integer.parseInt(System.getProperty(key, Integer.toString(defaultValue))); - } } diff --git a/scm-webapp/src/main/java/sonia/scm/repository/HealthCheckContextListener.java b/scm-webapp/src/main/java/sonia/scm/repository/HealthCheckContextListener.java index 03f37f5d23..87dc1371a8 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/HealthCheckContextListener.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/HealthCheckContextListener.java @@ -27,18 +27,13 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; - +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.apache.shiro.SecurityUtils; - import sonia.scm.plugin.Extension; import sonia.scm.web.security.AdministrationContext; import sonia.scm.web.security.PrivilegedAction; -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java b/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java index 28fa931561..0bc70bda5f 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/HealthChecker.java @@ -25,6 +25,7 @@ package sonia.scm.repository; import com.google.inject.Inject; +import jakarta.inject.Singleton; import org.apache.shiro.SecurityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,7 +38,6 @@ import sonia.scm.repository.api.Command; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; -import javax.inject.Singleton; import java.io.IOException; import java.util.Collection; import java.util.HashSet; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/NamespaceDao.java b/scm-webapp/src/main/java/sonia/scm/repository/NamespaceDao.java index aa4e093e04..1b75c4079b 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/NamespaceDao.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/NamespaceDao.java @@ -24,10 +24,10 @@ package sonia.scm.repository; +import jakarta.inject.Inject; import sonia.scm.store.DataStore; import sonia.scm.store.DataStoreFactory; -import javax.inject.Inject; import java.util.Collection; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/NamespaceStrategyProvider.java b/scm-webapp/src/main/java/sonia/scm/repository/NamespaceStrategyProvider.java index 307dca1f34..ca48945c0e 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/NamespaceStrategyProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/NamespaceStrategyProvider.java @@ -24,12 +24,12 @@ package sonia.scm.repository; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.config.ScmConfiguration; -import javax.inject.Inject; -import javax.inject.Provider; import java.util.Set; public class NamespaceStrategyProvider implements Provider { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/NamespaceStrategyValidator.java b/scm-webapp/src/main/java/sonia/scm/repository/NamespaceStrategyValidator.java index 6952920a08..3ea4dccdbd 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/NamespaceStrategyValidator.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/NamespaceStrategyValidator.java @@ -24,7 +24,8 @@ package sonia.scm.repository; -import javax.inject.Inject; +import jakarta.inject.Inject; + import java.util.Set; import static sonia.scm.ScmConstraintViolationException.Builder.doThrow; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/RepositoryIndexer.java b/scm-webapp/src/main/java/sonia/scm/repository/RepositoryIndexer.java index 4f3158b307..a291577bac 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/RepositoryIndexer.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/RepositoryIndexer.java @@ -26,6 +26,8 @@ package sonia.scm.repository; import com.github.legman.Subscribe; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.HandlerEventType; import sonia.scm.plugin.Extension; import sonia.scm.search.Id; @@ -35,9 +37,6 @@ import sonia.scm.search.Indexer; import sonia.scm.search.SearchEngine; import sonia.scm.search.SerializableIndexTask; -import javax.inject.Inject; -import javax.inject.Singleton; - @Singleton @Extension public class RepositoryIndexer implements Indexer { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/RepositoryInitializer.java b/scm-webapp/src/main/java/sonia/scm/repository/RepositoryInitializer.java index e746568fc9..1e1e3922a9 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/RepositoryInitializer.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/RepositoryInitializer.java @@ -28,6 +28,8 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.io.ByteSource; import com.google.common.io.CharSource; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.Priorities; @@ -35,8 +37,6 @@ import sonia.scm.repository.api.ModifyCommandBuilder; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; -import javax.inject.Inject; -import javax.inject.Singleton; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/RepositoryMatcher.java b/scm-webapp/src/main/java/sonia/scm/repository/RepositoryMatcher.java index cdb2fd8abe..bee71c57a9 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/RepositoryMatcher.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/RepositoryMatcher.java @@ -24,15 +24,15 @@ package sonia.scm.repository; - import com.google.common.collect.Maps; - import org.slf4j.Logger; - import org.slf4j.LoggerFactory; - import sonia.scm.util.HttpUtil; - import sonia.scm.util.Util; +import com.google.common.collect.Maps; +import jakarta.inject.Inject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import sonia.scm.util.HttpUtil; +import sonia.scm.util.Util; - import javax.inject.Inject; - import java.util.Map; - import java.util.Set; +import java.util.Map; +import java.util.Set; /** * RepositoryMatcher is able to check if a repository matches the requested path. diff --git a/scm-webapp/src/main/java/sonia/scm/repository/RepositoryPathCollector.java b/scm-webapp/src/main/java/sonia/scm/repository/RepositoryPathCollector.java index 6284fd4bdd..935939fba9 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/RepositoryPathCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/RepositoryPathCollector.java @@ -24,11 +24,11 @@ package sonia.scm.repository; +import jakarta.inject.Inject; import sonia.scm.plugin.Extension; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; -import javax.inject.Inject; import java.io.IOException; import java.util.Collection; import java.util.HashSet; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/RepositoryPostProcessor.java b/scm-webapp/src/main/java/sonia/scm/repository/RepositoryPostProcessor.java index 9863bcfdcf..aff3353234 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/RepositoryPostProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/RepositoryPostProcessor.java @@ -24,10 +24,10 @@ package sonia.scm.repository; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.event.ScmEventBus; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Collection; import java.util.HashMap; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespaceListCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespaceListCommand.java index 7068eba2b0..619bde448f 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespaceListCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespaceListCommand.java @@ -24,13 +24,12 @@ package sonia.scm.repository.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.TemplateRenderer; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; - import static java.util.Collections.emptyMap; @ParentCommand(value = NamespaceCommand.class) diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsAddCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsAddCommand.java index f2288eae5e..3e7a427e37 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsAddCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsAddCommand.java @@ -25,6 +25,7 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.PermissionDescriptionResolver; @@ -32,8 +33,6 @@ import sonia.scm.repository.Namespace; import sonia.scm.repository.NamespaceManager; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; - @CommandLine.Command(name = "add-permissions") @ParentCommand(value = NamespaceCommand.class) class NamespacePermissionsAddCommand extends PermissionsAddCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsAvailableCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsAvailableCommand.java index ac98919a8d..584e53988c 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsAvailableCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsAvailableCommand.java @@ -24,14 +24,13 @@ package sonia.scm.repository.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.PermissionDescriptionResolver; import sonia.scm.repository.RepositoryRoleManager; import sonia.scm.security.RepositoryPermissionProvider; -import javax.inject.Inject; - @CommandLine.Command(name = "available-permissions") @ParentCommand(value = NamespaceCommand.class) class NamespacePermissionsAvailableCommand extends PermissionsAvailableCommand { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsClearCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsClearCommand.java index 87ad615971..ec0771e91d 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsClearCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsClearCommand.java @@ -24,14 +24,13 @@ package sonia.scm.repository.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.repository.Namespace; import sonia.scm.repository.NamespaceManager; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; - @CommandLine.Command(name = "clear-permissions") @ParentCommand(value = NamespaceCommand.class) class NamespacePermissionsClearCommand extends PermissionClearCommand { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsListCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsListCommand.java index 4859ac47a7..ecade07fe5 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsListCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsListCommand.java @@ -25,14 +25,13 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.CommandValidator; import sonia.scm.cli.ParentCommand; import sonia.scm.repository.Namespace; import sonia.scm.repository.NamespaceManager; -import javax.inject.Inject; - @CommandLine.Command(name = "list-permissions") @ParentCommand(value = NamespaceCommand.class) class NamespacePermissionsListCommand extends PermissionsListCommand { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsRemoveCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsRemoveCommand.java index aefbfe2c36..7205b15aa1 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsRemoveCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsRemoveCommand.java @@ -25,14 +25,13 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.repository.Namespace; import sonia.scm.repository.NamespaceManager; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; - @CommandLine.Command(name = "remove-permissions") @ParentCommand(value = NamespaceCommand.class) class NamespacePermissionsRemoveCommand extends PermissionsRemoveCommand { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsSetRoleCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsSetRoleCommand.java index 42ba1e80d3..da85ad2c7c 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsSetRoleCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/NamespacePermissionsSetRoleCommand.java @@ -25,14 +25,13 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.repository.Namespace; import sonia.scm.repository.NamespaceManager; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; - @CommandLine.Command(name = "set-role") @ParentCommand(value = NamespaceCommand.class) class NamespacePermissionsSetRoleCommand extends PermissionsSetRoleCommand { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/PermissionBaseCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/PermissionBaseCommand.java index 05532d5fcf..cde298811f 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/PermissionBaseCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/PermissionBaseCommand.java @@ -24,12 +24,12 @@ package sonia.scm.repository.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.repository.RepositoryPermission; import sonia.scm.repository.RepositoryPermissionHolder; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; import java.util.Collection; import java.util.HashSet; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryCreateCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryCreateCommand.java index 7accd81db1..bdf8a5f9aa 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryCreateCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryCreateCommand.java @@ -26,6 +26,8 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; +import jakarta.inject.Inject; +import jakarta.validation.constraints.Email; import picocli.CommandLine; import sonia.scm.cli.CommandValidator; import sonia.scm.cli.ParentCommand; @@ -35,9 +37,6 @@ import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryName; import sonia.scm.repository.RepositoryTypeConstraint; -import javax.inject.Inject; -import javax.validation.constraints.Email; - @CommandLine.Command(name = "create") @ParentCommand(value = RepositoryCommand.class) class RepositoryCreateCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryDeleteCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryDeleteCommand.java index 173397a8c4..da103f83de 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryDeleteCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryDeleteCommand.java @@ -25,13 +25,13 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; import java.util.Collections; @CommandLine.Command(name = "delete", aliases = "rm") diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryGetCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryGetCommand.java index a49924a079..8a716f094c 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryGetCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryGetCommand.java @@ -25,14 +25,13 @@ package sonia.scm.repository.cli; import com.cronutils.utils.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; - @ParentCommand(value = RepositoryCommand.class) @CommandLine.Command(name = "get") class RepositoryGetCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryListCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryListCommand.java index 6b697e52ed..deee706bc1 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryListCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryListCommand.java @@ -26,13 +26,13 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.Table; import sonia.scm.cli.TemplateRenderer; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; import java.util.Collection; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryModifyCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryModifyCommand.java index 3f438c03b1..d89ab060a6 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryModifyCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryModifyCommand.java @@ -25,6 +25,8 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.validation.constraints.Email; import picocli.CommandLine; import sonia.scm.cli.CommandValidator; import sonia.scm.cli.ParentCommand; @@ -32,9 +34,6 @@ import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; -import javax.validation.constraints.Email; - @ParentCommand(value = RepositoryCommand.class) @CommandLine.Command(name = "modify") class RepositoryModifyCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionBeanMapper.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionBeanMapper.java index 811f7a9437..9adb49ede2 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionBeanMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionBeanMapper.java @@ -24,11 +24,11 @@ package sonia.scm.repository.cli; +import jakarta.inject.Inject; import sonia.scm.cli.PermissionDescriptionResolver; import sonia.scm.repository.RepositoryPermission; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; import java.util.Collection; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsAddCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsAddCommand.java index 83a843e843..29c4272ba3 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsAddCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsAddCommand.java @@ -25,6 +25,7 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.PermissionDescriptionResolver; @@ -32,8 +33,6 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; - @CommandLine.Command(name = "add-permissions") @ParentCommand(value = RepositoryCommand.class) class RepositoryPermissionsAddCommand extends PermissionsAddCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsAvailableCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsAvailableCommand.java index d7250cf2f3..77d2403326 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsAvailableCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsAvailableCommand.java @@ -24,14 +24,13 @@ package sonia.scm.repository.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.PermissionDescriptionResolver; import sonia.scm.repository.RepositoryRoleManager; import sonia.scm.security.RepositoryPermissionProvider; -import javax.inject.Inject; - @CommandLine.Command(name = "available-permissions") @ParentCommand(value = RepositoryCommand.class) class RepositoryPermissionsAvailableCommand extends PermissionsAvailableCommand { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsClearCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsClearCommand.java index 4daddfe602..6ad3a123fc 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsClearCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsClearCommand.java @@ -25,14 +25,13 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; - @CommandLine.Command(name = "clear-permissions") @ParentCommand(value = RepositoryCommand.class) class RepositoryPermissionsClearCommand extends PermissionClearCommand { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsListCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsListCommand.java index 166be9c28f..e9173e9e3d 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsListCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsListCommand.java @@ -25,14 +25,13 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.CommandValidator; import sonia.scm.cli.ParentCommand; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; - @CommandLine.Command(name = "list-permissions") @ParentCommand(value = RepositoryCommand.class) class RepositoryPermissionsListCommand extends PermissionsListCommand { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsRemoveCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsRemoveCommand.java index ed96ff4f6b..28ba715259 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsRemoveCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsRemoveCommand.java @@ -25,14 +25,13 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; - @CommandLine.Command(name = "remove-permissions") @ParentCommand(value = RepositoryCommand.class) class RepositoryPermissionsRemoveCommand extends PermissionsRemoveCommand { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsSetRoleCommand.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsSetRoleCommand.java index 4ff1234605..f6e9e4ea8b 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsSetRoleCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryPermissionsSetRoleCommand.java @@ -25,14 +25,13 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; - @CommandLine.Command(name = "set-role") @ParentCommand(value = RepositoryCommand.class) class RepositoryPermissionsSetRoleCommand extends PermissionsSetRoleCommand { diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryTemplateRenderer.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryTemplateRenderer.java index 43f09ddc19..24ca8c640f 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryTemplateRenderer.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryTemplateRenderer.java @@ -24,6 +24,7 @@ package sonia.scm.repository.cli; +import jakarta.inject.Inject; import sonia.scm.cli.CliContext; import sonia.scm.cli.ExitCode; import sonia.scm.cli.Table; @@ -31,7 +32,6 @@ import sonia.scm.cli.TemplateRenderer; import sonia.scm.repository.Repository; import sonia.scm.template.TemplateEngineFactory; -import javax.inject.Inject; import java.util.Collection; import java.util.Map; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryToRepositoryCommandDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryToRepositoryCommandDtoMapper.java index 697624f780..20b8cf1c59 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryToRepositoryCommandDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/cli/RepositoryToRepositoryCommandDtoMapper.java @@ -25,6 +25,7 @@ package sonia.scm.repository.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ObjectFactory; @@ -33,7 +34,6 @@ import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.repository.api.ScmProtocol; -import javax.inject.Inject; import java.time.Instant; import java.time.format.DateTimeFormatter; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/schedule/CronScheduler.java b/scm-webapp/src/main/java/sonia/scm/schedule/CronScheduler.java index c8ab89d72f..055d03df18 100644 --- a/scm-webapp/src/main/java/sonia/scm/schedule/CronScheduler.java +++ b/scm-webapp/src/main/java/sonia/scm/schedule/CronScheduler.java @@ -25,12 +25,12 @@ package sonia.scm.schedule; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.metrics.Metrics; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; diff --git a/scm-webapp/src/main/java/sonia/scm/schedule/CronTaskFactory.java b/scm-webapp/src/main/java/sonia/scm/schedule/CronTaskFactory.java index b1c1af5705..66535c1263 100644 --- a/scm-webapp/src/main/java/sonia/scm/schedule/CronTaskFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/schedule/CronTaskFactory.java @@ -26,9 +26,8 @@ package sonia.scm.schedule; import com.google.inject.Injector; import com.google.inject.util.Providers; - -import javax.inject.Inject; -import javax.inject.Provider; +import jakarta.inject.Inject; +import jakarta.inject.Provider; class CronTaskFactory { diff --git a/scm-webapp/src/main/java/sonia/scm/schedule/PrivilegedRunnableFactory.java b/scm-webapp/src/main/java/sonia/scm/schedule/PrivilegedRunnableFactory.java index b86a7ff07e..85cce399e7 100644 --- a/scm-webapp/src/main/java/sonia/scm/schedule/PrivilegedRunnableFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/schedule/PrivilegedRunnableFactory.java @@ -24,13 +24,12 @@ package sonia.scm.schedule; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.web.security.AdministrationContext; -import javax.inject.Inject; -import javax.inject.Provider; - class PrivilegedRunnableFactory { private static final Logger LOG = LoggerFactory.getLogger(PrivilegedRunnableFactory.class); diff --git a/scm-webapp/src/main/java/sonia/scm/search/DefaultIndexLogStore.java b/scm-webapp/src/main/java/sonia/scm/search/DefaultIndexLogStore.java index be487f434e..b0de9427e1 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/DefaultIndexLogStore.java +++ b/scm-webapp/src/main/java/sonia/scm/search/DefaultIndexLogStore.java @@ -24,11 +24,11 @@ package sonia.scm.search; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.store.DataStore; import sonia.scm.store.DataStoreFactory; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Optional; @Singleton diff --git a/scm-webapp/src/main/java/sonia/scm/search/IndexBootstrapListener.java b/scm-webapp/src/main/java/sonia/scm/search/IndexBootstrapListener.java index 923da1ff44..90f3562b07 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/IndexBootstrapListener.java +++ b/scm-webapp/src/main/java/sonia/scm/search/IndexBootstrapListener.java @@ -24,14 +24,14 @@ package sonia.scm.search; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.Extension; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; import java.util.Optional; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/search/IndexManager.java b/scm-webapp/src/main/java/sonia/scm/search/IndexManager.java index 54f3dfc834..3b3a3788ab 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/IndexManager.java +++ b/scm-webapp/src/main/java/sonia/scm/search/IndexManager.java @@ -24,6 +24,13 @@ package sonia.scm.search; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.xml.bind.JAXB; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Data; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; @@ -33,13 +40,6 @@ import org.apache.lucene.store.FSDirectory; import sonia.scm.SCMContextProvider; import sonia.scm.plugin.PluginLoader; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.xml.bind.JAXB; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-webapp/src/main/java/sonia/scm/search/IndexRebuilder.java b/scm-webapp/src/main/java/sonia/scm/search/IndexRebuilder.java index 249e9b5d30..c799e263f1 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/IndexRebuilder.java +++ b/scm-webapp/src/main/java/sonia/scm/search/IndexRebuilder.java @@ -24,10 +24,10 @@ package sonia.scm.search; +import jakarta.inject.Inject; import sonia.scm.event.ScmEventBus; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; import java.util.Set; public class IndexRebuilder { diff --git a/scm-webapp/src/main/java/sonia/scm/search/LuceneIndex.java b/scm-webapp/src/main/java/sonia/scm/search/LuceneIndex.java index 9ad8fcfca5..9d89eb2d1b 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/LuceneIndex.java +++ b/scm-webapp/src/main/java/sonia/scm/search/LuceneIndex.java @@ -26,6 +26,7 @@ package sonia.scm.search; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; +import jakarta.annotation.Nonnull; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.StringField; @@ -35,7 +36,6 @@ import org.apache.lucene.search.Query; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nonnull; import java.io.IOException; import java.util.Collection; import java.util.HashMap; diff --git a/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexDetails.java b/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexDetails.java index e4010bc115..b9a3f673b9 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexDetails.java +++ b/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexDetails.java @@ -24,14 +24,13 @@ package sonia.scm.search; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; - @Data @XmlRootElement @NoArgsConstructor diff --git a/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexFactory.java b/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexFactory.java index aca51bb430..30520b77b2 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexFactory.java @@ -24,11 +24,11 @@ package sonia.scm.search; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexTask.java b/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexTask.java index 3c523f2b13..07da5fd620 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexTask.java +++ b/scm-webapp/src/main/java/sonia/scm/search/LuceneIndexTask.java @@ -25,8 +25,8 @@ package sonia.scm.search; import com.google.inject.Injector; +import jakarta.inject.Inject; -import javax.inject.Inject; import java.io.Serializable; public abstract class LuceneIndexTask implements Runnable, Serializable { diff --git a/scm-webapp/src/main/java/sonia/scm/search/LuceneQueryBuilder.java b/scm-webapp/src/main/java/sonia/scm/search/LuceneQueryBuilder.java index 60de55a55b..7af03a33be 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/LuceneQueryBuilder.java +++ b/scm-webapp/src/main/java/sonia/scm/search/LuceneQueryBuilder.java @@ -25,6 +25,7 @@ package sonia.scm.search; import com.google.common.base.Strings; +import jakarta.annotation.Nonnull; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.tokenattributes.CharTermAttribute; @@ -46,7 +47,6 @@ import org.apache.lucene.search.highlight.InvalidTokenOffsetsException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nonnull; import java.io.IOException; public class LuceneQueryBuilder extends QueryBuilder { diff --git a/scm-webapp/src/main/java/sonia/scm/search/LuceneQueryBuilderFactory.java b/scm-webapp/src/main/java/sonia/scm/search/LuceneQueryBuilderFactory.java index aaf5e9d955..1a17285b98 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/LuceneQueryBuilderFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/search/LuceneQueryBuilderFactory.java @@ -24,7 +24,7 @@ package sonia.scm.search; -import javax.inject.Inject; +import jakarta.inject.Inject; public class LuceneQueryBuilderFactory { diff --git a/scm-webapp/src/main/java/sonia/scm/search/LuceneSearchEngine.java b/scm-webapp/src/main/java/sonia/scm/search/LuceneSearchEngine.java index 227098d9f5..181d7664e2 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/LuceneSearchEngine.java +++ b/scm-webapp/src/main/java/sonia/scm/search/LuceneSearchEngine.java @@ -25,6 +25,7 @@ package sonia.scm.search; import com.google.common.base.Joiner; +import jakarta.inject.Inject; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; import org.slf4j.Logger; @@ -33,7 +34,6 @@ import sonia.scm.work.CentralWorkQueue; import sonia.scm.work.CentralWorkQueue.Enqueue; import sonia.scm.work.Task; -import javax.inject.Inject; import java.util.ArrayList; import java.util.Collection; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/search/LuceneSearchableType.java b/scm-webapp/src/main/java/sonia/scm/search/LuceneSearchableType.java index 3cd767432e..9a8debc385 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/LuceneSearchableType.java +++ b/scm-webapp/src/main/java/sonia/scm/search/LuceneSearchableType.java @@ -25,10 +25,10 @@ package sonia.scm.search; import com.google.common.base.Strings; +import jakarta.annotation.Nonnull; import lombok.Value; import org.apache.lucene.queryparser.flexible.standard.config.PointsConfig; -import javax.annotation.Nonnull; import java.util.Collection; import java.util.Collections; import java.util.HashMap; diff --git a/scm-webapp/src/main/java/sonia/scm/search/Names.java b/scm-webapp/src/main/java/sonia/scm/search/Names.java index 55fcd2773b..f7aa3291dc 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/Names.java +++ b/scm-webapp/src/main/java/sonia/scm/search/Names.java @@ -25,8 +25,7 @@ package sonia.scm.search; import com.google.common.base.Strings; - -import javax.annotation.Nullable; +import jakarta.annotation.Nullable; final class Names { diff --git a/scm-webapp/src/main/java/sonia/scm/search/SearchableTypeResolver.java b/scm-webapp/src/main/java/sonia/scm/search/SearchableTypeResolver.java index fdc70929b5..e115dce939 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/SearchableTypeResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/search/SearchableTypeResolver.java @@ -25,11 +25,11 @@ package sonia.scm.search; import com.google.common.annotations.VisibleForTesting; +import jakarta.annotation.Nonnull; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.plugin.PluginLoader; -import javax.annotation.Nonnull; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Arrays; import java.util.Collection; import java.util.Collections; diff --git a/scm-webapp/src/main/java/sonia/scm/search/TypeConverter.java b/scm-webapp/src/main/java/sonia/scm/search/TypeConverter.java index 231ae60472..be55ccc13d 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/TypeConverter.java +++ b/scm-webapp/src/main/java/sonia/scm/search/TypeConverter.java @@ -24,10 +24,10 @@ package sonia.scm.search; +import jakarta.annotation.Nonnull; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexableField; -import javax.annotation.Nonnull; import java.lang.reflect.InvocationTargetException; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/search/ValueExtractors.java b/scm-webapp/src/main/java/sonia/scm/search/ValueExtractors.java index 0476d3ef4f..32a42726f1 100644 --- a/scm-webapp/src/main/java/sonia/scm/search/ValueExtractors.java +++ b/scm-webapp/src/main/java/sonia/scm/search/ValueExtractors.java @@ -24,9 +24,9 @@ package sonia.scm.search; +import jakarta.annotation.Nonnull; import org.apache.lucene.index.IndexableField; -import javax.annotation.Nonnull; import java.time.Instant; import java.util.Locale; diff --git a/scm-webapp/src/main/java/sonia/scm/security/AnonymousRealm.java b/scm-webapp/src/main/java/sonia/scm/security/AnonymousRealm.java index b5dc06c5e4..5c0fd25a7f 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/AnonymousRealm.java +++ b/scm-webapp/src/main/java/sonia/scm/security/AnonymousRealm.java @@ -26,6 +26,8 @@ package sonia.scm.security; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.ws.rs.NotAuthorizedException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.credential.AllowAllCredentialsMatcher; @@ -34,9 +36,6 @@ import sonia.scm.SCMContext; import sonia.scm.plugin.Extension; import sonia.scm.user.UserDAO; -import javax.inject.Singleton; -import javax.ws.rs.NotAuthorizedException; - import static com.google.common.base.Preconditions.checkArgument; @Singleton diff --git a/scm-webapp/src/main/java/sonia/scm/security/ApiKeyCollection.java b/scm-webapp/src/main/java/sonia/scm/security/ApiKeyCollection.java index 1441e8af21..2d7ea8ad81 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/ApiKeyCollection.java +++ b/scm-webapp/src/main/java/sonia/scm/security/ApiKeyCollection.java @@ -24,16 +24,16 @@ package sonia.scm.security; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import org.apache.commons.collections.CollectionUtils; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.Collection; import java.util.function.Predicate; diff --git a/scm-webapp/src/main/java/sonia/scm/security/ApiKeyRealm.java b/scm-webapp/src/main/java/sonia/scm/security/ApiKeyRealm.java index b4860cb60d..8617619e8d 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/ApiKeyRealm.java +++ b/scm-webapp/src/main/java/sonia/scm/security/ApiKeyRealm.java @@ -25,6 +25,8 @@ package sonia.scm.security; import com.google.common.io.BaseEncoding; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.UsernamePasswordToken; @@ -38,9 +40,6 @@ import sonia.scm.plugin.Extension; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRoleManager; -import javax.inject.Inject; -import javax.inject.Singleton; - import static com.google.common.base.Preconditions.checkArgument; @Singleton diff --git a/scm-webapp/src/main/java/sonia/scm/security/ApiKeyService.java b/scm-webapp/src/main/java/sonia/scm/security/ApiKeyService.java index 59e8d706d7..cc52006d66 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/ApiKeyService.java +++ b/scm-webapp/src/main/java/sonia/scm/security/ApiKeyService.java @@ -26,6 +26,7 @@ package sonia.scm.security; import com.github.legman.Subscribe; import com.google.common.util.concurrent.Striped; +import jakarta.inject.Inject; import lombok.AllArgsConstructor; import lombok.Getter; import org.apache.shiro.authc.credential.PasswordService; @@ -40,7 +41,6 @@ import sonia.scm.store.DataStoreFactory; import sonia.scm.user.UserEvent; import sonia.scm.user.UserPermissions; -import javax.inject.Inject; import java.security.SecureRandom; import java.util.Collection; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/security/ApiKeyWithPassphrase.java b/scm-webapp/src/main/java/sonia/scm/security/ApiKeyWithPassphrase.java index ca56c23693..37e599c8da 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/ApiKeyWithPassphrase.java +++ b/scm-webapp/src/main/java/sonia/scm/security/ApiKeyWithPassphrase.java @@ -24,16 +24,16 @@ package sonia.scm.security; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import sonia.scm.xml.XmlInstantAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; @AllArgsConstructor diff --git a/scm-webapp/src/main/java/sonia/scm/security/AuthorizationChangedEventProducer.java b/scm-webapp/src/main/java/sonia/scm/security/AuthorizationChangedEventProducer.java index e910b4a0a9..694599ba13 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/AuthorizationChangedEventProducer.java +++ b/scm-webapp/src/main/java/sonia/scm/security/AuthorizationChangedEventProducer.java @@ -26,6 +26,7 @@ package sonia.scm.security; import com.github.legman.Subscribe; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.EagerSingleton; @@ -46,7 +47,6 @@ import sonia.scm.user.User; import sonia.scm.user.UserEvent; import sonia.scm.user.UserModificationEvent; -import javax.inject.Singleton; import java.util.Collection; /** diff --git a/scm-webapp/src/main/java/sonia/scm/security/BearerRealm.java b/scm-webapp/src/main/java/sonia/scm/security/BearerRealm.java index a587d35709..83e11e36fb 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/BearerRealm.java +++ b/scm-webapp/src/main/java/sonia/scm/security/BearerRealm.java @@ -25,6 +25,8 @@ package sonia.scm.security; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.credential.AllowAllCredentialsMatcher; @@ -35,9 +37,6 @@ import sonia.scm.group.GroupDAO; import sonia.scm.plugin.Extension; import sonia.scm.user.UserDAO; -import javax.inject.Inject; -import javax.inject.Singleton; - import static com.google.common.base.Preconditions.checkArgument; diff --git a/scm-webapp/src/main/java/sonia/scm/security/ConfigurableLoginAttemptHandler.java b/scm-webapp/src/main/java/sonia/scm/security/ConfigurableLoginAttemptHandler.java index bc41aa7b83..1b24cd101e 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/ConfigurableLoginAttemptHandler.java +++ b/scm-webapp/src/main/java/sonia/scm/security/ConfigurableLoginAttemptHandler.java @@ -26,6 +26,7 @@ package sonia.scm.security; import com.google.common.base.MoreObjects; import com.google.inject.Inject; +import jakarta.inject.Singleton; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; @@ -34,7 +35,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.config.ScmConfiguration; -import javax.inject.Singleton; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; diff --git a/scm-webapp/src/main/java/sonia/scm/security/DefaultAccessTokenCookieIssuer.java b/scm-webapp/src/main/java/sonia/scm/security/DefaultAccessTokenCookieIssuer.java index cf033a460f..5114756f9f 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/DefaultAccessTokenCookieIssuer.java +++ b/scm-webapp/src/main/java/sonia/scm/security/DefaultAccessTokenCookieIssuer.java @@ -26,6 +26,10 @@ package sonia.scm.security; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; +import jakarta.inject.Inject; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.config.ScmConfiguration; @@ -33,10 +37,6 @@ import sonia.scm.initialization.InitializationCookieIssuer; import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; -import javax.inject.Inject; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.util.Arrays; import java.util.concurrent.TimeUnit; diff --git a/scm-webapp/src/main/java/sonia/scm/security/DefaultRealm.java b/scm-webapp/src/main/java/sonia/scm/security/DefaultRealm.java index d03d15e97a..dd99870a8f 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/DefaultRealm.java +++ b/scm-webapp/src/main/java/sonia/scm/security/DefaultRealm.java @@ -27,6 +27,8 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; @@ -41,8 +43,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.Extension; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Iterator; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/security/DefaultSecuritySystem.java b/scm-webapp/src/main/java/sonia/scm/security/DefaultSecuritySystem.java index 406732c26e..da827f828f 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/DefaultSecuritySystem.java +++ b/scm-webapp/src/main/java/sonia/scm/security/DefaultSecuritySystem.java @@ -33,6 +33,12 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet.Builder; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.HandlerEventType; @@ -46,12 +52,6 @@ import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.user.UserEvent; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.IOException; import java.net.URL; import java.util.Collection; diff --git a/scm-webapp/src/main/java/sonia/scm/security/Impersonator.java b/scm-webapp/src/main/java/sonia/scm/security/Impersonator.java index 0b4b691cd3..41f4c0f029 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/Impersonator.java +++ b/scm-webapp/src/main/java/sonia/scm/security/Impersonator.java @@ -24,6 +24,7 @@ package sonia.scm.security; +import jakarta.inject.Inject; import org.apache.shiro.SecurityUtils; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.subject.PrincipalCollection; @@ -33,8 +34,6 @@ import org.apache.shiro.util.ThreadContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; - /** * Impersonator allows the usage of scm-manager api in the context of another user. * diff --git a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java index 52d276c60a..2f7fba69b9 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java +++ b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java @@ -45,8 +45,6 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; -import static sonia.scm.security.JwtSystemProperties.ENDLESS_JWT; - /** * Jwt implementation of {@link AccessTokenBuilder}. * @@ -68,6 +66,7 @@ public final class JwtAccessTokenBuilder implements AccessTokenBuilder { private final KeyGenerator keyGenerator; private final SecureKeyResolver keyResolver; + private final JwtConfig jwtConfig; private final Clock clock; private String subject; @@ -82,9 +81,10 @@ public final class JwtAccessTokenBuilder implements AccessTokenBuilder { private final Map custom = Maps.newHashMap(); - JwtAccessTokenBuilder(KeyGenerator keyGenerator, SecureKeyResolver keyResolver, Clock clock) { + JwtAccessTokenBuilder(KeyGenerator keyGenerator, SecureKeyResolver keyResolver, JwtConfig jwtConfig, Clock clock) { this.keyGenerator = keyGenerator; this.keyResolver = keyResolver; + this.jwtConfig = jwtConfig; this.clock = clock; } @@ -188,7 +188,7 @@ public final class JwtAccessTokenBuilder implements AccessTokenBuilder { .setId(id) .setIssuedAt(Date.from(now)); - if(!JwtSystemProperties.isEndlessJwtEnabled()) { + if(!jwtConfig.isEndlessJwtEnabled()) { claims.setExpiration(new Date(now.toEpochMilli() + expiration)); } diff --git a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilderFactory.java b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilderFactory.java index 333634c668..d4e6faa7c9 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilderFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilderFactory.java @@ -24,10 +24,11 @@ package sonia.scm.security; +import jakarta.inject.Inject; +import sonia.scm.plugin.Extension; + import java.time.Clock; import java.util.Set; -import javax.inject.Inject; -import sonia.scm.plugin.Extension; /** * Jwt implementation of {@link AccessTokenBuilderFactory}. @@ -40,26 +41,28 @@ public final class JwtAccessTokenBuilderFactory implements AccessTokenBuilderFac private final KeyGenerator keyGenerator; private final SecureKeyResolver keyResolver; + private final JwtConfig jwtConfig; private final Set enrichers; private final Clock clock; @Inject public JwtAccessTokenBuilderFactory( - KeyGenerator keyGenerator, SecureKeyResolver keyResolver, Set enrichers) { - this(keyGenerator, keyResolver, enrichers, Clock.systemDefaultZone()); + KeyGenerator keyGenerator, SecureKeyResolver keyResolver, Set enrichers, JwtConfig jwtConfig) { + this(keyGenerator, keyResolver, jwtConfig, enrichers, Clock.systemDefaultZone()); } JwtAccessTokenBuilderFactory( - KeyGenerator keyGenerator, SecureKeyResolver keyResolver, Set enrichers, Clock clock) { + KeyGenerator keyGenerator, SecureKeyResolver keyResolver, JwtConfig jwtConfig, Set enrichers, Clock clock) { this.keyGenerator = keyGenerator; this.keyResolver = keyResolver; + this.jwtConfig = jwtConfig; this.enrichers = enrichers; this.clock = clock; } @Override public JwtAccessTokenBuilder create() { - JwtAccessTokenBuilder builder = new JwtAccessTokenBuilder(keyGenerator, keyResolver, clock); + JwtAccessTokenBuilder builder = new JwtAccessTokenBuilder(keyGenerator, keyResolver, jwtConfig, clock); // enrich access token builder enrichers.forEach((enricher) -> { diff --git a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenRefresher.java b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenRefresher.java index 0301c0fc44..646319f19f 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenRefresher.java +++ b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenRefresher.java @@ -24,11 +24,11 @@ package sonia.scm.security; +import jakarta.inject.Inject; import org.apache.shiro.SecurityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.inject.Inject; import java.time.Clock; import java.util.Date; import java.util.Map; diff --git a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenResolver.java b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenResolver.java index 3e8b5f1722..68a749626c 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenResolver.java @@ -28,12 +28,12 @@ import io.jsonwebtoken.Claims; import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; +import jakarta.inject.Inject; import org.apache.shiro.authc.AuthenticationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.Extension; -import javax.inject.Inject; import java.util.Set; /** diff --git a/scm-webapp/src/main/java/sonia/scm/security/JwtConfig.java b/scm-webapp/src/main/java/sonia/scm/security/JwtConfig.java new file mode 100644 index 0000000000..c0c38c3d10 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/security/JwtConfig.java @@ -0,0 +1,49 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.security; + +import jakarta.inject.Inject; +import sonia.scm.EagerSingleton; +import sonia.scm.config.ConfigValue; + +@EagerSingleton +public class JwtConfig { + + private final boolean endlessJwt; + + @Inject + public JwtConfig( + @ConfigValue( + key = "endlessJwt", + defaultValue = "false", + description = "The lifespan of the issued JWT tokens should be endless. Logged-in users are no longer automatically logged out.") + boolean endlessJwt) { + this.endlessJwt = endlessJwt; + } + + public boolean isEndlessJwtEnabled() { + return this.endlessJwt; + } +} diff --git a/scm-webapp/src/main/java/sonia/scm/security/PermissionAssigner.java b/scm-webapp/src/main/java/sonia/scm/security/PermissionAssigner.java index 53dee39d29..6c87e3a3c4 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/PermissionAssigner.java +++ b/scm-webapp/src/main/java/sonia/scm/security/PermissionAssigner.java @@ -24,10 +24,10 @@ package sonia.scm.security; +import jakarta.inject.Inject; import sonia.scm.ContextEntry; import sonia.scm.NotFoundException; -import javax.inject.Inject; import java.util.Collection; import java.util.List; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/security/ScmAtLeastOneSuccessfulStrategy.java b/scm-webapp/src/main/java/sonia/scm/security/ScmAtLeastOneSuccessfulStrategy.java index c470829be4..11f65f0a51 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/ScmAtLeastOneSuccessfulStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/security/ScmAtLeastOneSuccessfulStrategy.java @@ -25,6 +25,7 @@ package sonia.scm.security; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.inject.Inject; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; @@ -33,7 +34,6 @@ import org.apache.shiro.realm.Realm; import org.apache.shiro.subject.PrincipalCollection; import sonia.scm.metrics.AuthenticationMetrics; -import javax.inject.Inject; import java.util.ArrayList; import java.util.Collection; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/security/SecureKey.java b/scm-webapp/src/main/java/sonia/scm/security/SecureKey.java index ebd3f06b79..e0e1e56615 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/SecureKey.java +++ b/scm-webapp/src/main/java/sonia/scm/security/SecureKey.java @@ -27,10 +27,9 @@ package sonia.scm.security; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.base.Objects; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-webapp/src/main/java/sonia/scm/security/SecureKeyResolver.java b/scm-webapp/src/main/java/sonia/scm/security/SecureKeyResolver.java index cc00dbae05..506debccde 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/SecureKeyResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/security/SecureKeyResolver.java @@ -28,28 +28,23 @@ package sonia.scm.security; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; - import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwsHeader; import io.jsonwebtoken.SigningKeyResolverAdapter; - +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.lifecycle.jwt.JwtSettings; import sonia.scm.lifecycle.jwt.JwtSettingsStore; import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStoreFactory; -import static com.google.common.base.Preconditions.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.security.SecureRandom; import java.util.Random; -import javax.inject.Inject; -import javax.inject.Singleton; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; /** * Resolve secure keys which can be used for signing token and messages. diff --git a/scm-webapp/src/main/java/sonia/scm/security/SecureParameterSerializer.java b/scm-webapp/src/main/java/sonia/scm/security/SecureParameterSerializer.java index 3b0c86bfe0..46aece2c20 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/SecureParameterSerializer.java +++ b/scm-webapp/src/main/java/sonia/scm/security/SecureParameterSerializer.java @@ -25,8 +25,8 @@ package sonia.scm.security; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.inject.Inject; -import javax.inject.Inject; import java.io.IOException; public final class SecureParameterSerializer { diff --git a/scm-webapp/src/main/java/sonia/scm/security/SecurityRequestFilter.java b/scm-webapp/src/main/java/sonia/scm/security/SecurityRequestFilter.java index 42a9f03e1f..fe61564a00 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/SecurityRequestFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/security/SecurityRequestFilter.java @@ -24,17 +24,17 @@ package sonia.scm.security; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.container.ResourceInfo; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.ext.Provider; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.subject.Subject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.container.ResourceInfo; -import javax.ws.rs.core.Context; -import javax.ws.rs.ext.Provider; import java.lang.reflect.Method; @Provider diff --git a/scm-webapp/src/main/java/sonia/scm/security/SecurityRequests.java b/scm-webapp/src/main/java/sonia/scm/security/SecurityRequests.java index 319218c4d1..fcd455c5cb 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/SecurityRequests.java +++ b/scm-webapp/src/main/java/sonia/scm/security/SecurityRequests.java @@ -24,7 +24,8 @@ package sonia.scm.security; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; + import java.util.regex.Pattern; import static sonia.scm.api.v2.resources.ScmPathInfo.REST_API_PATH; diff --git a/scm-webapp/src/main/java/sonia/scm/security/SystemRepositoryPermissionProvider.java b/scm-webapp/src/main/java/sonia/scm/security/SystemRepositoryPermissionProvider.java index e2cb770424..f58944eb93 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/SystemRepositoryPermissionProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/security/SystemRepositoryPermissionProvider.java @@ -25,20 +25,20 @@ package sonia.scm.security; import com.google.inject.Inject; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlValue; import lombok.EqualsAndHashCode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.PluginLoader; import sonia.scm.repository.RepositoryRole; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlValue; import java.io.IOException; import java.net.URL; import java.util.ArrayList; diff --git a/scm-webapp/src/main/java/sonia/scm/security/TokenExpiredFilter.java b/scm-webapp/src/main/java/sonia/scm/security/TokenExpiredFilter.java index 1ca31a9ecf..374471ea9c 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/TokenExpiredFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/security/TokenExpiredFilter.java @@ -27,6 +27,11 @@ package sonia.scm.security; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -37,11 +42,6 @@ import sonia.scm.filter.WebElement; import sonia.scm.web.VndMediaType; import sonia.scm.web.filter.HttpFilter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebElement("/*") diff --git a/scm-webapp/src/main/java/sonia/scm/security/XsrfAccessTokenEnricher.java b/scm-webapp/src/main/java/sonia/scm/security/XsrfAccessTokenEnricher.java index a19afe6cb8..d664bbe5c4 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/XsrfAccessTokenEnricher.java +++ b/scm-webapp/src/main/java/sonia/scm/security/XsrfAccessTokenEnricher.java @@ -25,20 +25,19 @@ package sonia.scm.security; import com.google.common.annotations.VisibleForTesting; - -import java.util.UUID; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.servlet.http.HttpServletRequest; - import com.google.inject.OutOfScopeException; import com.google.inject.ProvisionException; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.config.ScmConfiguration; import sonia.scm.plugin.Extension; import sonia.scm.util.HttpUtil; +import java.util.UUID; + /** * Xsrf access token enricher will add an xsrf custom field to the access token. The enricher will only * add the xsrf field, if the authentication request is issued from the web interface and xsrf protection is diff --git a/scm-webapp/src/main/java/sonia/scm/security/XsrfAccessTokenValidator.java b/scm-webapp/src/main/java/sonia/scm/security/XsrfAccessTokenValidator.java index 16a1fa0ce5..23f979c480 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/XsrfAccessTokenValidator.java +++ b/scm-webapp/src/main/java/sonia/scm/security/XsrfAccessTokenValidator.java @@ -25,11 +25,11 @@ package sonia.scm.security; import com.google.common.collect.ImmutableSet; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletRequest; import sonia.scm.plugin.Extension; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.servlet.http.HttpServletRequest; import java.util.Locale; import java.util.Optional; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/security/XsrfExcludes.java b/scm-webapp/src/main/java/sonia/scm/security/XsrfExcludes.java index e3011b1460..85bf79c81b 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/XsrfExcludes.java +++ b/scm-webapp/src/main/java/sonia/scm/security/XsrfExcludes.java @@ -25,8 +25,8 @@ package sonia.scm.security; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import jakarta.inject.Singleton; -import javax.inject.Singleton; import java.util.HashSet; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultGPG.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultGPG.java index 2e3c4411ba..3137ef0ef7 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultGPG.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultGPG.java @@ -24,6 +24,7 @@ package sonia.scm.security.gpg; +import jakarta.inject.Inject; import org.apache.shiro.SecurityUtils; import org.bouncycastle.bcpg.ArmoredInputStream; import org.bouncycastle.openpgp.PGPException; @@ -38,7 +39,6 @@ import sonia.scm.security.GPG; import sonia.scm.security.PrivateKey; import sonia.scm.security.PublicKey; -import javax.inject.Inject; import java.io.ByteArrayInputStream; import java.io.IOException; import java.security.InvalidAlgorithmParameterException; diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultPrivateKey.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultPrivateKey.java index 9081209c50..d4bc09f556 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultPrivateKey.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultPrivateKey.java @@ -24,6 +24,7 @@ package sonia.scm.security.gpg; +import jakarta.validation.constraints.NotNull; import org.apache.commons.io.IOUtils; import org.bouncycastle.bcpg.ArmoredOutputStream; import org.bouncycastle.bcpg.BCPGOutputStream; @@ -37,7 +38,6 @@ import org.bouncycastle.openpgp.PGPSignatureGenerator; import org.bouncycastle.openpgp.operator.jcajce.JcaPGPContentSignerBuilder; import sonia.scm.security.PrivateKey; -import javax.validation.constraints.NotNull; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultPublicKey.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultPublicKey.java index 32d067fd85..0763689679 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultPublicKey.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/DefaultPublicKey.java @@ -24,6 +24,7 @@ package sonia.scm.security.gpg; +import jakarta.annotation.Nullable; import org.bouncycastle.openpgp.PGPCompressedData; import org.bouncycastle.openpgp.PGPException; import org.bouncycastle.openpgp.PGPObjectFactory; @@ -39,7 +40,6 @@ import org.slf4j.LoggerFactory; import sonia.scm.repository.Person; import sonia.scm.security.PublicKey; -import javax.annotation.Nullable; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/MasterKeyReference.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/MasterKeyReference.java index 86e5b1df38..c98afa5355 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/MasterKeyReference.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/MasterKeyReference.java @@ -24,14 +24,13 @@ package sonia.scm.security.gpg; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; - @Getter @NoArgsConstructor @AllArgsConstructor diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/PrivateKeyStore.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/PrivateKeyStore.java index 94962b4f37..5f4cd0252f 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/PrivateKeyStore.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/PrivateKeyStore.java @@ -24,6 +24,12 @@ package sonia.scm.security.gpg; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -32,12 +38,6 @@ import sonia.scm.store.DataStore; import sonia.scm.store.DataStoreFactory; import sonia.scm.xml.XmlInstantAdapter; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyCollectionMapper.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyCollectionMapper.java index c8d46be647..02b8937133 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyCollectionMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyCollectionMapper.java @@ -28,12 +28,12 @@ import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Link; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import sonia.scm.api.v2.resources.LinkBuilder; import sonia.scm.api.v2.resources.ScmPathInfoStore; import sonia.scm.user.UserPermissions; -import javax.inject.Inject; -import javax.inject.Provider; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyMapper.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyMapper.java index 81604153f6..874e29c940 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyMapper.java @@ -27,6 +27,8 @@ package sonia.scm.security.gpg; import com.google.common.annotations.VisibleForTesting; import de.otto.edison.hal.Link; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; +import jakarta.inject.Provider; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ObjectFactory; @@ -34,9 +36,6 @@ import sonia.scm.api.v2.resources.LinkBuilder; import sonia.scm.api.v2.resources.ScmPathInfoStore; import sonia.scm.user.UserPermissions; -import javax.inject.Inject; -import javax.inject.Provider; - import static de.otto.edison.hal.Links.linkingTo; @Mapper diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyResource.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyResource.java index 6af6fbb4e6..6c1a71def1 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyResource.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyResource.java @@ -32,12 +32,12 @@ import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.security.AllowAnonymousAccess; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Response; import java.util.Optional; @Path("v2/public_keys") diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyStore.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyStore.java index 1aace520b1..a5b09fa94c 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyStore.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/PublicKeyStore.java @@ -24,6 +24,8 @@ package sonia.scm.security.gpg; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.bouncycastle.openpgp.PGPPublicKey; import sonia.scm.ContextEntry; import sonia.scm.event.ScmEventBus; @@ -35,8 +37,6 @@ import sonia.scm.store.DataStore; import sonia.scm.store.DataStoreFactory; import sonia.scm.user.UserPermissions; -import javax.inject.Inject; -import javax.inject.Singleton; import java.time.Instant; import java.util.ArrayList; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/RawGpgKey.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/RawGpgKey.java index 1e02222310..0725240a62 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/RawGpgKey.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/RawGpgKey.java @@ -24,16 +24,16 @@ package sonia.scm.security.gpg; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import sonia.scm.repository.Person; import sonia.scm.xml.XmlInstantAdapter; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import java.time.Instant; import java.util.Objects; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/security/gpg/UserPublicKeyResource.java b/scm-webapp/src/main/java/sonia/scm/security/gpg/UserPublicKeyResource.java index c7fbb38709..352fb8f6a6 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/gpg/UserPublicKeyResource.java +++ b/scm-webapp/src/main/java/sonia/scm/security/gpg/UserPublicKeyResource.java @@ -29,21 +29,21 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import jakarta.inject.Inject; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriBuilder; +import jakarta.ws.rs.core.UriInfo; import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.web.VndMediaType; -import javax.inject.Inject; -import javax.ws.rs.Consumes; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; import java.util.Optional; @Path("v2/users/{username}/public_keys") diff --git a/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java b/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java index 2ce3d92b1e..c6b45372fd 100644 --- a/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java +++ b/scm-webapp/src/main/java/sonia/scm/template/MustacheTemplateEngine.java @@ -33,14 +33,14 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.common.util.concurrent.UncheckedExecutionException; import com.google.inject.Inject; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.annotation.Nullable; +import jakarta.servlet.ServletContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.Default; import sonia.scm.metrics.Metrics; import sonia.scm.plugin.PluginLoader; -import javax.annotation.Nullable; -import javax.servlet.ServletContext; import java.io.IOException; import java.io.Reader; import java.util.concurrent.ExecutorService; diff --git a/scm-webapp/src/main/java/sonia/scm/template/ServletMustacheFactory.java b/scm-webapp/src/main/java/sonia/scm/template/ServletMustacheFactory.java index 6abfb733cb..3fd0ad5e7f 100644 --- a/scm-webapp/src/main/java/sonia/scm/template/ServletMustacheFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/template/ServletMustacheFactory.java @@ -28,10 +28,10 @@ package sonia.scm.template; import com.github.mustachejava.DefaultMustacheFactory; import com.google.common.base.Charsets; +import jakarta.servlet.ServletContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletContext; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; diff --git a/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java b/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java index e1c4a25879..10077325ae 100644 --- a/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/template/TemplateServlet.java @@ -29,15 +29,15 @@ package sonia.scm.template; import com.google.common.collect.ImmutableSet; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; import sonia.scm.config.ScmConfiguration; import sonia.scm.util.IOUtil; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.Writer; import java.util.HashMap; diff --git a/scm-webapp/src/main/java/sonia/scm/trace/LoggingExporter.java b/scm-webapp/src/main/java/sonia/scm/trace/LoggingExporter.java index 32fda9b2a7..8f8254cf16 100644 --- a/scm-webapp/src/main/java/sonia/scm/trace/LoggingExporter.java +++ b/scm-webapp/src/main/java/sonia/scm/trace/LoggingExporter.java @@ -24,11 +24,11 @@ package sonia.scm.trace; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.plugin.Extension; -import javax.inject.Inject; import java.util.Map; import java.util.function.Consumer; diff --git a/scm-webapp/src/main/java/sonia/scm/update/MigrationWizardServlet.java b/scm-webapp/src/main/java/sonia/scm/update/MigrationWizardServlet.java index 79b4be07fd..79b33a02d5 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/MigrationWizardServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/update/MigrationWizardServlet.java @@ -29,6 +29,11 @@ import com.github.mustachejava.Mustache; import com.github.mustachejava.MustacheFactory; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.mgt.DefaultSecurityManager; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; @@ -41,11 +46,6 @@ import sonia.scm.update.repository.V1Repository; import sonia.scm.update.repository.XmlRepositoryV1UpdateStep; import sonia.scm.util.ValidationUtil; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; diff --git a/scm-webapp/src/main/java/sonia/scm/update/RepositoryUpdateAfterCreationHook.java b/scm-webapp/src/main/java/sonia/scm/update/RepositoryUpdateAfterCreationHook.java index ddf033586e..1f3453d20e 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/RepositoryUpdateAfterCreationHook.java +++ b/scm-webapp/src/main/java/sonia/scm/update/RepositoryUpdateAfterCreationHook.java @@ -25,13 +25,13 @@ package sonia.scm.update; import com.github.legman.Subscribe; +import jakarta.inject.Inject; import sonia.scm.EagerSingleton; import sonia.scm.HandlerEventType; import sonia.scm.migration.RepositoryUpdateStep; import sonia.scm.plugin.Extension; import sonia.scm.repository.RepositoryEvent; -import javax.inject.Inject; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; diff --git a/scm-webapp/src/main/java/sonia/scm/update/UpdateEngine.java b/scm-webapp/src/main/java/sonia/scm/update/UpdateEngine.java index dff597698a..d69f69a23d 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/UpdateEngine.java +++ b/scm-webapp/src/main/java/sonia/scm/update/UpdateEngine.java @@ -24,6 +24,7 @@ package sonia.scm.update; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.migration.NamespaceUpdateContext; @@ -35,7 +36,6 @@ import sonia.scm.migration.UpdateStep; import sonia.scm.migration.UpdateStepTarget; import sonia.scm.version.Version; -import javax.inject.Inject; import java.util.Comparator; import java.util.List; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/update/UpdateStepStore.java b/scm-webapp/src/main/java/sonia/scm/update/UpdateStepStore.java index c2146b42f3..31f577e657 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/UpdateStepStore.java +++ b/scm-webapp/src/main/java/sonia/scm/update/UpdateStepStore.java @@ -24,6 +24,7 @@ package sonia.scm.update; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.migration.NamespaceUpdateStep; @@ -33,8 +34,6 @@ import sonia.scm.migration.UpdateStepTarget; import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStoreFactory; -import javax.inject.Inject; - class UpdateStepStore { private static final String STORE_NAME = "executedUpdates"; diff --git a/scm-webapp/src/main/java/sonia/scm/update/UpdateVersionInfo.java b/scm-webapp/src/main/java/sonia/scm/update/UpdateVersionInfo.java index b8c879b3e4..d94119c367 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/UpdateVersionInfo.java +++ b/scm-webapp/src/main/java/sonia/scm/update/UpdateVersionInfo.java @@ -24,9 +24,9 @@ package sonia.scm.update; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "latest-version") @XmlAccessorType(XmlAccessType.FIELD) diff --git a/scm-webapp/src/main/java/sonia/scm/update/group/XmlGroupV1UpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/group/XmlGroupV1UpdateStep.java index 8fe388523b..1177b121e8 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/group/XmlGroupV1UpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/group/XmlGroupV1UpdateStep.java @@ -24,6 +24,13 @@ package sonia.scm.update.group; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; @@ -38,13 +45,6 @@ import sonia.scm.store.StoreConstants; import sonia.scm.update.V1Properties; import sonia.scm.version.Version; -import javax.inject.Inject; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-webapp/src/main/java/sonia/scm/update/index/RemoveCombinedIndex.java b/scm-webapp/src/main/java/sonia/scm/update/index/RemoveCombinedIndex.java index 38ae345d08..b5cdd5a9e3 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/index/RemoveCombinedIndex.java +++ b/scm-webapp/src/main/java/sonia/scm/update/index/RemoveCombinedIndex.java @@ -24,14 +24,14 @@ package sonia.scm.update.index; +import jakarta.annotation.Nonnull; +import jakarta.inject.Inject; import sonia.scm.SCMContextProvider; import sonia.scm.migration.UpdateStep; import sonia.scm.plugin.Extension; import sonia.scm.util.IOUtil; import sonia.scm.version.Version; -import javax.annotation.Nonnull; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterAuthenticationUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterAuthenticationUpdateStep.java index 3a2c715d59..8cab45bebc 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterAuthenticationUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterAuthenticationUpdateStep.java @@ -25,6 +25,7 @@ package sonia.scm.update.plugin; import com.google.common.base.Strings; +import jakarta.inject.Inject; import sonia.scm.migration.UpdateStep; import sonia.scm.plugin.Extension; import sonia.scm.plugin.PluginCenterAuthenticator; @@ -33,8 +34,6 @@ import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.version.Version; -import javax.inject.Inject; - import static sonia.scm.version.Version.parse; @Extension diff --git a/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterJreVersionUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterJreVersionUpdateStep.java index a2e5ed36e4..b617aad98d 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterJreVersionUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterJreVersionUpdateStep.java @@ -24,6 +24,7 @@ package sonia.scm.update.plugin; +import jakarta.inject.Inject; import sonia.scm.config.ScmConfiguration; import sonia.scm.migration.UpdateStep; import sonia.scm.plugin.Extension; @@ -31,8 +32,6 @@ import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.version.Version; -import javax.inject.Inject; - import static sonia.scm.util.Util.isEmpty; import static sonia.scm.version.Version.parse; diff --git a/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterUpdateStep.java index dd055a908e..8451bdee53 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginCenterUpdateStep.java @@ -24,6 +24,7 @@ package sonia.scm.update.plugin; +import jakarta.inject.Inject; import sonia.scm.config.ScmConfiguration; import sonia.scm.migration.UpdateStep; import sonia.scm.plugin.Extension; @@ -31,8 +32,6 @@ import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.version.Version; -import javax.inject.Inject; - import static sonia.scm.version.Version.parse; @Extension diff --git a/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginSetsConfigInitializationUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginSetsConfigInitializationUpdateStep.java index fcaf7b2ea1..8972c81765 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginSetsConfigInitializationUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/plugin/PluginSetsConfigInitializationUpdateStep.java @@ -24,6 +24,7 @@ package sonia.scm.update.plugin; +import jakarta.inject.Inject; import sonia.scm.migration.UpdateStep; import sonia.scm.plugin.Extension; import sonia.scm.plugin.PluginSetConfigStore; @@ -31,7 +32,6 @@ import sonia.scm.plugin.PluginSetsConfig; import sonia.scm.user.xml.XmlUserDAO; import sonia.scm.version.Version; -import javax.inject.Inject; import java.util.Collections; @Extension diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/AnonymousModeUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/repository/AnonymousModeUpdateStep.java index dccc096912..a361495b61 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/AnonymousModeUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/AnonymousModeUpdateStep.java @@ -24,6 +24,12 @@ package sonia.scm.update.repository; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.Getter; import lombok.NoArgsConstructor; import sonia.scm.SCMContextProvider; @@ -36,12 +42,6 @@ import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.store.StoreConstants; import sonia.scm.version.Version; -import javax.inject.Inject; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; import java.nio.file.Path; import java.nio.file.Paths; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/CopyMigrationStrategy.java b/scm-webapp/src/main/java/sonia/scm/update/repository/CopyMigrationStrategy.java index 9702677513..461a143810 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/CopyMigrationStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/CopyMigrationStrategy.java @@ -24,13 +24,13 @@ package sonia.scm.update.repository; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; import sonia.scm.repository.RepositoryDirectoryHandler; import sonia.scm.repository.RepositoryLocationResolver; -import javax.inject.Inject; import java.nio.file.Files; import java.nio.file.Path; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/DefaultMigrationStrategyDAO.java b/scm-webapp/src/main/java/sonia/scm/update/repository/DefaultMigrationStrategyDAO.java index 3bbd80ad2e..c67d529bba 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/DefaultMigrationStrategyDAO.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/DefaultMigrationStrategyDAO.java @@ -24,13 +24,13 @@ package sonia.scm.update.repository; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.migration.MigrationDAO; import sonia.scm.migration.MigrationInfo; import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; -import javax.inject.Inject; -import javax.inject.Singleton; import java.util.Collection; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/DeleteMigrationStrategy.java b/scm-webapp/src/main/java/sonia/scm/update/repository/DeleteMigrationStrategy.java index cec65abdad..86997178f0 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/DeleteMigrationStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/DeleteMigrationStrategy.java @@ -24,12 +24,12 @@ package sonia.scm.update.repository; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; import sonia.scm.util.IOUtil; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Path; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/InlineMigrationStrategy.java b/scm-webapp/src/main/java/sonia/scm/update/repository/InlineMigrationStrategy.java index 6c5d7afeed..203488070b 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/InlineMigrationStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/InlineMigrationStrategy.java @@ -24,13 +24,13 @@ package sonia.scm.update.repository; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; import sonia.scm.repository.RepositoryDirectoryHandler; import sonia.scm.repository.RepositoryLocationResolver; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/MigrateVerbsToPermissionRoles.java b/scm-webapp/src/main/java/sonia/scm/update/repository/MigrateVerbsToPermissionRoles.java index dcf53d499e..55efbc0598 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/MigrateVerbsToPermissionRoles.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/MigrateVerbsToPermissionRoles.java @@ -24,6 +24,15 @@ package sonia.scm.update.repository; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.Marshaller; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; +import jakarta.xml.bind.annotation.XmlRootElement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.migration.UpdateException; @@ -37,15 +46,6 @@ import sonia.scm.repository.xml.SingleRepositoryUpdateProcessor; import sonia.scm.security.SystemRepositoryPermissionProvider; import sonia.scm.version.Version; -import javax.inject.Inject; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; import java.nio.file.Path; import java.util.Collection; import java.util.HashSet; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/MoveMigrationStrategy.java b/scm-webapp/src/main/java/sonia/scm/update/repository/MoveMigrationStrategy.java index c5115a0637..06bbe12c1f 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/MoveMigrationStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/MoveMigrationStrategy.java @@ -24,13 +24,13 @@ package sonia.scm.update.repository; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; import sonia.scm.repository.RepositoryDirectoryHandler; import sonia.scm.repository.RepositoryLocationResolver; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/PublicFlagUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/repository/PublicFlagUpdateStep.java index ac8b045fa1..cdfe053fa5 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/PublicFlagUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/PublicFlagUpdateStep.java @@ -24,6 +24,8 @@ package sonia.scm.update.repository; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXBException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContext; @@ -37,9 +39,6 @@ import sonia.scm.user.User; import sonia.scm.user.xml.XmlUserDAO; import sonia.scm.version.Version; -import javax.inject.Inject; -import javax.xml.bind.JAXBException; - import static sonia.scm.version.Version.parse; @Extension diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/RepositoryMigrationPlan.java b/scm-webapp/src/main/java/sonia/scm/update/repository/RepositoryMigrationPlan.java index 1b311dcb07..6f6a244600 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/RepositoryMigrationPlan.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/RepositoryMigrationPlan.java @@ -24,9 +24,10 @@ package sonia.scm.update.repository; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; + import java.util.ArrayList; import java.util.Collection; import java.util.Collections; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/V1Permission.java b/scm-webapp/src/main/java/sonia/scm/update/repository/V1Permission.java index 14be559fff..1fb3b4db2d 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/V1Permission.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/V1Permission.java @@ -24,9 +24,9 @@ package sonia.scm.update.repository; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "permissions") diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/V1Repository.java b/scm-webapp/src/main/java/sonia/scm/update/repository/V1Repository.java index 8d42143299..0aaf5388d3 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/V1Repository.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/V1Repository.java @@ -24,12 +24,12 @@ package sonia.scm.update.repository; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.update.V1Properties; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.util.List; @XmlAccessorType(XmlAccessType.FIELD) diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryHelper.java b/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryHelper.java index 421b6fa491..576121c7a7 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryHelper.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryHelper.java @@ -24,15 +24,15 @@ package sonia.scm.update.repository; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import sonia.scm.SCMContextProvider; import sonia.scm.store.StoreConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.File; import java.nio.file.Paths; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryMigrationLocationResolver.java b/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryMigrationLocationResolver.java index 5c3b15cb78..cfa0209867 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryMigrationLocationResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryMigrationLocationResolver.java @@ -24,11 +24,11 @@ package sonia.scm.update.repository; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; import sonia.scm.SCMContextProvider; import sonia.scm.migration.UpdateException; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; import java.io.File; import java.nio.file.Path; import java.util.HashMap; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryTypeConfig.java b/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryTypeConfig.java index 8e0734486e..bda7fcc02d 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryTypeConfig.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/V1RepositoryTypeConfig.java @@ -24,9 +24,10 @@ package sonia.scm.update.repository; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; + import java.io.File; @XmlRootElement(name = "config") diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStep.java index ae8f742803..74ac247aca 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStep.java @@ -24,6 +24,7 @@ package sonia.scm.update.repository; +import jakarta.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; @@ -34,7 +35,6 @@ import sonia.scm.repository.xml.XmlRepositoryDAO; import sonia.scm.store.StoreConstants; import sonia.scm.version.Version; -import javax.inject.Inject; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStep.java index 92947dfaec..e0f603ebf5 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStep.java @@ -25,6 +25,8 @@ package sonia.scm.update.repository; import com.google.inject.Injector; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXBException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; @@ -40,8 +42,6 @@ import sonia.scm.update.CoreUpdateStep; import sonia.scm.update.V1Properties; import sonia.scm.version.Version; -import javax.inject.Inject; -import javax.xml.bind.JAXBException; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-webapp/src/main/java/sonia/scm/update/security/XmlSecurityV1UpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/security/XmlSecurityV1UpdateStep.java index 11a4a17fac..39bd83a169 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/security/XmlSecurityV1UpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/security/XmlSecurityV1UpdateStep.java @@ -24,6 +24,13 @@ package sonia.scm.update.security; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; @@ -35,13 +42,6 @@ import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.store.StoreConstants; import sonia.scm.version.Version; -import javax.inject.Inject; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.File; import java.nio.file.Path; import java.util.ArrayList; diff --git a/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryForGlobalStoreUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryForGlobalStoreUpdateStep.java index 88a8024c6f..86cf1bb49e 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryForGlobalStoreUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryForGlobalStoreUpdateStep.java @@ -24,11 +24,11 @@ package sonia.scm.update.store; +import jakarta.inject.Inject; import sonia.scm.SCMContextProvider; import sonia.scm.migration.UpdateStep; import sonia.scm.plugin.Extension; -import javax.inject.Inject; import java.io.File; import java.nio.file.Path; diff --git a/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryForRepositoryStoresUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryForRepositoryStoresUpdateStep.java index 585bc50035..193a0d3c70 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryForRepositoryStoresUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryForRepositoryStoresUpdateStep.java @@ -24,12 +24,12 @@ package sonia.scm.update.store; +import jakarta.inject.Inject; import sonia.scm.migration.RepositoryUpdateContext; import sonia.scm.migration.RepositoryUpdateStep; import sonia.scm.plugin.Extension; import sonia.scm.repository.RepositoryLocationResolver; -import javax.inject.Inject; import java.nio.file.Path; @Extension diff --git a/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryUpdateStep.java index b9ba09eb2c..46a05e441f 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/store/DifferentiateBetweenConfigAndConfigEntryUpdateStep.java @@ -103,7 +103,7 @@ abstract class DifferentiateBetweenConfigAndConfigEntryUpdateStep { private void writeXmlDocument(Document configEntryDocument, Path temporaryFile) throws TransformerException { TransformerFactory factory = TransformerFactory.newInstance(); - factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); +// factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); DOMSource domSource = new DOMSource(configEntryDocument); try (OutputStream os = Files.newOutputStream(temporaryFile)) { @@ -115,8 +115,8 @@ abstract class DifferentiateBetweenConfigAndConfigEntryUpdateStep { private Document readAsXmlDocument(Path configFile) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); - factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); +// factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); +// factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); try (InputStream is = Files.newInputStream(configFile)) { return factory.newDocumentBuilder().parse(is); diff --git a/scm-webapp/src/main/java/sonia/scm/update/user/AnonymousUserEmailUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/user/AnonymousUserEmailUpdateStep.java index 87813c254d..40e5277c00 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/user/AnonymousUserEmailUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/user/AnonymousUserEmailUpdateStep.java @@ -24,6 +24,7 @@ package sonia.scm.update.user; +import jakarta.inject.Inject; import sonia.scm.SCMContext; import sonia.scm.migration.UpdateStep; import sonia.scm.plugin.Extension; @@ -31,8 +32,6 @@ import sonia.scm.user.User; import sonia.scm.user.xml.XmlUserDAO; import sonia.scm.version.Version; -import javax.inject.Inject; - @Extension public class AnonymousUserEmailUpdateStep implements UpdateStep { diff --git a/scm-webapp/src/main/java/sonia/scm/update/user/XmlUserV1UpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/user/XmlUserV1UpdateStep.java index 9b3bcd0094..9b0ff3d8c5 100644 --- a/scm-webapp/src/main/java/sonia/scm/update/user/XmlUserV1UpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/user/XmlUserV1UpdateStep.java @@ -24,6 +24,13 @@ package sonia.scm.update.user; +import jakarta.inject.Inject; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.SCMContextProvider; @@ -39,13 +46,6 @@ import sonia.scm.user.User; import sonia.scm.user.xml.XmlUserDAO; import sonia.scm.version.Version; -import javax.inject.Inject; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-webapp/src/main/java/sonia/scm/user/AnonymousUserDeletionEventHandler.java b/scm-webapp/src/main/java/sonia/scm/user/AnonymousUserDeletionEventHandler.java index 343239729f..f6dbaf99a6 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/AnonymousUserDeletionEventHandler.java +++ b/scm-webapp/src/main/java/sonia/scm/user/AnonymousUserDeletionEventHandler.java @@ -25,6 +25,7 @@ package sonia.scm.user; import com.github.legman.Subscribe; +import jakarta.inject.Inject; import sonia.scm.ContextEntry; import sonia.scm.EagerSingleton; import sonia.scm.HandlerEventType; @@ -33,8 +34,6 @@ import sonia.scm.config.ScmConfiguration; import sonia.scm.plugin.Extension; import sonia.scm.security.AnonymousMode; -import javax.inject.Inject; - @EagerSingleton @Extension public class AnonymousUserDeletionEventHandler { diff --git a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserDisplayManager.java b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserDisplayManager.java index 5ede827c53..73bbd84495 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserDisplayManager.java +++ b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserDisplayManager.java @@ -24,12 +24,11 @@ package sonia.scm.user; +import jakarta.inject.Inject; import sonia.scm.GenericDisplayManager; import sonia.scm.search.SearchRequest; import sonia.scm.search.SearchUtil; -import javax.inject.Inject; - public class DefaultUserDisplayManager extends GenericDisplayManager implements UserDisplayManager { @Inject diff --git a/scm-webapp/src/main/java/sonia/scm/user/InternalToExternalUserConverter.java b/scm-webapp/src/main/java/sonia/scm/user/InternalToExternalUserConverter.java index b87e33bf78..33567d42a8 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/InternalToExternalUserConverter.java +++ b/scm-webapp/src/main/java/sonia/scm/user/InternalToExternalUserConverter.java @@ -24,12 +24,11 @@ package sonia.scm.user; +import jakarta.inject.Inject; import lombok.extern.slf4j.Slf4j; import sonia.scm.config.ScmConfiguration; import sonia.scm.plugin.Extension; -import javax.inject.Inject; - @Slf4j @Extension public class InternalToExternalUserConverter implements ExternalUserConverter{ diff --git a/scm-webapp/src/main/java/sonia/scm/user/PermissionOverviewCollector.java b/scm-webapp/src/main/java/sonia/scm/user/PermissionOverviewCollector.java index c231a8bfc6..bbc342ccf5 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/PermissionOverviewCollector.java +++ b/scm-webapp/src/main/java/sonia/scm/user/PermissionOverviewCollector.java @@ -24,6 +24,7 @@ package sonia.scm.user; +import jakarta.inject.Inject; import sonia.scm.group.GroupCollector; import sonia.scm.group.GroupManager; import sonia.scm.repository.Namespace; @@ -37,7 +38,6 @@ import sonia.scm.security.PermissionDescriptor; import sonia.scm.security.PermissionPermissions; import sonia.scm.user.PermissionOverview.GroupEntry; -import javax.inject.Inject; import java.util.ArrayList; import java.util.Collection; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/user/UserIndexer.java b/scm-webapp/src/main/java/sonia/scm/user/UserIndexer.java index 62fc1baf87..65b93d65d9 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/UserIndexer.java +++ b/scm-webapp/src/main/java/sonia/scm/user/UserIndexer.java @@ -26,6 +26,8 @@ package sonia.scm.user; import com.github.legman.Subscribe; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import sonia.scm.plugin.Extension; import sonia.scm.search.HandlerEventIndexSyncer; import sonia.scm.search.Id; @@ -35,9 +37,6 @@ import sonia.scm.search.Indexer; import sonia.scm.search.SearchEngine; import sonia.scm.search.SerializableIndexTask; -import javax.inject.Inject; -import javax.inject.Singleton; - @Extension @Singleton public class UserIndexer implements Indexer { diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserActivateCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserActivateCommand.java index 4cde5c4a1c..c235d7a9ec 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserActivateCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserActivateCommand.java @@ -24,13 +24,12 @@ package sonia.scm.user.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.user.User; import sonia.scm.user.UserManager; -import javax.inject.Inject; - @ParentCommand(value = UserCommand.class) @CommandLine.Command(name = "activate") class UserActivateCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserConvertToExternalCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserConvertToExternalCommand.java index fc78192d58..076b536801 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserConvertToExternalCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserConvertToExternalCommand.java @@ -24,13 +24,12 @@ package sonia.scm.user.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.user.User; import sonia.scm.user.UserManager; -import javax.inject.Inject; - @ParentCommand(value = UserCommand.class) @CommandLine.Command(name = "convert-to-external", aliases = "conv-ext") class UserConvertToExternalCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserConvertToInternalCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserConvertToInternalCommand.java index 71ce75452f..de85755e84 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserConvertToInternalCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserConvertToInternalCommand.java @@ -25,6 +25,7 @@ package sonia.scm.user.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import org.apache.shiro.authc.credential.PasswordService; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; @@ -32,8 +33,6 @@ import sonia.scm.user.User; import sonia.scm.user.UserManager; import sonia.scm.util.ValidationUtil; -import javax.inject.Inject; - @ParentCommand(value = UserCommand.class) @CommandLine.Command(name = "convert-to-internal", aliases = "conv-int") class UserConvertToInternalCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserCreateCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserCreateCommand.java index e94fa45a28..d4c836f32d 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserCreateCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserCreateCommand.java @@ -25,6 +25,8 @@ package sonia.scm.user.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.validation.constraints.Email; import org.apache.shiro.authc.credential.PasswordService; import picocli.CommandLine; import sonia.scm.cli.CommandValidator; @@ -33,9 +35,6 @@ import sonia.scm.user.User; import sonia.scm.user.UserManager; import sonia.scm.util.ValidationUtil; -import javax.inject.Inject; -import javax.validation.constraints.Email; - @CommandLine.Command(name = "create") @ParentCommand(value = UserCommand.class) class UserCreateCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserDeactivateCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserDeactivateCommand.java index b3f9902d50..0a1d878cfa 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserDeactivateCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserDeactivateCommand.java @@ -24,13 +24,12 @@ package sonia.scm.user.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.user.User; import sonia.scm.user.UserManager; -import javax.inject.Inject; - @ParentCommand(value = UserCommand.class) @CommandLine.Command(name = "deactivate") class UserDeactivateCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserDeleteCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserDeleteCommand.java index 0c2febc0a0..3ebb368cab 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserDeleteCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserDeleteCommand.java @@ -25,12 +25,12 @@ package sonia.scm.user.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.user.User; import sonia.scm.user.UserManager; -import javax.inject.Inject; import java.util.Collections; @CommandLine.Command(name = "delete", aliases = "rm") diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserGetCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserGetCommand.java index cd269c3631..39e2d1d645 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserGetCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserGetCommand.java @@ -24,13 +24,12 @@ package sonia.scm.user.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.user.User; import sonia.scm.user.UserManager; -import javax.inject.Inject; - @ParentCommand(value = UserCommand.class) @CommandLine.Command(name = "get") class UserGetCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserListCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserListCommand.java index 2955b6c2dd..a6a6b26ce2 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserListCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserListCommand.java @@ -26,13 +26,13 @@ package sonia.scm.user.cli; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.Table; import sonia.scm.cli.TemplateRenderer; import sonia.scm.user.UserManager; -import javax.inject.Inject; import java.util.Collection; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserModifyCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserModifyCommand.java index afdbcc5ad9..55c875d8eb 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserModifyCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserModifyCommand.java @@ -25,6 +25,8 @@ package sonia.scm.user.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; +import jakarta.validation.constraints.Email; import org.apache.shiro.authc.credential.PasswordService; import picocli.CommandLine; import sonia.scm.cli.CommandValidator; @@ -33,9 +35,6 @@ import sonia.scm.user.User; import sonia.scm.user.UserManager; import sonia.scm.util.ValidationUtil; -import javax.inject.Inject; -import javax.validation.constraints.Email; - @ParentCommand(value = UserCommand.class) @CommandLine.Command(name = "modify") class UserModifyCommand implements Runnable { diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionAddCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionAddCommand.java index 386e0fbb4a..9da15b4e22 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionAddCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionAddCommand.java @@ -25,6 +25,7 @@ package sonia.scm.user.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.security.PermissionAssigner; @@ -32,7 +33,6 @@ import sonia.scm.security.PermissionDescriptor; import sonia.scm.user.User; import sonia.scm.user.UserManager; -import javax.inject.Inject; import java.util.Collection; @ParentCommand(value = UserCommand.class) diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionAvailableCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionAvailableCommand.java index a9a4aa4753..9d705916ec 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionAvailableCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionAvailableCommand.java @@ -24,6 +24,7 @@ package sonia.scm.user.cli; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.PermissionDescriptionResolver; @@ -31,7 +32,6 @@ import sonia.scm.cli.Table; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; -import javax.inject.Inject; import java.util.Collection; import java.util.Map; diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionClearCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionClearCommand.java index f6e855e4b2..7e1f902644 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionClearCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionClearCommand.java @@ -25,13 +25,13 @@ package sonia.scm.user.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.security.PermissionAssigner; import sonia.scm.user.User; import sonia.scm.user.UserManager; -import javax.inject.Inject; import java.util.Collections; @ParentCommand(value = UserCommand.class) diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionListCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionListCommand.java index ac6ed425c6..885b7ae7b6 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionListCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionListCommand.java @@ -25,6 +25,7 @@ package sonia.scm.user.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.cli.PermissionDescriptionResolver; @@ -33,7 +34,6 @@ import sonia.scm.security.PermissionDescriptor; import sonia.scm.user.User; import sonia.scm.user.UserManager; -import javax.inject.Inject; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionRemoveCommand.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionRemoveCommand.java index f57a300608..5e370cf416 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionRemoveCommand.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserPermissionRemoveCommand.java @@ -25,6 +25,7 @@ package sonia.scm.user.cli; import com.google.common.annotations.VisibleForTesting; +import jakarta.inject.Inject; import picocli.CommandLine; import sonia.scm.cli.ParentCommand; import sonia.scm.security.PermissionAssigner; @@ -32,7 +33,6 @@ import sonia.scm.security.PermissionDescriptor; import sonia.scm.user.User; import sonia.scm.user.UserManager; -import javax.inject.Inject; import java.util.Arrays; import java.util.Collection; import java.util.List; diff --git a/scm-webapp/src/main/java/sonia/scm/user/cli/UserTemplateRenderer.java b/scm-webapp/src/main/java/sonia/scm/user/cli/UserTemplateRenderer.java index 3dd87cdd61..ba58f83b0b 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/cli/UserTemplateRenderer.java +++ b/scm-webapp/src/main/java/sonia/scm/user/cli/UserTemplateRenderer.java @@ -25,6 +25,7 @@ package sonia.scm.user.cli; import com.google.common.collect.ImmutableMap; +import jakarta.inject.Inject; import sonia.scm.cli.CliContext; import sonia.scm.cli.ExitCode; import sonia.scm.cli.Table; @@ -32,7 +33,6 @@ import sonia.scm.cli.TemplateRenderer; import sonia.scm.template.TemplateEngineFactory; import sonia.scm.user.User; -import javax.inject.Inject; import java.util.Collection; import java.util.Map; diff --git a/scm-webapp/src/main/java/sonia/scm/util/DebugServlet.java b/scm-webapp/src/main/java/sonia/scm/util/DebugServlet.java index daf4b494ea..1435a84870 100644 --- a/scm-webapp/src/main/java/sonia/scm/util/DebugServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/util/DebugServlet.java @@ -27,21 +27,17 @@ package sonia.scm.util; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Singleton; - -//~--- JDK imports ------------------------------------------------------------ +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpSession; import java.io.IOException; import java.io.PrintWriter; - import java.util.Enumeration; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/validation/DefaultValidatorProvider.java b/scm-webapp/src/main/java/sonia/scm/validation/DefaultValidatorProvider.java index bc910c50a3..7201bf3f16 100644 --- a/scm-webapp/src/main/java/sonia/scm/validation/DefaultValidatorProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/validation/DefaultValidatorProvider.java @@ -24,11 +24,11 @@ package sonia.scm.validation; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.validation.ConstraintValidatorFactory; -import javax.validation.Validation; -import javax.validation.Validator; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.validation.ConstraintValidatorFactory; +import jakarta.validation.Validation; +import jakarta.validation.Validator; public class DefaultValidatorProvider implements Provider { diff --git a/scm-webapp/src/main/java/sonia/scm/validation/GuiceConstraintValidatorFactory.java b/scm-webapp/src/main/java/sonia/scm/validation/GuiceConstraintValidatorFactory.java index 304e8ad72e..73a79e7df2 100644 --- a/scm-webapp/src/main/java/sonia/scm/validation/GuiceConstraintValidatorFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/validation/GuiceConstraintValidatorFactory.java @@ -25,10 +25,9 @@ package sonia.scm.validation; import com.google.inject.Injector; - -import javax.inject.Inject; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorFactory; +import jakarta.inject.Inject; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorFactory; public class GuiceConstraintValidatorFactory implements ConstraintValidatorFactory { diff --git a/scm-webapp/src/main/java/sonia/scm/validation/ResteasyValidator.java b/scm-webapp/src/main/java/sonia/scm/validation/ResteasyValidator.java index 2ae8e4de12..fa8b3168ef 100644 --- a/scm-webapp/src/main/java/sonia/scm/validation/ResteasyValidator.java +++ b/scm-webapp/src/main/java/sonia/scm/validation/ResteasyValidator.java @@ -24,15 +24,15 @@ package sonia.scm.validation; +import jakarta.validation.ConstraintValidatorFactory; +import jakarta.validation.MessageInterpolator; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import jakarta.validation.ValidatorFactory; +import jakarta.validation.executable.ExecutableType; import org.jboss.resteasy.plugins.validation.GeneralValidatorImpl; import org.jboss.resteasy.spi.HttpRequest; -import javax.validation.ConstraintValidatorFactory; -import javax.validation.MessageInterpolator; -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; -import javax.validation.executable.ExecutableType; import java.util.List; import java.util.Locale; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/validation/ResteasyValidatorContextResolver.java b/scm-webapp/src/main/java/sonia/scm/validation/ResteasyValidatorContextResolver.java index fe3c812983..35b71e8e4f 100644 --- a/scm-webapp/src/main/java/sonia/scm/validation/ResteasyValidatorContextResolver.java +++ b/scm-webapp/src/main/java/sonia/scm/validation/ResteasyValidatorContextResolver.java @@ -24,16 +24,15 @@ package sonia.scm.validation; +import jakarta.inject.Inject; +import jakarta.validation.BootstrapConfiguration; +import jakarta.validation.Configuration; +import jakarta.validation.ConstraintValidatorFactory; +import jakarta.validation.Validation; +import jakarta.ws.rs.ext.ContextResolver; +import jakarta.ws.rs.ext.Provider; import org.jboss.resteasy.spi.validation.GeneralValidator; -import javax.inject.Inject; -import javax.validation.BootstrapConfiguration; -import javax.validation.Configuration; -import javax.validation.ConstraintValidatorFactory; -import javax.validation.Validation; -import javax.ws.rs.ext.ContextResolver; -import javax.ws.rs.ext.Provider; - @Provider public class ResteasyValidatorContextResolver implements ContextResolver { diff --git a/scm-webapp/src/main/java/sonia/scm/validation/ValidationModule.java b/scm-webapp/src/main/java/sonia/scm/validation/ValidationModule.java index 99c9034e22..5f0b199c86 100644 --- a/scm-webapp/src/main/java/sonia/scm/validation/ValidationModule.java +++ b/scm-webapp/src/main/java/sonia/scm/validation/ValidationModule.java @@ -25,9 +25,8 @@ package sonia.scm.validation; import com.google.inject.AbstractModule; - -import javax.validation.ConstraintValidatorFactory; -import javax.validation.Validator; +import jakarta.validation.ConstraintValidatorFactory; +import jakarta.validation.Validator; public class ValidationModule extends AbstractModule { diff --git a/scm-webapp/src/main/java/sonia/scm/web/BasicWebTokenGenerator.java b/scm-webapp/src/main/java/sonia/scm/web/BasicWebTokenGenerator.java index b546c51f56..15c461ec8b 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/BasicWebTokenGenerator.java +++ b/scm-webapp/src/main/java/sonia/scm/web/BasicWebTokenGenerator.java @@ -28,6 +28,7 @@ package sonia.scm.web; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.codec.Base64; @@ -40,7 +41,6 @@ import sonia.scm.security.SessionId; import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; -import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; diff --git a/scm-webapp/src/main/java/sonia/scm/web/BearerWebTokenGenerator.java b/scm-webapp/src/main/java/sonia/scm/web/BearerWebTokenGenerator.java index 83364d66ae..38d7321d61 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/BearerWebTokenGenerator.java +++ b/scm-webapp/src/main/java/sonia/scm/web/BearerWebTokenGenerator.java @@ -26,15 +26,12 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; import sonia.scm.plugin.Extension; import sonia.scm.security.BearerToken; import sonia.scm.security.SessionId; import sonia.scm.util.HttpUtil; -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.http.HttpServletRequest; - /** * Creates a {@link BearerToken} from an authorization header with * bearer authorization. diff --git a/scm-webapp/src/main/java/sonia/scm/web/CookieBearerWebTokenGenerator.java b/scm-webapp/src/main/java/sonia/scm/web/CookieBearerWebTokenGenerator.java index bb61924873..0568b92900 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/CookieBearerWebTokenGenerator.java +++ b/scm-webapp/src/main/java/sonia/scm/web/CookieBearerWebTokenGenerator.java @@ -26,14 +26,10 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; import sonia.scm.plugin.Extension; import sonia.scm.security.BearerToken; - -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; - import sonia.scm.security.SessionId; import sonia.scm.util.HttpUtil; diff --git a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExceptionHandler.java b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExceptionHandler.java index 4eb72644cf..1bf1eb47d1 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExceptionHandler.java +++ b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExceptionHandler.java @@ -26,16 +26,12 @@ package sonia.scm.web.cgi; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.security.ScmSecurityException; -//~--- JDK imports ------------------------------------------------------------ - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java index e06f42c168..8c5c3eefb4 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java +++ b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutor.java @@ -30,10 +30,13 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; import com.google.common.base.Strings; import com.google.common.io.ByteStreams; - +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import sonia.scm.SCMContext; import sonia.scm.config.ScmConfiguration; import sonia.scm.security.Authentications; @@ -42,26 +45,17 @@ import sonia.scm.util.IOUtil; import sonia.scm.util.SystemUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; - import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutorService; -import javax.servlet.ServletContext; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutorFactory.java b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutorFactory.java index a0258495bb..4748868571 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutorFactory.java +++ b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIExecutorFactory.java @@ -28,13 +28,13 @@ package sonia.scm.web.cgi; import com.google.common.util.concurrent.ThreadFactoryBuilder; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.inject.Inject; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.config.ScmConfiguration; import sonia.scm.metrics.Metrics; -import javax.inject.Inject; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIStatusCodeHandler.java b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIStatusCodeHandler.java index 3e8b0be104..aa19f72384 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIStatusCodeHandler.java +++ b/scm-webapp/src/main/java/sonia/scm/web/cgi/DefaultCGIStatusCodeHandler.java @@ -26,17 +26,14 @@ package sonia.scm.web.cgi; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; import java.io.OutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - /** * * @author Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/web/filter/DefaultHttpProtocolServletAuthenticationFilter.java b/scm-webapp/src/main/java/sonia/scm/web/filter/DefaultHttpProtocolServletAuthenticationFilter.java index 66baee1b56..42d785957b 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/filter/DefaultHttpProtocolServletAuthenticationFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/web/filter/DefaultHttpProtocolServletAuthenticationFilter.java @@ -24,6 +24,7 @@ package sonia.scm.web.filter; +import jakarta.inject.Inject; import sonia.scm.Priority; import sonia.scm.config.ScmConfiguration; import sonia.scm.filter.Filters; @@ -32,7 +33,6 @@ import sonia.scm.web.UserAgentParser; import sonia.scm.web.WebTokenGenerator; import sonia.scm.web.protocol.HttpProtocolServlet; -import javax.inject.Inject; import java.util.Set; @Priority(Filters.PRIORITY_AUTHENTICATION) diff --git a/scm-webapp/src/main/java/sonia/scm/web/i18n/I18nServlet.java b/scm-webapp/src/main/java/sonia/scm/web/i18n/I18nServlet.java index d2731495b4..13be178e08 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/i18n/I18nServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/web/i18n/I18nServlet.java @@ -29,15 +29,15 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Singleton; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.filter.WebElement; import sonia.scm.i18n.I18nCollector; -import javax.inject.Inject; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Optional; diff --git a/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java b/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java index 7462d27541..3843cf80e6 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java @@ -26,6 +26,10 @@ package sonia.scm.web.protocol; import com.google.inject.Inject; import com.google.inject.Singleton; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.apache.http.HttpStatus; import org.apache.shiro.authz.AuthorizationException; @@ -44,10 +48,6 @@ import sonia.scm.web.ScmClientDetector; import sonia.scm.web.UserAgent; import sonia.scm.web.UserAgentParser; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Optional; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractor.java b/scm-webapp/src/main/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractor.java index 05750ef255..8fe41c6a12 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractor.java +++ b/scm-webapp/src/main/java/sonia/scm/web/protocol/NamespaceAndNameFromPathExtractor.java @@ -24,12 +24,12 @@ package sonia.scm.web.protocol; +import jakarta.inject.Inject; import sonia.scm.Type; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.RepositoryManager; import sonia.scm.util.HttpUtil; -import javax.inject.Inject; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; diff --git a/scm-webapp/src/main/java/sonia/scm/web/security/ApiAuthenticationFilter.java b/scm-webapp/src/main/java/sonia/scm/web/security/ApiAuthenticationFilter.java index c314870ed4..5feb9eaadd 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/security/ApiAuthenticationFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/web/security/ApiAuthenticationFilter.java @@ -27,6 +27,10 @@ package sonia.scm.web.security; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import sonia.scm.Priority; import sonia.scm.config.ScmConfiguration; import sonia.scm.filter.Filters; @@ -35,10 +39,6 @@ import sonia.scm.security.SecurityRequests; import sonia.scm.web.WebTokenGenerator; import sonia.scm.web.filter.AuthenticationFilter; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/web/security/TokenRefreshFilter.java b/scm-webapp/src/main/java/sonia/scm/web/security/TokenRefreshFilter.java index 9ca422b6fa..88faf70aa8 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/security/TokenRefreshFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/web/security/TokenRefreshFilter.java @@ -26,6 +26,11 @@ package sonia.scm.web.security; import io.micrometer.core.instrument.Counter; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.inject.Inject; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationToken; import org.slf4j.Logger; @@ -43,11 +48,6 @@ import sonia.scm.security.JwtAccessTokenRefresher; import sonia.scm.web.WebTokenGenerator; import sonia.scm.web.filter.HttpFilter; -import javax.inject.Inject; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Optional; import java.util.Set; diff --git a/scm-webapp/src/main/java/sonia/scm/work/DefaultCentralWorkQueue.java b/scm-webapp/src/main/java/sonia/scm/work/DefaultCentralWorkQueue.java index b5802a17a8..300cc2cded 100644 --- a/scm-webapp/src/main/java/sonia/scm/work/DefaultCentralWorkQueue.java +++ b/scm-webapp/src/main/java/sonia/scm/work/DefaultCentralWorkQueue.java @@ -29,15 +29,16 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.google.inject.Inject; import com.google.inject.Injector; import io.micrometer.core.instrument.MeterRegistry; +import jakarta.annotation.Nullable; +import jakarta.inject.Singleton; import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.PrincipalCollection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.config.ConfigValue; import sonia.scm.metrics.Metrics; import sonia.scm.web.security.DefaultAdministrationContext; -import javax.annotation.Nullable; -import javax.inject.Singleton; import java.io.Closeable; import java.util.ArrayList; import java.util.HashSet; @@ -66,8 +67,13 @@ public class DefaultCentralWorkQueue implements CentralWorkQueue, Closeable { private final MeterRegistry meterRegistry; @Inject - public DefaultCentralWorkQueue(Injector injector, Persistence persistence, MeterRegistry meterRegistry) { - this(injector, persistence, meterRegistry, new ThreadCountProvider()); + public DefaultCentralWorkQueue( + @ConfigValue(key = "centralWorkQueue.workers", defaultValue = "8", description = "") Integer workers, + Injector injector, + Persistence persistence, + MeterRegistry meterRegistry + ) { + this(injector, persistence, meterRegistry, new ThreadCountProvider(workers)); } @VisibleForTesting diff --git a/scm-webapp/src/main/java/sonia/scm/work/Resource.java b/scm-webapp/src/main/java/sonia/scm/work/Resource.java index dec2c7fabb..2d982a79f1 100644 --- a/scm-webapp/src/main/java/sonia/scm/work/Resource.java +++ b/scm-webapp/src/main/java/sonia/scm/work/Resource.java @@ -24,9 +24,9 @@ package sonia.scm.work; +import jakarta.annotation.Nullable; import lombok.EqualsAndHashCode; -import javax.annotation.Nullable; import java.io.Serializable; @EqualsAndHashCode diff --git a/scm-webapp/src/main/java/sonia/scm/work/ThreadCountProvider.java b/scm-webapp/src/main/java/sonia/scm/work/ThreadCountProvider.java index 282f1843d3..fe235ceed1 100644 --- a/scm-webapp/src/main/java/sonia/scm/work/ThreadCountProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/work/ThreadCountProvider.java @@ -38,31 +38,28 @@ public class ThreadCountProvider implements IntSupplier { static final String PROPERTY = "scm.central-work-queue.workers"; private final IntSupplier cpuCountProvider; + private final Integer workers; - public ThreadCountProvider() { - this(() -> Runtime.getRuntime().availableProcessors()); + public ThreadCountProvider(Integer workers) { + this(() -> Runtime.getRuntime().availableProcessors(), workers); } @VisibleForTesting - ThreadCountProvider(IntSupplier cpuCountProvider) { + ThreadCountProvider(IntSupplier cpuCountProvider, Integer workers) { this.cpuCountProvider = cpuCountProvider; + this.workers = workers; } @Override public int getAsInt() { - Integer systemProperty = Integer.getInteger(PROPERTY); - if (systemProperty == null) { - LOG.debug("derive worker count from cpu count"); - return deriveFromCPUCount(); - } - if (isInvalid(systemProperty)) { + if (isInvalid(workers)) { LOG.warn( - "system property {} contains a invalid value {}, fall back and derive worker count from cpu count", - PROPERTY, systemProperty + "config value {} contains a invalid value {}, fall back and derive worker count from cpu count", + "central-work-queue.workers", workers ); return deriveFromCPUCount(); } - return systemProperty; + return workers; } private boolean isInvalid(int value) { diff --git a/scm-webapp/src/main/resources/META-INF/validation.xml b/scm-webapp/src/main/resources/META-INF/validation.xml index c09458c79e..ee18496d03 100644 --- a/scm-webapp/src/main/resources/META-INF/validation.xml +++ b/scm-webapp/src/main/resources/META-INF/validation.xml @@ -25,7 +25,7 @@ org.hibernate.validator.parameternameprovider.ReflectionParameterNameProvider diff --git a/scm-webapp/src/main/resources/logback.xml b/scm-webapp/src/main/resources/logback.xml deleted file mode 100644 index b6689c7acb..0000000000 --- a/scm-webapp/src/main/resources/logback.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - ${LOGDIR}/scm-manager.log - - - ${LOGDIR}/scm-manager-%i.log - 1 - 10 - - - - 10MB - - - true - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-10X{transaction_id}] %-5level %logger - %msg%n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/scm-webapp/src/test/java/sonia/scm/DefaultRootURLTest.java b/scm-webapp/src/test/java/sonia/scm/DefaultRootURLTest.java index e8a6a457f2..47d3a641df 100644 --- a/scm-webapp/src/test/java/sonia/scm/DefaultRootURLTest.java +++ b/scm-webapp/src/test/java/sonia/scm/DefaultRootURLTest.java @@ -26,6 +26,8 @@ package sonia.scm; import com.google.inject.OutOfScopeException; import com.google.inject.ProvisionException; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -35,8 +37,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.config.ScmConfiguration; import sonia.scm.util.HttpUtil; -import javax.inject.Provider; -import javax.servlet.http.HttpServletRequest; import java.net.MalformedURLException; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-webapp/src/test/java/sonia/scm/ProxyPushStateDispatcherTest.java b/scm-webapp/src/test/java/sonia/scm/ProxyPushStateDispatcherTest.java index 422edb2ce5..31ff101d0f 100644 --- a/scm-webapp/src/test/java/sonia/scm/ProxyPushStateDispatcherTest.java +++ b/scm-webapp/src/test/java/sonia/scm/ProxyPushStateDispatcherTest.java @@ -27,18 +27,18 @@ package sonia.scm; import com.google.common.base.Charsets; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/scm-webapp/src/test/java/sonia/scm/StaticResourceServletTest.java b/scm-webapp/src/test/java/sonia/scm/StaticResourceServletTest.java index ef35e8b144..b46e63dd6c 100644 --- a/scm-webapp/src/test/java/sonia/scm/StaticResourceServletTest.java +++ b/scm-webapp/src/test/java/sonia/scm/StaticResourceServletTest.java @@ -25,15 +25,15 @@ package sonia.scm; import com.google.common.io.Resources; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.servlet.ServletContext; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URL; diff --git a/scm-webapp/src/test/java/sonia/scm/TemplatingPushStateDispatcherTest.java b/scm-webapp/src/test/java/sonia/scm/TemplatingPushStateDispatcherTest.java index b20520ea72..9e44cc601d 100644 --- a/scm-webapp/src/test/java/sonia/scm/TemplatingPushStateDispatcherTest.java +++ b/scm-webapp/src/test/java/sonia/scm/TemplatingPushStateDispatcherTest.java @@ -24,6 +24,8 @@ package sonia.scm; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -33,8 +35,6 @@ import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.template.Template; import sonia.scm.template.TemplateEngine; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; diff --git a/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java b/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java index 21727e56b3..95cd099b25 100644 --- a/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java +++ b/scm-webapp/src/test/java/sonia/scm/WebResourceServletTest.java @@ -26,6 +26,10 @@ package sonia.scm; import com.google.common.base.Charsets; import com.google.common.io.Files; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -36,10 +40,6 @@ import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.plugin.PluginLoader; import sonia.scm.plugin.UberWebResourceLoader; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; diff --git a/scm-webapp/src/test/java/sonia/scm/admin/ReleaseFeedParserTest.java b/scm-webapp/src/test/java/sonia/scm/admin/ReleaseFeedParserTest.java index 8276477784..bf5c26abe6 100644 --- a/scm-webapp/src/test/java/sonia/scm/admin/ReleaseFeedParserTest.java +++ b/scm-webapp/src/test/java/sonia/scm/admin/ReleaseFeedParserTest.java @@ -26,6 +26,7 @@ package sonia.scm.admin; import com.google.common.collect.ImmutableList; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import org.junit.Ignore; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -96,7 +97,7 @@ class ReleaseFeedParserTest { assertThat(update).isEmpty(); } - @Test + @Test @Ignore("ignored temporarily for 3.x deployment") // TODO remove ignore after 3.x deployment void shouldNotQueryInParallel() throws IOException, ExecutionException, InterruptedException { String url = "https://www.scm-manager.org/download/rss.xml"; diff --git a/scm-webapp/src/test/java/sonia/scm/api/FailureExceptionMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/FailureExceptionMapperTest.java index bf545692e2..56ab2380be 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/FailureExceptionMapperTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/FailureExceptionMapperTest.java @@ -27,6 +27,12 @@ package sonia.scm.api; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.util.Providers; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HEAD; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.Response; import org.jboss.resteasy.mock.MockDispatcherFactory; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; @@ -38,18 +44,11 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.GET; -import javax.ws.rs.HEAD; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.core.Response; import java.io.IOException; import java.net.URISyntaxException; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.lenient; -import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class FailureExceptionMapperTest { diff --git a/scm-webapp/src/test/java/sonia/scm/api/InvalidFormatExceptionMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/InvalidFormatExceptionMapperTest.java index 2ea8a70ee0..e4770dcd3a 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/InvalidFormatExceptionMapperTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/InvalidFormatExceptionMapperTest.java @@ -24,14 +24,14 @@ package sonia.scm.api; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; import org.jboss.resteasy.mock.MockDispatcherFactory; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.jboss.resteasy.spi.Dispatcher; import org.junit.jupiter.api.Test; -import javax.ws.rs.POST; -import javax.ws.rs.Path; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; diff --git a/scm-webapp/src/test/java/sonia/scm/api/rest/JSONContextResolverTest.java b/scm-webapp/src/test/java/sonia/scm/api/rest/JSONContextResolverTest.java index 942ae9b409..7697a8e1cf 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/rest/JSONContextResolverTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/rest/JSONContextResolverTest.java @@ -28,15 +28,15 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.junit.Test; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlRootElement; import java.io.IOException; import java.time.Instant; import java.time.LocalDateTime; @@ -44,7 +44,9 @@ import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.Optional; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; /** * Unit tests for {@link JSONContextResolver}. diff --git a/scm-webapp/src/test/java/sonia/scm/api/rest/SseHeaderResponseFilterTest.java b/scm-webapp/src/test/java/sonia/scm/api/rest/SseHeaderResponseFilterTest.java index 7f7625d191..0d9665588a 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/rest/SseHeaderResponseFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/rest/SseHeaderResponseFilterTest.java @@ -24,6 +24,10 @@ package sonia.scm.api.rest; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; import org.assertj.core.api.AbstractStringAssert; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; @@ -33,10 +37,6 @@ import sonia.scm.api.v2.CacheControlResponseFilter; import sonia.scm.sse.SseResponse; import sonia.scm.web.RestDispatcher; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; import java.net.URISyntaxException; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/CacheControlResponseFilterTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/CacheControlResponseFilterTest.java index 5090ff7669..fadf0048d9 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/CacheControlResponseFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/CacheControlResponseFilterTest.java @@ -24,16 +24,16 @@ package sonia.scm.api.v2; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.core.EntityTag; +import jakarta.ws.rs.core.MultivaluedMap; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.core.EntityTag; -import javax.ws.rs.core.MultivaluedMap; import java.util.Date; import static org.mockito.Mockito.never; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/FieldContainerResponseFilterTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/FieldContainerResponseFilterTest.java index e47ed447ce..b031f9a33e 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/FieldContainerResponseFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/FieldContainerResponseFilterTest.java @@ -28,15 +28,15 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; import com.google.common.io.Resources; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.UriInfo; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriInfo; import java.io.IOException; import java.net.URL; import java.util.ArrayList; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/InvalidAcceptHeaderFilterTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/InvalidAcceptHeaderFilterTest.java index e7c060b700..8589718a82 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/InvalidAcceptHeaderFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/InvalidAcceptHeaderFilterTest.java @@ -24,6 +24,13 @@ package sonia.scm.api.v2; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.core.MediaType; import org.jboss.resteasy.mock.MockDispatcherFactory; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; @@ -32,24 +39,14 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.api.WebApplicationExceptionMapper; import sonia.scm.api.v2.resources.ErrorDto; -import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.core.MediaType; - import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.Arrays; @@ -57,7 +54,10 @@ import java.util.List; import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class InvalidAcceptHeaderFilterTest { diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/JsonMarshallingResponseFilterTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/JsonMarshallingResponseFilterTest.java index c213845cc7..a146efdae5 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/JsonMarshallingResponseFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/JsonMarshallingResponseFilterTest.java @@ -27,27 +27,27 @@ package sonia.scm.api.v2; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.UriInfo; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; -import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.web.JsonEnricher; import sonia.scm.web.VndMediaType; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerResponseContext; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.UriInfo; import java.net.URI; import java.net.URISyntaxException; import java.util.HashSet; import java.util.Set; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -132,7 +132,7 @@ public class JsonMarshallingResponseFilterTest { @Test public void testFilterWithoutEntity() { filter.filter(requestContext, responseContext); - verify(responseContext, never()).setEntity(Mockito.anyObject()); + verify(responseContext, never()).setEntity(any()); } @Test @@ -141,7 +141,7 @@ public class JsonMarshallingResponseFilterTest { when(responseContext.getMediaType()).thenReturn(MediaType.APPLICATION_JSON_TYPE); filter.filter(requestContext, responseContext); - verify(responseContext, never()).setEntity(Mockito.anyObject()); + verify(responseContext, never()).setEntity(any()); } public static class Sample { diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AdminAccountStartupResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AdminAccountStartupResourceTest.java index 24d306c08a..aaa2823962 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AdminAccountStartupResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AdminAccountStartupResourceTest.java @@ -25,6 +25,8 @@ package sonia.scm.api.v2.resources; import com.github.sdorra.shiro.SubjectAware; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletRequest; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; import org.jboss.resteasy.mock.MockHttpRequest; @@ -46,9 +48,6 @@ import sonia.scm.security.AccessTokenCookieIssuer; import sonia.scm.security.DefaultAccessTokenCookieIssuer; import sonia.scm.web.RestDispatcher; -import javax.inject.Provider; -import javax.servlet.http.HttpServletRequest; -import java.net.URI; import java.net.URISyntaxException; import static java.lang.String.format; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java index cb49007704..a8e5282fd5 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AuthenticationResourceTest.java @@ -29,6 +29,9 @@ import com.github.sdorra.shiro.SubjectAware; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.MediaType; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.junit.Before; @@ -48,9 +51,6 @@ import sonia.scm.security.DefaultAccessTokenCookieIssuer; import sonia.scm.security.LogoutEvent; import sonia.scm.web.RestDispatcher; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.MediaType; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.List; @@ -59,7 +59,7 @@ import java.util.Optional; import static java.net.URI.create; import static java.util.Optional.of; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AutoCompleteResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AutoCompleteResourceTest.java index ed2c689f7b..4eca12b5cc 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AutoCompleteResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AutoCompleteResourceTest.java @@ -27,6 +27,7 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.databind.ObjectMapper; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.util.ThreadContext; import org.assertj.core.util.Lists; import org.jboss.resteasy.mock.MockHttpRequest; @@ -53,7 +54,6 @@ import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; import sonia.scm.xml.XmlDatabase; -import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AvailablePluginResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AvailablePluginResourceTest.java index 5aee7eb977..2f7d3f9969 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AvailablePluginResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AvailablePluginResourceTest.java @@ -24,6 +24,8 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authz.UnauthorizedException; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; @@ -48,15 +50,13 @@ import sonia.scm.plugin.PluginManager; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.inject.Provider; -import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.Collections; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doThrow; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java index 7173d49ca7..52783d37ca 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/BranchRootResourceTest.java @@ -24,6 +24,7 @@ package sonia.scm.api.v2.resources; +import jakarta.ws.rs.core.MediaType; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.subject.Subject; @@ -55,7 +56,6 @@ import sonia.scm.repository.api.RepositoryServiceFactory; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.MediaType; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java index 693bf56a12..2a73709881 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigResourceTest.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.io.Resources; +import jakarta.servlet.http.HttpServletResponse; import org.github.sdorra.jse.ShiroExtension; import org.github.sdorra.jse.SubjectAware; import org.jboss.resteasy.mock.MockHttpRequest; @@ -36,15 +37,14 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.admin.ScmConfigurationStore; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.NamespaceStrategyValidator; import sonia.scm.store.InMemoryConfigurationStoreFactory; import sonia.scm.util.JsonMerger; -import sonia.scm.admin.ScmConfigurationStore; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigurationAdapterBaseTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigurationAdapterBaseTest.java index 81cfa31f3b..0f6b9c651a 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigurationAdapterBaseTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ConfigurationAdapterBaseTest.java @@ -27,6 +27,13 @@ package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; +import jakarta.inject.Inject; +import jakarta.inject.Provider; +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.MediaType; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -47,13 +54,6 @@ import sonia.scm.web.JsonMockHttpRequest; import sonia.scm.web.JsonMockHttpResponse; import sonia.scm.web.RestDispatcher; -import javax.inject.Inject; -import javax.inject.Provider; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotBlank; -import javax.ws.rs.Path; -import javax.ws.rs.core.MediaType; import java.net.URI; import java.net.URISyntaxException; import java.util.Optional; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ContentResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ContentResourceTest.java index 1c56fdf8e8..3b0eba74e9 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ContentResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ContentResourceTest.java @@ -25,6 +25,8 @@ package sonia.scm.api.v2.resources; import com.google.common.io.Resources; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -38,8 +40,6 @@ import sonia.scm.repository.api.CatCommandBuilder; import sonia.scm.repository.api.RepositoryService; import sonia.scm.repository.api.RepositoryServiceFactory; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.StreamingOutput; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResourceTest.java index da22f511a8..de2aef54ec 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/DiffResourceTest.java @@ -25,8 +25,8 @@ package sonia.scm.api.v2.resources; -import com.google.inject.util.Providers; import de.otto.edison.hal.Links; +import jakarta.ws.rs.core.Response; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.subject.Subject; import org.apache.shiro.subject.support.SubjectThreadState; @@ -54,7 +54,6 @@ import sonia.scm.util.CRLFInjectionException; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.Response; import java.net.URISyntaxException; import java.util.Arrays; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java index 5fb929c6d6..d0bd1b8f0e 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/GroupRootResourceTest.java @@ -28,6 +28,7 @@ import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; import com.google.common.io.Resources; import com.google.inject.util.Providers; +import jakarta.servlet.http.HttpServletResponse; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.junit.Before; @@ -46,7 +47,6 @@ import sonia.scm.user.UserManager; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IncomingRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IncomingRootResourceTest.java index ca5f8b79e1..240fb11b39 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IncomingRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IncomingRootResourceTest.java @@ -25,8 +25,8 @@ package sonia.scm.api.v2.resources; -import com.google.inject.util.Providers; import de.otto.edison.hal.Links; +import jakarta.ws.rs.core.Response; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.subject.Subject; import org.apache.shiro.subject.support.SubjectThreadState; @@ -59,7 +59,6 @@ import sonia.scm.util.CRLFInjectionException; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.ws.rs.core.Response; import java.net.URI; import java.net.URISyntaxException; import java.time.Instant; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IndexDtoGeneratorTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IndexDtoGeneratorTest.java index 425eb593ed..773cde7369 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IndexDtoGeneratorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IndexDtoGeneratorTest.java @@ -34,7 +34,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.BasicContextProvider; @@ -70,9 +69,13 @@ class IndexDtoGeneratorTest { private InitializationFinisher initializationFinisher; @Mock private SearchEngine searchEngine; - @InjectMocks private IndexDtoGenerator generator; + @BeforeEach + void setUp() { + generator = new IndexDtoGenerator(resourceLinks, contextProvider, configuration, initializationFinisher, searchEngine, false); + } + @Nested class WithFullyInitializedSystem { diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IndexResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IndexResourceTest.java index 28cdd986af..c9b8bf56e8 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IndexResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/IndexResourceTest.java @@ -26,6 +26,7 @@ package sonia.scm.api.v2.resources; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; +import jakarta.servlet.http.HttpServletRequest; import org.assertj.core.api.Assertions; import org.junit.Before; import org.junit.Rule; @@ -38,7 +39,6 @@ import sonia.scm.config.ScmConfiguration; import sonia.scm.initialization.InitializationFinisher; import sonia.scm.search.SearchEngine; -import javax.servlet.http.HttpServletRequest; import java.net.URI; import java.util.Locale; import java.util.Optional; @@ -73,7 +73,8 @@ public class IndexResourceTest { scmContextProvider, configuration, initializationFinisher, - searchEngine + searchEngine, + false ); this.indexResource = new IndexResource(generator); } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/InstalledPluginResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/InstalledPluginResourceTest.java index 592e10e066..664e7f945c 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/InstalledPluginResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/InstalledPluginResourceTest.java @@ -24,6 +24,8 @@ package sonia.scm.api.v2.resources; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authz.UnauthorizedException; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; @@ -43,8 +45,6 @@ import sonia.scm.plugin.PluginManager; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.inject.Provider; -import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.Collections; @@ -52,7 +52,7 @@ import java.util.Optional; import static java.util.Collections.emptyList; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/LinkBuilderTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/LinkBuilderTest.java index 470391d890..2b602d2fc9 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/LinkBuilderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/LinkBuilderTest.java @@ -24,10 +24,10 @@ package sonia.scm.api.v2.resources; +import jakarta.ws.rs.Path; import org.junit.Before; import org.junit.Test; -import javax.ws.rs.Path; import java.net.URI; import java.net.URISyntaxException; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java index ed70ba261f..e2c63a5c92 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MeResourceTest.java @@ -27,6 +27,7 @@ package sonia.scm.api.v2.resources; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; import com.google.common.collect.ImmutableSet; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.credential.PasswordService; import org.apache.shiro.subject.PrincipalCollection; @@ -51,7 +52,6 @@ import sonia.scm.user.UserManager; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MetricsIndexEnricherTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MetricsIndexEnricherTest.java index f8648cbef2..8079c08372 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MetricsIndexEnricherTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MetricsIndexEnricherTest.java @@ -28,6 +28,7 @@ import com.google.common.collect.ImmutableSet; import com.google.inject.util.Providers; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import jakarta.inject.Provider; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; import org.junit.jupiter.api.AfterEach; @@ -40,7 +41,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.metrics.MonitoringSystem; import sonia.scm.metrics.ScrapeTarget; -import javax.inject.Provider; import java.io.IOException; import java.io.OutputStream; import java.net.URI; @@ -50,7 +50,9 @@ import java.util.Map; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class MetricsIndexEnricherTest { diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MetricsResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MetricsResourceTest.java index 686b4009a4..318f403aa0 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MetricsResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/MetricsResourceTest.java @@ -27,6 +27,7 @@ package sonia.scm.api.v2.resources; import com.google.common.collect.ImmutableSet; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; @@ -42,7 +43,6 @@ import sonia.scm.metrics.MonitoringSystem; import sonia.scm.metrics.ScrapeTarget; import sonia.scm.web.RestDispatcher; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import java.io.UnsupportedEncodingException; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/NamespaceStrategyResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/NamespaceStrategyResourceTest.java index 9beddd5ff3..f47b2c3cb7 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/NamespaceStrategyResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/NamespaceStrategyResourceTest.java @@ -26,6 +26,8 @@ package sonia.scm.api.v2.resources; import com.google.common.collect.Lists; import com.google.inject.util.Providers; +import jakarta.inject.Provider; +import jakarta.ws.rs.core.UriInfo; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -33,8 +35,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.repository.NamespaceStrategy; import sonia.scm.repository.Repository; -import javax.inject.Provider; -import javax.ws.rs.core.UriInfo; import java.net.URI; import java.util.LinkedHashSet; import java.util.Set; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/NotificationResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/NotificationResourceTest.java index fdd6e949c2..f922af8560 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/NotificationResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/NotificationResourceTest.java @@ -26,6 +26,8 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.Path; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.junit.jupiter.api.BeforeEach; @@ -39,8 +41,6 @@ import sonia.scm.notifications.Type; import sonia.scm.sse.ChannelRegistry; import sonia.scm.web.RestDispatcher; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.Path; import java.io.IOException; import java.net.URISyntaxException; import java.time.Instant; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/PendingPluginResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/PendingPluginResourceTest.java index 22d957afca..76ae40bddf 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/PendingPluginResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/PendingPluginResourceTest.java @@ -25,6 +25,8 @@ package sonia.scm.api.v2.resources; import com.google.inject.util.Providers; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.Response; import org.apache.shiro.ShiroException; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; @@ -48,13 +50,10 @@ import sonia.scm.plugin.PluginInformation; import sonia.scm.plugin.PluginManager; import sonia.scm.web.RestDispatcher; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.Response; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import static java.net.URI.create; -import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/PluginCenterAuthResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/PluginCenterAuthResourceTest.java index 3c83d5eaa2..913234b48b 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/PluginCenterAuthResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/PluginCenterAuthResourceTest.java @@ -28,6 +28,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.inject.util.Providers; +import jakarta.servlet.http.HttpServletResponse; import lombok.Value; import org.github.sdorra.jse.ShiroExtension; import org.github.sdorra.jse.SubjectAware; @@ -52,7 +53,6 @@ import sonia.scm.user.UserDisplayManager; import sonia.scm.user.UserTestData; import sonia.scm.web.RestDispatcher; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -61,8 +61,19 @@ import java.util.Optional; import java.util.function.Consumer; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; -import static sonia.scm.api.v2.resources.PluginCenterAuthResource.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static sonia.scm.api.v2.resources.PluginCenterAuthResource.AuthParameter; +import static sonia.scm.api.v2.resources.PluginCenterAuthResource.ChallengeGenerator; +import static sonia.scm.api.v2.resources.PluginCenterAuthResource.ERROR_ALREADY_AUTHENTICATED; +import static sonia.scm.api.v2.resources.PluginCenterAuthResource.ERROR_AUTHENTICATION_DISABLED; +import static sonia.scm.api.v2.resources.PluginCenterAuthResource.ERROR_CHALLENGE_DOES_NOT_MATCH; +import static sonia.scm.api.v2.resources.PluginCenterAuthResource.ERROR_CHALLENGE_MISSING; +import static sonia.scm.api.v2.resources.PluginCenterAuthResource.ERROR_PARAMS_MISSING; +import static sonia.scm.api.v2.resources.PluginCenterAuthResource.ERROR_SOURCE_MISSING; @ExtendWith({MockitoExtension.class, ShiroExtension.class}) class PluginCenterAuthResourceTest { diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryImportResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryImportResourceTest.java index 6959738f1e..d140c3b7cd 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryImportResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryImportResourceTest.java @@ -57,10 +57,10 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.Collections; +import static jakarta.servlet.http.HttpServletResponse.SC_CREATED; +import static jakarta.servlet.http.HttpServletResponse.SC_OK; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Collections.singletonMap; -import static javax.servlet.http.HttpServletResponse.SC_CREATED; -import static javax.servlet.http.HttpServletResponse.SC_OK; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.argThat; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPathsResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPathsResourceTest.java index 660fcd63a9..aa54acff3a 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPathsResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPathsResourceTest.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpServletResponse; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.junit.jupiter.api.BeforeEach; @@ -38,7 +39,6 @@ import sonia.scm.repository.RepositoryPathCollector; import sonia.scm.repository.RepositoryPaths; import sonia.scm.web.RestDispatcher; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URISyntaxException; import java.util.Arrays; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResourceTest.java index ec2f35402a..b3f32a002f 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResourceTest.java @@ -27,8 +27,8 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.ImmutableList; -import com.google.inject.util.Providers; import de.otto.edison.hal.HalRepresentation; +import jakarta.ws.rs.HttpMethod; import lombok.ToString; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.authz.AuthorizationException; @@ -56,7 +56,6 @@ import sonia.scm.repository.RepositoryPermission; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.ws.rs.HttpMethod; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRoleRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRoleRootResourceTest.java index 3a0bfe357d..a4774f2f86 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRoleRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRoleRootResourceTest.java @@ -27,6 +27,7 @@ package sonia.scm.api.v2.resources; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; import com.google.inject.util.Providers; +import jakarta.servlet.http.HttpServletResponse; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.junit.Before; @@ -44,7 +45,6 @@ import sonia.scm.repository.RepositoryRoleManager; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.Collections; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java index 7385007b6b..f6387893ea 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryRootResourceTest.java @@ -30,6 +30,8 @@ import com.github.sdorra.shiro.SubjectAware; import com.google.common.collect.ImmutableSet; import com.google.common.io.Resources; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.MediaType; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.subject.SimplePrincipalCollection; import org.apache.shiro.subject.Subject; @@ -78,8 +80,6 @@ import sonia.scm.user.User; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.MediaType; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.OutputStream; @@ -91,15 +91,15 @@ import java.time.Instant; import java.util.Set; import java.util.function.Predicate; +import static jakarta.servlet.http.HttpServletResponse.SC_ACCEPTED; +import static jakarta.servlet.http.HttpServletResponse.SC_BAD_REQUEST; +import static jakarta.servlet.http.HttpServletResponse.SC_CONFLICT; +import static jakarta.servlet.http.HttpServletResponse.SC_NOT_FOUND; +import static jakarta.servlet.http.HttpServletResponse.SC_NO_CONTENT; +import static jakarta.servlet.http.HttpServletResponse.SC_OK; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; import static java.util.stream.Stream.of; -import static javax.servlet.http.HttpServletResponse.SC_ACCEPTED; -import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; -import static javax.servlet.http.HttpServletResponse.SC_CONFLICT; -import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; -import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT; -import static javax.servlet.http.HttpServletResponse.SC_OK; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTypeRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTypeRootResourceTest.java index 880a1bec00..b01763cc26 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTypeRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/RepositoryTypeRootResourceTest.java @@ -47,12 +47,12 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.List; -import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; -import static javax.servlet.http.HttpServletResponse.SC_OK; +import static jakarta.servlet.http.HttpServletResponse.SC_NOT_FOUND; +import static jakarta.servlet.http.HttpServletResponse.SC_OK; import static org.hamcrest.Matchers.equalToIgnoringCase; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.Silent.class) diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/SearchResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/SearchResourceTest.java index 7cdd8165af..2ade96404d 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/SearchResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/SearchResourceTest.java @@ -27,6 +27,8 @@ package sonia.scm.api.v2.resources; import com.fasterxml.jackson.databind.JsonNode; import com.google.inject.util.Providers; import de.otto.edison.hal.HalRepresentation; +import jakarta.annotation.Nonnull; +import jakarta.servlet.http.HttpServletResponse; import lombok.Getter; import lombok.Setter; import org.assertj.core.util.Lists; @@ -54,8 +56,6 @@ import sonia.scm.web.JsonMockHttpResponse; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.annotation.Nonnull; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URI; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UIRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UIRootResourceTest.java index ca288001bb..3357222db4 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UIRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UIRootResourceTest.java @@ -27,6 +27,7 @@ package sonia.scm.api.v2.resources; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import com.google.inject.util.Providers; +import jakarta.servlet.http.HttpServletRequest; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.junit.Before; @@ -42,19 +43,18 @@ import sonia.scm.plugin.PluginResources; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletRequest; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.util.HashSet; -import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; -import static javax.servlet.http.HttpServletResponse.SC_OK; +import static jakarta.servlet.http.HttpServletResponse.SC_NOT_FOUND; +import static jakarta.servlet.http.HttpServletResponse.SC_OK; import static org.hamcrest.Matchers.equalToIgnoringCase; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserApiKeyResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserApiKeyResourceTest.java index 0d82bb5ca5..0013df9c10 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserApiKeyResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserApiKeyResourceTest.java @@ -25,6 +25,7 @@ package sonia.scm.api.v2.resources; import com.google.inject.util.Providers; +import jakarta.servlet.http.HttpServletResponse; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; import org.junit.Before; @@ -36,7 +37,6 @@ import sonia.scm.security.ApiKeyService; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; @@ -44,7 +44,7 @@ import java.net.URISyntaxException; import static java.time.Instant.now; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java index 07b9df6291..62c8b0b8cc 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/UserRootResourceTest.java @@ -28,6 +28,7 @@ import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; import com.google.common.io.Resources; import com.google.inject.util.Providers; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authc.credential.PasswordService; import org.jboss.resteasy.mock.MockHttpRequest; import org.jboss.resteasy.mock.MockHttpResponse; @@ -57,7 +58,6 @@ import sonia.scm.user.UserManager; import sonia.scm.web.RestDispatcher; import sonia.scm.web.VndMediaType; -import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; diff --git a/scm-webapp/src/test/java/sonia/scm/cache/GuavaNamedCacheConfigurationTest.java b/scm-webapp/src/test/java/sonia/scm/cache/GuavaNamedCacheConfigurationTest.java index 95e62d4027..1cdc23af16 100644 --- a/scm-webapp/src/test/java/sonia/scm/cache/GuavaNamedCacheConfigurationTest.java +++ b/scm-webapp/src/test/java/sonia/scm/cache/GuavaNamedCacheConfigurationTest.java @@ -24,17 +24,18 @@ package sonia.scm.cache; +import jakarta.xml.bind.JAXBContext; +import jakarta.xml.bind.JAXBException; import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.config.WebappConfigProvider; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; import java.io.StringReader; +import static java.util.Map.of; import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(MockitoExtension.class) @@ -50,6 +51,7 @@ class GuavaNamedCacheConfigurationTest { @Test void shouldTakeValueFromConfigurationFile() throws JAXBException { + WebappConfigProvider.setConfigBindings(of()); GuavaCacheManagerConfiguration configuration = readConfiguration(); assertThat(configuration.getCaches().get(0).getName()).isEqualTo("sonia.cache.externalGroups"); @@ -57,20 +59,16 @@ class GuavaNamedCacheConfigurationTest { } @Nested - class WithProperty { - - @BeforeEach - void setProperty() { - System.setProperty("scm.cache.externalGroups.maximumSize", "42"); - } + class WithConfig { @AfterEach - void removeProperty() { - System.clearProperty("scm.cache.externalGroups.maximumSize"); + void tearDown() { + WebappConfigProvider.setConfigBindings(of()); } @Test - void shouldTakeValueFromPropertyIfPresent() throws JAXBException { + void shouldTakeValueFromConfigIfPresent() throws JAXBException { + WebappConfigProvider.setConfigBindings(of("scm.cache.externalGroups.maximumSize", "42")); GuavaCacheManagerConfiguration configuration = readConfiguration(); assertThat(configuration.getCaches().get(0).getMaximumSize()).isEqualTo(42); diff --git a/scm-webapp/src/test/java/sonia/scm/cli/CliProcessorTest.java b/scm-webapp/src/test/java/sonia/scm/cli/CliProcessorTest.java index 8913387efd..1b586af137 100644 --- a/scm-webapp/src/test/java/sonia/scm/cli/CliProcessorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/cli/CliProcessorTest.java @@ -29,6 +29,7 @@ import com.google.inject.Binder; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Module; +import jakarta.annotation.Nonnull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -40,7 +41,6 @@ import picocli.CommandLine; import sonia.scm.i18n.I18nCollector; import sonia.scm.plugin.PluginLoader; -import javax.annotation.Nonnull; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; import java.util.Locale; diff --git a/scm-webapp/src/test/java/sonia/scm/cli/TemplateTestRenderer.java b/scm-webapp/src/test/java/sonia/scm/cli/TemplateTestRenderer.java index 0c8f16e210..4d8bff31e6 100644 --- a/scm-webapp/src/test/java/sonia/scm/cli/TemplateTestRenderer.java +++ b/scm-webapp/src/test/java/sonia/scm/cli/TemplateTestRenderer.java @@ -25,12 +25,12 @@ package sonia.scm.cli; import com.google.common.io.Resources; +import jakarta.servlet.ServletContext; import picocli.CommandLine; import sonia.scm.template.MustacheTemplateTestEngine; import sonia.scm.template.TemplateEngine; import sonia.scm.template.TemplateEngineFactory; -import javax.servlet.ServletContext; import java.io.ByteArrayOutputStream; import java.io.PrintWriter; import java.util.Locale; diff --git a/scm-webapp/src/test/java/sonia/scm/ScmLogFilePropertyDefinerTest.java b/scm-webapp/src/test/java/sonia/scm/config/ScmLogFilePropertyDefinerTest.java similarity index 97% rename from scm-webapp/src/test/java/sonia/scm/ScmLogFilePropertyDefinerTest.java rename to scm-webapp/src/test/java/sonia/scm/config/ScmLogFilePropertyDefinerTest.java index 4ad33b9697..12bf8def77 100644 --- a/scm-webapp/src/test/java/sonia/scm/ScmLogFilePropertyDefinerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/config/ScmLogFilePropertyDefinerTest.java @@ -22,13 +22,15 @@ * SOFTWARE. */ -package sonia.scm; +package sonia.scm.config; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.io.TempDir; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.Platform; +import sonia.scm.SCMContextProvider; import java.nio.file.Path; import java.util.Properties; diff --git a/scm-webapp/src/test/java/sonia/scm/filter/BaseUrlFilterTest.java b/scm-webapp/src/test/java/sonia/scm/filter/BaseUrlFilterTest.java index 5ba3348d53..73e2316f1c 100644 --- a/scm-webapp/src/test/java/sonia/scm/filter/BaseUrlFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/filter/BaseUrlFilterTest.java @@ -24,6 +24,10 @@ package sonia.scm.filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -32,11 +36,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.config.ScmConfiguration; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import java.io.IOException; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java b/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java index 935285dbcf..cc35e50012 100644 --- a/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java @@ -26,6 +26,12 @@ package sonia.scm.filter; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -36,12 +42,6 @@ import sonia.scm.AbstractTestBase; import sonia.scm.SCMContext; import sonia.scm.TransactionId; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Map; diff --git a/scm-webapp/src/test/java/sonia/scm/filter/PropagatePrincipleFilterTest.java b/scm-webapp/src/test/java/sonia/scm/filter/PropagatePrincipleFilterTest.java index 6071ec32dd..652b745a79 100644 --- a/scm-webapp/src/test/java/sonia/scm/filter/PropagatePrincipleFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/filter/PropagatePrincipleFilterTest.java @@ -26,6 +26,10 @@ package sonia.scm.filter; import com.github.sdorra.shiro.ShiroRule; import com.github.sdorra.shiro.SubjectAware; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.subject.SimplePrincipalCollection; import org.apache.shiro.subject.Subject; import org.junit.Before; @@ -42,13 +46,9 @@ import sonia.scm.security.AnonymousMode; import sonia.scm.user.User; import sonia.scm.user.UserTestData; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.verify; /** diff --git a/scm-webapp/src/test/java/sonia/scm/initialization/InitializationAuthenticationServiceTest.java b/scm-webapp/src/test/java/sonia/scm/initialization/InitializationAuthenticationServiceTest.java index a6e847d88a..ada24eb3c6 100644 --- a/scm-webapp/src/test/java/sonia/scm/initialization/InitializationAuthenticationServiceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/initialization/InitializationAuthenticationServiceTest.java @@ -24,6 +24,8 @@ package sonia.scm.initialization; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authc.AuthenticationException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -38,9 +40,6 @@ import sonia.scm.security.AccessTokenCookieIssuer; import sonia.scm.web.security.AdministrationContext; import sonia.scm.web.security.PrivilegedAction; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; diff --git a/scm-webapp/src/test/java/sonia/scm/initialization/InitializationWebTokenGeneratorTest.java b/scm-webapp/src/test/java/sonia/scm/initialization/InitializationWebTokenGeneratorTest.java index 3c166c165b..96481d1ed4 100644 --- a/scm-webapp/src/test/java/sonia/scm/initialization/InitializationWebTokenGeneratorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/initialization/InitializationWebTokenGeneratorTest.java @@ -24,14 +24,13 @@ package sonia.scm.initialization; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; import org.apache.shiro.authc.AuthenticationToken; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/AdminAccountStartupActionTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/AdminAccountStartupActionTest.java index 5b8232439f..5ee439530b 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/AdminAccountStartupActionTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/AdminAccountStartupActionTest.java @@ -74,13 +74,6 @@ class AdminAccountStartupActionTest { ArgumentCaptor userCaptor = ArgumentCaptor.forClass(User.class); - @BeforeEach - void clearProperties() { - System.clearProperty("scm.initialPassword"); - System.clearProperty("sonia.scm.skipAdminCreation"); - - } - @BeforeEach void mockAdminContext() { doAnswer(invocation -> { @@ -98,14 +91,12 @@ class AdminAccountStartupActionTest { class WithPredefinedPassword { @BeforeEach void initPasswordGenerator() { - System.setProperty("scm.initialPassword", "password"); - System.clearProperty("scm.initialUser"); lenient().when(passwordService.encryptPassword("password")).thenReturn("encrypted"); } @Test void shouldCreateAdminAccountIfNoUserExistsAndAssignPermissions() { - createStartupAction(); + createStartupAction("scmadmin", "password", false); verifyAdminCreated("scmadmin"); verifyAdminPermissionsAssigned("scmadmin"); @@ -114,9 +105,7 @@ class AdminAccountStartupActionTest { @Test void shouldUseSpecifiedAdminUsername() { - System.setProperty("scm.initialUser", "arthur"); - - createStartupAction(); + createStartupAction("arthur", "password", false); verifyAdminCreated("arthur"); verifyAdminPermissionsAssigned("arthur"); @@ -128,7 +117,7 @@ class AdminAccountStartupActionTest { when(userManager.getAll()).thenReturn(Lists.newArrayList(SCMContext.ANONYMOUS)); when(userManager.contains(SCMContext.USER_ANONYMOUS)).thenReturn(true); - createStartupAction(); + createStartupAction("scmadmin", "password", false); verifyAdminCreated("scmadmin"); verifyAdminPermissionsAssigned("scmadmin"); @@ -140,7 +129,7 @@ class AdminAccountStartupActionTest { List users = Lists.newArrayList(UserTestData.createTrillian()); when(userManager.getAll()).thenReturn(users); - createStartupAction(); + createStartupAction("scmadmin", "password", false); verify(userManager, never()).create(any(User.class)); verify(permissionAssigner, never()).setPermissionsForUser(anyString(), any()); @@ -153,7 +142,7 @@ class AdminAccountStartupActionTest { lenient().when(randomPasswordGenerator.createRandomPassword()).thenReturn("random"); when(userManager.getAll()).thenReturn(Collections.emptyList()); - createStartupAction(); + createStartupAction("scmadmin", "", false); verify(userManager, never()).create(any(User.class)); verify(permissionAssigner, never()).setPermissionsForUser(anyString(), any()); @@ -165,28 +154,14 @@ class AdminAccountStartupActionTest { @Test @MockitoSettings(strictness = Strictness.LENIENT) void shouldSkipAdminAccountCreationIfPropertyIsSet() { - System.setProperty("sonia.scm.skipAdminCreation", "true"); - - createStartupAction(); + createStartupAction("scmadmin", "scmadmin", true); verify(userManager, never()).create(any()); verify(permissionAssigner, never()).setPermissionsForUser(anyString(), any()); } - @Test - void shouldDoNothingOnSecondStart() { - List users = Lists.newArrayList(UserTestData.createTrillian()); - when(userManager.getAll()).thenReturn(users); - - createStartupAction(); - - verify(userManager, never()).create(any(User.class)); - verify(permissionAssigner, never()).setPermissionsForUser(anyString(), any()); - assertThat(startupAction.done()).isTrue(); - } - - private void createStartupAction() { - startupAction = new AdminAccountStartupAction(passwordService, userManager, permissionAssigner, randomPasswordGenerator, context); + private void createStartupAction(String user, String password, boolean skipAdminCreation) { + startupAction = new AdminAccountStartupAction(user, password, skipAdminCreation, passwordService, userManager, permissionAssigner, randomPasswordGenerator, context); } private void verifyAdminPermissionsAssigned(String expectedUsername) { diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/ExitRestartStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/ExitRestartStrategyTest.java index 766fa3bb64..7029710260 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/ExitRestartStrategyTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/ExitRestartStrategyTest.java @@ -32,7 +32,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.util.function.IntConsumer; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) @@ -48,7 +47,6 @@ class ExitRestartStrategyTest { void setUpStrategy() { strategy = new ExitRestartStrategy(); exiter = new CapturingExiter(); - strategy.setExiter(exiter); } @Test @@ -59,29 +57,6 @@ class ExitRestartStrategyTest { assertThat(exiter.getExitCode()).isEqualTo(0); } - @Test - void shouldUseExitCodeFromSystemProperty() { - System.setProperty(ExitRestartStrategy.PROPERTY_EXIT_CODE, "42"); - try { - strategy.restart(context); - - verify(context).destroy(); - assertThat(exiter.getExitCode()).isEqualTo(42); - } finally { - System.clearProperty(ExitRestartStrategy.PROPERTY_EXIT_CODE); - } - } - - @Test - void shouldThrowExceptionForNonNumericExitCode() { - System.setProperty(ExitRestartStrategy.PROPERTY_EXIT_CODE, "xyz"); - try { - assertThrows(RestartNotSupportedException.class, () -> strategy.restart(context)); - } finally { - System.clearProperty(ExitRestartStrategy.PROPERTY_EXIT_CODE); - } - } - private static class CapturingExiter implements IntConsumer { private int exitCode = -1; diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/PluginWizardStartupActionTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/PluginWizardStartupActionTest.java index cc06be0cfe..8a41ec4ac4 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/PluginWizardStartupActionTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/PluginWizardStartupActionTest.java @@ -25,16 +25,18 @@ package sonia.scm.lifecycle; import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.config.WebappConfigProvider; import sonia.scm.plugin.PluginSetConfigStore; import sonia.scm.plugin.PluginSetsConfig; +import java.util.Collections; +import java.util.Map; import java.util.Optional; @ExtendWith(MockitoExtension.class) @@ -46,20 +48,15 @@ class PluginWizardStartupActionTest { @InjectMocks private PluginWizardStartupAction startupAction; - @BeforeEach - void setup() { - System.clearProperty(AdminAccountStartupAction.INITIAL_PASSWORD_PROPERTY); - } - @Test void shouldNotBeDoneByDefault() { + WebappConfigProvider.setConfigBindings(Collections.emptyMap()); Assertions.assertThat(startupAction.done()).isFalse(); } @Test void shouldBeDoneIfInitialPasswordIsSet() { - System.setProperty(AdminAccountStartupAction.INITIAL_PASSWORD_PROPERTY, "secret"); - + WebappConfigProvider.setConfigBindings(Map.of("initialPassword", "foo/bar")); Assertions.assertThat(startupAction.done()).isTrue(); } @@ -69,5 +66,4 @@ class PluginWizardStartupActionTest { Assertions.assertThat(startupAction.done()).isTrue(); } - } diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/RestartServletTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/RestartServletTest.java index eeae7c697a..a236a68f1c 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/RestartServletTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/RestartServletTest.java @@ -26,6 +26,10 @@ package sonia.scm.lifecycle; import com.github.legman.Subscribe; import com.google.common.base.Charsets; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -34,10 +38,6 @@ import sonia.scm.Stage; import sonia.scm.event.ScmEventBus; import sonia.scm.event.ScmTestEventBus; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/ServletContextCleanerTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/ServletContextCleanerTest.java index 9ff862a357..bf1820428b 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/ServletContextCleanerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/ServletContextCleanerTest.java @@ -25,13 +25,12 @@ package sonia.scm.lifecycle; import com.google.common.collect.ImmutableSet; +import jakarta.servlet.ServletContext; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.ServletContext; - import java.util.Collection; import java.util.Enumeration; import java.util.Set; @@ -54,7 +53,7 @@ public class ServletContextCleanerTest { "resteasy.Deployment", "sonia.scm.Context", "org.eclipse.jetty.HttpServer", - "javax.servlet.Context", + "jakarta.servlet.Context", "org.apache.shiro.SecurityManager" ); @@ -66,7 +65,7 @@ public class ServletContextCleanerTest { verify(servletContext).removeAttribute("resteasy.Deployment"); verify(servletContext).removeAttribute("sonia.scm.Context"); verify(servletContext, never()).removeAttribute("org.eclipse.jetty.HttpServer"); - verify(servletContext, never()).removeAttribute("javax.servlet.Context"); + verify(servletContext, never()).removeAttribute("jakarta.servlet.Context"); verify(servletContext).removeAttribute("org.apache.shiro.SecurityManager"); } diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/SetupContextListenerTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/SetupContextListenerTest.java index d8bf8131a3..bbc7c87dea 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/SetupContextListenerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/SetupContextListenerTest.java @@ -25,6 +25,7 @@ package sonia.scm.lifecycle; import com.google.common.collect.ImmutableSet; +import jakarta.servlet.ServletContextEvent; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -32,7 +33,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.web.security.AdministrationContext; -import javax.servlet.ServletContextEvent; import java.util.Set; import static org.mockito.ArgumentMatchers.any; diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/jwt/JwtSettingsStartupActionTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/jwt/JwtSettingsStartupActionTest.java index 66b6173196..64e9886295 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/jwt/JwtSettingsStartupActionTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/jwt/JwtSettingsStartupActionTest.java @@ -27,11 +27,9 @@ package sonia.scm.lifecycle.jwt; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import sonia.scm.security.JwtSystemProperties; +import sonia.scm.security.JwtConfig; import java.time.Clock; import java.time.Instant; @@ -51,37 +49,52 @@ class JwtSettingsStartupActionTest { @Mock private JwtSettingsStore jwtSettingsStore; + @Mock + private JwtConfig jwtConfig; + private final Clock clock = Clock.fixed(Instant.now(), ZoneId.systemDefault()); @BeforeEach void setupAction() { - jwtSettingsAction = new JwtSettingsStartupAction(jwtSettingsStore, clock); + jwtSettingsAction = new JwtSettingsStartupAction(jwtSettingsStore, jwtConfig, clock); } - @BeforeEach - void clearSystemProperties() { - System.clearProperty(JwtSystemProperties.ENDLESS_JWT); - } + @Test + void shouldNotChangeSettings_Enabled() { + when(jwtConfig.isEndlessJwtEnabled()).thenReturn(true); - @ParameterizedTest - @CsvSource({"true,true", "false,false"}) - void shouldNotChangeSettings(String isEndlessJwtNowEnabled, String isEndlessJwtEnabledLastStartUp) { - System.setProperty(JwtSystemProperties.ENDLESS_JWT, isEndlessJwtNowEnabled); - JwtSettings settings = new JwtSettings(Boolean.parseBoolean(isEndlessJwtEnabledLastStartUp), 0); + JwtSettings settings = new JwtSettings(true, 0); when(jwtSettingsStore.get()).thenReturn(settings); jwtSettingsAction.run(); - assertThat(settings.isEndlessJwtEnabledLastStartUp()).isEqualTo(Boolean.parseBoolean(isEndlessJwtNowEnabled)); - assertThat(settings.getKeysValidAfterTimestampInMs()).isEqualTo(0); + assertThat(settings.isEndlessJwtEnabledLastStartUp()).isTrue(); + assertThat(settings.getKeysValidAfterTimestampInMs()).isZero(); verify(jwtSettingsStore).get(); verifyNoMoreInteractions(jwtSettingsStore); } + @Test + void shouldNotChangeSettings_Disabled() { + when(jwtConfig.isEndlessJwtEnabled()).thenReturn(false); + + JwtSettings settings = new JwtSettings(false, 0); + when(jwtSettingsStore.get()).thenReturn(settings); + + jwtSettingsAction.run(); + + assertThat(settings.isEndlessJwtEnabledLastStartUp()).isFalse(); + assertThat(settings.getKeysValidAfterTimestampInMs()).isZero(); + + verify(jwtSettingsStore).get(); + verifyNoMoreInteractions(jwtSettingsStore); + } + + @Test void shouldOnlyUpdateEndlessJwtEnabledLastStartup() { - System.setProperty(JwtSystemProperties.ENDLESS_JWT, "true"); + when(jwtConfig.isEndlessJwtEnabled()).thenReturn(true); JwtSettings settings = new JwtSettings(false, 0); when(jwtSettingsStore.get()).thenReturn(settings); @@ -90,15 +103,14 @@ class JwtSettingsStartupActionTest { verify(jwtSettingsStore).get(); verify(jwtSettingsStore).set(argThat(actualSettings -> { - assertThat(actualSettings.isEndlessJwtEnabledLastStartUp()).isEqualTo(true); - assertThat(actualSettings.getKeysValidAfterTimestampInMs()).isEqualTo(0); + assertThat(actualSettings.isEndlessJwtEnabledLastStartUp()).isTrue(); + assertThat(actualSettings.getKeysValidAfterTimestampInMs()).isZero(); return true; })); } @Test void shouldInvalidateKeys() { - System.setProperty(JwtSystemProperties.ENDLESS_JWT, "false"); JwtSettings settings = new JwtSettings(true, 0); when(jwtSettingsStore.get()).thenReturn(settings); diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/EagerSingletonModuleTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/EagerSingletonModuleTest.java index 19a9eadb30..d641550710 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/EagerSingletonModuleTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/EagerSingletonModuleTest.java @@ -27,12 +27,11 @@ package sonia.scm.lifecycle.modules; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; import org.junit.jupiter.api.Test; import sonia.scm.EagerSingleton; -import javax.inject.Inject; -import javax.inject.Singleton; - import static org.assertj.core.api.Assertions.assertThat; class EagerSingletonModuleTest { diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/InjectionLifeCycleTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/InjectionLifeCycleTest.java index 9f17ea4992..dacf0dbf64 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/InjectionLifeCycleTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/InjectionLifeCycleTest.java @@ -30,21 +30,18 @@ import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Module; import com.google.inject.multibindings.Multibinder; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import sonia.scm.lifecycle.modules.CloseableModule; import sonia.scm.Default; import sonia.scm.EagerSingleton; -import sonia.scm.lifecycle.modules.EagerSingletonModule; -import sonia.scm.lifecycle.modules.InjectionLifeCycle; -import javax.inject.Inject; -import javax.inject.Singleton; -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; import java.io.Closeable; import java.util.ArrayList; import java.util.Arrays; diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/MoreMatchersTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/MoreMatchersTest.java index eb79694e90..db5af75d13 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/MoreMatchersTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/MoreMatchersTest.java @@ -26,10 +26,10 @@ package sonia.scm.lifecycle.modules; import com.google.inject.TypeLiteral; import com.google.inject.matcher.Matcher; +import jakarta.inject.Singleton; import org.assertj.core.api.AbstractBooleanAssert; import org.junit.jupiter.api.Test; -import javax.inject.Singleton; import java.io.Serializable; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/ServletContextListenerHolderTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/ServletContextListenerHolderTest.java index 8f70c0e27d..83eaadd380 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/ServletContextListenerHolderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/ServletContextListenerHolderTest.java @@ -28,12 +28,12 @@ import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.Key; +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; import java.util.Arrays; import java.util.HashSet; import java.util.Set; diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/ServletContextModuleTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/ServletContextModuleTest.java index c2a4ddb463..962238097e 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/ServletContextModuleTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/ServletContextModuleTest.java @@ -27,6 +27,10 @@ package sonia.scm.lifecycle.modules; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.servlet.GuiceFilter; +import jakarta.inject.Inject; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -35,11 +39,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.Default; -import javax.inject.Inject; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModuleTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModuleTest.java index 22797fa0ed..4516ab0557 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModuleTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModuleTest.java @@ -25,12 +25,12 @@ package sonia.scm.lifecycle.modules; import com.google.inject.Binder; import com.google.inject.binder.AnnotatedBindingBuilder; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.config.WebappConfigProvider; import sonia.scm.plugin.PluginLoader; import sonia.scm.repository.work.NoneCachingWorkingCopyPool; import sonia.scm.repository.work.SimpleWorkingCopyFactory; @@ -38,11 +38,11 @@ import sonia.scm.repository.work.WorkingCopy; import sonia.scm.repository.work.WorkingCopyPool; import java.io.File; +import java.util.Map; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static sonia.scm.lifecycle.modules.WorkingCopyPoolModule.WORKING_COPY_POOL_STRATEGY_PROPERTY; @ExtendWith(MockitoExtension.class) class WorkingCopyPoolModuleTest { @@ -59,14 +59,9 @@ class WorkingCopyPoolModuleTest { lenient().when(pluginLoader.getUberClassLoader()).thenReturn(getClass().getClassLoader()); } - @AfterEach - void cleanProperty() { - System.clearProperty(WORKING_COPY_POOL_STRATEGY_PROPERTY); - } @Test void shouldBindToDefaultWithoutProperty() { - System.clearProperty(WORKING_COPY_POOL_STRATEGY_PROPERTY); WorkingCopyPoolModule module = new WorkingCopyPoolModule(pluginLoader); when(binder.bind(WorkingCopyPool.class)).thenReturn(bindingBuilder); @@ -77,7 +72,7 @@ class WorkingCopyPoolModuleTest { @Test void shouldBindToCustomPoolFromProperty() { - System.setProperty(WORKING_COPY_POOL_STRATEGY_PROPERTY, TestPool.class.getName()); + WebappConfigProvider.setConfigBindings(Map.of("workingCopyPoolStrategy", TestPool.class.getName())); WorkingCopyPoolModule module = new WorkingCopyPoolModule(pluginLoader); when(binder.bind(WorkingCopyPool.class)).thenReturn(bindingBuilder); diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/view/SingleViewServletTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/view/SingleViewServletTest.java index 6eac20ff6e..681c1f3b09 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/view/SingleViewServletTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/view/SingleViewServletTest.java @@ -24,6 +24,8 @@ package sonia.scm.lifecycle.view; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -32,13 +34,13 @@ import sonia.scm.template.Template; import sonia.scm.template.TemplateEngine; import sonia.scm.template.TemplateEngineFactory; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) class SingleViewServletTest { diff --git a/scm-webapp/src/test/java/sonia/scm/lifecycle/view/SingleViewTest.java b/scm-webapp/src/test/java/sonia/scm/lifecycle/view/SingleViewTest.java index 15702cbee9..8b179f7c30 100644 --- a/scm-webapp/src/test/java/sonia/scm/lifecycle/view/SingleViewTest.java +++ b/scm-webapp/src/test/java/sonia/scm/lifecycle/view/SingleViewTest.java @@ -27,6 +27,10 @@ package sonia.scm.lifecycle.view; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.servlet.GuiceFilter; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -36,15 +40,13 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.StaticResourceServlet; import sonia.scm.lifecycle.modules.ModuleProvider; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) class SingleViewTest { diff --git a/scm-webapp/src/test/java/sonia/scm/metrics/HttpMetricsFilterTest.java b/scm-webapp/src/test/java/sonia/scm/metrics/HttpMetricsFilterTest.java index 13eba69f3b..e9dfd7d6e8 100644 --- a/scm-webapp/src/test/java/sonia/scm/metrics/HttpMetricsFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/metrics/HttpMetricsFilterTest.java @@ -29,13 +29,13 @@ import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Timer; import io.micrometer.core.instrument.binder.http.Outcome; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-webapp/src/test/java/sonia/scm/metrics/RequestCategoryDetectorTest.java b/scm-webapp/src/test/java/sonia/scm/metrics/RequestCategoryDetectorTest.java index fbb4dcc6a6..68b7ad7d67 100644 --- a/scm-webapp/src/test/java/sonia/scm/metrics/RequestCategoryDetectorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/metrics/RequestCategoryDetectorTest.java @@ -24,6 +24,7 @@ package sonia.scm.metrics; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -33,8 +34,6 @@ import sonia.scm.util.HttpUtil; import sonia.scm.web.UserAgent; import sonia.scm.web.UserAgentParser; -import javax.servlet.http.HttpServletRequest; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/net/ahc/JsonContentTransformerTest.java b/scm-webapp/src/test/java/sonia/scm/net/ahc/JsonContentTransformerTest.java index 6503651500..119c8b35ad 100644 --- a/scm-webapp/src/test/java/sonia/scm/net/ahc/JsonContentTransformerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/net/ahc/JsonContentTransformerTest.java @@ -28,20 +28,18 @@ package sonia.scm.net.ahc; import com.google.common.base.Charsets; import com.google.common.io.ByteSource; - +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.Test; -import static org.junit.Assert.*; - -import static org.mockito.Mockito.*; - -//~--- JDK imports ------------------------------------------------------------ - import java.io.IOException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * diff --git a/scm-webapp/src/test/java/sonia/scm/net/ahc/XmlContentTransformerTest.java b/scm-webapp/src/test/java/sonia/scm/net/ahc/XmlContentTransformerTest.java index ef774a445f..a051857997 100644 --- a/scm-webapp/src/test/java/sonia/scm/net/ahc/XmlContentTransformerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/net/ahc/XmlContentTransformerTest.java @@ -25,13 +25,18 @@ package sonia.scm.net.ahc; import com.google.common.io.ByteSource; -import java.io.IOException; -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlRootElement; import org.junit.Test; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; + +import java.io.IOException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * @@ -83,4 +88,4 @@ public class XmlContentTransformerTest { } -} \ No newline at end of file +} diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/ConfigurationResolverTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/ConfigurationResolverTest.java new file mode 100644 index 0000000000..992811dc77 --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/plugin/ConfigurationResolverTest.java @@ -0,0 +1,80 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.plugin; + +import com.google.common.collect.ImmutableMap; +import org.junit.jupiter.api.Test; +import sonia.scm.config.WebappConfigProvider; + +import java.util.Collections; + +import static org.assertj.core.api.Assertions.assertThat; + +class ConfigurationResolverTest { + + @Test + void shouldResolveConfiguration_WithIntValue() { + ConfigurationResolver configurationResolver = new ConfigurationResolver(Collections.emptyMap(), "sonia/scm/plugin/config.yml"); + + String port = configurationResolver.resolve("https.port", "21"); + + assertThat(port).isEqualTo("42"); + } + + @Test + void shouldResolveConfiguration_WithStringValue() { + ConfigurationResolver configurationResolver = new ConfigurationResolver(Collections.emptyMap(), "sonia/scm/plugin/config.yml"); + + String port = configurationResolver.resolve("https.keyType", "jks"); + + assertThat(port).isEqualTo("PKCS12"); + } + + @Test + void shouldResolveConfiguration_WithEnv() { + ConfigurationResolver configurationResolver = new ConfigurationResolver(ImmutableMap.of("SCM_WEBAPP_CONTEXTPATH", "/scm"), "sonia/scm/plugin/config.yml"); + + String port = configurationResolver.resolve("contextPath", "/"); + + assertThat(port).isEqualTo("/scm"); + } + + @Test + void shouldResolveConfiguration_WithDefaultValue() { + ConfigurationResolver configurationResolver = new ConfigurationResolver(Collections.emptyMap(), "sonia/scm/plugin/config.yml"); + + String port = configurationResolver.resolve("contextPath", "/"); + + assertThat(port).isEqualTo("/"); + } + + @Test + void shouldSetWebappConfigProvider() { + new ConfigurationResolver(Collections.emptyMap(), "sonia/scm/plugin/config.yml"); + + assertThat(WebappConfigProvider.resolveAsBoolean("redirect")).contains(true); + assertThat(WebappConfigProvider.resolveAsInteger("https.port")).contains(42); + } +} diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/ConfigurationTypeConverterTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/ConfigurationTypeConverterTest.java new file mode 100644 index 0000000000..01a7346c85 --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/plugin/ConfigurationTypeConverterTest.java @@ -0,0 +1,88 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.plugin; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class ConfigurationTypeConverterTest { + + @Test + void shouldConvertInt() { + Object result = ConfigurationTypeConverter.convert("int", "42"); + + assertThat(result) + .isInstanceOf(Integer.class) + .isEqualTo(42); + } + + @Test + void shouldConvertInteger() { + Object result = ConfigurationTypeConverter.convert("java.lang.Integer", "42"); + + assertThat(result) + .isInstanceOf(Integer.class) + .isEqualTo(42); + } + + + @Test + void shouldConvertString() { + Object result = ConfigurationTypeConverter.convert("java.lang.String", "hello"); + + assertThat(result) + .isInstanceOf(String.class) + .isEqualTo("hello"); + } + + @Test + void shouldConvertBoolean() { + Object result = ConfigurationTypeConverter.convert("boolean", "true"); + + assertThat(result) + .isInstanceOf(Boolean.class) + .isEqualTo(true); + } + + @Test + void shouldConvertLong() { + Object result = ConfigurationTypeConverter.convert("long", "42"); + + assertThat(result) + .isInstanceOf(Long.class) + .isEqualTo(42L); + } + + @Test + void shouldConvertFloat() { + Object result = ConfigurationTypeConverter.convert("float", "42.0"); + + assertThat(result) + .isInstanceOf(Float.class) + .isEqualTo(42.0f); + } + +} diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java index 7cf404912e..c26859487e 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java @@ -27,6 +27,7 @@ package sonia.scm.plugin; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.collect.Lists; +import jakarta.servlet.ServletContext; import org.assertj.core.api.Assertions; import org.junit.BeforeClass; import org.junit.Test; @@ -35,7 +36,6 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.Stage; -import javax.servlet.ServletContext; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; @@ -45,7 +45,11 @@ import java.util.ArrayList; import java.util.List; import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java index c378fbdf38..bc474897fd 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginProcessorTest.java @@ -29,6 +29,7 @@ package sonia.scm.plugin; import com.google.common.base.Charsets; import com.google.common.collect.Iterables; import com.google.common.io.Resources; +import jakarta.xml.bind.JAXB; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -38,7 +39,6 @@ import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.lifecycle.classloading.ClassLoaderLifeCycle; -import javax.xml.bind.JAXB; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginTransformerTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginTransformerTest.java new file mode 100644 index 0000000000..9c61cc3714 --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginTransformerTest.java @@ -0,0 +1,95 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.plugin; + +import com.google.common.io.Resources; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.stream.Stream; + +import static java.nio.file.StandardCopyOption.REPLACE_EXISTING; +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; + +class PluginTransformerTest { + + private static final String PLUGIN = "sonia/scm/plugin/scm-jakarta-test-plugin"; + + @Test + void shouldTransformPlugin(@TempDir Path tempDirectoryPath) throws IOException { + Path testPluginPath = tempDirectoryPath.resolve("scm-jakarta-test-plugin"); + copyFolder(Path.of(Resources.getResource(PLUGIN).getPath()), testPluginPath); + + InstalledPlugin plugin = PluginTestHelper.createInstalled("scm-jakarta-test-plugin"); + ExplodedSmp explodedSmp = new ExplodedSmp(testPluginPath, plugin.getDescriptor()); + + PluginTransformer.transform(explodedSmp.getPath()); + + // Single javax import + Path transformedGeneratorClass = tempDirectoryPath.resolve("scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditEntryGenerator.class"); + assertThat(transformedGeneratorClass).exists(); + try (FileInputStream fileInputStream = new FileInputStream(transformedGeneratorClass.toFile())) { + String fileContent = new String(fileInputStream.readAllBytes()); + assertThat(fileContent).contains("jakarta"); + assertThat(fileContent).doesNotContain("javax"); + } + + // Multiple javax imports + Path transformedDatabaseClass = tempDirectoryPath.resolve("scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditLogDatabase.class"); + assertThat(transformedDatabaseClass).exists(); + try (FileInputStream fileInputStream = new FileInputStream(transformedDatabaseClass.toFile())) { + String fileContent = new String(fileInputStream.readAllBytes()); + assertThat(fileContent).contains("jakarta"); + assertThat(fileContent).doesNotContain("javax"); + } + + // No javax imports + Path transformedDtoClass = tempDirectoryPath.resolve("scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditLogDto.class"); + assertThat(transformedDtoClass).exists(); + try (FileInputStream fileInputStream = new FileInputStream(transformedDtoClass.toFile())) { + String fileContent = new String(fileInputStream.readAllBytes()); + assertThat(fileContent).doesNotContain("jakarta"); + assertThat(fileContent).doesNotContain("javax"); + } + } + + public void copyFolder(Path src, Path dest) throws IOException { + try (Stream stream = Files.walk(src)) { + stream.forEach(source -> copy(source, dest.resolve(src.relativize(source)))); + } + } + + private void copy(Path source, Path dest) { + try { + Files.copy(source, dest, REPLACE_EXISTING); + } catch (Exception e) { + throw new RuntimeException(e.getMessage(), e); + } + } +} diff --git a/scm-webapp/src/test/java/sonia/scm/schedule/CronTaskFactoryTest.java b/scm-webapp/src/test/java/sonia/scm/schedule/CronTaskFactoryTest.java index 80f6424b8c..852b9e156c 100644 --- a/scm-webapp/src/test/java/sonia/scm/schedule/CronTaskFactoryTest.java +++ b/scm-webapp/src/test/java/sonia/scm/schedule/CronTaskFactoryTest.java @@ -26,6 +26,7 @@ package sonia.scm.schedule; import com.google.inject.Injector; import com.google.inject.util.Providers; +import jakarta.inject.Provider; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -33,10 +34,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.inject.Provider; - import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/search/IndexBootstrapListenerTest.java b/scm-webapp/src/test/java/sonia/scm/search/IndexBootstrapListenerTest.java index a91d11a05f..bb7c0d814d 100644 --- a/scm-webapp/src/test/java/sonia/scm/search/IndexBootstrapListenerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/search/IndexBootstrapListenerTest.java @@ -24,6 +24,8 @@ package sonia.scm.search; +import jakarta.annotation.Nonnull; +import jakarta.annotation.Nullable; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Answers; @@ -33,13 +35,10 @@ import sonia.scm.group.Group; import sonia.scm.repository.Repository; import sonia.scm.user.User; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.Arrays; import java.util.HashSet; import java.util.Optional; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; diff --git a/scm-webapp/src/test/java/sonia/scm/search/LuceneInjectingIndexTaskTest.java b/scm-webapp/src/test/java/sonia/scm/search/LuceneInjectingIndexTaskTest.java index afe6c2753b..7e09cbbde4 100644 --- a/scm-webapp/src/test/java/sonia/scm/search/LuceneInjectingIndexTaskTest.java +++ b/scm-webapp/src/test/java/sonia/scm/search/LuceneInjectingIndexTaskTest.java @@ -27,6 +27,7 @@ package sonia.scm.search; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; +import jakarta.inject.Inject; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -35,8 +36,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.user.User; -import javax.inject.Inject; - import static org.assertj.core.api.Assertions.assertThat; @ExtendWith(MockitoExtension.class) diff --git a/scm-webapp/src/test/java/sonia/scm/search/TypeConvertersTest.java b/scm-webapp/src/test/java/sonia/scm/search/TypeConvertersTest.java index 98a9c9e8c7..627df72ab7 100644 --- a/scm-webapp/src/test/java/sonia/scm/search/TypeConvertersTest.java +++ b/scm-webapp/src/test/java/sonia/scm/search/TypeConvertersTest.java @@ -24,6 +24,7 @@ package sonia.scm.search; +import jakarta.annotation.Nonnull; import lombok.AllArgsConstructor; import lombok.Getter; import org.apache.lucene.document.Document; @@ -31,11 +32,8 @@ import org.apache.lucene.document.StoredField; import org.apache.lucene.document.StringField; import org.apache.lucene.document.TextField; import org.apache.lucene.index.IndexableField; -import org.apache.lucene.index.IndexableFieldType; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.annotation.Nonnull; import java.time.Instant; import java.util.function.Consumer; diff --git a/scm-webapp/src/test/java/sonia/scm/security/AnonymousRealmTest.java b/scm-webapp/src/test/java/sonia/scm/security/AnonymousRealmTest.java index 310316eaaf..44a67804ec 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/AnonymousRealmTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/AnonymousRealmTest.java @@ -24,6 +24,7 @@ package sonia.scm.security; +import jakarta.ws.rs.NotAuthorizedException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.junit.jupiter.api.BeforeEach; @@ -34,8 +35,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.SCMContext; import sonia.scm.user.UserDAO; -import javax.ws.rs.NotAuthorizedException; - import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/security/DefaultAccessTokenCookieIssuerTest.java b/scm-webapp/src/test/java/sonia/scm/security/DefaultAccessTokenCookieIssuerTest.java index 1a759ad75c..0dc2fbc96c 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/DefaultAccessTokenCookieIssuerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/DefaultAccessTokenCookieIssuerTest.java @@ -24,6 +24,9 @@ package sonia.scm.security; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -33,13 +36,9 @@ import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.config.ScmConfiguration; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import java.util.Date; - -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/security/DefaultAuthorizationCollectorTest.java b/scm-webapp/src/test/java/sonia/scm/security/DefaultAuthorizationCollectorTest.java index 9ea4dc8dae..1969917b97 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/DefaultAuthorizationCollectorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/DefaultAuthorizationCollectorTest.java @@ -58,13 +58,12 @@ import static com.google.common.collect.Lists.newArrayList; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static java.util.Optional.of; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.nullValue; import static org.junit.Assert.assertSame; -import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.any; -import static org.mockito.Mockito.anyObject; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -134,7 +133,7 @@ public class DefaultAuthorizationCollectorTest { ) public void testCollectFromCache() { AuthorizationInfo info = new SimpleAuthorizationInfo(); - when(cache.get(anyObject())).thenReturn(info); + when(cache.get(any())).thenReturn(info); authenticate(UserTestData.createTrillian(), "main"); AuthorizationInfo authInfo = collector.collect(); diff --git a/scm-webapp/src/test/java/sonia/scm/security/DefaultSecuritySystemTest.java b/scm-webapp/src/test/java/sonia/scm/security/DefaultSecuritySystemTest.java index 75ce666877..a083827712 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/DefaultSecuritySystemTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/DefaultSecuritySystemTest.java @@ -36,6 +36,7 @@ import sonia.scm.AbstractTestBase; import sonia.scm.auditlog.Auditor; import sonia.scm.plugin.PluginLoader; import sonia.scm.store.JAXBConfigurationEntryStoreFactory; +import sonia.scm.store.StoreCacheConfigProvider; import sonia.scm.util.ClassLoaders; import sonia.scm.util.MockUtil; @@ -70,7 +71,7 @@ public class DefaultSecuritySystemTest extends AbstractTestBase public void createSecuritySystem() { jaxbConfigurationEntryStoreFactory = - spy(new JAXBConfigurationEntryStoreFactory(contextProvider , repositoryLocationResolver, new UUIDKeyGenerator(), null) {}); + spy(new JAXBConfigurationEntryStoreFactory(contextProvider , repositoryLocationResolver, new UUIDKeyGenerator(), null, new StoreCacheConfigProvider(false)) {}); pluginLoader = mock(PluginLoader.class); when(pluginLoader.getUberClassLoader()).thenReturn(ClassLoaders.getContextClassLoader(DefaultSecuritySystem.class)); diff --git a/scm-webapp/src/test/java/sonia/scm/security/ImpersonatorTest.java b/scm-webapp/src/test/java/sonia/scm/security/ImpersonatorTest.java index 24b07c2485..28988894ff 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/ImpersonatorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/ImpersonatorTest.java @@ -25,6 +25,7 @@ package sonia.scm.security; +import jakarta.annotation.Nonnull; import org.apache.shiro.SecurityUtils; import org.apache.shiro.UnavailableSecurityManagerException; import org.apache.shiro.mgt.DefaultSecurityManager; @@ -38,8 +39,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import sonia.scm.security.Impersonator.Session; -import javax.annotation.Nonnull; - import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; diff --git a/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java b/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java index a911ef3a3d..5a109988ba 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java @@ -49,7 +49,9 @@ import java.util.concurrent.TimeUnit; import static java.util.Collections.singleton; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertThrows; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.anyString; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.when; import static sonia.scm.security.SecureKeyTestUtil.createSecureKey; /** @@ -66,6 +68,9 @@ class JwtAccessTokenBuilderTest { @Mock private SecureKeyResolver secureKeyResolver; + @Mock + private JwtConfig jwtConfig; + private Set enrichers; private JwtAccessTokenBuilderFactory factory; @@ -92,12 +97,7 @@ class JwtAccessTokenBuilderTest { lenient().when(keyGenerator.createKey()).thenReturn("42"); lenient().when(secureKeyResolver.getSecureKey(anyString())).thenReturn(createSecureKey()); enrichers = Sets.newHashSet(); - factory = new JwtAccessTokenBuilderFactory(keyGenerator, secureKeyResolver, enrichers); - } - - @BeforeEach - void clearSystemProperties() { - System.clearProperty(JwtSystemProperties.ENDLESS_JWT); + factory = new JwtAccessTokenBuilderFactory(keyGenerator, secureKeyResolver, enrichers, jwtConfig); } @Nested @@ -108,7 +108,7 @@ class JwtAccessTokenBuilderTest { */ @BeforeEach void setUpObjectUnderTest() { - factory = new JwtAccessTokenBuilderFactory(keyGenerator, secureKeyResolver, enrichers); + factory = new JwtAccessTokenBuilderFactory(keyGenerator, secureKeyResolver, enrichers, jwtConfig); } /** @@ -158,7 +158,7 @@ class JwtAccessTokenBuilderTest { @BeforeEach void setUpObjectUnderTest() { - factory = new JwtAccessTokenBuilderFactory(keyGenerator, secureKeyResolver, enrichers, clock); + factory = new JwtAccessTokenBuilderFactory(keyGenerator, secureKeyResolver, jwtConfig, enrichers, clock); } @Test @@ -275,7 +275,7 @@ class JwtAccessTokenBuilderTest { @Test void testBuildWithEndlessJwtEnabled() { - System.setProperty(JwtSystemProperties.ENDLESS_JWT, "true"); + when(jwtConfig.isEndlessJwtEnabled()).thenReturn(true); JwtAccessToken token = factory.create().subject("Red").issuer("https://scm-manager.org").build(); @@ -284,12 +284,12 @@ class JwtAccessTokenBuilderTest { assertThat(token.getExpiration()).isNull(); assertThat(token.getSubject()).isEqualTo("Red"); assertThat(token.getIssuer()).isNotEmpty(); - assertThat(token.getIssuer().get()).isEqualTo("https://scm-manager.org"); + assertThat(token.getIssuer()).contains("https://scm-manager.org"); } @Test void testBuildWithEndlessJwtDisabled() { - System.setProperty(JwtSystemProperties.ENDLESS_JWT, "false"); + when(jwtConfig.isEndlessJwtEnabled()).thenReturn(false); JwtAccessToken token = factory.create().subject("Red").issuer("https://scm-manager.org").build(); @@ -299,37 +299,7 @@ class JwtAccessTokenBuilderTest { assertThat(token.getExpiration().getTime() > token.getIssuedAt().getTime()).isTrue(); assertThat(token.getSubject()).isEqualTo("Red"); assertThat(token.getIssuer()).isNotEmpty(); - assertThat(token.getIssuer().get()).isEqualTo("https://scm-manager.org"); - } - - @Test - void testBuildWithInvalidConfig() { - System.setProperty(JwtSystemProperties.ENDLESS_JWT, "invalidStuff"); - - JwtAccessToken token = factory.create().subject("Red").issuer("https://scm-manager.org").build(); - - assertThat(token.getId()).isNotEmpty(); - assertThat(token.getIssuedAt()).isNotNull(); - assertThat(token.getExpiration()).isNotNull(); - assertThat(token.getExpiration().getTime() > token.getIssuedAt().getTime()).isTrue(); - assertThat(token.getSubject()).isEqualTo("Red"); - assertThat(token.getIssuer()).isNotEmpty(); - assertThat(token.getIssuer().get()).isEqualTo("https://scm-manager.org"); - } - - @Test - void testBuildWithMissingConfig() { - System.clearProperty(JwtSystemProperties.ENDLESS_JWT); - - JwtAccessToken token = factory.create().subject("Red").issuer("https://scm-manager.org").build(); - - assertThat(token.getId()).isNotEmpty(); - assertThat(token.getIssuedAt()).isNotNull(); - assertThat(token.getExpiration()).isNotNull(); - assertThat(token.getExpiration().getTime() > token.getIssuedAt().getTime()).isTrue(); - assertThat(token.getSubject()).isEqualTo("Red"); - assertThat(token.getIssuer()).isNotEmpty(); - assertThat(token.getIssuer().get()).isEqualTo("https://scm-manager.org"); + assertThat(token.getIssuer()).contains("https://scm-manager.org"); } } } diff --git a/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenRefresherTest.java b/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenRefresherTest.java index 9ba7739343..da3fa7c9de 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenRefresherTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenRefresherTest.java @@ -60,6 +60,8 @@ class JwtAccessTokenRefresherTest { @Mock private SecureKeyResolver keyResolver; @Mock + private JwtConfig jwtConfig; + @Mock private JwtAccessTokenRefreshStrategy refreshStrategy; @Mock private Clock refreshClock; @@ -77,9 +79,9 @@ class JwtAccessTokenRefresherTest { Clock creationClock = mock(Clock.class); when(creationClock.instant()).thenReturn(TOKEN_CREATION); - tokenBuilder = new JwtAccessTokenBuilderFactory(keyGenerator, keyResolver, Collections.emptySet(), creationClock).create(); + tokenBuilder = new JwtAccessTokenBuilderFactory(keyGenerator, keyResolver, jwtConfig, Collections.emptySet(), creationClock).create(); - JwtAccessTokenBuilderFactory refreshBuilderFactory = new JwtAccessTokenBuilderFactory(keyGenerator, keyResolver, Collections.emptySet(), refreshClock); + JwtAccessTokenBuilderFactory refreshBuilderFactory = new JwtAccessTokenBuilderFactory(keyGenerator, keyResolver, jwtConfig, Collections.emptySet(), refreshClock); refresher = new JwtAccessTokenRefresher(refreshBuilderFactory, refreshStrategy, refreshClock); when(refreshClock.instant()).thenReturn(NOW); lenient().when(refreshStrategy.shouldBeRefreshed(any())).thenReturn(true); diff --git a/scm-webapp/src/test/java/sonia/scm/security/PercentageJwtAccessTokenRefreshStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/security/PercentageJwtAccessTokenRefreshStrategyTest.java index a2421566c7..2c8a3cb7f3 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/PercentageJwtAccessTokenRefreshStrategyTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/PercentageJwtAccessTokenRefreshStrategyTest.java @@ -56,6 +56,7 @@ public class PercentageJwtAccessTokenRefreshStrategyTest { public ShiroRule shiro = new ShiroRule(); private KeyGenerator keyGenerator = () -> "key"; + private JwtConfig jwtConfig = mock(JwtConfig.class); private Clock refreshClock = mock(Clock.class); @@ -70,7 +71,7 @@ public class PercentageJwtAccessTokenRefreshStrategyTest { Clock creationClock = mock(Clock.class); when(creationClock.instant()).thenReturn(TOKEN_CREATION); - tokenBuilder = new JwtAccessTokenBuilderFactory(keyGenerator, keyResolver, Collections.emptySet(), creationClock).create(); + tokenBuilder = new JwtAccessTokenBuilderFactory(keyGenerator, keyResolver, jwtConfig, Collections.emptySet(), creationClock).create(); tokenBuilder.expiresIn(1, HOURS); tokenBuilder.refreshableFor(1, HOURS); diff --git a/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestFilterTest.java b/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestFilterTest.java index b2189c2a53..019a526be4 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestFilterTest.java @@ -35,8 +35,8 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ResourceInfo; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ResourceInfo; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestsTest.java b/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestsTest.java index 517d22f2ab..fb4869ff05 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestsTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/SecurityRequestsTest.java @@ -24,13 +24,12 @@ package sonia.scm.security; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.servlet.http.HttpServletRequest; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/security/TokenExpiredFilterTest.java b/scm-webapp/src/test/java/sonia/scm/security/TokenExpiredFilterTest.java index 197ef1c3ab..87ae465f44 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/TokenExpiredFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/TokenExpiredFilterTest.java @@ -25,6 +25,11 @@ package sonia.scm.security; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -32,11 +37,6 @@ import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.api.v2.resources.ErrorDto; import sonia.scm.web.VndMediaType; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletOutputStream; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import static org.junit.Assert.assertEquals; diff --git a/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenEnricherTest.java b/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenEnricherTest.java index 15685c643e..f6291faef1 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenEnricherTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenEnricherTest.java @@ -26,6 +26,8 @@ package sonia.scm.security; import com.google.inject.OutOfScopeException; import com.google.inject.ProvisionException; +import jakarta.inject.Provider; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -35,11 +37,11 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.config.ScmConfiguration; import sonia.scm.util.HttpUtil; -import javax.inject.Provider; -import javax.servlet.http.HttpServletRequest; - import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; /** * Unit tests for {@link XsrfAccessTokenEnricher}. diff --git a/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenValidatorTest.java b/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenValidatorTest.java index dfecf8a18c..cd5eeb59ec 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenValidatorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/XsrfAccessTokenValidatorTest.java @@ -25,6 +25,7 @@ package sonia.scm.security; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -34,7 +35,6 @@ import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.servlet.http.HttpServletRequest; import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-webapp/src/test/java/sonia/scm/security/gpg/PublicKeyResourceTest.java b/scm-webapp/src/test/java/sonia/scm/security/gpg/PublicKeyResourceTest.java index 0fb51de383..19f338b8bb 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/gpg/PublicKeyResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/gpg/PublicKeyResourceTest.java @@ -24,13 +24,13 @@ package sonia.scm.security.gpg; +import jakarta.ws.rs.core.Response; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.ws.rs.core.Response; import java.io.IOException; import java.util.Optional; diff --git a/scm-webapp/src/test/java/sonia/scm/security/gpg/UserPublicKeyResourceTest.java b/scm-webapp/src/test/java/sonia/scm/security/gpg/UserPublicKeyResourceTest.java index 14621357c3..8cd1470b68 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/gpg/UserPublicKeyResourceTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/gpg/UserPublicKeyResourceTest.java @@ -25,6 +25,9 @@ package sonia.scm.security.gpg; import de.otto.edison.hal.HalRepresentation; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriBuilder; +import jakarta.ws.rs.core.UriInfo; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; import org.junit.jupiter.api.AfterEach; @@ -35,9 +38,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.UriInfo; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; diff --git a/scm-webapp/src/test/java/sonia/scm/template/MustacheTemplateEngineTest.java b/scm-webapp/src/test/java/sonia/scm/template/MustacheTemplateEngineTest.java index fd3f5638a4..5c5f0efe83 100644 --- a/scm-webapp/src/test/java/sonia/scm/template/MustacheTemplateEngineTest.java +++ b/scm-webapp/src/test/java/sonia/scm/template/MustacheTemplateEngineTest.java @@ -28,11 +28,11 @@ package sonia.scm.template; import com.google.common.collect.ImmutableMap; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import jakarta.servlet.ServletContext; import org.assertj.core.api.Assertions; import org.junit.Test; import sonia.scm.plugin.PluginLoader; -import javax.servlet.ServletContext; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; diff --git a/scm-webapp/src/test/java/sonia/scm/template/MustacheTemplateTestEngine.java b/scm-webapp/src/test/java/sonia/scm/template/MustacheTemplateTestEngine.java index 36f4bf9992..c99fad740e 100644 --- a/scm-webapp/src/test/java/sonia/scm/template/MustacheTemplateTestEngine.java +++ b/scm-webapp/src/test/java/sonia/scm/template/MustacheTemplateTestEngine.java @@ -25,10 +25,9 @@ package sonia.scm.template; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import jakarta.servlet.ServletContext; import sonia.scm.plugin.PluginLoader; -import javax.servlet.ServletContext; - import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/template/TemplateEngineTestBase.java b/scm-webapp/src/test/java/sonia/scm/template/TemplateEngineTestBase.java index d07a35b206..163962aa1e 100644 --- a/scm-webapp/src/test/java/sonia/scm/template/TemplateEngineTestBase.java +++ b/scm-webapp/src/test/java/sonia/scm/template/TemplateEngineTestBase.java @@ -27,28 +27,24 @@ package sonia.scm.template; //~--- non-JDK imports -------------------------------------------------------- import com.google.common.collect.Maps; - +import jakarta.servlet.ServletContext; import org.assertj.core.api.Assertions; import org.junit.Test; - -import static org.junit.Assert.*; - -import static org.mockito.Mockito.*; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.util.IOUtil; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.StringWriter; - import java.net.URL; - import java.util.Locale; import java.util.Map; -import javax.servlet.ServletContext; -import sonia.scm.util.IOUtil; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; /** * diff --git a/scm-webapp/src/test/java/sonia/scm/update/MigrationWizardServletTest.java b/scm-webapp/src/test/java/sonia/scm/update/MigrationWizardServletTest.java index d579e8beb7..08c8b79964 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/MigrationWizardServletTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/MigrationWizardServletTest.java @@ -25,6 +25,8 @@ package sonia.scm.update; import com.google.common.base.Stopwatch; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -36,8 +38,6 @@ import sonia.scm.update.repository.MigrationStrategy; import sonia.scm.update.repository.V1Repository; import sonia.scm.update.repository.XmlRepositoryV1UpdateStep; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.time.Duration; import java.util.Collections; import java.util.Map; diff --git a/scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java index 1577ad0dab..60ff571609 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java @@ -24,6 +24,7 @@ package sonia.scm.update.group; +import jakarta.xml.bind.JAXBException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -40,7 +41,6 @@ import sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory; import sonia.scm.update.UpdateStepTestUtil; import sonia.scm.update.V1Properties; -import javax.xml.bind.JAXBException; import java.io.IOException; import java.nio.file.Path; import java.util.Optional; diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/AnonymousModeUpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/AnonymousModeUpdateStepTest.java index 08621a7136..fea510b0fe 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/repository/AnonymousModeUpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/AnonymousModeUpdateStepTest.java @@ -25,6 +25,7 @@ package sonia.scm.update.repository; import com.google.common.io.Resources; +import jakarta.xml.bind.JAXBException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -37,12 +38,10 @@ import sonia.scm.security.AnonymousMode; import sonia.scm.store.ConfigurationStore; import sonia.scm.store.InMemoryConfigurationStoreFactory; -import javax.xml.bind.JAXBException; import java.io.IOException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/DefaultMigrationStrategyDAOTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/DefaultMigrationStrategyDAOTest.java index e0f40790bb..156a7f1eb3 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/repository/DefaultMigrationStrategyDAOTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/DefaultMigrationStrategyDAOTest.java @@ -35,6 +35,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.SCMContextProvider; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.store.JAXBConfigurationStoreFactory; +import sonia.scm.store.StoreCacheConfigProvider; import java.nio.file.Path; import java.util.Optional; @@ -54,7 +55,7 @@ class DefaultMigrationStrategyDAOTest { @BeforeEach void initStore(@TempDir Path tempDir) { when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); - storeFactory = new JAXBConfigurationStoreFactory(contextProvider, null, null, emptySet()); + storeFactory = new JAXBConfigurationStoreFactory(contextProvider, null, null, emptySet(), new StoreCacheConfigProvider(false)); } @Test diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/PublicFlagUpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/PublicFlagUpdateStepTest.java index 23eda6d38e..b4024fe7a7 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/repository/PublicFlagUpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/PublicFlagUpdateStepTest.java @@ -24,6 +24,7 @@ package sonia.scm.update.repository; +import jakarta.xml.bind.JAXBException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -42,7 +43,6 @@ import sonia.scm.update.UpdateStepTestUtil; import sonia.scm.user.User; import sonia.scm.user.xml.XmlUserDAO; -import javax.xml.bind.JAXBException; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java index 9a6fd8561c..b99928ee70 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java @@ -26,6 +26,7 @@ package sonia.scm.update.repository; import com.google.common.io.Resources; import com.google.inject.Injector; +import jakarta.xml.bind.JAXBException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -44,7 +45,6 @@ import sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory; import sonia.scm.update.UpdateStepTestUtil; import sonia.scm.update.V1Properties; -import javax.xml.bind.JAXBException; import java.io.IOException; import java.net.URL; import java.nio.file.Files; diff --git a/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java index 28c3f687b1..656512282b 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java @@ -25,6 +25,7 @@ package sonia.scm.update.security; import com.google.common.io.Resources; +import jakarta.xml.bind.JAXBException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -37,7 +38,6 @@ import sonia.scm.security.AssignedPermission; import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.InMemoryByteConfigurationEntryStoreFactory; -import javax.xml.bind.JAXBException; import java.io.IOException; import java.net.URL; import java.nio.file.Files; diff --git a/scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java index c42e677675..7d30212a1b 100644 --- a/scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java @@ -24,6 +24,7 @@ package sonia.scm.update.user; +import jakarta.xml.bind.JAXBException; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -41,7 +42,6 @@ import sonia.scm.update.V1Properties; import sonia.scm.user.User; import sonia.scm.user.xml.XmlUserDAO; -import javax.xml.bind.JAXBException; import java.io.IOException; import java.nio.file.Path; import java.util.Optional; diff --git a/scm-webapp/src/test/java/sonia/scm/user/DefaultUserManagerTest.java b/scm-webapp/src/test/java/sonia/scm/user/DefaultUserManagerTest.java index 202c1e8c6f..10581b8bbf 100644 --- a/scm-webapp/src/test/java/sonia/scm/user/DefaultUserManagerTest.java +++ b/scm-webapp/src/test/java/sonia/scm/user/DefaultUserManagerTest.java @@ -34,10 +34,9 @@ import org.junit.Test; import org.mockito.ArgumentCaptor; import sonia.scm.NotFoundException; import sonia.scm.store.JAXBConfigurationStoreFactory; +import sonia.scm.store.StoreCacheConfigProvider; import sonia.scm.user.xml.XmlUserDAO; -import java.util.Collections; - import static java.util.Collections.emptySet; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -164,6 +163,6 @@ public class DefaultUserManagerTest extends UserManagerTestBase { } private XmlUserDAO createXmlUserDAO() { - return new XmlUserDAO(new JAXBConfigurationStoreFactory(contextProvider, locationResolver, null, emptySet())); + return new XmlUserDAO(new JAXBConfigurationStoreFactory(contextProvider, locationResolver, null, emptySet(), new StoreCacheConfigProvider(false))); } } diff --git a/scm-webapp/src/test/java/sonia/scm/validation/DefaultValidatorProviderTest.java b/scm-webapp/src/test/java/sonia/scm/validation/DefaultValidatorProviderTest.java index 2feabbe69c..b03070ff47 100644 --- a/scm-webapp/src/test/java/sonia/scm/validation/DefaultValidatorProviderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/validation/DefaultValidatorProviderTest.java @@ -24,13 +24,12 @@ package sonia.scm.validation; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorFactory; +import jakarta.validation.Validator; +import jakarta.validation.constraints.Size; import org.junit.jupiter.api.Test; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorFactory; -import javax.validation.Validator; -import javax.validation.constraints.Size; - import static org.assertj.core.api.Assertions.assertThat; class DefaultValidatorProviderTest { diff --git a/scm-webapp/src/test/java/sonia/scm/validation/RepositoryType.java b/scm-webapp/src/test/java/sonia/scm/validation/RepositoryType.java index af0eb4f55a..8144d7a9f9 100644 --- a/scm-webapp/src/test/java/sonia/scm/validation/RepositoryType.java +++ b/scm-webapp/src/test/java/sonia/scm/validation/RepositoryType.java @@ -24,8 +24,9 @@ package sonia.scm.validation; -import javax.validation.Constraint; -import javax.validation.Payload; +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/scm-webapp/src/test/java/sonia/scm/validation/RepositoryTypeConstraintValidator.java b/scm-webapp/src/test/java/sonia/scm/validation/RepositoryTypeConstraintValidator.java index 237bf93b05..e46f285c99 100644 --- a/scm-webapp/src/test/java/sonia/scm/validation/RepositoryTypeConstraintValidator.java +++ b/scm-webapp/src/test/java/sonia/scm/validation/RepositoryTypeConstraintValidator.java @@ -24,12 +24,11 @@ package sonia.scm.validation; +import jakarta.inject.Inject; +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; -import javax.validation.ConstraintValidator; -import javax.validation.ConstraintValidatorContext; - public class RepositoryTypeConstraintValidator implements ConstraintValidator { private final RepositoryManager repositoryManager; diff --git a/scm-webapp/src/test/java/sonia/scm/validation/ValidationModuleTest.java b/scm-webapp/src/test/java/sonia/scm/validation/ValidationModuleTest.java index 5104229a3f..4071375779 100644 --- a/scm-webapp/src/test/java/sonia/scm/validation/ValidationModuleTest.java +++ b/scm-webapp/src/test/java/sonia/scm/validation/ValidationModuleTest.java @@ -27,6 +27,10 @@ package sonia.scm.validation; import com.google.common.collect.ImmutableList; import com.google.inject.Guice; import com.google.inject.Injector; +import jakarta.inject.Inject; +import jakarta.validation.ConstraintValidatorFactory; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validator; import lombok.AllArgsConstructor; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -36,10 +40,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.repository.RepositoryManager; -import javax.inject.Inject; -import javax.validation.ConstraintValidatorFactory; -import javax.validation.ConstraintViolation; -import javax.validation.Validator; import java.util.Collections; import java.util.Set; diff --git a/scm-webapp/src/test/java/sonia/scm/web/BasicWebTokenGeneratorTest.java b/scm-webapp/src/test/java/sonia/scm/web/BasicWebTokenGeneratorTest.java index 061cd8f8dd..7d393d848d 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/BasicWebTokenGeneratorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/BasicWebTokenGeneratorTest.java @@ -26,6 +26,7 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.HttpServletRequest; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.codec.Base64; @@ -36,8 +37,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.security.BearerToken; -import javax.servlet.http.HttpServletRequest; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/web/BearerWebTokenGeneratorTest.java b/scm-webapp/src/test/java/sonia/scm/web/BearerWebTokenGeneratorTest.java index b8e6abb232..822316a129 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/BearerWebTokenGeneratorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/BearerWebTokenGeneratorTest.java @@ -24,6 +24,7 @@ package sonia.scm.web; +import jakarta.servlet.http.HttpServletRequest; import org.apache.shiro.authc.AuthenticationToken; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -32,8 +33,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.security.BearerToken; import sonia.scm.security.SessionId; -import javax.servlet.http.HttpServletRequest; - import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/web/CookieBearerWebTokenGeneratorTest.java b/scm-webapp/src/test/java/sonia/scm/web/CookieBearerWebTokenGeneratorTest.java index ff73ee81a1..8204fded99 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/CookieBearerWebTokenGeneratorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/CookieBearerWebTokenGeneratorTest.java @@ -26,6 +26,8 @@ package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -34,11 +36,10 @@ import sonia.scm.security.BearerToken; import sonia.scm.security.SessionId; import sonia.scm.util.HttpUtil; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; - import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; //~--- JDK imports ------------------------------------------------------------ diff --git a/scm-webapp/src/test/java/sonia/scm/web/cgi/DefaultCGIExecutorTest.java b/scm-webapp/src/test/java/sonia/scm/web/cgi/DefaultCGIExecutorTest.java index 5b074d28a6..d4e502fa46 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/cgi/DefaultCGIExecutorTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/cgi/DefaultCGIExecutorTest.java @@ -24,14 +24,13 @@ package sonia.scm.web.cgi; +import jakarta.servlet.http.HttpServletRequest; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import javax.servlet.http.HttpServletRequest; - -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; /** diff --git a/scm-webapp/src/test/java/sonia/scm/web/i18n/I18nServletTest.java b/scm-webapp/src/test/java/sonia/scm/web/i18n/I18nServletTest.java index a01c4913e7..07e1760fc5 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/i18n/I18nServletTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/i18n/I18nServletTest.java @@ -26,6 +26,8 @@ package sonia.scm.web.i18n; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.CharMatcher; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -33,8 +35,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.i18n.I18nCollector; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintWriter; @@ -43,9 +43,6 @@ import java.nio.charset.StandardCharsets; import static java.util.Optional.empty; import static java.util.Optional.of; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.fail; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/web/protocol/HttpProtocolServletTest.java b/scm-webapp/src/test/java/sonia/scm/web/protocol/HttpProtocolServletTest.java index b437475ff5..18042f0544 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/protocol/HttpProtocolServletTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/protocol/HttpProtocolServletTest.java @@ -24,6 +24,9 @@ package sonia.scm.web.protocol; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; @@ -50,16 +53,11 @@ import sonia.scm.web.ScmClientDetector; import sonia.scm.web.UserAgent; import sonia.scm.web.UserAgentParser; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Optional; -import java.util.Set; import static java.util.Collections.emptySet; import static java.util.Collections.singleton; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; diff --git a/scm-webapp/src/test/java/sonia/scm/web/security/TokenRefreshFilterTest.java b/scm-webapp/src/test/java/sonia/scm/web/security/TokenRefreshFilterTest.java index 713982ba72..c880dcade5 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/security/TokenRefreshFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/security/TokenRefreshFilterTest.java @@ -27,6 +27,10 @@ package sonia.scm.web.security; import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; +import jakarta.servlet.FilterChain; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import org.apache.shiro.authc.AuthenticationToken; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -40,10 +44,6 @@ import sonia.scm.security.JwtAccessToken; import sonia.scm.security.JwtAccessTokenRefresher; import sonia.scm.web.WebTokenGenerator; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Date; import java.util.Set; diff --git a/scm-webapp/src/test/java/sonia/scm/work/DefaultCentralWorkQueueTest.java b/scm-webapp/src/test/java/sonia/scm/work/DefaultCentralWorkQueueTest.java index 558f649472..268bd2f93f 100644 --- a/scm-webapp/src/test/java/sonia/scm/work/DefaultCentralWorkQueueTest.java +++ b/scm-webapp/src/test/java/sonia/scm/work/DefaultCentralWorkQueueTest.java @@ -31,8 +31,9 @@ import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Timer; import io.micrometer.core.instrument.simple.SimpleMeterRegistry; -import org.apache.shiro.mgt.SecurityManager; +import jakarta.annotation.Nonnull; import org.apache.shiro.SecurityUtils; +import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.SimplePrincipalCollection; import org.github.sdorra.jse.ShiroExtension; @@ -47,7 +48,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.repository.Repository; import sonia.scm.security.Authentications; -import javax.annotation.Nonnull; import java.util.Arrays; import java.util.Collections; import java.util.concurrent.TimeUnit; @@ -79,7 +79,7 @@ class DefaultCentralWorkQueueTest { @BeforeEach void setUp() { meterRegistry = new SimpleMeterRegistry(); - queue = new DefaultCentralWorkQueue(Guice.createInjector(new SecurityModule()), persistence, meterRegistry); + queue = new DefaultCentralWorkQueue(4, Guice.createInjector(new SecurityModule()), persistence, meterRegistry); } private final AtomicInteger runs = new AtomicInteger(); @@ -302,7 +302,7 @@ class DefaultCentralWorkQueueTest { two.restore(42L); when(persistence.loadAll()).thenReturn(Arrays.asList(one, two)); - new DefaultCentralWorkQueue(Guice.createInjector(new SecurityModule()), persistence, new SimpleMeterRegistry()); + new DefaultCentralWorkQueue(4, Guice.createInjector(new SecurityModule()), persistence, new SimpleMeterRegistry()); await().atMost(TIMEOUT, TimeUnit.SECONDS).until(() -> context.value != null); assertThat(context.value).isEqualTo("two"); @@ -315,7 +315,7 @@ class DefaultCentralWorkQueueTest { @Test void shouldRunAsUser() { DefaultCentralWorkQueue workQueue = new DefaultCentralWorkQueue( - Guice.createInjector(new SecurityModule()), persistence, new SimpleMeterRegistry() + 4, Guice.createInjector(new SecurityModule()), persistence, new SimpleMeterRegistry() ); AtomicReference ref = new AtomicReference<>(); @@ -326,7 +326,7 @@ class DefaultCentralWorkQueueTest { @Test void shouldRunAsAdminUser() { DefaultCentralWorkQueue workQueue = new DefaultCentralWorkQueue( - Guice.createInjector(new SecurityModule()), persistence, new SimpleMeterRegistry() + 4, Guice.createInjector(new SecurityModule()), persistence, new SimpleMeterRegistry() ); AtomicReference ref = new AtomicReference<>(); diff --git a/scm-webapp/src/test/java/sonia/scm/work/SimpleUnitOfWorkTest.java b/scm-webapp/src/test/java/sonia/scm/work/SimpleUnitOfWorkTest.java index 5a936768eb..9598daa0ea 100644 --- a/scm-webapp/src/test/java/sonia/scm/work/SimpleUnitOfWorkTest.java +++ b/scm-webapp/src/test/java/sonia/scm/work/SimpleUnitOfWorkTest.java @@ -27,12 +27,12 @@ package sonia.scm.work; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; +import jakarta.inject.Inject; import lombok.Value; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.subject.SimplePrincipalCollection; import org.junit.jupiter.api.Test; -import javax.inject.Inject; import java.util.Collections; import static org.assertj.core.api.Assertions.assertThat; diff --git a/scm-webapp/src/test/java/sonia/scm/work/ThreadCountProviderTest.java b/scm-webapp/src/test/java/sonia/scm/work/ThreadCountProviderTest.java index 6d9d6b0d7f..14f171a1b1 100644 --- a/scm-webapp/src/test/java/sonia/scm/work/ThreadCountProviderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/work/ThreadCountProviderTest.java @@ -24,7 +24,6 @@ package sonia.scm.work; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -39,7 +38,7 @@ class ThreadCountProviderTest { @Test void shouldUseTwoWorkersForOneCPU() { - ThreadCountProvider provider = new ThreadCountProvider(() -> 1); + ThreadCountProvider provider = new ThreadCountProvider(() -> 1, 2); assertThat(provider.getAsInt()).isEqualTo(2); } @@ -47,31 +46,24 @@ class ThreadCountProviderTest { @ParameterizedTest(name = "shouldUseFourWorkersFor{argumentsWithNames}CPU") @ValueSource(ints = {2, 4, 8, 16}) void shouldUseFourWorkersForMoreThanOneCPU(int cpus) { - ThreadCountProvider provider = new ThreadCountProvider(() -> cpus); + ThreadCountProvider provider = new ThreadCountProvider(() -> cpus, 4); assertThat(provider.getAsInt()).isEqualTo(4); } @Nested - class SystemPropertyTests { - - @BeforeEach - void setUp() { - System.clearProperty(ThreadCountProvider.PROPERTY); - } + class ConfigValueTests { @Test void shouldUseCountFromSystemProperty() { - ThreadCountProvider provider = new ThreadCountProvider(); - System.setProperty(ThreadCountProvider.PROPERTY, "6"); + ThreadCountProvider provider = new ThreadCountProvider(6); assertThat(provider.getAsInt()).isEqualTo(6); } @ParameterizedTest @ValueSource(strings = {"-1", "0", "100", "a", ""}) void shouldUseDefaultForInvalidValue(String value) { - ThreadCountProvider provider = new ThreadCountProvider(() -> 1); - System.setProperty(ThreadCountProvider.PROPERTY, value); + ThreadCountProvider provider = new ThreadCountProvider(() -> 1, Integer.parseInt(value)); assertThat(provider.getAsInt()).isEqualTo(2); } diff --git a/scm-webapp/src/test/resources/sonia/scm/plugin/config.yml b/scm-webapp/src/test/resources/sonia/scm/plugin/config.yml new file mode 100644 index 0000000000..574fc427af --- /dev/null +++ b/scm-webapp/src/test/resources/sonia/scm/plugin/config.yml @@ -0,0 +1,30 @@ +# +# MIT License +# +# Copyright (c) 2020-present Cloudogu GmbH and Contributors +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# + +webapp: + https: + port: 42 + keyType: PKCS12 + + redirect: true diff --git a/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin.smp b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin.smp new file mode 100644 index 0000000000..72819bc1c2 Binary files /dev/null and b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin.smp differ diff --git a/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditEntryGenerator.class b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditEntryGenerator.class new file mode 100644 index 0000000000..ea8b304971 Binary files /dev/null and b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditEntryGenerator.class differ diff --git a/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditLogDatabase.class b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditLogDatabase.class new file mode 100644 index 0000000000..0857d88576 Binary files /dev/null and b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditLogDatabase.class differ diff --git a/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditLogDto.class b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditLogDto.class new file mode 100644 index 0000000000..c56db2b03c Binary files /dev/null and b/scm-webapp/src/test/resources/sonia/scm/plugin/scm-jakarta-test-plugin/classes/com/cloudogu/auditlog/AuditLogDto.class differ diff --git a/settings.gradle b/settings.gradle index 904fccdbc3..a124cf541e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -45,11 +45,11 @@ enforce { r.version = '6.7' } rule(enforcer.rules.RequireJavaVersion) { r -> - r.version = '11' - } - rule(enforcer.rules.EnforceBytecodeVersion) { r -> - r.maxJdkVersion = '11' + r.version = '17' } +// rule(enforcer.rules.EnforceBytecodeVersion) { r -> +// r.maxJdkVersion = '17' +// } } includeBuild 'build-plugins' diff --git a/webapp-config.md b/webapp-config.md new file mode 100644 index 0000000000..39ad53a6ea --- /dev/null +++ b/webapp-config.md @@ -0,0 +1,63 @@ +# Webapp config options + +#### Disables feedback links on frontend page footer + +disableFeedback: false + +#### Makes jwt token endless to prevent that logged-in users get automatically logged off. Warning: Enabling this option can lead to security issue. + +endlessJwt: false + +#### Set app stage, e.g. DEVELOPMENT, PRODUCTION, TESTING + +stage: PRODUCTION + +#### Override app version (for testing purposes only) + +versionOverride: + +#### Sets path for the working directory which is used for internal repository operations. Empty string defaults to java tmpdir + +workdir: + +#### Parent config to configure caches + +cache: + +- dataFileCache: + enabled: true +- externalGroups: + maximumSize: 42 + + #### Username of initial admin user + initialUser + #### Password of initial admin user + initialPassword + #### skip initial admin creation + skipAdminCreation: false + +#### Number of async threads + +asyncThreads: 4 + +#### Max seconds to abort async execution + +maxAsyncAbortSeconds: 60 + +#### Central work queue + +central-work-queue: +workers: 4 + +#### Strategy for the working copy pool implementation [NoneCachingWorkingCopyPool, SimpleCachingWorkingCopyPool] + +workingCopyPoolStrategy: NoneCachingWorkingCopyPool + +#### Amount of "cached" working copies + +workingCopyPoolSize: 5 + +#### Cache xml stores in memory + +storeCache: +enabled: true diff --git a/yarn.lock b/yarn.lock index ad0fd8b61b..4f78811bd7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6902,10 +6902,10 @@ dependencies: "@types/node" "*" -"@types/css@^0.0.34": - version "0.0.34" - resolved "https://registry.yarnpkg.com/@types/css/-/css-0.0.34.tgz#73c912334a9a5b67f57d44a3020c7b030bd37460" - integrity sha512-nyZiWXt6gBG7Jj7BYB4zdHXyrhcAjJH8qv+BUsO8FMJR5be7H5ETOaibB3uvXeX5lc57LWkecNJv03q0+JpbXA== +"@types/css@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@types/css/-/css-0.0.31.tgz#235cf80e4991a9d769fd640b4b8644b0a4139895" + integrity sha512-Xt3xp8o0zueqrdIkAOO5gy5YNs+jYfmIUPeoeKiwrcmCRXuNWkIgR2Ph6vHuVfi1y6c9Tx214EQBWPEkU97djw== "@types/diff@^4.0.1": version "4.0.2"