Skip to content

Commit

Permalink
Issue #111: Fixed page flow after login/signup/password-reset.
Browse files Browse the repository at this point in the history
  • Loading branch information
haumacher committed Dec 3, 2024
1 parent 6936020 commit d787a9a
Show file tree
Hide file tree
Showing 14 changed files with 148 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se
if (LoginFilter.getAuthenticatedUser(req.getSession(false)) != null) {
String location = location(req);
if (location == null) {
location = "/settings.jsp";
location = SettingsServlet.PATH;
}
resp.sendRedirect(req.getContextPath() + location);
return;
Expand Down Expand Up @@ -121,6 +121,17 @@ private static String locationParam(HttpServletRequest request, boolean first) {
/**
* Creates an URL parameter transporting the location after login to the next link invocation.
*/
public static String locationParam(String location) {
return locationParam(location, false);
}

/**
* Creates an URL parameter transporting the location after login to the next link invocation.
*/
public static String locationParamFirst(String location) {
return locationParam(location, true);
}

public static String locationParam(String location, boolean first) {
String locationParam;
if (location != null) {
Expand All @@ -132,17 +143,31 @@ public static String locationParam(String location, boolean first) {
}

/**
* The location after login transmitted with the given request.
* The location after login transmitted with the given request, or the current page.
*/
public static String location(HttpServletRequest request) {
String location = (String) request.getAttribute(LoginServlet.LOCATION_ATTRIBUTE);
if (location == null) {
location = (String) request.getParameter(LoginServlet.LOCATION_ATTRIBUTE);
if (location == null) {
location = ServletUtil.currentPage(request).substring(request.getContextPath().length());
}
return location(request, null);
}

/**
* The location after login transmitted with the given request, or the given default location, or the current page.
*/
public static String location(HttpServletRequest request, String defaultLocation) {
String locationAttribute = (String) request.getAttribute(LoginServlet.LOCATION_ATTRIBUTE);
if (locationAttribute != null) {
return locationAttribute;
}
return location;

String locationParam = (String) request.getParameter(LoginServlet.LOCATION_ATTRIBUTE);
if (locationParam != null) {
return locationParam;
}

if (defaultLocation != null) {
return defaultLocation;
}

return ServletUtil.currentPage(request).substring(request.getContextPath().length());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S
return;

default:
resp.sendRedirect(req.getContextPath() + "/settings");
resp.sendRedirect(req.getContextPath() + SettingsServlet.PATH);
}
}
}
Expand Down Expand Up @@ -140,7 +140,7 @@ else if (key.startsWith("wl-")) {

AddressBookCache.getInstance().flushUserCache(userName);

resp.sendRedirect(req.getContextPath() + "/settings");
resp.sendRedirect(req.getContextPath() + SettingsServlet.PATH);
}

private String normalize(String value) {
Expand Down Expand Up @@ -203,7 +203,7 @@ else if (maxLength <= 5000) {
// Ensure that a new block list is created, if the user is experimenting with the possible block list size.
AddressBookCache.getInstance().flushUserCache(userName);

resp.sendRedirect(req.getContextPath() + "/settings");
resp.sendRedirect(req.getContextPath() + SettingsServlet.PATH);
}

private void sendFailure(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.slf4j.LoggerFactory;

import de.haumacher.phoneblock.app.Application;
import de.haumacher.phoneblock.app.SettingsServlet;
import de.haumacher.phoneblock.db.DBUserSettings;
import de.haumacher.phoneblock.db.settings.AnswerBotSip;
import de.haumacher.phoneblock.mail.check.EMailCheckService;
Expand Down Expand Up @@ -80,7 +81,7 @@ public MailService(String user, String password, Properties properties) {
String baseUrl = HOME_PAGE + contextPath;

_appLogoSvg = baseUrl + "/app-logo.svg";
_settings = baseUrl + "/settings";
_settings = baseUrl + SettingsServlet.PATH;
_app = baseUrl + "/ab/";
_support = baseUrl + "/support.jsp";
}
Expand Down
33 changes: 31 additions & 2 deletions phoneblock/src/main/webapp/anrufbeantworter/index.jsp
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<%@page import="de.haumacher.phoneblock.app.SettingsServlet"%>
<%@page import="de.haumacher.phoneblock.app.RegistrationServlet"%>
<%@page import="de.haumacher.phoneblock.app.LoginFilter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%>
<%@page import="de.haumacher.phoneblock.util.JspUtil"%>
Expand Down Expand Up @@ -62,11 +64,12 @@

<%
String userName = LoginFilter.getAuthenticatedUser(request.getSession(false));
Object token = RegistrationServlet.getPassword(request.getSession(false));
if (userName == null) {
%>
<p>
Als erstes musst Du Dich
<a href="<%=request.getContextPath()%>/signup.jsp?locationAfterLogin=/anrufbeantworter/#create">bei PhoneBlock registrieren</a>.
<a href="<%=request.getContextPath()%>/signup.jsp?locationAfterLogin=/anrufbeantworter/#register">bei PhoneBlock registrieren</a>.
Wenn Du bereits einen PhoneBlock-Account hast, <a href="<%=request.getContextPath()%>/login.jsp?locationAfterLogin=/anrufbeantworter/#create">melde Dich an</a>.
</p>

Expand All @@ -90,8 +93,34 @@
</div>
<% } else { %>
<p>
Du bist bereits angemeldet, prima, gleich zum nächsten Schritt!
Du bist als <code><%= JspUtil.quote(userName)%></code> angemeldet, prima, gleich zum nächsten Schritt!
</p>

<% if (token != null) { %>
<article class="message is-info">
<div class="message-header">
<p>Deine Zugangsdaten</p>
</div>

<div class="message-body">
<div class="field">
<label class="label">Benutzername</label>
<div class="control"><code id="login"><%= JspUtil.quote(userName) %></code> <a id="login_" title="In die Zwischenablage kopieren." class="copyToClipboard"><i class="fa-solid fa-copy"></i></a></div>
<p class="help">Diesen Wert musst du als Benutzernamen für den <a href="<%=request.getContextPath()%>/setup.jsp">Abruf der Blocklist</a> eintragen. </p>
</div>
<div class="field">
<label class="label">Passwort</label>
<div class="control"><code id="passwd"><%= JspUtil.quote(token) %></code> <a id="passwd_" title="In die Zwischenablage kopieren." href="#" class="copyToClipboard"><i class="fa-solid fa-copy"></i></a></div>
<p class="help">Dieses Passwort musst Du für die <a href="<%=request.getContextPath()%><%=SettingsServlet.PATH%>">Anmeldung an dieser Webseite</a> verwenden. </p>
<p class="help">
Bitte notiere Dir das Passwort (oder speichere es am besten in einem <a href="https://keepass.info/">Passwort-Manager</a>),
denn es wird nur solange angezeigt bis Du Dich abmeldest, oder Deine Sitzung abläuft.
</p>
</div>
</div>
</article>
<% } %>

<% }%>

<h2 id="create">Schritt 2: Anrufbeantworter erstellen</h2>
Expand Down
7 changes: 4 additions & 3 deletions phoneblock/src/main/webapp/login.jsp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<!DOCTYPE html>
<%@page import="de.haumacher.phoneblock.app.SettingsServlet"%>
<%@page import="java.net.URLEncoder"%>
<%@page import="java.net.URL"%>
<%@page import="de.haumacher.phoneblock.app.LoginServlet"%>
Expand Down Expand Up @@ -39,9 +40,9 @@
</div>

<%
String location = LoginServlet.location(request);
String locationParam = LoginServlet.locationParam(request);
String locationParamFirst = LoginServlet.locationParamFirst(request);
String location = LoginServlet.location(request, SettingsServlet.PATH);
String locationParam = LoginServlet.locationParam(location);
String locationParamFirst = LoginServlet.locationParamFirst(location);
%>

<nav class="panel">
Expand Down
7 changes: 4 additions & 3 deletions phoneblock/src/main/webapp/phone-info.jsp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<!DOCTYPE html>
<%@page import="de.haumacher.phoneblock.app.LoginServlet"%>
<%@page import="de.haumacher.phoneblock.app.UIProperties"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%>
<%@page import="de.haumacher.phoneblock.app.api.CommentVoteServlet"%>
Expand Down Expand Up @@ -331,7 +332,7 @@
</p>

<p>
Damit Deine Bewertung sofort einen Einfluss auf Deine Blocklist hat, <a href="<%= request.getContextPath() %>/login.jsp">melde Dich vorher an</a>!
Damit Deine Bewertung sofort einen Einfluss auf Deine Blocklist hat, <a href="<%= request.getContextPath() %>/login.jsp<%= LoginServlet.locationParamFirst(request) %>">melde Dich vorher an</a>!
</p>

<div class="buttons">
Expand Down Expand Up @@ -500,7 +501,7 @@
</div>

<div class="tile is-parent is-6">
<a class="tile is-child notification is-info" href="<%=request.getContextPath() %>/signup.jsp">
<a class="tile is-child notification is-info" href="<%=request.getContextPath() %>/signup.jsp<%= LoginServlet.locationParamFirst(request) %>">
<p class="title">PhoneBlock installieren</p>
<p class="subtitle">Noch nicht installiert? Dann los!</p>
</a>
Expand All @@ -513,7 +514,7 @@

<div class="tile is-ancestor">
<div class="tile is-parent is-6">
<a class="tile is-child notification is-primary" href="<%=request.getContextPath() %>/signup.jsp">
<a class="tile is-child notification is-primary" href="<%=request.getContextPath() %>/signup.jsp<%= LoginServlet.locationParamFirst(request) %>">
<p class="title">PhoneBlock installieren</p>
<p class="subtitle">Account erstellen und einrichten!</p>
</a>
Expand Down
51 changes: 36 additions & 15 deletions phoneblock/src/main/webapp/settings.jsp
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
<!DOCTYPE html>
<%@page import="de.haumacher.phoneblock.app.LoginServlet"%>
<%@page import="de.haumacher.phoneblock.app.RegistrationServlet"%>
<%@page import="de.haumacher.phoneblock.app.SettingsServlet"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="true"%>
Expand All @@ -19,6 +21,7 @@

<%
String userName = LoginFilter.getAuthenticatedUser(session);
Object token = RegistrationServlet.getPassword(session);
%>
<body>
<jsp:include page="header.jspf"></jsp:include>
Expand All @@ -29,7 +32,7 @@
<h1>Einstellungen</h1>

<p>
Um deine persönlichen Einstellungen zu bearbeiten, musst Du Dich <a href="<%= request.getContextPath()%>/login.jsp">anmelden</a>.
Um deine persönlichen Einstellungen zu bearbeiten, musst Du Dich <a href="<%= request.getContextPath()%>/login.jsp<%= LoginServlet.locationParamFirst(request) %>">anmelden</a>.
</p>
</div>
</section>
Expand All @@ -44,18 +47,36 @@
Wilkommen <%= JspUtil.quote(settings.getDisplayName()) %>.
</p>

<form action="<%= request.getContextPath() %>/settings" method="post">
<div class="field">
<label class="label">Benutzername</label>
<div class="control has-icons-left">
<input class="input" type="text" value="<%= JspUtil.quote(userName)%>" name="userName" disabled="disabled">
<span class="icon is-small is-left">
<i class="fa-solid fa-user"></i>
</span>
<form action="<%= request.getContextPath() %><%=SettingsServlet.PATH%>" method="post">

<% if (token != null) { %>
<article class="message is-info">
<div class="message-header">
<p>Deine Zugangsdaten</p>
</div>
<p class="help">Diesen Wert musst du als Benutzernamen für den <a href="<%=request.getContextPath()%>/setup.jsp">Abruf der Blocklist</a> eintragen. </p>
</div>


<div class="message-body">
<% } %>
<div class="field">
<label class="label">Benutzername</label>
<div class="control"><code id="login"><%= JspUtil.quote(userName) %></code> <a id="login_" title="In die Zwischenablage kopieren." class="copyToClipboard"><i class="fa-solid fa-copy"></i></a></div>
<p class="help">Diesen Wert musst du als Benutzernamen für den <a href="<%=request.getContextPath()%>/setup.jsp">Abruf der Blocklist</a> eintragen. </p>
</div>

<% if (token != null) { %>
<div class="field">
<label class="label">Passwort</label>
<div class="control"><code id="passwd"><%= JspUtil.quote(token) %></code> <a id="passwd_" title="In die Zwischenablage kopieren." href="#" class="copyToClipboard"><i class="fa-solid fa-copy"></i></a></div>
<p class="help">Dieses Passwort musst Du für die <a href="<%=request.getContextPath()%>/setup.jsp">Einrichtung des Telefonbuchs</a> oder für die <a href="<%=request.getContextPath()%><%=SettingsServlet.PATH%>">Anmeldung an dieser Webseite</a> verwenden. </p>
<p class="help">
Bitte notiere Dir das Passwort (oder speichere es am besten in einem <a href="https://keepass.info/">Passwort-Manager</a>),
denn es wird nur solange angezeigt bis Du Dich abmeldest, oder Deine Sitzung abläuft.
</p>
</div>
</div>
</article>
<% } %>

<div class="field">
<label class="label">Maximale Blocklist-Größe</label>
<div class="control has-icons-left">
Expand Down Expand Up @@ -148,7 +169,7 @@ List<String> blacklist = (List<String>) request.getAttribute("blacklist");
<div class="content">
<h2 id="blacklist">Deine Blacklist</h2>

<form action="<%= request.getContextPath() %>/settings?action=lists" method="post">
<form action="<%= request.getContextPath() %><%=SettingsServlet.PATH%>?action=lists" method="post">

<% if (blacklist.isEmpty()) { %>
<p>Du hast keine Nummern explizit gesperrt. Um eine Nummer zu sperren, suche die Nummer über das Suchfeld oben und schreibe einen negativen Kommentar, oder mach in Deiner Fritz!Box einen Telefonbucheintrag für die Nummer in der Blocklist.</p>
Expand Down Expand Up @@ -183,7 +204,7 @@ List<String> whitelist = (List<String>) request.getAttribute("whitelist");
<div class="content">
<h2 id="whitelist">Deine Whitelist</h2>

<form action="<%= request.getContextPath() %>/settings?action=lists" method="post">
<form action="<%= request.getContextPath() %><%=SettingsServlet.PATH%>?action=lists" method="post">

<% if (whitelist.isEmpty()) { %>
<p>Du hast keine Nummern von der Sperrung ausgenommen.</p>
Expand Down Expand Up @@ -211,7 +232,7 @@ List<String> whitelist = (List<String>) request.getAttribute("whitelist");
</div>

<div class="content">
<form action="<%= request.getContextPath() %>/settings?action=lists" method="post">
<form action="<%= request.getContextPath() %><%=SettingsServlet.PATH%>?action=lists" method="post">

<div class="field">
<label class="label">Ausnahme hinzufügen</label>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<!DOCTYPE html>
<%@page import="de.haumacher.phoneblock.app.LoginServlet"%>
<%@page import="de.haumacher.phoneblock.app.SettingsServlet"%>
<%@page import="de.haumacher.phoneblock.app.RegistrationServlet"%>
<%@page import="de.haumacher.phoneblock.app.LoginFilter"%>
Expand Down Expand Up @@ -30,7 +31,7 @@
</li>

<li>
Bei "Benutzername" trägst Du den Benutzernamen ein, den Du bei der <a href="<%=request.getContextPath() %>/signup.jsp">PhoneBlock-Anmeldung</a> erhalten hast<%if (login != null) {%> (<code id="login"><%= login %></code> <a id="login_" title="In die Zwischenablage kopieren." href="#" class="copyToClipboard"><i class="fa-solid fa-copy"></i></a>)<%}%>.
Bei "Benutzername" trägst Du den Benutzernamen ein, den Du bei der <a href="<%=request.getContextPath() %>/signup.jsp<%= LoginServlet.locationParamFirst(request) %>">PhoneBlock-Anmeldung</a> erhalten hast<%if (login != null) {%> (<code id="login"><%= login %></code> <a id="login_" title="In die Zwischenablage kopieren." href="#" class="copyToClipboard"><i class="fa-solid fa-copy"></i></a>)<%}%>.
</li>

<li>
Expand All @@ -40,7 +41,7 @@

<p>
Du hast die Daten nicht mehr zur Hand? Macht nichts, einfach
<a href="<%=request.getContextPath() %>/signup.jsp">erneut registrieren</a> oder in den <a href="<%=request.getContextPath() + SettingsServlet.PATH %>">Einstellungen</a> das Passwort zurücksetzen.
<a href="<%=request.getContextPath() %>/signup.jsp<%= LoginServlet.locationParamFirst(request) %>">erneut registrieren</a> oder in den <a href="<%=request.getContextPath() + SettingsServlet.PATH %>">Einstellungen</a> das Passwort zurücksetzen.
</p>

<div class="columns">
Expand Down
7 changes: 4 additions & 3 deletions phoneblock/src/main/webapp/setup-iphone/index.jsp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<!DOCTYPE html>
<%@page import="de.haumacher.phoneblock.app.LoginServlet"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="false"%>
<%@page import="de.haumacher.phoneblock.app.SettingsServlet"%>
<%@page import="de.haumacher.phoneblock.app.RegistrationServlet"%>
Expand Down Expand Up @@ -36,7 +37,7 @@
%>

<ol>
<li><a href="<%=request.getContextPath() %>/signup.jsp">Melde Dich bei PhoneBlock an.</a></li>
<li><a href="<%=request.getContextPath() %>/signup.jsp<%= LoginServlet.locationParamFirst(request) %>">Melde Dich bei PhoneBlock an.</a></li>
<li>Öffne "Einstellungen" > "Kontakte" > "Accounts". </li>
<li>Tippe auf "Account hinzufügen" - "Andere" > "CardDAV-Account hinzufügen".</li>
<li>Gib deine Zugangsdaten ein und tippe auf "Weiter".
Expand Down Expand Up @@ -72,7 +73,7 @@

<p>
Du hast die Zugangsdaten nicht mehr zur Hand? Macht nichts, einfach
<a href="<%=request.getContextPath() %>/signup.jsp">erneut registrieren</a> oder in den <a href="<%=request.getContextPath() + SettingsServlet.PATH %>">Einstellungen</a> das Passwort zurücksetzen.
<a href="<%=request.getContextPath() %>/signup.jsp<%= LoginServlet.locationParamFirst(request) %>">erneut registrieren</a> oder in den <a href="<%=request.getContextPath() + SettingsServlet.PATH %>">Einstellungen</a> das Passwort zurücksetzen.
</p>

<p>
Expand All @@ -82,7 +83,7 @@
</p>

<p>
Wenn du PhoneBlock nur auf dem iPhone benutzt kannst du auch die Anzahl der Einträge <a href="<%= request.getContextPath()%>/settings">hier</a> höher stellen.
Wenn du PhoneBlock nur auf dem iPhone benutzt kannst du auch die Anzahl der Einträge <a href="<%= request.getContextPath()%><%=SettingsServlet.PATH%>">hier</a> höher stellen.
Sollte es damit Probleme geben, dann melde Dich bitte (siehe <a href="<%=request.getContextPath() %>/faq.jsp">FAQ</a>).
</p>
</div>
Expand Down
4 changes: 2 additions & 2 deletions phoneblock/src/main/webapp/setup.jsp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@

<div class="columns">
<div class="column is-half is-offset-one-quarter">
<a href="<%=request.getContextPath() %>/signup.jsp">
<a href="<%=request.getContextPath() %>/signup.jsp<%= LoginServlet.locationParamFirst(request) %>">
<button class="button is-medium is-info is-fullwidth">PhoneBlock-Account erstellen</button>
</a>
</div>
Expand Down Expand Up @@ -157,7 +157,7 @@

<p>
Das Passwort<%if (token == null) {%>,
das Du bei der <a href="<%=request.getContextPath() %>/signup.jsp">Registrierung</a> erhalten
das Du bei der <a href="<%=request.getContextPath() %>/signup.jsp<%= LoginServlet.locationParamFirst(request) %>">Registrierung</a> erhalten
hast, <%} else {%> <code id="passwd2"><%= JspUtil.quote(token) %></code> <a id="passwd2_" title="In die Zwischenablage kopieren." href="#" class="copyToClipboard"><i class="fa-solid fa-copy"></i></a>,<%}%> muss Du jetzt noch in das Feld
<i>Passwort</i> in dem Formular in der Fritz!Box eintragen.
</p>
Expand Down
Loading

0 comments on commit d787a9a

Please sign in to comment.