♻️ CAS协议完善

pull/17/head
smallbun 2023-02-08 17:56:39 +08:00
parent 1d13877768
commit c69094b86e
13 changed files with 22 additions and 545 deletions

View File

@ -218,7 +218,6 @@ public class CasStandardApplicationServiceImpl extends AbstractCasApplicationSer
}
private final AppCasStandardConfigConverter casStandardConfigConverter;
/**
* AppCasConfigRepository
*/

View File

@ -17,12 +17,13 @@
*/
package cn.topiam.employee.application.cas.pojo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import lombok.Data;
import io.swagger.v3.oas.annotations.media.Schema;
/**
*
*

View File

@ -20,9 +20,11 @@ package cn.topiam.employee.application.cas.pojo;
import cn.topiam.employee.common.enums.app.AuthorizationType;
import cn.topiam.employee.common.enums.app.CasUserIdentityType;
import cn.topiam.employee.common.enums.app.InitLoginType;
import lombok.Data;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author TopIAM

View File

@ -17,14 +17,16 @@
*/
package cn.topiam.employee.application.cas.pojo;
import java.io.Serial;
import java.io.Serializable;
import cn.topiam.employee.common.enums.app.AuthorizationType;
import cn.topiam.employee.common.enums.app.CasUserIdentityType;
import cn.topiam.employee.common.enums.app.InitLoginType;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* @author TopIAM

View File

@ -26,7 +26,7 @@ import org.hibernate.annotations.TypeDef;
import com.vladmihalcea.hibernate.type.json.JsonStringType;
import cn.topiam.employee.common.enums.app.CasUserIdentityType;
import cn.topiam.employee.support.repository.domain.BaseEntity;
import cn.topiam.employee.support.repository.domain.LogicDeleteEntity;
import lombok.Getter;
import lombok.Setter;
@ -46,7 +46,7 @@ import lombok.experimental.Accessors;
@Accessors(chain = true)
@Table(name = "app_cas_config")
@TypeDef(name = "json", typeClass = JsonStringType.class)
public class AppCasConfigEntity extends BaseEntity<Long> {
public class AppCasConfigEntity extends LogicDeleteEntity<Long> {
/**
* APP ID
*/

View File

@ -1,128 +0,0 @@
/*
* eiam-common - Employee Identity and Access Management Program
* Copyright © 2020-2023 TopIAM (support@topiam.cn)
*
* This program 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.
*
* This program 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 <http://www.gnu.org/licenses/>.
*/
package cn.topiam.employee.common.entity.app;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import org.hibernate.annotations.*;
import com.vladmihalcea.hibernate.type.json.JsonStringType;
import cn.topiam.employee.support.repository.domain.LogicDeleteEntity;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import static cn.topiam.employee.support.repository.domain.LogicDeleteEntity.SOFT_DELETE_SET;
import static cn.topiam.employee.support.repository.domain.LogicDeleteEntity.SOFT_DELETE_WHERE;
/**
* APP Form
*
* @author TopIAM
* Created by support@topiam.cn on 2022/12/13 22:31
*/
@Getter
@Setter
@ToString
@Entity
@Accessors(chain = true)
@Table(name = "app_tsa_config")
@SQLDelete(sql = "update app_tsa_config set " + SOFT_DELETE_SET + " where id_ = ?")
@SQLDeleteAll(sql = "update app_tsa_config set " + SOFT_DELETE_SET + " where id_ = ?")
@TypeDef(name = "json", typeClass = JsonStringType.class)
@Where(clause = SOFT_DELETE_WHERE)
public class AppTsaConfigEntity extends LogicDeleteEntity<Long> {
/**
* APP ID
*/
@Column(name = "app_id")
private Long appId;
/**
*
*/
@Column(name = "login_page")
private String loginPage;
/**
*
*/
@Column(name = "auto_login_steps")
@Type(type = "json")
private List<AutoLoginStep> autoLoginSteps;
/**
*
*/
@Column(name = "create_account_steps")
@Type(type = "json")
private List<CreateAccountStep> createAccountSteps;
@Data
@Schema(description = "自动登录步骤")
public static class AutoLoginStep implements Serializable {
private String action;
private String target;
private String value;
}
@Data
@Schema(description = "创建账号步骤")
public static class CreateAccountStep implements Serializable {
private String title;
private String titleI18n;
private FormItemProp formItemProps;
}
@Data
@Schema(description = "表单内容")
public static class FormItemProp implements Serializable {
private List<String> name;
private List<Rule> rules;
}
@Data
@Schema(description = "表单验证规则")
public static class Rule implements Serializable {
private Boolean required;
private String message;
private String messageI18n;
}
}

View File

@ -1,74 +0,0 @@
/*
* eiam-common - Employee Identity and Access Management Program
* Copyright © 2020-2023 TopIAM (support@topiam.cn)
*
* This program 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.
*
* This program 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 <http://www.gnu.org/licenses/>.
*/
package cn.topiam.employee.common.entity.app.po;
import cn.topiam.employee.common.entity.app.AppTsaConfigEntity;
import cn.topiam.employee.common.enums.app.AuthorizationType;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
*
* @author TopIAM
* Created by support@topiam.cn on 2022/01/14 10:45
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class AppTsaConfigPO extends AppTsaConfigEntity {
/**
*
*/
private String appCode;
/**
*
*/
private String appTemplate;
/**
* ID
*/
private String clientId;
/**
*
*/
private String clientSecret;
// /**
// * SSO 发起方
// */
// private InitLoginType initLoginType;
/**
* SSO
*/
private String initLoginUrl;
/**
*
*/
private AuthorizationType authorizationType;
/**
*
*/
private Boolean enabled;
}

View File

@ -22,11 +22,11 @@ import java.util.Optional;
import org.jetbrains.annotations.NotNull;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import org.springframework.stereotype.Repository;
import cn.topiam.employee.common.entity.app.AppCasConfigEntity;
import cn.topiam.employee.support.repository.LogicDeleteRepository;
import static cn.topiam.employee.common.constants.ProtocolConstants.CAS_CONFIG_CACHE_NAME;
/**
@ -37,7 +37,7 @@ import static cn.topiam.employee.common.constants.ProtocolConstants.CAS_CONFIG_C
*/
@Repository
@CacheConfig(cacheNames = { CAS_CONFIG_CACHE_NAME })
public interface AppCasConfigRepository extends JpaRepository<AppCasConfigEntity, Long>,
public interface AppCasConfigRepository extends LogicDeleteRepository<AppCasConfigEntity, Long>,
QuerydslPredicateExecutor<AppCasConfigEntity>,
AppCasConfigRepositoryCustomized {

View File

@ -1,85 +0,0 @@
/*
* eiam-common - Employee Identity and Access Management Program
* Copyright © 2020-2023 TopIAM (support@topiam.cn)
*
* This program 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.
*
* This program 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 <http://www.gnu.org/licenses/>.
*/
package cn.topiam.employee.common.repository.app;
import java.util.Optional;
import org.jetbrains.annotations.NotNull;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import cn.topiam.employee.common.entity.app.AppTsaConfigEntity;
import cn.topiam.employee.support.repository.LogicDeleteRepository;
import static cn.topiam.employee.common.constants.ProtocolConstants.TSA_CONFIG_CACHE_NAME;
import static cn.topiam.employee.support.repository.domain.LogicDeleteEntity.SOFT_DELETE_SET;
/**
* @author TopIAM
*/
@Repository
@CacheConfig(cacheNames = { TSA_CONFIG_CACHE_NAME })
public interface AppTsaConfigRepository extends LogicDeleteRepository<AppTsaConfigEntity, Long>,
QuerydslPredicateExecutor<AppTsaConfigEntity>,
AppTsaConfigRepositoryCustomized {
/**
* ID
*
* @param appId {@link Long}
*/
@CacheEvict(allEntries = true)
@Modifying
@Transactional(rollbackFor = Exception.class)
@Query(value = "UPDATE app_tsa_config SET " + SOFT_DELETE_SET
+ " WHERE app_id = :appId", nativeQuery = true)
void deleteByAppId(@Param("appId") Long appId);
/**
* delete
*
* @param id must not be {@literal null}.
*/
@CacheEvict(allEntries = true)
@Override
void deleteById(@NotNull Long id);
/**
* save
*
* @param entity must not be {@literal null}.
* @param <S> {@link S}
* @return {@link AppTsaConfigEntity}
*/
@NotNull
@Override
@CacheEvict(allEntries = true)
<S extends AppTsaConfigEntity> S save(@NotNull S entity);
/**
* ID
*
* @param appId {@link Long}
* @return {@link AppTsaConfigEntity}
*/
Optional<AppTsaConfigEntity> findByAppId(Long appId);
}

View File

@ -1,50 +0,0 @@
/*
* eiam-common - Employee Identity and Access Management Program
* Copyright © 2020-2023 TopIAM (support@topiam.cn)
*
* This program 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.
*
* This program 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 <http://www.gnu.org/licenses/>.
*/
package cn.topiam.employee.common.repository.app;
import cn.topiam.employee.common.entity.app.po.AppTsaConfigPO;
/**
* @author TopIAM
* Created by support@topiam.cn on 2022/01/14 09:58
*/
public interface AppTsaConfigRepositoryCustomized {
/**
* ID
*
* @param appId {@link Long}
* @return {@link AppTsaConfigPO}
*/
AppTsaConfigPO getByAppId(Long appId);
/**
* Client
*
* @param clientId {@link String}
* @return {@link AppTsaConfigPO}
*/
AppTsaConfigPO getByClientId(String clientId);
/**
*
*
* @param appCode {@link String}
* @return {@link AppTsaConfigPO}
*/
AppTsaConfigPO findByAppCode(String appCode);
}

View File

@ -1,111 +0,0 @@
/*
* eiam-common - Employee Identity and Access Management Program
* Copyright © 2020-2023 TopIAM (support@topiam.cn)
*
* This program 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.
*
* This program 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 <http://www.gnu.org/licenses/>.
*/
package cn.topiam.employee.common.repository.app.impl;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import cn.topiam.employee.common.entity.app.po.AppTsaConfigPO;
import cn.topiam.employee.common.repository.app.AppTsaConfigRepositoryCustomized;
import cn.topiam.employee.common.repository.app.impl.mapper.AppTsaConfigPoMapper;
import lombok.AllArgsConstructor;
import static cn.topiam.employee.common.constants.ProtocolConstants.TSA_CONFIG_CACHE_NAME;
/**
*
* @author TopIAM
* Created by support@topiam.cn on 2022/01/14 10:58
*/
@Repository
@AllArgsConstructor
@CacheConfig(cacheNames = { TSA_CONFIG_CACHE_NAME })
public class AppTsaConfigRepositoryCustomizedImpl implements AppTsaConfigRepositoryCustomized {
private static final String SELECT_SQL = """
SELECT
afc.*,
app.init_login_url,
app.init_login_type,
app.authorization_type,
app.template_,
app.code_,
app.is_enabled,
app.client_id,
app.client_secret
FROM
app
LEFT JOIN app_tsa_config atc ON app.id_ = atc.app_id AND atc.is_deleted = '0'
WHERE
app.is_deleted = '0'
""";
/**
* ID
*
* @param appId {@link Long}
* @return {@link AppTsaConfigPO}
*/
@Override
@Cacheable(key = "#p0", unless = "#result==null")
public AppTsaConfigPO getByAppId(Long appId) {
//@formatter:off
String sql = SELECT_SQL + " AND app_id = " + appId;
//@formatter:on
return jdbcTemplate.queryForObject(sql, new AppTsaConfigPoMapper());
}
@Override
@Cacheable(key = "#p0", unless = "#result==null")
public AppTsaConfigPO getByClientId(String clientId) {
//@formatter:off
try {
String sql = SELECT_SQL + " AND app.client_id = " + "'"+clientId+"'";
return jdbcTemplate.queryForObject(sql, new AppTsaConfigPoMapper());
} catch (EmptyResultDataAccessException e){
return null;
}
//@formatter:on
}
/**
*
*
* @param appCode {@link String}
* @return {@link AppTsaConfigPO}
*/
@Override
@Cacheable(key = "#p0", unless = "#result==null")
public AppTsaConfigPO findByAppCode(String appCode) {
//@formatter:off
String sql = SELECT_SQL + " AND app.code_ = " + "'"+appCode+"'";
//@formatter:on
try {
return jdbcTemplate.queryForObject(sql, new AppTsaConfigPoMapper());
} catch (EmptyResultDataAccessException e) {
return null;
}
}
/**
* JdbcTemplate
*/
private final JdbcTemplate jdbcTemplate;
}

View File

@ -17,15 +17,16 @@
*/
package cn.topiam.employee.common.repository.app.impl.mapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
import org.springframework.jdbc.core.RowMapper;
import cn.topiam.employee.common.entity.app.po.AppCasConfigPO;
import cn.topiam.employee.common.enums.app.AuthorizationType;
import cn.topiam.employee.common.enums.app.CasUserIdentityType;
import cn.topiam.employee.common.enums.app.InitLoginType;
import org.springframework.jdbc.core.RowMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
/**
* AppCasConfigPOPOMapper

View File

@ -1,80 +0,0 @@
/*
* eiam-common - Employee Identity and Access Management Program
* Copyright © 2020-2023 TopIAM (support@topiam.cn)
*
* This program 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.
*
* This program 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 <http://www.gnu.org/licenses/>.
*/
package cn.topiam.employee.common.repository.app.impl.mapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.time.LocalDateTime;
import org.springframework.jdbc.core.RowMapper;
import com.alibaba.fastjson2.JSON;
import cn.topiam.employee.common.entity.app.AppTsaConfigEntity;
import cn.topiam.employee.common.entity.app.po.AppTsaConfigPO;
import cn.topiam.employee.common.enums.app.AuthorizationType;
/**
* @author TopIAM
* Created by support@topiam.cn on 2022/01/14 10:58
*/
@SuppressWarnings("DuplicatedCode")
public class AppTsaConfigPoMapper implements RowMapper<AppTsaConfigPO> {
/**
* Implementations must implement this method to map each row of data
* in the ResultSet. This method should not call {@code next()} on
* the ResultSet; it is only supposed to map values of the current row.
*
* @param rs the ResultSet to map (pre-initialized for the current row)
* @param rowNum the number of the current row
* @return the result object for the current row (may be {@code null})
* @throws SQLException if an SQLException is encountered getting
* column values (that is, there's no need to catch SQLException)
*/
@Override
public AppTsaConfigPO mapRow(ResultSet rs, int rowNum) throws SQLException {
//@formatter:off
AppTsaConfigPO appForm = new AppTsaConfigPO();
appForm.setAppId(rs.getLong("app_id"));
//应用表相关
appForm.setAppCode(rs.getString("code_"));
appForm.setAppTemplate(rs.getString("template_"));
appForm.setEnabled(rs.getBoolean("is_enabled"));
appForm.setClientId(rs.getString("client_id"));
appForm.setClientSecret(rs.getString("client_secret"));
// appForm.setInitLoginType(InitLoginType.getType(rs.getString("init_login_type")));
appForm.setInitLoginUrl(rs.getString("init_login_url"));
appForm.setAuthorizationType(AuthorizationType.getType(rs.getString("authorization_type")));
//配置相关
appForm.setLoginPage(rs.getString("login_page"));
appForm.setAutoLoginSteps(JSON.parseArray(rs.getString("auto_login_steps"))
.toList(AppTsaConfigEntity.AutoLoginStep.class));
appForm.setCreateAccountSteps(JSON.parseArray(rs.getString("create_account_stepss"))
.toList(AppTsaConfigEntity.CreateAccountStep.class));
//创建修改相关
appForm.setCreateBy(rs.getString("create_by"));
appForm.setCreateTime(rs.getObject("create_time", LocalDateTime.class));
appForm.setUpdateBy(rs.getString("update_by"));
appForm.setCreateTime(rs.getObject("update_time", LocalDateTime.class));
appForm.setRemark(rs.getString("remark_"));
return appForm;
//@formatter:on
}
}