src/java/de/uhilger/filecms/api/Api.java | ●●●●● patch | view | raw | blame | history | |
src/java/de/uhilger/filecms/pub/SessionManager.java | ●●●●● patch | view | raw | blame | history | |
web/WEB-INF/web.xml | ●●●●● patch | view | raw | blame | history | |
web/login_error.jsp | ●●●●● patch | view | raw | blame | history | |
web/login_form.html | ●●●●● patch | view | raw | blame | history | |
web/logout.html | ●●●●● patch | view | raw | blame | history | |
web/ui/ui.js | ●●●●● 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ück zur <a href="ui/">Anmeldung</a> • <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);