From e8a2f3d7eee78cf45bf13ade7d220b60407c6b50 Mon Sep 17 00:00:00 2001 From: Seonkyu_Kim Date: Thu, 27 Feb 2025 12:56:34 +0900 Subject: [PATCH] =?UTF-8?q?[=E2=99=BB=EF=B8=8F]=20User=20=ED=8C=8C?= =?UTF-8?q?=ED=8A=B8=EC=99=80=20Push=20=ED=8C=8C=ED=8A=B8=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81=20=EC=A7=84=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Program/Common/JWTToken/JwtTokenService.cs | 3 + Program/V1/Controllers/PushController.cs | 91 +++++++++++++--------- Program/V1/Controllers/UserController.cs | 51 ++++++++---- Program/V1/Services/RepositoryService.cs | 3 + 4 files changed, 94 insertions(+), 54 deletions(-) diff --git a/Program/Common/JWTToken/JwtTokenService.cs b/Program/Common/JWTToken/JwtTokenService.cs index 0121aab..0cfd7b5 100644 --- a/Program/Common/JWTToken/JwtTokenService.cs +++ b/Program/Common/JWTToken/JwtTokenService.cs @@ -76,6 +76,9 @@ public class JwtTokenService } + /// + /// 여기는 엑세스 토큰의 확인을 위한 jwt 서비스 내의 인증 메서드 + /// public ClaimsPrincipal ValidateToken(string token) { if (string.IsNullOrWhiteSpace(token)) return null; diff --git a/Program/V1/Controllers/PushController.cs b/Program/V1/Controllers/PushController.cs index 81b7a45..a6c7afe 100644 --- a/Program/V1/Controllers/PushController.cs +++ b/Program/V1/Controllers/PushController.cs @@ -25,6 +25,7 @@ public class PushController : ControllerBase public IActionResult GetPushData() { return Ok("SEND"); + } @@ -39,51 +40,67 @@ public class PushController : ControllerBase /// Internal server error occurred. /// Service unavailable. [HttpPost("send")] - [CustomOperation("푸시전송", "저장된 양식으로, 사용자에게 푸시를 전송한다.", "푸시")] + [CustomOperation("푸시전송", "저장된 양식으로, 사용자에게 푸시를 전송한다.(로컬 테스트 불가)", "푸시")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(APIResponseStatus))] public async Task SendPush(string deviceToken, [FromBody] Payload? payload) { - - if (string.IsNullOrWhiteSpace(deviceToken)) - { - var inputError = APIResponse.InvalidInputError; - // inputError.status.message = "Deviece Toekn 오류"; - return StatusCode(500,inputError); - } - - if (payload == null) + if (string.IsNullOrWhiteSpace(deviceToken) || payload == null) + return BadRequest(APIResponse.InvalidInputError()); + + // string uri = ""; + // string p12Path = ""; + // + // string p12PWPath = "/src/private/appleKeys.json"; + // + // // 앱 번들 ID 입력 부분 + // string apnsTopic = "me.myds.ipstein.acamate.AcaMate"; + + Func pushService = (isDevelopment,pw,topic) => { - var inputError = APIResponse.InvalidInputError; - // inputError.status.message = "payload 입력 오류"; - return StatusCode(500,inputError); - } - - string uri = ""; - string p12Path = ""; - string p12PWPath = "/src/private/appleKeys.json"; - // string p12PWPath = "private/appleKeys.json"; - string apnsTopic = "me.myds.ipstein.acamate.AcaMate"; - - - if (_env.IsDevelopment()) - { - uri = "https://api.sandbox.push.apple.com/"; - p12Path = "/src/private/AM_Push_Sandbox.p12"; - // p12Path = "private/AM_Push_Sandbox.p12"; - } - else - { - uri = "https://api.push.apple.com/"; - p12Path = "/src/private/AM_Push.p12"; - // p12Path = "private/AM_Push.p12"; - } - + if (isDevelopment) + { + return new ApnsPushService( + "https://api.sandbox.push.apple.com/", + "/src/private/AM_Push_Sandbox.p12", + pw, topic + ); + } + else + { + return new ApnsPushService( + "https://api.push.apple.com/", + "/src/private/AM_Push.p12", + pw, topic + ); + } + + }; + // + // if (_env.IsDevelopment()) + // { + // uri = "https://api.sandbox.push.apple.com/"; + // p12Path = "/src/private/AM_Push_Sandbox.p12"; + // } + // else + // { + // uri = "https://api.push.apple.com/"; + // p12Path = "/src/private/AM_Push.p12"; + // } + // // ApnsPushService 인스턴스 생성 - var pushService = new ApnsPushService(uri, p12Path, p12PWPath, apnsTopic); + // var pushService = new ApnsPushService(uri, p12Path, p12PWPath, apnsTopic); + // // 푸시 알림 전송 - var result = await pushService.SendPushNotificationAsync(deviceToken, payload); + // var result = await pushService.SendPushNotificationAsync(deviceToken, payload); + + var result = await pushService( + _env.IsDevelopment(), + "/src/private/appleKeys.json", + "me.myds.ipstein.acamate.AcaMate" + ).SendPushNotificationAsync(deviceToken, payload); + if (result.Success) { return Ok(APIResponse.Success()); diff --git a/Program/V1/Controllers/UserController.cs b/Program/V1/Controllers/UserController.cs index a02aa97..00b68a6 100644 --- a/Program/V1/Controllers/UserController.cs +++ b/Program/V1/Controllers/UserController.cs @@ -38,27 +38,43 @@ public class UserController : ControllerBase [HttpGet] [CustomOperation("회원 정보 조회", "회원 정보 조회", "사용자")] - public IActionResult GetUserData(string uid) + public async Task GetUserData(string token, string refresh) { - if (string.IsNullOrEmpty(uid)) return BadRequest(APIResponse.InvalidInputError()); + if(string.IsNullOrEmpty(token) || string.IsNullOrEmpty(refresh)) + return BadRequest(APIResponse.InvalidInputError()); + try { - var user = _dbContext.User - .Where(u => u.uid == uid) - .Select(u => new User - { - uid = u.uid, - name = u.name, - auto_login_yn = u.auto_login_yn, - birth = u.birth, - device_id = u.device_id, - login_date = u.login_date, - type = u.type - }) - .FirstOrDefault(); + var validateToken = await _repositoryService.ValidateToken(token, refresh); + + var user = await _dbContext.User + .Where(u => u.uid == validateToken.uid) + .Select(u => new User + { + uid = u.uid, + name = u.name, + auto_login_yn = u.auto_login_yn, + birth = u.birth, + device_id = u.device_id, + login_date = u.login_date, + type = u.type + }) + .FirstOrDefaultAsync(); + + // _logger.LogInformation($"CHECK!! {user.}"); - return Ok(APIResponse.Send("000","정상",user)); + return Ok(APIResponse.Send("000", "정상", user)); + } + catch (TokenException tokenEx) + { + _logger.LogInformation($"[로그인] : {tokenEx}"); + return Ok(APIResponse.Send("001", "로그인 진행: 토큰에 문제가 있음",Empty)); + } + catch (RefreshRevokeException refreshEx) + { + _logger.LogInformation($"[로그인] : {refreshEx}"); + return Ok(APIResponse.Send("001", "로그인 진행: 리프레시 토큰 폐기",Empty)); } catch (Exception ex) { @@ -271,8 +287,9 @@ public class UserController : ControllerBase { return StatusCode(500, APIResponse.UnknownError()); } - } + + // [HttpGet("set")] diff --git a/Program/V1/Services/RepositoryService.cs b/Program/V1/Services/RepositoryService.cs index 7fad4ab..7b608cb 100644 --- a/Program/V1/Services/RepositoryService.cs +++ b/Program/V1/Services/RepositoryService.cs @@ -84,6 +84,9 @@ public class RepositoryService: IRepositoryService } //토큰 태울때는 인코딩 된 걸로 태워야지 원본꺼 태우면 데이터에 손상옵니다. + /// + /// 실제로 엑세스 토큰과 리프레시 토큰으로 접근 하기 위한 메서드 + /// public async Task ValidateToken(string token, string refresh) { var principalToken = _jwtTokenService.ValidateToken(token);