All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.herodotus.engine.oauth2.data.jpa.converter.OAuth2ToHerodotusAuthorizationConverter Maven / Gradle / Ivy

There is a newer version: 3.3.4.0
Show newest version
/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 2020-2030 郑庚伟 ZHENGGENGWEI (码匠君),  Licensed under the AGPL License
 *
 * This file is part of Herodotus Engine.
 *
 * Herodotus Engine is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published
 * by the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Herodotus Engine is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see .
 */

package cn.herodotus.engine.oauth2.data.jpa.converter;

import cn.herodotus.engine.assistant.definition.constants.SymbolConstants;
import cn.herodotus.engine.oauth2.data.jpa.definition.converter.AbstractOAuth2EntityConverter;
import cn.herodotus.engine.oauth2.data.jpa.entity.HerodotusAuthorization;
import cn.herodotus.engine.oauth2.data.jpa.jackson2.OAuth2JacksonProcessor;
import org.dromara.hutool.core.date.DateUtil;
import org.springframework.security.oauth2.core.*;
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
import org.springframework.security.oauth2.core.oidc.OidcIdToken;
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationCode;
import org.springframework.util.StringUtils;

import java.time.LocalDateTime;
import java.util.function.Consumer;

/**
 * 

Description: OAuth2Authorization 转 HerodotusAuthorization 转换器

* * @author : gengwei.zheng * @date : 2023/5/21 20:57 */ public class OAuth2ToHerodotusAuthorizationConverter extends AbstractOAuth2EntityConverter { public OAuth2ToHerodotusAuthorizationConverter(OAuth2JacksonProcessor jacksonProcessor) { super(jacksonProcessor); } @Override public HerodotusAuthorization convert(OAuth2Authorization authorization) { HerodotusAuthorization entity = new HerodotusAuthorization(); entity.setId(authorization.getId()); entity.setRegisteredClientId(authorization.getRegisteredClientId()); entity.setPrincipalName(authorization.getPrincipalName()); entity.setAuthorizationGrantType(authorization.getAuthorizationGrantType().getValue()); entity.setAuthorizedScopes(StringUtils.collectionToDelimitedString(authorization.getAuthorizedScopes(), SymbolConstants.COMMA)); entity.setAttributes(writeMap(authorization.getAttributes())); entity.setState(authorization.getAttribute(OAuth2ParameterNames.STATE)); OAuth2Authorization.Token authorizationCode = authorization.getToken(OAuth2AuthorizationCode.class); setTokenValues( authorizationCode, entity::setAuthorizationCodeValue, entity::setAuthorizationCodeIssuedAt, entity::setAuthorizationCodeExpiresAt, entity::setAuthorizationCodeMetadata ); OAuth2Authorization.Token accessToken = authorization.getToken(OAuth2AccessToken.class); setTokenValues( accessToken, entity::setAccessTokenValue, entity::setAccessTokenIssuedAt, entity::setAccessTokenExpiresAt, entity::setAccessTokenMetadata ); if (accessToken != null && accessToken.getToken().getScopes() != null) { entity.setAccessTokenScopes(StringUtils.collectionToCommaDelimitedString(accessToken.getToken().getScopes())); } OAuth2Authorization.Token refreshToken = authorization.getToken(OAuth2RefreshToken.class); setTokenValues( refreshToken, entity::setRefreshTokenValue, entity::setRefreshTokenIssuedAt, entity::setRefreshTokenExpiresAt, entity::setRefreshTokenMetadata ); OAuth2Authorization.Token oidcIdToken = authorization.getToken(OidcIdToken.class); setTokenValues( oidcIdToken, entity::setOidcIdTokenValue, entity::setOidcIdTokenIssuedAt, entity::setOidcIdTokenExpiresAt, entity::setOidcIdTokenMetadata ); if (oidcIdToken != null) { entity.setOidcIdTokenClaims(writeMap(oidcIdToken.getClaims())); } OAuth2Authorization.Token userCode = authorization.getToken(OAuth2UserCode.class); setTokenValues( userCode, entity::setUserCodeValue, entity::setUserCodeIssuedAt, entity::setUserCodeExpiresAt, entity::setUserCodeMetadata ); OAuth2Authorization.Token deviceCode = authorization.getToken(OAuth2DeviceCode.class); setTokenValues( deviceCode, entity::setDeviceCodeValue, entity::setDeviceCodeIssuedAt, entity::setDeviceCodeExpiresAt, entity::setDeviceCodeMetadata ); return entity; } private void setTokenValues( OAuth2Authorization.Token token, Consumer tokenValueConsumer, Consumer issuedAtConsumer, Consumer expiresAtConsumer, Consumer metadataConsumer) { if (token != null) { OAuth2Token oAuth2Token = token.getToken(); tokenValueConsumer.accept(oAuth2Token.getTokenValue()); issuedAtConsumer.accept(DateUtil.toLocalDateTime(oAuth2Token.getIssuedAt())); expiresAtConsumer.accept(DateUtil.toLocalDateTime(oAuth2Token.getExpiresAt())); metadataConsumer.accept(writeMap(token.getMetadata())); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy