Skip to content

Commit adda47b

Browse files
committed
Starter skeleton
0 parents  commit adda47b

File tree

8 files changed

+275
-0
lines changed

8 files changed

+275
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.idea/
2+
target/
3+
*.iml

pom.xml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0"
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
7+
<groupId>io.pan.graphapi</groupId>
8+
<artifactId>graph-api-spring-boot-starter</artifactId>
9+
<version>1.0.0</version>
10+
11+
<properties>
12+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
13+
<spring-boot.version>2.4.0</spring-boot.version>
14+
</properties>
15+
16+
<dependencies>
17+
<dependency>
18+
<groupId>org.springframework.boot</groupId>
19+
<artifactId>spring-boot</artifactId>
20+
<version>${spring-boot.version}</version>
21+
</dependency>
22+
<dependency>
23+
<groupId>org.springframework.boot</groupId>
24+
<artifactId>spring-boot-autoconfigure</artifactId>
25+
<version>${spring-boot.version}</version>
26+
</dependency>
27+
28+
<dependency>
29+
<groupId>com.microsoft.graph</groupId>
30+
<artifactId>microsoft-graph</artifactId>
31+
<version>2.4.1</version>
32+
<scope>provided</scope>
33+
</dependency>
34+
<dependency>
35+
<groupId>io.pan</groupId>
36+
<artifactId>graph-api-authentication</artifactId>
37+
<version>1.0.0</version>
38+
</dependency>
39+
</dependencies>
40+
41+
<build>
42+
<plugins>
43+
<plugin>
44+
<groupId>org.apache.maven.plugins</groupId>
45+
<artifactId>maven-compiler-plugin</artifactId>
46+
<version>3.8.1</version>
47+
<configuration>
48+
<source>8</source>
49+
<target>8</target>
50+
</configuration>
51+
</plugin>
52+
</plugins>
53+
</build>
54+
55+
</project>
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package io.pan.graphapi.starter;
2+
3+
import com.microsoft.graph.authentication.IAuthenticationProvider;
4+
import com.microsoft.graph.http.IHttpRequest;
5+
6+
import java.util.function.Supplier;
7+
8+
public class AuthenticationProvider implements IAuthenticationProvider {
9+
10+
private final Supplier<String> token;
11+
private final String bearer;
12+
private final String authorizationHeader;
13+
14+
public AuthenticationProvider(Supplier<String> token, String bearer, String authorizationHeader) {
15+
this.token = token;
16+
this.bearer = bearer;
17+
this.authorizationHeader = authorizationHeader;
18+
}
19+
20+
public AuthenticationProvider(Supplier<String> token) {
21+
this(
22+
token,
23+
"Bearer ",
24+
"Authorization"
25+
);
26+
}
27+
28+
@Override
29+
public void authenticateRequest(IHttpRequest request) {
30+
request.addHeader(authorizationHeader, bearer + token.get());
31+
}
32+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package io.pan.graphapi.starter.application;
2+
3+
import io.pan.graphapi.authentication.request.credential.ApplicationCredential;
4+
import org.springframework.boot.context.properties.ConfigurationProperties;
5+
import org.springframework.boot.context.properties.ConstructorBinding;
6+
7+
import java.util.List;
8+
9+
@ConstructorBinding
10+
@ConfigurationProperties("graph-api")
11+
public class ApplicationGraphApiProperties implements ApplicationCredential {
12+
13+
private final String clientId;
14+
private final String clientSecret;
15+
private final List<String> scopes;
16+
private final String nationalCloud;
17+
private final String tenant;
18+
19+
public ApplicationGraphApiProperties(String clientId, String clientSecret, List<String> scopes, String nationalCloud, String tenant) {
20+
this.clientId = clientId;
21+
this.clientSecret = clientSecret;
22+
this.scopes = scopes;
23+
this.nationalCloud = nationalCloud;
24+
this.tenant = tenant;
25+
}
26+
27+
@Override
28+
public String clientId() {
29+
return clientId;
30+
}
31+
32+
@Override
33+
public String clientSecret() {
34+
return clientSecret;
35+
}
36+
37+
@Override
38+
public List<String> scopes() {
39+
return scopes;
40+
}
41+
42+
@Override
43+
public String tenant() {
44+
return tenant;
45+
}
46+
47+
@Override
48+
public String nationalCloud() {
49+
return nationalCloud;
50+
}
51+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.pan.graphapi.starter.application;
2+
3+
import com.microsoft.graph.models.extensions.IGraphServiceClient;
4+
import com.microsoft.graph.requests.extensions.GraphServiceClient;
5+
import io.pan.graphapi.authentication.TokenCache;
6+
import io.pan.graphapi.authentication.request.credential.ApplicationCredential;
7+
import io.pan.graphapi.starter.AuthenticationProvider;
8+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
9+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
10+
import org.springframework.context.annotation.Bean;
11+
import org.springframework.context.annotation.Configuration;
12+
13+
@Configuration
14+
@ConditionalOnProperty(prefix = "graph-api", name = "onlyDelegate", havingValue = "false", matchIfMissing = true)
15+
@EnableConfigurationProperties(ApplicationGraphApiProperties.class)
16+
public class ApplicationGraphClientConfiguration {
17+
18+
private final ApplicationCredential credentials;
19+
20+
public ApplicationGraphClientConfiguration(ApplicationCredential credentials) {
21+
this.credentials = credentials;
22+
}
23+
24+
@Bean("applicationGraphClient")
25+
public IGraphServiceClient graphClient() {
26+
return GraphServiceClient.builder()
27+
.authenticationProvider(
28+
new AuthenticationProvider(
29+
new TokenCache(credentials)
30+
)
31+
).buildClient();
32+
}
33+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package io.pan.graphapi.starter.delegate;
2+
3+
import io.pan.graphapi.authentication.request.credential.UserCredential;
4+
import org.springframework.boot.context.properties.ConfigurationProperties;
5+
import org.springframework.boot.context.properties.ConstructorBinding;
6+
7+
import java.util.List;
8+
9+
@ConstructorBinding
10+
@ConfigurationProperties("graph-api")
11+
public class DelegateGraphApiProperties implements UserCredential {
12+
13+
private final String clientId;
14+
private final String clientSecret;
15+
private final List<String> scopes;
16+
private final String nationalCloud;
17+
private final String tenant;
18+
private final String user;
19+
private final String password;
20+
21+
public DelegateGraphApiProperties(String clientId, String clientSecret, List<String> scopes, String nationalCloud, String tenant, String user, String password) {
22+
this.clientId = clientId;
23+
this.clientSecret = clientSecret;
24+
this.scopes = scopes;
25+
this.nationalCloud = nationalCloud;
26+
this.tenant = tenant;
27+
this.user = user;
28+
this.password = password;
29+
}
30+
31+
@Override
32+
public String clientId() {
33+
return clientId;
34+
}
35+
36+
@Override
37+
public String clientSecret() {
38+
return clientSecret;
39+
}
40+
41+
@Override
42+
public List<String> scopes() {
43+
return scopes;
44+
}
45+
46+
@Override
47+
public String tenant() {
48+
return tenant;
49+
}
50+
51+
@Override
52+
public String nationalCloud() {
53+
return nationalCloud;
54+
}
55+
56+
@Override
57+
public String user() {
58+
return user;
59+
}
60+
61+
@Override
62+
public String password() {
63+
return password;
64+
}
65+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package io.pan.graphapi.starter.delegate;
2+
3+
import com.microsoft.graph.models.extensions.IGraphServiceClient;
4+
import com.microsoft.graph.requests.extensions.GraphServiceClient;
5+
import io.pan.graphapi.authentication.TokenCache;
6+
import io.pan.graphapi.authentication.request.credential.UserCredential;
7+
import io.pan.graphapi.starter.AuthenticationProvider;
8+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
9+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
10+
import org.springframework.context.annotation.Bean;
11+
import org.springframework.context.annotation.Configuration;
12+
13+
@Configuration
14+
@ConditionalOnProperty(prefix = "graph-api", name = {"user", "password"})
15+
@EnableConfigurationProperties(DelegateGraphApiProperties.class)
16+
public class DelegateGraphClientConfiguration {
17+
18+
private final UserCredential credentials;
19+
20+
public DelegateGraphClientConfiguration(UserCredential credentials) {
21+
this.credentials = credentials;
22+
}
23+
24+
@Bean("delegateGraphClient")
25+
public IGraphServiceClient graphClient() {
26+
return GraphServiceClient.builder()
27+
.authenticationProvider(
28+
new AuthenticationProvider(
29+
new TokenCache(credentials)
30+
)
31+
).buildClient();
32+
}
33+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2+
io.pan.graphapi.starter.application.ApplicationGraphClientConfiguration,\
3+
io.pan.graphapi.starter.delegate.DelegateGraphClientConfiguration

0 commit comments

Comments
 (0)