1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package davmail.exchange.auth;
21
22 import davmail.Settings;
23 import davmail.http.HttpClientAdapter;
24 import org.apache.log4j.Logger;
25
26 import java.io.IOException;
27 import java.net.URI;
28
29
30
31
32 @SuppressWarnings("unused")
33 public class O365StoredTokenAuthenticator implements ExchangeAuthenticator {
34 private static final Logger LOGGER = Logger.getLogger(O365StoredTokenAuthenticator.class);
35
36 URI ewsUrl = URI.create(Settings.getO365Url());
37
38 private String username;
39 private String password;
40 private O365Token token;
41
42 @Override
43 public void setUsername(String username) {
44 this.username = username;
45 }
46
47 @Override
48 public void setPassword(String password) {
49 this.password = password;
50 }
51
52
53
54
55
56 @Override
57 public HttpClientAdapter getHttpClientAdapter() {
58 return new HttpClientAdapter(getExchangeUri(), username, password, true);
59 }
60
61 @Override
62 public void authenticate() throws IOException {
63
64 final String clientId = Settings.getProperty("davmail.oauth.clientId", "facd6cff-a294-4415-b59f-c5b01937d7bd");
65
66 final String redirectUri = Settings.getProperty("davmail.oauth.redirectUri", Settings.getO365LoginUrl()+"/common/oauth2/nativeclient");
67
68 String tenantId = Settings.getProperty("davmail.oauth.tenantId", "common");
69
70 String refreshToken = Settings.getProperty("davmail.oauth."+username.toLowerCase()+".refreshToken");
71 if (refreshToken == null) {
72
73 refreshToken = Settings.getProperty("davmail.oauth.refreshToken");
74 }
75 String accessToken = Settings.getProperty("davmail.oauth.accessToken");
76 if (refreshToken == null && accessToken == null) {
77 LOGGER.warn("No stored Oauth refresh token found for "+username);
78 throw new IOException("No stored Oauth refresh token found for "+username);
79 }
80
81 token = new O365Token(tenantId, clientId, redirectUri, password);
82 if (accessToken != null) {
83
84 token.setAccessToken(accessToken);
85 } else {
86 token.setRefreshToken(refreshToken);
87 token.refreshToken();
88 }
89 }
90
91 @Override
92 public O365Token getToken() {
93 return token;
94 }
95
96 @Override
97 public URI getExchangeUri() {
98 return ewsUrl;
99 }
100 }