Skip to content

Commit 75b690d

Browse files
authored
Merge pull request #22 from UnityFoundation-io/add-user-first-last-name
Add first and last names to User model.
2 parents 9c1d53d + 7848692 commit 75b690d

File tree

9 files changed

+74
-26
lines changed

9 files changed

+74
-26
lines changed

UnityAuth/src/main/java/io/unityfoundation/auth/AuthController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,7 @@ public HttpResponse<HasPermissionResponse> hasPermission(@Body HasPermissionRequ
5757
}
5858

5959
if (!userRepo.isServiceAvailable(user.getId(), service.get().getId())) {
60-
return createHasPermissionResponse(false, user.getEmail(),
61-
"The requested service is not enabled for the requested tenant!", List.of());
60+
return createHasPermissionResponse(false, user.getEmail(), "The requested service is not enabled for the requested tenant!", List.of());
6261
}
6362

6463
List<String> commonPermissions = checkUserPermission(user, tenantOptional.get(), requestDTO.permissions());
@@ -105,7 +104,8 @@ private List<String> checkUserPermission(User user, Tenant tenant, List<String>
105104

106105
private HttpResponse<HasPermissionResponse> createHasPermissionResponse(boolean hasPermission,
107106
String userEmail,
108-
String message, List<String> permissions) {
107+
String message,
108+
List<String> permissions) {
109109
return HttpResponse.ok(new HasPermissionResponse(hasPermission, userEmail, message, permissions));
110110
}
111111

UnityAuth/src/main/java/io/unityfoundation/auth/UnityAuthenticationProvider.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import reactor.core.publisher.Mono;
1717
import reactor.core.scheduler.Schedulers;
1818

19+
import java.util.Map;
20+
1921
@Singleton
2022
public class UnityAuthenticationProvider implements AuthenticationProvider<HttpRequest<?>> {
2123

@@ -46,7 +48,10 @@ public Publisher<AuthenticationResponse> authenticate(@Nullable HttpRequest<?> h
4648
if (authenticationFailed != null) {
4749
return Mono.error(new AuthenticationException(authenticationFailed));
4850
} else {
49-
return Mono.just(AuthenticationResponse.success((String) authenticationRequest.getIdentity()));
51+
return Mono.just(AuthenticationResponse.success(
52+
(String) authenticationRequest.getIdentity(),
53+
Map.of("first_name", user.getFirstName(), "last_name", user.getLastName())
54+
));
5055
}
5156
}); }
5257

UnityAuth/src/main/java/io/unityfoundation/auth/entities/User.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ public class User {
1515
@NotNull
1616
private String email;
1717

18+
private String firstName;
19+
20+
private String lastName;
21+
1822
private UserStatus status;
1923

2024
private String password;
@@ -31,6 +35,22 @@ public enum UserStatus {
3135
ENABLED, DISABLED
3236
}
3337

38+
public String getFirstName() {
39+
return firstName;
40+
}
41+
42+
public void setFirstName(String firstName) {
43+
this.firstName = firstName;
44+
}
45+
46+
public String getLastName() {
47+
return lastName;
48+
}
49+
50+
public void setLastName(String lastName) {
51+
this.lastName = lastName;
52+
}
53+
3454
public Long getId() {
3555
return id;
3656
}

UnityAuth/src/main/java/io/unityfoundation/auth/entities/UserRepo.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ SELECT count(*) > 0
3232
SELECT id,
3333
password,
3434
email,
35+
first_name,
36+
last_name,
3537
status
3638
FROM user
3739
WHERE email = :email

UnityAuth/src/main/resources/application.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ micronaut:
88
get-allowed: true
99
login:
1010
path: /api/login
11+
introspection:
12+
path: /api/token_info
1113
intercept-url-map:
1214
- pattern: /api/login
1315
http-method: POST
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
ALTER TABLE user ADD COLUMN first_name varchar(255);
2+
ALTER TABLE user ADD COLUMN last_name varchar(255);

UnityAuth/src/main/resources/local/afterMigrate.sql

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -89,33 +89,33 @@ VALUES (6, 15), -- LIBRE311_REQUEST_EDIT-SUBTENANT
8989

9090
-- Password for all the following accounts is 'test'
9191
-- Unity Administrator
92-
INSERT IGNORE INTO user (id, email, password, status) VALUES
93-
(1, '[email protected]', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
92+
INSERT IGNORE INTO user (id, email, first_name, last_name, password, status) VALUES
93+
(1, '[email protected]', 'Unity', 'Admin', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
9494

9595
-- Tenant Administrator
96-
INSERT IGNORE INTO user (id, email, password, status) VALUES
97-
(2, '[email protected]', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
96+
INSERT IGNORE INTO user (id, email, first_name, last_name, password, status) VALUES
97+
(2, '[email protected]', 'Tenant', 'Admin', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
9898

9999
-- Libre311 Administrator
100-
INSERT IGNORE INTO user (id, email, password, status) VALUES
101-
(3, '[email protected]', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
100+
INSERT IGNORE INTO user (id, email, first_name, last_name, password, status) VALUES
101+
(3, '[email protected]', 'Libre', 'Admin', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
102102

103103
-- Libre311 Request Manager
104-
INSERT IGNORE INTO user (id, email, password, status) VALUES
105-
(4, '[email protected]', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
104+
INSERT IGNORE INTO user (id, email, first_name, last_name, password, status) VALUES
105+
(4, '[email protected]', 'Request', 'Manager', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
106106

107107
-- Libre311 Jurisdiction Administrator
108-
INSERT IGNORE INTO user (id, email, password, status) VALUES
109-
(5, '[email protected]', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
108+
INSERT IGNORE INTO user (id, email, first_name, last_name, password, status) VALUES
109+
(5, '[email protected]', 'Jurisdiction', 'Admin', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
110110

111111
-- Libre311 Jurisdiction Request Manager
112-
INSERT IGNORE INTO user (id, email, password, status) VALUES
113-
(6, '[email protected]', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
114-
112+
INSERT IGNORE INTO user (id, email, first_name, last_name, password, status) VALUES
113+
(6, '[email protected]', 'Jurisdiction', 'Request Manager', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
115114

116115
-- Stl sub-tenant admin
117-
INSERT IGNORE INTO user (id, email, password, status) VALUES
118-
(7, '[email protected]', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
116+
INSERT IGNORE INTO user (id, email, first_name, last_name, password, status) VALUES
117+
(7, '[email protected]', 'Subtenant', 'Admin', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
118+
119119

120120
-- Unity Administrator
121121
INSERT IGNORE INTO user_role (tenant_id, user_id, role_id) VALUES

UnityAuth/src/test/java/io/unityfoundation/UnityIamTest.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package io.unityfoundation;
22

3-
import static org.junit.jupiter.api.Assertions.assertEquals;
4-
import static org.junit.jupiter.api.Assertions.assertNull;
5-
import static org.junit.jupiter.api.Assertions.assertTrue;
6-
3+
import com.nimbusds.jwt.JWT;
4+
import com.nimbusds.jwt.JWTParser;
75
import io.micronaut.context.annotation.Property;
6+
import io.micronaut.core.util.StringUtils;
87
import io.micronaut.http.HttpRequest;
98
import io.micronaut.http.HttpResponse;
109
import io.micronaut.http.HttpStatus;
@@ -16,9 +15,13 @@
1615
import io.unityfoundation.auth.AuthController.HasPermissionResponse;
1716
import io.unityfoundation.auth.HasPermissionRequest;
1817
import jakarta.inject.Inject;
18+
19+
import java.text.ParseException;
1920
import java.util.List;
2021
import org.junit.jupiter.api.Test;
2122

23+
import static org.junit.jupiter.api.Assertions.*;
24+
2225
@Property(name = "jwk.primary", value = "{\"p\":\"_OZyH1Mk3wR0oXw1C31t4kWOcaHFB6Njro1cYx52REnPiznn_JTtwvlAMpvV6LVCIZPgKMzdIEMY1gYs1LsO-5IFqWwegXmYJ0iKXbRrZshfWBCzRLK3QK5fER1le1XUBDhtDk7KIW_Xg-SZF4pf_LUEVKMnyUpspGI5F77jlJ8\",\"kty\":\"RSA\",\"q\":\"s9wvl7z8vkHQvo9xOUp-z0a2Z7LFBDil2uIjPh1FQzs34gFXH8dQPRox83TuN5d4KzdLPqQNQAfMXU9_KmxihNb_qDQahYugeELmcem04munxXqBdyZqWhWCy5YmujYqn44irwvoTbw6_RkMqjCmINPTPadptlPivsZ6RhKn8zk\",\"d\":\"ok3wmhOy8NZEHAotnFiH6ecFD6xf_9x33_fMRkqa3_KE8NZM7vmvNgElox2UvcP_2K5E7jOdL2XQdJCTIW3Qlj66yE2a84SYlbvxIc4hDrIog0XNt4FhavvshxxUIfDQo6Q8qXDR5v7nwt6SCopYC3t3KVRdJh08GzKoVxysd7afJjxXxx178gY29uMRqnwxFN1OGnWaiBr-xGKb1frJ6jOI1zvuuCaljZ4aZjc9vOR4y9ZmobgrzkMFnpDAmQZ7MWcVMyodRMOA2dEOckywPhg-dIVNiVIqzJqe5Yg1ilNookjwtqj2TpNU7Z9gPqzYB73PmQ2p5LMDheAPxcOmEQ\",\"e\":\"AQAB\",\"use\":\"sig\",\"kid\":\"e3be37177a7c42bcbadd7cc63715f216\",\"qi\":\"r--nAtaYPAgJq_8R1-kynpd53E17n-loDUgtVWBCx_RmdORX4Auilv1S83dD1mbcnYCbV_LmxiEjOiz-4gS_E0qVGqakAqQrO1hVUvJa_Y2uftDgwFmuJNGbpRU-K4Td_uUzdm48za8yJCgOdYsWp6PNMCcmQgiInzkR3XYV83I\",\"dp\":\"oQUcvmMSw8gzdin-IB2xW_MLecAVEgLu0dGBdD6N8HbKZQvub_xm0dAfFtnvvWXDAFwFyhR96i-uXX67Bos_Q9-6KSAE4E0KGmDucDESfPOw-QJREbl0QgOD1gLQfVGtVy6SCR0TR2zNXFWtP7bD3MNoSXdEOr5fI97CGSNaBWM\",\"alg\":\"RS256\",\"dq\":\"DM-WJDy10-dkMu6MpgQEXEcxHtnA5rgSODD7SaVUFaHWLSbjScQslu2SuUCO5y7GxG0_0spklzb2-356FE98BPI7a4Oqj_COEYLSXzLCS45XeN1s80utL5Vwp4eeYo0RJCQ_nDBA76iEmxp5qHWmn5f25-FQykfXUrdYZj1V8SE\",\"n\":\"sa6m2i-iNvj6ZSTdSHZaBrnv6DId4AqAXhOyl0yA5fNWYe6r51h24SXqk7DsGYHHh74ii74tP1lTpmy6RD67tCK-tbN-d6yc4Z6FfM8R83v2QZUfaAixgHGtw0n2toqsiHf6EloDV-B8q4GYyKDD6cLecoaIuTmMBTY3kts59U2t9W10YoLGsmFqLSz8qNF5HkahzB6_--2DiBfVGUKAXHC-SICGZCi-8efOetv6pt9vFiWEgwU_DgjRNYzLFt1SEmbGFUU4kbjQ7tNTMkHfzfwcT6qLt4kVKy2FNYsEMk24keWtCvW_RyO_fisZc0W9smX7WtYjEXhcAjDeqHgEZw\"}")
2326
@Property(name = "jwk.secondary", value = "{\"p\":\"4qJ9RNlu6SuDT_MLArfzimvKEwmet_j12Z9EQeb5nMjZIOHTcWw__duebUytfWwxsRHhtSVXeMt-EryQAOulm2p1bfiVuparq93z9P5cPnb0oArFaw3eFNFEmX5U-lY8PzUTTsFxO4aVQYAKXD6DP7p5uPzuwpHFuNc71nNIXZE\",\"kty\":\"RSA\",\"q\":\"v4OhkWMbS_nq77HFanwZAT_obfJuQfOFOQBORL4ATAHGUXm2y4YqLNExZs7Wj1MA_6ya6Y00s2JBM7fWq_fPe4d9xo5aGrPdcp0G8W21kkfh9vuVPlHVQTgSP7FQ9qahvXxNwK_11yNr3p1HBmScJ5mHlMBpIJsFcvHA-uXe0Ps\",\"d\":\"EunrjnQ1-jJPSCrt2L94PUpDrakup8a4pXys52YSkJY-W6XidM0roOS6kr06P3G6VQgc6AL_BkvTQ_XS0oXHbXVprDQ5Syam5p9oxHBhhW_vSqIMgUOfm28uyB3Mtw9rBxdUxW3yElHioaR8a-exYhhyVXb1QEhxL_rcnthmhAkM2NcHi2UnxGKFTsC0abQ2MuQc1OAuW5veDiIF2hfdC41qE0_d8vB6FDWbblgUpbwB6uSZaViPs15Buq2oX9dCCw54-PgzkfehDt7lyqgupktbV1psnVVhL86shzt4QFnhd3k7VpFbjCNFtiJTrufV-XBWT0pl2w3VR9wrHJ1bYQ\",\"e\":\"AQAB\",\"use\":\"sig\",\"kid\":\"0794e938379540dc8eaa559508524a79\",\"qi\":\"jy-TNyXVy_44_n4KGAwIbZO2C4r6uNWuEdehBfQKkPhiP90myG1KZVfOoKNOK9bCv2mvZJcBz4c1ArElgpuSCV4-KFac1ZzQo_ic5aoIej8Qa80y2ogc-_Yv6_ZLHC1S76M-lm4jayk2-rvuBpy2pUvHbW6Srhs_szwz7ZfSkLg\",\"dp\":\"ApqdV9ortRAj7Ro8ySY17SQ56SgWI8T_hiWXUi6GNa_1FrShik8VGSSZ2GWmJKfGlmM_NaadL60e4LY77VbHy1ZYzQ-rIL60cEAXmnwFsU4Kl4AoLoe1QoX5BM53yXyOKqfAdgow898i_eKru82YEnZhCagWUjP8kpgefuNKNJE\",\"alg\":\"RS256\",\"dq\":\"bFF78WoXh0pMCdQHL2oPDnjh8kWa_OxKHmpA2nqIWnTqgSyRKd2xPvX2tgooqpmsx-8NEymNdCQPcrv4y_z2OgzxI3tiFRZEGs4bnjOJ7bmAYZv71mqcbi3TjHiyrT6j3jNPGrurFUpweVGFWWVQOMmKOKT3ELz9QPzhREb9Vj8\",\"n\":\"qYvDpV8DRU5hx9eXpE4Ms8nUXicEwrxUUz5gb5gkXpIeY82mqfQKKCP6PSFnkKYtRFTOUSm9cgGGfOd7O4NFsIsxLwXCj34X7ORr19eXKBLvG3bZJLxqRlbYuQshDMkQOui1sDBxvYnj5p4iHne6l2btH5grHOCShUWG-bKps5Y8bKNHod1pIOOBabVCmn3sUVUkZw8nyXkQqZbv-c8x6z0TEfhNOPOIt2AmmlNgrE_8g7-dnCvqfJnhv0c7qkOJzsb7OMmvVwsQNiM59D6uaWZr-vdANo6NggiZmCKUS3tpUvdXW7ec9WMPJWhrVEkRcbWXQnZ_C7pXFrz7rLeNKw\"}")
2427
@MicronautTest
@@ -51,6 +54,20 @@ void testHasSystemPermission() {
5154
assertTrue(response.getBody().get().permissions().contains("AUTH_SERVICE_EDIT-SYSTEM"));
5255
}
5356

57+
@Test
58+
void testHasUserFirstAnLastNameJWTClaims() {
59+
String accessToken = login("[email protected]");
60+
try {
61+
JWT parse = JWTParser.parse(accessToken);
62+
String firstName = (String) parse.getJWTClaimsSet().getClaim("first_name");
63+
String lastName = (String) parse.getJWTClaimsSet().getClaim("last_name");
64+
assertTrue(StringUtils.isNotEmpty(firstName));
65+
assertTrue(StringUtils.isNotEmpty(lastName));
66+
} catch (ParseException e) {
67+
throw new RuntimeException(e);
68+
}
69+
}
70+
5471
@Test
5572
void testHasNoSystemPermission() {
5673
String accessToken = login("[email protected]");

UnityAuth/src/test/resources/db/migration/afterMigrate.sql

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ DELETE FROM tenant;
66
DELETE FROM service;
77
DELETE FROM permission;
88
DELETE FROM role;
9-
INSERT INTO user (id, email, password, status) VALUES(1, '[email protected]', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
10-
INSERT INTO user (id, email, password, status) VALUES(2, '[email protected]', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
11-
INSERT INTO user (id, email, password, status) VALUES(3, '[email protected]', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'DISABLED');
9+
INSERT INTO user (id, email, first_name, last_name, password, status) VALUES(1, '[email protected]', 'Person', 'One', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
10+
INSERT INTO user (id, email, first_name, last_name, password, status) VALUES(2, '[email protected]', 'Test', 'Test', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'ENABLED');
11+
INSERT INTO user (id, email, first_name, last_name, password, status) VALUES(3, '[email protected]', 'Disabled', 'User', '$2a$10$YJetsyoS.EzlVlb249w07uBR8uSqgtlqVH9Hl7bsHtvvwdKAhJp82', 'DISABLED');
1212
INSERT INTO tenant (id, name, description, status) VALUES(1, 'SYSTEM', 'SYSTEM', 'ENABLED');
1313
INSERT INTO tenant (id, name, description, status) VALUES(2, 'acme', 'Acme Corporation', 'ENABLED');
1414
INSERT INTO service (id, name, description, status) VALUES(1, 'Libre311', 'Libre311', 'ENABLED');

0 commit comments

Comments
 (0)