Skip to content

Commit a889a87

Browse files
committed
Standardize config property names and remove legacy shims
* Ensures that all properties follow a consistent naming and format pattern. * Removes shim for legacy `alpine.*` or unprefixed properties. * Renames `VulnerabilityAnalysisTask` to `PortfolioAnalysisTask` as it better reflects what it does (i.e. schedule analyses for all projects in the portfolio). * Adds validation during startup to catch misconfigurations early. Not great to do this in the RC phase, but better now than post GA. Signed-off-by: nscuro <nscuro@protonmail.com>
1 parent c44b099 commit a889a87

45 files changed

Lines changed: 772 additions & 561 deletions

File tree

Some content is hidden

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

alpine/alpine-common/src/main/java/alpine/common/util/ProxyUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ static ProxyConfig fromConfig(final Config config) {
7777
return null;
7878
}
7979

80-
final String host = config.getOptionalValue(AlpineConfigKeys.HTTP_PROXY_ADDRESS, String.class).orElse(null);
80+
final String host = config.getOptionalValue(AlpineConfigKeys.HTTP_PROXY_HOST, String.class).orElse(null);
8181
if (host == null) {
8282
return null;
8383
}

alpine/alpine-common/src/main/java/alpine/config/AlpineConfigKeys.java

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -25,43 +25,43 @@ public final class AlpineConfigKeys {
2525

2626
public static final String BCRYPT_ROUNDS = "dt.bcrypt.rounds";
2727
public static final String LDAP_ENABLED = "dt.ldap.enabled";
28-
public static final String LDAP_SERVER_URL = "dt.ldap.server.url";
29-
public static final String LDAP_BASEDN = "dt.ldap.basedn";
30-
public static final String LDAP_SECURITY_AUTH = "dt.ldap.security.auth";
31-
public static final String LDAP_BIND_USERNAME = "dt.ldap.bind.username";
32-
public static final String LDAP_BIND_PASSWORD = "dt.ldap.bind.password";
33-
public static final String LDAP_AUTH_USERNAME_FMT = "dt.ldap.auth.username.format";
34-
public static final String LDAP_ATTRIBUTE_NAME = "dt.ldap.attribute.name";
35-
public static final String LDAP_ATTRIBUTE_MAIL = "dt.ldap.attribute.mail";
36-
public static final String LDAP_GROUPS_FILTER = "dt.ldap.groups.filter";
37-
public static final String LDAP_USER_GROUPS_FILTER = "dt.ldap.user.groups.filter";
38-
public static final String LDAP_GROUPS_SEARCH_FILTER = "dt.ldap.groups.search.filter";
39-
public static final String LDAP_USERS_SEARCH_FILTER = "dt.ldap.users.search.filter";
40-
public static final String LDAP_USER_PROVISIONING = "dt.ldap.user.provisioning";
41-
public static final String LDAP_TEAM_SYNCHRONIZATION = "dt.ldap.team.synchronization";
28+
public static final String LDAP_SERVER_URL = "dt.ldap.server-url";
29+
public static final String LDAP_BASEDN = "dt.ldap.base-dn";
30+
public static final String LDAP_SECURITY_AUTH = "dt.ldap.security-auth";
31+
public static final String LDAP_BIND_USERNAME = "dt.ldap.bind-username";
32+
public static final String LDAP_BIND_PASSWORD = "dt.ldap.bind-password";
33+
public static final String LDAP_USERNAME_FORMAT = "dt.ldap.username-format";
34+
public static final String LDAP_NAME_ATTRIBUTE = "dt.ldap.name-attribute";
35+
public static final String LDAP_MAIL_ATTRIBUTE = "dt.ldap.mail-attribute";
36+
public static final String LDAP_GROUP_FILTER = "dt.ldap.group-filter";
37+
public static final String LDAP_USER_GROUPS_FILTER = "dt.ldap.user-groups-filter";
38+
public static final String LDAP_GROUP_SEARCH_FILTER = "dt.ldap.group-search-filter";
39+
public static final String LDAP_USER_SEARCH_FILTER = "dt.ldap.user-search-filter";
40+
public static final String LDAP_USER_PROVISIONING = "dt.ldap.user-provisioning";
41+
public static final String LDAP_TEAM_SYNCHRONIZATION = "dt.ldap.team-synchronization";
4242
public static final String OIDC_ENABLED = "dt.oidc.enabled";
4343
public static final String OIDC_ISSUER = "dt.oidc.issuer";
44-
public static final String OIDC_CLIENT_ID = "dt.oidc.client.id";
45-
public static final String OIDC_USERNAME_CLAIM = "dt.oidc.username.claim";
46-
public static final String OIDC_USER_PROVISIONING = "dt.oidc.user.provisioning";
47-
public static final String OIDC_TEAM_SYNCHRONIZATION = "dt.oidc.team.synchronization";
48-
public static final String OIDC_TEAMS_CLAIM = "dt.oidc.teams.claim";
49-
public static final String OIDC_TEAMS_DEFAULT = "dt.oidc.teams.default";
50-
public static final String OIDC_AUTH_CUSTOMIZER = "dt.oidc.auth.customizer";
51-
public static final String HTTP_PROXY_ADDRESS = "dt.http.proxy.address";
44+
public static final String OIDC_CLIENT_ID = "dt.oidc.client-id";
45+
public static final String OIDC_USERNAME_CLAIM = "dt.oidc.username-claim";
46+
public static final String OIDC_USER_PROVISIONING = "dt.oidc.user-provisioning";
47+
public static final String OIDC_TEAM_SYNCHRONIZATION = "dt.oidc.team-synchronization";
48+
public static final String OIDC_TEAMS_CLAIM = "dt.oidc.teams-claim";
49+
public static final String OIDC_DEFAULT_TEAMS = "dt.oidc.default-teams";
50+
public static final String OIDC_AUTH_CUSTOMIZER = "dt.oidc.auth-customizer";
51+
public static final String HTTP_PROXY_HOST = "dt.http.proxy.host";
5252
public static final String HTTP_PROXY_PORT = "dt.http.proxy.port";
53-
public static final String HTTP_PROXY_USERNAME = "dt.http.proxy.username";
54-
public static final String HTTP_PROXY_PASSWORD = "dt.http.proxy.password";
55-
public static final String NO_PROXY = "dt.no.proxy";
56-
public static final String HTTP_TIMEOUT_CONNECTION = "dt.http.timeout.connection";
53+
public static final String HTTP_PROXY_USERNAME = "dt.http.proxy.auth.username";
54+
public static final String HTTP_PROXY_PASSWORD = "dt.http.proxy.auth.password";
55+
public static final String NO_PROXY = "dt.http.proxy.exclusions";
56+
public static final String HTTP_CONNECT_TIMEOUT_MS = "dt.http.connect-timeout-ms";
5757
public static final String CORS_ENABLED = "dt.cors.enabled";
58-
public static final String CORS_ALLOW_ORIGIN = "dt.cors.allow.origin";
59-
public static final String CORS_ALLOW_METHODS = "dt.cors.allow.methods";
60-
public static final String CORS_ALLOW_HEADERS = "dt.cors.allow.headers";
61-
public static final String CORS_EXPOSE_HEADERS = "dt.cors.expose.headers";
62-
public static final String CORS_ALLOW_CREDENTIALS = "dt.cors.allow.credentials";
63-
public static final String CORS_MAX_AGE = "dt.cors.max.age";
64-
public static final String API_KEY_PREFIX = "dt.api.key.prefix";
58+
public static final String CORS_ALLOW_ORIGIN = "dt.cors.allowed-origins";
59+
public static final String CORS_ALLOW_METHODS = "dt.cors.allowed-methods";
60+
public static final String CORS_ALLOW_HEADERS = "dt.cors.allowed-headers";
61+
public static final String CORS_EXPOSE_HEADERS = "dt.cors.exposed-headers";
62+
public static final String CORS_ALLOW_CREDENTIALS = "dt.cors.allow-credentials";
63+
public static final String CORS_MAX_AGE = "dt.cors.max-age";
64+
public static final String API_KEY_PREFIX = "dt.api-key.prefix";
6565

6666
public static final String BUILD_INFO_APPLICATION_NAME = "alpine.build-info.application.name";
6767
public static final String BUILD_INFO_APPLICATION_VERSION = "alpine.build-info.application.version";

alpine/alpine-common/src/main/resources/META-INF/microprofile-config.properties

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,28 @@ alpine.build-info.application.version=0.0.0
33
alpine.build-info.application.timestamp=1970-01-01 00:00:00
44
alpine.build-info.application.uuid=00000000-0000-0000-0000-000000000000
55

6-
dt.api.key.prefix=alpine_
6+
dt.api-key.prefix=alpine_
77
dt.bcrypt.rounds=14
8-
dt.cors.allow.credentials=true
9-
dt.cors.allow.headers=Origin,Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin,X-Api-Key,X-Total-Count,*
10-
dt.cors.allow.methods=GET,POST,PUT,PATCH,DELETE,OPTIONS
11-
dt.cors.allow.origin=*
8+
dt.cors.allow-credentials=true
9+
dt.cors.allowed-headers=Origin,Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin,X-Api-Key,X-Total-Count,*
10+
dt.cors.allowed-methods=GET,POST,PUT,PATCH,DELETE,OPTIONS
11+
dt.cors.allowed-origins=*
1212
dt.cors.enabled=true
13-
dt.cors.expose.headers=Origin,Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin,X-Api-Key,X-Total-Count
14-
dt.cors.max.age=3600
15-
dt.data.directory=~/.alpine
13+
dt.cors.exposed-headers=Origin,Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin,X-Api-Key,X-Total-Count
14+
dt.cors.max-age=3600
15+
dt.data-directory=~/.alpine
1616
dt.database.password=
1717
dt.database.url=jdbc:h2:mem:alpine
1818
dt.database.username=sa
19-
dt.http.timeout.connection=30
20-
dt.http.timeout.pool=60
21-
dt.http.timeout.socket=30
22-
dt.ldap.attribute.mail=mail
23-
dt.ldap.attribute.name=userPrincipalName
19+
dt.http.connect-timeout-ms=30000
20+
dt.ldap.mail-attribute=mail
21+
dt.ldap.name-attribute=userPrincipalName
2422
dt.ldap.enabled=false
25-
dt.ldap.team.synchronization=false
26-
dt.ldap.user.provisioning=false
27-
dt.oidc.auth.customizer=alpine.server.auth.DefaultOidcAuthenticationCustomizer
23+
dt.ldap.team-synchronization=false
24+
dt.ldap.user-provisioning=false
25+
dt.oidc.auth-customizer=alpine.server.auth.DefaultOidcAuthenticationCustomizer
2826
dt.oidc.enabled=false
29-
dt.oidc.team.synchronization=false
30-
dt.oidc.teams.claim=groups
31-
dt.oidc.user.provisioning=false
32-
dt.oidc.username.claim=sub
27+
dt.oidc.team-synchronization=false
28+
dt.oidc.teams-claim=groups
29+
dt.oidc.user-provisioning=false
30+
dt.oidc.username-claim=sub

alpine/alpine-common/src/test/java/alpine/common/util/ProxyUtilTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void fromConfigTest() {
3737

3838
final Config config = new SmallRyeConfigBuilder()
3939
.withDefaultValues(Map.of(
40-
AlpineConfigKeys.HTTP_PROXY_ADDRESS, "proxy.http.example.com",
40+
AlpineConfigKeys.HTTP_PROXY_HOST, "proxy.http.example.com",
4141
AlpineConfigKeys.HTTP_PROXY_PORT, "6666",
4242
AlpineConfigKeys.HTTP_PROXY_USERNAME, "domain\\username",
4343
AlpineConfigKeys.HTTP_PROXY_PASSWORD, "pa$%word",

alpine/alpine-server/src/main/java/alpine/server/auth/LdapAuthenticationService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ private LdapUser autoProvision(final LdapConnectionWrapper ldap, final AlpineQue
135135
user = qm.synchronizeTeamMembership(user, groupDNs);
136136
}
137137
} else {
138-
LOGGER.warn("Could not find '{}' in the directory while provisioning the user. Ensure '{}' is defined correctly", username, AlpineConfigKeys.LDAP_ATTRIBUTE_NAME);
138+
LOGGER.warn("Could not find '{}' in the directory while provisioning the user. Ensure '{}' is defined correctly", username, AlpineConfigKeys.LDAP_NAME_ATTRIBUTE);
139139
throw new AlpineAuthenticationException(AlpineAuthenticationException.CauseType.UNMAPPED_ACCOUNT);
140140
}
141141
} catch (NamingException e) {

alpine/alpine-server/src/main/java/alpine/server/auth/LdapConnectionWrapper.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,14 @@ public LdapConnectionWrapper(Config config) {
7676
this.bindUsername = config.getOptionalValue(AlpineConfigKeys.LDAP_BIND_USERNAME, String.class).orElse(null);
7777
this.bindPassword = config.getOptionalValue(AlpineConfigKeys.LDAP_BIND_PASSWORD, String.class).orElse(null);
7878
this.securityAuth = config.getOptionalValue(AlpineConfigKeys.LDAP_SECURITY_AUTH, String.class).orElse(null);
79-
this.authUsernameFmt = config.getOptionalValue(AlpineConfigKeys.LDAP_AUTH_USERNAME_FMT, String.class).orElse(null);
79+
this.authUsernameFmt = config.getOptionalValue(AlpineConfigKeys.LDAP_USERNAME_FORMAT, String.class).orElse(null);
8080
this.userGroupsFilter = config.getOptionalValue(AlpineConfigKeys.LDAP_USER_GROUPS_FILTER, String.class).orElse(null);
81-
this.groupsSearchFilter = config.getOptionalValue(AlpineConfigKeys.LDAP_GROUPS_SEARCH_FILTER, String.class).orElse(null);
81+
this.groupsSearchFilter = config.getOptionalValue(AlpineConfigKeys.LDAP_GROUP_SEARCH_FILTER, String.class).orElse(null);
8282
this.ldapEnabled = config.getValue(AlpineConfigKeys.LDAP_ENABLED, Boolean.class);
8383
this.ldapUrl = config.getOptionalValue(AlpineConfigKeys.LDAP_SERVER_URL, String.class).orElse(null);
8484
this.baseDn = config.getOptionalValue(AlpineConfigKeys.LDAP_BASEDN, String.class).orElse(null);
85-
this.attributeMail = config.getValue(AlpineConfigKeys.LDAP_ATTRIBUTE_MAIL, String.class);
86-
this.attributeName = config.getValue(AlpineConfigKeys.LDAP_ATTRIBUTE_NAME, String.class);
85+
this.attributeMail = config.getValue(AlpineConfigKeys.LDAP_MAIL_ATTRIBUTE, String.class);
86+
this.attributeName = config.getValue(AlpineConfigKeys.LDAP_NAME_ATTRIBUTE, String.class);
8787
this.userProvisioning = config.getValue(AlpineConfigKeys.LDAP_USER_PROVISIONING, Boolean.class);
8888
this.teamSynchronization = config.getValue(AlpineConfigKeys.LDAP_TEAM_SYNCHRONIZATION, Boolean.class);
8989
this.ldapSslTls = this.ldapUrl != null && !this.ldapUrl.isBlank() && this.ldapUrl.startsWith("ldaps:");
@@ -229,7 +229,7 @@ public List<String> search(final DirContext dirContext, final String filter, fin
229229

230230
/**
231231
* Performs a search for the specified username. Internally, this method queries on
232-
* the attribute defined by {@link AlpineConfigKeys#LDAP_ATTRIBUTE_NAME}.
232+
* the attribute defined by {@link AlpineConfigKeys#LDAP_NAME_ATTRIBUTE}.
233233
*
234234
* @param ctx the DirContext to use
235235
* @param username the username to query on
@@ -248,7 +248,7 @@ public List<SearchResult> searchForUsername(final DirContext ctx, final String u
248248

249249
/**
250250
* Performs a search for the specified username. Internally, this method queries on
251-
* the attribute defined by {@link AlpineConfigKeys#LDAP_ATTRIBUTE_NAME}.
251+
* the attribute defined by {@link AlpineConfigKeys#LDAP_NAME_ATTRIBUTE}.
252252
*
253253
* @param ctx the DirContext to use
254254
* @param username the username to query on
@@ -323,7 +323,7 @@ public String getAttribute(final Attributes attributes, final String attributeNa
323323

324324
/**
325325
* Formats the principal in username@domain format or in a custom format if is specified in the config file.
326-
* If LDAP_AUTH_USERNAME_FMT is configured to a non-empty value, the substring %s in this value will be replaced with the entered username.
326+
* If LDAP_USERNAME_FORMAT is configured to a non-empty value, the substring %s in this value will be replaced with the entered username.
327327
* The recommended format of this value depends on your LDAP server(Active Directory, OpenLDAP, etc.).
328328
* Examples:
329329
* alpine.ldap.auth.username.format=%s

alpine/alpine-server/src/main/java/alpine/server/auth/OidcAuthenticationService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ private OidcUser autoProvision(final AlpineQueryManager qm, final OidcProfile pr
234234
accessToken);
235235
}
236236

237-
final List<String> defaultTeams = config.getOptionalValues(AlpineConfigKeys.OIDC_TEAMS_DEFAULT, String.class)
237+
final List<String> defaultTeams = config.getOptionalValues(AlpineConfigKeys.OIDC_DEFAULT_TEAMS, String.class)
238238
.orElse(List.of()).stream()
239239
.map(String::trim)
240240
.filter(s -> !s.isEmpty())

alpine/alpine-server/src/test/java/alpine/server/auth/LdapAuthenticationServiceTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,12 +206,12 @@ private static Config configWith(Map<String, String> overrides) {
206206
values.put(AlpineConfigKeys.LDAP_BASEDN, LDAP.getBaseDn());
207207
values.put(AlpineConfigKeys.LDAP_BIND_USERNAME, LDAP.getUser());
208208
values.put(AlpineConfigKeys.LDAP_BIND_PASSWORD, LDAP.getPassword());
209-
values.put(AlpineConfigKeys.LDAP_ATTRIBUTE_NAME, "uid");
210-
values.put(AlpineConfigKeys.LDAP_ATTRIBUTE_MAIL, "mail");
209+
values.put(AlpineConfigKeys.LDAP_NAME_ATTRIBUTE, "uid");
210+
values.put(AlpineConfigKeys.LDAP_MAIL_ATTRIBUTE, "mail");
211211
values.put(AlpineConfigKeys.LDAP_USER_GROUPS_FILTER, "(member={USER_DN})");
212-
values.put(AlpineConfigKeys.LDAP_GROUPS_FILTER, "(objectClass=groupOfUniqueNames)");
213-
values.put(AlpineConfigKeys.LDAP_GROUPS_SEARCH_FILTER, "(&(objectClass=groupOfUniqueNames)(cn=*{SEARCH_TERM}*))");
214-
values.put(AlpineConfigKeys.LDAP_USERS_SEARCH_FILTER, "(&(objectClass=inetOrgPerson)(cn=*{SEARCH_TERM}*))");
212+
values.put(AlpineConfigKeys.LDAP_GROUP_FILTER, "(objectClass=groupOfUniqueNames)");
213+
values.put(AlpineConfigKeys.LDAP_GROUP_SEARCH_FILTER, "(&(objectClass=groupOfUniqueNames)(cn=*{SEARCH_TERM}*))");
214+
values.put(AlpineConfigKeys.LDAP_USER_SEARCH_FILTER, "(&(objectClass=inetOrgPerson)(cn=*{SEARCH_TERM}*))");
215215
values.put(AlpineConfigKeys.LDAP_USER_PROVISIONING, "true");
216216
values.put(AlpineConfigKeys.LDAP_TEAM_SYNCHRONIZATION, "false");
217217
values.putAll(overrides);

alpine/alpine-server/src/test/java/alpine/server/auth/OidcAuthenticationServiceTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ public void authenticateShouldProvisionAndReturnNewUserWhenUserDoesNotExistAndPr
332332
public void authenticateShouldProvisionAndApplyDefaultTeamsAndReturnNewUserWhenUserDoesNotExistAndProvisioningIsEnabled() throws Exception {
333333
final Config config = configWith(Map.of(
334334
AlpineConfigKeys.OIDC_USER_PROVISIONING, "true",
335-
AlpineConfigKeys.OIDC_TEAMS_DEFAULT, "teamName"));
335+
AlpineConfigKeys.OIDC_DEFAULT_TEAMS, "teamName"));
336336

337337
try (final var qm = new AlpineQueryManager()) {
338338
var teamToAssign = new Team();

apiserver/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -799,7 +799,7 @@
799799
<value>dev</value>
800800
</systemProperty>
801801
<systemProperty>
802-
<key>dev.services.enabled</key>
802+
<key>dt.dev-services.enabled</key>
803803
<value>true</value>
804804
</systemProperty>
805805
</systemProperties>

0 commit comments

Comments
 (0)