Skip to content

Commit

Permalink
RIPE NCC has merged 5af977293
Browse files Browse the repository at this point in the history
* chore(deps): update dependency gradle to v8.13 [7335cafef]
* chore(deps): update dependency io.freefair.lombok:io.freefair.lombok.gradle.plugin to v8.12.2 [725ceea24]
* Don't say anything about ROA change alert when unsubscribing from general ROA alerts [0a537bfef]
* Cleanup [7e82bed33]
* Use toList() [c39a9957e]
* Make Sonarqube a bit happier [dd9f9a991]
* Simplify notifyAboutRoaChanges [f3d3a77ac]
* Introduce defaultSubscriptions() methods [662c372d6]
* Revert ifs [33a5f8c7c]
* Rename to showRoas [cda322492]
* Make column nullable [ec22bfe7f]
* chore(deps): update dependency io.sentry:sentry-bom to v8.2.0 [861525091]
* chore(deps): update dependency io.freefair.lombok:io.freefair.lombok.gradle.plugin to v8.12.1 [2a9ff5814]
* chore(deps): update dependency commons-codec:commons-codec to v1.18.0 [e63c18b83]
* chore(deps): update dependency com.google.code.gson:gson to v2.12.1 [61cbf3820]
* chore(deps): update dependency gradle to v8.12.1 [076df585e]
* chore(deps): update dependency io.sentry:sentry-bom to v8 [40b611165]
* Don't try to be smart and notify about ROA changes subscription on every email send to the user about alerts. [7f324fd1d]
* Adjust template [7d34ef014]
* Add logging for a corner case [5a9439903]
* Fix UnsubscribeFromRoaAlertCommandHandler [0da9012e9]
* More NPE fixes [1ea4f5e3e]
* Cleanup [9a0af303b]
* Add test for empty case [4cb90fac6]
* Fix NPE [dea6f9e2c]
* More tests [6e8e7223f]
* Remove redundant code, refactor [2142a369e]
* Extend email templates with ROA changes stuff [99d212f35]
* Don't try to notify for absent configuration [e82f68538]
* Another fix [c417d6183]
* Fix UpdateRoaChangeAlertCommandHandler [29d270998]
* Better templates [723ed6494]
* More tests [eef7817b9]
* Remove redundant code [21b418bbf]
* Fix request validation [9c338c5e6]
* Fix broken test [7168e81fe]
* Adjust email template [80a05f649]
* Fixes and tests [d78685031]
* Fix test [6c56d55fc]
* Refactor, introduce UpdateRoaChangeAlertCommand and handler for it [ba05030b1]
* Cleanup [063fb59ea]
* Fix tests again [6693e4b0f]
* Better tests [4adafb7ca]
* Fix more tests [eab196a4f]
* Simplify [fdb0a79e7]
* Fix tests [adc30fe3c]
* Fix email template, add SSO account to it, better tests. [9779b24f5]
* chore(deps): update dependency org.postgresql:postgresql to v42.7.5 [7ab2dddca]
* Cleanup [939717d7b]
* Add initial test code [cf03d35ca]
* Add usage of isNotifyOnRoaChanges [cf2703836]
* Add SQL migration [3bed3cbbb]
* Fix tests [f1a6d95ab]
* Fix typos [bac59c2f4]
* Some initial changes for ROA notifications [906c9f8fc]
  • Loading branch information
RPKI Team at RIPE NCC committed Feb 27, 2025
1 parent 9f04b65 commit 32caba6
Show file tree
Hide file tree
Showing 55 changed files with 914 additions and 319 deletions.
8 changes: 4 additions & 4 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ dependencies {
implementation "org.thymeleaf:thymeleaf:3.1.2.RELEASE"
implementation "org.thymeleaf:thymeleaf-spring6:3.1.3.RELEASE"

implementation platform('io.sentry:sentry-bom:7.20.0')
implementation platform('io.sentry:sentry-bom:8.2.0')
implementation 'io.sentry:sentry-spring-boot-starter'
implementation 'io.sentry:sentry-logback'

Expand All @@ -53,12 +53,12 @@ dependencies {
implementation 'org.springdoc:springdoc-openapi-ui:1.8.0'

runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
implementation 'org.postgresql:postgresql:42.7.4'
implementation 'org.postgresql:postgresql:42.7.5'
runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat'

implementation 'com.google.code.gson:gson:2.11.0'
implementation 'com.google.code.gson:gson:2.12.1'
implementation 'com.jamesmurty.utils:java-xmlbuilder:1.3'
implementation 'commons-codec:commons-codec:1.17.2'
implementation 'commons-codec:commons-codec:1.18.0'
implementation 'commons-io:commons-io:2.18.0'
implementation 'ch.qos.logback.contrib:logback-json-classic:0.1.5'
implementation 'ch.qos.logback.contrib:logback-jackson:0.1.5'
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ repositories {
}

dependencies {
implementation 'io.freefair.lombok:io.freefair.lombok.gradle.plugin:8.11'
implementation 'io.freefair.lombok:io.freefair.lombok.gradle.plugin:8.12.2'
implementation('com.gorylenko.gradle-git-properties:com.gorylenko.gradle-git-properties.gradle.plugin:2.4.2') {
exclude group: 'org.eclipse.jgit', module: 'org.eclipse.jgit'
}
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
2 changes: 1 addition & 1 deletion gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ fi
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public static EventSubscription subscribe(final CertificateAuthorityEventVisitor
private final Set<KeyPairEntity> keyPairs = new HashSet<>();

/**
* The last time the ASPA or ROA configuration was updated. This can bever be equal to {@link #configurationAppliedAt}.
* The last time the ASPA or ROA configuration was updated. This can never be equal to {@link #configurationAppliedAt}.
*/
@Column(name = "configuration_updated_at")
@NonNull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.google.common.collect.Sets;
import lombok.Getter;
import lombok.Setter;
import net.ripe.rpki.commons.validation.roa.AnnouncedRoute;
import net.ripe.rpki.commons.validation.roa.RouteValidityState;
import net.ripe.rpki.domain.CertificateAuthority;
Expand Down Expand Up @@ -34,7 +35,6 @@
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;

@Entity
Expand All @@ -44,6 +44,7 @@ public class RoaAlertConfiguration extends EntitySupport {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "roa_alert_conf_seq")
@Getter
private Long id;

@Getter
Expand All @@ -68,6 +69,11 @@ public class RoaAlertConfiguration extends EntitySupport {
@CollectionTable(name = "roa_alert_configuration_ignored", joinColumns = @JoinColumn(name = "roa_alert_configuration_id"))
private Set<RoaAlertIgnoredAnnouncement> ignored = new HashSet<>();

@Basic(optional=false)
@Getter
@Setter
private boolean notifyOnRoaChanges;

private static final String EMAIL_SEPARATOR = ",";

public RoaAlertConfiguration() {
Expand All @@ -81,12 +87,7 @@ public RoaAlertConfiguration(CertificateAuthority certificateAuthority) {
public RoaAlertConfiguration(CertificateAuthority certificateAuthority, String email,
Collection<RouteValidityState> routeValidityStates, RoaAlertFrequency frequency) {
this(certificateAuthority);
setSubscription(new RoaAlertSubscriptionData(email, routeValidityStates, frequency));
}

@Override
public Object getId() {
return id;
setSubscription(new RoaAlertSubscriptionData(List.of(email), routeValidityStates, frequency, false));
}

public void clearSubscription() {
Expand All @@ -100,6 +101,7 @@ public void setSubscription(RoaAlertSubscriptionData subscription) {
addEmails(subscription);
routeValidityStates = StringUtils.join(subscription.getRouteValidityStates(), ",");
frequency = subscription.getFrequency();
notifyOnRoaChanges = subscription.isNotifyOnRoaChanges();
}

private void addEmails(RoaAlertSubscriptionData subscription) {
Expand All @@ -124,7 +126,7 @@ public RoaAlertSubscriptionData getSubscriptionOrNull() {
if (email.isEmpty()) {
return null;
}
return new RoaAlertSubscriptionData(Arrays.asList(email.split(",")), getRouteValidityStates(), frequency);
return new RoaAlertSubscriptionData(Arrays.asList(email.split(",")), getRouteValidityStates(), frequency, notifyOnRoaChanges);
}

public Set<RoaAlertIgnoredAnnouncement> getIgnored() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,11 @@
package net.ripe.rpki.domain.roa;

import net.ripe.ipresource.Asn;
import net.ripe.ipresource.IpResourceRange;
import net.ripe.rpki.domain.ManagedCertificateAuthority;
import net.ripe.rpki.server.api.dto.RoaConfigurationPrefixData;
import net.ripe.rpki.server.api.support.objects.CaName;

import java.time.Instant;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

public interface RoaConfigurationRepository {
Expand Down Expand Up @@ -40,7 +36,7 @@ default void removePrefixes(RoaConfiguration roaConfiguration, Collection<RoaCon
mergePrefixes(roaConfiguration, Collections.emptyList(), prefixes);
}

void mergePrefixes(RoaConfiguration configuration,
Collection<RoaConfigurationPrefix> prefixesToAdd,
Collection<RoaConfigurationPrefix> prefixesToRemove);
RoaConfiguration.PrefixDiff mergePrefixes(RoaConfiguration configuration,
Collection<RoaConfigurationPrefix> prefixesToAdd,
Collection<RoaConfigurationPrefix> prefixesToRemove);
}
48 changes: 19 additions & 29 deletions src/main/java/net/ripe/rpki/rest/pojo/Subscriptions.java
Original file line number Diff line number Diff line change
@@ -1,28 +1,31 @@
package net.ripe.rpki.rest.pojo;

import com.google.common.collect.Sets;
import lombok.*;
import net.ripe.rpki.domain.alerts.RoaAlertFrequency;

import java.util.Collection;
import java.util.Collections;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

import net.ripe.rpki.domain.alerts.RoaAlertFrequency;

@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Subscriptions {
@Setter
private Set<String> emails;
@Setter
private Set<String> routeValidityStates;
@Getter
private RoaAlertFrequency frequency;

public Subscriptions() {
}

public Subscriptions(Set<String> emails, Set<String> routeValidityStates, RoaAlertFrequency frequency) {
this.routeValidityStates = routeValidityStates;
this.emails = emails;
this.frequency = frequency;
}
@Getter
@Setter
private boolean notifyOnRoaChanges = false;

public Subscriptions(Set<String> emails, Set<String> routeValidityStates) {
this(emails, routeValidityStates, RoaAlertFrequency.DAILY);
this(emails, routeValidityStates, RoaAlertFrequency.DAILY, false);
}

public Set<String> getRouteValidityStates() {
Expand All @@ -31,30 +34,17 @@ public Set<String> getRouteValidityStates() {
routeValidityStates.stream().filter(Objects::nonNull).collect(Collectors.toSet());
}

public void setRouteValidityStates(Set<String> routeValidityStates) {
this.routeValidityStates = routeValidityStates;
}

public Set<String> getEmails() {
return emails == null ?
Collections.emptySet() :
emails.stream().filter(Objects::nonNull).collect(Collectors.toSet());
}

public void setEmails(Set<String> emails) {
this.emails = emails;
}

public RoaAlertFrequency getFrequency() {
return frequency;
public static Subscriptions defaultSubscriptions(Collection<String> emails, Set<String> validityStates) {
return new Subscriptions(Sets.newHashSet(emails), validityStates);
}

@Override
public String toString() {
return "Subscriptions{" +
"emails=" + emails +
", routeValidityStates=" + routeValidityStates +
", frequency=" + frequency +
'}';
public static Subscriptions defaultSubscriptions() {
return new Subscriptions(Collections.emptySet(), Collections.emptySet());
}
}
Loading

0 comments on commit 32caba6

Please sign in to comment.