Oauth2AuthorizationRepository.kt
package io.github.lishangbu.avalon.auth.repository
import io.github.lishangbu.avalon.auth.entity.OauthAuthorization
import org.babyfish.jimmer.spring.repository.KRepository
/**
* OAuth2 授权仓储接口
*
* 定义OAuth2 授权数据的查询与持久化操作
*
* @author lishangbu
* @since 2025/9/14
*/
interface Oauth2AuthorizationRepository : KRepository<OauthAuthorization, String> {
/**
* 根据 state 查询认证信息
*
* @param state 状态码
* @return 匹配的认证信息
*/
fun findByState(state: String): OauthAuthorization?
/**
* 根据授权码查询认证信息
*
* @param authorizationCode 授权码
* @return 匹配的认证信息
*/
fun findByAuthorizationCodeValue(authorizationCode: String): OauthAuthorization?
/**
* 根据访问令牌查询认证信息
*
* @param accessToken 访问令牌
* @return 匹配的认证信息
*/
fun findByAccessTokenValue(accessToken: String): OauthAuthorization?
/**
* 根据刷新令牌查询认证信息
*
* @param refreshToken 刷新令牌
* @return 匹配的认证信息
*/
fun findByRefreshTokenValue(refreshToken: String): OauthAuthorization?
/**
* 根据 OIDC ID Token 查询认证信息
*
* @param idToken OIDC ID Token
* @return 匹配的认证信息
*/
fun findByOidcIdTokenValue(idToken: String): OauthAuthorization?
/**
* 根据用户码查询认证信息
*
* @param userCode 用户码
* @return 匹配的认证信息
*/
fun findByUserCodeValue(userCode: String): OauthAuthorization?
/**
* 根据设备码查询认证信息
*
* @param deviceCode 设备码
* @return 匹配的认证信息
*/
fun findByDeviceCodeValue(deviceCode: String): OauthAuthorization?
/**
* 根据多种 token 字段联合查询认证信息,支持
* state、authorizationCode、accessToken、refreshToken、idToken、userCode、deviceCode 任意一种 token。
* 查询语句为多行文本块,便于维护和阅读。
*
* @param token token 值,可为上述任意一种 token
* @return 匹配的认证信息
*/
fun loadByTokenValue(
token: String,
): OauthAuthorization? =
findByState(token)
?: findByAuthorizationCodeValue(token)
?: findByAccessTokenValue(token)
?: findByRefreshTokenValue(token)
?: findByOidcIdTokenValue(token)
?: findByUserCodeValue(token)
?: findByDeviceCodeValue(token)
}