17 changed files with 151 additions and 38 deletions
@ -1 +1,5 @@
@@ -1 +1,5 @@
|
||||
<h1>Welcome</h1> |
||||
<script> |
||||
import { t } from '../translations.svelte.js'; |
||||
import { user } from '../user.svelte.js'; |
||||
</script> |
||||
<h1>{t('home.Welcome')}, {user.username}</h1> |
||||
@ -1,3 +1,13 @@
@@ -1,3 +1,13 @@
|
||||
<script> |
||||
import { t } from '../translations.svelte.js'; |
||||
import { user } from '../user.svelte.js'; |
||||
|
||||
function logout(){ |
||||
user.username = null; |
||||
} |
||||
</script> |
||||
<nav> |
||||
<a href="/">Home</a> |
||||
<a href="/">{t('nav.Home')}</a> |
||||
<a href="https://svelte.dev/tutorial/svelte/state" target="_blank">{t('nav.Tutorial')}</a> |
||||
<a href="#" on:click={logout}>Logout</a> |
||||
</nav> |
||||
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
export const user = $state({ |
||||
name : null |
||||
}) |
||||
|
||||
export async function tryLogin(credentials){ |
||||
var url = `${location.protocol}//${location.host.replace('5173','8080')}/api/user/login`; |
||||
let response = await fetch(url,{ |
||||
headers: { |
||||
'Content-Type':'application/json' |
||||
}, |
||||
method: 'POST', |
||||
body: JSON.stringify(credentials) |
||||
}); |
||||
if (response.ok){ |
||||
const json = await response.json(); |
||||
for (var key of Object.keys(json)) user[key] = json[key]; |
||||
} else { |
||||
alert("Login failed!"); |
||||
} |
||||
} |
||||
@ -1,5 +1,6 @@
@@ -1,5 +1,6 @@
|
||||
rootProject.name = "Umbrella25" |
||||
|
||||
include("backend") |
||||
include("translations") |
||||
include("user") |
||||
include("web") |
||||
include("translations") |
||||
@ -1,6 +1,5 @@
@@ -1,6 +1,5 @@
|
||||
description = "Umbrella : Translations" |
||||
|
||||
dependencies{ |
||||
implementation("de.srsoftware:tools.http:6.0.0") |
||||
implementation("org.json:json:20240303") |
||||
} |
||||
@ -1,5 +1,12 @@
@@ -1,5 +1,12 @@
|
||||
{ |
||||
'login' : { |
||||
'Login' : "Mist!" |
||||
"home" : { |
||||
"Welcome" : "Willkommen" |
||||
}, |
||||
"login" : { |
||||
"do_login" : "anmelden", |
||||
"Email_or_Username": "Email oder Nutzername", |
||||
"Login" : "Anmeldung", |
||||
"OIDC_Login" : "Anmeldung mit OIDC", |
||||
"Password" : "Passwort" |
||||
} |
||||
} |
||||
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
description = "Umbrella : User" |
||||
|
||||
dependencies{ |
||||
implementation("de.srsoftware:tools.mime:1.1.2") |
||||
implementation("org.json:json:20240303") |
||||
} |
||||
@ -0,0 +1,54 @@
@@ -0,0 +1,54 @@
|
||||
/* © SRSoftware 2025 */ |
||||
package de.srsoftware.umbrella.user; |
||||
|
||||
import com.sun.net.httpserver.HttpExchange; |
||||
import de.srsoftware.tools.MimeType; |
||||
import de.srsoftware.tools.Path; |
||||
import de.srsoftware.tools.PathHandler; |
||||
import de.srsoftware.tools.SessionToken; |
||||
import org.json.JSONObject; |
||||
|
||||
import java.io.IOException; |
||||
import java.util.Map; |
||||
import java.util.UUID; |
||||
|
||||
import static de.srsoftware.tools.MimeType.MIME_JSON; |
||||
|
||||
|
||||
public class UserModule extends PathHandler { |
||||
|
||||
private HttpExchange addCors(HttpExchange ex){ |
||||
var headers = ex.getResponseHeaders(); |
||||
headers.add("Allow-Origin","*"); |
||||
headers.add("Access-Control-Allow-Origin","*"); |
||||
headers.add("Access-Control-Allow-Headers","Content-Type"); |
||||
return ex; |
||||
} |
||||
|
||||
@Override |
||||
public boolean doOptions(Path path, HttpExchange ex) throws IOException { |
||||
return sendEmptyResponse(200,addCors(ex)); |
||||
} |
||||
|
||||
@Override |
||||
public boolean doPost(Path path, HttpExchange ex) throws IOException { |
||||
addCors(ex); |
||||
var p = path.toString(); |
||||
switch (p){ |
||||
case "login": return postLogin(ex); |
||||
} |
||||
return super.doPost(path, ex); |
||||
} |
||||
|
||||
private boolean postLogin(HttpExchange ex) throws IOException { |
||||
var json = json(ex); |
||||
if (!(json.has("username") && json.get("username") instanceof String username)) return sendContent(ex,402,"Username missing"); |
||||
if (!(json.has("password") && json.get("password") instanceof String password)) return sendContent(ex,402,"Password missing"); |
||||
|
||||
if (!username.equals(password)) return sendContent(ex,401,"Login failed"); |
||||
var sessionId = UUID.randomUUID().toString(); |
||||
new SessionToken(sessionId).addTo(ex); |
||||
ex.getResponseHeaders().add("Content-Type", MIME_JSON); |
||||
return sendContent(ex,200,new JSONObject(Map.of("username",username)).toString()); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue