diff --git a/pom.xml b/pom.xml
index bfab878a..f49c532f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,7 @@
1.12.2
5.11.2
- 10.9.0
+ 10.9.4
0.5.10
${project.version}
diff --git a/src/main/java/com/uid2/admin/auth/OktaCustomScope.java b/src/main/java/com/uid2/admin/auth/OktaCustomScope.java
index fd7f930c..c60a0814 100644
--- a/src/main/java/com/uid2/admin/auth/OktaCustomScope.java
+++ b/src/main/java/com/uid2/admin/auth/OktaCustomScope.java
@@ -11,6 +11,7 @@ public enum OktaCustomScope {
SECRET_ROTATION("uid2.admin.secret-rotation", Role.SECRET_ROTATION),
SITE_SYNC("uid2.admin.site-sync", Role.PRIVATE_OPERATOR_SYNC),
METRICS_EXPORT("uid2.admin.metrics-export", Role.METRICS_EXPORT),
+ ENCLAVE_REGISTRAR("uid2.admin.enclave-registrar", Role.ENCLAVE_REGISTRAR),
INVALID("invalid", Role.UNKNOWN);
private final String name;
private final Role role;
diff --git a/src/main/java/com/uid2/admin/vertx/service/EnclaveIdService.java b/src/main/java/com/uid2/admin/vertx/service/EnclaveIdService.java
index ec641370..9e4859ee 100644
--- a/src/main/java/com/uid2/admin/vertx/service/EnclaveIdService.java
+++ b/src/main/java/com/uid2/admin/vertx/service/EnclaveIdService.java
@@ -57,7 +57,7 @@ public void setupRoutes(Router router) {
synchronized (writeLock) {
this.handleEnclaveAdd(ctx);
}
- }, new AuditParams(List.of("name", "protocol", "enclave_id"), Collections.emptyList()), Role.PRIVILEGED));
+ }, new AuditParams(List.of("name", "protocol", "enclave_id"), Collections.emptyList()), Role.PRIVILEGED, Role.ENCLAVE_REGISTRAR));
router.post(API_ENCLAVE_DEL.toString()).blockingHandler(auth.handle((ctx) -> {
synchronized (writeLock) {
this.handleEnclaveDel(ctx);
diff --git a/src/test/java/com/uid2/admin/vertx/EnclaveIdServiceTest.java b/src/test/java/com/uid2/admin/vertx/EnclaveIdServiceTest.java
index c87faea0..e26348ec 100644
--- a/src/test/java/com/uid2/admin/vertx/EnclaveIdServiceTest.java
+++ b/src/test/java/com/uid2/admin/vertx/EnclaveIdServiceTest.java
@@ -96,7 +96,7 @@ public void enclaveId_Add_Success(String protocol, Vertx vertx, VertxTestContext
}
@ParameterizedTest
- @EnumSource(value = Role.class, names = {"PRIVILEGED", "SUPER_USER"}, mode = EnumSource.Mode.EXCLUDE)
+ @EnumSource(value = Role.class, names = {"PRIVILEGED", "SUPER_USER", "ENCLAVE_REGISTRAR"}, mode = EnumSource.Mode.EXCLUDE)
public void enclaveId_Add_NotAuthorized(Role role, Vertx vertx, VertxTestContext vertxTestContext) {
fakeAuth(role);
@@ -238,4 +238,27 @@ public void enclaveId_Delete_NotAuthorized(Role role, Vertx vertx, VertxTestCont
});
}
+ @ParameterizedTest
+ @ValueSource(strings = {
+ "/api/enclave/list",
+ "/api/enclave/metadata",
+ "/api/enclave/del?name=some-name",
+ })
+ public void enclaveId_Endpoints_NotAuthorized_ForEnclaveRegistrar(String url, Vertx vertx, VertxTestContext vertxTestContext) {
+ fakeAuth(Role.ENCLAVE_REGISTRAR);
+
+ // Use GET for list/metadata, POST for delete
+ if (url.contains("/del")) {
+ post(vertx, vertxTestContext, url, "", response -> {
+ assertEquals(401, response.statusCode());
+ vertxTestContext.completeNow();
+ });
+ } else {
+ get(vertx, vertxTestContext, url, response -> {
+ assertEquals(401, response.statusCode());
+ vertxTestContext.completeNow();
+ });
+ }
+ }
+
}