From f2688921e89c75ee626ff79b64105c577c415cca Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sat, 14 Feb 2015 16:14:17 +0000 Subject: [PATCH] Remove JcrSecurityModel from supported APIs git-svn-id: https://svn.argeo.org/commons/trunk@7869 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../cms/internal/auth}/JcrSecurityModel.java | 2 +- .../auth/OsJcrAuthenticationProvider.java | 1 - .../cms/internal/kernel/NodeSecurity.java | 2 + .../internal/useradmin/AbstractJcrUser.java | 9 +- .../internal/useradmin/JcrAuthorization.java | 4 +- .../cms/internal/useradmin/JcrEndUser.java | 3 +- .../cms/internal/useradmin/JcrGroup.java | 16 +-- .../argeo/cms/internal/useradmin/JcrRole.java | 4 +- .../cms/internal/useradmin/JcrUserAdmin.java | 50 +++----- .../useradmin/SimpleJcrSecurityModel.java | 10 +- .../JackrabbitUserAdminService.java | 28 +++-- .../useradmin/ldap/JcrLdapSynchronizer.java | 2 +- .../cms/users}/MainUserInfoWizardPage.java | 12 +- .../org/argeo/cms/users}/NewUserWizard.java | 46 +++---- .../argeo/cms/users}/UserCreationWizard.java | 7 +- .../org/argeo/cms/users/UserRolesPart.java | 2 +- .../src/org/argeo/cms/users/Users.java | 12 +- .../eclipse/ui/workbench/ErrorFeedback.java | 97 +-------------- .../ui/workbench/commands/AddFolderNode.java | 2 +- .../ui/workbench/commands/AddPrivileges.java | 2 +- .../commands/AddRemoteRepository.java | 2 +- .../workbench/commands/CreateWorkspace.java | 2 +- .../ui/workbench/commands/DeleteNodes.java | 2 +- .../ui/workbench/commands/EditNode.java | 2 +- .../ui/workbench/commands/GetNodeSize.java | 2 +- .../workbench/commands/ImportFileSystem.java | 2 +- .../jcr/internal/model/RepositoriesElem.java | 2 +- .../parts/ImportFileSystemWizard.java | 2 +- .../eclipse/ui/dialogs/ErrorFeedback.java | 115 ++++++++++++++++++ .../argeo/security/jcr/NewUserDetails.java | 41 +++++++ .../META-INF/spring/commands.xml | 7 +- .../META-INF/spring/common.xml | 8 +- .../META-INF/spring/views.xml | 1 - org.argeo.security.ui.admin/bnd.bnd | 23 ++-- org.argeo.security.ui.admin/pom.xml | 8 +- .../security/ui/admin/commands/NewUser.java | 14 +-- .../ui/admin/commands/UserBatchUpdate.java | 12 +- .../admin/wizards/UserBatchUpdateWizard.java | 7 +- .../security/ui/rap/SecureEntryPoint.java | 10 +- .../ui/commands/OpenHomePerspective.java | 2 +- 40 files changed, 312 insertions(+), 263 deletions(-) rename {org.argeo.security.core/src/org/argeo/security/jcr => org.argeo.cms/src/org/argeo/cms/internal/auth}/JcrSecurityModel.java (96%) rename {org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards => org.argeo.cms/src/org/argeo/cms/users}/MainUserInfoWizardPage.java (97%) rename {org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards => org.argeo.cms/src/org/argeo/cms/users}/NewUserWizard.java (71%) rename {org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/dialogs => org.argeo.cms/src/org/argeo/cms/users}/UserCreationWizard.java (98%) create mode 100644 org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/dialogs/ErrorFeedback.java create mode 100644 org.argeo.security.core/src/org/argeo/security/jcr/NewUserDetails.java diff --git a/org.argeo.security.core/src/org/argeo/security/jcr/JcrSecurityModel.java b/org.argeo.cms/src/org/argeo/cms/internal/auth/JcrSecurityModel.java similarity index 96% rename from org.argeo.security.core/src/org/argeo/security/jcr/JcrSecurityModel.java rename to org.argeo.cms/src/org/argeo/cms/internal/auth/JcrSecurityModel.java index a151c7f30..2cf1e241a 100644 --- a/org.argeo.security.core/src/org/argeo/security/jcr/JcrSecurityModel.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/auth/JcrSecurityModel.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.argeo.security.jcr; +package org.argeo.cms.internal.auth; import java.util.List; diff --git a/org.argeo.cms/src/org/argeo/cms/internal/auth/OsJcrAuthenticationProvider.java b/org.argeo.cms/src/org/argeo/cms/internal/auth/OsJcrAuthenticationProvider.java index 61ed7ba35..a394baf1e 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/auth/OsJcrAuthenticationProvider.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/auth/OsJcrAuthenticationProvider.java @@ -28,7 +28,6 @@ import org.argeo.jcr.JcrUtils; import org.argeo.security.OsAuthenticationToken; import org.argeo.security.SecurityUtils; import org.argeo.security.core.OsAuthenticationProvider; -import org.argeo.security.jcr.JcrSecurityModel; import org.argeo.security.jcr.JcrUserDetails; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeSecurity.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeSecurity.java index 13f48f369..e841bfc3d 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeSecurity.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/NodeSecurity.java @@ -85,6 +85,8 @@ class NodeSecurity implements AuthenticationManager { userDetailsManagerReg.unregister(); userAdminServiceReg.unregister(); authenticationManagerReg.unregister(); + + userAdmin.destroy(); userAdminReg.unregister(); } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/AbstractJcrUser.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/AbstractJcrUser.java index f13da0128..7d63b8693 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/AbstractJcrUser.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/AbstractJcrUser.java @@ -2,11 +2,12 @@ package org.argeo.cms.internal.useradmin; import java.util.Dictionary; +import org.argeo.cms.CmsException; import org.osgi.service.useradmin.Role; import org.osgi.service.useradmin.User; abstract class AbstractJcrUser extends JcrRole implements User { - public AbstractJcrUser(String name) { + public AbstractJcrUser(String name) { super(name); } @@ -17,14 +18,12 @@ abstract class AbstractJcrUser extends JcrRole implements User { @Override public Dictionary getCredentials() { - // TODO Auto-generated method stub - return null; + throw new CmsException("Not implemented yet"); } @Override public boolean hasCredential(String key, Object value) { - // TODO Auto-generated method stub - return false; + throw new CmsException("Not implemented yet"); } } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrAuthorization.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrAuthorization.java index 76f67ce71..3832a1568 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrAuthorization.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrAuthorization.java @@ -4,15 +4,15 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.argeo.security.jcr.JcrUserDetails; import org.osgi.service.useradmin.Authorization; import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; class JcrAuthorization implements Authorization { private final String name; private final List roles; - public JcrAuthorization(JcrUserDetails userDetails) { + public JcrAuthorization(UserDetails userDetails) { this.name = userDetails.getUsername(); List t = new ArrayList(); for (GrantedAuthority ga : userDetails.getAuthorities()) { diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrEndUser.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrEndUser.java index fbbbdd01f..0fd5086d5 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrEndUser.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrEndUser.java @@ -1,6 +1,7 @@ package org.argeo.cms.internal.useradmin; import org.argeo.security.jcr.JcrUserDetails; +import org.springframework.security.core.userdetails.UserDetails; class JcrEndUser extends AbstractJcrUser { private final JcrUserDetails userDetails; @@ -10,7 +11,7 @@ class JcrEndUser extends AbstractJcrUser { this.userDetails = userDetails; } - JcrUserDetails getUserDetails() { + public UserDetails getUserDetails() { return userDetails; } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrGroup.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrGroup.java index 93f758758..56ddf0b42 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrGroup.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrGroup.java @@ -1,5 +1,6 @@ package org.argeo.cms.internal.useradmin; +import org.argeo.cms.CmsException; import org.osgi.service.useradmin.Group; import org.osgi.service.useradmin.Role; @@ -18,32 +19,27 @@ class JcrGroup extends AbstractJcrUser implements Group { @Override public boolean addMember(Role role) { - // TODO Auto-generated method stub - return false; + throw new CmsException("Not implemented yet"); } @Override public boolean addRequiredMember(Role role) { - // TODO Auto-generated method stub - return false; + throw new CmsException("Not implemented yet"); } @Override public boolean removeMember(Role role) { - // TODO Auto-generated method stub - return false; + throw new CmsException("Not implemented yet"); } @Override public Role[] getMembers() { - // TODO Auto-generated method stub - return null; + throw new CmsException("Not implemented yet"); } @Override public Role[] getRequiredMembers() { - // TODO Auto-generated method stub - return null; + throw new CmsException("Not implemented yet"); } public String toString() { diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrRole.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrRole.java index 43ded9e59..3b3320ab5 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrRole.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrRole.java @@ -2,6 +2,7 @@ package org.argeo.cms.internal.useradmin; import java.util.Dictionary; +import org.argeo.cms.CmsException; import org.osgi.service.useradmin.Role; abstract class JcrRole implements Role { @@ -23,8 +24,7 @@ abstract class JcrRole implements Role { @Override public Dictionary getProperties() { - // TODO Auto-generated method stub - return null; + throw new CmsException("Not implemented yet"); } } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java index ecaf5e0af..f36a0714f 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/JcrUserAdmin.java @@ -5,16 +5,16 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; -import javax.jcr.Node; import javax.jcr.Repository; -import javax.jcr.RepositoryException; import javax.jcr.Session; import org.argeo.ArgeoException; +import org.argeo.cms.CmsException; +import org.argeo.cms.internal.useradmin.jackrabbit.JackrabbitUserAdminService; import org.argeo.jcr.JcrUtils; import org.argeo.security.UserAdminService; -import org.argeo.security.jcr.JcrSecurityModel; import org.argeo.security.jcr.JcrUserDetails; +import org.argeo.security.jcr.NewUserDetails; import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; @@ -24,14 +24,16 @@ import org.osgi.service.useradmin.User; import org.osgi.service.useradmin.UserAdmin; import org.osgi.service.useradmin.UserAdminEvent; import org.osgi.service.useradmin.UserAdminListener; -import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UsernameNotFoundException; +/** + * Incomplete implementation of {@link UserAdmin} wrapping the supported + * {@link UserAdminService} for the time being. + */ public class JcrUserAdmin implements UserAdmin { private final BundleContext bundleContext; - private UserAdminService userAdminService; + private JackrabbitUserAdminService userAdminService; - private final JcrSecurityModel jcrSecurityModel = new SimpleJcrSecurityModel(); private final Session session; public JcrUserAdmin(BundleContext bundleContext, Repository node) { @@ -49,28 +51,16 @@ public class JcrUserAdmin implements UserAdmin { @Override public Role createRole(String name, int type) { - try { - if (Role.USER == type) { - Node userProfile = jcrSecurityModel.sync(session, name, null); - session.getWorkspace().getVersionManager() - .checkout(userProfile.getPath()); - String password = ""; - // TODO add roles - JcrUserDetails userDetails = new JcrUserDetails(userProfile, - password, new ArrayList()); - session.save(); - session.getWorkspace().getVersionManager() - .checkin(userProfile.getPath()); - userAdminService().createUser(userDetails); - return new JcrEndUser(userDetails); - } else if (Role.GROUP == type) { - userAdminService().newRole(name); - return new JcrGroup(name); - } else { - throw new ArgeoException("Unsupported role type " + type); - } - } catch (RepositoryException e) { - throw new ArgeoException("Cannot create role " + name); + if (Role.USER == type) { + NewUserDetails userDetails = new NewUserDetails(name, null); + userAdminService().createUser(userDetails); + return new JcrEndUser((JcrUserDetails) userAdminService() + .loadUserByUsername(name)); + } else if (Role.GROUP == type) { + userAdminService().newRole(name); + return new JcrGroup(name); + } else { + throw new ArgeoException("Unsupported role type " + type); } } @@ -122,7 +112,7 @@ public class JcrUserAdmin implements UserAdmin { @Override public User getUser(String key, String value) { - throw new ArgeoException("Property based search not yet implemented"); + throw new CmsException("Property based search not yet implemented"); } @Override @@ -134,7 +124,7 @@ public class JcrUserAdmin implements UserAdmin { return userAdminService; } - public void setUserAdminService(UserAdminService userAdminService) { + public void setUserAdminService(JackrabbitUserAdminService userAdminService) { this.userAdminService = userAdminService; } diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/SimpleJcrSecurityModel.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/SimpleJcrSecurityModel.java index 029719c3a..c39f9e56d 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/SimpleJcrSecurityModel.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/SimpleJcrSecurityModel.java @@ -22,17 +22,16 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.Value; import javax.jcr.security.Privilege; -import javax.jcr.version.VersionManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; +import org.argeo.cms.internal.auth.JcrSecurityModel; import org.argeo.jcr.ArgeoJcrConstants; import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.ArgeoTypes; import org.argeo.jcr.JcrUtils; import org.argeo.jcr.UserJcrUtils; -import org.argeo.security.jcr.JcrSecurityModel; /** * Manages data expected by the Argeo security model, such as user home and @@ -78,6 +77,7 @@ public class SimpleJcrSecurityModel implements JcrSecurityModel { } Node userProfile = UserJcrUtils.getUserProfile(session, username); + // new user if (userProfile == null) { String personPath = generateUserPath( ArgeoJcrConstants.PEOPLE_BASE_PATH, username); @@ -98,12 +98,6 @@ public class SimpleJcrSecurityModel implements JcrSecurityModel { username); JcrUtils.addPrivilege(session, userProfile.getPath(), username, Privilege.JCR_READ); - - VersionManager versionManager = session.getWorkspace() - .getVersionManager(); - if (versionManager.isCheckedOut(userProfile.getPath())) - versionManager.checkin(userProfile.getPath()); - } // Remote roles diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/jackrabbit/JackrabbitUserAdminService.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/jackrabbit/JackrabbitUserAdminService.java index f846e1c74..e7f44943b 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/jackrabbit/JackrabbitUserAdminService.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/jackrabbit/JackrabbitUserAdminService.java @@ -12,6 +12,7 @@ import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.SimpleCredentials; +import javax.jcr.version.VersionManager; import org.apache.jackrabbit.api.JackrabbitSession; import org.apache.jackrabbit.api.security.user.Authorizable; @@ -20,13 +21,14 @@ import org.apache.jackrabbit.api.security.user.User; import org.apache.jackrabbit.api.security.user.UserManager; import org.apache.jackrabbit.core.security.authentication.CryptedSimpleCredentials; import org.argeo.ArgeoException; +import org.argeo.cms.internal.auth.GrantedAuthorityPrincipal; +import org.argeo.cms.internal.auth.JcrSecurityModel; import org.argeo.jcr.JcrUtils; import org.argeo.jcr.UserJcrUtils; import org.argeo.security.NodeAuthenticationToken; import org.argeo.security.UserAdminService; -import org.argeo.cms.internal.auth.GrantedAuthorityPrincipal; -import org.argeo.security.jcr.JcrSecurityModel; import org.argeo.security.jcr.JcrUserDetails; +import org.argeo.security.jcr.NewUserDetails; import org.springframework.dao.DataAccessException; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.BadCredentialsException; @@ -87,13 +89,21 @@ public class JackrabbitUserAdminService implements UserAdminService, @Override public void createUser(UserDetails user) { try { - // FIXME workaround for issue in new user wizard where - // security model is hardcoded and it already exists - if (getUserManager().getAuthorizable(user.getUsername()) == null) { - getUserManager().createUser(user.getUsername(), - user.getPassword()); - securityModel.sync(adminSession, user.getUsername(), null); - } + // if (getUserManager().getAuthorizable(user.getUsername()) == null) + // { + getUserManager().createUser(user.getUsername(), user.getPassword()); + Node userProfile = securityModel.sync(adminSession, + user.getUsername(), null); + if (user instanceof NewUserDetails) + ((NewUserDetails) user).mapToProfileNode(userProfile); + userProfile.getSession().save(); + + // check in node + VersionManager versionManager = userProfile.getSession() + .getWorkspace().getVersionManager(); + if (versionManager.isCheckedOut(userProfile.getPath())) + versionManager.checkin(userProfile.getPath()); + // } updateUser(user); } catch (RepositoryException e) { throw new ArgeoException("Cannot create user " + user, e); diff --git a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/ldap/JcrLdapSynchronizer.java b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/ldap/JcrLdapSynchronizer.java index de28c7f49..ce8b37337 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/useradmin/ldap/JcrLdapSynchronizer.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/useradmin/ldap/JcrLdapSynchronizer.java @@ -41,12 +41,12 @@ import javax.naming.directory.ModificationItem; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; +import org.argeo.cms.internal.auth.JcrSecurityModel; import org.argeo.cms.internal.useradmin.SimpleJcrSecurityModel; import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.ArgeoTypes; import org.argeo.jcr.JcrUtils; import org.argeo.security.SecurityUtils; -import org.argeo.security.jcr.JcrSecurityModel; import org.argeo.security.jcr.JcrUserDetails; import org.springframework.ldap.core.ContextMapper; import org.springframework.ldap.core.DirContextAdapter; diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards/MainUserInfoWizardPage.java b/org.argeo.cms/src/org/argeo/cms/users/MainUserInfoWizardPage.java similarity index 97% rename from org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards/MainUserInfoWizardPage.java rename to org.argeo.cms/src/org/argeo/cms/users/MainUserInfoWizardPage.java index af1f3d93b..fc127adcf 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards/MainUserInfoWizardPage.java +++ b/org.argeo.cms/src/org/argeo/cms/users/MainUserInfoWizardPage.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.argeo.security.ui.admin.wizards; +package org.argeo.cms.users; import javax.jcr.Node; import javax.jcr.Property; @@ -58,7 +58,7 @@ public class MainUserInfoWizardPage extends WizardPage implements password2 = EclipseUiUtils.createGridLP(composite, "Repeat password", this); setControl(composite); - + // Initialize buttons setPageComplete(false); getContainer().updateButtons(); @@ -82,10 +82,10 @@ public class MainUserInfoWizardPage extends WizardPage implements // if (!username.getText().matches(UserAdminService.USERNAME_PATTERN)) // return // "Wrong user name format, should be lower case, between 3 and 64 characters with only '_' an '@' as acceptable special character."; - + if (username.getText().trim().equals("")) return "User name must not be empty"; - + try { UserDetails userDetails = userAdminService .loadUserByUsername(username.getText()); @@ -112,8 +112,8 @@ public class MainUserInfoWizardPage extends WizardPage implements return username.getText(); } - public String getPassword() { - return password1.getText(); + public char[] getPassword() { + return password1.getTextChars(); } public void mapToProfileNode(Node up) { diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards/NewUserWizard.java b/org.argeo.cms/src/org/argeo/cms/users/NewUserWizard.java similarity index 71% rename from org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards/NewUserWizard.java rename to org.argeo.cms/src/org/argeo/cms/users/NewUserWizard.java index 83f4c4851..ca817492b 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards/NewUserWizard.java +++ b/org.argeo.cms/src/org/argeo/cms/users/NewUserWizard.java @@ -13,9 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.argeo.security.ui.admin.wizards; - -import java.util.ArrayList; +package org.argeo.cms.users; import javax.jcr.Node; import javax.jcr.RepositoryException; @@ -23,30 +21,27 @@ import javax.jcr.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.jcr.JcrUtils; import org.argeo.jcr.UserJcrUtils; import org.argeo.security.UserAdminService; -import org.argeo.security.jcr.JcrSecurityModel; -import org.argeo.security.jcr.JcrUserDetails; +import org.argeo.security.jcr.NewUserDetails; import org.eclipse.jface.wizard.Wizard; -import org.springframework.security.core.GrantedAuthority; /** Wizard to create a new user */ public class NewUserWizard extends Wizard { private final static Log log = LogFactory.getLog(NewUserWizard.class); private Session session; private UserAdminService userAdminService; - private JcrSecurityModel jcrSecurityModel; + // private JcrSecurityModel jcrSecurityModel; // pages private MainUserInfoWizardPage mainUserInfo; - public NewUserWizard(Session session, UserAdminService userAdminService, - JcrSecurityModel jcrSecurityModel) { + public NewUserWizard(Session session, UserAdminService userAdminService) { this.session = session; this.userAdminService = userAdminService; - this.jcrSecurityModel = jcrSecurityModel; + // this.jcrSecurityModel = jcrSecurityModel; } @Override @@ -64,17 +59,26 @@ public class NewUserWizard extends Wizard { try { // Node userProfile = SecurityJcrUtils.createUserProfile(session, // username); - Node userProfile = jcrSecurityModel.sync(session, username, null); - session.getWorkspace().getVersionManager() - .checkout(userProfile.getPath()); - mainUserInfo.mapToProfileNode(userProfile); - String password = mainUserInfo.getPassword(); + // Node userProfile = jcrSecurityModel.sync(session, username, + // null); + // session.getWorkspace().getVersionManager() + // .checkout(userProfile.getPath()); + // mainUserInfo.mapToProfileNode(userProfile); + char[] password = mainUserInfo.getPassword(); // TODO add roles - JcrUserDetails jcrUserDetails = new JcrUserDetails(userProfile, - password, new ArrayList()); - session.save(); - session.getWorkspace().getVersionManager() - .checkin(userProfile.getPath()); + NewUserDetails jcrUserDetails = new NewUserDetails(username, + password) { + private static final long serialVersionUID = 7480071525603380742L; + + @Override + public void mapToProfileNode(Node userProfile) + throws RepositoryException { + mainUserInfo.mapToProfileNode(userProfile); + } + }; + // session.save(); + // session.getWorkspace().getVersionManager() + // .checkin(userProfile.getPath()); userAdminService.createUser(jcrUserDetails); return true; } catch (Exception e) { diff --git a/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/dialogs/UserCreationWizard.java b/org.argeo.cms/src/org/argeo/cms/users/UserCreationWizard.java similarity index 98% rename from org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/dialogs/UserCreationWizard.java rename to org.argeo.cms/src/org/argeo/cms/users/UserCreationWizard.java index ac7f0cee5..6ffd22462 100644 --- a/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/dialogs/UserCreationWizard.java +++ b/org.argeo.cms/src/org/argeo/cms/users/UserCreationWizard.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.argeo.eclipse.ui.dialogs; +package org.argeo.cms.users; import java.util.ArrayList; @@ -25,12 +25,12 @@ import javax.jcr.Session; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; +import org.argeo.cms.internal.auth.JcrSecurityModel; import org.argeo.eclipse.ui.EclipseUiUtils; import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.JcrUtils; import org.argeo.jcr.UserJcrUtils; import org.argeo.security.UserAdminService; -import org.argeo.security.jcr.JcrSecurityModel; import org.argeo.security.jcr.JcrUserDetails; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.Wizard; @@ -46,7 +46,8 @@ import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UsernameNotFoundException; /** Wizard to create a new user */ -public class UserCreationWizard extends Wizard { +@Deprecated +class UserCreationWizard extends Wizard { private final static Log log = LogFactory.getLog(UserCreationWizard.class); private Session session; private UserAdminService userAdminService; diff --git a/org.argeo.cms/src/org/argeo/cms/users/UserRolesPart.java b/org.argeo.cms/src/org/argeo/cms/users/UserRolesPart.java index f4acb8a9d..2da98a38d 100644 --- a/org.argeo.cms/src/org/argeo/cms/users/UserRolesPart.java +++ b/org.argeo.cms/src/org/argeo/cms/users/UserRolesPart.java @@ -7,13 +7,13 @@ import javax.jcr.Item; import javax.jcr.RepositoryException; import org.argeo.ArgeoException; +import org.argeo.cms.internal.auth.JcrSecurityModel; import org.argeo.cms.util.CmsUtils; import org.argeo.cms.viewers.EditablePart; import org.argeo.cms.viewers.NodePart; import org.argeo.cms.widgets.StyledControl; import org.argeo.jcr.ArgeoNames; import org.argeo.security.UserAdminService; -import org.argeo.security.jcr.JcrSecurityModel; import org.argeo.security.jcr.JcrUserDetails; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; diff --git a/org.argeo.cms/src/org/argeo/cms/users/Users.java b/org.argeo.cms/src/org/argeo/cms/users/Users.java index c5f0c7ee5..2637ed4d9 100644 --- a/org.argeo.cms/src/org/argeo/cms/users/Users.java +++ b/org.argeo.cms/src/org/argeo/cms/users/Users.java @@ -16,12 +16,10 @@ import org.argeo.ArgeoException; import org.argeo.cms.CmsUiProvider; import org.argeo.cms.maintenance.NonAdminPage; import org.argeo.cms.util.CmsUtils; -import org.argeo.eclipse.ui.dialogs.UserCreationWizard; import org.argeo.eclipse.ui.parts.UsersTable; import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.JcrUtils; import org.argeo.security.UserAdminService; -import org.argeo.security.jcr.JcrSecurityModel; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; @@ -52,7 +50,6 @@ public class Users implements CmsUiProvider { // Enable user CRUD // INJECTED private UserAdminService userAdminService; - private JcrSecurityModel jcrSecurityModel; // private UserDetailsManager userDetailsManager; private String userWkspName; @@ -216,8 +213,8 @@ public class Users implements CmsUiProvider { @Override public void widgetSelected(SelectionEvent e) { - UserCreationWizard newUserWizard = new UserCreationWizard( - session, userAdminService, jcrSecurityModel); + NewUserWizard newUserWizard = new NewUserWizard(session, + userAdminService); WizardDialog dialog = new WizardDialog(addBtn.getShell(), newUserWizard); if (dialog.open() == Dialog.OK) @@ -340,11 +337,6 @@ public class Users implements CmsUiProvider { userPage.setUserAdminService(userAdminService); } - public void setJcrSecurityModel(JcrSecurityModel jcrSecurityModel) { - this.jcrSecurityModel = jcrSecurityModel; - // userPage.setJcrSecurityModel(jcrSecurityModel); - } - public void setUserDetailsManager(UserDetailsManager userDetailsManager) { // this.userDetailsManager = userDetailsManager; // userPage.setUserDetailsManager(userDetailsManager); diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/ErrorFeedback.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/ErrorFeedback.java index 9a5482584..e7e9c3bd8 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/ErrorFeedback.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/ErrorFeedback.java @@ -15,102 +15,15 @@ */ package org.argeo.eclipse.ui.workbench; -import java.io.PrintWriter; -import java.io.StringWriter; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.jface.dialogs.IMessageProvider; -import org.eclipse.jface.dialogs.TitleAreaDialog; -import org.eclipse.swt.SWT; -import org.eclipse.swt.graphics.Point; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.layout.GridLayout; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Control; -import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; -import org.eclipse.ui.PlatformUI; - -/** Generic error dialog to be used in try/catch blocks */ -public class ErrorFeedback extends TitleAreaDialog { - private static final long serialVersionUID = -8918084784628179044L; - - private final static Log log = LogFactory.getLog(ErrorFeedback.class); - - private final String message; - private final Throwable exception; - - public static void show(String message, Throwable e) { - // rethrow ThreaDeath in order to make sure that RAP will properly clean - // up the UI thread - if (e instanceof ThreadDeath) - throw (ThreadDeath) e; - - new ErrorFeedback(getDisplay().getActiveShell(), message, e).open(); - } - - public static void show(String message) { - new ErrorFeedback(getDisplay().getActiveShell(), message, null).open(); - } - /** Tries to find a display */ - private static Display getDisplay() { - try { - Display display = PlatformUI.getWorkbench().getDisplay(); - if (display != null) - return display; - else - return Display.getDefault(); - } catch (Exception e) { - return Display.getCurrent(); - } - } +/** @deprecated Use {@link org.argeo.eclipse.ui.dialogs.ErrorFeedback} instead. */ +@Deprecated +public class ErrorFeedback extends org.argeo.eclipse.ui.dialogs.ErrorFeedback { + private static final long serialVersionUID = 5346084648745909554L; public ErrorFeedback(Shell parentShell, String message, Throwable e) { - super(parentShell); - this.message = message; - this.exception = e; - log.error(message, e); - } - - protected Point getInitialSize() { - if (exception != null) - return new Point(800, 600); - else - return new Point(400, 300); + super(parentShell, message, e); } - @Override - protected Control createDialogArea(Composite parent) { - Composite dialogarea = (Composite) super.createDialogArea(parent); - dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - Composite composite = new Composite(dialogarea, SWT.NONE); - composite.setLayout(new GridLayout(2, false)); - composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - - setMessage(message != null ? message - + (exception != null ? ": " + exception.getMessage() : "") - : exception != null ? exception.getMessage() : "Unkown Error", - IMessageProvider.ERROR); - - if (exception != null) { - Text stack = new Text(composite, SWT.MULTI | SWT.LEAD | SWT.BORDER - | SWT.V_SCROLL | SWT.H_SCROLL); - stack.setEditable(false); - stack.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - StringWriter sw = new StringWriter(); - exception.printStackTrace(new PrintWriter(sw)); - stack.setText(sw.toString()); - } - - parent.pack(); - return composite; - } - - protected void configureShell(Shell shell) { - super.configureShell(shell); - shell.setText("Error"); - } } \ No newline at end of file diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddFolderNode.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddFolderNode.java index 291df2ccc..c396b7215 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddFolderNode.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddFolderNode.java @@ -20,8 +20,8 @@ import javax.jcr.RepositoryException; import javax.jcr.nodetype.NodeType; import org.argeo.eclipse.ui.TreeParent; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.eclipse.ui.dialogs.SingleValue; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin; import org.argeo.eclipse.ui.workbench.jcr.JcrBrowserView; import org.argeo.eclipse.ui.workbench.jcr.internal.model.SingleJcrNodeElem; diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddPrivileges.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddPrivileges.java index 7100d8f18..684fea655 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddPrivileges.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddPrivileges.java @@ -20,7 +20,7 @@ import javax.jcr.RepositoryException; import org.argeo.ArgeoException; import org.argeo.eclipse.ui.TreeParent; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin; import org.argeo.eclipse.ui.workbench.jcr.internal.model.SingleJcrNodeElem; import org.argeo.eclipse.ui.workbench.jcr.internal.model.WorkspaceElem; diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddRemoteRepository.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddRemoteRepository.java index 50e286179..6ed419f04 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddRemoteRepository.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/AddRemoteRepository.java @@ -25,8 +25,8 @@ import javax.jcr.Session; import javax.jcr.SimpleCredentials; import org.argeo.ArgeoException; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.eclipse.ui.workbench.CommandUtils; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; import org.argeo.eclipse.ui.workbench.WorkbenchConstants; import org.argeo.jcr.ArgeoJcrConstants; import org.argeo.jcr.ArgeoNames; diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/CreateWorkspace.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/CreateWorkspace.java index 82db51321..cd9e402ee 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/CreateWorkspace.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/CreateWorkspace.java @@ -17,8 +17,8 @@ package org.argeo.eclipse.ui.workbench.commands; import java.util.Arrays; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.eclipse.ui.dialogs.SingleValue; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin; import org.argeo.eclipse.ui.workbench.jcr.JcrBrowserView; import org.argeo.eclipse.ui.workbench.jcr.internal.model.RepositoryElem; diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/DeleteNodes.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/DeleteNodes.java index ff05c631f..8a5b9d6e4 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/DeleteNodes.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/DeleteNodes.java @@ -22,7 +22,7 @@ import javax.jcr.RepositoryException; import org.argeo.ArgeoException; import org.argeo.eclipse.ui.TreeParent; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.eclipse.ui.workbench.jcr.JcrBrowserView; import org.argeo.eclipse.ui.workbench.jcr.internal.model.SingleJcrNodeElem; import org.argeo.eclipse.ui.workbench.jcr.internal.model.WorkspaceElem; diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/EditNode.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/EditNode.java index 4c9553484..12a582291 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/EditNode.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/EditNode.java @@ -21,7 +21,7 @@ import java.util.Map; import javax.jcr.Property; import javax.jcr.nodetype.NodeType; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.eclipse.ui.workbench.jcr.internal.parts.NodeEditorInput; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/GetNodeSize.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/GetNodeSize.java index 1caf11482..226964405 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/GetNodeSize.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/GetNodeSize.java @@ -21,7 +21,7 @@ import java.util.List; import javax.jcr.Node; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin; import org.argeo.jcr.JcrUtils; import org.argeo.eclipse.ui.workbench.jcr.internal.model.SingleJcrNodeElem; diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/ImportFileSystem.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/ImportFileSystem.java index fa2da1dc5..7b3be8965 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/ImportFileSystem.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/commands/ImportFileSystem.java @@ -18,7 +18,7 @@ package org.argeo.eclipse.ui.workbench.commands; import javax.jcr.Node; import org.argeo.eclipse.ui.TreeParent; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.eclipse.ui.workbench.WorkbenchUiPlugin; import org.argeo.eclipse.ui.workbench.jcr.JcrBrowserView; import org.argeo.eclipse.ui.workbench.jcr.internal.model.SingleJcrNodeElem; diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/model/RepositoriesElem.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/model/RepositoriesElem.java index c0fc0c5e4..1e1469bb8 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/model/RepositoriesElem.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/model/RepositoriesElem.java @@ -26,7 +26,7 @@ import javax.jcr.Session; import org.argeo.ArgeoException; import org.argeo.eclipse.ui.TreeParent; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.MaintainedRepository; import org.argeo.jcr.RepositoryRegister; diff --git a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ImportFileSystemWizard.java b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ImportFileSystemWizard.java index eea9f72c3..871b73ad6 100644 --- a/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ImportFileSystemWizard.java +++ b/org.argeo.eclipse.ui.workbench/src/org/argeo/eclipse/ui/workbench/jcr/internal/parts/ImportFileSystemWizard.java @@ -29,8 +29,8 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.eclipse.ui.specific.UploadFileWizardPage; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; diff --git a/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/dialogs/ErrorFeedback.java b/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/dialogs/ErrorFeedback.java new file mode 100644 index 000000000..183468402 --- /dev/null +++ b/org.argeo.eclipse.ui/src/org/argeo/eclipse/ui/dialogs/ErrorFeedback.java @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2007-2012 Argeo GmbH + * + * 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.eclipse.ui.dialogs; + +import java.io.PrintWriter; +import java.io.StringWriter; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.eclipse.jface.dialogs.IMessageProvider; +import org.eclipse.jface.dialogs.TitleAreaDialog; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; + +/** Generic error dialog to be used in try/catch blocks */ +public class ErrorFeedback extends TitleAreaDialog { + private static final long serialVersionUID = -8918084784628179044L; + + private final static Log log = LogFactory.getLog(ErrorFeedback.class); + + private final String message; + private final Throwable exception; + + public static void show(String message, Throwable e) { + // rethrow ThreaDeath in order to make sure that RAP will properly clean + // up the UI thread + if (e instanceof ThreadDeath) + throw (ThreadDeath) e; + + new ErrorFeedback(getDisplay().getActiveShell(), message, e).open(); + } + + public static void show(String message) { + new ErrorFeedback(getDisplay().getActiveShell(), message, null).open(); + } + + /** Tries to find a display */ + private static Display getDisplay() { + try { + Display display = Display.getCurrent(); + if (display != null) + return display; + else + return Display.getDefault(); + } catch (Exception e) { + return Display.getCurrent(); + } + } + + public ErrorFeedback(Shell parentShell, String message, Throwable e) { + super(parentShell); + this.message = message; + this.exception = e; + log.error(message, e); + } + + protected Point getInitialSize() { + if (exception != null) + return new Point(800, 600); + else + return new Point(400, 300); + } + + @Override + protected Control createDialogArea(Composite parent) { + Composite dialogarea = (Composite) super.createDialogArea(parent); + dialogarea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + Composite composite = new Composite(dialogarea, SWT.NONE); + composite.setLayout(new GridLayout(2, false)); + composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + + setMessage(message != null ? message + + (exception != null ? ": " + exception.getMessage() : "") + : exception != null ? exception.getMessage() : "Unkown Error", + IMessageProvider.ERROR); + + if (exception != null) { + Text stack = new Text(composite, SWT.MULTI | SWT.LEAD | SWT.BORDER + | SWT.V_SCROLL | SWT.H_SCROLL); + stack.setEditable(false); + stack.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); + StringWriter sw = new StringWriter(); + exception.printStackTrace(new PrintWriter(sw)); + stack.setText(sw.toString()); + } + + parent.pack(); + return composite; + } + + protected void configureShell(Shell shell) { + super.configureShell(shell); + shell.setText("Error"); + } +} \ No newline at end of file diff --git a/org.argeo.security.core/src/org/argeo/security/jcr/NewUserDetails.java b/org.argeo.security.core/src/org/argeo/security/jcr/NewUserDetails.java new file mode 100644 index 000000000..2257e26fc --- /dev/null +++ b/org.argeo.security.core/src/org/argeo/security/jcr/NewUserDetails.java @@ -0,0 +1,41 @@ +package org.argeo.security.jcr; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.jcr.Node; +import javax.jcr.RepositoryException; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; + +/** Used to create a new user */ +public class NewUserDetails extends User { + private static final long serialVersionUID = -8331941336984083297L; + + public NewUserDetails(String username, char[] password) { + this(username, password, null); + } + + public NewUserDetails(String username, char[] password, String[] roles) { + super(username, new String(password), false, false, false, false, + rolesToAuthorities(roles)); + } + + /** To be overriden */ + public void mapToProfileNode(Node userProfile) throws RepositoryException { + // does nothing by default + } + + private static Collection rolesToAuthorities( + String[] roles) { + List authorities = new ArrayList(); + if (roles != null) + for (String role : roles) { + authorities.add(new SimpleGrantedAuthority(role)); + } + return authorities; + } +} diff --git a/org.argeo.security.ui.admin/META-INF/spring/commands.xml b/org.argeo.security.ui.admin/META-INF/spring/commands.xml index e0a435e07..f7a483f4c 100644 --- a/org.argeo.security.ui.admin/META-INF/spring/commands.xml +++ b/org.argeo.security.ui.admin/META-INF/spring/commands.xml @@ -13,7 +13,7 @@ scope="prototype"> - + - + - - + - - - - - + \ No newline at end of file diff --git a/org.argeo.security.ui.admin/META-INF/spring/views.xml b/org.argeo.security.ui.admin/META-INF/spring/views.xml index 2ddb05f60..655b0c8e3 100644 --- a/org.argeo.security.ui.admin/META-INF/spring/views.xml +++ b/org.argeo.security.ui.admin/META-INF/spring/views.xml @@ -7,7 +7,6 @@ - - + 4.0.0 org.argeo.commons @@ -11,6 +12,11 @@ Commons CMS Workbench Admin jar + + org.argeo.commons + org.argeo.cms + 2.1.17-SNAPSHOT + org.argeo.commons org.argeo.util diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/NewUser.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/NewUser.java index 660896de8..c2442c48a 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/NewUser.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/NewUser.java @@ -18,10 +18,9 @@ package org.argeo.security.ui.admin.commands; import javax.jcr.Repository; import javax.jcr.Session; +import org.argeo.cms.users.NewUserWizard; import org.argeo.jcr.JcrUtils; import org.argeo.security.UserAdminService; -import org.argeo.security.jcr.JcrSecurityModel; -import org.argeo.security.ui.admin.wizards.NewUserWizard; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -32,14 +31,15 @@ import org.eclipse.ui.handlers.HandlerUtil; public class NewUser extends AbstractHandler { private Repository repository; private UserAdminService userAdminService; - private JcrSecurityModel jcrSecurityModel; + + // private JcrSecurityModel jcrSecurityModel; public Object execute(ExecutionEvent event) throws ExecutionException { Session session = null; try { session = repository.login(); NewUserWizard newUserWizard = new NewUserWizard(session, - userAdminService, jcrSecurityModel); + userAdminService); WizardDialog dialog = new WizardDialog( HandlerUtil.getActiveShell(event), newUserWizard); dialog.open(); @@ -59,8 +59,8 @@ public class NewUser extends AbstractHandler { this.userAdminService = userAdminService; } - public void setJcrSecurityModel(JcrSecurityModel jcrSecurityModel) { - this.jcrSecurityModel = jcrSecurityModel; - } + // public void setJcrSecurityModel(JcrSecurityModel jcrSecurityModel) { + // this.jcrSecurityModel = jcrSecurityModel; + // } } diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/UserBatchUpdate.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/UserBatchUpdate.java index 657dfc70a..3b8b352ec 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/UserBatchUpdate.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/commands/UserBatchUpdate.java @@ -20,7 +20,6 @@ import javax.jcr.Session; import org.argeo.jcr.JcrUtils; import org.argeo.security.UserAdminService; -import org.argeo.security.jcr.JcrSecurityModel; import org.argeo.security.ui.admin.wizards.UserBatchUpdateWizard; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -32,14 +31,13 @@ import org.eclipse.ui.handlers.HandlerUtil; public class UserBatchUpdate extends AbstractHandler { private Repository repository; private UserAdminService userAdminService; - private JcrSecurityModel jcrSecurityModel; public Object execute(ExecutionEvent event) throws ExecutionException { Session session = null; try { session = repository.login(); - UserBatchUpdateWizard userBatchUpdateWizard = new UserBatchUpdateWizard(session, - userAdminService, jcrSecurityModel); + UserBatchUpdateWizard userBatchUpdateWizard = new UserBatchUpdateWizard( + session, userAdminService); WizardDialog dialog = new WizardDialog( HandlerUtil.getActiveShell(event), userBatchUpdateWizard); dialog.open(); @@ -59,8 +57,8 @@ public class UserBatchUpdate extends AbstractHandler { this.userAdminService = userAdminService; } - public void setJcrSecurityModel(JcrSecurityModel jcrSecurityModel) { - this.jcrSecurityModel = jcrSecurityModel; - } + // public void setJcrSecurityModel(JcrSecurityModel jcrSecurityModel) { + // this.jcrSecurityModel = jcrSecurityModel; + // } } diff --git a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards/UserBatchUpdateWizard.java b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards/UserBatchUpdateWizard.java index 0cf3c49e3..bfa65a7b8 100644 --- a/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards/UserBatchUpdateWizard.java +++ b/org.argeo.security.ui.admin/src/org/argeo/security/ui/admin/wizards/UserBatchUpdateWizard.java @@ -35,7 +35,6 @@ import org.argeo.eclipse.ui.parts.UsersTable; import org.argeo.jcr.ArgeoNames; import org.argeo.jcr.JcrUtils; import org.argeo.security.UserAdminService; -import org.argeo.security.jcr.JcrSecurityModel; import org.argeo.security.jcr.JcrUserDetails; import org.argeo.security.ui.PrivilegedJob; import org.argeo.security.ui.admin.SecurityAdminPlugin; @@ -92,10 +91,9 @@ public class UserBatchUpdateWizard extends Wizard { }; public UserBatchUpdateWizard(Session session, - UserAdminService userAdminService, JcrSecurityModel jcrSecurityModel) { + UserAdminService userAdminService) { this.session = session; this.userAdminService = userAdminService; - // this.jcrSecurityModel = jcrSecurityModel; } @Override @@ -562,8 +560,7 @@ public class UserBatchUpdateWizard extends Wizard { ((IPageChangeProvider) container).addPageChangedListener(this); } - userTableCmp = new UsersTable(mainCmp, SWT.NO_FOCUS, - session); + userTableCmp = new UsersTable(mainCmp, SWT.NO_FOCUS, session); userTableCmp.populate(false, false); setControl(mainCmp); } diff --git a/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/SecureEntryPoint.java b/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/SecureEntryPoint.java index 9b01c5525..7f92ab7cb 100644 --- a/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/SecureEntryPoint.java +++ b/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/SecureEntryPoint.java @@ -30,7 +30,7 @@ import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; import org.argeo.cms.KernelHeader; import org.argeo.cms.auth.ArgeoLoginContext; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.security.ui.auth.DefaultLoginDialog; import org.argeo.util.LocaleUtils; import org.eclipse.jface.dialogs.MessageDialog; @@ -150,8 +150,8 @@ public class SecureEntryPoint implements EntryPoint { // Logout callback when the display is disposed display.disposeExec(new Runnable() { public void run() { - log.debug("Display disposed"); - // logout(loginContext, username); + if (log.isTraceEnabled()) + log.trace("Display disposed"); try { loginContext.logout(); } catch (LoginException e) { @@ -174,7 +174,7 @@ public class SecureEntryPoint implements EntryPoint { } }); // Explicit exit from workbench - logout(loginContext, username); + fullLogout(loginContext, username); } finally { display.dispose(); } @@ -229,7 +229,7 @@ public class SecureEntryPoint implements EntryPoint { return null; } - private void logout(LoginContext loginContext, String username) { + private void fullLogout(LoginContext loginContext, String username) { try { loginContext.logout(); SecurityContextHolder.clearContext(); diff --git a/org.argeo.security.ui/src/org/argeo/security/ui/commands/OpenHomePerspective.java b/org.argeo.security.ui/src/org/argeo/security/ui/commands/OpenHomePerspective.java index 6cc16c79a..a530a4e9a 100644 --- a/org.argeo.security.ui/src/org/argeo/security/ui/commands/OpenHomePerspective.java +++ b/org.argeo.security.ui/src/org/argeo/security/ui/commands/OpenHomePerspective.java @@ -15,7 +15,7 @@ */ package org.argeo.security.ui.commands; -import org.argeo.eclipse.ui.workbench.ErrorFeedback; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.security.ui.UserHomePerspective; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; -- 2.30.2