Dateiverwaltung für die WebBox
ulrich
2017-03-19 72e43ddf5a01b28d57a41bdbd4b77a0519d92912
src/java/de/uhilger/filecms/api/FileMgr.java
@@ -46,16 +46,6 @@
public class FileMgr extends Api {
  private static final Logger logger = Logger.getLogger(FileMgr.class.getName());
  
  public static final String WBX_DATA_PATH = "daten/";
  public static final String PUB_DIR_PATH = "www/";
  public static final String HOME_DIR_PATH = "home/";
  public static final String PUB_DIR_NAME = "Oeffentlich";
  //public static final String HOME_DIR_NAME = "Persoenlicher Ordner";
  public static final String HOME_DIR_NAME = "Persoenlich";
  public static final String WBX_ADMIN_ROLE = "wbxAdmin";
  public static final String WBX_BASE = "$basis";
  public static final String WBX_DATA = "$daten";
  
  public static final int OP_COPY = 1;
  public static final int OP_MOVE = 2;
@@ -372,86 +362,4 @@
  /* ---- Hilfsfunktionen ---- */
  
  /**
   * Einen relativen Pfad in einen absoluten Pfad der WebBox
   * aufloesen.
   *
   * Nur die absoluten Pfade zu PUB_DIR_NAME, HOME_DIR_NAME
   * sowie WBX_BASE und WBX_DATA werden ausgegeben. Letztere
   * beiden nur fuer Nutzer mit der Rolle WBX_ADMIN_ROLE.
   *
   * D.h., es werden nur Pfade aufgeloest, die sich innerhalb
   * des Ordners der WeBox befinden.
   *
   * @param relPath
   * @return
   */
  private File getTargetDir(String relPath) {
    logger.fine(relPath);
    File targetDir;
    String targetPath = null;
    if(relPath.startsWith(PUB_DIR_NAME)) {
      targetPath = PUB_DIR_PATH + getUserName() + relPath.substring(PUB_DIR_NAME.length());
      targetDir = new File(getBase().getAbsolutePath(), targetPath);
    } else if(relPath.startsWith(HOME_DIR_NAME)) {
      targetPath = HOME_DIR_PATH + getUserName() + relPath.substring(HOME_DIR_NAME.length());
      targetDir = new File(getBase().getAbsolutePath(), targetPath);
    } else if(getRequest().isUserInRole(WBX_ADMIN_ROLE)) {
      if(relPath.startsWith(WBX_BASE)) {
        targetPath = getCatalinaBase();
        targetDir = new File(targetPath, relPath.substring(WBX_BASE.length()));
      } else if(relPath.startsWith(WBX_DATA)) {
        targetPath = getWbxDataDir();
        targetDir = new File(targetPath, relPath.substring(WBX_BASE.length()));
      } else {
        targetDir = getDefaultDir(relPath);
      }
    } else {
      // kann eigentlich nicht sein..
      targetDir = getDefaultDir(relPath);
    }
    logger.fine(targetPath);
    //File targetDir = new File(getBase().getAbsolutePath(), targetPath);
    return targetDir;
  }
  private File getDefaultDir(String relPath) {
    String targetPath = PUB_DIR_PATH + getUserName() + relPath.substring(PUB_DIR_NAME.length());
    return new File(getBase().getAbsolutePath(), targetPath);
  }
  private FileRef getBase() {
    FileRef base = null;
    Object o = getServletContext().getAttribute(Initialiser.FILE_BASE);
    if(o instanceof String) {
      String baseStr = (String) o;
      logger.fine(baseStr);
      File file = new File(baseStr);
      base = new FileRef(file.getAbsolutePath(), file.isDirectory());
    }
    return base;
  }
  private String getUserName() {
    String userName = null;
    Object p = getRequest().getUserPrincipal();
    if(p instanceof Principal) {
      userName = ((Principal) p).getName();
    }
    return userName;
  }
  private String getCatalinaBase() {
    String path = getServletContext().getRealPath("/");
    logger.fine("getRealPath: " + path); // file-cms in webapps
    File file = new File(path);
    file = file.getParentFile().getParentFile();
    return file.getAbsolutePath();
  }
  private String getWbxDataDir() {
    String wbxBase = getBase().getAbsolutePath();
    File file = new File(wbxBase);
    return file.getAbsolutePath();
  }
}