Initial commit, working server

This commit is contained in:
Martin Asprusten
2026-04-12 01:28:25 +02:00
commit 49e857f258
39 changed files with 3375 additions and 0 deletions
@@ -0,0 +1,45 @@
package no.asprusten.sykkelaksjon.security;
import com.nimbusds.oauth2.sdk.auth.ClientAuthenticationMethod;
import org.pac4j.core.authorization.authorizer.DefaultAuthorizers;
import org.pac4j.core.config.Config;
import org.pac4j.http.client.direct.HeaderClient;
import org.pac4j.oidc.client.OidcClient;
import org.pac4j.oidc.config.OidcConfiguration;
import org.pac4j.springframework.config.Pac4jSecurityConfig;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import java.util.List;
@Configuration
public class SecurityConfig extends Pac4jSecurityConfig {
@Value("${sykkelaksjon.openid.discoveryURI}")
private String discoveryURI;
@Value("${sykkelaksjon.openid.clientId}")
private String clientId;
@Bean
public Config config() {
final var config = new OidcConfiguration()
.setDiscoveryURI(discoveryURI)
.setClientId(clientId);
OidcClient client = new OidcClient(config);
client.setCallbackUrl("notused");
client.init();
HeaderClient headerClient = new HeaderClient("Authorization", "Bearer ", client.getProfileCreator());
return new Config(headerClient);
}
@Override
public void addInterceptors(final InterceptorRegistry registry) {
addSecurity(registry, "HeaderClient").addPathPatterns("/api/**").excludePathPatterns("/api/openid").excludeHttpMethods(List.of(HttpMethod.OPTIONS));
}
}
@@ -0,0 +1,17 @@
package no.asprusten.sykkelaksjon.security;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
@ControllerAdvice
public class ServerExceptionHandler {
public static class InvalidUserException extends Exception {}
@ResponseStatus(HttpStatus.FORBIDDEN)
@ExceptionHandler(InvalidUserException.class)
public void handleInvalidUser() {
// Do nothing
}
}