Mercurial > hg > digilib
changeset 1181:f5e16d31cccb
fixed bugs in metadata implementation for index.meta files.
author | robcast |
---|---|
date | Wed, 10 Apr 2013 09:22:22 +0200 |
parents | 5abbf21fdf9f |
children | 8bf1b3eda48c |
files | common/src/main/java/digilib/io/DocuDirectory.java common/src/main/java/digilib/meta/IndexMetaDirMeta.java common/src/main/java/digilib/meta/IndexMetaFileMeta.java servlet/src/main/java/digilib/auth/MetaAccessServletAuthOps.java servlet/src/main/java/digilib/auth/PathServletAuthOps.java servlet/src/main/java/digilib/auth/ServletAuthOpsImpl.java servlet/src/main/java/digilib/conf/DigilibServletConfiguration.java servlet/src/main/java/digilib/servlet/DocumentBean.java |
diffstat | 8 files changed, 49 insertions(+), 65 deletions(-) [+] |
line wrap: on
line diff
--- a/common/src/main/java/digilib/io/DocuDirectory.java Thu Apr 04 18:43:13 2013 +0200 +++ b/common/src/main/java/digilib/io/DocuDirectory.java Wed Apr 10 09:22:22 2013 +0200 @@ -97,8 +97,9 @@ } /** - * number of DocuFiles in this directory. - * + * number of DocuFiles in this directory. + * Warning: this does mostly not give the right result! + * @deprecated Use {@link #size(FileClass)} instead. */ public int size() { return ((list != null) && (list.get(0) != null)) ? list.get(0).size() : 0; @@ -434,4 +435,11 @@ return meta; } + /** + * @return the cache + */ + public DocuDirCache getCache() { + return cache; + } + }
--- a/common/src/main/java/digilib/meta/IndexMetaDirMeta.java Thu Apr 04 18:43:13 2013 +0200 +++ b/common/src/main/java/digilib/meta/IndexMetaDirMeta.java Wed Apr 10 09:22:22 2013 +0200 @@ -1,6 +1,3 @@ -/** - * - */ package digilib.meta; /* @@ -91,17 +88,19 @@ */ public void readParentMeta(DocuDirectory dir) { // check the parent directories for additional file meta - Directory dd = dir.getParent(); + Directory pd = dir.getParent(); String path = dir.getDir().getName(); - while (dd != null) { - IndexMetaDirMeta dm = (IndexMetaDirMeta) ((DocuDirectory) dd).getMeta(); + while (pd != null) { + DocuDirectory dd = (DocuDirectory) pd; + dd.checkMeta(); + IndexMetaDirMeta dm = (IndexMetaDirMeta) dd.getMeta(); if (dm.hasUnresolvedFileMeta()) { readFileMeta(dir, dm.getUnresolvedFileMeta(), path); } // prepend parent dir path - path = dd.getDir().getName() + "/" + path; + path = pd.getDir().getName() + "/" + path; // become next parent - dd = dd.getParent(); + pd = pd.getParent(); } } @@ -118,13 +117,9 @@ * fileClass */ protected void readFileMeta(DocuDirectory dir, Map<String,MetadataMap> fileMeta, String relPath) { - if (dir.size() == 0) { - // there are no files - return; - } String path = (relPath != null) ? (relPath + "/") : ""; // go through all file classes - for (FileClass fc: FileClass.values()) { + for (FileClass fc: dir.getCache().getFileClasses()) { int ds = dir.size(fc); if (ds == 0) { continue;
--- a/common/src/main/java/digilib/meta/IndexMetaFileMeta.java Thu Apr 04 18:43:13 2013 +0200 +++ b/common/src/main/java/digilib/meta/IndexMetaFileMeta.java Wed Apr 10 09:22:22 2013 +0200 @@ -102,7 +102,7 @@ DocuDirectory pdd = (DocuDirectory) dd.getParent(); if (pdd != null) { pdd.checkMeta(); - if (pdd.getMeta().getDirMeta() != null) { + if (fileMeta == null) { fileMeta = pdd.getMeta().getDirMeta(); } }
--- a/servlet/src/main/java/digilib/auth/MetaAccessServletAuthOps.java Thu Apr 04 18:43:13 2013 +0200 +++ b/servlet/src/main/java/digilib/auth/MetaAccessServletAuthOps.java Wed Apr 10 09:22:22 2013 +0200 @@ -37,6 +37,7 @@ import digilib.conf.DigilibServletRequest; import digilib.io.DocuDirent; +import digilib.io.FileOpException; import digilib.meta.MetadataMap; import digilib.util.HashTree; import digilib.util.XMLListLoader; @@ -55,19 +56,6 @@ private Map<String, List<String>> rolesMap; /** - * Constructor taking an XML config file. - * - * @param confFile - * Configuration file. - * @throws AuthOpException - * Exception thrown on error. - */ - public MetaAccessServletAuthOps(File confFile) throws AuthOpException { - configFile = confFile; - init(); - } - - /** * Set configuration file. * * @param confFile @@ -133,13 +121,19 @@ @Override public List<String> rolesForPath(DigilibServletRequest dlRequest) throws AuthOpException { HttpServletRequest request = dlRequest.getServletRequest(); - logger.debug("rolesForPath (" + dlRequest.getFilePath() + ") by [" + request.getRemoteAddr() + "]"); + DocuDirent imgs; + try { + imgs = (DocuDirent) dlRequest.getJobDescription().getImageSet(); + } catch (FileOpException e) { + throw new AuthOpException("No file for auth check!"); + } /* * check if the requests address provides a role */ List<String> provided = authIPs.match(request.getRemoteAddr()); if ((provided != null) && (provided.contains("ALL"))) { // ALL switches off checking; + logger.debug("rolesForPath (" + imgs.getName() + ") by [" + request.getRemoteAddr() + "]: (ip-all)"); return null; } /* @@ -147,15 +141,15 @@ */ String access = null; try { - DocuDirent imgs = (DocuDirent) dlRequest.getJobDescription().getImageSet(); + imgs.checkMeta(); MetadataMap meta = imgs.getMeta().getFileMeta(); access = meta.get("access"); } catch (Exception e) { - logger.error("Error getting meta for file!", e); - throw new AuthOpException("Error getting meta for file access!"); + logger.error("Error getting access meta for file!"); } if (access == null) { // no access restriction - allow + logger.debug("rolesForPath (" + imgs.getName() + ") by [" + request.getRemoteAddr() + "]: (none)"); return null; } // check provided against required roles @@ -165,10 +159,12 @@ for (String prov : provided) { if (required.contains(prov)) { // satisfied + logger.debug("rolesForPath (" + imgs.getName() + ") by [" + request.getRemoteAddr() + "]: (provided)"); return null; } } } + logger.debug("rolesForPath (" + imgs.getName() + ") by [" + request.getRemoteAddr() + "]: "+required); return required; }
--- a/servlet/src/main/java/digilib/auth/PathServletAuthOps.java Thu Apr 04 18:43:13 2013 +0200 +++ b/servlet/src/main/java/digilib/auth/PathServletAuthOps.java Wed Apr 10 09:22:22 2013 +0200 @@ -49,21 +49,6 @@ private HashTree authIPs; /** - * Constructor taking an XML config file. - * - * @param u - * utils object - * @param confFile - * Configuration file. - * @throws AuthOpException - * Exception thrown on error. - */ - public PathServletAuthOps(File confFile) throws AuthOpException { - configFile = confFile; - init(); - } - - /** * Set configuration file. * * @param confFile
--- a/servlet/src/main/java/digilib/auth/ServletAuthOpsImpl.java Thu Apr 04 18:43:13 2013 +0200 +++ b/servlet/src/main/java/digilib/auth/ServletAuthOpsImpl.java Wed Apr 10 09:22:22 2013 +0200 @@ -44,14 +44,6 @@ /** general logger for this class */ protected Logger logger = Logger.getLogger(this.getClass()); - /** Default constructor. */ - public ServletAuthOpsImpl() { - try { - init(); - } catch (AuthOpException e) { - } - } - public abstract void init() throws AuthOpException; /** @@ -67,22 +59,24 @@ * @see digilib.auth.AuthOps#isAuthorized(digilib.conf.DigilibRequest) */ public boolean isAuthorized(DigilibRequest request) throws AuthOpException { - List<String> rolesAllowed = rolesForPath((DigilibServletRequest) request); - return isRoleAuthorized(rolesAllowed, (DigilibServletRequest) request); + List<String> rolesRequired = rolesForPath((DigilibServletRequest) request); + if (rolesRequired == null) return true; + return isRoleAuthorized(rolesRequired, (DigilibServletRequest) request); } /** * Test request authorization against a list of roles. * - * @param roles + * @param rolesRequired * List of Strings with role names. * @param request * ServletRequest with address information. * @return true if the user information in the request authorizes one of the * roles. */ - public boolean isRoleAuthorized(List<String> roles, DigilibServletRequest request) { - for (String s : roles) { + public boolean isRoleAuthorized(List<String> rolesRequired, DigilibServletRequest request) { + if (rolesRequired == null) return true; + for (String s : rolesRequired) { logger.debug("Testing role: " + s); if (request.getServletRequest().isUserInRole(s)) { logger.debug("Role Authorized");
--- a/servlet/src/main/java/digilib/conf/DigilibServletConfiguration.java Thu Apr 04 18:43:13 2013 +0200 +++ b/servlet/src/main/java/digilib/conf/DigilibServletConfiguration.java Wed Apr 10 09:22:22 2013 +0200 @@ -97,6 +97,12 @@ newParameter("servlet.dir.cache", null, null, 's'); // Executor for image operations newParameter("servlet.worker.imageexecutor", null, null, 's'); + // AuthOps instance + newParameter("servlet.auth.op", null, null, 's'); + // classes TODO: do we need this? + newParameter("servlet.filemeta.class", null, null, 's'); + newParameter("servlet.dirmeta.class", null, null, 's'); + newParameter("servlet.authops.class", null, null, 's'); /* * parameters that can be read from config file have a type 'f' @@ -229,10 +235,10 @@ try { // initialise MetaFactory Class<FileMeta> fileMetaClass = (Class<FileMeta>) Class.forName(getAsString("filemeta-class")); - newParameter("servlet.filemeta.class", fileMetaClass, null, 's'); + setValue("servlet.filemeta.class", fileMetaClass); MetaFactory.setFileMetaClass(fileMetaClass); Class<DirMeta> dirMetaClass = (Class<DirMeta>) Class.forName(getAsString("dirmeta-class")); - newParameter("servlet.dirmeta.class", dirMetaClass, null, 's'); + setValue("servlet.dirmeta.class", dirMetaClass); MetaFactory.setDirMetaClass(dirMetaClass); } catch (ClassNotFoundException e) { logger.error("Error setting Metadata classes!"); @@ -240,7 +246,7 @@ try { // initialise AuthOpsFactory Class<AuthOps> authOpsClass = (Class<AuthOps>) Class.forName(getAsString("authops-class")); - newParameter("servlet.authops.class", authOpsClass, null, 's'); + setValue("servlet.authops.class", authOpsClass); AuthOpsFactory.setAuthOpsClass(authOpsClass); } catch (ClassNotFoundException e) { logger.error("Error setting AuthOps class!");
--- a/servlet/src/main/java/digilib/servlet/DocumentBean.java Thu Apr 04 18:43:13 2013 +0200 +++ b/servlet/src/main/java/digilib/servlet/DocumentBean.java Wed Apr 10 09:22:22 2013 +0200 @@ -200,7 +200,7 @@ DocuDirectory dd = dirCache.getDirectory(fn); if (dd != null) { // add pt - dlRequest.setValue("pt", dd.size()); + dlRequest.setValue("pt", dd.size(FileClass.IMAGE)); } // get original pixel size ImageInput origfile = fileset.getBiggest();