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.beans.factory.annotation.Value; 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; @Value("${server.host}") private String serverHost; @Value("${report.port}") private String serverPort; @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 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 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://"+serverHost+":"+serverPort+"/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; } }