From 8fea21d044841079b2f490c00da5d0902d50c3eb Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Tue, 22 Sep 2015 15:03:28 +0000 Subject: [PATCH] Integrate base DNs Differentiate system roles from other groups git-svn-id: https://svn.argeo.org/commons/trunk@8434 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../ui/admin/SecurityAdminImages.java | 2 + .../ui/admin/internal/UserAdminConstants.java | 3 + .../ui/admin/internal/UserAdminWrapper.java | 44 ++++++++++-- .../ui/admin/internal/commands/NewGroup.java | 48 +++++++++++-- .../ui/admin/internal/commands/NewUser.java | 71 +++++++++++++++++-- .../admin/internal/parts/GroupMainPage.java | 41 ++++++++--- .../ui/admin/internal/parts/GroupsView.java | 4 ++ .../ui/admin/internal/parts/UserMainPage.java | 8 ++- .../ui/admin/internal/parts/UsersView.java | 2 + .../internal/providers/DomainNameLP.java | 32 +++++++++ .../ui/admin/internal/providers/MailLP.java | 6 +- .../admin/internal/providers/RoleIconLP.java | 6 +- 12 files changed, 239 insertions(+), 28 deletions(-) create mode 100644 org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/DomainNameLP.java diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/SecurityAdminImages.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/SecurityAdminImages.java index 3027c364a..f15f8ec9a 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/SecurityAdminImages.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/SecurityAdminImages.java @@ -41,5 +41,7 @@ public class SecurityAdminImages { public final static Image ICON_USER = ICON_USER_DESC.createImage(); public final static Image ICON_GROUP = SecurityAdminPlugin .getImageDescriptor(PREFIX + "users.gif").createImage(); + public final static Image ICON_ROLE = SecurityAdminPlugin + .getImageDescriptor(PREFIX + "role.gif").createImage(); } diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminConstants.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminConstants.java index 4dbb358f0..848b27993 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminConstants.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminConstants.java @@ -11,4 +11,7 @@ public interface UserAdminConstants { public final static String KEY_MAIL = "mail"; public final static String KEY_DESC = "description"; + // TO BE CLEANED + public final static String SYSTEM_ROLE_BASE_DN = "ou=roles,ou=node"; + } \ No newline at end of file diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java index 6b077e08f..41efefa65 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/UserAdminWrapper.java @@ -4,6 +4,9 @@ import java.util.ArrayList; import java.util.Dictionary; import java.util.List; +import javax.naming.InvalidNameException; +import javax.naming.ldap.LdapName; +import javax.naming.ldap.Rdn; import javax.transaction.Status; import javax.transaction.UserTransaction; @@ -72,17 +75,50 @@ public class UserAdminWrapper { public void setUserAdminServiceReference( ServiceReference userAdminServiceReference) { this.userAdminServiceReference = userAdminServiceReference; + // for (String uri : userAdminServiceReference.getPropertyKeys()) { + // if (!uri.startsWith("/")) + // continue; + // log.debug(uri); + // Dictionary props = UserAdminConf.uriAsProperties(uri); + // log.debug(props); + // } + } + + public List getKnownBaseDns(boolean onlyWritable) { + List dns = new ArrayList(); for (String uri : userAdminServiceReference.getPropertyKeys()) { if (!uri.startsWith("/")) continue; - log.debug(uri); Dictionary props = UserAdminConf.uriAsProperties(uri); - log.debug(props); + String readOnly = UserAdminConf.readOnly.getValue(props); + String baseDn = UserAdminConf.baseDn.getValue(props); + + if (onlyWritable && "true".equals(readOnly)) + continue; + dns.add(baseDn); } + return dns; } +// // Returns the human friendly domain name give a dn. +// public String getDomainName(String dn) { +// if (dn.endsWith("ou=roles, ou=node")) +// return "System roles"; +// try { +// +// LdapName name; +// name = new LdapName(dn); +// List rdns = name.getRdns(); +// +// String penultimate = (String) rdns.get(rdns.size() - 2).getValue(); +// String last = (String) rdns.get(rdns.size() - 1).getValue(); +// return (penultimate + '.' + last); +// } catch (InvalidNameException e) { +// throw new ArgeoException("Unable to get domain name for " + dn, e); +// } +// } + public void setUserTransaction(UserTransaction userTransaction) { this.userTransaction = userTransaction; } - -} +} \ No newline at end of file diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java index b50f67f1e..b52bf9955 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewGroup.java @@ -16,7 +16,9 @@ package org.argeo.security.ui.admin.internal.commands; import java.util.Dictionary; +import java.util.List; +import org.argeo.ArgeoException; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.jcr.ArgeoNames; @@ -35,6 +37,7 @@ import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; @@ -52,11 +55,6 @@ public class NewGroup extends AbstractHandler { private UserAdminWrapper userAdminWrapper; private UserAdmin userAdmin; - // TODO implement a dynamic choice of the base dn - private String getDn(String cn) { - return "cn=" + cn + ",dc=example,dc=com"; - } - public Object execute(ExecutionEvent event) throws ExecutionException { NewGroupWizard newGroupWizard = new NewGroupWizard(); WizardDialog dialog = new WizardDialog( @@ -73,6 +71,7 @@ public class NewGroup extends AbstractHandler { // End user fields private Text dNameTxt, commonNameTxt, descriptionTxt; + private Combo baseDnCmb; public NewGroupWizard() { } @@ -126,6 +125,19 @@ public class NewGroup extends AbstractHandler { dNameTxt = EclipseUiUtils.createGridLT(bodyCmp, "Distinguished name", this); dNameTxt.setEnabled(false); + + baseDnCmb = createGridLC(bodyCmp, "Base DN", this); + initialiseDnCmb(baseDnCmb); + baseDnCmb.addModifyListener(new ModifyListener() { + private static final long serialVersionUID = -1435351236582736843L; + + @Override + public void modifyText(ModifyEvent event) { + String name = commonNameTxt.getText(); + dNameTxt.setText(getDn(name)); + } + }); + commonNameTxt = EclipseUiUtils.createGridLT(bodyCmp, "Common name", this); commonNameTxt.addModifyListener(new ModifyListener() { @@ -190,6 +202,32 @@ public class NewGroup extends AbstractHandler { commonNameTxt.setFocus(); } } + + private String getDn(String cn) { + return "cn=" + cn + ",ou=groups," + baseDnCmb.getText(); + } + + private void initialiseDnCmb(Combo combo) { + List dns = userAdminWrapper.getKnownBaseDns(true); + if (dns.isEmpty()) + throw new ArgeoException( + "No writable base dn found. Cannot create user"); + combo.setItems(dns.toArray(new String[0])); + // combo.select(0); + } + + } + + private Combo createGridLC(Composite parent, String label, + ModifyListener modifyListener) { + Label lbl = new Label(parent, SWT.LEAD); + lbl.setText(label); + lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); + Combo combo = new Combo(parent, SWT.LEAD | SWT.BORDER | SWT.READ_ONLY); + combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + if (modifyListener != null) + combo.addModifyListener(modifyListener); + return combo; } /* DEPENDENCY INJECTION */ diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java index d8d697a1f..838e66ff5 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/commands/NewUser.java @@ -16,7 +16,13 @@ package org.argeo.security.ui.admin.internal.commands; import java.util.Dictionary; +import java.util.List; +import javax.naming.InvalidNameException; +import javax.naming.ldap.LdapName; +import javax.naming.ldap.Rdn; + +import org.argeo.ArgeoException; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.jcr.ArgeoNames; @@ -34,8 +40,11 @@ import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.handlers.HandlerUtil; import org.osgi.service.useradmin.Role; @@ -50,11 +59,6 @@ public class NewUser extends AbstractHandler { /* DEPENDENCY INJECTION */ private UserAdminWrapper userAdminWrapper; - // TODO implement a dynamic choice of the base dn - private String getDn(String uid) { - return "uid=" + uid + ",ou=users,dc=example,dc=com"; - } - public Object execute(ExecutionEvent event) throws ExecutionException { NewUserWizard newUserWizard = new NewUserWizard(); WizardDialog dialog = new WizardDialog( @@ -86,6 +90,7 @@ public class NewUser extends AbstractHandler { // End user fields private Text dNameTxt, usernameTxt, firstNameTxt, lastNameTxt, primaryMailTxt, pwd1Txt, pwd2Txt; + private Combo baseDnCmb; public NewUserWizard() { } @@ -157,6 +162,19 @@ public class NewUser extends AbstractHandler { dNameTxt = EclipseUiUtils.createGridLT(composite, "Distinguished name", this); dNameTxt.setEnabled(false); + + baseDnCmb = createGridLC(composite, "Base DN", this); + initialiseDnCmb(baseDnCmb); + baseDnCmb.addModifyListener(new ModifyListener() { + private static final long serialVersionUID = -1435351236582736843L; + + @Override + public void modifyText(ModifyEvent event) { + String name = usernameTxt.getText(); + dNameTxt.setText(getDn(name)); + } + }); + usernameTxt = EclipseUiUtils.createGridLT(composite, "Local ID", this); usernameTxt.addModifyListener(new ModifyListener() { @@ -174,7 +192,7 @@ public class NewUser extends AbstractHandler { } else { dNameTxt.setText(getDn(name)); lastNameTxt.setText(name.toUpperCase()); - primaryMailTxt.setText(name + "@example.com"); + primaryMailTxt.setText(getMail(name)); pwd1Txt.setText("demo"); pwd2Txt.setText("demo"); } @@ -251,6 +269,47 @@ public class NewUser extends AbstractHandler { } } + + private String getDn(String uid) { + return "uid=" + uid + ",ou=users," + baseDnCmb.getText(); + } + + private void initialiseDnCmb(Combo combo) { + List dns = userAdminWrapper.getKnownBaseDns(true); + if (dns.isEmpty()) + throw new ArgeoException( + "No writable base dn found. Cannot create user"); + combo.setItems(dns.toArray(new String[0])); + // combo.select(0); + } + + private String getMail(String username) { + if (baseDnCmb.getSelectionIndex() == -1) + return null; + String baseDn = baseDnCmb.getText(); + try { + LdapName name = new LdapName(baseDn); + List rdns = name.getRdns(); + return username + "@" + (String) rdns.get(1).getValue() + '.' + + (String) rdns.get(0).getValue(); + } catch (InvalidNameException e) { + throw new ArgeoException("Unable to generate mail for " + + username + " with base dn " + baseDn, e); + } + } + + } + + private Combo createGridLC(Composite parent, String label, + ModifyListener modifyListener) { + Label lbl = new Label(parent, SWT.LEAD); + lbl.setText(label); + lbl.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); + Combo combo = new Combo(parent, SWT.LEAD | SWT.BORDER | SWT.READ_ONLY); + combo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); + if (modifyListener != null) + combo.addModifyListener(modifyListener); + return combo; } /* DEPENDENCY INJECTION */ diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupMainPage.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupMainPage.java index f3fdabfb1..5270e1463 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupMainPage.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupMainPage.java @@ -50,6 +50,7 @@ import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.dnd.TransferData; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Cursor; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; @@ -105,13 +106,22 @@ public class GroupMainPage extends FormPage implements ArgeoNames { GridLayout layout = new GridLayout(2, false); body.setLayout(layout); - final Text distinguishedName = createLT(body, "Group Name", - UiAdminUtils.getProperty(group, UserAdminConstants.KEY_UID)); - distinguishedName.setEnabled(false); + final Text dnTxt = createLT(body, "DN", + UiAdminUtils.getProperty(group, UserAdminConstants.KEY_DN)); + dnTxt.setEnabled(false); - final Text commonName = createLT(body, "Common Name", + final Text cnTxt = createLT(body, "Common Name", UiAdminUtils.getProperty(group, UserAdminConstants.KEY_CN)); - commonName.setEnabled(false); + cnTxt.setEnabled(false); + + Label descLbl = new Label(body, SWT.LEAD); + descLbl.setText("Description"); + descLbl.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false)); + final Text descTxt = new Text(body, SWT.LEAD | SWT.MULTI | SWT.WRAP + | SWT.BORDER); + GridData gd = EclipseUiUtils.fillAll(); + gd.heightHint = 100; + descTxt.setLayoutData(gd); // create form part (controller) AbstractFormPart part = new SectionPart((Section) body.getParent()) { @@ -131,16 +141,31 @@ public class GroupMainPage extends FormPage implements ArgeoNames { super.dispose(); } + @SuppressWarnings("unchecked") + public void commit(boolean onSave) { + group.getProperties().put(UserAdminConstants.KEY_DESC, + descTxt.getText()); + // Enable common name ? + // editor.setProperty(UserAdminConstants.KEY_CN, + // email.getText()); + super.commit(onSave); + } + @Override public void refresh() { refreshFormTitle(group); - distinguishedName.setText(UiAdminUtils.getProperty(group, - UserAdminConstants.KEY_UID)); - commonName.setText(UiAdminUtils.getProperty(group, + dnTxt.setText(group.getName()); + cnTxt.setText(UiAdminUtils.getProperty(group, UserAdminConstants.KEY_CN)); + descTxt.setText(UiAdminUtils.getProperty(group, + UserAdminConstants.KEY_DESC)); + super.refresh(); } }; + + ModifyListener defaultListener = editor.new FormPartML(part); + descTxt.addModifyListener(defaultListener); getManagedForm().addPart(part); } diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupsView.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupsView.java index e9a4b0411..0f4d12ccf 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupsView.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/GroupsView.java @@ -28,6 +28,8 @@ import org.argeo.security.ui.admin.internal.UserAdminConstants; import org.argeo.security.ui.admin.internal.UserAdminWrapper; import org.argeo.security.ui.admin.internal.UserTableViewer; import org.argeo.security.ui.admin.internal.providers.CommonNameLP; +import org.argeo.security.ui.admin.internal.providers.DomainNameLP; +import org.argeo.security.ui.admin.internal.providers.RoleIconLP; import org.argeo.security.ui.admin.internal.providers.UserDragListener; import org.argeo.security.ui.admin.internal.providers.UserNameLP; import org.argeo.security.ui.admin.internal.providers.UserTableDefaultDClickListener; @@ -64,8 +66,10 @@ public class GroupsView extends ViewPart implements ArgeoNames { public void createPartControl(Composite parent) { parent.setLayout(EclipseUiUtils.noSpaceGridLayout()); // Define the displayed columns + columnDefs.add(new ColumnDefinition(new RoleIconLP(), "", 26)); columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", 150)); + columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 120)); columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name", 300)); diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java index e34408359..154be42f3 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UserMainPage.java @@ -31,6 +31,7 @@ import org.argeo.security.ui.admin.internal.UserTableViewer; import org.argeo.security.ui.admin.internal.parts.UserEditor.GroupChangeListener; import org.argeo.security.ui.admin.internal.parts.UserEditor.MainInfoListener; import org.argeo.security.ui.admin.internal.providers.CommonNameLP; +import org.argeo.security.ui.admin.internal.providers.DomainNameLP; import org.argeo.security.ui.admin.internal.providers.RoleIconLP; import org.argeo.security.ui.admin.internal.providers.UserNameLP; import org.argeo.security.ui.admin.internal.providers.UserTableDefaultDClickListener; @@ -155,15 +156,14 @@ public class UserMainPage extends FormPage implements ArgeoNames { lastName.getText()); user.getProperties().put(UserAdminConstants.KEY_CN, commonName.getText()); - user.getProperties().put(UserAdminConstants.KEY_MAIL, email.getText()); + user.getProperties().put(UserAdminConstants.KEY_MAIL, + email.getText()); // Enable common name ? // editor.setProperty(UserAdminConstants.KEY_CN, // email.getText()); super.commit(onSave); } - - @Override public void refresh() { distinguishedName.setText(UiAdminUtils.getProperty(user, @@ -256,6 +256,8 @@ public class UserMainPage extends FormPage implements ArgeoNames { 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", + 120)); columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name", 300)); diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UsersView.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UsersView.java index b7682394a..70e79daec 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UsersView.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/parts/UsersView.java @@ -28,6 +28,7 @@ import org.argeo.security.ui.admin.internal.UserAdminConstants; import org.argeo.security.ui.admin.internal.UserAdminWrapper; import org.argeo.security.ui.admin.internal.UserTableViewer; import org.argeo.security.ui.admin.internal.providers.CommonNameLP; +import org.argeo.security.ui.admin.internal.providers.DomainNameLP; import org.argeo.security.ui.admin.internal.providers.MailLP; import org.argeo.security.ui.admin.internal.providers.UserDragListener; import org.argeo.security.ui.admin.internal.providers.UserNameLP; @@ -71,6 +72,7 @@ public class UsersView extends ViewPart implements ArgeoNames { // Define the displayed columns columnDefs.add(new ColumnDefinition(new CommonNameLP(), "Common Name", 150)); + columnDefs.add(new ColumnDefinition(new DomainNameLP(), "Domain", 120)); columnDefs.add(new ColumnDefinition(new MailLP(), "E-mail", 150)); columnDefs.add(new ColumnDefinition(new UserNameLP(), "Distinguished Name", 300)); diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/DomainNameLP.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/DomainNameLP.java new file mode 100644 index 000000000..ddd771aea --- /dev/null +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/DomainNameLP.java @@ -0,0 +1,32 @@ +package org.argeo.security.ui.admin.internal.providers; + +import java.util.List; + +import javax.naming.InvalidNameException; +import javax.naming.ldap.LdapName; +import javax.naming.ldap.Rdn; + +import org.argeo.ArgeoException; +import org.argeo.security.ui.admin.internal.UserAdminConstants; +import org.osgi.service.useradmin.User; + +/** Returns the human friendly domain name for the corresponding user. */ +public class DomainNameLP extends UserAdminAbstractLP { + private static final long serialVersionUID = 5256703081044911941L; + + @Override + public String getText(User user) { + String dn = (String) user.getProperties().get(KEY_DN); + if (dn.endsWith(UserAdminConstants.SYSTEM_ROLE_BASE_DN)) + return "System roles"; + try { + LdapName name; + name = new LdapName(dn); + List rdns = name.getRdns(); + return (String) rdns.get(1).getValue() + '.' + + (String) rdns.get(0).getValue(); + } catch (InvalidNameException e) { + throw new ArgeoException("Unable to get domain name for " + dn, e); + } + } +} \ No newline at end of file diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/MailLP.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/MailLP.java index 7b8d96ce0..b56776795 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/MailLP.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/MailLP.java @@ -1,5 +1,7 @@ package org.argeo.security.ui.admin.internal.providers; +import java.util.Dictionary; + import org.osgi.service.useradmin.User; /** Simply declare a label provider that returns the Primary Mail for a user */ @@ -8,7 +10,9 @@ public class MailLP extends UserAdminAbstractLP { @Override public String getText(User user) { - Object obj = user.getProperties().get(KEY_MAIL); + @SuppressWarnings("rawtypes") + Dictionary props = user.getProperties(); + Object obj = props.get(KEY_MAIL); if (obj != null) return (String) obj; else diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/RoleIconLP.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/RoleIconLP.java index 8b7414d94..8bda40429 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/RoleIconLP.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/internal/providers/RoleIconLP.java @@ -1,6 +1,7 @@ package org.argeo.security.ui.admin.internal.providers; import org.argeo.security.ui.admin.SecurityAdminImages; +import org.argeo.security.ui.admin.internal.UserAdminConstants; import org.eclipse.swt.graphics.Image; import org.osgi.service.useradmin.Role; import org.osgi.service.useradmin.User; @@ -16,7 +17,10 @@ public class RoleIconLP extends UserAdminAbstractLP { @Override public Image getImage(Object element) { User user = (User) element; - if (user.getType() == Role.GROUP) + String dn = (String) user.getProperties().get(KEY_DN); + if (dn.endsWith(UserAdminConstants.SYSTEM_ROLE_BASE_DN)) + return SecurityAdminImages.ICON_ROLE; + else if (user.getType() == Role.GROUP) return SecurityAdminImages.ICON_GROUP; else return SecurityAdminImages.ICON_USER; -- 2.30.2