Skip to content

Commit

Permalink
refactor: replace the lib jar with Halo api dependency (#31)
Browse files Browse the repository at this point in the history
### What this PR does?
使用 `run.halo.app:api` 依赖替换原先 lib jar 的方式

```release-note
升级 halo plugin api 依赖
```
  • Loading branch information
guqing committed Jun 2, 2023
1 parent 17a06fe commit b6e5dae
Show file tree
Hide file tree
Showing 9 changed files with 65 additions and 66 deletions.
29 changes: 9 additions & 20 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -9,36 +9,25 @@ sourceCompatibility = JavaVersion.VERSION_17

repositories {
maven { url 'https://s01.oss.sonatype.org/content/repositories/releases' }
maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' }
maven { url 'https://repo.spring.io/milestone' }
mavenCentral()
}

jar {
enabled = true
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
manifest.attributes(
'Plugin-Version': "${project.version}",
)
from {
configurations.runtimeClasspath.collect {
it.isDirectory() ? it : zipTree(it)
}
}
}

dependencies {
compileOnly platform("run.halo.dependencies:halo-dependencies:1.0.0")
implementation platform('run.halo.tools.platform:plugin:2.6.0-SNAPSHOT')
compileOnly 'run.halo.app:api'

compileOnly 'org.springframework.security:spring-security-oauth2-client'
compileOnly files("lib/halo-2.4.0-SNAPSHOT-plain.jar")

testImplementation files("lib/halo-2.4.0-SNAPSHOT-plain.jar")
testImplementation 'org.springframework.security:spring-security-oauth2-client'
testImplementation platform("run.halo.dependencies:halo-dependencies:1.0.0")
testImplementation 'run.halo.app:api'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-oauth2-client'
testImplementation 'io.projectreactor:reactor-test'
}

test {
useJUnitPlatform()
}

halo {
version = '2.6.0'
}
Binary file removed lib/halo-2.4.0-SNAPSHOT-plain.jar
Binary file not shown.
24 changes: 24 additions & 0 deletions src/main/java/run/halo/oauth/AccessDeniedException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package run.halo.oauth;

import org.springframework.http.HttpStatus;
import org.springframework.web.server.ResponseStatusException;

/**
* AccessDeniedException will resolve i18n message and response 403 status.
*
* @author guqing
*/
public class AccessDeniedException extends ResponseStatusException {

public AccessDeniedException() {
this("Access to the resource is forbidden");
}

public AccessDeniedException(String reason) {
this(reason, null, null);
}

public AccessDeniedException(String reason, String detailCode, Object[] detailArgs) {
super(HttpStatus.FORBIDDEN, reason, null, detailCode, detailArgs);
}
}
16 changes: 2 additions & 14 deletions src/main/java/run/halo/oauth/DefaultUserDetailsService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import static run.halo.app.core.extension.User.KIND;

import lombok.RequiredArgsConstructor;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Component;
Expand All @@ -15,8 +14,6 @@
import run.halo.app.core.extension.User;
import run.halo.app.extension.GroupKind;
import run.halo.app.extension.ReactiveExtensionClient;
import run.halo.app.extension.exception.ExtensionNotFoundException;
import run.halo.app.infra.exception.UserNotFoundException;

/**
* A default implementation for finding the UserDetails by username.
Expand All @@ -32,7 +29,7 @@ public class DefaultUserDetailsService implements ReactiveUserDetailsService {

@Override
public Mono<UserDetails> findByUsername(String username) {
return getUser(username)
return this.client.fetch(User.class, username)
.flatMap(user -> {
var subject = new RoleBinding.Subject(KIND, username, GROUP);
return listRoleRefs(subject)
Expand All @@ -44,9 +41,7 @@ public Mono<UserDetails> findByUsername(String username) {
.password(user.getSpec().getPassword())
.roles(roleNames.toArray(new String[0]))
.build());
})
.onErrorMap(ExtensionNotFoundException.class,
e -> new BadCredentialsException("Invalid Credentials"));
});
}

public Flux<RoleBinding.RoleRef> listRoleRefs(RoleBinding.Subject subject) {
Expand All @@ -56,13 +51,6 @@ public Flux<RoleBinding.RoleRef> listRoleRefs(RoleBinding.Subject subject) {
.map(RoleBinding::getRoleRef);
}

public Mono<User> getUser(String username) {
return this.client.get(User.class, username)
.onErrorMap(ExtensionNotFoundException.class,
(e) -> new UserNotFoundException(username)
);
}

private boolean isRoleRef(RoleBinding.RoleRef roleRef) {
var roleGvk = new Role().groupVersionKind();
var gk = new GroupKind(roleRef.getApiGroup(), roleRef.getKind());
Expand Down
27 changes: 27 additions & 0 deletions src/main/java/run/halo/oauth/NotFoundException.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package run.halo.oauth;

import org.springframework.http.HttpStatus;
import org.springframework.lang.Nullable;
import org.springframework.web.server.ResponseStatusException;

/**
* Not found exception.
*
* @author guqing
* @since 2.0.0
*/
public class NotFoundException extends ResponseStatusException {

public NotFoundException(@Nullable String reason) {
this(reason, null);
}

public NotFoundException(@Nullable String reason,
@Nullable Throwable cause) {
super(HttpStatus.NOT_FOUND, reason, cause);
}

public NotFoundException(@Nullable Throwable cause) {
this(cause == null ? "" : cause.getMessage(), cause);
}
}
2 changes: 0 additions & 2 deletions src/main/java/run/halo/oauth/Oauth2Authenticator.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import static org.apache.commons.lang3.StringUtils.defaultString;
import static run.halo.oauth.SocialServerOauth2AuthorizationRequestResolver.SOCIAL_CONNECTION;

import java.nio.charset.StandardCharsets;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.springframework.lang.NonNull;
Expand Down Expand Up @@ -33,7 +32,6 @@
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.util.UriUtils;
import reactor.core.publisher.Mono;
import run.halo.app.infra.exception.AccessDeniedException;
import run.halo.app.security.AdditionalWebFilter;

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,12 @@
import run.halo.app.core.extension.AuthProvider;
import run.halo.app.extension.ConfigMap;
import run.halo.app.extension.ReactiveExtensionClient;
import run.halo.app.extension.store.ExtensionStore;
import run.halo.app.infra.SystemSetting;
import run.halo.app.infra.exception.NotFoundException;
import run.halo.app.infra.utils.JsonUtils;

/**
* A reactive repository for OAuth 2.0 / OpenID Connect 1.0 ClientRegistration(s) that stores
* {@link ClientRegistration}(s) in the {@link ExtensionStore}.
* {@link ClientRegistration}(s) in the {@link ReactiveExtensionClient}.
*
* @author guqing
* @since 1.0.0
Expand Down
26 changes: 0 additions & 26 deletions src/main/java/run/halo/oauth/OauthGithubConfig.java

This file was deleted.

3 changes: 2 additions & 1 deletion src/main/java/run/halo/oauth/UserConnectionServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,18 @@

import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.core.context.ReactiveSecurityContextHolder;
import org.springframework.security.oauth2.client.authentication.OAuth2LoginAuthenticationToken;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.web.server.ServerWebInputException;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import run.halo.app.core.extension.UserConnection;
import run.halo.app.extension.Metadata;
import run.halo.app.extension.ReactiveExtensionClient;
import run.halo.app.infra.exception.AccessDeniedException;

/**
* User connection service implementation.
Expand Down

0 comments on commit b6e5dae

Please sign in to comment.