leeheejo 6 gadi atpakaļ
revīzija
d795951140

+ 13 - 0
src/main/java/com/icontrols/kakao/KakaoInterfaceApplication.java

@@ -0,0 +1,13 @@
+package com.icontrols.kakao;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class KakaoInterfaceApplication {
+
+	public static void main(String[] args) {
+		SpringApplication.run(KakaoInterfaceApplication.class, args);
+	}
+
+}

+ 121 - 0
src/main/java/com/icontrols/kakao/controller/MainController.java

@@ -0,0 +1,121 @@
+package com.icontrols.kakao.controller;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.client.RestTemplate;
+import org.springframework.web.server.ResponseStatusException;
+
+@Controller
+public class MainController {
+
+	public String COMPLEX_SERVER = "http://61.33.215.54:8002/kakao/danzi"; // 의현씨 컴퓨터
+
+	private static final Logger logger = LoggerFactory.getLogger(MainController.class);
+
+	@RequestMapping(value = "/kakao", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
+	public @ResponseBody String From3rdServer(@RequestHeader HttpHeaders headers, HttpEntity<String> httpEntity,
+			HttpServletResponse response) {
+		logger.info("/iotservice");
+		String answer = "";
+		String body = httpEntity.getBody();
+		logger.info("Body: " + body);
+		JSONObject obj = new JSONObject(body);
+		String token = obj.get("authorization").toString();
+//		JWTUtils jwt = new JWTUtils();
+//		String complexIp = jwt.getCmpIpFromToken(token);
+//		logger.info(complexIp);
+
+		HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
+		factory.setConnectTimeout(3000);
+		RestTemplate template = new RestTemplate(factory);
+
+		response.setHeader("Content-Type", "application/json");
+//		response.setHeader("Authorization", headers.get("Authorization").get(0));
+		HttpEntity<String> entity = new HttpEntity<String>(body, headers);
+		answer = template.postForObject(COMPLEX_SERVER, entity, String.class);
+
+		return answer;
+	}
+
+	@RequestMapping(value = "/events", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
+	public @ResponseBody String FromValleyServerEvent(@RequestHeader HttpHeaders headers, HttpEntity<String> httpEntity,
+			HttpServletResponse response) {
+
+		logger.info("/iotservice");
+		String KAKAO_SERVER_EVENT = "https://kakaohome-api.i.kakao.com/events";
+		String answer = "";
+		String body = httpEntity.getBody();
+		logger.info("Body: " + body);
+		JSONObject obj = new JSONObject(body);
+		String token = obj.get("authorization").toString();
+//		JWTUtils jwt = new JWTUtils();
+//		String complexIp = jwt.getCmpIpFromToken(token);
+//		logger.info(complexIp);
+		HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
+		factory.setConnectTimeout(3000);
+		RestTemplate template = new RestTemplate(factory);
+		response.setHeader("Content-Type", "application/json");
+		if (headers.get("Authorization").get(0) == null)
+			throw new ResponseStatusException(HttpStatus.UNAUTHORIZED);
+		response.setHeader("Authorization", headers.get("Authorization").get(0));
+		HttpEntity<String> entity = new HttpEntity<String>(body, headers);
+		answer = template.postForObject(KAKAO_SERVER_EVENT, entity, String.class);
+
+		return answer;
+	}
+
+	@RequestMapping(value = "/events/token", method = RequestMethod.POST)
+	public @ResponseBody String FromValleyServerToken(@RequestHeader HttpHeaders headers,
+			@RequestParam(value = "refresh_token", required = true) String refresh_token,
+			@RequestParam(value = "grant_type", required = true) String grant_type, HttpEntity<String> httpEntity,
+			HttpServletResponse response) {
+		logger.info(refresh_token);
+		String KAKAO_SERVER_EVENT = "https://kakaohome-api.i.kakao.com/events/token";
+		String answer = "";
+
+		MultiValueMap<String, String> multiValueMap = new LinkedMultiValueMap<>();
+		multiValueMap.add("refresh_token", refresh_token);
+		multiValueMap.add("grant_type", grant_type);
+
+//		HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
+//		factory.setConnectTimeout(3000);
+
+		RestTemplate template = new RestTemplate();
+
+		HttpHeaders header = new HttpHeaders();
+		header.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+		header.add("Authorization", headers.get("Authorization").get(0));
+
+		HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(multiValueMap, header);
+		answer = template.postForObject(KAKAO_SERVER_EVENT, entity, String.class);
+
+		return answer;
+	}
+
+	@RequestMapping(value = "/test", method = RequestMethod.POST, consumes = "application/json", produces = "application/json")
+	public @ResponseBody String Complex(HttpEntity<String> httpEntity) {
+		logger.info("/test");
+		String answer = "";
+		String body = httpEntity.getBody();
+		logger.info("Body: " + body);
+
+		return body;
+	}
+
+}

+ 86 - 0
src/main/java/com/icontrols/kakao/utils/JWTUtils.java

@@ -0,0 +1,86 @@
+package com.icontrols.kakao.utils;
+
+import java.io.UnsupportedEncodingException;
+import java.security.GeneralSecurityException;
+import java.util.Base64;
+import java.util.Date;
+import java.util.Base64.Decoder;
+
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class JWTUtils {
+	private static final Logger logger = LoggerFactory.getLogger(JWTUtils.class);
+
+	public JWTUtils() {
+		super();
+	}
+
+	public String getCmpIpFromToken(String token) {
+
+		Decoder decoder = Base64.getDecoder();
+		String enPayload = token.split("\\.")[1];
+		String dePayload = new String(decoder.decode(enPayload));
+		logger.info("P= " + enPayload);
+		JSONObject obj = new JSONObject(dePayload);
+
+		String cmpIp = obj.get("cmpIp").toString();
+		Decoder dcoder = Base64.getDecoder();
+		cmpIp = new String(decoder.decode(cmpIp));
+
+		return cmpIp;
+	}
+
+//	public boolean validateToken(String token, String type) throws UnsupportedEncodingException {
+//
+//		String secretKey = "";
+//		if (type.equals("accessToken")) {
+//			secretKey = CONSTANTS.ACCESS_TOEKN_SECRET_KEY;
+//		} else if (type.equals("refreshToken")) {
+//			secretKey = CONSTANTS.REFRESH_TOKEN_SECRET_KEY;
+//		}
+//		logger.info(token);
+//		Decoder decoder = Base64.getDecoder();
+//		// 시그니처가 맞는지 확인
+//		String enHeader = token.split("\\.")[0];
+//		logger.info("H= " + enHeader);
+//		String enPayload = token.split("\\.")[1];
+//		String dePayload = new String(decoder.decode(enPayload));
+//		logger.info("P= " + enPayload);
+//		String signiture = token.split("\\.")[2];
+//		logger.info("S= " + signiture);
+//		JSONObject obj = new JSONObject(dePayload);
+//
+//		String jwt = Jwts.builder().setExpiration(new Date(3600000)) // 1시간 -> 설정정보로 변경해야함
+//				.claim("cmpIp", obj.get("cmpIp")).claim("homeId", obj.get("homeId")).claim("iat", obj.get("iat"))
+//				.signWith(SignatureAlgorithm.HS256, secretKey.getBytes("UTF-8")).compact();
+//		logger.info("new = " + jwt);
+//		if (token.equals(jwt)) {
+//			long iat = Long.parseLong(obj.get("iat").toString());
+//			long currentTime = System.currentTimeMillis() / 1000;
+//			if (currentTime > iat + Long.parseLong(obj.get("exp").toString())) {
+//				return false;
+//			}
+//			return true;
+//		}
+//		return false;
+//
+//	}
+//
+//	public String getHomeIdFromToken(String token)
+//			throws UnsupportedEncodingException, NoSuchAlgorithmException, GeneralSecurityException {
+//
+//		Decoder decoder = Base64.getDecoder();
+//		String enPayload = token.split("\\.")[1];
+//		String dePayload = new String(decoder.decode(enPayload));
+//		JSONObject obj = new JSONObject(dePayload);
+//
+//		String encodedHomeId = obj.get("homeId").toString();
+//		AES256Util aes = new AES256Util();
+//		String homeId = aes.decrypt(encodedHomeId);
+//
+//		return homeId;
+//	}
+
+}

+ 5 - 0
src/main/resources/application.properties

@@ -0,0 +1,5 @@
+server.port=8004
+server.ssl.key-store=classpath:tomcat.jks
+server.ssl.key-store-password=hdci12#$
+
+logging.config=classpath:logback-spring.xml

+ 28 - 0
src/main/resources/logback-spring.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <include resource="org/springframework/boot/logging/logback/base.xml"/>
+
+    <appender name="dailyRollingFileAppender"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <append>true</append>
+        <prudent>true</prudent>
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>log/LogFile_%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>30</maxHistory>
+        </rollingPolicy>
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>DEBUG</level>
+        </filter>
+
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="com.icontrols.uplus.interfaces" level="DEBUG"></logger>
+
+    <root level="INFO">
+        <appender-ref ref="dailyRollingFileAppender" />
+    </root>
+</configuration>

BIN
src/main/resources/tomcat.jks


+ 16 - 0
src/test/java/com/icontrols/kakao/KakaoInterfaceApplicationTests.java

@@ -0,0 +1,16 @@
+package com.icontrols.kakao;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class KakaoInterfaceApplicationTests {
+
+	@Test
+	public void contextLoads() {
+	}
+
+}