Skip to content

Commit 98495b2

Browse files
committed
SCANJLIB-209, SCANJLIB-210, SCANJLIB-211 Support http properties
This is ported from the scanner engine
1 parent 558e26e commit 98495b2

46 files changed

Lines changed: 1794 additions & 539 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

lib/pom.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@
4444
<groupId>org.apache.commons</groupId>
4545
<artifactId>commons-lang3</artifactId>
4646
</dependency>
47+
<dependency>
48+
<groupId>io.github.hakky54</groupId>
49+
<artifactId>sslcontext-kickstart</artifactId>
50+
<version>8.3.4</version>
51+
</dependency>
4752

4853
<!-- unit tests -->
4954
<dependency>
@@ -78,6 +83,12 @@
7883
<version>3.5.4</version>
7984
<scope>test</scope>
8085
</dependency>
86+
<dependency>
87+
<groupId>org.junit-pioneer</groupId>
88+
<artifactId>junit-pioneer</artifactId>
89+
<version>2.2.0</version>
90+
<scope>test</scope>
91+
</dependency>
8192
</dependencies>
8293

8394
<build>
@@ -110,6 +121,20 @@
110121
</execution>
111122
</executions>
112123
</plugin>
124+
<plugin>
125+
<groupId>org.apache.maven.plugins</groupId>
126+
<artifactId>maven-surefire-plugin</artifactId>
127+
<configuration>
128+
<!-- Some tests are asserting on localized messages or dates -->
129+
<systemPropertyVariables>
130+
<user.language>en</user.language>
131+
<user.country>US</user.country>
132+
</systemPropertyVariables>
133+
<environmentVariables>
134+
<LANGUAGE>en_US</LANGUAGE>
135+
</environmentVariables>
136+
</configuration>
137+
</plugin>
113138
</plugins>
114139
</build>
115140
</project>

lib/src/main/java/org/sonarsource/scanner/lib/EnvironmentConfig.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public class EnvironmentConfig {
3636
private static final String GENERIC_ENV_PREFIX = "SONAR_SCANNER_";
3737
private static final String SONAR_HOST_URL_ENV_VAR = "SONAR_HOST_URL";
3838
private static final String SONAR_USER_HOME_ENV_VAR = "SONAR_USER_HOME";
39+
private static final String TOKEN_ENV_VARIABLE = "SONAR_TOKEN";
3940

4041
private EnvironmentConfig() {
4142
// only static methods
@@ -49,6 +50,7 @@ static Map<String, String> load(Map<String, String> env, LogOutput logger) {
4950
var loadedProps = new HashMap<String, String>();
5051
Optional.ofNullable(env.get(SONAR_HOST_URL_ENV_VAR)).ifPresent(url -> loadedProps.put(ScannerProperties.HOST_URL, url));
5152
Optional.ofNullable(env.get(SONAR_USER_HOME_ENV_VAR)).ifPresent(path -> loadedProps.put(ScannerProperties.SONAR_USER_HOME, path));
53+
Optional.ofNullable(env.get(TOKEN_ENV_VARIABLE)).ifPresent(path -> loadedProps.put(ScannerProperties.SONAR_TOKEN, path));
5254
env.forEach((key, value) -> {
5355
if (!key.equals(SONAR_SCANNER_JSON_PARAMS) && key.startsWith(GENERIC_ENV_PREFIX)) {
5456
processEnvVariable(key, value, loadedProps, logger);

lib/src/main/java/org/sonarsource/scanner/lib/ScannerEngineBootstrapper.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
*/
2020
package org.sonarsource.scanner.lib;
2121

22+
import java.nio.file.Paths;
2223
import java.util.Collections;
2324
import java.util.HashMap;
2425
import java.util.HashSet;
@@ -27,20 +28,19 @@
2728
import org.sonarsource.scanner.lib.internal.ClassloadRules;
2829
import org.sonarsource.scanner.lib.internal.InternalProperties;
2930
import org.sonarsource.scanner.lib.internal.IsolatedLauncherFactory;
31+
import org.sonarsource.scanner.lib.internal.SonarUserHome;
3032

3133
/**
3234
* Entry point to run a Sonar analysis programmatically.
3335
*/
3436
public class ScannerEngineBootstrapper {
3537

3638
private static final String SONARCLOUD_HOST = "https://sonarcloud.io";
37-
private final IsolatedLauncherFactory launcherFactory;
3839
private final LogOutput logOutput;
3940
private final Map<String, String> bootstrapProperties = new HashMap<>();
4041

4142
public ScannerEngineBootstrapper(String app, String version, final LogOutput logOutput) {
4243
this.logOutput = logOutput;
43-
this.launcherFactory = new IsolatedLauncherFactory(new LoggerAdapter(logOutput));
4444
this.setBootstrapProperty(InternalProperties.SCANNER_APP, app)
4545
.setBootstrapProperty(InternalProperties.SCANNER_APP_VERSION, version);
4646
}
@@ -71,6 +71,8 @@ public ScannerEngineFacade bootstrap() {
7171
ClassloadRules rules = new ClassloadRules(Collections.emptySet(), unmaskRules);
7272
var properties = Map.copyOf(bootstrapProperties);
7373
var isSonarCloud = getSonarCloudUrl().equals(properties.get(ScannerProperties.HOST_URL));
74+
var sonarUserHome = properties.getOrDefault(ScannerProperties.SONAR_USER_HOME, Paths.get("").resolve(".sonar").toString());
75+
var launcherFactory = new IsolatedLauncherFactory(new LoggerAdapter(logOutput), new SonarUserHome(Paths.get(sonarUserHome)));
7476
var launcher = launcherFactory.createLauncher(properties, rules);
7577
return new ScannerEngineFacade(properties, launcher, logOutput, isSonarCloud);
7678
}

lib/src/main/java/org/sonarsource/scanner/lib/ScannerProperties.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,9 @@ public interface ScannerProperties {
4141
*/
4242
String SONAR_USER_HOME = "sonar.userHome";
4343

44+
/**
45+
* Authentication token for connecting to the Sonar server.
46+
*/
47+
String SONAR_TOKEN = "sonar.token";
48+
4449
}

lib/src/main/java/org/sonarsource/scanner/lib/internal/BootstrapIndexDownloader.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.ArrayList;
2323
import java.util.Collection;
2424
import org.sonarsource.scanner.lib.internal.cache.Logger;
25+
import org.sonarsource.scanner.lib.internal.http.ServerConnection;
2526

2627
class BootstrapIndexDownloader {
2728
private final ServerConnection conn;

lib/src/main/java/org/sonarsource/scanner/lib/internal/IsolatedLauncherFactory.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,24 +26,27 @@
2626
import javax.annotation.Nullable;
2727
import org.sonarsource.scanner.lib.internal.batch.IsolatedLauncher;
2828
import org.sonarsource.scanner.lib.internal.cache.Logger;
29+
import org.sonarsource.scanner.lib.internal.http.ServerConnection;
2930

3031
public class IsolatedLauncherFactory {
3132
static final String ISOLATED_LAUNCHER_IMPL = "org.sonarsource.scanner.lib.internal.batch.BatchIsolatedLauncher";
3233
private final TempCleaning tempCleaning;
3334
private final String launcherImplClassName;
3435
private final Logger logger;
36+
private final SonarUserHome sonarUserHome;
3537

3638
/**
3739
* For unit tests
3840
*/
39-
IsolatedLauncherFactory(String isolatedLauncherClassName, TempCleaning tempCleaning, Logger logger) {
41+
IsolatedLauncherFactory(String isolatedLauncherClassName, TempCleaning tempCleaning, Logger logger, SonarUserHome sonarUserHome) {
4042
this.tempCleaning = tempCleaning;
4143
this.launcherImplClassName = isolatedLauncherClassName;
4244
this.logger = logger;
45+
this.sonarUserHome = sonarUserHome;
4346
}
4447

45-
public IsolatedLauncherFactory(Logger logger) {
46-
this(ISOLATED_LAUNCHER_IMPL, new TempCleaning(logger), logger);
48+
public IsolatedLauncherFactory(Logger logger, SonarUserHome sonarUserHome) {
49+
this(ISOLATED_LAUNCHER_IMPL, new TempCleaning(logger), logger, sonarUserHome);
4750
}
4851

4952
private IsolatedClassloader createClassLoader(List<File> jarFiles, ClassloadRules maskRules) {
@@ -61,8 +64,8 @@ public IsolatedLauncherAndClassloader createLauncher(Map<String, String> props,
6164
}
6265
return new IsolatedLauncherAndClassloader(new SimulatedLauncher(version, logger), null);
6366
}
64-
ServerConnection serverConnection = ServerConnection.create(props, logger);
65-
JarDownloader jarDownloader = new JarDownloaderFactory(serverConnection, logger, props.get("sonar.userHome")).create();
67+
ServerConnection serverConnection = ServerConnection.create(props, logger, sonarUserHome);
68+
JarDownloader jarDownloader = new JarDownloaderFactory(serverConnection, logger, sonarUserHome).create();
6669

6770
return createLauncher(jarDownloader, rules);
6871
}

lib/src/main/java/org/sonarsource/scanner/lib/internal/JarDownloader.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.sonarsource.scanner.lib.internal.BootstrapIndexDownloader.JarEntry;
2929
import org.sonarsource.scanner.lib.internal.cache.FileCache;
3030
import org.sonarsource.scanner.lib.internal.cache.Logger;
31+
import org.sonarsource.scanner.lib.internal.http.ServerConnection;
3132

3233
import static java.lang.String.format;
3334

lib/src/main/java/org/sonarsource/scanner/lib/internal/JarDownloaderFactory.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,24 @@
1919
*/
2020
package org.sonarsource.scanner.lib.internal;
2121

22-
import javax.annotation.Nullable;
2322
import org.sonarsource.scanner.lib.internal.cache.FileCache;
2423
import org.sonarsource.scanner.lib.internal.cache.FileCacheBuilder;
2524
import org.sonarsource.scanner.lib.internal.cache.Logger;
25+
import org.sonarsource.scanner.lib.internal.http.ServerConnection;
2626

2727
class JarDownloaderFactory {
2828
private final ServerConnection serverConnection;
2929
private final Logger logger;
30-
private final String userHome;
30+
private final SonarUserHome sonarUserHome;
3131

32-
JarDownloaderFactory(ServerConnection conn, Logger logger, @Nullable String userHome) {
32+
JarDownloaderFactory(ServerConnection conn, Logger logger, SonarUserHome sonarUserHome) {
3333
this.serverConnection = conn;
3434
this.logger = logger;
35-
this.userHome = userHome;
35+
this.sonarUserHome = sonarUserHome;
3636
}
3737

3838
JarDownloader create() {
39-
FileCache fileCache = new FileCacheBuilder(logger)
40-
.setSonarUserHome(userHome)
39+
FileCache fileCache = new FileCacheBuilder(logger, sonarUserHome)
4140
.build();
4241
BootstrapIndexDownloader bootstrapIndexDownloader = new BootstrapIndexDownloader(serverConnection, logger);
4342
JarDownloader.ScannerFileDownloader scannerFileDownloader = new JarDownloader.ScannerFileDownloader(serverConnection);

0 commit comments

Comments
 (0)