Skip to content

Commit b1aaacf

Browse files
committed
♻️ Replace experimental override-users-db-header and override-acl-db-header with attached parameters
1 parent c0094bb commit b1aaacf

File tree

8 files changed

+15
-33
lines changed

8 files changed

+15
-33
lines changed

core/src/main/resources/restheart-default-config.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ mongoRealmAuthenticator:
8888
enabled: true
8989
users-db: restheart
9090
users-collection: users
91-
override-users-db-header: null # eg. X-Auth-Db; when present override users-db from request header
9291
prop-id: _id
9392
prop-password: password
9493
json-path-roles: $.roles
@@ -160,7 +159,6 @@ mongoAclAuthorizer:
160159
enabled: true
161160
acl-db: restheart
162161
acl-collection: acl
163-
override-acl-db-header: null # eg. X-Auth-Db; when present override acl-db from request header
164162
# clients with root-role can execute any request
165163
root-role: admin
166164
cache-enabled: true

security/src/main/java/org/restheart/security/authenticators/DenyFilterOnUserPwd.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public void init() {
9292
public boolean resolve(MongoRequest request, MongoResponse response) {
9393
return enabled
9494
&& request.isGet()
95-
&& (this.mra.overrideUsersDbHeader() != null || this.mra.getUsersDb(request).equalsIgnoreCase(request.getDBName())) // if usersdb is overridden then any users collection in any db must be processed
95+
&& (request.attachedParam("override-users-db") != null || this.mra.getUsersDb(request).equalsIgnoreCase(request.getDBName())) // if usersdb is overridden then any users collection in any db must be processed
9696
&& this.usersCollection.equalsIgnoreCase(request.getCollectionName())
9797
&& hasFilterOnPassword(request.getFiltersDocument());
9898
}

security/src/main/java/org/restheart/security/authenticators/MongoRealmAuthenticator.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ public class MongoRealmAuthenticator implements Authenticator {
7575

7676
private String propId = "_id";
7777
private String usersDb;
78-
private String overrideUsersDbHeader = null;
7978
private String usersCollection;
8079
private String propPassword = "password";
8180
private String jsonPathRoles = "$.roles";
@@ -102,7 +101,6 @@ private record CacheKey(String id, String db) {};
102101
public void init() {
103102
this.usersDb = argOrDefault(config, "users-db", "restheart");
104103
this.usersCollection = argOrDefault(config, "users-collection", "users");
105-
this.overrideUsersDbHeader = argOrDefault(config, "override-users-db-header", null);
106104

107105
final String _cacheExpirePolicy = arg(config, "cache-expire-policy");
108106
if (_cacheExpirePolicy != null) {
@@ -550,14 +548,11 @@ public String getUsersDb() {
550548

551549
/**
552550
* @param req
553-
* @return the usersDb taking into account the overrideUsersDbHeader option
551+
* @return the usersDb taking into account the override-users-db attached parameter
554552
*/
555553
public String getUsersDb(final Request<?> req) {
556-
if (this.overrideUsersDbHeader != null && req.getHeaders().contains(this.overrideUsersDbHeader)) {
557-
return req.getHeader(this.overrideUsersDbHeader);
558-
} else {
559-
return this.usersDb;
560-
}
554+
String overrideUsersDb = req.attachedParam("override-users-db");
555+
return overrideUsersDb != null ? overrideUsersDb : this.usersDb;
561556
}
562557

563558
/**
@@ -567,13 +562,6 @@ public void setUsersDb(final String usersDb) {
567562
this.usersDb = usersDb;
568563
}
569564

570-
/**
571-
* @return the overrideUsersDbHeader
572-
*/
573-
public String overrideUsersDbHeader() {
574-
return this.overrideUsersDbHeader;
575-
}
576-
577565
/**
578566
* @return the usersCollection
579567
*/

security/src/main/java/org/restheart/security/authenticators/UserPwdHasher.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,10 @@ public void handle(MongoRequest request, MongoResponse response) throws Exceptio
146146
@Override
147147
public boolean resolve(MongoRequest request, MongoResponse response) {
148148
return enabled
149-
&& request.isHandledBy("mongo")
150-
&& request.isWriteDocument()
151-
&& request.isContentTypeJson()
152-
&& (this.mra.overrideUsersDbHeader() != null || this.mra.getUsersDb(request).equalsIgnoreCase(request.getDBName())) // if usersdb is overridden then any users collection in any db must be processed
153-
&& this.usersCollection.equalsIgnoreCase(request.getCollectionName());
149+
&& request.isHandledBy("mongo")
150+
&& request.isWriteDocument()
151+
&& request.isContentTypeJson()
152+
&& (request.attachedParam("override-users-db") != null || this.mra.getUsersDb(request).equalsIgnoreCase(request.getDBName())) // if usersdb is overridden then any users collection in any db must be processed
153+
&& this.usersCollection.equalsIgnoreCase(request.getCollectionName());
154154
}
155155
}

security/src/main/java/org/restheart/security/authenticators/UserPwdRemover.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ public void handle(MongoRequest request, MongoResponse response) throws Exceptio
142142
public boolean resolve(MongoRequest request, MongoResponse response) {
143143
return enabled
144144
&& request.isGet()
145-
&& (this.mra.overrideUsersDbHeader() != null || this.mra.getUsersDb(request).equalsIgnoreCase(request.getDBName())) // if usersdb is overridden then any users collection in any db must be processed
145+
&& (request.attachedParam("override-users-db") != null || this.mra.getUsersDb(request).equalsIgnoreCase(request.getDBName())) // if usersdb is overridden then any users collection in any db must be processed
146146
&& this.usersCollection.equalsIgnoreCase(request.getCollectionName())
147147
&& !request.isCollectionSize()
148148
&& !request.isCollectionMeta()

security/src/main/java/org/restheart/security/authenticators/UserPwdStrengthEnforcer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ public boolean resolve(MongoRequest request, MongoResponse response) {
196196
&& request.isHandledBy("mongo")
197197
&& request.isWriteDocument()
198198
&& request.isContentTypeJson()
199-
&& (this.mra.overrideUsersDbHeader() != null || this.mra.getUsersDb(request).equalsIgnoreCase(request.getDBName())) // if usersdb is overridden then any users collection in any db must be processed
199+
&& (request.attachedParam("override-users-db") != null || this.mra.getUsersDb(request).equalsIgnoreCase(request.getDBName())) // if usersdb is overridden then any users collection in any db must be processed
200200
&& this.usersCollection.equalsIgnoreCase(request.getCollectionName());
201201
}
202202
}

security/src/main/java/org/restheart/security/authorizers/MongoAclAuthorizer.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ public class MongoAclAuthorizer implements Authorizer {
7676

7777
String aclDb;
7878
String aclCollection;
79-
String overrideAclDbHeader;
8079
private String rootRole = null;
8180
private boolean cacheEnabled = false;
8281
private Integer cacheSize = 1_000; // 1000 entries
@@ -98,7 +97,6 @@ private record CacheKey(String role, String db) {};
9897
public void init() {
9998
this.aclDb = argOrDefault(config, "acl-db", "restheart");
10099
this.aclCollection = argOrDefault(config, "acl-collection", "acl");
101-
this.overrideAclDbHeader = argOrDefault(config, "override-acl-db-header", null);
102100
this.rootRole = argOrDefault(config, "root-role", null);
103101

104102
if (config != null && config.containsKey("cache-enabled")) {
@@ -257,12 +255,10 @@ public boolean isAuthenticationRequired(Request request) {
257255
}
258256
}
259257

258+
260259
private String aclDb(Request<?> req) {
261-
if (this.overrideAclDbHeader != null && req.getHeaders().contains(this.overrideAclDbHeader)) {
262-
return req.getHeader(overrideAclDbHeader);
263-
} else {
264-
return this.aclDb;
265-
}
260+
String overrideAclDb = req.attachedParam("override-acl-db");
261+
return overrideAclDb != null ? overrideAclDb : this.aclDb;
266262
}
267263

268264
private Stream<String> roles(HttpServerExchange exchange) {

security/src/main/java/org/restheart/security/interceptors/RootRoleGuard.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,7 @@ private boolean contains(JsonArray array, String srt) {
162162

163163
@Override
164164
public boolean resolve(MongoRequest request, MongoResponse response) {
165-
if (this.mra.overrideUsersDbHeader() == null) {
165+
if (request.attachedParam("override-users-db") == null) {
166166
return enabled && request.isWriteDocument() && request.getDBName().equals(this.mra.getUsersDb()) && request.getCollectionName().equals(this.usersCollection);
167167
} else {
168168
// when users db can be overridden, all dbs must be checked

0 commit comments

Comments
 (0)