2 *******************************************************************
4 * Copyright 2016 Samsung Electronics All Rights Reserved.
6 *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
20 *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
22 package org.iotivity.cloud.accountserver.resources;
24 import java.util.HashMap;
25 import java.util.List;
27 import org.iotivity.cloud.accountserver.AccountServerManager;
28 import org.iotivity.cloud.accountserver.Const;
29 import org.iotivity.cloud.accountserver.util.CoapMessageBuilder;
30 import org.iotivity.cloud.accountserver.util.JSONUtil;
31 import org.iotivity.cloud.base.Resource;
32 import org.iotivity.cloud.base.protocols.coap.CoapRequest;
33 import org.iotivity.cloud.base.protocols.coap.CoapResponse;
34 import org.iotivity.cloud.base.protocols.coap.enums.CoapMethod;
35 import org.iotivity.cloud.base.protocols.coap.enums.CoapStatus;
36 import org.iotivity.cloud.util.Logger;
38 import io.netty.channel.ChannelHandlerContext;
42 * This class provides a set of APIs to register account information of
46 public class AuthResource extends Resource {
48 public AuthResource() {
49 setUri(Const.AUTH_URI);
53 public void onRequestReceived(ChannelHandlerContext ctx, CoapRequest request) {
55 Logger.d("AuthResource IN");
57 if (ctx == null || request == null) {
58 Logger.d("ctx or request msg is null");
62 CoapMethod method = request.getRequestMethod();
67 handlePostRequest(ctx, request);
68 } catch (Exception e) {
74 Logger.w("method(" + method + ") is not supported");
81 * API for handling POST message
84 * ChannelHandlerContext of request message
86 * CoAP request message
89 private void handlePostRequest(ChannelHandlerContext ctx,
90 CoapRequest request) throws Exception {
92 String reqType = extractQuery(request, Const.REQ_TYPE);
95 throw new IllegalArgumentException("request type is null in query!");
97 CoapResponse response = null;
100 case Const.TYPE_REGISTER:
101 response = handleRegisterRequest(request);
103 case Const.TYPE_LOGIN:
104 response = handleLoginRequest(request);
107 throw new IllegalArgumentException(
108 "request type is not supported");
114 private CoapResponse handleLoginRequest(CoapRequest request) {
116 String payload = request.getPayloadString();
118 JSONUtil util = new JSONUtil();
119 String sessionCode = util
120 .parseJSON(payload, Const.REQUEST_SESSION_CODE);
122 Logger.d("sessionCode: " + sessionCode);
124 AccountServerManager oauthServerManager = new AccountServerManager();
125 String userId = oauthServerManager.requestUserId(sessionCode);
126 Logger.d("userId: " + userId);
128 CoapMessageBuilder responseMessage = new CoapMessageBuilder();
129 CoapResponse coapResponse = null;
131 if (userId != null) {
133 ResponseObject response = new ResponseObject();
134 response.setUserId(userId);
136 String responseJson = convertLoginResponseToJson(response);
137 Logger.d("responseJson: " + responseJson);
139 coapResponse = responseMessage.buildCoapResponse(
140 request.getToken(), responseJson, CoapStatus.CREATED);
144 coapResponse = responseMessage.buildCoapResponse(
145 request.getToken(), CoapStatus.INTERNAL_SERVER_ERROR);
152 private CoapResponse handleRegisterRequest(CoapRequest request) {
154 String payload = request.getPayloadString();
156 JSONUtil util = new JSONUtil();
157 String authCode = util.parseJSON(payload, Const.REQUEST_AUTH_CODE);
158 String authServer = util.parseJSON(payload, Const.REQUEST_AUTH_SERVER);
160 Logger.d("authCode: " + authCode + ", authServer: " + authServer);
162 AccountServerManager oauthServerManager = new AccountServerManager();
164 String userId = oauthServerManager.requestUserId(authCode, authServer);
165 String sessionCode = oauthServerManager.registerUserAccount(userId);
167 Logger.d("userId: " + userId + ", sessionCode: " + sessionCode);
169 CoapMessageBuilder responseMessage = new CoapMessageBuilder();
170 CoapResponse coapResponse = null;
172 if (userId != null && sessionCode != null) {
174 ResponseObject response = new ResponseObject();
175 response.setSessionCode(sessionCode);
176 response.setUserId(userId);
178 String responseJson = convertRegisterResponseToJson(response);
179 Logger.d("responseJson: " + responseJson);
181 coapResponse = responseMessage.buildCoapResponse(
182 request.getToken(), responseJson, CoapStatus.CREATED);
186 coapResponse = responseMessage.buildCoapResponse(
187 request.getToken(), CoapStatus.UNAUTHORIZED);
194 private String convertRegisterResponseToJson(ResponseObject response) {
196 HashMap<Object, Object> responseMap = new HashMap<Object, Object>();
198 String sessionCode = response.getSessionCode();
199 String userId = response.getUserId();
202 responseMap.put(Const.RESPONSE_USER_ID, userId);
204 if (sessionCode != null)
205 responseMap.put(Const.RESPONSE_SESSION_CODE, sessionCode);
207 JSONUtil jsonUtil = new JSONUtil();
208 String responseJson = jsonUtil.writeJSON(responseMap);
213 private String convertLoginResponseToJson(ResponseObject response) {
215 HashMap<Object, Object> responseMap = new HashMap<Object, Object>();
217 String userId = response.getUserId();
220 responseMap.put(Const.RESPONSE_USER_ID, userId);
222 JSONUtil jsonUtil = new JSONUtil();
223 String responseJson = jsonUtil.writeJSON(responseMap);
228 private String extractQuery(CoapRequest request, String key) {
232 List<String> Segments = request.getUriQuerySegments();
234 for (String s : Segments) {
236 String pair[] = s.split("=");
238 if (pair[0].equals(key)) {
248 * private static String getPayloadString(byte[] payload) {
250 * if (payload == null) return "";
252 * return new String(payload, Charset.forName("UTF-8")); }