X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=security%2Fplugins%2Forg.argeo.security.ui.admin%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fsecurity%2Fui%2Fadmin%2Feditors%2FArgeoUserEditor.java;h=1c1a3788bd7938656248388c1e5376d28aa9a9f2;hb=1d5afdce3e91054f07ddd3c98309c363b4cf1d46;hp=41e6d4fe7251edc4e46587825b488ea71485a061;hpb=acb6a464eab2729653b3a78f1b5c72f1bc4bc4fb;p=lgpl%2Fargeo-commons.git diff --git a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditor.java b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditor.java index 41e6d4fe7..1c1a3788b 100644 --- a/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditor.java +++ b/security/plugins/org.argeo.security.ui.admin/src/main/java/org/argeo/security/ui/admin/editors/ArgeoUserEditor.java @@ -1,44 +1,79 @@ +/* + * Copyright (C) 2007-2012 Mathieu Baudier + * + * 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.argeo.security.ui.admin.editors; +import javax.jcr.Node; +import javax.jcr.RepositoryException; +import javax.jcr.Session; + import org.argeo.ArgeoException; -import org.argeo.security.ArgeoSecurityService; -import org.argeo.security.ArgeoUser; -import org.argeo.security.SimpleArgeoUser; -import org.argeo.security.nature.SimpleUserNature; +import org.argeo.jcr.ArgeoNames; +import org.argeo.jcr.JcrUtils; +import org.argeo.security.UserAdminService; +import org.argeo.security.jcr.JcrUserDetails; +import org.argeo.security.ui.admin.SecurityAdminPlugin; +import org.argeo.security.ui.admin.views.UsersView; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; +import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PartInitException; import org.eclipse.ui.forms.editor.FormEditor; +import org.springframework.security.GrantedAuthority; /** Editor for an Argeo user. */ public class ArgeoUserEditor extends FormEditor { - public final static String ID = "org.argeo.security.ui.adminArgeoUserEditor"; + public final static String ID = "org.argeo.security.ui.admin.adminArgeoUserEditor"; - private ArgeoUser user; - private ArgeoSecurityService securityService; + private JcrUserDetails userDetails; + private Node userHome; + private UserAdminService userAdminService; + private Session session; public void init(IEditorSite site, IEditorInput input) throws PartInitException { super.init(site, input); String username = ((ArgeoUserEditorInput) getEditorInput()) .getUsername(); - if (username == null) {// new - user = new SimpleArgeoUser(); - user.getUserNatures().put(SimpleUserNature.TYPE, - new SimpleUserNature()); - } else - user = securityService.getUser(username); + userHome = JcrUtils.getUserHome(session, username); + + if (userAdminService.userExists(username)) { + userDetails = (JcrUserDetails) userAdminService + .loadUserByUsername(username); + } else { + GrantedAuthority[] authorities = {}; + try { + userDetails = new JcrUserDetails(session, username, null, + authorities); + } catch (RepositoryException e) { + throw new ArgeoException("Cannot retrieve disabled JCR profile"); + } + } + this.setPartProperty("name", username != null ? username : ""); setPartName(username != null ? username : ""); } protected void addPages() { try { - addPage(new DefaultUserMainPage(this, securityService, user)); - - } catch (PartInitException e) { - throw new ArgeoException("Not able to add page ", e); + addPage(new DefaultUserMainPage(this, + userHome.getNode(ArgeoNames.ARGEO_PROFILE))); + addPage(new UserRolesPage(this, userDetails, userAdminService)); + } catch (Exception e) { + throw new ArgeoException("Cannot add pages", e); } } @@ -46,15 +81,39 @@ public class ArgeoUserEditor extends FormEditor { public void doSave(IProgressMonitor monitor) { // list pages // TODO: make it more generic - findPage(DefaultUserMainPage.ID).doSave(monitor); + DefaultUserMainPage defaultUserMainPage = (DefaultUserMainPage) findPage(DefaultUserMainPage.ID); + if (defaultUserMainPage.isDirty()) { + defaultUserMainPage.doSave(monitor); + String newPassword = defaultUserMainPage.getNewPassword(); + defaultUserMainPage.resetNewPassword(); + if (newPassword != null) + userDetails = userDetails.cloneWithNewPassword(newPassword); + } - if (securityService.userExists(user.getUsername())) - securityService.updateUser(user); - else { - securityService.newUser(user); - setPartName(user.getUsername()); + UserRolesPage userRolesPage = (UserRolesPage) findPage(UserRolesPage.ID); + if (userRolesPage.isDirty()) { + userRolesPage.doSave(monitor); + userDetails = userDetails.cloneWithNewRoles(userRolesPage + .getRoles()); } + + userAdminService.updateUser(userDetails); + + // if (userAdminService.userExists(user.getUsername())) + // userAdminService.updateUser(user); + // else { + // userAdminService.newUser(user); + // setPartName(user.getUsername()); + // } firePropertyChange(PROP_DIRTY); + + userRolesPage.setUserDetails(userDetails); + + // refresh users view + IWorkbench iw = SecurityAdminPlugin.getDefault().getWorkbench(); + UsersView usersView = (UsersView) iw.getActiveWorkbenchWindow() + .getActivePage().findView(UsersView.ID); + usersView.refresh(); } @Override @@ -66,7 +125,16 @@ public class ArgeoUserEditor extends FormEditor { return false; } - public void setSecurityService(ArgeoSecurityService securityService) { - this.securityService = securityService; + public void refresh() { + UserRolesPage userRolesPage = (UserRolesPage) findPage(UserRolesPage.ID); + userRolesPage.refresh(); + } + + public void setUserAdminService(UserAdminService userAdminService) { + this.userAdminService = userAdminService; + } + + public void setSession(Session session) { + this.session = session; } }