All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.uberfire.ext.security.management.client.ClientUserSystemManager Maven / Gradle / Ivy

/*
 * Copyright 2016 Red Hat, Inc. and/or its affiliates.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.uberfire.ext.security.management.client;

import java.util.Collection;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;

import org.jboss.errai.bus.client.api.messaging.Message;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.common.client.api.ErrorCallback;
import org.jboss.errai.common.client.api.RemoteCallback;
import org.jboss.errai.ioc.client.api.AfterInitialization;
import org.jboss.errai.security.shared.api.Group;
import org.jboss.errai.security.shared.api.GroupImpl;
import org.jboss.errai.security.shared.api.Role;
import org.jboss.errai.security.shared.api.RoleImpl;
import org.jboss.errai.security.shared.api.identity.User;
import org.jboss.errai.security.shared.api.identity.UserImpl;
import org.uberfire.client.workbench.widgets.common.ErrorPopupPresenter;
import org.uberfire.ext.security.management.api.Capability;
import org.uberfire.ext.security.management.api.CapabilityStatus;
import org.uberfire.ext.security.management.api.GroupManager;
import org.uberfire.ext.security.management.api.GroupManagerSettings;
import org.uberfire.ext.security.management.api.RoleManager;
import org.uberfire.ext.security.management.api.UserManager;
import org.uberfire.ext.security.management.api.UserManagerSettings;
import org.uberfire.ext.security.management.api.UserSystemManager;
import org.uberfire.ext.security.management.api.service.GroupManagerService;
import org.uberfire.ext.security.management.api.service.RoleManagerService;
import org.uberfire.ext.security.management.api.service.UserManagerService;
import org.uberfire.ext.security.management.api.validation.EntityValidator;
import org.uberfire.ext.security.management.client.validation.ClientGroupValidator;
import org.uberfire.ext.security.management.client.validation.ClientRoleValidator;
import org.uberfire.ext.security.management.client.validation.ClientUserValidator;
import org.uberfire.ext.security.management.impl.UserAttributeImpl;
import org.uberfire.mvp.Command;

/**
 * 

The main client side manager for the user management stuff.

*

* @since 0.8.0 */ @ApplicationScoped public class ClientUserSystemManager implements UserSystemManager { // User management provider settings are immutable and can be cached to avoid some backend service calls. UserManagerSettings userManagerSettings; // Group management provider settings are immutable and can be cached to avoid some backend service calls. GroupManagerSettings groupManagerSettings; // The error presenter. ErrorPopupPresenter errorPopupPresenter; /** * The service caller for the Users Manager. */ private final Caller usersManagerService; /** * The service caller for the Groups Manager. */ private final Caller groupsManagerService; /** * The service caller for the Users Manager. */ private final Caller rolesManagerService; private final ClientSecurityExceptionMessageResolver exceptionMessageResolver; private boolean isActive; protected final ErrorCallback loadErrorCallback = new ErrorCallback() { @Override public boolean error(final Message message, final Throwable throwable) { showError(throwable); ClientUserSystemManager.this.isActive = false; return false; } }; @Inject public ClientUserSystemManager(final Caller usersManagerService, final Caller groupsManagerService, final Caller rolesManagerService, final ClientSecurityExceptionMessageResolver exceptionMessageResolver, final ErrorPopupPresenter errorPopupPresenter) { this.usersManagerService = usersManagerService; this.groupsManagerService = groupsManagerService; this.rolesManagerService = rolesManagerService; this.exceptionMessageResolver = exceptionMessageResolver; this.errorPopupPresenter = errorPopupPresenter; this.isActive = false; } @PostConstruct public void initCache() { initializeCache(() -> ClientUserSystemManager.this.isActive = true, loadErrorCallback); } public UserManager users(RemoteCallback remoteCallback, ErrorCallback errorCallback) { return usersManagerService.call(remoteCallback, errorCallback); } public GroupManager groups(RemoteCallback remoteCallback, ErrorCallback errorCallback) { return groupsManagerService.call(remoteCallback, errorCallback); } public RoleManager roles(RemoteCallback remoteCallback, ErrorCallback errorCallback) { return rolesManagerService.call(remoteCallback, errorCallback); } @Override public UserManager users() { return usersManagerService.call(); } @Override public GroupManager groups() { return groupsManagerService.call(); } @Override public RoleManager roles() { return rolesManagerService.call(); } public boolean isUserCapabilityEnabled(final Capability capability) { if (userManagerSettings != null) { return isCapabilityEnabled(userManagerSettings.getCapabilities(), capability); } return false; } public Collection getUserSupportedAttributes() { return userManagerSettings.getSupportedAttributes(); } public UserManager.UserAttribute getUserSupportedAttribute(final String attributeName) { if (attributeName != null && userManagerSettings != null && userManagerSettings.getSupportedAttributes() != null) { for (final UserManager.UserAttribute attribute : userManagerSettings.getSupportedAttributes()) { if (attributeName.equals(attribute.getName())) { return attribute; } } } return null; } public boolean isGroupCapabilityEnabled(final Capability capability) { if (groupManagerSettings != null) { return isCapabilityEnabled(groupManagerSettings.getCapabilities(), capability); } return false; } public boolean isCapabilityEnabled(final Map capabilities, final Capability capability) { if (capabilities != null) { final CapabilityStatus status = capabilities.get(capability); return status != null && CapabilityStatus.ENABLED.equals(status); } return false; } public Collection getConstrainedGroups() { return groupManagerSettings != null ? groupManagerSettings.getConstrainedGroups() : null; } public User createUser(final String identifier) { if (identifier == null) { return null; } return new UserImpl(identifier); } public UserManager.UserAttribute createUserAttribute(final String name, final boolean isMandatory, boolean isEditable, final String defaultValue) { if (name == null) { return null; } return new UserAttributeImpl(name, isMandatory, isEditable, defaultValue); } public Group createGroup(final String name) { if (name == null) { return null; } return new GroupImpl(name); } public Role createRole(final String name) { if (name == null) { return null; } return new RoleImpl(name); } @Override public EntityValidator usersValidator() { return new ClientUserValidator(); } @Override public EntityValidator groupsValidator() { return new ClientGroupValidator(); } @Override public EntityValidator rolesValidator() { return new ClientRoleValidator(); } @Override public boolean isActive() { return isActive; } /** * Executes the command argument when services are initialized, you can.check the isActive() method after the command execution to check it services are up. * The command argument is ensured to be executed whether services are up or when the initialization has failed. * @param command The command executed when the initialization has finished. */ public void waitForInitialization(final Command command) { if (null != command) { initializeCache(command, (message, throwable) -> { command.execute(); return false; }); } } public UserManagerSettings getUserManagerSettings() { return userManagerSettings; } public GroupManagerSettings getGroupManagerSettings() { return groupManagerSettings; } private void initializeCache(final Command command, final ErrorCallback errorCallback) { // Load user & group management providers' settings. loadUserSettings(() -> loadGroupSettings(new Command() { @Override public void execute() { command.execute(); } }, errorCallback), errorCallback); } /** * Loads the user management provider's settings into cache. * @param callback Load finished callback. */ private void loadUserSettings(final Command callback, final ErrorCallback errorCallback) { if (null == userManagerSettings) { usersManagerService.call(new RemoteCallback() { @Override public void callback(final UserManagerSettings userManagerSettings) { ClientUserSystemManager.this.userManagerSettings = userManagerSettings; if (null != callback) { callback.execute(); } } }, errorCallback).getSettings(); } else { callback.execute(); } } /** * Loads the group management provider's settings into cache. * @param callback Load finished callback. */ private void loadGroupSettings(final Command callback, final ErrorCallback errorCallback) { if (null == groupManagerSettings) { groupsManagerService.call(new RemoteCallback() { @Override public void callback(final GroupManagerSettings groupManagerSettings) { ClientUserSystemManager.this.groupManagerSettings = groupManagerSettings; if (null != callback) { callback.execute(); } } }, errorCallback).getSettings(); } else { callback.execute(); } } void showError(final Throwable throwable) { exceptionMessageResolver.consumeExceptionMessage(throwable, errorPopupPresenter::showMessage); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy