Search in sources :

Example 1 with User

use of org.jboss.hal.config.User in project console by hal.

the class HeaderView method updateRoles.

@Override
public void updateRoles(Environment environment, Settings settings, User user) {
    for (Iterator<HTMLElement> iterator = Elements.iterator(userDropdown); iterator.hasNext(); ) {
        HTMLElement element = iterator.next();
        if (element == logoutItem) {
            continue;
        }
        iterator.remove();
    }
    if (!user.getRoles().isEmpty()) {
        String csr = user.getRoles().stream().sorted(Roles.STANDARD_FIRST.thenComparing(Roles.BY_NAME)).map(Role::getName).collect(joining(", "));
        HTMLElement activeRoles = li().css(static_, CSS.activeRoles).textContent(resources.messages().activeRoles(csr)).title(resources.messages().activeRoles(csr)).element();
        userDropdown.insertBefore(activeRoles, logoutItem);
        userDropdown.insertBefore(divider(), logoutItem);
        if (user.isSuperuser() && environment.getAccessControlProvider() == RBAC) {
            Set<String> runAsRoleSetting = settings.get(RUN_AS).asSet();
            HTMLElement runAs = li().css(static_).textContent(resources.constants().runAs()).element();
            userDropdown.insertBefore(runAs, logoutItem);
            stream(environment.getRoles().spliterator(), false).sorted(Roles.STANDARD_FIRST.thenComparing(Roles.BY_NAME)).forEach(role -> {
                HTMLElement check, name;
                HTMLElement runAsRole = li().add(a().css(clickable).on(click, event -> presenter.runAs(role.getName())).add(check = span().css(fontAwesome("check"), marginRight5).element()).add(name = span().textContent(role.getName()).element())).element();
                if (!runAsRoleSetting.contains(role.getName())) {
                    // NON-NLS
                    check.style.visibility = "hidden";
                }
                if (role.isScoped()) {
                    name.title = role.getBaseRole().getName() + " / " + String.join(", ", role.getScope());
                }
                userDropdown.insertBefore(runAsRole, logoutItem);
            });
            if (runAsRoleSetting != null) {
                HTMLElement clearRunAs = li().add(a().css(clickable).on(click, event -> presenter.clearRunAs()).textContent(resources.constants().clearRunAs())).element();
                userDropdown.insertBefore(clearRunAs, logoutItem);
            }
            userDropdown.insertBefore(divider(), logoutItem);
        }
    }
}
Also used : Environment(org.jboss.hal.config.Environment) Endpoints(org.jboss.hal.config.Endpoints) LoggerFactory(org.slf4j.LoggerFactory) Tooltip(org.jboss.hal.ballroom.Tooltip) FinderSegment(org.jboss.hal.core.finder.FinderSegment) HtmlContentBuilder(org.jboss.gwt.elemento.core.builder.HtmlContentBuilder) ResourceAddress(org.jboss.hal.dmr.ResourceAddress) VALUE(org.jboss.hal.dmr.ModelDescriptionConstants.VALUE) HTMLElement(elemental2.dom.HTMLElement) Arrays.asList(java.util.Arrays.asList) Map(java.util.Map) Message(org.jboss.hal.spi.Message) HalViewImpl(org.jboss.hal.core.mvp.HalViewImpl) User(org.jboss.hal.config.User) Elements.i(org.jboss.gwt.elemento.core.Elements.i) Places(org.jboss.hal.core.mvp.Places) Names(org.jboss.hal.resources.Names) Settings(org.jboss.hal.config.Settings) Set(java.util.Set) CSS(org.jboss.hal.resources.CSS) EventType.click(org.jboss.gwt.elemento.core.EventType.click) FinderPath(org.jboss.hal.core.finder.FinderPath) MAX_BREADCRUMB_VALUE_LENGTH(org.jboss.hal.client.skeleton.HeaderPresenter.MAX_BREADCRUMB_VALUE_LENGTH) Collectors.joining(java.util.stream.Collectors.joining) Roles(org.jboss.hal.config.Roles) List(java.util.List) UIConstants(org.jboss.hal.resources.UIConstants) CSS.nav(org.jboss.hal.resources.CSS.nav) StreamSupport.stream(java.util.stream.StreamSupport.stream) Role(org.jboss.hal.config.Role) Segment(org.jboss.hal.core.modelbrowser.ModelBrowserPath.Segment) Element(elemental2.dom.Element) Strings.abbreviateMiddle(org.jboss.hal.resources.Strings.abbreviateMiddle) FontAwesomeSize.large(org.jboss.hal.resources.FontAwesomeSize.large) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) Strings(com.google.common.base.Strings) HandlerRegistration(com.google.web.bindery.event.shared.HandlerRegistration) ModelBrowser(org.jboss.hal.core.modelbrowser.ModelBrowser) SafeHtmlUtils(com.google.gwt.safehtml.shared.SafeHtmlUtils) AccessControl(org.jboss.hal.core.accesscontrol.AccessControl) Logger(org.slf4j.Logger) RBAC(org.jboss.hal.config.AccessControlProvider.RBAC) Iterator(java.util.Iterator) Ids(org.jboss.hal.resources.Ids) PlaceRequest(com.gwtplatform.mvp.shared.proxy.PlaceRequest) DropdownItem(org.jboss.hal.core.finder.FinderSegment.DropdownItem) ModelBrowserPath(org.jboss.hal.core.modelbrowser.ModelBrowserPath) FinderContext(org.jboss.hal.core.finder.FinderContext) HTMLLIElement(elemental2.dom.HTMLLIElement) Elements.nav(org.jboss.gwt.elemento.core.Elements.nav) NameTokens(org.jboss.hal.meta.token.NameTokens) Resources(org.jboss.hal.resources.Resources) EventType.bind(org.jboss.gwt.elemento.core.EventType.bind) RUN_AS(org.jboss.hal.config.Settings.Key.RUN_AS) Elements(org.jboss.gwt.elemento.core.Elements) HTMLElement(elemental2.dom.HTMLElement)

Example 2 with User

use of org.jboss.hal.config.User in project console by hal.

the class AccessControl method reload.

void reload(Callback callback) {
    reset();
    List<Operation> operations = new ArrayList<>();
    operations.add(new Operation.Builder(AddressTemplates.root(), READ_RESOURCE_OPERATION).param(INCLUDE_RUNTIME, true).param(ATTRIBUTES_ONLY, true).build());
    if (!environment.isStandalone()) {
        operations.add(new Operation.Builder(AddressTemplates.root(), READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, HOST_SCOPED_ROLE).param(RECURSIVE, true).build());
        operations.add(new Operation.Builder(AddressTemplates.root(), READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, SERVER_GROUP_SCOPED_ROLE).param(RECURSIVE, true).build());
    }
    operations.add(new Operation.Builder(AddressTemplates.root(), READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, ROLE_MAPPING).param(RECURSIVE, true).build());
    dispatcher.execute(new Composite(operations), (CompositeResult result) -> {
        int step = 0;
        ModelNode attributes = result.step(step++).get(RESULT);
        AccessControlProvider accessControlProvider = ModelNodeHelper.asEnumValue(attributes, PROVIDER, AccessControlProvider::valueOf, SIMPLE);
        environment.setAccessControlProvider(accessControlProvider);
        attributes.get(STANDARD_ROLE_NAMES).asList().stream().map(node -> new Role(node.asString())).forEach(roles::add);
        if (!environment.isStandalone()) {
            result.step(step++).get(RESULT).asPropertyList().stream().map(property -> scopedRole(property, Role.Type.HOST, HOSTS)).forEach(roles::add);
            result.step(step++).get(RESULT).asPropertyList().stream().map(property -> scopedRole(property, Role.Type.SERVER_GROUP, SERVER_GROUPS)).forEach(roles::add);
        }
        // noinspection UnusedAssignment
        result.step(step++).get(RESULT).asPropertyList().forEach(p1 -> {
            Role role = roles.get(Ids.role(p1.getName()));
            if (role != null) {
                ModelNode assignmentNode = p1.getValue();
                if (assignmentNode.hasDefined(INCLUDE_ALL)) {
                    role.setIncludeAll(assignmentNode.get(INCLUDE_ALL).asBoolean());
                }
                if (assignmentNode.hasDefined(INCLUDE)) {
                    assignmentNode.get(INCLUDE).asPropertyList().forEach(p2 -> addAssignment(p2, role, true));
                }
                if (assignmentNode.hasDefined(EXCLUDE)) {
                    assignmentNode.get(EXCLUDE).asPropertyList().forEach(p2 -> addAssignment(p2, role, false));
                }
            } else {
                logger.error("Cannot add assignment for role {}: No matching role found!", p1.getName());
            }
        });
        // sync with current user
        String currentUserId = Ids.principal(Principal.Type.USER.name().toLowerCase(), currentUser.getName());
        Principal currentPrincipal = principals.get(currentUserId);
        if (currentPrincipal != null) {
            Set<Role> currentRoles = assignments.byPrincipal(currentPrincipal).map(Assignment::getRole).collect(toSet());
            currentUser.refreshRoles(currentRoles);
        }
        callback.execute();
    });
}
Also used : ModelNode(org.jboss.hal.dmr.ModelNode) Environment(org.jboss.hal.config.Environment) MessageEvent(org.jboss.hal.spi.MessageEvent) AccessControlProvider(org.jboss.hal.config.AccessControlProvider) LoggerFactory(org.slf4j.LoggerFactory) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) Property(org.jboss.hal.dmr.Property) Message(org.jboss.hal.spi.Message) User(org.jboss.hal.config.User) SIMPLE(org.jboss.hal.config.AccessControlProvider.SIMPLE) Collectors.toSet(java.util.stream.Collectors.toSet) Logger(org.slf4j.Logger) RBAC(org.jboss.hal.config.AccessControlProvider.RBAC) CompositeResult(org.jboss.hal.dmr.CompositeResult) Operation(org.jboss.hal.dmr.Operation) Ids(org.jboss.hal.resources.Ids) Set(java.util.Set) EventBus(com.google.web.bindery.event.shared.EventBus) DialogFactory(org.jboss.hal.ballroom.dialog.DialogFactory) Roles(org.jboss.hal.config.Roles) Composite(org.jboss.hal.dmr.Composite) List(java.util.List) Dispatcher(org.jboss.hal.dmr.dispatch.Dispatcher) Callback(org.jboss.hal.spi.Callback) Resources(org.jboss.hal.resources.Resources) ModelDescriptionConstants(org.jboss.hal.dmr.ModelDescriptionConstants) Role(org.jboss.hal.config.Role) ModelNodeHelper(org.jboss.hal.dmr.ModelNodeHelper) Composite(org.jboss.hal.dmr.Composite) CompositeResult(org.jboss.hal.dmr.CompositeResult) ArrayList(java.util.ArrayList) AccessControlProvider(org.jboss.hal.config.AccessControlProvider) Operation(org.jboss.hal.dmr.Operation) Role(org.jboss.hal.config.Role) ModelNode(org.jboss.hal.dmr.ModelNode)

Example 3 with User

use of org.jboss.hal.config.User in project console by hal.

the class ReadEnvironment method call.

@Override
public Completable call(FlowContext context) {
    logger.debug("Read environment");
    Keycloak keycloak = keycloakHolder.getKeycloak();
    environment.setSingleSignOn(keycloak != null);
    if (keycloak != null) {
        logger.debug("Keycloak token: {}", keycloak.token);
    }
    List<Operation> ops = new ArrayList<>();
    ops.add(new Operation.Builder(ResourceAddress.root(), READ_RESOURCE_OPERATION).param(ATTRIBUTES_ONLY, true).param(INCLUDE_RUNTIME, true).build());
    ops.add(new Operation.Builder(ResourceAddress.root(), WHOAMI).param(VERBOSE, true).build());
    ops.add(new Operation.Builder(ResourceAddress.root(), READ_CHILDREN_RESOURCES_OPERATION).param(CHILD_TYPE, CORE_SERVICE).param(RECURSIVE, false).build());
    return dispatcher.execute(new Composite(ops)).doOnSuccess((CompositeResult result) -> {
        ModelNode node = result.step(0).get(RESULT);
        // operation mode
        OperationMode operationMode = asEnumValue(node, LAUNCH_TYPE, (name) -> OperationMode.valueOf(name), OperationMode.UNDEFINED);
        environment.setOperationMode(operationMode);
        logger.debug("Operation mode: {}", operationMode);
        // name and org
        if (node.get(NAME).isDefined()) {
            String name = node.get(NAME).asString();
            environment.setName(name);
        }
        String orgAttribute = environment.isStandalone() ? ORGANIZATION : DOMAIN_ORGANIZATION;
        if (node.get(orgAttribute).isDefined()) {
            String org = node.get(orgAttribute).asString();
            environment.setOrganization(org);
        }
        // server info
        environment.setInstanceInfo(node.get(PRODUCT_NAME).asString(), node.get(PRODUCT_VERSION).asString(), node.get(RELEASE_CODENAME).asString(), node.get(RELEASE_VERSION).asString());
        // management version
        Version version = ManagementModel.parseVersion(node);
        environment.setManagementVersion(version);
        logger.debug("Management model version: {}", version);
        if (environment.isStandalone()) {
            Server.STANDALONE.addServerAttributes(node);
        }
        // user info
        if (environment.isSingleSignOn()) {
            user.setName(keycloak.userProfile.username);
            // are not supported on the javascript side when run in the browser.
            if (keycloak.realmAccess != null && keycloak.realmAccess.roles != null) {
                for (int i = 0; i < keycloak.realmAccess.roles.length; i++) {
                    String role = keycloak.realmAccess.roles[i];
                    user.addRole(new Role(role));
                }
            }
        } else {
            ModelNode whoami = result.step(1).get(RESULT);
            String username = whoami.get("identity").get("username").asString();
            user.setName(username);
            if (whoami.hasDefined("mapped-roles")) {
                List<ModelNode> roles = whoami.get("mapped-roles").asList();
                for (ModelNode role : roles) {
                    String roleName = role.asString();
                    user.addRole(new Role(roleName));
                }
            }
        }
        user.setAuthenticated(true);
        logger.debug("User info: {} {}", user.getName(), user.getRoles());
        ModelNode step = result.step(2).get(RESULT);
        environment.setPatchingEnabled(!environment.isStandalone() || step.get(PATCHING).isDefined());
    }).toCompletable();
}
Also used : OperationMode(org.jboss.hal.config.OperationMode) ModelNode(org.jboss.hal.dmr.ModelNode) Completable(rx.Completable) Version(org.jboss.hal.config.Version) Logger(org.slf4j.Logger) CompositeResult(org.jboss.hal.dmr.CompositeResult) Environment(org.jboss.hal.config.Environment) Operation(org.jboss.hal.dmr.Operation) LoggerFactory(org.slf4j.LoggerFactory) KeycloakHolder(org.jboss.hal.config.keycloak.KeycloakHolder) ResourceAddress(org.jboss.hal.dmr.ResourceAddress) ManagementModel(org.jboss.hal.meta.ManagementModel) FlowContext(org.jboss.hal.flow.FlowContext) ModelNodeHelper.asEnumValue(org.jboss.hal.dmr.ModelNodeHelper.asEnumValue) ArrayList(java.util.ArrayList) Inject(javax.inject.Inject) Composite(org.jboss.hal.dmr.Composite) List(java.util.List) Dispatcher(org.jboss.hal.dmr.dispatch.Dispatcher) ModelDescriptionConstants(org.jboss.hal.dmr.ModelDescriptionConstants) Role(org.jboss.hal.config.Role) Keycloak(org.jboss.hal.config.keycloak.Keycloak) User(org.jboss.hal.config.User) Server(org.jboss.hal.core.runtime.server.Server) Composite(org.jboss.hal.dmr.Composite) CompositeResult(org.jboss.hal.dmr.CompositeResult) ArrayList(java.util.ArrayList) Operation(org.jboss.hal.dmr.Operation) Role(org.jboss.hal.config.Role) Version(org.jboss.hal.config.Version) ArrayList(java.util.ArrayList) List(java.util.List) Keycloak(org.jboss.hal.config.keycloak.Keycloak) ModelNode(org.jboss.hal.dmr.ModelNode) OperationMode(org.jboss.hal.config.OperationMode)

Example 4 with User

use of org.jboss.hal.config.User in project console by hal.

the class MembershipColumn method columnActionHandler.

private ColumnActionHandler<Assignment> columnActionHandler(Principal principal, boolean include) {
    return column -> {
        Role role = findRole(getFinder().getContext().getPath());
        if (role != null) {
            series(new FlowContext(progress.get()), new CheckRoleMapping(dispatcher, role), new AddRoleMapping(dispatcher, role, status -> status == 404), new AddAssignment(dispatcher, role, principal, include)).subscribe(new org.jboss.hal.core.SuccessfulOutcome<FlowContext>(eventBus, resources) {

                @Override
                public void onSuccess(FlowContext context) {
                    String type = principal.getType() == Principal.Type.USER ? resources.constants().user() : resources.constants().group();
                    SafeHtml message = include ? resources.messages().assignmentIncludeSuccess(type, principal.getName()) : resources.messages().assignmentExcludeSuccess(type, principal.getName());
                    MessageEvent.fire(eventBus, Message.success(message));
                    accessControl.reload(() -> {
                        refresh(RefreshMode.RESTORE_SELECTION);
                        if (isCurrentUser(principal)) {
                            eventBus.fireEvent(new UserChangedEvent());
                        }
                    });
                }
            });
        }
    };
}
Also used : ColumnActionHandler(org.jboss.hal.core.finder.ColumnActionHandler) Provider(javax.inject.Provider) AsyncColumn(org.jboss.hal.spi.AsyncColumn) ItemActionFactory(org.jboss.hal.core.finder.ItemActionFactory) MessageEvent(org.jboss.hal.spi.MessageEvent) ColumnAction(org.jboss.hal.core.finder.ColumnAction) ItemAction(org.jboss.hal.core.finder.ItemAction) ItemDisplay(org.jboss.hal.core.finder.ItemDisplay) FinderSegment(org.jboss.hal.core.finder.FinderSegment) ResourceAddress(org.jboss.hal.dmr.ResourceAddress) UserChangedEvent(org.jboss.hal.config.UserChangedEvent) FlowContext(org.jboss.hal.flow.FlowContext) ArrayList(java.util.ArrayList) Collections.singletonList(java.util.Collections.singletonList) Inject(javax.inject.Inject) AddRoleMapping(org.jboss.hal.client.accesscontrol.AccessControlTasks.AddRoleMapping) Progress(org.jboss.hal.flow.Progress) HTMLElement(elemental2.dom.HTMLElement) Message(org.jboss.hal.spi.Message) FinderColumn(org.jboss.hal.core.finder.FinderColumn) User(org.jboss.hal.config.User) Comparator.comparing(java.util.Comparator.comparing) Collectors.toSet(java.util.stream.Collectors.toSet) CheckRoleMapping(org.jboss.hal.client.accesscontrol.AccessControlTasks.CheckRoleMapping) Operation(org.jboss.hal.dmr.Operation) Ids(org.jboss.hal.resources.Ids) INCLUDE_TEMPLATE(org.jboss.hal.client.accesscontrol.AddressTemplates.INCLUDE_TEMPLATE) EXCLUDE_TEMPLATE(org.jboss.hal.client.accesscontrol.AddressTemplates.EXCLUDE_TEMPLATE) REMOVE(org.jboss.hal.dmr.ModelDescriptionConstants.REMOVE) Set(java.util.Set) EventBus(com.google.web.bindery.event.shared.EventBus) AddAssignment(org.jboss.hal.client.accesscontrol.AccessControlTasks.AddAssignment) FinderPath(org.jboss.hal.core.finder.FinderPath) Sets(com.google.common.collect.Sets) List(java.util.List) Dispatcher(org.jboss.hal.dmr.dispatch.Dispatcher) Collectors.toList(java.util.stream.Collectors.toList) Resources(org.jboss.hal.resources.Resources) Flow.series(org.jboss.hal.flow.Flow.series) Role(org.jboss.hal.config.Role) Finder(org.jboss.hal.core.finder.Finder) Footer(org.jboss.hal.spi.Footer) SafeHtml(com.google.gwt.safehtml.shared.SafeHtml) Elements.span(org.jboss.gwt.elemento.core.Elements.span) CSS.fontAwesome(org.jboss.hal.resources.CSS.fontAwesome) Role(org.jboss.hal.config.Role) UserChangedEvent(org.jboss.hal.config.UserChangedEvent) AddRoleMapping(org.jboss.hal.client.accesscontrol.AccessControlTasks.AddRoleMapping) AddAssignment(org.jboss.hal.client.accesscontrol.AccessControlTasks.AddAssignment) SafeHtml(com.google.gwt.safehtml.shared.SafeHtml) FlowContext(org.jboss.hal.flow.FlowContext) CheckRoleMapping(org.jboss.hal.client.accesscontrol.AccessControlTasks.CheckRoleMapping)

Aggregations

ArrayList (java.util.ArrayList)4 List (java.util.List)4 Inject (javax.inject.Inject)4 Role (org.jboss.hal.config.Role)4 User (org.jboss.hal.config.User)4 Set (java.util.Set)3 Environment (org.jboss.hal.config.Environment)3 Operation (org.jboss.hal.dmr.Operation)3 ResourceAddress (org.jboss.hal.dmr.ResourceAddress)3 Dispatcher (org.jboss.hal.dmr.dispatch.Dispatcher)3 Ids (org.jboss.hal.resources.Ids)3 Logger (org.slf4j.Logger)3 LoggerFactory (org.slf4j.LoggerFactory)3 EventBus (com.google.web.bindery.event.shared.EventBus)2 HTMLElement (elemental2.dom.HTMLElement)2 Collectors.toSet (java.util.stream.Collectors.toSet)2 RBAC (org.jboss.hal.config.AccessControlProvider.RBAC)2 Roles (org.jboss.hal.config.Roles)2 Composite (org.jboss.hal.dmr.Composite)2 CompositeResult (org.jboss.hal.dmr.CompositeResult)2