Skip to content

Commit 956efe5

Browse files
authored
HTM-1697: Add organisation field to user (#1418)
* HTM-1697: Add organisation field to user * Update
1 parent 6220f9a commit 956efe5

File tree

9 files changed

+49
-1
lines changed

9 files changed

+49
-1
lines changed

src/main/java/org/tailormap/api/controller/UserController.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ public ResponseEntity<Serializable> getUser() {
5757
.collect(Collectors.toSet()));
5858

5959
if (authentication.getPrincipal() instanceof TailormapUserDetails userProperties) {
60+
userResponse.setOrganisation(userProperties.getOrganisation());
61+
6062
// Public user and group properties are meant for a (modified) frontend to implement custom
6163
// logic depending on who's logged in. When used for authorization for something, the check
6264
// should also be performed server-side, possibly in an extra microservice.

src/main/java/org/tailormap/api/persistence/User.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ public class User {
5454

5555
private String name;
5656

57+
private String organisation;
58+
5759
@Column(columnDefinition = "text")
5860
private String notes;
5961

@@ -118,6 +120,15 @@ public User setName(String name) {
118120
return this;
119121
}
120122

123+
public String getOrganisation() {
124+
return organisation;
125+
}
126+
127+
public User setOrganisation(String organisation) {
128+
this.organisation = organisation;
129+
return this;
130+
}
131+
121132
public String getNotes() {
122133
return notes;
123134
}

src/main/java/org/tailormap/api/security/TailormapOidcUser.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,17 @@ public class TailormapOidcUser extends DefaultOidcUser implements TailormapUserD
2121

2222
private final Collection<TailormapAdditionalProperty> additionalGroupProperties;
2323

24+
private final String oidcRegistrationName;
25+
2426
public TailormapOidcUser(
2527
Collection<? extends GrantedAuthority> authorities,
2628
OidcIdToken idToken,
2729
OidcUserInfo userInfo,
2830
String nameAttributeKey,
31+
String oidcRegistrationName,
2932
Collection<TailormapAdditionalProperty> additionalGroupProperties) {
3033
super(authorities, idToken, userInfo, nameAttributeKey);
34+
this.oidcRegistrationName = oidcRegistrationName;
3135
this.additionalGroupProperties = Collections.unmodifiableCollection(additionalGroupProperties);
3236
}
3337

@@ -50,4 +54,9 @@ public String getPassword() {
5054
public String getUsername() {
5155
return super.getName();
5256
}
57+
58+
@Override
59+
public String getOrganisation() {
60+
return oidcRegistrationName;
61+
}
5362
}

src/main/java/org/tailormap/api/security/TailormapOidcUserService.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,14 @@ public OidcUser loadUser(OidcUserRequest userRequest) throws OAuth2Authenticatio
5555
.getUserInfoEndpoint()
5656
.getUserNameAttributeName();
5757

58+
String oidcRegistrationName = userRequest.getClientRegistration().getClientName();
59+
5860
return new TailormapOidcUser(
59-
authorities, user.getIdToken(), user.getUserInfo(), userNameAttributeName, groupProperties);
61+
authorities,
62+
user.getIdToken(),
63+
user.getUserInfo(),
64+
userNameAttributeName,
65+
oidcRegistrationName,
66+
groupProperties);
6067
}
6168
}

src/main/java/org/tailormap/api/security/TailormapUserDetails.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ default Stream<Object> streamAllPropertiesForKey(String key) {
3333
.filter(p -> p.key().equals(key))
3434
.map(TailormapAdditionalProperty::value);
3535
}
36+
37+
String getOrganisation();
3638
}

src/main/java/org/tailormap/api/security/TailormapUserDetailsImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class TailormapUserDetailsImpl implements TailormapUserDetails {
3030
private final String password;
3131
private final ZonedDateTime validUntil;
3232
private final boolean enabled;
33+
private final String organisation;
3334

3435
private final Collection<TailormapAdditionalProperty> additionalProperties = new ArrayList<>();
3536
private final Collection<TailormapAdditionalProperty> additionalGroupProperties = new ArrayList<>();
@@ -51,6 +52,7 @@ public TailormapUserDetailsImpl(User user, GroupRepository groupRepository) {
5152
password = user.getPassword();
5253
validUntil = user.getValidUntil();
5354
enabled = user.isEnabled();
55+
organisation = user.getOrganisation();
5456

5557
if (user.getAdditionalProperties() != null) {
5658
for (AdminAdditionalProperty property : user.getAdditionalProperties()) {
@@ -90,6 +92,11 @@ public boolean isEnabled() {
9092
return enabled;
9193
}
9294

95+
@Override
96+
public String getOrganisation() {
97+
return organisation;
98+
}
99+
93100
@Override
94101
public Collection<TailormapAdditionalProperty> getAdditionalProperties() {
95102
return additionalProperties;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
alter table users add organisation varchar(255);

src/main/resources/openapi/viewer-api.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ components:
7575
username:
7676
type: string
7777
description: 'username of the authenticated user'
78+
organisation:
79+
type: string
80+
description: 'organisation of the authenticated user'
7881
roles:
7982
type: array
8083
uniqueItems: true

src/test/java/org/tailormap/api/controller/UserControllerIntegrationTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ public String getUsername() {
7979
return "tm-admin";
8080
}
8181

82+
@Override
83+
public String getOrganisation() {
84+
return null;
85+
}
86+
8287
@Override
8388
public Collection<TailormapAdditionalProperty> getAdditionalProperties() {
8489
return List.of(
@@ -103,6 +108,7 @@ public Collection<TailormapAdditionalProperty> getAdditionalGroupProperties() {
103108
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
104109
.andExpect(jsonPath("$.isAuthenticated").value(true))
105110
.andExpect(jsonPath("$.username").value("tm-admin"))
111+
.andExpect(jsonPath("$.organisation").isEmpty())
106112
.andExpect(jsonPath("$.roles.length()").value(3))
107113
.andExpect(jsonPath("$.roles").value(Matchers.containsInAnyOrder(Group.ADMIN, "test-bar", "test-baz")))
108114
.andExpect(jsonPath("$.properties.length()").value(1))

0 commit comments

Comments
 (0)