summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@vespa.ai>2024-05-23 11:07:12 +0200
committerBjørn Christian Seime <bjorncs@vespa.ai>2024-05-27 09:12:10 +0200
commit8cbbd72952300627a66d01f260097c688ad40aec (patch)
tree9340899a2e8494055af82ee9187fbdcc8f0574f5
parentd8075d47f542c2d9384f30e1a35449429a2dff05 (diff)
Add extra attributes. Add builder
-rw-r--r--jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/misc/User.java45
1 files changed, 43 insertions, 2 deletions
diff --git a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/misc/User.java b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/misc/User.java
index 33d2164bd76..70fc8db243c 100644
--- a/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/misc/User.java
+++ b/jdisc-security-filters/src/main/java/com/yahoo/jdisc/http/filter/security/misc/User.java
@@ -2,21 +2,62 @@
package com.yahoo.jdisc.http.filter.security.misc;
import java.time.LocalDate;
+import java.util.Map;
import java.util.Objects;
+import java.util.TreeMap;
/**
* @author smorgrav
*/
-public record User(String email, String name, String nickname, String picture, boolean isVerified, int loginCount, LocalDate lastLogin) {
+public record User(String email, String name, String nickname, String picture, boolean isVerified, int loginCount,
+ LocalDate lastLogin, Map<String, Object> extraAttributes) {
public static final String ATTRIBUTE_NAME = "vespa.user.attributes";
public static final LocalDate NO_DATE = LocalDate.EPOCH;
public User {
Objects.requireNonNull(email);
Objects.requireNonNull(lastLogin);
+ extraAttributes = Map.copyOf(Objects.requireNonNull(extraAttributes));
+ }
+
+ public User(String email, String name, String nickname, String picture, boolean isVerified, int loginCount,
+ LocalDate lastLogin) {
+ this(email, name, nickname, picture, isVerified, loginCount, lastLogin, Map.of());
}
public User(String email, String name, String nickname, String picture) {
- this(email, name, nickname, picture, false, -1, NO_DATE);
+ this(email, name, nickname, picture, false, -1, NO_DATE, Map.of());
+ }
+
+ private User(Builder builder) {
+ this(builder.email, builder.name, builder.nickname, builder.picture, builder.isVerified, builder.loginCount,
+ builder.lastLogin, builder.extraAttributes);
+ }
+
+ public static Builder builder() { return new Builder(); }
+
+ public static class Builder {
+ private String email;
+ private String name;
+ private String nickname;
+ private String picture;
+ private boolean isVerified;
+ private int loginCount;
+ private LocalDate lastLogin;
+ private final Map<String, Object> extraAttributes = new TreeMap<>();
+
+ private Builder() {}
+
+ public Builder email(String email) { this.email = email; return this; }
+ public Builder name(String name) { this.name = name; return this; }
+ public Builder nickname(String nickname) { this.nickname = nickname; return this; }
+ public Builder picture(String picture) { this.picture = picture; return this; }
+ public Builder isVerified(boolean isVerified) { this.isVerified = isVerified; return this; }
+ public Builder loginCount(int loginCount) { this.loginCount = loginCount; return this; }
+ public Builder lastLogin(LocalDate lastLogin) { this.lastLogin = lastLogin; return this; }
+ public Builder extraAttribute(String key, Object value) {
+ extraAttributes.put(Objects.requireNonNull(key), Objects.requireNonNull(value)); return this;
+ }
+ public User build() { return new User(this); }
}
}