Browse Source
next steps: - create reset url and add it to the translation fill map - implement message translation - implement otp validation and loginfeature/document
24 changed files with 245 additions and 178 deletions
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
/* © SRSoftware 2025 */ |
||||
package de.srsoftware.umbrella.core.model; |
||||
|
||||
import static de.srsoftware.tools.Optionals.allSet; |
||||
import static java.text.MessageFormat.format; |
||||
|
||||
public class EmailAddress { |
||||
private final String email; |
||||
|
||||
public EmailAddress(String addr){ |
||||
var parts = addr.split("@"); |
||||
if (parts.length != 2 || !allSet(parts[0],parts[1])) throw new IllegalArgumentException(format("{0} is not a valid email address!",addr)); |
||||
email = addr; |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return email; |
||||
} |
||||
} |
||||
@ -0,0 +1,87 @@
@@ -0,0 +1,87 @@
|
||||
/* © SRSoftware 2025 */ |
||||
package de.srsoftware.umbrella.core.model; |
||||
|
||||
|
||||
import static de.srsoftware.umbrella.core.Constants.*; |
||||
import static java.net.HttpURLConnection.HTTP_BAD_REQUEST; |
||||
|
||||
import de.srsoftware.tools.Mappable; |
||||
import de.srsoftware.umbrella.core.UmbrellaException; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
import java.util.Objects; |
||||
import org.json.JSONObject; |
||||
|
||||
/* © SRSoftware 2025 */ |
||||
public class UmbrellaUser implements Mappable { |
||||
|
||||
private final long id; |
||||
private final String theme, name, lang; |
||||
private final EmailAddress email; |
||||
|
||||
public UmbrellaUser(long id, String name, EmailAddress email, String theme, String languageCode) { |
||||
this.email = email; |
||||
this.name = name; |
||||
this.id = id; |
||||
this.theme = theme; |
||||
this.lang = languageCode; |
||||
} |
||||
|
||||
|
||||
public EmailAddress email(){ |
||||
return email; |
||||
} |
||||
|
||||
@Override |
||||
public boolean equals(Object o) { |
||||
if (!(o instanceof UmbrellaUser user)) return false; |
||||
return Objects.equals(email, user.email) |
||||
&& Objects.equals(name, user.name) |
||||
&& Objects.equals(id, user.id) |
||||
&& Objects.equals(lang, user.lang); |
||||
} |
||||
|
||||
@Override |
||||
public int hashCode() { |
||||
return Objects.hash(email, id, lang, name); |
||||
} |
||||
|
||||
public long id(){ |
||||
return id; |
||||
} |
||||
|
||||
public String language(){ |
||||
return lang; |
||||
} |
||||
|
||||
public String name(){ |
||||
return name; |
||||
} |
||||
|
||||
public static UmbrellaUser of(JSONObject json) throws UmbrellaException { |
||||
if (json.has(USER)) json = json.getJSONObject(USER); |
||||
if (!json.has(ID)) throw new UmbrellaException(HTTP_BAD_REQUEST,ERROR_MISSING_FIELD,ID); |
||||
var id = json.getLong(ID); |
||||
var name = json.has(NAME) ? json.getString(NAME) : null; |
||||
var email = json.has(EMAIL) ? new EmailAddress(json.getString(EMAIL)) : null; |
||||
var theme = json.has(THEME) ? json.getString(THEME) : null; |
||||
var lang = json.has(LANGUAGE) ? json.getString(LANGUAGE) : null; |
||||
return new UmbrellaUser(id, name, email, theme, lang); |
||||
} |
||||
|
||||
public String theme(){ |
||||
return theme; |
||||
} |
||||
|
||||
@Override |
||||
public Map<String,Object> toMap() { |
||||
var map = new HashMap<String,Object>(); |
||||
map.put(ID,id); |
||||
map.put(LOGIN, name()); // this is still used by old umbrella modules
|
||||
map.put(NAME, name()); |
||||
map.put(EMAIL,email().toString()); |
||||
map.put(THEME,theme); |
||||
map.put(LANGUAGE,lang); |
||||
return map; |
||||
} |
||||
} |
||||
@ -1,49 +0,0 @@
@@ -1,49 +0,0 @@
|
||||
/* © SRSoftware 2025 */ |
||||
package de.srsoftware.umbrella.user.model; |
||||
|
||||
|
||||
import static de.srsoftware.umbrella.core.Constants.*; |
||||
|
||||
import de.srsoftware.tools.Mappable; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
/* © SRSoftware 2025 */ |
||||
public class UmbrellaUser extends User implements Mappable { |
||||
|
||||
private final long id; |
||||
private final String theme, lang; |
||||
|
||||
public UmbrellaUser(long id, String name, String email, String theme, String languageCode) { |
||||
super(name,email); |
||||
this.id = id; |
||||
this.theme = theme; |
||||
this.lang = languageCode; |
||||
} |
||||
|
||||
|
||||
public long id(){ |
||||
return id; |
||||
} |
||||
|
||||
public String language(){ |
||||
return lang; |
||||
} |
||||
|
||||
|
||||
public String theme(){ |
||||
return theme; |
||||
} |
||||
|
||||
@Override |
||||
public Map<String,Object> toMap() { |
||||
var map = new HashMap<String,Object>(); |
||||
map.put(ID,id); |
||||
map.put(LOGIN, name()); // this is still used by old umbrella modules
|
||||
map.put(NAME, name()); |
||||
map.put(EMAIL,email()); |
||||
map.put(THEME,theme); |
||||
map.put(LANGUAGE,lang); |
||||
return map; |
||||
} |
||||
} |
||||
@ -1,59 +0,0 @@
@@ -1,59 +0,0 @@
|
||||
/* © SRSoftware 2025 */ |
||||
package de.srsoftware.umbrella.user.model; |
||||
|
||||
import static de.srsoftware.tools.Optionals.nullable; |
||||
import static de.srsoftware.umbrella.core.Constants.*; |
||||
import static de.srsoftware.umbrella.core.Constants.LANGUAGE; |
||||
import static java.text.MessageFormat.format; |
||||
|
||||
import java.util.Objects; |
||||
import org.json.JSONObject; |
||||
|
||||
public class User { |
||||
|
||||
private final String email, name; |
||||
|
||||
public User(String name, String email) { |
||||
this.name = name; |
||||
this.email = email; |
||||
} |
||||
|
||||
public String email(){ |
||||
return email; |
||||
} |
||||
public String name(){ |
||||
return name; |
||||
} |
||||
|
||||
@Override |
||||
public boolean equals(Object o) { |
||||
if (!(o instanceof User user)) return false; |
||||
return Objects.equals(email, user.email) && Objects.equals(name, user.name); |
||||
} |
||||
|
||||
@Override |
||||
public int hashCode() { |
||||
return Objects.hash(email, name); |
||||
} |
||||
|
||||
@Override |
||||
public String toString() { |
||||
return format("{1}({0})", nullable(name()).orElse(email()),getClass().getSimpleName()); |
||||
} |
||||
|
||||
public static User of(JSONObject json){ |
||||
if (json.has(USER)) json = json.getJSONObject(USER); |
||||
var name = json.has(NAME) ? json.getString(NAME) : null; |
||||
var email = json.has(EMAIL) ? json.getString(EMAIL) : null; |
||||
if (json.has(ID) && json.has(THEME)) { |
||||
return new UmbrellaUser( |
||||
json.getLong(ID), |
||||
name, |
||||
email, |
||||
json.getString(THEME), |
||||
json.has(LANGUAGE) ? json.getString(LANGUAGE) : null |
||||
); |
||||
} |
||||
return new User(name,email); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue