package com.eactive.eai.manage.oauthtoken; import java.util.List; import java.util.Map; import com.eactive.eai.common.authoutbound.TokenIssueHistory; import lombok.Data; /** * 어댑터그룹별 아웃바운드 OAuth 토큰 현황. * * accessToken 값은 마스킹해서 담는다. clientSecret 은 담지 않는다. */ @Data public class OAuthTokenStatusDTO { // ---- 등록 정보 ---- /** 어댑터그룹명 */ String adapterGroupName; /** OAuth 인증 정보 사용 여부 (Y/N) */ String useYn; /** * 스케줄러가 토큰을 발급할 때 사용하는 구현체 클래스명. * * AccessTokenManagerByDB.issueToken() 이 그룹의 어댑터 중 getAdapters().next() 하나만 골라 * 그 어댑터의 ADAPTER_TOKEN_ISSUING_CLIENT_TYPE 을 쓰므로 여기서도 같은 방식으로 조회한다. */ String tokenServiceClass; /** * 그룹에 속한 어댑터별 ADAPTER_TOKEN_ISSUING_CLIENT_TYPE. (어댑터명 → 클래스명) * * 어댑터마다 값이 다르면 스케줄러가 쓰는 구현체와 거래 중 재발급(retryAccessTokenVO) 때 * 쓰이는 구현체가 달라진다. 그 불일치를 확인하기 위한 항목이다. * * 어댑터그룹 자체를 찾지 못하면 null, 그룹은 있으나 이 서버에 배정된 어댑터가 없으면 빈 값이다. */ Map adapterTokenServiceClasses; /** 토큰 발급 URL. DB(OutboundOAuthCredentialVo)에 설정된 원본이라 상대 경로일 수 있다. */ String tokenUrl; /** * 실제로 호출되는 토큰 발급 URL. * * tokenUrl 이 절대 URL 이 아니면 어댑터 속성 URL 뒤에 붙여 호출하므로(구현체들의 appendPath 처리), * 같은 방식으로 조합한 값이다. 어댑터 속성을 찾지 못하면 null. */ String tokenUrlResolved; /** 토큰 재발급 주기(초) */ int intervalSec; // ---- 캐시 상태 ---- /** 캐시에 토큰이 있는지 */ boolean cached; /** 캐시된 토큰이 만료됐는지 */ boolean expired; /** 만료 시각 */ String expiration; /** 만료까지 남은 초. 이미 만료됐으면 음수. */ Long remainSec; // ---- 토큰 정보 ---- /** 앞 8자만 남기고 마스킹한 accessToken */ String accessTokenMasked; /** accessToken 전체 길이 */ Integer accessTokenLength; String tokenType; String scope; String clientId; /** 조회 불가 사유 등 부가 메시지 */ String message; /** 이 응답을 만든 서버. 발급 이력이 노드 로컬이라 어느 노드인지 함께 알려준다. */ String serverName; /** * 토큰 발급 이력 (최근 순). * * 이 노드에서 일어난 발급만 담기며 재기동 시 사라진다. * 단건 조회는 보관 중인 전체(최대 10건), 목록 조회는 최근 1건만 담는다. */ List issueHistory; }