Skip to content

Commit 9b854e2

Browse files
authored
[auth] UserRegistryImpl: Allow registering additional ManagedProviders & Allow field access for subclasses of GenericUser (#5328)
Signed-off-by: Florian Hotze <dev@florianhotze.com>
1 parent 7343711 commit 9b854e2

File tree

2 files changed

+23
-4
lines changed

2 files changed

+23
-4
lines changed

bundles/org.openhab.core/src/main/java/org/openhab/core/auth/GenericUser.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,11 @@
2121
* Represents a generic {@link User} with a set of roles
2222
*
2323
* @author Yannick Schaus - initial contribution
24-
*
2524
*/
2625
@NonNullByDefault
2726
public class GenericUser implements User {
28-
29-
private String name;
30-
private Set<String> roles;
27+
protected String name;
28+
protected Set<String> roles;
3129

3230
/**
3331
* Constructs a user attributed with a set of roles.
@@ -63,4 +61,9 @@ public String getUID() {
6361
public Set<String> getRoles() {
6462
return roles;
6563
}
64+
65+
@Override
66+
public String toString() {
67+
return "User (name=" + name + ", roles=" + String.join(", ", roles) + ")";
68+
}
6669
}

bundles/org.openhab.core/src/main/java/org/openhab/core/internal/auth/UserRegistryImpl.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import javax.crypto.spec.PBEKeySpec;
2727

2828
import org.eclipse.jdt.annotation.NonNullByDefault;
29+
import org.eclipse.jdt.annotation.Nullable;
2930
import org.openhab.core.auth.AuthenticatedUser;
3031
import org.openhab.core.auth.Authentication;
3132
import org.openhab.core.auth.AuthenticationException;
@@ -39,6 +40,8 @@
3940
import org.openhab.core.auth.UserSession;
4041
import org.openhab.core.auth.UsernamePasswordCredentials;
4142
import org.openhab.core.common.registry.AbstractRegistry;
43+
import org.openhab.core.common.registry.ManagedProvider;
44+
import org.openhab.core.common.registry.Provider;
4245
import org.osgi.framework.BundleContext;
4346
import org.osgi.service.component.annotations.Activate;
4447
import org.osgi.service.component.annotations.Component;
@@ -256,6 +259,19 @@ public void removeUserApiToken(User user, UserApiToken userApiToken) {
256259
update(user);
257260
}
258261

262+
@Override
263+
public @Nullable User update(User element) {
264+
String key = element.getName();
265+
Provider<User> provider = getProvider(key);
266+
// If the provider of this element is a ManagedProvider,
267+
// invoke the update method of that provider instead of the default one
268+
// This allows for registering additional ManagedProviders, e.g., for providing LDAP users
269+
if (provider instanceof ManagedProvider<User, ?> managedProvider) {
270+
return managedProvider.update(element);
271+
}
272+
return super.update(element);
273+
}
274+
259275
@Override
260276
public boolean supports(Class<? extends Credentials> type) {
261277
return (UsernamePasswordCredentials.class.isAssignableFrom(type));

0 commit comments

Comments
 (0)