|
@@ -0,0 +1,70 @@
|
|
|
+package edu.nju.controller;
|
|
|
+
|
|
|
+import edu.nju.controller.data.UserInfo;
|
|
|
+import edu.nju.controller.interceptor.AuthRequired;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
+import org.springframework.http.ResponseEntity;
|
|
|
+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.RestController;
|
|
|
+import org.springframework.web.client.HttpClientErrorException;
|
|
|
+import org.springframework.web.client.RestTemplate;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import javax.servlet.http.HttpSession;
|
|
|
+import java.io.IOException;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author: Diors.Po
|
|
|
+ * @Email: 171256175@qq.com
|
|
|
+ * @date 2019-09-28 10:38
|
|
|
+ */
|
|
|
+@Slf4j
|
|
|
+@RestController
|
|
|
+public class OAuthController {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RestTemplate restTemplate;
|
|
|
+
|
|
|
+ @RequestMapping(value = "/auth", method = RequestMethod.GET)
|
|
|
+ public void auth(@RequestParam("task_id") Long taskId,
|
|
|
+ @RequestParam("case_id") Long caseId,
|
|
|
+ @RequestParam("code") String code, HttpSession session, HttpServletResponse response){
|
|
|
+ String authUrl = "http://api.mooctest.net/api/v1/oauth/ticket?code="+code;
|
|
|
+ String userUrl = "http://api.mooctest.net/api/v1/user?session_ticket=";
|
|
|
+ ResponseEntity<Map> ticketResponse = restTemplate.getForEntity(authUrl, Map.class);
|
|
|
+ if (ticketResponse.getStatusCode().is4xxClientError()){
|
|
|
+ log.info(ticketResponse.getBody().get("message").toString());
|
|
|
+ throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
|
|
|
+ }
|
|
|
+ String session_ticket = (String)ticketResponse.getBody().get("session_ticket");
|
|
|
+ ResponseEntity<UserInfo> userInfoResponse = restTemplate.getForEntity(userUrl + session_ticket, UserInfo.class);
|
|
|
+ if (userInfoResponse.getStatusCode().is4xxClientError()){
|
|
|
+ log.info(ticketResponse.getBody().get("message").toString());
|
|
|
+ throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
|
|
|
+ }
|
|
|
+ session.setAttribute("userInfo", userInfoResponse.getBody());
|
|
|
+ session.setAttribute("caseId", caseId);
|
|
|
+ session.setAttribute("taskId", taskId);
|
|
|
+ try {
|
|
|
+ response.sendRedirect("http://47.99.140.117:9001/report/detail/"+taskId+"/"+caseId+"/"+userInfoResponse.getBody().getId());
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @AuthRequired
|
|
|
+ @RequestMapping(value = "/auth/user", method = RequestMethod.GET)
|
|
|
+ public UserInfo getLoginUser(HttpSession session){
|
|
|
+ if (session.getAttribute("userInfo")==null)
|
|
|
+ throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
|
|
|
+ UserInfo userInfo = (UserInfo) session.getAttribute("userInfo");
|
|
|
+ return userInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|