Skip to content
This repository was archived by the owner on Nov 3, 2022. It is now read-only.

141 user database advanced #863

Merged
merged 38 commits into from
Feb 4, 2022
Merged
Show file tree
Hide file tree
Changes from 36 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
a0ea5b6
[#141] add user entity
jenarp Jan 11, 2022
6dfa150
[#141] add repo, add embedded db, add data file
jenarp Jan 12, 2022
af4d476
Merge branch '741_oauth2' into 141_user_database_advanced
jenarp Jan 14, 2022
dbad2fe
Merge branch 'develop' into 141_user_database_advanced
jenarp Jan 14, 2022
26cd9a5
[#141] add services, password encoder
jenarp Jan 14, 2022
a783f3b
[#141] add principalExtractor
jenarp Jan 17, 2022
0346c51
Merge pull request #848 from dedica-team/741_oauth2
jenarp Jan 17, 2022
4b73ad8
Merge branch 'develop' into 141_user_database_advanced
jenarp Jan 17, 2022
04e66ba
[#141] add principalExtraction
jenarp Jan 17, 2022
b427b8d
Merge branch 'develop' into 141_user_database_advanced
jenarp Jan 19, 2022
a141f45
Merge branch 'develop' into 141_user_database_advanced
jenarp Jan 19, 2022
734376e
[#141] github user in database
jenarp Jan 19, 2022
4f417d3
[#141] add more constraints and fields to AppUser
jenarp Jan 19, 2022
54b3f54
[#141] cleanup
jenarp Jan 19, 2022
ee9568b
[#141] add unit tests
jenarp Jan 21, 2022
25aaac1
[#141] add integration repository test
jenarp Jan 21, 2022
05d9085
[#141] add integration repository test
jenarp Jan 21, 2022
fea6a8a
[#141] AppUserRole enum test
jenarp Jan 24, 2022
a429836
Merge remote-tracking branch 'origin/141_user_database_advanced' into…
jenarp Jan 24, 2022
da0cb72
[#141] add AppUserTest + AppUserServiceTest
jenarp Jan 24, 2022
7ca6d18
[#141] bug fix SecurityConfig and CustomOAuth2UserServiceTest + add A…
jenarp Jan 24, 2022
4fce919
[#141] bug fix SecurityConfig and CustomOAuth2UserServiceTest + add A…
jenarp Jan 24, 2022
55e1bb7
Merge remote-tracking branch 'origin/141_user_database_advanced' into…
jenarp Jan 24, 2022
085d923
[#141] PR Daniel comments
jenarp Jan 24, 2022
c9cf694
[#141] handle default null and string for AppUserRole
jenarp Jan 25, 2022
7503827
[#141] delete unnecessary Optional
jenarp Jan 25, 2022
9fef348
[#141] add loginEvent und listener
jenarp Jan 26, 2022
58caef4
[#141] add tests for loginEvent und listener
jenarp Jan 26, 2022
50fe50e
[#141] bug fix AppUserRepositoryTest
jenarp Jan 26, 2022
eb8a2eb
[#141] delete UserDetails
jenarp Jan 26, 2022
13b7648
[#141] change idp to idProvider, usage of Objects.isNull()
jenarp Jan 28, 2022
3c736f9
[#141] changed reading method @repository
jenarp Jan 31, 2022
fc04af6
[#141] improved tests
jenarp Jan 31, 2022
fb8841e
[#141] disable h2 console in application.yml
jenarp Jan 31, 2022
a271663
[#141] in-memory db
jenarp Jan 31, 2022
a018822
[#141] in-memory db
jenarp Jan 31, 2022
4c6050c
[#141] if/else instead of ternary op
jenarp Feb 2, 2022
fe6a3c3
[#141] new bouncycastel version
jenarp Feb 4, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions docs/source/inc_env_config.rst
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ K8s master URL (optional). All variables from https://github.com/fabric8io/kuber

Patterns for allowed origins when the app requires authentication

.. envvar:: NIVIO_AUTH_GITHUB_ALIAS_ATTRIBUTE

GitHub user attribute to use as alias

.. envvar:: NIVIO_AUTH_GITHUB_CLIENT_ID

GitHub app OAuth2 client id
Expand All @@ -50,6 +54,10 @@ GitHub app OAuth2 client id

GitHub app OAuth2 client secret

.. envvar:: NIVIO_AUTH_GITHUB_NAME_ATTRIBUTE

GitHub user attribute to use as name

.. envvar:: NIVIO_AUTH_LOGIN_MODE

Authentication mode: none, optional, required
Expand Down
21 changes: 20 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,13 @@
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.security.oauth.boot/spring-security-oauth2-autoconfigure -->
<dependency>
<groupId>org.springframework.security.oauth.boot</groupId>
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
<version>2.6.3</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
Expand Down Expand Up @@ -294,7 +301,7 @@
<dependency>
<groupId>org.openapitools</groupId>
<artifactId>openapi-generator</artifactId>
<version>5.3.1</version>
<version>5.3.0</version>
</dependency>

<!-- dot parsing -->
Expand All @@ -304,6 +311,18 @@
<version>0.18.1</version>
</dependency>

<!-- H2 database-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.210</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
Expand Down
1 change: 1 addition & 0 deletions src/main/java/de/bonndan/nivio/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

}
164 changes: 164 additions & 0 deletions src/main/java/de/bonndan/nivio/appuser/AppUser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
package de.bonndan.nivio.appuser;

import javax.persistence.*;


@Entity(name = "AppUser")
@Table(
name = "appUser",
uniqueConstraints = {
@UniqueConstraint(name = "emailUnique",
columnNames = "email"),
@UniqueConstraint(name = "externalIdAndIdProviderUnique",
columnNames = {"externalId", "idProvider"})

}
)
public class AppUser {

@SequenceGenerator(
name = "userSequence",
sequenceName = "userSequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "userSequence"
)
@Id
@Column(
name = "id",
nullable = false
)
private Long id;

@Column(
name = "externalId",
nullable = false,
columnDefinition = "VARCHAR"
)
private String externalId;

@Column(
name = "idProvider",
nullable = false,
columnDefinition = "VARCHAR"
)
private String idProvider;

@Column(
name = "name",
columnDefinition = "TEXT"
)
private String name;

@Column(
name = "alias",
nullable = false,
columnDefinition = "TEXT"
)
private String alias;

@Column(
name = "email",
columnDefinition = "VARCHAR"
)
private String email;

@Column(
name = "avatarUrl",
columnDefinition = "TEXT"
)
private String avatarUrl;

@Column(
name = "role",
nullable = false,
columnDefinition = "TEXT"
)
@Enumerated(EnumType.STRING)
private AppUserRole appUserRole;

@Column
private Boolean locked;

@Column
private Boolean enabled;

public Long getId() {
return id;
}

public String getName() { return name; }

public String getAlias() {
return alias;
}

public String getEmail() {
return email;
}

public String getAvatarUrl() {
return avatarUrl;
}

public AppUserRole getAppUserRole() {
return appUserRole;
}

public String getExternalId() {
return externalId;
}

public String getIdProvider() {
return idProvider;
}

public Boolean getLocked() {
return locked;
}

public Boolean getEnabled() {
return enabled;
}

public void setId(Long id) {
this.id = id;
}

public void setName(String name) {
this.name = name;
}

public void setAlias(String alias) {
this.alias = alias;
}

public void setEmail(String email) {
this.email = email;
}

public void setAvatarUrl(String avatarUrl) {
this.avatarUrl = avatarUrl;
}

public void setAppUserRole(AppUserRole appUserRole) {
this.appUserRole = appUserRole;
}

public void setLocked(Boolean locked) {
this.locked = locked;
}

public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}

public void setExternalId(String externalId) {
this.externalId = externalId;
}

public void setIdProvider(String idProvider) { this.idProvider = idProvider; }

}
15 changes: 15 additions & 0 deletions src/main/java/de/bonndan/nivio/appuser/AppUserRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package de.bonndan.nivio.appuser;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.Optional;

@Repository
@Transactional(readOnly = true)
public interface AppUserRepository extends CrudRepository<AppUser, Long> {

Optional<AppUser> findByExternalIdAndIdProvider(String externalId, String idProvider);

}
23 changes: 23 additions & 0 deletions src/main/java/de/bonndan/nivio/appuser/AppUserRole.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package de.bonndan.nivio.appuser;

import java.util.Objects;

public enum AppUserRole {
USER,
ADMIN;

// declare your defaults with constant values
private static final AppUserRole defaultValue = USER;

// `of` as a substitute for `valueOf` handling the default value
public static AppUserRole of(String value) {
if (Objects.isNull(value)) {
return defaultValue;
}
else if (!ADMIN.name().equalsIgnoreCase(value)){
return defaultValue;
}
else return AppUserRole.valueOf(value);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@

/**
* Configuration of authentication and related matters.
*
*
*/
@Configuration
@ConfigurationProperties("auth")
Expand Down
36 changes: 23 additions & 13 deletions src/main/java/de/bonndan/nivio/security/CustomOAuth2User.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,35 @@
import org.springframework.security.oauth2.core.user.OAuth2User;

/**
* Implementation of {@link OAuth2User} which provides an id, alias and avatar url
* Implementation of {@link OAuth2User} which provides an alias, name, avatar url, external id, and idProvider
*/
public class CustomOAuth2User implements OAuth2User {

private final String id;
private final String alias;
private final String name;
private final String avatarUrl;
@NonNull
private final String alias;
private final String externalId;
private final String idProvider;
private final Map<String, Object> attributes;
private final Collection<? extends GrantedAuthority> authorities;

public CustomOAuth2User(@NonNull final String id,
public CustomOAuth2User(@NonNull final String externalId,
@NonNull final String alias,
@NonNull final String name,
@Nullable final String name,
@NonNull final Map<String, Object> attributes,
@NonNull final Collection<? extends GrantedAuthority> authorities,
@Nullable final String avatarUrl
@Nullable final String avatarUrl,
@NonNull final String idProvider
) {
this.id = Objects.requireNonNull(id, "id must not be null");
this.name = Objects.requireNonNull(name, "name must not be null");
this.externalId = Objects.requireNonNull(externalId, "id must not be null");
this.alias = Objects.requireNonNull(alias, "alias must not be null");
this.attributes = Objects.requireNonNull(attributes, "attributes must not be null");
this.authorities = Objects.requireNonNull(authorities, "authorities must not be null");
this.idProvider = Objects.requireNonNull(idProvider, "idProvider must not be null");
this.name = name;
this.avatarUrl = avatarUrl;

}

@Override
Expand All @@ -57,12 +62,17 @@ public String getAvatarUrl() {
}

@NonNull
public String getId() {
return id;
public String getAlias() {
return alias;
}

@NonNull
public String getAlias() {
return alias;
public String getIdProvider() {
return idProvider;
}

@NonNull
public String getExternalId() {
return externalId;
}
}
}
Loading