From 4f417d34f3cc4daec77618dad450b95cdc1066f4 Mon Sep 17 00:00:00 2001 From: Jennifer Arps Date: Wed, 19 Jan 2022 16:21:50 +0100 Subject: [PATCH] [#141] add more constraints and fields to AppUser --- .../de/bonndan/nivio/appuser/AppUser.java | 53 ++++++++++++++----- .../nivio/security/CustomOAuth2User.java | 11 +++- .../security/CustomOAuth2UserService.java | 6 ++- 3 files changed, 54 insertions(+), 16 deletions(-) diff --git a/src/main/java/de/bonndan/nivio/appuser/AppUser.java b/src/main/java/de/bonndan/nivio/appuser/AppUser.java index addbdf0bf..9735d2ac7 100644 --- a/src/main/java/de/bonndan/nivio/appuser/AppUser.java +++ b/src/main/java/de/bonndan/nivio/appuser/AppUser.java @@ -11,10 +11,14 @@ @Entity(name = "AppUser") @Table( - name = "user", + name = "app_user", uniqueConstraints = { @UniqueConstraint(name = "appuser_email_unique", - columnNames = "email") + columnNames = "email"), + @UniqueConstraint(name = "appuser_external_id_unique", + columnNames = {"external_id", "idp"}) + + } ) public class AppUser implements UserDetails { @@ -35,6 +39,20 @@ public class AppUser implements UserDetails { ) private Long id; + @Column( + name = "external_id", + nullable = false, + columnDefinition = "VARCHAR" + ) + private String externalId; + + @Column( + name = "idp", + nullable = false, + columnDefinition = "VARCHAR" + ) + private String idp; + @Column( name = "name", nullable = false, @@ -52,14 +70,12 @@ public class AppUser implements UserDetails { @Column( name = "email", - nullable = false, - columnDefinition = "TEXT" + columnDefinition = "VARCHAR" ) private String email; @Column( name = "avatar_url", - nullable = false, columnDefinition = "TEXT" ) private String avatarUrl; @@ -73,16 +89,11 @@ public class AppUser implements UserDetails { @Enumerated(EnumType.STRING) private AppUserRole appUserRole; + @Column private Boolean locked; - private Boolean enabled; - public AppUser(String name, String alias, String email, String avatarUrl, AppUserRole appUserRole) { - this.name = name; - this.alias = alias; - this.email = email; - this.avatarUrl = avatarUrl; - this.appUserRole = appUserRole; - } + @Column + private Boolean enabled; public AppUser() { @@ -188,4 +199,20 @@ public void setLocked(Boolean locked) { public void setEnabled(Boolean enabled) { this.enabled = enabled; } + + public String getExternalId() { + return externalId; + } + + public void setExternalId(String externalId) { + this.externalId = externalId; + } + + public String getIdp() { + return idp; + } + + public void setIdp(String idp) { + this.idp = idp; + } } \ No newline at end of file diff --git a/src/main/java/de/bonndan/nivio/security/CustomOAuth2User.java b/src/main/java/de/bonndan/nivio/security/CustomOAuth2User.java index a234c49e3..401e8aaad 100644 --- a/src/main/java/de/bonndan/nivio/security/CustomOAuth2User.java +++ b/src/main/java/de/bonndan/nivio/security/CustomOAuth2User.java @@ -18,6 +18,8 @@ public class CustomOAuth2User implements OAuth2User { private final String alias; private final String name; private final String avatarUrl; + @NonNull + private final String idp; private final Map attributes; private final Collection authorities; @@ -26,7 +28,8 @@ public CustomOAuth2User(@NonNull final String id, @NonNull final String name, @NonNull final Map attributes, @NonNull final Collection authorities, - @Nullable final String avatarUrl + @Nullable final String avatarUrl, + @NonNull final String idp ) { this.id = Objects.requireNonNull(id, "id must not be null"); this.name = Objects.requireNonNull(name, "name must not be null"); @@ -34,6 +37,7 @@ public CustomOAuth2User(@NonNull final String id, this.attributes = Objects.requireNonNull(attributes, "attributes must not be null"); this.authorities = Objects.requireNonNull(authorities, "authorities must not be null"); this.avatarUrl = avatarUrl; + this.idp = idp; } @Override @@ -65,4 +69,9 @@ public String getId() { public String getAlias() { return alias; } + + @NonNull + public String getIdp() { + return idp; + } } \ No newline at end of file diff --git a/src/main/java/de/bonndan/nivio/security/CustomOAuth2UserService.java b/src/main/java/de/bonndan/nivio/security/CustomOAuth2UserService.java index b1f82099b..3756691ec 100644 --- a/src/main/java/de/bonndan/nivio/security/CustomOAuth2UserService.java +++ b/src/main/java/de/bonndan/nivio/security/CustomOAuth2UserService.java @@ -78,7 +78,8 @@ public static CustomOAuth2User fromGitHubUser(@NonNull final OAuth2User user, name, user.getAttributes(), user.getAuthorities(), - user.getAttribute("avatar_url")); + user.getAttribute("avatar_url"), + "github"); } @@ -89,13 +90,14 @@ private void saveUser(CustomOAuth2User customOAuth2User) { if (appUser.isEmpty()) { LOGGER.info("No user found, generating profile for {}", customOAuth2User.getId()); AppUser newAppUser = new AppUser(); - newAppUser.setEmail(customOAuth2User.getId()); newAppUser.setName(customOAuth2User.getName()); newAppUser.setAlias(customOAuth2User.getAlias()); newAppUser.setAvatarUrl(customOAuth2User.getAvatarUrl()); newAppUser.setAppUserRole(AppUserRole.USER); newAppUser.setLocked(false); newAppUser.setEnabled(true); + newAppUser.setExternalId(customOAuth2User.getId()); + newAppUser.setIdp(customOAuth2User.getIdp()); appUserRepository.save(newAppUser); }