Refactor logging to use slf4j
[iotivity.git] / cloud / account / src / main / java / org / iotivity / cloud / accountserver / oauth / Github.java
1 /*
2  * //******************************************************************
3  * //
4  * // Copyright 2016 Samsung Electronics All Rights Reserved.
5  * //
6  * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7  * //
8  * // Licensed under the Apache License, Version 2.0 (the "License");
9  * // you may not use this file except in compliance with the License.
10  * // You may obtain a copy of the License at
11  * //
12  * //      http://www.apache.org/licenses/LICENSE-2.0
13  * //
14  * // Unless required by applicable law or agreed to in writing, software
15  * // distributed under the License is distributed on an "AS IS" BASIS,
16  * // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * // See the License for the specific language governing permissions and
18  * // limitations under the License.
19  * //
20  * //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21  */
22 package org.iotivity.cloud.accountserver.oauth;
23
24 import java.util.HashMap;
25
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28 import org.apache.oltu.oauth2.client.OAuthClient;
29 import org.apache.oltu.oauth2.client.URLConnectionClient;
30 import org.apache.oltu.oauth2.client.request.OAuthBearerClientRequest;
31 import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
32 import org.apache.oltu.oauth2.client.response.GitHubTokenResponse;
33 import org.apache.oltu.oauth2.client.response.OAuthResourceResponse;
34 import org.apache.oltu.oauth2.common.OAuth;
35 import org.apache.oltu.oauth2.common.OAuthProviderType;
36 import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
37 import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
38 import org.apache.oltu.oauth2.common.message.types.GrantType;
39 import org.iotivity.cloud.accountserver.db.TokenTable;
40 import org.iotivity.cloud.accountserver.db.UserTable;
41 import org.iotivity.cloud.base.exception.ServerException.InternalServerErrorException;
42 import org.iotivity.cloud.util.JSONUtil;
43
44 /**
45  *
46  * This class provides a sample to make .jar that communicates with OAuth2
47  * provider.
48  *
49  */
50 public class Github implements OAuthProvider {
51
52     private final static Logger Log          = LoggerFactory.getLogger(Github.class);
53     // do not use 'client_id' and 'secret' variables.
54     // should use values that are obtained from github.
55     final static private String client_id    = "ea9c18f540323b0213d0";
56     final static private String secret       = "4bc0cd9fe21269507eb8eba3a32664a0f598dbc9";
57     final static private String resource_url = "https://api.github.com/user";
58
59     @Override
60     public TokenTable requestAccessTokenInfo(String authCode, Object options) {
61
62         TokenTable tokenInfo = new TokenTable();
63
64         try {
65
66             OAuthClientRequest request = OAuthClientRequest
67                     .tokenProvider(OAuthProviderType.GITHUB)
68                     .setGrantType(GrantType.AUTHORIZATION_CODE)
69                     .setClientId(client_id).setClientSecret(secret)
70                     .setCode(authCode).buildBodyMessage();
71
72             OAuthClient oAuthClient = new OAuthClient(
73                     new URLConnectionClient());
74             GitHubTokenResponse oAuthResponse = oAuthClient.accessToken(request,
75                     GitHubTokenResponse.class);
76
77             tokenInfo.setAccesstoken(oAuthResponse.getAccessToken());
78             tokenInfo.setRefreshtoken(oAuthResponse.getRefreshToken());
79
80             // in Github, tokens don't have to expire.
81             tokenInfo.setExpiredtime(-1);
82
83         } catch (OAuthSystemException | OAuthProblemException e) {
84             e.printStackTrace();
85             throw new InternalServerErrorException(
86                     "OAuth provider(Github) error");
87         }
88
89         return tokenInfo;
90     }
91
92     @Override
93     public TokenTable requestRefreshTokenInfo(String refreshToken) {
94
95         TokenTable tokenInfo = new TokenTable();
96
97         return tokenInfo;
98     }
99
100     @Override
101     public UserTable requestGetUserInfo(String accessToken, Object options) {
102
103         String response = null;
104         UserTable userInfo = new UserTable();
105
106         if (accessToken == null) {
107             Log.warn("accessToken is null!");
108             return null;
109         }
110
111         try {
112
113             OAuthClientRequest request = new OAuthBearerClientRequest(
114                     resource_url).setAccessToken(accessToken)
115                             .buildQueryMessage();
116
117             OAuthClient oAuthClient = new OAuthClient(
118                     new URLConnectionClient());
119             OAuthResourceResponse resourceResponse = oAuthClient.resource(
120                     request, OAuth.HttpMethod.GET, OAuthResourceResponse.class);
121
122             response = resourceResponse.getBody();
123             Log.debug("response: " + response);
124
125         } catch (OAuthSystemException | OAuthProblemException e) {
126             e.printStackTrace();
127             throw new InternalServerErrorException(
128                     "OAuth provider(Github) error");
129         }
130
131         String userIdKey = "login";
132         JSONUtil<HashMap<String, String>> util = new JSONUtil<>();
133         HashMap<String, String> parsedData = util.parseJSON(response,
134                 HashMap.class);
135
136         if (parsedData == null) {
137             Log.debug("parsedData is null!");
138             return null;
139         }
140
141         String userId = parsedData.get(userIdKey);
142         userInfo.setUserid(userId);
143
144         return userInfo;
145     }
146 }