From: Bruno Sinou Date: Tue, 25 Oct 2016 15:45:06 +0000 (+0000) Subject: Refactor and clean userAdminUtils X-Git-Tag: argeo-commons-2.1.50~8 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;h=d53071455192a97322935a911c9fbbfd92084912;p=lgpl%2Fargeo-commons.git Refactor and clean userAdminUtils git-svn-id: https://svn.argeo.org/commons/trunk@9284 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/DeleteGroups.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/DeleteGroups.java index 59a76226e..3e8d12fc2 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/DeleteGroups.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/DeleteGroups.java @@ -22,7 +22,7 @@ import java.util.List; import org.argeo.cms.ui.workbench.WorkbenchUiPlugin; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; import org.argeo.cms.ui.workbench.internal.useradmin.parts.UserEditorInput; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -38,8 +38,7 @@ import org.osgi.service.useradmin.UserAdminEvent; /** Delete the selected groups */ public class DeleteGroups extends AbstractHandler { - public final static String ID = WorkbenchUiPlugin.PLUGIN_ID - + ".deleteGroups"; + public final static String ID = WorkbenchUiPlugin.PLUGIN_ID + ".deleteGroups"; /* DEPENDENCY INJECTION */ private UserAdminWrapper userAdminWrapper; @@ -55,22 +54,19 @@ public class DeleteGroups extends AbstractHandler { StringBuilder builder = new StringBuilder(); while (it.hasNext()) { Group currGroup = it.next(); - String groupName = UserAdminUtils.getUsername(currGroup); + String groupName = UserAdminUtils.getUserLocalId(currGroup.getName()); // TODO add checks builder.append(groupName).append("; "); groups.add(currGroup); } - if (!MessageDialog.openQuestion(HandlerUtil.getActiveShell(event), - "Delete Groups", - "Are you sure that you " + "want to delete these groups?\n" - + builder.substring(0, builder.length() - 2))) + if (!MessageDialog.openQuestion(HandlerUtil.getActiveShell(event), "Delete Groups", "Are you sure that you " + + "want to delete these groups?\n" + builder.substring(0, builder.length() - 2))) return null; userAdminWrapper.beginTransactionIfNeeded(); UserAdmin userAdmin = userAdminWrapper.getUserAdmin(); - IWorkbenchPage iwp = HandlerUtil.getActiveWorkbenchWindow(event) - .getActivePage(); + IWorkbenchPage iwp = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(); for (Group group : groups) { String groupName = group.getName(); // TODO find a way to close the editor cleanly if opened. Cannot be @@ -86,8 +82,7 @@ public class DeleteGroups extends AbstractHandler { // Update the view for (Group group : groups) { - userAdminWrapper.notifyListeners(new UserAdminEvent(null, - UserAdminEvent.ROLE_REMOVED, group)); + userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_REMOVED, group)); } return null; diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/DeleteUsers.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/DeleteUsers.java index cec30f02a..ee366483a 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/DeleteUsers.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/DeleteUsers.java @@ -22,7 +22,7 @@ import java.util.List; import org.argeo.cms.ui.workbench.WorkbenchUiPlugin; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; import org.argeo.cms.ui.workbench.internal.useradmin.parts.UserEditorInput; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -55,10 +55,9 @@ public class DeleteUsers extends AbstractHandler { while (it.hasNext()) { User currUser = it.next(); - String userName = UserAdminUtils.getUsername(currUser); + String userName = UserAdminUtils.getUserLocalId(currUser.getName()); if (UserAdminUtils.isCurrentUser(currUser)) { - MessageDialog.openError(HandlerUtil.getActiveShell(event), - "Deletion forbidden", + MessageDialog.openError(HandlerUtil.getActiveShell(event), "Deletion forbidden", "You cannot delete your own user this way."); return null; } @@ -66,17 +65,13 @@ public class DeleteUsers extends AbstractHandler { users.add(currUser); } - if (!MessageDialog.openQuestion( - HandlerUtil.getActiveShell(event), - "Delete Users", - "Are you sure that you want to delete these users?\n" - + builder.substring(0, builder.length() - 2))) + if (!MessageDialog.openQuestion(HandlerUtil.getActiveShell(event), "Delete Users", + "Are you sure that you want to delete these users?\n" + builder.substring(0, builder.length() - 2))) return null; userAdminWrapper.beginTransactionIfNeeded(); UserAdmin userAdmin = userAdminWrapper.getUserAdmin(); - IWorkbenchPage iwp = HandlerUtil.getActiveWorkbenchWindow(event) - .getActivePage(); + IWorkbenchPage iwp = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(); for (User user : users) { String userName = user.getName(); @@ -92,8 +87,7 @@ public class DeleteUsers extends AbstractHandler { userAdminWrapper.commitOrNotifyTransactionStateChange(); for (User user : users) { - userAdminWrapper.notifyListeners(new UserAdminEvent(null, - UserAdminEvent.ROLE_REMOVED, user)); + userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_REMOVED, user)); } return null; } diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/NewUser.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/NewUser.java index a5a41f501..e6072f178 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/NewUser.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/commands/NewUser.java @@ -26,7 +26,7 @@ import javax.naming.ldap.Rdn; import org.argeo.cms.CmsException; import org.argeo.cms.ui.workbench.WorkbenchUiPlugin; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.naming.LdapAttrs; diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java index 306f88cce..6fe6e1ab2 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupMainPage.java @@ -32,7 +32,7 @@ import org.argeo.cms.ui.workbench.internal.useradmin.providers.RoleIconLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserFilter; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserNameLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserTableDefaultDClickListener; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.argeo.eclipse.ui.ColumnDefinition; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.parts.LdifUsersTable; diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupsView.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupsView.java index 8cb284134..6ae12d9df 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupsView.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/GroupsView.java @@ -21,6 +21,7 @@ import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; +import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.ui.workbench.WorkbenchUiPlugin; import org.argeo.cms.ui.workbench.internal.useradmin.UiUserAdminListener; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; @@ -30,7 +31,6 @@ import org.argeo.cms.ui.workbench.internal.useradmin.providers.RoleIconLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserDragListener; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserNameLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserTableDefaultDClickListener; -import org.argeo.cms.util.useradmin.UserAdminUtils; import org.argeo.eclipse.ui.ColumnDefinition; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.parts.LdifUsersTable; @@ -75,7 +75,7 @@ public class GroupsView extends ViewPart implements ArgeoNames { public void createPartControl(Composite parent) { parent.setLayout(EclipseUiUtils.noSpaceGridLayout()); - boolean isAdmin = UserAdminUtils.isUserInRole(NodeConstants.ROLE_ADMIN); + boolean isAdmin = CurrentUser.isInRole(NodeConstants.ROLE_ADMIN); // Define the displayed columns columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 26)); diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java index 19039fa0f..4fade3804 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserBatchUpdateWizard.java @@ -11,12 +11,13 @@ import javax.transaction.UserTransaction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; +import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; import org.argeo.cms.ui.workbench.internal.useradmin.providers.CommonNameLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.DomainNameLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.MailLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserNameLP; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.argeo.eclipse.ui.ColumnDefinition; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.parts.LdifUsersTable; @@ -415,7 +416,7 @@ public class UserBatchUpdateWizard extends Wizard { 200)); // Only show technical DN to admin - if (UserAdminUtils.isUserInRole(NodeConstants.ROLE_ADMIN)) + if (CurrentUser.isInRole(NodeConstants.ROLE_ADMIN)) columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name", 300)); @@ -530,7 +531,7 @@ public class UserBatchUpdateWizard extends Wizard { columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 200)); // Only show technical DN to admin - if (UserAdminUtils.isUserInRole(NodeConstants.ROLE_ADMIN)) + if (CurrentUser.isInRole(NodeConstants.ROLE_ADMIN)) columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name", 300)); userTableCmp = new ChosenUsersTableViewer(pageCmp, SWT.MULTI diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserEditor.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserEditor.java index 41fadac4e..c63e120ec 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserEditor.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserEditor.java @@ -22,7 +22,7 @@ import org.argeo.cms.CmsException; import org.argeo.cms.ui.workbench.WorkbenchUiPlugin; import org.argeo.cms.ui.workbench.internal.useradmin.UiUserAdminListener; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.argeo.naming.LdapAttrs; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.events.ModifyEvent; diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserMainPage.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserMainPage.java index 13a7196a5..f7b4ef758 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserMainPage.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UserMainPage.java @@ -20,6 +20,7 @@ import java.util.Iterator; import java.util.List; import org.argeo.cms.CmsException; +import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.ui.workbench.internal.useradmin.SecurityAdminImages; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; import org.argeo.cms.ui.workbench.internal.useradmin.parts.UserEditor.GroupChangeListener; @@ -30,7 +31,7 @@ import org.argeo.cms.ui.workbench.internal.useradmin.providers.RoleIconLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserFilter; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserNameLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserTableDefaultDClickListener; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.argeo.eclipse.ui.ColumnDefinition; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.parts.LdifUsersTable; @@ -129,11 +130,9 @@ public class UserMainPage extends FormPage implements ArgeoNames { final Text firstName = createLT(tk, body, "First name", UserAdminUtils.getProperty(user, LdapAttrs.givenName.name())); - final Text lastName = createLT(tk, body, "Last name", - UserAdminUtils.getProperty(user, LdapAttrs.sn.name())); + final Text lastName = createLT(tk, body, "Last name", UserAdminUtils.getProperty(user, LdapAttrs.sn.name())); - final Text email = createLT(tk, body, "Email", - UserAdminUtils.getProperty(user, LdapAttrs.mail.name())); + final Text email = createLT(tk, body, "Email", UserAdminUtils.getProperty(user, LdapAttrs.mail.name())); // create form part (controller) AbstractFormPart part = new SectionPart((Section) body.getParent()) { @@ -142,8 +141,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { @Override public void initialize(IManagedForm form) { super.initialize(form); - listener = editor.new MainInfoListener(parent.getDisplay(), - this); + listener = editor.new MainInfoListener(parent.getDisplay(), this); userAdminWrapper.addListener(listener); } @@ -156,29 +154,20 @@ public class UserMainPage extends FormPage implements ArgeoNames { @SuppressWarnings("unchecked") public void commit(boolean onSave) { // TODO Sanity checks (mail validity...) - user.getProperties().put(LdapAttrs.givenName.name(), - firstName.getText()); - user.getProperties().put(LdapAttrs.sn.name(), - lastName.getText()); - user.getProperties().put(LdapAttrs.cn.name(), - commonName.getText()); - user.getProperties() - .put(LdapAttrs.mail.name(), email.getText()); + user.getProperties().put(LdapAttrs.givenName.name(), firstName.getText()); + user.getProperties().put(LdapAttrs.sn.name(), lastName.getText()); + user.getProperties().put(LdapAttrs.cn.name(), commonName.getText()); + user.getProperties().put(LdapAttrs.mail.name(), email.getText()); super.commit(onSave); } @Override public void refresh() { - distinguishedName.setText(UserAdminUtils.getProperty(user, - LdapAttrs.uid.name())); - commonName.setText(UserAdminUtils.getProperty(user, - LdapAttrs.cn.name())); - firstName.setText(UserAdminUtils.getProperty(user, - LdapAttrs.givenName.name())); - lastName.setText(UserAdminUtils.getProperty(user, - LdapAttrs.sn.name())); - email.setText(UserAdminUtils.getProperty(user, - LdapAttrs.mail.name())); + distinguishedName.setText(UserAdminUtils.getProperty(user, LdapAttrs.uid.name())); + commonName.setText(UserAdminUtils.getProperty(user, LdapAttrs.cn.name())); + firstName.setText(UserAdminUtils.getProperty(user, LdapAttrs.givenName.name())); + lastName.setText(UserAdminUtils.getProperty(user, LdapAttrs.sn.name())); + email.setText(UserAdminUtils.getProperty(user, LdapAttrs.mail.name())); refreshFormTitle(user); super.refresh(); } @@ -225,8 +214,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { AbstractFormPart part = new SectionPart((Section) body.getParent()) { @SuppressWarnings("unchecked") public void commit(boolean onSave) { - if (!password1.getText().equals("") - || !password2.getText().equals("")) { + if (!password1.getText().equals("") || !password2.getText().equals("")) { if (password1.getText().equals(password2.getText())) { char[] newPassword = password1.getText().toCharArray(); // userAdminWrapper.beginTransactionIfNeeded(); @@ -254,23 +242,19 @@ public class UserMainPage extends FormPage implements ArgeoNames { Composite body = (Composite) section.getClient(); body.setLayout(EclipseUiUtils.noSpaceGridLayout()); - boolean isAdmin = UserAdminUtils.isUserInRole(NodeConstants.ROLE_ADMIN); + boolean isAdmin = CurrentUser.isInRole(NodeConstants.ROLE_ADMIN); // Displayed columns List columnDefs = new ArrayList(); columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 0, 24)); - columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", - 150)); - columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain Name", - 200)); + columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", 150)); + columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain Name", 200)); // Only show technical DN to administrators if (isAdmin) - columnDefs.add(new ColumnDefinition(new UserNameLP(), - "Distinguished Name", 120)); + columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name", 120)); // Create and configure the table - final LdifUsersTable userViewerCmp = new MyUserTableViewer(body, - SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, user); + final LdifUsersTable userViewerCmp = new MyUserTableViewer(body, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, user); userViewerCmp.setColumnDefinitions(columnDefs); if (isAdmin) @@ -286,8 +270,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { userViewer.addDoubleClickListener(new UserTableDefaultDClickListener()); int operations = DND.DROP_COPY | DND.DROP_MOVE; Transfer[] tt = new Transfer[] { TextTransfer.getInstance() }; - GroupDropListener dropL = new GroupDropListener(userAdminWrapper, - userViewer, user); + GroupDropListener dropL = new GroupDropListener(userAdminWrapper, userViewer, user); userViewer.addDropSupport(operations, tt, dropL); SectionPart part = new SectionPart((Section) body.getParent()) { @@ -297,8 +280,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { @Override public void initialize(IManagedForm form) { super.initialize(form); - listener = editor.new GroupChangeListener(parent.getDisplay(), - this); + listener = editor.new GroupChangeListener(parent.getDisplay(), this); userAdminWrapper.addListener(listener); } @@ -347,8 +329,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { @Override public void widgetSelected(SelectionEvent e) { - userFilter.setShowSystemRole(showSystemRoleBtn - .getSelection()); + userFilter.setShowSystemRole(showSystemRoleBtn.getSelection()); refresh(); } }); @@ -368,13 +349,11 @@ public class UserMainPage extends FormPage implements ArgeoNames { } } - private void addRemoveAbitily(SectionPart sectionPart, - TableViewer userViewer, User user) { + private void addRemoveAbitily(SectionPart sectionPart, TableViewer userViewer, User user) { Section section = sectionPart.getSection(); ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT); ToolBar toolbar = toolBarManager.createControl(section); - final Cursor handCursor = new Cursor(section.getDisplay(), - SWT.CURSOR_HAND); + final Cursor handCursor = new Cursor(section.getDisplay(), SWT.CURSOR_HAND); toolbar.setCursor(handCursor); toolbar.addDisposeListener(new DisposeListener() { private static final long serialVersionUID = 3882131405820522925L; @@ -386,10 +365,8 @@ public class UserMainPage extends FormPage implements ArgeoNames { } }); - String tooltip = "Remove " + UserAdminUtils.getUsername(user) - + " from the below selected groups"; - Action action = new RemoveMembershipAction(userViewer, user, tooltip, - SecurityAdminImages.ICON_REMOVE_DESC); + String tooltip = "Remove " + UserAdminUtils.getUserLocalId(user.getName()) + " from the below selected groups"; + Action action = new RemoveMembershipAction(userViewer, user, tooltip, SecurityAdminImages.ICON_REMOVE_DESC); toolBarManager.add(action); toolBarManager.update(true); section.setTextClient(toolbar); @@ -401,8 +378,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { private final TableViewer userViewer; private final User user; - RemoveMembershipAction(TableViewer userViewer, User user, String name, - ImageDescriptor img) { + RemoveMembershipAction(TableViewer userViewer, User user, String name, ImageDescriptor img) { super(name, img); this.userViewer = userViewer; this.user = user; @@ -428,8 +404,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { } userAdminWrapper.commitOrNotifyTransactionStateChange(); for (Group group : groups) { - userAdminWrapper.notifyListeners(new UserAdminEvent(null, - UserAdminEvent.ROLE_CHANGED, group)); + userAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, group)); } } } @@ -444,16 +419,14 @@ public class UserMainPage extends FormPage implements ArgeoNames { private final UserAdminWrapper myUserAdminWrapper; private final User myUser; - public GroupDropListener(UserAdminWrapper userAdminWrapper, - Viewer userViewer, User user) { + public GroupDropListener(UserAdminWrapper userAdminWrapper, Viewer userViewer, User user) { super(userViewer); this.myUserAdminWrapper = userAdminWrapper; this.myUser = user; } @Override - public boolean validateDrop(Object target, int operation, - TransferData transferType) { + public boolean validateDrop(Object target, int operation, TransferData transferType) { // Target is always OK in a list only view // TODO check if not a string boolean validDrop = true; @@ -473,8 +446,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { Group group = (Group) role; group.addMember(myUser); userAdminWrapper.commitOrNotifyTransactionStateChange(); - myUserAdminWrapper.notifyListeners(new UserAdminEvent(null, - UserAdminEvent.ROLE_CHANGED, group)); + myUserAdminWrapper.notifyListeners(new UserAdminEvent(null, UserAdminEvent.ROLE_CHANGED, group)); } super.drop(event); } @@ -488,8 +460,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { // LOCAL HELPERS private void refreshFormTitle(User group) { - getManagedForm().getForm().setText( - UserAdminUtils.getProperty(group, LdapAttrs.cn.name())); + getManagedForm().getForm().setText(UserAdminUtils.getProperty(group, LdapAttrs.cn.name())); } /** Appends a section with a title */ @@ -509,8 +480,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { } /** Creates label and multiline text. */ - Text createLMT(FormToolkit toolkit, Composite body, String label, - String value) { + Text createLMT(FormToolkit toolkit, Composite body, String label, String value) { Label lbl = toolkit.createLabel(body, label); lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); Text text = toolkit.createText(body, value, SWT.BORDER | SWT.MULTI); @@ -519,8 +489,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { } /** Creates label and password. */ - Text createLP(FormToolkit toolkit, Composite body, String label, - String value) { + Text createLP(FormToolkit toolkit, Composite body, String label, String value) { Label lbl = toolkit.createLabel(body, label); lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); Text text = toolkit.createText(body, value, SWT.BORDER | SWT.PASSWORD); @@ -529,8 +498,7 @@ public class UserMainPage extends FormPage implements ArgeoNames { } /** Creates label and text. */ - Text createLT(FormToolkit toolkit, Composite body, String label, - String value) { + Text createLT(FormToolkit toolkit, Composite body, String label, String value) { Label lbl = toolkit.createLabel(body, label); lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); Text text = toolkit.createText(body, value, SWT.BORDER); diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UsersView.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UsersView.java index 3b4167383..3660cebca 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UsersView.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/parts/UsersView.java @@ -19,6 +19,7 @@ import java.util.ArrayList; import java.util.List; import org.argeo.cms.CmsException; +import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.ui.workbench.WorkbenchUiPlugin; import org.argeo.cms.ui.workbench.internal.useradmin.UiUserAdminListener; import org.argeo.cms.ui.workbench.internal.useradmin.UserAdminWrapper; @@ -28,7 +29,6 @@ import org.argeo.cms.ui.workbench.internal.useradmin.providers.MailLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserDragListener; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserNameLP; import org.argeo.cms.ui.workbench.internal.useradmin.providers.UserTableDefaultDClickListener; -import org.argeo.cms.util.useradmin.UserAdminUtils; import org.argeo.eclipse.ui.ColumnDefinition; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.parts.LdifUsersTable; @@ -76,7 +76,7 @@ public class UsersView extends ViewPart implements ArgeoNames { columnDefs.add(new ColumnDefinition(new MailLP(), "E-mail", 150)); columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 200)); // Only show technical DN to admin - if (UserAdminUtils.isUserInRole(NodeConstants.ROLE_ADMIN)) + if (CurrentUser.isInRole(NodeConstants.ROLE_ADMIN)) columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name", 300)); diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/CommonNameLP.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/CommonNameLP.java index 2f47de1a1..5059f7c3e 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/CommonNameLP.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/CommonNameLP.java @@ -1,6 +1,6 @@ package org.argeo.cms.ui.workbench.internal.useradmin.providers; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.argeo.naming.LdapAttrs; import org.osgi.service.useradmin.User; diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/DomainNameLP.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/DomainNameLP.java index 2afb26ae8..eee16fb54 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/DomainNameLP.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/DomainNameLP.java @@ -1,6 +1,6 @@ package org.argeo.cms.ui.workbench.internal.useradmin.providers; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.osgi.service.useradmin.User; /** The human friendly domain name for the corresponding user. */ diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/MailLP.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/MailLP.java index 041f9183f..3e4ff2c2f 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/MailLP.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/MailLP.java @@ -1,6 +1,6 @@ package org.argeo.cms.ui.workbench.internal.useradmin.providers; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.argeo.naming.LdapAttrs; import org.osgi.service.useradmin.User; diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserAdminAbstractLP.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserAdminAbstractLP.java index c5eeb473f..45c053635 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserAdminAbstractLP.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserAdminAbstractLP.java @@ -4,7 +4,7 @@ import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; import org.argeo.cms.CmsException; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.swt.SWT; diff --git a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserFilter.java b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserFilter.java index feb78d48c..b89c58d59 100644 --- a/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserFilter.java +++ b/org.argeo.cms.ui.workbench/src/org/argeo/cms/ui/workbench/internal/useradmin/providers/UserFilter.java @@ -2,7 +2,7 @@ package org.argeo.cms.ui.workbench.internal.useradmin.providers; import static org.argeo.eclipse.ui.EclipseUiUtils.notEmpty; -import org.argeo.cms.util.useradmin.UserAdminUtils; +import org.argeo.cms.util.UserAdminUtils; import org.argeo.naming.LdapAttrs; import org.argeo.node.NodeConstants; import org.eclipse.jface.viewers.Viewer; diff --git a/org.argeo.cms.ui/src/org/argeo/cms/util/UserAdminUtils.java b/org.argeo.cms.ui/src/org/argeo/cms/util/UserAdminUtils.java new file mode 100644 index 000000000..2aa23b2d0 --- /dev/null +++ b/org.argeo.cms.ui/src/org/argeo/cms/util/UserAdminUtils.java @@ -0,0 +1,148 @@ +package org.argeo.cms.util; + +import java.util.List; + +import javax.naming.InvalidNameException; +import javax.naming.ldap.LdapName; +import javax.naming.ldap.Rdn; + +import org.argeo.cms.CmsException; +import org.argeo.cms.auth.CurrentUser; +import org.argeo.eclipse.ui.EclipseUiUtils; +import org.argeo.naming.LdapAttrs; +import org.argeo.node.NodeConstants; +import org.osgi.service.useradmin.Role; +import org.osgi.service.useradmin.User; +import org.osgi.service.useradmin.UserAdmin; + +/** Centralise common patterns to manage users with a {@link UserAdmin} */ +public class UserAdminUtils { + + // CURRENTUSER HELPERS + /** Checks if current user is the same as the passed one */ + public static boolean isCurrentUser(User user) { + String userUsername = getProperty(user, LdapAttrs.DN); + LdapName userLdapName = getLdapName(userUsername); + LdapName selfUserName = getCurrentUserLdapName(); + return userLdapName.equals(selfUserName); + } + + /** Retrieves the current logged-in {@link User} */ + public static User getCurrentUser(UserAdmin userAdmin) { + return (User) userAdmin.getRole(CurrentUser.getUsername()); + } + + /** Retrieves the current logged-in user {@link LdapName} */ + public final static LdapName getCurrentUserLdapName() { + String name = CurrentUser.getUsername(); + return getLdapName(name); + } + + /** Retrieves the current logged-in user display name. */ + public static String getCurrentUserMail(UserAdmin userAdmin) { + String username = CurrentUser.getUsername(); + return getUserMail(userAdmin, username); + } + + // OTHER USERS HELPERS + /** + * Retrieves the local id of a user or group, that is respectively the uid + * or cn of the passed dn with no {@link UserAdmin} + */ + public static String getUserLocalId(String dn) { + LdapName ldapName = getLdapName(dn); + Rdn last = ldapName.getRdn(ldapName.size() - 1); + if (last.getType().toLowerCase().equals(LdapAttrs.uid.name()) + || last.getType().toLowerCase().equals(LdapAttrs.cn.name())) + return (String) last.getValue(); + else + throw new CmsException("Cannot retrieve user local id, non valid dn: " + dn); + } + + /** + * Returns the local username if no user with this dn is found or if the + * found user has no defined display name + */ + public static String getUserDisplayName(UserAdmin userAdmin, String dn) { + Role user = userAdmin.getRole(dn); + String dName; + if (user == null) + dName = getUserLocalId(dn); + else { + dName = getProperty(user, LdapAttrs.displayName.name()); + if (EclipseUiUtils.isEmpty(dName)) + dName = getProperty(user, LdapAttrs.cn.name()); + if (EclipseUiUtils.isEmpty(dName)) + dName = getUserLocalId(dn); + } + return dName; + } + + /** + * Returns null if no user with this dn is found or if the found user has no + * defined mail + */ + public static String getUserMail(UserAdmin userAdmin, String dn) { + Role user = userAdmin.getRole(dn); + if (user == null) + return null; + else + return getProperty(user, LdapAttrs.mail.name()); + } + + // LDAP NAMES HELPERS + /** + * Easily retrieves one of the {@link Role}'s property or an empty String if + * the requested property is not defined + */ + public final static String getProperty(Role role, String key) { + Object obj = role.getProperties().get(key); + if (obj != null) + return (String) obj; + else + return ""; + } + + /** + * Simply retrieves a LDAP name from a {@link LdapAttrs.DN} with no + * exception + */ + private static LdapName getLdapName(String dn) { + try { + return new LdapName(dn); + } catch (InvalidNameException e) { + throw new CmsException("Cannot parse LDAP name " + dn, e); + } + } + + /** Simply retrieves a display name of the relevant domain */ + public final static String getDomainName(User user) { + String dn = user.getName(); + if (dn.endsWith(NodeConstants.ROLES_BASEDN)) + return "System roles"; + try { + LdapName name = new LdapName(dn); + List rdns = name.getRdns(); + String dname = null; + int i = 0; + loop: while (i < rdns.size()) { + Rdn currrRdn = rdns.get(i); + if (!LdapAttrs.dc.name().equals(currrRdn.getType())) + break loop; + else { + String currVal = (String) currrRdn.getValue(); + dname = dname == null ? currVal : currVal + "." + dname; + } + i++; + } + return dname; + } catch (InvalidNameException e) { + throw new CmsException("Unable to get domain name for " + dn, e); + } + } + + // VARIOUS HELPERS + public final static String buildDefaultCn(String firstName, String lastName) { + return (firstName.trim() + " " + lastName.trim() + " ").trim(); + } +} diff --git a/org.argeo.cms.ui/src/org/argeo/cms/util/useradmin/UserAdminUtils.java b/org.argeo.cms.ui/src/org/argeo/cms/util/useradmin/UserAdminUtils.java deleted file mode 100644 index e157861f5..000000000 --- a/org.argeo.cms.ui/src/org/argeo/cms/util/useradmin/UserAdminUtils.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.argeo.cms.util.useradmin; - -import java.util.List; -import java.util.Set; - -import javax.naming.InvalidNameException; -import javax.naming.ldap.LdapName; -import javax.naming.ldap.Rdn; - -import org.argeo.cms.CmsException; -import org.argeo.cms.auth.CurrentUser; -import org.argeo.eclipse.ui.EclipseUiUtils; -import org.argeo.naming.LdapAttrs; -import org.argeo.node.NodeConstants; -import org.osgi.service.useradmin.Role; -import org.osgi.service.useradmin.User; -import org.osgi.service.useradmin.UserAdmin; - -/** Centralise common patterns to manage users with a {@link UserAdmin} */ -public class UserAdminUtils { - - /** Checks if current user is registered */ - public static boolean isRegistered() { - return !CurrentUser.isAnonymous(); - } - - /** Returns true if the current user is in the specified role */ - public static boolean isUserInRole(String role) { - Set roles = CurrentUser.roles(); - return roles.contains(role); - } - - // CURRENTUSER HELPERS - /** Checks if current user is the same as the passed one */ - public static boolean isCurrentUser(User user) { - String userUsername = getProperty(user, LdapAttrs.DN); - LdapName userLdapName = getLdapName(userUsername); - LdapName selfUserName = getCurrentUserLdapName(); - return userLdapName.equals(selfUserName); - } - - /** Retrieves the current logged-in {@link User} */ - public static User getCurrentUser(UserAdmin userAdmin) { - return (User) userAdmin.getRole(CurrentUser.getUsername()); - } - - /** Retrieves the current logged-in user {@link LdapName} */ - public final static LdapName getCurrentUserLdapName() { - String name = CurrentUser.getUsername(); - return getLdapName(name); - } - - /** Retrieves the current logged-in user display name. */ - public static String getCurrentUserMail(UserAdmin userAdmin) { - String username = CurrentUser.getUsername(); - return getUserMail(userAdmin, username); - } - - // OTHER USERS HELPERS - /** - * Retrieves the local id of a user or group, that is respectively the uid - * or cn of the passed dn with no {@link UserAdmin} - */ - public static String getUserLocalId(String dn) { - LdapName ldapName = getLdapName(dn); - Rdn last = ldapName.getRdn(ldapName.size() - 1); - if (last.getType().toLowerCase().equals(LdapAttrs.uid.name()) - || last.getType().toLowerCase().equals(LdapAttrs.cn.name())) - return (String) last.getValue(); - else - throw new CmsException("Cannot retrieve user local id, non valid dn: " + dn); - } - - /** - * Returns the local username if no user with this dn is found or if the - * found user has no defined display name - */ - public static String getUserDisplayName(UserAdmin userAdmin, String dn) { - Role user = userAdmin.getRole(dn); - String dName; - if (user == null) - dName = getUserLocalId(dn); - else { - dName = getProperty(user, LdapAttrs.displayName.name()); - if (EclipseUiUtils.isEmpty(dName)) - dName = getProperty(user, LdapAttrs.cn.name()); - if (EclipseUiUtils.isEmpty(dName)) - dName = getUserLocalId(dn); - } - return dName; - } - - /** - * Returns null if no user with this dn is found or if the found user has no - * defined mail - */ - public static String getUserMail(UserAdmin userAdmin, String dn) { - Role user = userAdmin.getRole(dn); - if (user == null) - return null; - else - return getProperty(user, LdapAttrs.mail.name()); - } - - // LDAP NAMES HELPERS - /** - * Easily retrieves one of the {@link Role}'s property or an empty String if - * the requested property is not defined - */ - public final static String getProperty(Role role, String key) { - Object obj = role.getProperties().get(key); - if (obj != null) - return (String) obj; - else - return ""; - } - - /** - * Simply retrieves a LDAP name from a {@link LdapAttrs.DN} with no - * exception - */ - private static LdapName getLdapName(String dn) { - try { - return new LdapName(dn); - } catch (InvalidNameException e) { - throw new CmsException("Cannot parse LDAP name " + dn, e); - } - } - - /** Simply retrieves a display name of the relevant domain */ - public final static String getDomainName(User user) { - String dn = user.getName(); - if (dn.endsWith(NodeConstants.ROLES_BASEDN)) - return "System roles"; - try { - LdapName name = new LdapName(dn); - List rdns = name.getRdns(); - String dname = null; - int i = 0; - loop: while (i < rdns.size()) { - Rdn currrRdn = rdns.get(i); - if (!LdapAttrs.dc.name().equals(currrRdn.getType())) - break loop; - else { - String currVal = (String) currrRdn.getValue(); - dname = dname == null ? currVal : currVal + "." + dname; - } - i++; - } - return dname; - } catch (InvalidNameException e) { - throw new CmsException("Unable to get domain name for " + dn, e); - } - } - - // VARIOUS HELPERS - public final static String buildDefaultCn(String firstName, String lastName) { - return (firstName.trim() + " " + lastName.trim() + " ").trim(); - } -} diff --git a/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java b/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java index 68848f7df..a23822b21 100644 --- a/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java +++ b/org.argeo.cms/src/org/argeo/cms/auth/CurrentUser.java @@ -32,6 +32,7 @@ import org.osgi.service.useradmin.Authorization; /** Static utilities */ public final class CurrentUser { + /** * @return the authenticated username or null if not authenticated / * anonymous @@ -48,21 +49,16 @@ public final class CurrentUser { return isAnonymous(currentSubject()); } + public static boolean isRegistered() { + return !isAnonymous(); + } + public static boolean isAnonymous(Subject subject) { if (subject == null) return true; String username = getUsername(subject); - return username == null || username.equalsIgnoreCase(NodeConstants.ROLE_ANONYMOUS); - } - - private static Subject currentSubject() { - NodeAuthenticated cmsView = getNodeAuthenticated(); - if (cmsView != null) - return cmsView.getLoginContext().getSubject(); - Subject subject = Subject.getSubject(AccessController.getContext()); - if (subject != null) - return subject; - throw new CmsException("Cannot find related subject"); + return username == null + || username.equalsIgnoreCase(NodeConstants.ROLE_ANONYMOUS); } /** @@ -78,7 +74,8 @@ public final class CurrentUser { throw new CmsException("Subject cannot be null"); if (subject.getPrincipals(X500Principal.class).size() != 1) return NodeConstants.ROLE_ANONYMOUS; - Principal principal = subject.getPrincipals(X500Principal.class).iterator().next(); + Principal principal = subject.getPrincipals(X500Principal.class) + .iterator().next(); return principal.getName(); } @@ -87,13 +84,30 @@ public final class CurrentUser { } private static Authorization getAuthorization(Subject subject) { - return subject.getPrivateCredentials(Authorization.class).iterator().next(); + return subject.getPrivateCredentials(Authorization.class).iterator() + .next(); } public final static Set roles() { return roles(currentSubject()); } + private static Subject currentSubject() { + NodeAuthenticated cmsView = getNodeAuthenticated(); + if (cmsView != null) + return cmsView.getLoginContext().getSubject(); + Subject subject = Subject.getSubject(AccessController.getContext()); + if (subject != null) + return subject; + throw new CmsException("Cannot find related subject"); + } + + /** Returns true if the current user is in the specified role */ + public static boolean isInRole(String role) { + Set roles = roles(); + return roles.contains(role); + } + public final static Set roles(Subject subject) { Set roles = new HashSet(); roles.add(getUsername(subject));