Dateiverwaltung für die WebBox
ulrich
2017-02-19 b7475d69c0d52f1639a13fae0afc617767852173
Abmelden eingeabaut
5 files added
2 files modified
329 ■■■■■ changed files
src/java/de/uhilger/filecms/api/Api.java 61 ●●●●● patch | view | raw | blame | history
src/java/de/uhilger/filecms/pub/SessionManager.java 68 ●●●●● patch | view | raw | blame | history
web/WEB-INF/web.xml 50 ●●●●● patch | view | raw | blame | history
web/login_error.jsp 25 ●●●●● patch | view | raw | blame | history
web/login_form.html 87 ●●●●● patch | view | raw | blame | history
web/logout.html 16 ●●●●● patch | view | raw | blame | history
web/ui/ui.js 22 ●●●● patch | view | raw | blame | history
src/java/de/uhilger/filecms/api/Api.java
New file
@@ -0,0 +1,61 @@
/*
 *  Nutzerverwaltung - User and role management in your browser
 *  Copyright (C) 2011-2017 Ulrich Hilger, http://uhilger.de
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see http://www.gnu.org/licenses/
 */
package de.uhilger.filecms.api;
import de.uhilger.transit.web.RequestKontext;
import de.uhilger.transit.web.WebKontext;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
/**
 *
 */
public abstract class Api implements WebKontext, RequestKontext {
  /** Zeiger zum Servlet-Kontext dieser Anwendung */
  private ServletContext ctx;
  private HttpServletRequest request;
  /* ------------- Implementierung WebKontext ------------- */
  @Override
  public ServletContext getServletContext() {
    return ctx;
  }
  @Override
  public void setServletContext(ServletContext servletContext) {
    this.ctx = servletContext;
  }
  /* ------------- Implementierung RequestKontext ------------- */
  @Override
  public HttpServletRequest getRequest() {
    return request;
  }
  @Override
  public void setRequest(HttpServletRequest r) {
    this.request = r;
  }
}
src/java/de/uhilger/filecms/pub/SessionManager.java
New file
@@ -0,0 +1,68 @@
/*
 *  Nutzerverwaltung - User and role management in your browser
 *  Copyright (C) 2011-2017 Ulrich Hilger, http://uhilger.de
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see http://www.gnu.org/licenses/
 */
package de.uhilger.filecms.pub;
//import de.uhilger.um.api.Api;
//import static de.uhilger.um.api.UserMgr.MP_USER_DATA;
//import static de.uhilger.um.api.UserMgr.SQL_GET_USER_DATA;
//import static de.uhilger.um.api.UserMgr.WITHOUT_BLOBS;
//import de.uhilger.um.daten.UserData;
import de.uhilger.filecms.api.Api;
import java.util.logging.Logger;
/**
 *
 */
public class SessionManager extends Api {
  private static final Logger logger = Logger.getLogger(SessionManager.class.getName());
  // /um/pub?c=de.uhilger.um.pub.SessionManager&m=getSessionUser
  /*
  public UserData getSessionUser() {
    UserData userData = new UserData();
    userData.setFirstName("nicht angemeldet");
    userData.setLastName("nicht angemeldet");
    userData.setId("nicht angemeldet");
    userData.setEmail("nicht angemeldet");
    Object p = getRequest().getUserPrincipal();
    if(p instanceof Principal) {
      String id = ((Principal) p).getName();
      logger.finer("User-ID: " + id);
      List userDataList = getDb().select(getSql(SQL_GET_USER_DATA), getMapper(MP_USER_DATA), WITHOUT_BLOBS, id);
      if(userDataList != null && userDataList.size() > 0) {
        Object o = userDataList.get(0);
        if(o instanceof UserData) {
          userData = (UserData) o;
        }
      }
    } else {
      logger.finer("getUserPrincipal returned null or no Principal");
    }
    return userData;
  }
*/
  public String expireSession() {
    getRequest().getSession().invalidate();
    return "Die aktuelle Sitzung ist nicht mehr gueltig.";
  }
}
web/WEB-INF/web.xml
@@ -22,6 +22,14 @@
            <param-value>de.uhilger.filecms.api</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>PublicTransit</servlet-name>
        <servlet-class>de.uhilger.transit.web.TransitServlet</servlet-class>
        <init-param>
            <param-name>klassen</param-name>
            <param-value>de.uhilger.filecms.pub</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>TransitRS</servlet-name>
        <url-pattern>/rpc/*</url-pattern>
@@ -29,6 +37,10 @@
    <servlet-mapping>
        <servlet-name>Transit</servlet-name>
        <url-pattern>/svc</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>PublicTransit</servlet-name>
        <url-pattern>/pub</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
@@ -39,4 +51,42 @@
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <security-constraint>
        <display-name>UI-Constraint</display-name>
        <web-resource-collection>
            <web-resource-name>UI</web-resource-name>
            <description>Bedienoberflaeche</description>
            <url-pattern>/ui/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description>UI-Auth-Constraint</description>
            <role-name>ownFileAdmin</role-name>
        </auth-constraint>
    </security-constraint>
    <security-constraint>
        <display-name>API-Constraint</display-name>
        <web-resource-collection>
            <web-resource-name>API</web-resource-name>
            <description>Programmschnittstelle</description>
            <url-pattern>/rpc/*</url-pattern>
            <url-pattern>/svc/*</url-pattern>
            <url-pattern>/rpc</url-pattern>
            <url-pattern>/svc</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description>API-Auth-Constraint</description>
            <role-name>ownFileAdmin</role-name>
        </auth-constraint>
    </security-constraint>
    <login-config>
        <auth-method>FORM</auth-method>
        <form-login-config>
            <form-login-page>/login_form.html</form-login-page>
            <form-error-page>/login_error.jsp</form-error-page>
        </form-login-config>
    </login-config>
    <security-role>
        <description/>
        <role-name>ownFileAdmin</role-name>
    </security-role>
</web-app>
web/login_error.jsp
New file
@@ -0,0 +1,25 @@
<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <style>
    body {
      font-family:Arial,Helvetica,sans-serif;
      font-size:10pt;
    }
  </style>
  <title>Fehler</title>
  <%
    String url = request.getRequestURL().toString();
    url = url.substring(0, url.lastIndexOf("/"));
  %>
</head>
<body>
<p>Hoppla! Die Anmeldung hat nicht geklappt.</p>
<p>Klicken Sie <a href="<%=url%>">hier</a> um zur Hauptseite zu gelangen.</p>
</body>
</html>
web/login_form.html
New file
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="">
    <meta name="author" content="">
    <!--<link rel="icon" href="../../favicon.ico">-->
    <title>Anmeldung Dateiverwaltung</title>
    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="/jslib/bootstrap/css/bootstrap.min.css">
    <!-- Custom styles for this template -->
    <!--<link href="signin.css" rel="stylesheet">-->
    <style type="text/css">
      body {
        padding-top: 40px;
        padding-bottom: 40px;
        background-color: #eee;
      }
      .form-signin {
        max-width: 330px;
        padding: 15px;
        margin: 0 auto;
      }
      .form-signin .form-signin-heading,
      .form-signin .checkbox {
        margin-bottom: 10px;
      }
      .form-signin .checkbox {
        font-weight: normal;
      }
      .form-signin .form-control {
        position: relative;
        height: auto;
        -webkit-box-sizing: border-box;
           -moz-box-sizing: border-box;
                box-sizing: border-box;
        padding: 10px;
        font-size: 16px;
      }
      .form-signin .form-control:focus {
        z-index: 2;
      }
      .form-signin input[type="text"] {
        margin-bottom: -1px;
        border-bottom-right-radius: 0;
        border-bottom-left-radius: 0;
      }
      .form-signin input[type="password"] {
        margin-bottom: 10px;
        border-top-left-radius: 0;
        border-top-right-radius: 0;
      }
    </style>
    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
  </head>
  <body>
    <div class="container">
      <form class="form-signin" role="form" method="POST" action="j_security_check" name="loginform">
        <h2 class="form-signin-heading">Anmeldung Dateiverwaltung</h2>
        <input  name="j_username" type="text" class="form-control" placeholder="Benutzerkennung" required autofocus>
        <input name="j_password" type="password" class="form-control" placeholder="Kennwort" required>
        <!--
        <label class="checkbox">
          <input type="checkbox" value="remember-me"> Remember me
        </label>
        -->
        <button class="btn btn-lg btn-primary btn-block" type="submit">Senden</button>
      </form>
    </div> <!-- /container -->
  </body>
</html>
web/logout.html
New file
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" type="text/css" href="/jslib/bootstrap/css/bootstrap.min.css">
    <title>Abgemeldet</title>
  </head>
  <body>
      <div style="margin: 20px;">
        <h3>Abmeldung</h3>
        <p>Sie haben sich erfolgreich abgemeldet.</p>
        <p>zur&uuml;ck zur <a href="ui/">Anmeldung</a> &bull; <a href="/">Hauptseite</a></p>
      </div>
  </body>
</html>
web/ui/ui.js
@@ -8,7 +8,8 @@
  $('#closeFile').on('click', fm_menu_datei_schliessen);
  $('#myModal').on('hidden.bs.modal', function (e) {
    $('#modal_ok').attr('onclick','').unbind('click');
  })
  });
  $('#logout').click(fm_logout);
  fm_get_login();
}
@@ -26,10 +27,12 @@
  $('#dateiansicht').show();  
}
/* ----- API Calls ------------- */
function fm_get_login() {
  var m = '?c=de.uhilger.um.pub.SessionManager&m=getSessionUser';
  var u = '../../um/pub' + m;
  fm_get(u, function(resp) {
  fm_get(u, "json", function(resp) {
    $('#userMenu').text(resp.UserData.firstName);
  });  
}
@@ -65,6 +68,17 @@
  */
}
function fm_logout() {
  var m = '?c=de.uhilger.filecms.pub.SessionManager&m=expireSession';
  var u = '../pub' + m;
  fm_get(u, "text", function(resp) {
    $('#userMenu').text('nicht angemeldet');
    window.location.href = '../logout.html';
  });
}
/* ---- codemirror editor handling -------- */
function fm_code_edit(content) {
@@ -92,11 +106,11 @@
/* -------- helper functions ----------- */
function fm_get(u, scallback) {
function fm_get(u, dtype, scallback) {
  $.ajax({
    url: u,
    type: "GET",
    dataType: "json",
    dataType: dtype,
    success: scallback,
    error: function (xhr, status, errorThrown) {
      alert("Error: " + errorThrown + " Status: " + status + " URL: " + u);