|
@@ -37,7 +37,6 @@ import org.w3c.dom.Document;
|
|
|
import org.w3c.dom.Node;
|
|
|
import org.w3c.dom.NodeList;
|
|
|
|
|
|
-import com.icontrols.kakao.common.ERROR_INFO;
|
|
|
import com.icontrols.kakao.common.KAKAO_RESULT;
|
|
|
import com.icontrols.kakao.common.KEY_INFO;
|
|
|
import com.icontrols.kakao.common.SERVERINFO;
|
|
@@ -78,16 +77,21 @@ public class KakaoEventHandler {
|
|
|
|
|
|
int result = CommonUtil.compareStringTypeTime(currentTime, tokenExpiresTime);
|
|
|
|
|
|
- boolean connFlag = true;
|
|
|
+// boolean connFlag = true;
|
|
|
// 현재 시간이 토큰 만료시간보다 크다면 토큰이 만료 됐다는 뜻.
|
|
|
// 카카오 이벤트 서버에서 토큰을 갱신 받은 뒤 이벤트를 전송해야 한다.
|
|
|
- if(result < 1)
|
|
|
- connFlag = sendKakaoTokenRefresh(donghoInfo);
|
|
|
+ if(result < 1) {
|
|
|
+ donghoInfo = sendKakaoTokenRefresh(donghoInfo);
|
|
|
+
|
|
|
+ if(donghoInfo == null) {
|
|
|
+ retMap.put("result", KAKAO_RESULT.FAIL_INTERNAL);
|
|
|
+ retMap.put("message", "ID-["+donghoInfo.getId() + "]-Fail to Token Refresh");
|
|
|
+ return CompletableFuture.completedFuture(retMap);
|
|
|
+ }
|
|
|
|
|
|
- if(!connFlag) {
|
|
|
- retMap.put("result", KAKAO_RESULT.FAIL_INTERNAL);
|
|
|
- retMap.put("message", "ID-["+donghoInfo.getId() + "]-Fail to Token Refresh");
|
|
|
- return CompletableFuture.completedFuture(retMap);
|
|
|
+ logger.info("prev donghoInfo : " + donghoInfo.toString());
|
|
|
+
|
|
|
+ params.put(KEY_INFO.HTTP_KEY_AUTHORIZATION, donghoInfo.getKakaoAccessToken());
|
|
|
}
|
|
|
|
|
|
logger.info("["+donghoInfo.getKakaoAccessToken()+"] - 유효한 토큰");
|
|
@@ -112,25 +116,28 @@ public class KakaoEventHandler {
|
|
|
case KAKAO_RESULT.FAIL_EXPIREDTOKEN: // 만료된 토큰, 토큰 재발급 뒤 재시도.
|
|
|
// 재시도 할때는 따로 결과를 받지 않을려고.. 성공할때까지 계속 시도하는것도 비효율적.
|
|
|
logger.info("["+donghoInfo.getKakaoAccessToken()+"]-인증토큰 만료 토큰 갱신 요청");
|
|
|
- connFlag = sendKakaoTokenRefresh(donghoInfo);
|
|
|
+ DonghoInfo tmpDonghoInfo = sendKakaoTokenRefresh(donghoInfo);
|
|
|
|
|
|
- if(!connFlag) {
|
|
|
+ if(tmpDonghoInfo == null) {
|
|
|
retMap.put("result", KAKAO_RESULT.FAIL_INTERNAL);
|
|
|
- retMap.put("message", "ID-["+donghoInfo.getId() + "]-Fail to Token Refresh Retry");
|
|
|
+ retMap.put("message", "ID-["+tmpDonghoInfo.getId() + "]-Fail to Token Refresh Retry");
|
|
|
return CompletableFuture.completedFuture(retMap);
|
|
|
}
|
|
|
|
|
|
- logger.info("["+donghoInfo.getKakaoAccessToken()+"]-이벤트 재전송 시도");
|
|
|
- sendResult = sendStatusResult(donghoInfo, params);
|
|
|
+ logger.info("["+tmpDonghoInfo.getKakaoAccessToken()+"]-이벤트 재전송 시도");
|
|
|
+
|
|
|
+ params.put(KEY_INFO.HTTP_KEY_AUTHORIZATION, tmpDonghoInfo.getKakaoAccessToken());
|
|
|
+
|
|
|
+ sendResult = sendStatusResult(tmpDonghoInfo, params);
|
|
|
|
|
|
code = (int) sendResult.get("result");
|
|
|
|
|
|
retMap.put("result", code);
|
|
|
|
|
|
if(code != KAKAO_RESULT.SUCCESS) {
|
|
|
- retMap.put("message", "ID-["+donghoInfo.getId() + "]-이벤트 재전송 실패 - [" + sendResult.get("message") + "]");
|
|
|
+ retMap.put("message", "ID-["+tmpDonghoInfo.getId() + "]-이벤트 재전송 실패 - [" + sendResult.get("message") + "]");
|
|
|
}else {
|
|
|
- retMap.put("message", "ID-["+donghoInfo.getId() + "]-이벤트 재전송 성공");
|
|
|
+ retMap.put("message", "ID-["+tmpDonghoInfo.getId() + "]-이벤트 재전송 성공");
|
|
|
}
|
|
|
|
|
|
break;
|
|
@@ -145,6 +152,8 @@ public class KakaoEventHandler {
|
|
|
retMap.put("result", KAKAO_RESULT.FAIL_INTERNAL);
|
|
|
|
|
|
retMap.put("message", "ID-["+donghoInfo.getId() + "]-" + e.getMessage());
|
|
|
+ logger.error("ERROR" + e.getStackTrace());
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
return CompletableFuture.completedFuture(retMap);
|
|
@@ -188,7 +197,7 @@ public class KakaoEventHandler {
|
|
|
// 제어기기 별로 상태 이벤트 구분하여 처리하도록 해야 한다
|
|
|
HttpEntity<Object> entity = new HttpEntity<Object>(params, headers);
|
|
|
|
|
|
- String url = SERVERINFO.isDev?SERVERINFO.SendDevEventURL + ":" + SERVERINFO.SendDevEventPort + "/events":SERVERINFO.SendKakaoEventURL+":"+SERVERINFO.SendKakaoEventPort+ "/events";
|
|
|
+ String url = SERVERINFO.isDev?SERVERINFO.SendDevEventURL + ":" + SERVERINFO.SendDevEventPort + "/events":SERVERINFO.SendKakaoEventURL + ":" + SERVERINFO.SendKakaoEventPort + "/events";
|
|
|
|
|
|
logger.info("SendStatusResult URL : " + url);
|
|
|
logger.info("SendStatusResult header : " + headers.toString());
|
|
@@ -233,7 +242,7 @@ public class KakaoEventHandler {
|
|
|
* @param ho
|
|
|
* @param params
|
|
|
*/
|
|
|
- public boolean sendKakaoTokenRefresh(DonghoInfo donghoInfo){
|
|
|
+ public DonghoInfo sendKakaoTokenRefresh(DonghoInfo donghoInfo){
|
|
|
DonghoInfoRepository repo = (DonghoInfoRepository)BeanUtils.getBean("donghoInfoRepository");
|
|
|
|
|
|
String refreshToken = donghoInfo.getKakaoRefreshToken();
|
|
@@ -246,17 +255,19 @@ public class KakaoEventHandler {
|
|
|
headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
|
|
|
headers.add("Authorization", "Basic " + encoding);
|
|
|
|
|
|
- MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
|
|
|
+ MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
|
|
|
parameters.add("grant_type", "refresh_token");
|
|
|
parameters.add("refresh_token", refreshToken);
|
|
|
|
|
|
HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(parameters, headers);
|
|
|
|
|
|
- String url = SERVERINFO.isDev?SERVERINFO.SendDevEventURL + ":" + SERVERINFO.SendDevEventPort + "/events/token":SERVERINFO.SendKakaoEventURL+":"+SERVERINFO.SendKakaoEventPort+ "/events/token";
|
|
|
+ String url = SERVERINFO.isDev?SERVERINFO.SendDevEventURL + ":" + SERVERINFO.SendDevEventPort + "/events/token":SERVERINFO.SendKakaoEventURL + ":" + SERVERINFO.SendKakaoEventPort +"/events/token";
|
|
|
+// String url = "https://kakaohome-api.i.kakao.com/events/token";
|
|
|
|
|
|
logger.info("[TOKEN REFRESH REQUEST] URL : " + url);
|
|
|
logger.info("[TOKEN REFRESH REQUEST] header : " + headers.toString());
|
|
|
logger.info("[TOKEN REFRESH REQUEST] return value : " + entity.toString());
|
|
|
+ logger.info("[TOKEN parameter] --" +parameters.toString());
|
|
|
URI uri = URI.create(url);
|
|
|
|
|
|
CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
|
|
@@ -264,31 +275,42 @@ public class KakaoEventHandler {
|
|
|
|
|
|
requestFactory.setHttpClient(httpClient);
|
|
|
requestFactory.setConnectTimeout(3000);
|
|
|
-
|
|
|
- RestTemplate restTemplate = new RestTemplate(requestFactory);
|
|
|
-
|
|
|
- String answer = restTemplate.postForObject(url, entity, String.class);
|
|
|
- logger.debug("[TOKEN REFRESH REQUEST] = " + answer);
|
|
|
-
|
|
|
- Map<String, Object> retMap = CommonUtil.jsonToMap(answer);
|
|
|
-
|
|
|
- if(retMap.containsKey(KEY_INFO.HTTP_KEY_ACCESS_TOKEN) && retMap.containsKey(KEY_INFO.HTTP_KEY_REFRESH_TOKEN) && retMap.containsKey(KEY_INFO.HTTP_KEY_EXPIRES_IN)) {
|
|
|
- donghoInfo.setKakaoAccessToken((String)retMap.get(KEY_INFO.HTTP_KEY_ACCESS_TOKEN));
|
|
|
- donghoInfo.setKakaoRefreshToken((String)retMap.get(KEY_INFO.HTTP_KEY_REFRESH_TOKEN));
|
|
|
- donghoInfo.setKakaoExpiresTime(Integer.toString((int)retMap.get(KEY_INFO.HTTP_KEY_EXPIRES_IN)));
|
|
|
-
|
|
|
- donghoInfo.setKakaoTokenCreateTime(CommonUtil.getStrTypeCurTime());
|
|
|
- donghoInfo.setKakaoTokenExpireTime(CommonUtil.getStrTypeCurTimeAfterSec(Integer.parseInt(donghoInfo.getKakaoExpiresTime())));
|
|
|
+
|
|
|
+ String answer = "";
|
|
|
+ try {
|
|
|
+ RestTemplate restTemplate = new RestTemplate(requestFactory);
|
|
|
+ answer = restTemplate.postForObject(url, entity, String.class);
|
|
|
+ logger.info("[TOKEN REFRESH REQUEST] = " + answer);
|
|
|
|
|
|
- repo.save(donghoInfo);
|
|
|
+ Map<String, Object> retMap = CommonUtil.jsonToMap(answer);
|
|
|
|
|
|
- return true;
|
|
|
- }else {
|
|
|
- logger.error("****************************************************");
|
|
|
- logger.error("토클 리프레시 실패");
|
|
|
- logger.error("****************************************************");
|
|
|
+ if(retMap.containsKey(KEY_INFO.HTTP_KEY_ACCESS_TOKEN) && retMap.containsKey(KEY_INFO.HTTP_KEY_REFRESH_TOKEN) && retMap.containsKey(KEY_INFO.HTTP_KEY_EXPIRES_IN)) {
|
|
|
+ donghoInfo.setKakaoAccessToken((String)retMap.get(KEY_INFO.HTTP_KEY_ACCESS_TOKEN));
|
|
|
+ donghoInfo.setKakaoRefreshToken((String)retMap.get(KEY_INFO.HTTP_KEY_REFRESH_TOKEN));
|
|
|
+ donghoInfo.setKakaoExpiresTime(Integer.toString((int)retMap.get(KEY_INFO.HTTP_KEY_EXPIRES_IN)));
|
|
|
+
|
|
|
+ donghoInfo.setKakaoTokenCreateTime(CommonUtil.getStrTypeCurTime());
|
|
|
+ donghoInfo.setKakaoTokenExpireTime(CommonUtil.getStrTypeCurTimeAfterSec(Integer.parseInt(donghoInfo.getKakaoExpiresTime())));
|
|
|
+
|
|
|
+ repo.save(donghoInfo);
|
|
|
+
|
|
|
+ logger.info("****************************************************");
|
|
|
+ logger.info("토큰 리프레시 성공");
|
|
|
+ logger.info(donghoInfo.toString());
|
|
|
+ logger.info("****************************************************");
|
|
|
+ return donghoInfo;
|
|
|
+ }
|
|
|
+ }catch(Exception e) {
|
|
|
+ logger.error("[TOKEN REFRESH REQUEST ERROR] - " + e.getMessage());
|
|
|
|
|
|
- return false;
|
|
|
+ e.printStackTrace();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ logger.error("****************************************************");
|
|
|
+ logger.error("토클 리프레시 실패");
|
|
|
+ logger.error("****************************************************");
|
|
|
+
|
|
|
+ return null;
|
|
|
}
|
|
|
}
|