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

Commit 9475927

Browse files
committed
Added CookieSerializer
1 parent 1cf5a00 commit 9475927

File tree

6 files changed

+49
-25
lines changed

6 files changed

+49
-25
lines changed

admin-panel/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ dependencies {
1717
implementation "org.springdoc:springdoc-openapi-security:${springDocVersion}"
1818

1919
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
20+
implementation 'org.springframework.session:spring-session-data-redis'
21+
implementation 'io.lettuce:lettuce-core'
2022

2123
implementation 'org.jsoup:jsoup:1.13.1'
2224

admin-panel/src/main/java/net/cryptic_game/backend/admin/Bootstrap.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
package net.cryptic_game.backend.admin;
22

3+
import java.security.Principal;
4+
5+
import org.apache.commons.lang3.NotImplementedException;
36
import org.springdoc.core.GroupedOpenApi;
47
import org.springframework.boot.SpringApplication;
58
import org.springframework.boot.autoconfigure.SpringBootApplication;
69
import org.springframework.boot.context.properties.EnableConfigurationProperties;
710
import org.springframework.context.annotation.Bean;
11+
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
812
import org.springframework.http.MediaType;
913
import org.springframework.security.core.Authentication;
1014
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1115
import org.springframework.web.bind.annotation.GetMapping;
1216
import org.springframework.web.bind.annotation.RestController;
13-
14-
import java.security.Principal;
17+
import org.springframework.web.server.WebSession;
1518

1619
@SpringBootApplication
1720
@RestController
@@ -22,18 +25,19 @@ public static void main(final String[] args) {
2225
SpringApplication.run(Bootstrap.class, args);
2326
}
2427

28+
@Bean
29+
public LettuceConnectionFactory connectionFactory() {
30+
return new LettuceConnectionFactory();
31+
}
32+
2533
@GetMapping("/user")
2634
public Principal user(@AuthenticationPrincipal final Principal principal) {
2735
return principal;
2836
}
2937

3038
@GetMapping(value = "/auth", produces = MediaType.TEXT_HTML_VALUE)
31-
public String auth(@AuthenticationPrincipal final Authentication authentication) {
32-
if (authentication.isAuthenticated()) {
33-
return "<script>window.close();</script>This window will be closed.";
34-
} else {
35-
return "Not authenticated!";
36-
}
39+
public String auth(@AuthenticationPrincipal final Authentication authentication, final WebSession session) {
40+
throw new NotImplementedException();
3741
}
3842

3943
@Bean

admin-panel/src/main/java/net/cryptic_game/backend/admin/Config.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ public class Config {
99

1010
private String apiToken;
1111
private String serverUrl;
12+
private String cookieDomain;
1213
}

admin-panel/src/main/java/net/cryptic_game/backend/admin/SecurityConfiguration.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.cryptic_game.backend.admin;
22

33
import java.lang.reflect.Field;
4+
import java.time.Duration;
45
import java.util.Collection;
56
import java.util.Locale;
67
import java.util.Set;
@@ -14,12 +15,17 @@
1415
import org.springframework.security.config.annotation.method.configuration.EnableReactiveMethodSecurity;
1516
import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
1617
import org.springframework.security.config.web.server.ServerHttpSecurity;
18+
import org.springframework.security.config.web.server.ServerHttpSecurity.CsrfSpec;
19+
import org.springframework.security.config.web.server.ServerHttpSecurity.FormLoginSpec;
20+
import org.springframework.security.config.web.server.ServerHttpSecurity.HttpBasicSpec;
1721
import org.springframework.security.core.GrantedAuthority;
1822
import org.springframework.security.core.authority.SimpleGrantedAuthority;
1923
import org.springframework.security.oauth2.core.user.DefaultOAuth2User;
2024
import org.springframework.security.web.server.SecurityWebFilterChain;
2125
import org.springframework.security.web.server.authentication.RedirectServerAuthenticationSuccessHandler;
2226
import org.springframework.security.web.server.savedrequest.WebSessionServerRequestCache;
27+
import org.springframework.web.server.session.CookieWebSessionIdResolver;
28+
import org.springframework.web.server.session.WebSessionIdResolver;
2329

2430
@Slf4j
2531
@EnableWebFluxSecurity
@@ -38,7 +44,9 @@ private static void setField(final Class<?> clazz, final String field, final Obj
3844

3945
@Bean
4046
public SecurityWebFilterChain securityWebFilterChain(final ServerHttpSecurity http) {
41-
http.csrf().disable();
47+
http.csrf(CsrfSpec::disable);
48+
http.formLogin(FormLoginSpec::disable);
49+
http.httpBasic(HttpBasicSpec::disable);
4250

4351
final WebSessionServerRequestCache webSessionServerRequestCache = new WebSessionServerRequestCache();
4452
http.requestCache(spec -> spec.requestCache(webSessionServerRequestCache));
@@ -100,6 +108,22 @@ public SecurityWebFilterChain securityWebFilterChain(final ServerHttpSecurity ht
100108

101109
.anyExchange().authenticated();
102110

111+
// http.exceptionHandling()
112+
// .authenticationEntryPoint((exchange, ex) -> Mono.fromRunnable(() -> exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED)));
113+
103114
return http.build();
104115
}
116+
117+
@Bean
118+
WebSessionIdResolver webSessionIdResolver(final Config config) {
119+
final CookieWebSessionIdResolver resolver = new CookieWebSessionIdResolver();
120+
121+
resolver.setCookieMaxAge(Duration.ofDays(1));
122+
resolver.addCookieInitializer(responseCookieBuilder ->
123+
responseCookieBuilder.domain(config.getCookieDomain())
124+
.httpOnly(true)
125+
);
126+
127+
return resolver;
128+
}
105129
}

admin-panel/src/main/resources/META-INF/additional-spring-configuration-metadata.json

Lines changed: 0 additions & 14 deletions
This file was deleted.

admin-panel/src/main/resources/application.properties

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,18 @@ springdoc.swagger-ui.try-it-out-enabled=true
2323
spring.security.oauth2.client.registration.cryptic-oauth.client-name=${OIDC_NAME:}
2424
spring.security.oauth2.client.registration.cryptic-oauth.client-id=${OIDC_CLIENT_ID:}
2525
spring.security.oauth2.client.registration.cryptic-oauth.client-secret=${OIDC_CLIENT_SECRET:}
26+
#spring.security.oauth2.client.registration.cryptic-oauth.redirect-uri=http://localhost:4200/auth.html
2627
spring.security.oauth2.client.registration.cryptic-oauth.provider=cryptic-oauth
2728
spring.security.oauth2.client.provider.cryptic-oauth.issuer-uri=${OIDC_ISSUER_URL:}
2829
#spring.security.oauth2.client.provider.cryptic-oauth.user-name-attribute=${OIDC_USERNAME_ATTRIBUTE:}
2930
server.forward-headers-strategy=native
30-
31-
#gameserver
31+
# gameserver
3232
cryptic.admin-panel.api-token=${API_TOKEN:}
3333
cryptic.admin-panel.server-url=${SERVER_URL:}
34+
# cookie
35+
cryptic.admin-panel.cookie-domain=${COOKIE_DOMAIN:}
36+
# redis
37+
spring.session.store-type=redis
38+
spring.redis.host=${REDIS_HOST:localhost}
39+
spring.redis.port=${REDIS_PORT:6379}
40+
spring.redis.password=${REDIS_PASS:}

0 commit comments

Comments
 (0)