Bug fixes

This commit is contained in:
Finn
2026-01-19 17:49:05 +01:00
parent 348476cf0a
commit 6ea013c1ad
5 changed files with 31 additions and 42 deletions

View File

@@ -23,7 +23,7 @@ import java.util.Map;
* - password
*
* Stores:
* - users.username = sha256(username)
* - users.username = sha256(username) as HEX (64 chars)
* - users.password = PBKDF2$sha256$...
*/
@Route(path = "ins/register")
@@ -32,7 +32,7 @@ public final class register implements WebPage {
@Override
public WebResponsePacket handle(WebPageContext ctx) throws Exception {
if (ctx.request.getMethod() != WebRequestMethod.POST) {
return renderForm(null, null);
return renderForm(null);
}
RequestParams p = new RequestParams(ctx.request);
@@ -41,16 +41,16 @@ public final class register implements WebPage {
String password = p.get("password");
if (username == null || username.isBlank() || password == null || password.isBlank()) {
return renderForm("Missing username/password (send via headers).", null);
return renderForm("Missing username/password (send via headers).");
}
Oac2WebApp app = Oac2WebApp.get();
String usernameHash = Sha256.hex(username.trim());
String usernameHashHex = Sha256.hex(username.trim());
String passwordEnc = app.passwordHasher().hash(password);
try {
int userId = app.dao().createUser(usernameHash, passwordEnc);
int userId = app.dao().createUser(usernameHashHex, passwordEnc);
String ip = (ctx.client.getConnection().getSocket() != null && ctx.client.getConnection().getSocket().getInetAddress() != null)
? ctx.client.getConnection().getSocket().getInetAddress().getHostAddress()
@@ -58,37 +58,31 @@ public final class register implements WebPage {
String ua = ctx.request.getHeaders() != null ? ctx.request.getHeaders().getOrDefault("user-agent", "") : "";
// SessionManager user string: we store numeric users.id as string.
String session = SessionManager.create(String.valueOf(userId), ip, ua, (ProtocolWebServer) ctx.client.getServer());
Map<String, String> headers = new HashMap<>();
headers.put("session", session);
headers.put("location", "/dashboard");
headers.put("location", "/ins/dashboard");
return new WebResponsePacket(302, "text/plain", headers, new byte[0]);
} catch (Exception e) {
// likely UNIQUE violation on users.username (hashed)
return renderForm("Register failed: " + e.getMessage(), null);
return renderForm("Register failed: " + e.getMessage());
}
}
private WebResponsePacket renderForm(String err, String ok) {
private WebResponsePacket renderForm(String err) {
String body = """
<div class="card">
<h2>Register</h2>
%s
%s
<p class="muted">Send a POST request with headers <code>username</code> and <code>password</code>.</p>
<div class="row">
<div class="col"><a href="/login">Login</a></div>
<div class="col"><a href="/">Home</a></div>
<div class="col"><a href="/ins/login">Login</a></div>
<div class="col"><a href="/ins/index.html">Home</a></div>
</div>
</div>
""".formatted(
err == null ? "" : "<p class='err'>" + Html.esc(err) + "</p>",
ok == null ? "" : "<p class='ok'>" + Html.esc(ok) + "</p>"
);
""".formatted(err == null ? "" : "<p class='err'>" + Html.esc(err) + "</p>");
String html = Html.page("Register", body);
return new WebResponsePacket(200, "text/html", new HashMap<>(), Html.utf8(html));