Author: glandais Date: 2008-01-29 18:20:47 +0000 (Tue, 29 Jan 2008) New Revision: 557 Modified: trunk/simexplorer-is-ear/pom.xml trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManagerImpl.java trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceClient.java trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceServer.java trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java trunk/simexplorer-is-storage/pom.xml trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java trunk/simexplorer-is-web/pom.xml trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ExceptionReport.java Log: Security service & Tapestry 5.0.9 Modified: trunk/simexplorer-is-ear/pom.xml =================================================================== --- trunk/simexplorer-is-ear/pom.xml 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-ear/pom.xml 2008-01-29 18:20:47 UTC (rev 557) @@ -40,13 +40,23 @@ <dependency> <groupId>tapestry5-treegrid</groupId> <artifactId>tapestry5-treegrid</artifactId> - <version>0.0.4-SNAPSHOT</version> + <version>5.0.9</version> </dependency> <dependency> <groupId>org.apache.tapestry</groupId> <artifactId>tapestry-upload</artifactId> <version>5.0.9</version> </dependency> + <dependency> + <groupId>org.apache.tapestry</groupId> + <artifactId>tapestry-core</artifactId> + <version>5.0.9</version> + </dependency> + <dependency> + <groupId>org.apache.tapestry</groupId> + <artifactId>tapestry-ioc</artifactId> + <version>5.0.9</version> + </dependency> <dependency> <groupId>simexplorer-is</groupId> Modified: trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManagerImpl.java =================================================================== --- trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManagerImpl.java 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-security/src/java/fr/cemagref/simexplorer/is/security/credentials/CredentialManagerImpl.java 2008-01-29 18:20:47 UTC (rev 557) @@ -29,6 +29,7 @@ import fr.cemagref.simexplorer.is.security.entities.Actor; import fr.cemagref.simexplorer.is.security.entities.Group; import fr.cemagref.simexplorer.is.security.entities.Permission; +import fr.cemagref.simexplorer.is.security.entities.User; @Stateless(name = "CredentialManager") @Local(CredentialManager.class) @@ -42,34 +43,49 @@ int level = -1; if (actor.equals(permission.getActor())) { return 0; - } else { - List<Group> groups = actor.getGroups(); - for (Group group : groups) { - int levelGroup = getRelativeLevel(group, permission); - if (levelGroup >= 0) { - level = levelGroup + 1; - } + } + List<Group> groups = actor.getGroups(); + for (Group group : groups) { + int levelGroup = getRelativeLevel(group, permission); + if (levelGroup >= 0) { + level = levelGroup + 1; } } + return level; } public Permission getPermission(String token, String businessId) { Permission p = null; - Actor actor = dao.getLoggedUser(token); - List<Permission> permissions = dao.getPermissions(businessId); - int minLevel = 0; + User user = dao.getLoggedUser(token); - for (Permission permission : permissions) { - int relativeLevel = getRelativeLevel(actor, permission); - if (relativeLevel >= 0) { - if (p == null || minLevel > relativeLevel) { - p = permission; - minLevel = relativeLevel; + if (user.isSuperAdmin()) { + p = new Permission(); + p.setActor(user); + p.setBusinessId(businessId); + p.setOwner(true); + } else { + List<Permission> permissions = dao.getPermissions(businessId); + int minLevel = 0; + + for (Permission permission : permissions) { + int relativeLevel = getRelativeLevel(user, permission); + if (relativeLevel >= 0) { + if (p == null || minLevel > relativeLevel) { + p = permission; + minLevel = relativeLevel; + } } } } + + if (p != null && p.isOwner()) { + p.setCanAdmin(true); + p.setCanRead(true); + p.setCanWrite(true); + } + return p; } Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceClient.java =================================================================== --- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceClient.java 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceClient.java 2008-01-29 18:20:47 UTC (rev 557) @@ -17,17 +17,26 @@ * ##% */ package fr.cemagref.simexplorer.is.service; +import fr.cemagref.simexplorer.is.storage.StorageException; +import fr.cemagref.simexplorer.is.storage.engine.StorageEngine; import fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl; public class StorageServiceClient extends StorageServiceCommon { - public StorageServiceClient() { - storageEngine = new StorageEngineImpl(); - super.firstOpen(); - } + private static StorageEngine storageEngine; - public String loginUser(String login, String password) throws SimExplorerServiceException { + public String loginUser(String login, String password) + throws SimExplorerServiceException { throw new SimExplorerServiceException("can not log to local service"); } + @Override + protected StorageEngine getStorageEngine() throws StorageException { + if (storageEngine == null) { + storageEngine = new StorageEngineImpl(); + storageEngine.open(); + } + return storageEngine; + } + } Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java =================================================================== --- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-01-29 18:20:47 UTC (rev 557) @@ -54,30 +54,17 @@ public abstract class StorageServiceCommon implements StorageService, XmlConstants { - protected StorageEngine storageEngine; - private static final String KEY_XML = "_xml"; - protected void firstOpen() { - try { - storageEngine.open(); - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } + protected abstract StorageEngine getStorageEngine() throws StorageException; - public void open() throws Exception { - storageEngine.open(); - } - public void close() throws Exception { - storageEngine.close(); + getStorageEngine().close(); } public void commit() throws SimExplorerServiceException { try { - storageEngine.commit(); + getStorageEngine().commit(); } catch (StorageException e) { throw new SimExplorerServiceException(e); } @@ -118,7 +105,7 @@ public MetaDataEntity getMetadata(String token, String uuid) throws SimExplorerServiceException { try { - return storageEngine.getMetadata(token, uuid); + return getStorageEngine().getMetadata(token, uuid); } catch (StorageException e) { throw new SimExplorerServiceException(e); } @@ -127,7 +114,8 @@ public MetaDataEntity getMetadata(String token, String uuid, String version) throws SimExplorerServiceException { try { - return storageEngine.getMetadata(token, uuid, new Version(version)); + return getStorageEngine().getMetadata(token, uuid, + new Version(version)); } catch (StorageException e) { throw new SimExplorerServiceException(e); } @@ -137,7 +125,7 @@ boolean onlyLatest, int indexStart, int count, int dateOrder) throws SimExplorerServiceException { try { - return storageEngine.findFullText(token, query, onlyLatest, + return getStorageEngine().findFullText(token, query, onlyLatest, indexStart, count, dateOrder); } catch (StorageException e) { throw new SimExplorerServiceException(e); @@ -147,7 +135,8 @@ public int findFullTextCount(String token, String query, boolean onlyLatest) throws SimExplorerServiceException { try { - return storageEngine.findFullTextCount(token, query, onlyLatest); + return getStorageEngine().findFullTextCount(token, query, + onlyLatest); } catch (StorageException e) { throw new SimExplorerServiceException(e); } @@ -156,7 +145,7 @@ public int findApplicationsCount(String token, boolean onlyLatest) throws SimExplorerServiceException { try { - return storageEngine.findElementsByTypeCount(token, + return getStorageEngine().findElementsByTypeCount(token, VALUE_METADATA_TYPE_EA, onlyLatest); } catch (StorageException e) { throw new SimExplorerServiceException(e); @@ -167,7 +156,7 @@ int start, int count, int dateOrder) throws SimExplorerServiceException { try { - return storageEngine + return getStorageEngine() .findElementsByType(token, VALUE_METADATA_TYPE_EA, onlyLatest, start, count, dateOrder); } catch (StorageException e) { @@ -184,7 +173,7 @@ le = (LoggableElement) BaseEntityFactory.getFactory( LoggableElement.class.getPackage().getName() + "." + mde.getType()).loadElement( - storageEngine.retrieveData(token, mde, KEY_XML)); + getStorageEngine().retrieveData(token, mde, KEY_XML)); return le; } catch (Exception e) { @@ -205,12 +194,13 @@ if (!entry.isDirectory()) { String entryName = entry.getName(); if (entryName.equals(FILE_XML)) { - xmlFile = storageEngine.storeTempData(zis); + xmlFile = getStorageEngine().storeTempData(zis); } else { if (entryName.startsWith(FILE_DATA_PREFIX)) { String fileName = entryName.replace( FILE_DATA_PREFIX + "/", ""); - String idFile = storageEngine.storeTempData(zis); + String idFile = getStorageEngine().storeTempData( + zis); attachments.put(fileName, idFile); } } @@ -225,10 +215,11 @@ private MetaDataEntity saveElement(String token, InputStream xmlFile, Map<String, InputStream> attachments) throws Exception { // Store temporary data - String idxml = storageEngine.storeTempData(xmlFile); + String idxml = getStorageEngine().storeTempData(xmlFile); Map<String, String> idsattachment = new HashMap<String, String>(); for (Map.Entry<String, InputStream> entry : attachments.entrySet()) { - String idattachment = storageEngine.storeTempData(entry.getValue()); + String idattachment = getStorageEngine().storeTempData( + entry.getValue()); idsattachment.put(entry.getKey(), idattachment); } return saveElement(token, idxml, idsattachment); @@ -238,8 +229,8 @@ String version, String dataKey) throws SimExplorerServiceException { try { MetaDataEntity mde = getMetadata(token, uuid, version); - InputStream stream = storageEngine - .retrieveData(token, mde, dataKey); + InputStream stream = getStorageEngine().retrieveData(token, mde, + dataKey); RemoteInputStreamServer remoteStream = new SimpleRemoteInputStream( stream); return remoteStream.export(); @@ -254,7 +245,7 @@ String uuid, String version) throws SimExplorerServiceException { MetaDataEntity mde = getMetadata(token, uuid, version); try { - InputStream xmlStream = storageEngine.retrieveData(token, mde, + InputStream xmlStream = getStorageEngine().retrieveData(token, mde, KEY_XML); OutputStream os = RemoteOutputStreamClient.wrap(xmlOutputStream); @@ -292,7 +283,8 @@ MetaDataEntityFactory mdeFactory = MetaDataEntityFactory .getFactory(MetaDataEntity.class); MetaDataEntity metaData = mdeFactory - .loadElementFromParentXML(storageEngine.retrieveTempData(idxml)); + .loadElementFromParentXML(getStorageEngine().retrieveTempData( + idxml)); if (metaData.getType() != null && VALUE_METADATA_TYPE_EA.equals(metaData.getType())) { @@ -317,16 +309,16 @@ // Prepare saving Map<String, InputStream> attachments = new HashMap<String, InputStream>(); - attachments.put(KEY_XML, storageEngine.retrieveTempData(idxml)); + attachments.put(KEY_XML, getStorageEngine().retrieveTempData(idxml)); Map<String, ContentType> realAttachments = metaData.getAttachments(); for (Map.Entry<String, ContentType> entry : realAttachments.entrySet()) { - attachments.put(entry.getKey(), storageEngine + attachments.put(entry.getKey(), getStorageEngine() .retrieveTempData(idsattachment.get(entry.getKey()))); } - storageEngine.saveElement(token, metaData, attachments); - storageEngine.commit(); + getStorageEngine().saveElement(token, metaData, attachments); + getStorageEngine().commit(); return metaData; } @@ -339,7 +331,7 @@ .getFactory(MetaDataEntity.class); Document document = BaseEntityFactory.getXMLBuilder().parse( - storageEngine.retrieveTempData(idxml)); + getStorageEngine().retrieveTempData(idxml)); Element rootElement = (Element) document.getFirstChild(); @@ -349,8 +341,8 @@ Set<Element> entityElements = elementFactory.getXMLElementsByTagName( entitiesElement, entityNode); for (Element element : entityElements) { - saveElement(token, storageEngine.storeTempData(BaseEntityFactory - .serializeElement(element)), idsattachment); + saveElement(token, getStorageEngine().storeTempData( + BaseEntityFactory.serializeElement(element)), idsattachment); } } @@ -359,13 +351,13 @@ throws Exception { // Check existing version in storage - MetaDataEntity previousVersion = storageEngine.getMetadata(token, + MetaDataEntity previousVersion = getStorageEngine().getMetadata(token, metaData.getUuid(), metaData.getVersion()); /* - * MetaDataEntity parentData = storageEngine.getElementVersion(metaData + * MetaDataEntity parentData = getStorageEngine().getElementVersion(metaData * .getParentData().getUuid(), metaData.getParentData() .getVersion()); * MetaDataEntity parentVersion = - * storageEngine.getElementVersion(metaData + * getStorageEngine().getElementVersion(metaData * .getParentVersion().getUuid(), metaData.getParentVersion() * .getVersion()); */ @@ -381,8 +373,8 @@ public MetaDataEntity[] getVersions(String token, String uuid) throws SimExplorerServiceException { try { - Set<MetaDataEntity> versions = storageEngine.getElementVersions( - token, uuid); + Set<MetaDataEntity> versions = getStorageEngine() + .getElementVersions(token, uuid); return versions.toArray(new MetaDataEntity[versions.size()]); } catch (StorageException e) { throw new SimExplorerServiceException(e); @@ -392,7 +384,7 @@ public void deleteElement(String token, String uuid, String version) throws SimExplorerServiceException { try { - storageEngine.deleteElement(token, uuid, new Version(version)); + getStorageEngine().deleteElement(token, uuid, new Version(version)); } catch (StorageException e) { throw new SimExplorerServiceException(e); } @@ -401,7 +393,7 @@ public void deleteElement(String token, String uuid) throws SimExplorerServiceException { try { - storageEngine.deleteElements(token, uuid); + getStorageEngine().deleteElements(token, uuid); } catch (StorageException e) { throw new SimExplorerServiceException(e); } Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceServer.java =================================================================== --- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceServer.java 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceServer.java 2008-01-29 18:20:47 UTC (rev 557) @@ -23,6 +23,8 @@ import org.jboss.annotation.ejb.RemoteBinding; +import fr.cemagref.simexplorer.is.storage.StorageException; +import fr.cemagref.simexplorer.is.storage.engine.StorageEngine; import fr.cemagref.simexplorer.is.storage.engine.StorageEngineImpl; @Stateless(name = "StorageService") @@ -33,16 +35,19 @@ @EJB private AuthenticationService authenticationService; - public StorageServiceServer() { - // FIXME - // storageEngine = new StorageEngineSecuImpl(); - storageEngine = new StorageEngineImpl(); - super.firstOpen(); - } + @EJB + private StorageEngine storageEngine; - public String loginUser(String login, String password) throws SimExplorerServiceException { + public String loginUser(String login, String password) + throws SimExplorerServiceException { String token = authenticationService.loginUser(login, password); return token; } + @Override + protected StorageEngine getStorageEngine() throws StorageException { + storageEngine.open(); + return storageEngine; + } + } Modified: trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java =================================================================== --- trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineSecuImpl.java 2008-01-29 18:20:47 UTC (rev 557) @@ -22,6 +22,8 @@ import java.util.Map; import javax.ejb.EJB; +import javax.ejb.Local; +import javax.ejb.Stateless; import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; import fr.cemagref.simexplorer.is.entities.metadata.Version; @@ -29,6 +31,8 @@ import fr.cemagref.simexplorer.is.security.entities.Permission; import fr.cemagref.simexplorer.is.storage.StorageException; + at Stateless(name = "StorageEngine") + at Local(StorageEngine.class) public class StorageEngineSecuImpl extends StorageEngineImpl { @EJB @@ -63,8 +67,8 @@ boolean onlyLatest, int start, int count, int dateOrder) throws StorageException { MetaDataEntity[] list; - list = super.findElementsByType(token, type, - onlyLatest, start, count, dateOrder); + list = super.findElementsByType(token, type, onlyLatest, start, count, + dateOrder); // TODO how to filter without losing pagination? return list; } @@ -97,7 +101,7 @@ throws StorageException { MetaDataEntity mde; Permission permission = credentialManager.getPermission(token, uuid); - if (permission.isCanRead()) { + if (permission != null && permission.isCanRead()) { mde = super.getMetadata(token, uuid, version); } else { throw new StorageException("Permission denied"); @@ -110,7 +114,7 @@ throws StorageException { MetaDataEntity mde; Permission permission = credentialManager.getPermission(token, uuid); - if (permission.isCanRead()) { + if (permission != null && permission.isCanRead()) { mde = super.getMetadata(token, uuid); } else { throw new StorageException("Permission denied"); @@ -123,7 +127,7 @@ throws StorageException { List<Version> versions; Permission permission = credentialManager.getPermission(token, uuid); - if (permission.isCanRead()) { + if (permission != null && permission.isCanRead()) { versions = super.getVersions(token, uuid); } else { throw new StorageException("Permission denied"); @@ -137,7 +141,7 @@ InputStream stream; Permission permission = credentialManager.getPermission(token, entity .getUuid()); - if (permission.isCanRead()) { + if (permission != null && permission.isCanRead()) { stream = super.retrieveData(token, entity, field); } else { throw new StorageException("Permission denied"); @@ -150,7 +154,7 @@ Map<String, InputStream> attachments) throws StorageException { Permission permission = credentialManager.getPermission(token, element .getUuid()); - if (permission.isCanWrite()) { + if (permission != null && permission.isCanWrite()) { super.saveElement(token, element, attachments); credentialManager.saveElement(token, element.getUuid()); } else { Modified: trunk/simexplorer-is-storage/pom.xml =================================================================== --- trunk/simexplorer-is-storage/pom.xml 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-storage/pom.xml 2008-01-29 18:20:47 UTC (rev 557) @@ -5,7 +5,7 @@ <groupId>simexplorer-is</groupId> <artifactId>simexplorer-is-storage</artifactId> <name>Storage</name> - + <version>0.0.1-SNAPSHOT</version> <description></description> <packaging>jar</packaging> @@ -28,6 +28,12 @@ <version>1.1</version> </dependency> <dependency> + <groupId>jboss</groupId> + <artifactId>jboss-ejb3x</artifactId> + <version>4.2.2.GA</version> + <scope>provided</scope> + </dependency> + <dependency> <groupId>simexplorer-is</groupId> <artifactId>simexplorer-is-entities</artifactId> <version>0.0.1-SNAPSHOT</version> Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java =================================================================== --- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngine.java 2008-01-29 18:20:47 UTC (rev 557) @@ -22,10 +22,13 @@ import java.util.Map; import java.util.Set; +import javax.ejb.Local; + import fr.cemagref.simexplorer.is.entities.metadata.MetaDataEntity; import fr.cemagref.simexplorer.is.entities.metadata.Version; import fr.cemagref.simexplorer.is.storage.StorageException; + at Local public interface StorageEngine { /** Modified: trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java =================================================================== --- trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/engine/StorageEngineImpl.java 2008-01-29 18:20:47 UTC (rev 557) @@ -58,6 +58,8 @@ */ private MetaDataEntity mdTmp; + private boolean opened = false; + /** * Default constructor with default implementations of storage and indexing */ @@ -77,7 +79,10 @@ * @see fr.cemagref.simexplorer.is.storage.engine.StorageEngine#open() */ public void open() throws StorageException { - database.open(); + if (!opened) { + database.open(); + opened = true; + } } /* (non-Javadoc) Modified: trunk/simexplorer-is-web/pom.xml =================================================================== --- trunk/simexplorer-is-web/pom.xml 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-web/pom.xml 2008-01-29 18:20:47 UTC (rev 557) @@ -73,7 +73,7 @@ <dependency> <groupId>tapestry5-treegrid</groupId> <artifactId>tapestry5-treegrid</artifactId> - <version>0.0.4-SNAPSHOT</version> + <version>5.0.9</version> </dependency> <dependency> <groupId>org.apache.tapestry</groupId> @@ -81,6 +81,16 @@ <version>5.0.9</version> </dependency> <dependency> + <groupId>org.apache.tapestry</groupId> + <artifactId>tapestry-core</artifactId> + <version>5.0.9</version> + </dependency> + <dependency> + <groupId>org.apache.tapestry</groupId> + <artifactId>tapestry-ioc</artifactId> + <version>5.0.9</version> + </dependency> + <dependency> <groupId>jboss</groupId> <artifactId>jbossall-client</artifactId> <version>4.2.2.GA</version> Modified: trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ExceptionReport.java =================================================================== --- trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ExceptionReport.java 2008-01-29 09:29:17 UTC (rev 556) +++ trunk/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ExceptionReport.java 2008-01-29 18:20:47 UTC (rev 557) @@ -53,6 +53,10 @@ if (simException != null) { unknown = false; this.exception = simException; + + unknown = true; + ExceptionAnalysis analysis = analyzer.analyze(exception); + stack = analysis.getExceptionInfos(); } else { unknown = true; ExceptionAnalysis analysis = analyzer.analyze(exception);