Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.uid2</groupId>
<artifactId>uid2-core</artifactId>
<version>2.26.30</version>
<version>2.26.32-alpha-116-SNAPSHOT</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
Expand Down
59 changes: 1 addition & 58 deletions src/main/java/com/uid2/core/util/OperatorInfo.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,10 @@
package com.uid2.core.util;
import com.uid2.core.Const;
import com.uid2.shared.auth.IAuthorizable;
import com.uid2.shared.auth.OperatorKey;
import com.uid2.shared.auth.OperatorType;
import io.vertx.core.http.HttpServerRequest;
import io.vertx.ext.web.RoutingContext;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.uid2.core.model.ConfigStore;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static com.uid2.shared.Const.Config.encryptionSupportVersion;
import static com.uid2.shared.Const.Http.AppVersionHeader;
import static com.uid2.shared.middleware.AuthMiddleware.API_CLIENT_PROP;

/**
Expand Down Expand Up @@ -53,54 +44,6 @@ public static OperatorInfo getOperatorInfo(RoutingContext rc) throws Exception {
}

static boolean supportsEncryption(RoutingContext rc) {
String appVersion = rc.request().getHeader(AppVersionHeader);
if (appVersion == null) {
logger.warn("AppVersion header is missing.");
return false;
}
String[] versions = appVersion.split(";");
for (String version : versions) {
if (version.startsWith("uid2-operator=")) {
String operatorVersion = version.substring("uid2-operator=".length());
boolean isSupported = isVersionGreaterOrEqual(operatorVersion, ConfigStore.Global.getOrDefault(encryptionSupportVersion, "9999"));
logger.debug("Operator version: {}, {}",
operatorVersion, isSupported ? "Supports encryption" : "Does not support encryption");
return isSupported;
}
}
return false;
}

/*
Returns if the version of a semvar v1 is greater or equal to v2
*/
static boolean isVersionGreaterOrEqual(String v1, String v2) {
Pattern pattern = Pattern.compile("(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?");
Matcher m1 = pattern.matcher(v1);
Matcher m2 = pattern.matcher(v2);

int[] parts1 = extractParts(m1);
int[] parts2 = extractParts(m2);

for (int i = 0; i < Math.max(parts1.length, parts2.length); i++) {
int p1 = i < parts1.length ? parts1[i] : 0;
int p2 = i < parts2.length ? parts2[i] : 0;
if (p1 != p2) {
return p1 > p2;
}
}

return true;
}

private static int[] extractParts(Matcher matcher) {
int[] parts = new int[3];
if (matcher.find()) {
for (int i = 1; i <= 3; i++) {
String group = matcher.group(i);
parts[i - 1] = group != null ? Integer.parseInt(group) : 0;
}
}
return parts;
return Boolean.parseBoolean(rc.request().getHeader("Encrypted"));
}
}
19 changes: 2 additions & 17 deletions src/test/java/com/uid2/core/util/OperatorInfoTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,7 @@ void testGetOperatorInfo() throws Exception {
Map<String, Object> data = new HashMap<>();
data.put(API_CLIENT_PROP, mockOperatorKey);
when(mockRoutingContext.data()).thenReturn(data);
when(mockRequest.getHeader(AppVersionHeader)).thenReturn("uid2-operator=3.0.0");

when(mockRequest.getHeader("Encrypted")).thenReturn("true");
OperatorInfo result = OperatorInfo.getOperatorInfo(mockRoutingContext);

assertNotNull(result);
Expand All @@ -73,7 +72,7 @@ void testGetOperatorInfoThrowsException() {

@Test
void testSupportsEncryptionTrue() {
when(mockRequest.getHeader(AppVersionHeader)).thenReturn("uid2-operator=3.0.0");
when(mockRequest.getHeader("Encrypted")).thenReturn("true");
assertTrue(OperatorInfo.supportsEncryption(mockRoutingContext));
}

Expand All @@ -88,18 +87,4 @@ void testSupportsEncryptionMissingHeader() {
when(mockRequest.getHeader(AppVersionHeader)).thenReturn(null);
assertFalse(OperatorInfo.supportsEncryption(mockRoutingContext));
}

@Test
void testIsVersionGreaterOrEqual() {
assertTrue(OperatorInfo.isVersionGreaterOrEqual("2.0.0", "1.0.0"));
assertTrue(OperatorInfo.isVersionGreaterOrEqual("2.0.0", "2.0.0"));
assertFalse(OperatorInfo.isVersionGreaterOrEqual("1.0.0", "2.0.0"));
assertTrue(OperatorInfo.isVersionGreaterOrEqual("2.1.0", "2.0.0"));
assertFalse(OperatorInfo.isVersionGreaterOrEqual("2.0.1", "2.1.0"));
assertFalse(OperatorInfo.isVersionGreaterOrEqual("operator.5.26.19-56899dc0d7", "operator.5.27.19-56899dc0d7"));
assertTrue(OperatorInfo.isVersionGreaterOrEqual("operator.5.27.19-56899dc0d7", "operator.5.27.19-56899dc0d7"));
assertTrue(OperatorInfo.isVersionGreaterOrEqual("operator.5.27.19-56899dc0d7", "operator.5.26.19-56899dc0d7"));

assertTrue(OperatorInfo.isVersionGreaterOrEqual("uid2-operator.5.40.25-alpha-15-SNAPSHOT", "uid2-operator.5.40.25-alpha-15-SNAPSHOT"));
}
}
5 changes: 2 additions & 3 deletions src/test/java/com/uid2/core/vertx/CoreVerticleTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -815,7 +815,7 @@ void cloudEncryptionKeyRetrieveNoKeysOrError(Vertx vertx, VertxTestContext testC

@Tag("dontForceJwt")
@Test
void keysetRefreshSuccessHigherVersion(Vertx vertx, VertxTestContext testContext) throws Exception {
void keysetRefreshSuccessEncrypted(Vertx vertx, VertxTestContext testContext) throws Exception {
fakeAuth(attestationProtocolPublic, Role.OPERATOR);
addAttestationProvider(attestationProtocolPublic);
onHandleAttestationRequest(() -> {
Expand All @@ -824,8 +824,7 @@ void keysetRefreshSuccessHigherVersion(Vertx vertx, VertxTestContext testContext
});

MultiMap headers = MultiMap.caseInsensitiveMultiMap();
headers.add(Const.Http.AppVersionHeader, "uid2-operator=3.7.16-SNAPSHOT;uid2-attestation-api=1.1.0;uid2-shared=2.7.0-3e279acefa");

headers.add("Encrypted","true");
getWithVersion(vertx, "key/keyset/refresh", headers, ar -> {
assertTrue(ar.succeeded());
if (ar.succeeded()) {
Expand Down