package com.winplan365.othink.rest.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.winplan365.othink.rest.dto.CryptoDto;
import com.winplan365.othink.rest.model.response.Response;
import com.winplan365.othink.rest.tool.RSAUtil;
import io.swagger.annotations.*;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
@Api(value = "RSA", description = "RSA加密和解密")
@RequestMapping("/rsa")
@RestController
public class RSAController {
// @ApiIgnore
@ApiOperation(value = "Decode")
@ApiImplicitParams({
@ApiImplicitParam(name = "str", dataType = "String", required = true, value = "CrytoDto"),
@ApiImplicitParam(paramType = "query", name = "apptoken", dataType = "String", required = true, value = "token令牌"),
@ApiImplicitParam(paramType = "query", name = "appkey", dataType = "String", required = true, value = "key")
})
@ApiResponses({
@ApiResponse(code = 200, message = "success"),
@ApiResponse(code = 400, message = "Token过期"),
@ApiResponse(code = 401, message = "请求权限不足"),
@ApiResponse(code = 402, message = "RSA解码错误"),
@ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对"),
@ApiResponse(code = 503, message = "目前无法使用服务器")
})
@RequestMapping(value = "/decode", method = RequestMethod.POST)
public Response decode(@RequestBody String json, @RequestParam String apptoken, @RequestParam String appkey) {
Response response = new Response();
try {
response.setResult("401");
ObjectMapper objectMapper = new ObjectMapper();
CryptoDto cryptoDto = objectMapper.readValue(RSAUtil.decrypt(json), CryptoDto.class);
Long expires = cryptoDto.getExpires();
if (expires < System.currentTimeMillis()) {
response.setResult("400");
return response;
}
response.setDesc(cryptoDto.getData());
response.setResult("200");
} catch (IOException e) {
e.printStackTrace();
response.setResult("401");
} catch (Exception e) {
e.printStackTrace();
response.setResult("402");
}
return response;
}
@ApiOperation(value = "Encode")
@ApiImplicitParams({
@ApiImplicitParam(name = "str", dataType = "String", required = true, value = "str"),
@ApiImplicitParam(paramType = "query", name = "apptoken", dataType = "String", required = true, value = "token令牌"),
@ApiImplicitParam(paramType = "query", name = "appkey", dataType = "String", required = true, value = "key")
})
@ApiResponses({
@ApiResponse(code = 200, message = "success"),
@ApiResponse(code = 400, message = "Token过期"),
@ApiResponse(code = 401, message = "请求权限不足"),
@ApiResponse(code = 402, message = "RSA解码错误"),
@ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对"),
@ApiResponse(code = 503, message = "目前无法使用服务器")
})
@RequestMapping(value = "/encode", method = RequestMethod.POST)
public Response encode(@RequestBody String str, @RequestParam String apptoken, @RequestParam String appkey) {
Response response = new Response();
try {
response.setResult("401");
CryptoDto cryptoDto = new CryptoDto(str, System.currentTimeMillis() + 30000L);
ObjectMapper objectMapper = new ObjectMapper();
response.setDesc(RSAUtil.encrypt(objectMapper.writeValueAsString(cryptoDto)));
response.setResult("200");
} catch (IOException e) {
e.printStackTrace();
response.setResult("401");
} catch (Exception e) {
e.printStackTrace();
response.setResult("402");
}
return response;
}
}