Skip to content

Commit 98cf9bf

Browse files
author
Behnam Mozafari
committed
Merge branch 'main' into bmz-UID2-4588-remote-config-endpoint
2 parents 4e042bf + fd57e38 commit 98cf9bf

File tree

10 files changed

+70
-25
lines changed

10 files changed

+70
-25
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.uid2</groupId>
88
<artifactId>uid2-core</artifactId>
9-
<version>2.22.0</version>
9+
<version>2.23.17</version>
1010

1111
<properties>
1212
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -24,7 +24,7 @@
2424
<vertx.verticle>com.uid2.core.vertx.CoreVerticle</vertx.verticle>
2525
<launcher.class>io.vertx.core.Launcher</launcher.class>
2626

27-
<uid2-shared.version>8.0.0</uid2-shared.version>
27+
<uid2-shared.version>8.0.32</uid2-shared.version>
2828
<image.version>${project.version}</image.version>
2929
</properties>
3030

src/main/java/com/uid2/core/Main.java

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525
import com.uid2.shared.secure.nitro.InMemoryAWSCertificateStore;
2626
import com.uid2.shared.store.CloudPath;
2727
import com.uid2.shared.store.scope.GlobalScope;
28+
import com.uid2.shared.util.HTTPPathMetricFilter;
2829
import com.uid2.shared.vertx.RotatingStoreVerticle;
2930
import com.uid2.shared.vertx.VertxUtils;
3031
import io.micrometer.core.instrument.Gauge;
3132
import io.micrometer.core.instrument.Metrics;
3233
import io.micrometer.core.instrument.config.MeterFilter;
3334
import io.micrometer.prometheus.PrometheusMeterRegistry;
3435
import io.micrometer.prometheus.PrometheusRenameFilter;
36+
import io.vertx.core.DeploymentOptions;
3537
import io.vertx.core.Vertx;
3638
import io.vertx.core.VertxOptions;
3739
import io.vertx.core.http.HttpServerOptions;
@@ -49,6 +51,8 @@
4951

5052
public class Main {
5153

54+
private static final int vertxServiceInstances = 1;
55+
5256
public static void main(String[] args) {
5357
final String vertxConfigPath = System.getProperty(Const.Config.VERTX_CONFIG_PATH_PROP);
5458
if (vertxConfigPath != null) {
@@ -157,17 +161,19 @@ public static void main(String[] args) {
157161
);
158162

159163
JwtService jwtService = new JwtService(config);
160-
161164
coreVerticle = new CoreVerticle(cloudStorage, operatorKeyProvider, attestationService, attestationTokenService, enclaveIdProvider, operatorJWTTokenProvider, jwtService, cloudEncryptionKeyProvider);
162165
} catch (Exception e) {
163166
System.out.println("failed to initialize core verticle: " + e.getMessage());
164167
System.exit(-1);
165168
}
166169

170+
createVertxInstancesMetric();
171+
createVertxEventLoopsMetric();
172+
167173
vertx.deployVerticle(enclaveRotatingVerticle);
168174
vertx.deployVerticle(operatorRotatingVerticle);
169175
vertx.deployVerticle(cloudEncryptionKeyRotatingVerticle);
170-
vertx.deployVerticle(coreVerticle);
176+
vertx.deployVerticle(coreVerticle, new DeploymentOptions().setInstances(vertxServiceInstances));
171177
});
172178
}
173179

@@ -182,14 +188,8 @@ private static void setupMetrics(MicrometerMetricsOptions metricOptions) {
182188
prometheusRegistry.config()
183189
// providing common renaming for prometheus metric, e.g. "hello.world" to "hello_world"
184190
.meterFilter(new PrometheusRenameFilter())
185-
.meterFilter(MeterFilter.replaceTagValues(Label.HTTP_PATH.toString(), actualPath -> {
186-
try {
187-
String normalized = HttpUtils.normalizePath(actualPath).split("\\?")[0];
188-
return Endpoints.pathSet().contains(normalized) ? normalized : "/unknown";
189-
} catch (IllegalArgumentException e) {
190-
return actualPath;
191-
}
192-
}))
191+
.meterFilter(MeterFilter.replaceTagValues(Label.HTTP_PATH.toString(),
192+
actualPath -> HTTPPathMetricFilter.filterPath(actualPath, Endpoints.pathSet())))
193193
// Don't record metrics for 404s.
194194
.meterFilter(MeterFilter.deny(id ->
195195
id.getName().startsWith(MetricsDomain.HTTP_SERVER.getPrefix()) &&
@@ -210,6 +210,19 @@ private static void setupMetrics(MicrometerMetricsOptions metricOptions) {
210210
.register(Metrics.globalRegistry);
211211
}
212212

213+
private static void createVertxInstancesMetric() {
214+
Gauge.builder("uid2.vertx_service_instances", () -> vertxServiceInstances)
215+
.description("gauge for number of vertx service instances requested")
216+
.register(Metrics.globalRegistry);
217+
}
218+
219+
private static void createVertxEventLoopsMetric() {
220+
Gauge.builder("uid2.vertx_event_loop_threads", () -> VertxOptions.DEFAULT_EVENT_LOOP_POOL_SIZE)
221+
.description("gauge for number of vertx event loop threads")
222+
.register(Metrics.globalRegistry);
223+
}
224+
225+
213226
/*
214227
private static CommandLine parseArgs(String[] args) {
215228
final CLI cli = CLI.create("uid2-core")

src/main/java/com/uid2/core/service/ClientSideKeypairMetadataProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.uid2.core.service;
22

33
import com.uid2.core.model.SecretStore;
4+
import com.uid2.core.util.OperatorInfo;
45
import com.uid2.shared.cloud.ICloudStorage;
56
import com.uid2.shared.store.CloudPath;
67
import com.uid2.shared.store.scope.GlobalScope;
@@ -11,6 +12,7 @@
1112
import java.io.InputStream;
1213
import java.io.InputStreamReader;
1314

15+
import static com.uid2.core.util.MetadataHelper.getMetadataPathName;
1416
import static com.uid2.core.util.MetadataHelper.readToEndAsString;
1517

1618
public class ClientSideKeypairMetadataProvider implements IClientSideKeypairMetadataProvider {
@@ -24,8 +26,8 @@ public ClientSideKeypairMetadataProvider(ICloudStorage cloudStorage) {
2426
}
2527

2628
@Override
27-
public String getMetadata() throws Exception {
28-
String pathname = new GlobalScope(new CloudPath(SecretStore.Global.get(ClientSideKeypairMetadataPathName))).getMetadataPath().toString();
29+
public String getMetadata(OperatorInfo info) throws Exception {
30+
String pathname = getMetadataPathName(info, SecretStore.Global.get(ClientSideKeypairMetadataPathName));
2931
String original = readToEndAsString(metadataStreamProvider.download(pathname));
3032
JsonObject main = (JsonObject) Json.decodeValue(original);
3133
JsonObject obj = main.getJsonObject("client_side_keypairs");
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.uid2.core.service;
22

33

4+
import com.uid2.core.util.OperatorInfo;
5+
46
public interface IClientSideKeypairMetadataProvider {
5-
String getMetadata() throws Exception;
7+
String getMetadata(OperatorInfo info) throws Exception;
68
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.uid2.core.service;
22

3+
import com.uid2.core.util.OperatorInfo;
4+
35
public interface ISaltMetadataProvider {
4-
String getMetadata() throws Exception;
6+
String getMetadata(OperatorInfo info) throws Exception;
57
}

src/main/java/com/uid2/core/service/SaltMetadataProvider.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
package com.uid2.core.service;
22

33
import com.uid2.core.model.SecretStore;
4+
import com.uid2.core.util.OperatorInfo;
45
import com.uid2.shared.cloud.ICloudStorage;
56
import io.vertx.core.json.Json;
67
import io.vertx.core.json.JsonArray;
78
import io.vertx.core.json.JsonObject;
9+
import org.slf4j.Logger;
10+
import org.slf4j.LoggerFactory;
811

912
import java.io.IOException;
1013
import java.io.InputStream;
1114
import java.io.InputStreamReader;
12-
import static com.uid2.core.util.MetadataHelper.readToEndAsString;
15+
16+
import static com.uid2.core.util.MetadataHelper.*;
1317

1418
public class SaltMetadataProvider implements ISaltMetadataProvider {
19+
private static final Logger LOGGER = LoggerFactory.getLogger(SaltMetadataProvider.class);
1520

1621
public static final String SaltsMetadataPathName = "salts_metadata_path";
1722

@@ -28,8 +33,9 @@ public SaltMetadataProvider(ICloudStorage fileStreamProvider, ICloudStorage down
2833
}
2934

3035
@Override
31-
public String getMetadata() throws Exception {
32-
String original = readToEndAsString(metadataStreamProvider.download(SecretStore.Global.get(SaltsMetadataPathName)));
36+
public String getMetadata(OperatorInfo info) throws Exception {
37+
String pathname = getMetadataPathNameOldPrivateNoSite(info, SecretStore.Global.get(SaltsMetadataPathName));
38+
String original = readToEndAsString(metadataStreamProvider.download(pathname));
3339
JsonObject main = (JsonObject) Json.decodeValue(original);
3440
JsonArray salts = main.getJsonArray("salts");
3541
for(int i=0;i<salts.size();++i) {

src/main/java/com/uid2/core/util/MetadataHelper.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,25 @@ public static String getMetadataPathName(OperatorType operatorType, int siteId,
5555
return store.getMetadataPath().toString();
5656
}
5757

58+
// This exists because salts were never split into site folders for private operators.
59+
public static String getMetadataPathNameOldPrivateNoSite(OperatorInfo info, String metadataPathName) {
60+
StoreScope store;
61+
Boolean providePrivateSiteData = ConfigStore.Global.getBoolean("provide_private_site_data");
62+
if (info.getSupportsEncryption()) { // Check if decryption is possible
63+
if (info.getOperatorType() == OperatorType.PUBLIC ) //siteId_public folder
64+
{
65+
store = new EncryptedScope(new CloudPath(metadataPathName), info.getSiteId(), true);
66+
} else //siteId_private folder
67+
{
68+
store = new EncryptedScope(new CloudPath(metadataPathName), info.getSiteId(), false);
69+
}
70+
} else {
71+
store = new GlobalScope(new CloudPath(metadataPathName));
72+
}
73+
74+
return store.getMetadataPath().toString();
75+
}
76+
5877
public static String readToEndAsString(InputStream stream) throws IOException {
5978
final InputStreamReader reader = new InputStreamReader(stream);
6079
final char[] buff = new char[1024];

src/main/java/com/uid2/core/vertx/CoreVerticle.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,8 +415,9 @@ private void handleSiteRefresh(RoutingContext rc) {
415415

416416
private void handleSaltRefresh(RoutingContext rc) {
417417
try {
418+
OperatorInfo info = OperatorInfo.getOperatorInfo(rc);
418419
rc.response().putHeader(HttpHeaders.CONTENT_TYPE, "application/json")
419-
.end(saltMetadataProvider.getMetadata());
420+
.end(saltMetadataProvider.getMetadata(info));
420421
} catch (Exception e) {
421422
logger.warn("exception in handleSaltRefresh: " + e.getMessage(), e);
422423
Error("error", 500, rc, "error processing salt refresh");
@@ -486,7 +487,7 @@ private void handleClientSideKeypairRefresh(RoutingContext rc) {
486487
return;
487488
}
488489
rc.response().putHeader(HttpHeaders.CONTENT_TYPE, "application/json")
489-
.end(clientSideKeypairMetadataProvider.getMetadata());
490+
.end(clientSideKeypairMetadataProvider.getMetadata(info));
490491
} catch (Exception e) {
491492
logger.warn("exception in handleClientSideKeypairRefresh: " + e.getMessage(), e);
492493
Error("error", 500, rc, "error processing client_side_keypairs refresh");
@@ -644,7 +645,7 @@ void handleCloudEncryptionKeysRetrieval(RoutingContext rc) {
644645
}
645646

646647
JsonObject response = new JsonObject()
647-
.put("cloudEncryptionKeys", new JsonArray(cloudEncryptionKeys));
648+
.put("cloud_encryption_keys", new JsonArray(cloudEncryptionKeys));
648649

649650
rc.response().putHeader(HttpHeaders.CONTENT_TYPE, "application/json")
650651
.end(response.encode());

src/test/java/com/uid2/core/vertx/TestCoreVerticle.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,7 @@ void cloudEncryptionKeyRetrieveSuccess(Vertx vertx, VertxTestContext testContext
674674
assertEquals(200, response.statusCode());
675675

676676
JsonObject json = response.bodyAsJsonObject();
677-
JsonArray cloudEncryptionKeysArray = json.getJsonArray("cloudEncryptionKeys");
677+
JsonArray cloudEncryptionKeysArray = json.getJsonArray("cloud_encryption_keys");
678678

679679
assertNotNull(cloudEncryptionKeysArray);
680680
assertEquals(1, cloudEncryptionKeysArray.size());
@@ -722,7 +722,7 @@ void cloudEncryptionKeyRetrieveSuccessWithThreeKeys(Vertx vertx, VertxTestContex
722722
assertEquals(200, response.statusCode());
723723

724724
JsonObject json = response.bodyAsJsonObject();
725-
JsonArray cloudEncryptionKeysArray = json.getJsonArray("cloudEncryptionKeys");
725+
JsonArray cloudEncryptionKeysArray = json.getJsonArray("cloud_encryption_keys");
726726

727727
assertNotNull(cloudEncryptionKeysArray);
728728
assertEquals(3, cloudEncryptionKeysArray.size());

version.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", "version": "2.22", "publicReleaseRefSpec": [ "^refs/heads/master$", "^refs/heads/v\\d+(?:\\.\\d+)?$" ], "cloudBuild": { "setVersionVariables": true, "buildNumber": { "enabled": true, "includeCommitId": { "when": "always" } } } }
1+
{ "$schema": "https://raw.githubusercontent.com/dotnet/Nerdbank.GitVersioning/master/src/NerdBank.GitVersioning/version.schema.json", "version": "2.23", "publicReleaseRefSpec": [ "^refs/heads/master$", "^refs/heads/v\\d+(?:\\.\\d+)?$" ], "cloudBuild": { "setVersionVariables": true, "buildNumber": { "enabled": true, "includeCommitId": { "when": "always" } } } }

0 commit comments

Comments
 (0)