Skip to content

Commit 6bd5cee

Browse files
author
RPKI Team at RIPE NCC
committed
RIPE NCC has merged 81e06b1
* Fix deploy-check script to include head refs [c20fe531] * Fix spelling [07d51e00] * Rename Unknown to Not Found in email templates and code around them [4fbe7ed1] * chore(deps): update dependency org.eclipse.jgit:org.eclipse.jgit to v7.4.0.202509020913-r [8619385b] * chore(deps): update dependency io.sentry:sentry-bom to v8.23.0 [a0a98f8b] * chore(deps): update dependency io.freefair.lombok:io.freefair.lombok.gradle.plugin to v9 [e2ccb024] * chore(deps): update dependency io.sentry:sentry-bom to v8.22.0 [f96d52fc] * chore(deps): update dependency org.postgresql:postgresql to v42.7.8 [87b420fd] * Use nCipherKM version 13.6.12 [a10059fb] * Cleanup [0a945174] * Apply sonarqube [961b6b48] * Revert broken tests [fecf950e] * Fix EqualsAndHashCode [20dfa20d] * Make UpdateAspaConfigurationCommand a bit more clear, add tests [211f326f] * Add ASPA notation https://datatracker.ietf.org/doc/draft-ietf-sidrops-aspa-notation/ [4e7314bd] * Add test [2518b1cd] * Process empty case specially [4c7b28a0] * chore(deps): update dependency com.google.code.gson:gson to v2.13.2 [9489022f] * chore(deps): update dependency io.sentry:sentry-bom to v8.21.1 [14527f3b] * hsm: inline `$spring_boot_version` [fcd47503] * rpki-commons: 1.40 -> 1.41 [cd535c1e] * chore(deps): update dependency org.sonarqube:org.sonarqube.gradle.plugin to v6.3.1.5724 [a67e6b6e] * chore(deps): update dependency com.gorylenko.gradle-git-properties:com.gorylenko.gradle-git-properties.gradle.plugin to v2.5.3 [e668ff7f] * chore(deps): update actions/setup-java action to v5 [9f79a49b] * chore(deps): update dependency io.freefair.lombok:io.freefair.lombok.gradle.plugin to v8.14.2 [b1645b70] * chore(deps): update dependency io.sentry:sentry-bom to v8.19.1 [435c3652] * chore(deps): update actions/checkout action to v5 [2bee2f72]
1 parent fe18c02 commit 6bd5cee

File tree

15 files changed

+86
-59
lines changed

15 files changed

+86
-59
lines changed

.github/workflows/unit-tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ jobs:
1818
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
1919

2020
steps:
21-
- uses: actions/checkout@v4
21+
- uses: actions/checkout@v5
2222
- name: setup java
23-
uses: actions/setup-java@4
23+
uses: actions/setup-java@5
2424
with:
2525
java-version: 17
2626
distribution: temurin

build.gradle

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,19 @@ dependencies {
4444
implementation "org.thymeleaf:thymeleaf:3.1.2.RELEASE"
4545
implementation "org.thymeleaf:thymeleaf-spring6:3.1.3.RELEASE"
4646

47-
implementation platform('io.sentry:sentry-bom:8.18.0')
47+
implementation platform('io.sentry:sentry-bom:8.23.0')
4848
implementation 'io.sentry:sentry-spring-boot-starter'
4949
implementation 'io.sentry:sentry-logback'
5050

51-
implementation("net.ripe.rpki:rpki-commons:$rpki_commons_version") {
52-
exclude group: "net.sf.saxon", module: "Saxon-HE"
53-
}
51+
implementation("net.ripe.rpki:rpki-commons:$rpki_commons_version")
5452

5553
implementation 'org.springdoc:springdoc-openapi-ui:1.8.0'
5654

5755
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
58-
implementation 'org.postgresql:postgresql:42.7.7'
56+
implementation 'org.postgresql:postgresql:42.7.8'
5957
runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat'
6058

61-
implementation 'com.google.code.gson:gson:2.13.1'
59+
implementation 'com.google.code.gson:gson:2.13.2'
6260
implementation 'com.jamesmurty.utils:java-xmlbuilder:1.3'
6361
implementation 'commons-codec:commons-codec:1.19.0'
6462
implementation 'commons-io:commons-io:2.20.0'

buildSrc/build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ repositories {
99
}
1010

1111
dependencies {
12-
implementation 'io.freefair.lombok:io.freefair.lombok.gradle.plugin:8.14'
13-
implementation('com.gorylenko.gradle-git-properties:com.gorylenko.gradle-git-properties.gradle.plugin:2.5.2') {
12+
implementation 'io.freefair.lombok:io.freefair.lombok.gradle.plugin:9.0.0'
13+
implementation('com.gorylenko.gradle-git-properties:com.gorylenko.gradle-git-properties.gradle.plugin:2.5.3') {
1414
exclude group: 'org.eclipse.jgit', module: 'org.eclipse.jgit'
1515
}
16-
implementation 'org.eclipse.jgit:org.eclipse.jgit:7.3.0.202506031305-r'
17-
implementation 'org.sonarqube:org.sonarqube.gradle.plugin:6.2.0.5505'
16+
implementation 'org.eclipse.jgit:org.eclipse.jgit:7.4.0.202509020913-r'
17+
implementation 'org.sonarqube:org.sonarqube.gradle.plugin:6.3.1.5724'
1818
}

dependencies.gradle

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
ext {
2-
rpki_commons_version = '1.40'
3-
spring_boot_version = '2.7.18'
2+
rpki_commons_version = '1.41'
43
}

hsm/build.gradle

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,15 @@ dependencies {
3030
requireCapability('net.ripe.rpki.hsm:api-only')
3131
}
3232
}
33-
thalesImplementation("net.ripe.rpki:rpki-commons:$rpki_commons_version") {
34-
exclude group: "net.sf.saxon", module: "Saxon-HE"
35-
}
33+
thalesImplementation("net.ripe.rpki:rpki-commons:$rpki_commons_version")
34+
3635
// 2024-4-26: Final DBProvider 1.6 provided by Entrust
3736
thalesImplementation 'com.thales.esecurity.asg.ripe.db-jceprovider:DBProvider:1.6'
3837
// **When using JDK 11** make sure the matching version of nCipherKM is on classpath because DBProvider depends on it.
39-
thalesImplementation 'com.ncipher.nfast:nCipherKM:13.6.11'
38+
thalesImplementation 'com.ncipher.nfast:nCipherKM:13.6.12'
4039

4140
thalesImplementation 'org.springframework:spring-context:6.1.15'
4241
// used in spring-context, but not exported.
4342
thalesImplementation 'javax.annotation:javax.annotation-api:1.3.2'
44-
thalesImplementation "org.springframework.boot:spring-boot-autoconfigure:$spring_boot_version"
43+
thalesImplementation "org.springframework.boot:spring-boot-autoconfigure:2.7.18"
4544
}

scripts/gitlab-deploy-check

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ const calculateDeploymentDurations = (timeline, mergeRequest) => {
128128
const matchesMR = ({ref, sha}) => {
129129
return sha === mergeRequest.sha
130130
|| ref === mergeRequest.source_branch
131+
|| ref === `refs/merge-requests/${mergeRequest.iid}/head`
131132
|| ref === `refs/merge-requests/${mergeRequest.iid}/merge`;
132133
};
133134
const matchesLastCommit = ({sha, parent_ids}) =>

src/main/java/net/ripe/rpki/domain/aspa/AspaConfigurationMaintenanceServiceBean.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import java.util.List;
1919
import java.util.SortedMap;
20-
import java.util.stream.Collectors;
2120

2221
/**
2322
* Updates the ASPA configuration based on the current certified resources, removing any ASPA configuration with a that
@@ -87,7 +86,7 @@ public String toString() {
8786
// This string representation is stored in the command audit table and shown to the user
8887
return String.format(
8988
"Updated ASPA configuration due to changed resources, removed customer ASNs: %s.",
90-
UpdateAspaConfigurationCommand.getHumanReadableAspaConfiguration(removed)
89+
UpdateAspaConfigurationCommand.inIETFNotation(removed)
9190
);
9291
}
9392
}

src/main/java/net/ripe/rpki/server/api/commands/UpdateAspaConfigurationCommand.java

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,27 @@
1111
public class UpdateAspaConfigurationCommand extends CertificateAuthorityModificationCommand {
1212

1313
private final String ifMatch;
14-
private final List<AspaConfigurationData> configuration;
14+
private final List<AspaConfigurationData> configurations;
1515

16-
public UpdateAspaConfigurationCommand(VersionedId certificateAuthorityId, String ifMatch, List<AspaConfigurationData> configuration) {
16+
public UpdateAspaConfigurationCommand(VersionedId certificateAuthorityId, String ifMatch, List<AspaConfigurationData> configurations) {
1717
super(certificateAuthorityId, CertificateAuthorityCommandGroup.USER);
1818
this.ifMatch = ifMatch;
19-
this.configuration = configuration;
19+
this.configurations = configurations;
2020
}
2121

2222
@Override
2323
public String getCommandSummary() {
24-
return "Update ASPA configuration to: " + getHumanReadableAspaConfiguration(configuration) + ".";
24+
var s = "Update ASPA configuration to: ";
25+
if (configurations.isEmpty()) {
26+
return s + "empty.";
27+
}
28+
return s + inIETFNotation(configurations) + ".";
2529
}
2630

27-
public static String getHumanReadableAspaConfiguration(List<AspaConfigurationData> aspaConfiguration) {
28-
// This string representation is stored in the command audit table and shown to the user
31+
public static String inIETFNotation(List<AspaConfigurationData> aspaConfiguration) {
2932
return aspaConfiguration.stream()
30-
.map(aspa -> aspa.getCustomerAsn() + " -> " + getHumanReadableProviders(aspa))
31-
.collect(Collectors.joining("; "));
33+
.map(AspaConfigurationData::inIETFNotation)
34+
.collect(Collectors.joining("; "));
3235
}
3336

34-
private static String getHumanReadableProviders(AspaConfigurationData aspa) {
35-
return aspa.getProviders().stream()
36-
.map(Object::toString)
37-
.collect(Collectors.joining(", "));
38-
}
3937
}

src/main/java/net/ripe/rpki/server/api/dto/AspaConfigurationData.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
package net.ripe.rpki.server.api.dto;
22

33
import com.google.gson.Gson;
4+
import lombok.EqualsAndHashCode;
5+
import lombok.Getter;
46
import lombok.NonNull;
57
import lombok.Value;
68
import net.ripe.ipresource.Asn;
79
import net.ripe.rpki.util.Streams;
10+
import org.apache.commons.lang3.Validate;
811

912
import java.nio.charset.StandardCharsets;
10-
import java.util.List;
11-
import java.util.SortedMap;
12-
import java.util.SortedSet;
13-
import java.util.TreeSet;
13+
import java.util.*;
14+
import java.util.stream.Collectors;
1415
import java.util.stream.Stream;
1516

1617
import static net.ripe.rpki.util.Streams.streamToSortedMap;
@@ -42,4 +43,14 @@ public static SortedMap<Asn, SortedSet<Asn>> dataToMaps(List<AspaConfigurationDa
4243
ac -> new TreeSet<>(ac.getProviders())
4344
);
4445
}
46+
47+
public static String inIETFNotation(AspaConfigurationData aspa) {
48+
if (aspa.getProviders().isEmpty()) {
49+
return "";
50+
}
51+
return aspa.getProviders().stream()
52+
.sorted(Comparator.comparing(Asn::longValue))
53+
.map(Object::toString)
54+
.collect(Collectors.joining(", ", aspa.getCustomerAsn() + " => ", ""));
55+
}
4556
}

src/main/java/net/ripe/rpki/services/impl/RoaAlertChecker.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ public void checkAndSendRoaAlertEmailToSubscription(RoaAlertConfigurationData co
8282
final Set<RouteValidityState> routeValidityStates = configuration.getRouteValidityStates();
8383
final List<AnnouncedRoute> invalidAsnsToMail = routeValidityStates.contains(RouteValidityState.INVALID_ASN) ? announcedRoutes.invalidAsns : Collections.emptyList();
8484
final List<AnnouncedRoute> invalidLengthsToMail = routeValidityStates.contains(RouteValidityState.INVALID_LENGTH) ? announcedRoutes.invalidLengths : Collections.emptyList();
85-
final List<AnnouncedRoute> unknownsToMail = routeValidityStates.contains(RouteValidityState.UNKNOWN) ? announcedRoutes.unknowns : Collections.emptyList();
85+
final List<AnnouncedRoute> unknownsToMail = routeValidityStates.contains(RouteValidityState.UNKNOWN) ? announcedRoutes.notFounds : Collections.emptyList();
8686
final Set<AnnouncedRoute> ignoredAnnouncements = configuration.getIgnoredAnnouncements();
8787

8888
updateMetrics(invalidAsnsToMail, invalidLengthsToMail, unknownsToMail);
@@ -114,7 +114,7 @@ AnnouncedRoutes getAnnouncedRoutesForCA(CertificateAuthorityData ca, Set<Announc
114114
announcedRoutes.valids.add(announcedRoute);
115115
break;
116116
case UNKNOWN:
117-
announcedRoutes.unknowns.add(announcedRoute);
117+
announcedRoutes.notFounds.add(announcedRoute);
118118
break;
119119
case INVALID_ASN:
120120
announcedRoutes.invalidAsns.add(announcedRoute);
@@ -131,12 +131,12 @@ AnnouncedRoutes getAnnouncedRoutesForCA(CertificateAuthorityData ca, Set<Announc
131131
private void sendRoaAlertEmailToSubscription(RoaAlertConfigurationData configuration,
132132
List<AnnouncedRoute> invalidAsnsToMail,
133133
List<AnnouncedRoute> invalidLengthsToMail,
134-
List<AnnouncedRoute> unknowns,
134+
List<AnnouncedRoute> notFounds,
135135
Set<AnnouncedRoute> unsortedIgnoredAlerts) {
136136
String humanizedCaName = internalNamePresenter.humanizeCaName(configuration.getCertificateAuthority().getName());
137137
Collections.sort(invalidAsnsToMail);
138138
Collections.sort(invalidLengthsToMail);
139-
Collections.sort(unknowns);
139+
Collections.sort(notFounds);
140140

141141
final SortedSet<AnnouncedRoute> ignoredAlerts = new TreeSet<>();
142142
ignoredAlerts.addAll(unsortedIgnoredAlerts);
@@ -146,7 +146,7 @@ private void sendRoaAlertEmailToSubscription(RoaAlertConfigurationData configura
146146
"ignoredAlerts", ignoredAlerts,
147147
"invalidAsns", invalidAsnsToMail,
148148
"invalidLengths", invalidLengthsToMail,
149-
"unknowns", unknowns,
149+
"notFounds", notFounds,
150150
"subscription", configuration
151151
);
152152

@@ -163,7 +163,7 @@ private void sendRoaAlertEmailToSubscription(RoaAlertConfigurationData configura
163163
static final class AnnouncedRoutes {
164164
final List<AnnouncedRoute> invalidAsns = new ArrayList<>();
165165
final List<AnnouncedRoute> invalidLengths = new ArrayList<>();
166-
final List<AnnouncedRoute> unknowns = new ArrayList<>();
166+
final List<AnnouncedRoute> notFounds = new ArrayList<>();
167167
final List<AnnouncedRoute> valids = new ArrayList<>();
168168
}
169169
}

0 commit comments

Comments
 (0)