1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.linecorp.centraldogma.server.auth.shiro;
17
18 import static java.util.Objects.requireNonNull;
19
20 import java.util.function.Function;
21
22 import org.apache.shiro.config.Ini;
23
24 import com.linecorp.centraldogma.server.auth.AuthConfig;
25 import com.linecorp.centraldogma.server.auth.AuthProvider;
26 import com.linecorp.centraldogma.server.auth.AuthProviderFactory;
27 import com.linecorp.centraldogma.server.auth.AuthProviderParameters;
28
29
30
31
32 public final class ShiroAuthProviderFactory implements AuthProviderFactory {
33
34 private final Function<AuthConfig, Ini> iniConfigResolver;
35
36
37
38
39 public ShiroAuthProviderFactory() {
40 this(ShiroAuthProviderFactory::fromConfig);
41 }
42
43
44
45
46 public ShiroAuthProviderFactory(Function<AuthConfig, Ini> iniConfigResolver) {
47 this.iniConfigResolver = requireNonNull(iniConfigResolver, "iniConfigResolver");
48 }
49
50 @Override
51 public AuthProvider create(AuthProviderParameters parameters) {
52 requireNonNull(parameters, "parameters");
53 return new ShiroAuthProvider(parameters.authConfig(),
54 iniConfigResolver.apply(parameters.authConfig()),
55 parameters.sessionIdGenerator(),
56 parameters.loginSessionPropagator(),
57 parameters.logoutSessionPropagator());
58 }
59
60 private static Ini fromConfig(AuthConfig cfg) {
61 try {
62 final String iniPath = cfg.properties(String.class);
63 return Ini.fromResourcePath(iniPath);
64 } catch (Exception e) {
65 throw new IllegalStateException("Failed to create " + Ini.class.getSimpleName(), e);
66 }
67 }
68 }