Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
@Slf4j
public class AppleOauthClient {
public AppleSocialTokenResponse generateAndValidateToken(IdTokenRequest idTokenRequest) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("https://appleid.apple.com/auth/token");
List<NameValuePair> nvps = new ArrayList<>();
nvps.add(new BasicNameValuePair("client_id", idTokenRequest.getClient_id()));
Expand All @@ -43,28 +42,23 @@ public AppleSocialTokenResponse generateAndValidateToken(IdTokenRequest idTokenR
log.error("Apple Token Request Body 인코딩 실패 : {}", idTokenRequest);
throw new BaseException(AuthErrorCode.APPLE_LOGIN_ERROR);
}
CloseableHttpResponse response;
try {
response = httpClient.execute(httpPost);
} catch (IOException e) {
log.error("Apple Token 요청 실패 : {}", idTokenRequest);
throw new BaseException(AuthErrorCode.APPLE_LOGIN_ERROR);
}
ObjectMapper objectMapper = new ObjectMapper()
.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
AppleSocialTokenResponse responseBody;
try {
responseBody = objectMapper.readValue(EntityUtils.toString(response.getEntity(), "UTF-8"), AppleSocialTokenResponse.class);
try(CloseableHttpClient httpClient = HttpClients.createDefault()) {
try(CloseableHttpResponse response = httpClient.execute(httpPost)) {
return objectMapper.readValue(EntityUtils.toString(response.getEntity(), "UTF-8"), AppleSocialTokenResponse.class);
} catch (IOException e) {
log.error("Apple Token Payload 디코딩 실패 : {}", idTokenRequest);
throw new BaseException(AuthErrorCode.APPLE_LOGIN_ERROR);
}
} catch (IOException e) {
log.error("Apple Token Payload 디코딩 실패 : {}", idTokenRequest);
log.error("Apple Token 요청 실패 : {}", idTokenRequest);
throw new BaseException(AuthErrorCode.APPLE_LOGIN_ERROR);
}
return responseBody;
}

public void revokeToken(RevokeTokenRequest revokeTokenRequest) throws BaseException{
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost("https://appleid.apple.com/auth/revoke");
List<NameValuePair> nvps = new ArrayList<>();
nvps.add(new BasicNameValuePair("client_id", revokeTokenRequest.getClient_id()));
Expand All @@ -77,7 +71,7 @@ public void revokeToken(RevokeTokenRequest revokeTokenRequest) throws BaseExcept
log.error("Apple Revoke Token Request Body 인코딩 실패 : {}", revokeTokenRequest);
throw new BaseException(AuthErrorCode.APPLE_REVOKE_ERROR);
}
try {
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
httpClient.execute(httpPost);
} catch (IOException e) {
log.error("Apple Revoke Token 요청 실패 : {}", revokeTokenRequest);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,75 +80,63 @@ public void checkBalance() {
}

private <T> T aligoReqeust(String url, List<NameValuePair> nvps, Class<T> responseType) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = generateAligoHttpPost(httpClient, url, nvps);
CloseableHttpResponse response = executeAligoHttpClient(httpClient, httpPost);
AligoErrorHandle(httpClient, response);
T responseBody = mapValue(httpClient, response, responseType);
closeHttpClient(httpClient);
return responseBody;
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost httpPost = generateAligoHttpPost(url, nvps);
try (CloseableHttpResponse response = executeAligoHttpClient(httpClient, httpPost)) {
aligoErrorHandle(response);
T responseBody = mapValue(response, responseType);
return responseBody;
}
} catch (IOException e) {
log.error("[Aligo] HTTP 클라이언트 종료에 실패했습니다.");
throw new BaseException(SmsErrorCode.SMS_AGENCY_ERROR);
}
}

private HttpPost generateAligoHttpPost(CloseableHttpClient httpClient, String url, List<NameValuePair> nvps) {
private HttpPost generateAligoHttpPost(String url, List<NameValuePair> nvps) {
HttpPost httpPost = new HttpPost(url);
nvps.add(new BasicNameValuePair("key", apiKey));
nvps.add(new BasicNameValuePair("user_id", userId));
try {
httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
} catch (UnsupportedEncodingException e) {
log.error("[Aligo] 문자 전송 메시지 인코딩에 실패했습니다.");
closeHttpClient(httpClient);
throw new BaseException(SmsErrorCode.SMS_AGENCY_ERROR);
}
return httpPost;
}

private CloseableHttpResponse executeAligoHttpClient(CloseableHttpClient httpClient, HttpPost httpPost) {
CloseableHttpResponse response;
try {
response = httpClient.execute(httpPost);
return httpClient.execute(httpPost);
} catch (IOException e) {
log.error("[Aligo] 메세지 서버와 연결에 실패했습니다.");
closeHttpClient(httpClient);
throw new BaseException(SmsErrorCode.SMS_AGENCY_ERROR);
}
return response;
}

private void AligoErrorHandle(CloseableHttpClient httpClient, CloseableHttpResponse response) {
private void aligoErrorHandle(CloseableHttpResponse response) {
if (response.getStatusLine().getStatusCode() > 0) return;

AligoErrorResponse errorBody = mapValue(httpClient, response, AligoErrorResponse.class);
AligoErrorResponse errorBody = mapValue(response, AligoErrorResponse.class);
switch (response.getStatusLine().getStatusCode()) {
case (-101) -> log.error("[Aligo] 인증오류입니다.");
case (-304) -> log.error("[Aligo] 발송 5분전까지만 취소가 가능합니다.");
default ->
log.error(String.format("[Aligo] 알 수 없는 에러가 발생했습니다. (%s, %s)", errorBody.getResult_code(), errorBody.getMessage()));
}
closeHttpClient(httpClient);
throw new BaseException(SmsErrorCode.SMS_AGENCY_ERROR);
}

private <T> T mapValue(CloseableHttpClient httpClient, CloseableHttpResponse response, Class<T> bodyType) {
private <T> T mapValue(CloseableHttpResponse response, Class<T> bodyType) {
ObjectMapper objectMapper = new ObjectMapper()
.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
T responseBody;
try {
responseBody = objectMapper.readValue(EntityUtils.toString(response.getEntity(), "UTF-8"), bodyType);
return objectMapper.readValue(EntityUtils.toString(response.getEntity(), "UTF-8"), bodyType);
} catch (IOException e) {
log.error(String.format("[Aligo] 문자 전송 응답 메시지(%s dto) 파싱에 실패했습니다.", bodyType.getName()));
closeHttpClient(httpClient);
throw new BaseException(SmsErrorCode.SMS_AGENCY_ERROR);
}
return responseBody;
}

private void closeHttpClient(CloseableHttpClient httpClient) {
try {
httpClient.close();
} catch (IOException e) {
log.error("[Aligo] HTTP 클라이언트 종료에 실패했습니다.");
}
}
}