forked from AcaMate/AcaMate_API
137 lines
4.6 KiB
C#
137 lines
4.6 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
using System.Text.Json;
|
|
using AcaMate.Common.Data;
|
|
using AcaMate.Common.Models;
|
|
using AcaMate.Common.Token;
|
|
using AcaMate.V1.Models;
|
|
using AcaMate.V1.Services;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.IdentityModel.Tokens;
|
|
using Version = AcaMate.V1.Models.Version;
|
|
|
|
namespace AcaMate.V1.Controllers;
|
|
|
|
[ApiController]
|
|
[Route("/api/v1/in/app")]
|
|
[ApiExplorerSettings(GroupName = "공통")]
|
|
public class AppController : ControllerBase
|
|
{
|
|
private readonly AppDbContext _dbContext;
|
|
private readonly ILogger<AppController> _logger;
|
|
private readonly IRepositoryService _repositoryService;
|
|
private readonly JwtTokenService _jwtTokenService;
|
|
|
|
public AppController(AppDbContext dbContext, ILogger<AppController> logger, IRepositoryService repositoryService, JwtTokenService jwtTokenService)
|
|
{
|
|
_dbContext = dbContext;
|
|
_logger = logger;
|
|
_repositoryService = repositoryService;
|
|
_jwtTokenService = jwtTokenService;
|
|
}
|
|
|
|
[HttpGet("version")]
|
|
[CustomOperation("앱 버전 확인","앱 버전을 확인해서 업데이트 여부 판단", "시스템")]
|
|
public IActionResult GetVersionData(string type)
|
|
{
|
|
if (string.IsNullOrEmpty(type))
|
|
{
|
|
return BadRequest(APIResponse.InvalidInputError);
|
|
}
|
|
|
|
try
|
|
{
|
|
var version = _dbContext.Version.FirstOrDefault(v => v.os_type == (type == "I" ? "VO01" : "VO02"));
|
|
|
|
if (version == null)
|
|
{
|
|
return NotFound(APIResponse.NotFoundError);
|
|
}
|
|
|
|
var response = new APIResponseStatus<Version>
|
|
{
|
|
status = new Status()
|
|
{
|
|
code = "000",
|
|
message = "정상"
|
|
},
|
|
data = new Version()
|
|
{
|
|
os_type = (version.os_type == "VO01" ? "I" : (version.os_type == "VO02" ? "A" : "W")),
|
|
final_ver = version.final_ver,
|
|
force_ver = version.force_ver,
|
|
dev_ver = version.dev_ver,
|
|
choice_update_yn = version.choice_update_yn
|
|
}
|
|
};
|
|
|
|
string jsonString = JsonSerializer.Serialize(response);
|
|
|
|
// return Ok(jsonString);
|
|
return Ok(response.JsonToString());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"{ex.Message}\n{ex.StackTrace}");
|
|
return StatusCode(500, APIResponse.UnknownError);
|
|
}
|
|
}
|
|
|
|
|
|
[HttpGet("auth")]
|
|
[CustomOperation("서버 접근 권한 확인", "서버 기능을 사용하기 위한 접근에 대해 권한 확인", "시스템")]
|
|
public async Task<IActionResult> AuthProgram([FromBody] AuthKey keys)
|
|
{
|
|
string summary = String.Empty;
|
|
|
|
try
|
|
{
|
|
summary = _repositoryService.ReadSummary(typeof(AppController), "AuthProgram");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError($"[{summary}] : {ex.Message}");
|
|
return StatusCode(500, APIResponse.UnknownError(ex.Message));
|
|
}
|
|
|
|
return Ok(APIResponse.Send("000", "OK", Empty));
|
|
}
|
|
|
|
|
|
[HttpGet("retryAccess")]
|
|
[CustomOperation("엑세스 토큰 재발급", "액세스 토큰 재발급 동작 수행", "시스템")]
|
|
public async Task<IActionResult> RetryAccessToken(string refresh)
|
|
{
|
|
string summary = String.Empty;
|
|
|
|
try
|
|
{
|
|
summary = _repositoryService.ReadSummary(typeof(AppController), "AuthProgram");
|
|
var refreshToken = await _dbContext.RefreshTokens
|
|
.FirstOrDefaultAsync(t => t.refresh_token == refresh);
|
|
if (refreshToken == null) throw new TokenException($"[{summary}] : 리프레시 토큰의 문제");
|
|
if (refreshToken.revoke_Date < DateTime.Now) throw new TokenException($"[{summary}] : 리프레시 토큰 만료");
|
|
if (refreshToken.expire_date < DateTime.Now) throw new TokenException($"[{summary}] : 리프레시 토큰 폐기");
|
|
string access = _jwtTokenService.GenerateJwtToken(refreshToken.uid);
|
|
return Ok(APIResponse.Send("000", $"[{summary}], 토큰 생성 완료",
|
|
new {
|
|
access = access
|
|
}));
|
|
}
|
|
catch (TokenException ex)
|
|
{
|
|
_logger.LogError($"[{summary}] : {ex.Message}");
|
|
return Ok(APIResponse.InvalidInputError(ex.Message));
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError($"[{summary}] : {ex.Message}");
|
|
return StatusCode(500, APIResponse.UnknownError(ex.Message));
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|