提交 4d3f1245 编写于 作者: MaxKey单点登录官方's avatar MaxKey单点登录官方

SocialsProvider to database

上级 28a0fb9d
......@@ -21,10 +21,10 @@
package org.maxkey.authn.support.socialsignon;
import org.maxkey.authn.AbstractAuthenticationProvider;
import org.maxkey.authn.support.socialsignon.service.SocialSignOnProvider;
import org.maxkey.authn.support.socialsignon.service.SocialSignOnProviderService;
import org.maxkey.authn.support.socialsignon.service.SocialsAssociateService;
import org.maxkey.configuration.ApplicationConfig;
import org.maxkey.entity.SocialsProvider;
import org.maxkey.web.WebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -59,7 +59,7 @@ public class AbstractSocialSignOnEndpoint {
}
protected SocialSignOnProvider socialSignOnProvider;
protected SocialsProvider socialSignOnProvider;
protected AuthRequest authRequest;
......@@ -84,7 +84,7 @@ public class AbstractSocialSignOnEndpoint {
protected AuthRequest buildAuthRequest(String provider){
try {
SocialSignOnProvider socialSignOnProvider = socialSignOnProviderService.get(provider);
SocialsProvider socialSignOnProvider = socialSignOnProviderService.get(provider);
_logger.debug("socialSignOn Provider : "+socialSignOnProvider);
if(socialSignOnProvider!=null){
......@@ -100,26 +100,43 @@ public class AbstractSocialSignOnEndpoint {
}
protected String authCallback() throws Exception {
AuthCallback authCallback=new AuthCallback();
authCallback.setCode(WebContext.getRequest().getParameter("code"));
authCallback.setAuth_code(WebContext.getRequest().getParameter("auth_code"));
authCallback.setOauth_token(WebContext.getRequest().getParameter("oauthToken"));
authCallback.setAuthorization_code(WebContext.getRequest().getParameter("authorization_code"));
authCallback.setOauth_verifier(WebContext.getRequest().getParameter("oauthVerifier"));
authCallback.setState(WebContext.getRequest().getParameter("state"));
_logger.debug("Callback OAuth code {}, auth_code {}, oauthToken {}, authorization_code {}, oauthVerifier {}",
authCallback.getCode(),
authCallback.getAuth_code(),
authCallback.getOauth_token(),
authCallback.getAuthorization_code(),
authCallback.getOauth_verifier());
_logger.debug("Callback state {} ",
authCallback.getState()
);
authRequest=(AuthRequest)WebContext.getAttribute(SOCIALSIGNON_OAUTH_SERVICE_SESSION);
socialSignOnProvider=(SocialSignOnProvider)WebContext.getAttribute(SOCIALSIGNON_PROVIDER_SESSION);
socialSignOnProvider=(SocialsProvider)WebContext.getAttribute(SOCIALSIGNON_PROVIDER_SESSION);
//clear session
WebContext.removeAttribute(SOCIALSIGNON_OAUTH_SERVICE_SESSION);
WebContext.removeAttribute(SOCIALSIGNON_PROVIDER_SESSION);
AuthCallback authCallback=new AuthCallback();
authCallback.setCode(WebContext.getRequest().getParameter("code"));
authCallback.setAuth_code(WebContext.getRequest().getParameter("auth_code"));
authCallback.setOauth_token(WebContext.getRequest().getParameter("oauthToken"));
authCallback.setAuthorization_code(WebContext.getRequest().getParameter("authorization_code"));
authCallback.setOauth_verifier(WebContext.getRequest().getParameter("oauthVerifier"));
authCallback.setState(WebContext.getRequest().getParameter("state"));
if(authRequest == null) {//if authRequest is null renew one
authRequest=socialSignOnProviderService.getAuthRequest(provider,applicationConfig);
if(authCallback.getState() != null) {
authRequest.authorize(authCallback.getState());
}
_logger.debug("session authRequest is null , renew one");
}
AuthResponse<?> authResponse=authRequest.login(authCallback);
_logger.debug("Response : "+authResponse);
accountId=socialSignOnProviderService.getAccountId(socialSignOnProvider.getProvider(), authResponse);
_logger.debug("Response : " + authResponse.getData());
accountId=socialSignOnProviderService.getAccountId(provider, authResponse);
_logger.debug("getAccountId : "+accountId);
_logger.debug("getAccountId : " + accountId);
return accountId;
}
}
......@@ -23,9 +23,9 @@ package org.maxkey.authn.support.socialsignon;
import javax.servlet.http.HttpServletRequest;
import org.maxkey.authn.LoginCredential;
import org.maxkey.authn.support.socialsignon.service.SocialSignOnProvider;
import org.maxkey.authn.support.socialsignon.service.SocialsAssociate;
import org.maxkey.constants.ConstantsLoginType;
import org.maxkey.entity.SocialsProvider;
import org.maxkey.web.WebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -38,6 +38,8 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import me.zhyd.oauth.request.AuthRequest;
/**
* @author Crystal.Sea
*
......@@ -103,12 +105,18 @@ public class SocialSignOnEndpoint extends AbstractSocialSignOnEndpoint{
@RequestMapping(value={"/scanqrcode/{provider}"}, method = RequestMethod.GET)
@ResponseBody
public SocialSignOnProvider scanQRCode(
public SocialsProvider scanQRCode(
HttpServletRequest request,
@PathVariable("provider") String provider) {
socialSignOnAuthorize(request,provider);
SocialSignOnProvider socialSignOnProvider = socialSignOnProviderService.get(provider);
socialSignOnProvider.setState(request.getSession().getId());
AuthRequest authRequest =buildAuthRequest(provider);
if(authRequest == null ) {
_logger.error("build authRequest fail .");
}
String state = request.getSession().getId();
authRequest.authorize(state);
SocialsProvider socialSignOnProvider = socialSignOnProviderService.get(provider);
socialSignOnProvider.setState(state);
socialSignOnProvider.setRedirectUri(applicationConfig.getServerPrefix()+
"/logon/oauth20/callback/"+provider);
return socialSignOnProvider;
......
......@@ -17,30 +17,42 @@
package org.maxkey.authn.support.socialsignon.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.maxkey.configuration.ApplicationConfig;
import org.maxkey.entity.SocialsProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthUser;
import me.zhyd.oauth.request.*;
public class SocialSignOnProviderService{
private static Logger _logger = LoggerFactory.getLogger(SocialSignOnProviderService.class);
List<SocialSignOnProvider> socialSignOnProviders = new ArrayList<SocialSignOnProvider>();
private static final String DEFAULT_SELECT_STATEMENT = "select * from mxk_socials_provider where status = 1 order by sortindex";
List<SocialsProvider> socialSignOnProviders = new ArrayList<SocialsProvider>();
HashMap<String ,SocialsProvider>socialSignOnProviderMaps=new HashMap<String ,SocialsProvider>();
HashMap<String ,SocialSignOnProvider>socialSignOnProviderMaps=new HashMap<String ,SocialSignOnProvider>();
private final JdbcTemplate jdbcTemplate;
public SocialSignOnProviderService(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate=jdbcTemplate;
}
public SocialSignOnProvider get(String provider){
public SocialsProvider get(String provider){
return socialSignOnProviderMaps.get(provider);
}
......@@ -109,44 +121,85 @@ public class SocialSignOnProviderService{
}
public String getAccountId(String provider,AuthResponse<?> authResponse) throws Exception {
if(provider.equalsIgnoreCase("WeChatOpen")) {
return ((AuthUser)authResponse.getData()).getUuid();
}else if(provider.equalsIgnoreCase("sinaweibo")) {
return ((AuthUser)authResponse.getData()).getUuid();
}else if(provider.equalsIgnoreCase("qq")) {
return ((AuthUser)authResponse.getData()).getUuid();
}else if(provider.equalsIgnoreCase("Alipay")) {
return ((AuthUser)authResponse.getData()).getUuid();
}else if(provider.equalsIgnoreCase("Twitter")) {
return ((AuthUser)authResponse.getData()).getUuid();
}else if(provider.equalsIgnoreCase("google")) {
return ((AuthUser)authResponse.getData()).getUuid();
}else if(provider.equalsIgnoreCase("microsoft")) {
return ((AuthUser)authResponse.getData()).getUuid();
}else if(provider.equalsIgnoreCase("Linkedin")) {
return ((AuthUser)authResponse.getData()).getUuid();
}else if(provider.equalsIgnoreCase("DingTalk")) {
return ((AuthUser)authResponse.getData()).getUuid();
}else {
return ((AuthUser)authResponse.getData()).getUuid();
}
if(authResponse.getData() != null) {
AuthUser authUser = (AuthUser)authResponse.getData();
_logger.debug("AuthUser[{},{},{},{},{},{},{},{},{},{},{},{}]",
authUser.getUuid(),
authUser.getUsername(),
authUser.getNickname(),
authUser.getGender(),
authUser.getEmail(),
authUser.getCompany(),
authUser.getBlog(),
authUser.getLocation(),
authUser.getRemark(),
authUser.getSource(),
authUser.getBlog(),
authUser.getAvatar());
_logger.debug("RawUserInfo {}",authUser.getRawUserInfo());
if(provider.equalsIgnoreCase("WeChatOpen")) {
return authUser.getUuid();
}else if(provider.equalsIgnoreCase("sinaweibo")) {
return authUser.getUuid();
}else if(provider.equalsIgnoreCase("qq")) {
return authUser.getUuid();
}else if(provider.equalsIgnoreCase("Alipay")) {
return authUser.getUuid();
}else if(provider.equalsIgnoreCase("Twitter")) {
return authUser.getUuid();
}else if(provider.equalsIgnoreCase("google")) {
return authUser.getUuid();
}else if(provider.equalsIgnoreCase("microsoft")) {
return authUser.getUuid();
}else if(provider.equalsIgnoreCase("Linkedin")) {
return authUser.getUuid();
}else if(provider.equalsIgnoreCase("DingTalk")) {
return authUser.getUuid();
}else {
return authUser.getUuid();
}
}
return null;
}
public List<SocialSignOnProvider> getSocialSignOnProviders() {
public List<SocialsProvider> getSocialSignOnProviders() {
return socialSignOnProviders;
}
public void setSocialSignOnProviders(
List<SocialSignOnProvider> socialSignOnProviders) {
for(SocialSignOnProvider socialSignOnProvider : socialSignOnProviders){
socialSignOnProviderMaps.put(socialSignOnProvider.getProvider(), socialSignOnProvider);
if(!socialSignOnProvider.isHidden()) {
this.socialSignOnProviders.add(socialSignOnProvider);
}
}
_logger.debug("social SignOn Providers {}" , this.socialSignOnProviders);
public void loadSocialsProviders() {
List<SocialsProvider> listSocialsProvider=jdbcTemplate.query(
DEFAULT_SELECT_STATEMENT,
new SocialsProviderRowMapper());
_logger.trace("query SocialsProvider " + listSocialsProvider);
for(SocialsProvider socialsProvider : listSocialsProvider){
socialSignOnProviderMaps.put(socialsProvider.getProvider(), socialsProvider);
_logger.debug("Social Provider " + socialsProvider.getProvider()
+ "(" + socialsProvider.getProviderName()+")");
if(!socialsProvider.getHidden().equals("true")) {
this.socialSignOnProviders.add(socialsProvider);
}
}
_logger.debug("social SignOn Providers {}" , this.socialSignOnProviders);
}
private final class SocialsProviderRowMapper implements RowMapper<SocialsProvider> {
@Override
public SocialsProvider mapRow(ResultSet rs, int rowNum)
throws SQLException {
SocialsProvider socialsProvider=new SocialsProvider();
socialsProvider.setId(rs.getString("id"));
socialsProvider.setProvider(rs.getString("provider"));
socialsProvider.setProviderName(rs.getString("providername"));
socialsProvider.setIcon(rs.getString("icon"));
socialsProvider.setClientId(rs.getString("clientid"));
socialsProvider.setClientSecret(rs.getString("clientsecret"));
socialsProvider.setAgentId(rs.getString("agentId"));
socialsProvider.setHidden(rs.getString("hidden"));
socialsProvider.setSortIndex(rs.getInt("sortindex"));
socialsProvider.setStatus(rs.getInt("status"));
return socialsProvider;
}
}
}
......@@ -18,11 +18,9 @@
package org.maxkey.autoconfigure;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.maxkey.authn.support.socialsignon.service.JdbcSocialsAssociateService;
import org.maxkey.authn.support.socialsignon.service.SocialSignOnProvider;
import org.maxkey.authn.support.socialsignon.service.SocialSignOnProviderService;
import org.maxkey.entity.SocialsProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
......@@ -30,7 +28,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.jdbc.core.JdbcTemplate;
@Configuration
......@@ -41,45 +38,12 @@ public class SocialSignOnAutoConfiguration implements InitializingBean {
private static final Logger _logger = LoggerFactory.getLogger(SocialSignOnAutoConfiguration.class);
@Bean(name = "socialSignOnProviderService")
@ConditionalOnClass(SocialSignOnProvider.class)
@ConditionalOnClass(SocialsProvider.class)
public SocialSignOnProviderService socialSignOnProviderService(
StandardEnvironment environment) throws IOException {
SocialSignOnProviderService socialSignOnProviderService = new SocialSignOnProviderService();
List<SocialSignOnProvider> socialSignOnProviderList = new ArrayList<SocialSignOnProvider>();
String [] providerList =environment.getProperty("maxkey.login.socialsignon.providers").toString().split(",");
for(String provider : providerList) {
String providerName = environment.getProperty("maxkey.socialsignon."+provider+".provider.name");
String icon=environment.getProperty("maxkey.socialsignon."+provider+".icon");
String clientId=environment.getProperty("maxkey.socialsignon."+provider+".client.id");
String clientSecret=environment.getProperty("maxkey.socialsignon."+provider+".client.secret");
String sortOrder = environment.getProperty("maxkey.socialsignon."+provider+".sortorder");
String agentId = environment.getProperty("maxkey.socialsignon."+provider+".agent.id");
String hidden = environment.getProperty("maxkey.socialsignon."+provider+".hidden");
SocialSignOnProvider socialSignOnProvider = new SocialSignOnProvider();
socialSignOnProvider.setProvider(provider);
socialSignOnProvider.setProviderName(providerName);
socialSignOnProvider.setIcon(icon);
socialSignOnProvider.setClientId(clientId);
socialSignOnProvider.setClientSecret(clientSecret);
socialSignOnProvider.setSortOrder(Integer.valueOf(sortOrder));
socialSignOnProvider.setAgentId(agentId);
if(hidden == null || hidden.equalsIgnoreCase("false")) {
socialSignOnProvider.setHidden(false);
}else if(hidden.equalsIgnoreCase("true")){
socialSignOnProvider.setHidden(true);
}
_logger.debug("socialSignOnProvider " + socialSignOnProvider.getProvider()
+ "(" + socialSignOnProvider.getProviderName()+")");
_logger.trace("socialSignOnProvider " + socialSignOnProvider);
socialSignOnProviderList.add(socialSignOnProvider);
}
socialSignOnProviderService.setSocialSignOnProviders(socialSignOnProviderList);
JdbcTemplate jdbcTemplate) throws IOException {
SocialSignOnProviderService socialSignOnProviderService = new SocialSignOnProviderService(jdbcTemplate);
//load Socials Providers from database
socialSignOnProviderService.loadSocialsProviders();
_logger.debug("SocialSignOnProviderService inited.");
return socialSignOnProviderService;
}
......
/*
* Copyright [2020] [MaxKey of copyright http://www.maxkey.top]
* Copyright [2021] [MaxKey of copyright http://www.maxkey.top]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
......@@ -15,35 +15,76 @@
*/
package org.maxkey.authn.support.socialsignon.service;
package org.maxkey.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.apache.mybatis.jpa.persistence.JpaBaseEntity;
/**
* @author Crystal.Sea
*
*/
public class SocialSignOnProvider {
@Entity
@Table(name = "MXK_SOCIALS_PROVIDER")
public class SocialsProvider extends JpaBaseEntity implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1636727203025187769L;
@Id
@Column
@GeneratedValue(strategy = GenerationType.AUTO,generator = "snowflakeid")
private String id;
@Column
private String provider;
@Column
private String providerName;
@Column
private String icon;
@Column
private String clientId;
@Column
private String clientSecret;
@Column
private String agentId;
@Column
private String hidden;
@Column
private long sortIndex;
@Column
private int status;
@Column
String createdBy;
@Column
String createdDate;
@Column
String modifiedBy;
@Column
String modifiedDate;
private String redirectUri;
private String agentId;
private String accountId;
private String bindTime;
private String unBindTime;
private String lastLoginTime;
private String state;
private int sortOrder;
private boolean hidden;
private boolean userBind;
/**
*
*/
public SocialSignOnProvider() {
public SocialsProvider() {
}
......@@ -95,14 +136,6 @@ public class SocialSignOnProvider {
this.accountId = accountId;
}
public int getSortOrder() {
return sortOrder;
}
public void setSortOrder(int sortOrder) {
this.sortOrder = sortOrder;
}
public boolean isUserBind() {
return userBind;
}
......@@ -160,42 +193,120 @@ public class SocialSignOnProvider {
this.state = state;
}
public boolean isHidden() {
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getHidden() {
return hidden;
}
public void setHidden(boolean hidden) {
public void setHidden(String hidden) {
this.hidden = hidden;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
public String getCreatedBy() {
return createdBy;
}
public void setCreatedBy(String createdBy) {
this.createdBy = createdBy;
}
public String getCreatedDate() {
return createdDate;
}
public void setCreatedDate(String createdDate) {
this.createdDate = createdDate;
}
public String getModifiedBy() {
return modifiedBy;
}
public void setModifiedBy(String modifiedBy) {
this.modifiedBy = modifiedBy;
}
public String getModifiedDate() {
return modifiedDate;
}
public void setModifiedDate(String modifiedDate) {
this.modifiedDate = modifiedDate;
}
public long getSortIndex() {
return sortIndex;
}
public void setSortIndex(long sortIndex) {
this.sortIndex = sortIndex;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("SocialSignOnProvider [provider=");
builder.append(provider);
builder.append(", providerName=");
builder.append(providerName);
builder.append(", clientId=");
builder.append(clientId);
builder.append(", clientSecret=");
builder.append(clientSecret);
builder.append(", agentId=");
builder.append(agentId);
builder.append(", accountId=");
builder.append(accountId);
builder.append(", bindTime=");
builder.append(bindTime);
builder.append(", unBindTime=");
builder.append(unBindTime);
builder.append(", lastLoginTime=");
builder.append(lastLoginTime);
builder.append(", sortOrder=");
builder.append(sortOrder);
builder.append(", userBind=");
builder.append(userBind);
builder.append("]");
return builder.toString();
}
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("SocialsProvider [id=");
builder.append(id);
builder.append(", provider=");
builder.append(provider);
builder.append(", providerName=");
builder.append(providerName);
builder.append(", icon=");
builder.append(icon);
builder.append(", clientId=");
builder.append(clientId);
builder.append(", clientSecret=");
builder.append(clientSecret);
builder.append(", agentId=");
builder.append(agentId);
builder.append(", sortOrder=");
builder.append(sortOrder);
builder.append(", hidden=");
builder.append(hidden);
builder.append(", status=");
builder.append(status);
builder.append(", createdBy=");
builder.append(createdBy);
builder.append(", createdDate=");
builder.append(createdDate);
builder.append(", modifiedBy=");
builder.append(modifiedBy);
builder.append(", modifiedDate=");
builder.append(modifiedDate);
builder.append(", redirectUri=");
builder.append(redirectUri);
builder.append(", accountId=");
builder.append(accountId);
builder.append(", bindTime=");
builder.append(bindTime);
builder.append(", unBindTime=");
builder.append(unBindTime);
builder.append(", lastLoginTime=");
builder.append(lastLoginTime);
builder.append(", state=");
builder.append(state);
builder.append(", userBind=");
builder.append(userBind);
builder.append("]");
return builder.toString();
}
......
/*
* Copyright [2021] [MaxKey of copyright http://www.maxkey.top]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.maxkey.persistence.mapper;
import org.apache.mybatis.jpa.persistence.IJpaBaseMapper;
import org.maxkey.entity.SocialsProvider;
/**
* @author Crystal.Sea
*
*/
public interface SocialsProviderMapper extends IJpaBaseMapper<SocialsProvider>{
}
/*
* Copyright [2021] [MaxKey of copyright http://www.maxkey.top]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.maxkey.persistence.service;
import org.apache.mybatis.jpa.persistence.JpaBaseService;
import org.maxkey.entity.SocialsProvider;
import org.maxkey.persistence.mapper.SocialsProviderMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;
@Repository
public class SocialsProviderService extends JpaBaseService<SocialsProvider>{
final static Logger _logger = LoggerFactory.getLogger(SocialsProviderService.class);
public SocialsProviderService() {
super(SocialsProviderMapper.class);
}
/* (non-Javadoc)
* @see com.connsec.db.service.BaseService#getMapper()
*/
@Override
public SocialsProviderMapper getMapper() {
return (SocialsProviderMapper)super.getMapper();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.maxkey.persistence.mapper.SocialsProviderMapper">
<sql id="where_statement">
<if test="id != null and id != ''">
and id = #{id}
</if>
<if test="providerName != null and providerName != ''">
and providerName like '%${providerName}%'
</if>
</sql>
<select id="queryPageResults" parameterType="SocialsProvider" resultType="SocialsProvider">
select
*
from
mxk_socials_provider
where
(1=1)
<include refid="where_statement"/>
order by sortindex
</select>
</mapper>
\ No newline at end of file
......@@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
public class ExtractPostBindingAdapter implements ExtractBindingAdapter, InitializingBean{
private final static Logger logger = LoggerFactory.getLogger(ExtractPostBindingAdapter.class);
private final static Logger _logger = LoggerFactory.getLogger(ExtractPostBindingAdapter.class);
static final String SAML_REQUEST_POST_PARAM_NAME = "SAMLRequest";
static final String SAML_RESPONSE_POST_PARAM_NAME = "SAMLResponse";
......@@ -98,7 +98,7 @@ public class ExtractPostBindingAdapter implements ExtractBindingAdapter, Initial
messageContext.setSecurityPolicyResolver(securityPolicyResolver);
decoder.decode(messageContext);
logger.debug("decode successed ");
_logger.debug("decode successed ");
return messageContext;
}
......@@ -116,7 +116,9 @@ public class ExtractPostBindingAdapter implements ExtractBindingAdapter, Initial
public void buildSecurityPolicyResolver(KeyStore trustKeyStore) {
_logger.debug("EntityName {}, KeystorePassword {}",
keyStoreLoader.getEntityName(),keyStoreLoader.getKeystorePassword());
TrustResolver trustResolver = new TrustResolver(trustKeyStore,
keyStoreLoader.getEntityName(),
keyStoreLoader.getKeystorePassword(),
......
......@@ -115,7 +115,10 @@ public class AssertionGenerator {
assertion.setConditions(conditions);
//sign Assertion
try{
if(bindingAdapter.getSigningCredential() == null) {
throw new Exception("Signing Credential is null..." );
}
logger.debug("EntityId " + bindingAdapter.getSigningCredential().getEntityId());
BasicCredential basicCredential = new BasicCredential();
basicCredential.setPrivateKey(bindingAdapter.getSigningCredential().getPrivateKey());
......
......@@ -20,11 +20,11 @@ package org.maxkey.web.contorller;
import java.util.ArrayList;
import java.util.List;
import org.maxkey.authn.support.socialsignon.service.SocialSignOnProvider;
import org.maxkey.authn.support.socialsignon.service.SocialSignOnProviderService;
import org.maxkey.authn.support.socialsignon.service.SocialsAssociate;
import org.maxkey.authn.support.socialsignon.service.SocialsAssociateService;
import org.maxkey.configuration.ApplicationConfig;
import org.maxkey.entity.SocialsProvider;
import org.maxkey.web.WebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -55,16 +55,16 @@ public class SocialSignOnListController {
ModelAndView modelAndView=new ModelAndView("social/socialSignOnProvider");
if(applicationConfig.getLoginConfig().isSocialSignOn()){
List<SocialSignOnProvider> listSocialSignOnProvider= socialSignOnProviderService.getSocialSignOnProviders();
List<SocialsProvider> listSocialSignOnProvider= socialSignOnProviderService.getSocialSignOnProviders();
SocialsAssociate socialSignOnUser=new SocialsAssociate();
socialSignOnUser.setUserId(WebContext.getUserInfo().getId());
List<SocialsAssociate> listSocialSignOnUserToken= socialSignOnUserService.query(socialSignOnUser);
List<SocialSignOnProvider> listBindSocialSignOnProvider=new ArrayList<SocialSignOnProvider>();
List<SocialsProvider> listBindSocialSignOnProvider=new ArrayList<SocialsProvider>();
_logger.debug("list SocialSignOnProvider : "+listSocialSignOnProvider);
_logger.debug("list SocialSignOnUserToken : "+listSocialSignOnUserToken);
for (SocialSignOnProvider ssop : listSocialSignOnProvider){
SocialSignOnProvider socialSignOnProvider=new SocialSignOnProvider();
for (SocialsProvider ssop : listSocialSignOnProvider){
SocialsProvider socialSignOnProvider=new SocialsProvider();
socialSignOnProvider.setProvider(ssop.getProvider());
socialSignOnProvider.setProviderName(ssop.getProviderName());
socialSignOnProvider.setIcon(ssop.getIcon());
......
......@@ -58,8 +58,6 @@ maxkey.login.mfa =${LOGIN_MFA_ENABLED:true}
maxkey.login.mfa.type =${LOGIN_MFA_TYPE:TimeBasedOtpAuthn}
#enable social sign on
maxkey.login.socialsignon =${LOGIN_SOCIAL_ENABLED:true}
#social sign on providers
maxkey.login.socialsignon.providers =${LOGIN_SOCIAL_PROVIDERS:gitee,wechatopen,sinaweibo,google,qq,dingtalk,microsoft,facebook,workweixin}
#Enable kerberos/SPNEGO
maxkey.login.kerberos =false
#wsFederation
......@@ -312,93 +310,6 @@ maxkey.saml.v20.metadata.surName =maxkey
maxkey.saml.v20.metadata.emailAddress =maxkeysupport@163.com
maxkey.saml.v20.metadata.telephoneNumber =4008981111
############################################################################
# Social Sign On Configuration #
#you config client.id & client.secret only #
############################################################################
#gitee
maxkey.socialsignon.gitee.provider =gitee
maxkey.socialsignon.gitee.provider.name =Gitee
maxkey.socialsignon.gitee.icon =images/social/gitee.png
maxkey.socialsignon.gitee.client.id =${SOCIAL_GITEE_CLIENTID:ee6fdc484b3398d17e77d6ff37fd8b9fe502106398c7b22bf5522d3c01303f45}
maxkey.socialsignon.gitee.client.secret =${SOCIAL_GITEE_CLIENTSECRET:d6c3558f295f044df538c966a9084166f9a877c7a7392543184007a5faccdbad}
maxkey.socialsignon.gitee.account.id =id
maxkey.socialsignon.gitee.hidden =false
maxkey.socialsignon.gitee.sortorder =1
#wechat
maxkey.socialsignon.wechatopen.provider =wechatopen
maxkey.socialsignon.wechatopen.provider.name =\u5fae\u4fe1
maxkey.socialsignon.wechatopen.icon =images/social/wechat.png
maxkey.socialsignon.wechatopen.client.id =${SOCIAL_WECHATOPEN_CLIENTID:ee6fdc484b3398d17e7}
maxkey.socialsignon.wechatopen.client.secret =${SOCIAL_WECHATOPEN_CLIENTSECRET:7a5faccdbad}
maxkey.socialsignon.wechatopen.account.id =id
maxkey.socialsignon.wechatopen.hidden =false
maxkey.socialsignon.wechatopen.sortorder =2
#work weixin
maxkey.socialsignon.workweixin.provider =workweixin
maxkey.socialsignon.workweixin.provider.name =\u4F01\u4E1A\u5fae\u4fe1
maxkey.socialsignon.workweixin.icon =images/social/wechat_enterprise.png
maxkey.socialsignon.workweixin.client.id =${SOCIAL_WORKWEIXIN_CLIENTID:ww61ca142e1fe5b8ca}
maxkey.socialsignon.workweixin.client.secret =${SOCIAL_WORKWEIXIN_CLIENTSECRET:CfWEoALuKdSKzXiV-QWXeGSD5zPd6Svze3GR_gB5eFs}
maxkey.socialsignon.workweixin.agent.id =${SOCIAL_WORKWEIXIN_AGENTID:1000002}
maxkey.socialsignon.workweixin.account.id =id
maxkey.socialsignon.workweixin.hidden =true
maxkey.socialsignon.workweixin.sortorder =2
#sina weibo
maxkey.socialsignon.sinaweibo.provider =sinaweibo
maxkey.socialsignon.sinaweibo.provider.name =\u65b0\u6d6a\u5fae\u535a
maxkey.socialsignon.sinaweibo.icon =images/social/weibo.png
maxkey.socialsignon.sinaweibo.client.id =${SOCIAL_SINAWEIBO_CLIENTID:3379757634}
maxkey.socialsignon.sinaweibo.client.secret =${SOCIAL_SINAWEIBO_CLIENTSECRET:1adfdf9800299037bcab9d1c238664ba}
maxkey.socialsignon.sinaweibo.account.id =id
maxkey.socialsignon.sinaweibo.hidden =false
maxkey.socialsignon.sinaweibo.sortorder =3
#Google
maxkey.socialsignon.google.provider =google
maxkey.socialsignon.google.provider.name =Google
maxkey.socialsignon.google.icon =images/social/google.png
maxkey.socialsignon.google.client.id =${SOCIAL_GOOGLE_CLIENTID:519914515488.apps.googleusercontent.com}
maxkey.socialsignon.google.client.secret =${SOCIAL_GOOGLE_CLIENTSECRET:3aTW3Iw7e11QqMnHxciCaXTt}
maxkey.socialsignon.google.account.id =id
maxkey.socialsignon.google.hidden =false
maxkey.socialsignon.google.sortorder =4
#dingtalk
maxkey.socialsignon.dingtalk.provider =dingtalk
maxkey.socialsignon.dingtalk.provider.name =dingtalk
maxkey.socialsignon.dingtalk.icon =images/social/dingtalk.png
maxkey.socialsignon.dingtalk.client.id =${SOCIAL_DINGTALK_CLIENTID:dingoawf2jyiwh2uzqnphg}
maxkey.socialsignon.dingtalk.client.secret =${SOCIAL_DINGTALK_CLIENTSECRET:Crm7YJbMKfRlvG2i1SHpg4GHVpqF_oXiEjhmRQyiSiuzNRWpbFh9i0UjDTfhOoN9}
maxkey.socialsignon.dingtalk.account.id =openid
maxkey.socialsignon.dingtalk.hidden =false
maxkey.socialsignon.dingtalk.sortorder =5
#QQ
maxkey.socialsignon.qq.provider =qq
maxkey.socialsignon.qq.provider.name =QQ
maxkey.socialsignon.qq.icon =images/social/qq.png
maxkey.socialsignon.qq.client.id =${SOCIAL_QQ_CLIENTID:101225363}
maxkey.socialsignon.qq.client.secret =${SOCIAL_QQ_CLIENTSECRET:8577d75e0eb4a91ac549cc8be3371bfd}
maxkey.socialsignon.qq.account.id =openid
maxkey.socialsignon.qq.hidden =false
maxkey.socialsignon.qq.sortorder =6
#Microsoft
maxkey.socialsignon.microsoft.provider =microsoft
maxkey.socialsignon.microsoft.provider.name =Microsoft
maxkey.socialsignon.microsoft.icon =images/social/microsoft.png
maxkey.socialsignon.microsoft.client.id =${SOCIAL_MICROSOFT_CLIENTID:24aa73b6-7928-4e64-bd64-d8682e650f95}
maxkey.socialsignon.microsoft.client.secret =${SOCIAL_MICROSOFT_CLIENTSECRET:PF[_AthtjVrtWVO2mNy@CJxY1@Z8FNf5}
maxkey.socialsignon.microsoft.account.id =id
maxkey.socialsignon.microsoft.hidden =false
maxkey.socialsignon.microsoft.sortorder =7
#facebook
maxkey.socialsignon.facebook.provider =facebook
maxkey.socialsignon.facebook.provider.name =facebook
maxkey.socialsignon.facebook.icon =images/social/facebook.png
maxkey.socialsignon.facebook.client.id =${SOCIAL_FACEBOOK_CLIENTID:appKey}
maxkey.socialsignon.facebook.client.secret =${SOCIAL_FACEBOOK_CLIENTSECRET:appSecret}
maxkey.socialsignon.facebook.account.id =id
maxkey.socialsignon.facebook.hidden =false
maxkey.socialsignon.facebook.sortorder =8
############################################################################
#Management endpoints configuration #
############################################################################
......
......@@ -59,8 +59,6 @@ maxkey.login.mfa =${LOGIN_MFA_ENABLED:true}
maxkey.login.mfa.type =${LOGIN_MFA_TYPE:TimeBasedOtpAuthn}
#enable social sign on
maxkey.login.socialsignon =${LOGIN_SOCIAL_ENABLED:true}
#social sign on providers
maxkey.login.socialsignon.providers =${LOGIN_SOCIAL_PROVIDERS:gitee,wechatopen,sinaweibo,google,qq,dingtalk,microsoft,facebook,workweixin}
#Enable kerberos/SPNEGO
maxkey.login.kerberos =false
#wsFederation
......@@ -314,93 +312,6 @@ maxkey.saml.v20.metadata.surName =maxkey
maxkey.saml.v20.metadata.emailAddress =maxkeysupport@163.com
maxkey.saml.v20.metadata.telephoneNumber =4008981111
############################################################################
# Social Sign On Configuration #
#you config client.id & client.secret only #
############################################################################
#gitee
maxkey.socialsignon.gitee.provider =gitee
maxkey.socialsignon.gitee.provider.name =Gitee
maxkey.socialsignon.gitee.icon =images/social/gitee.png
maxkey.socialsignon.gitee.client.id =${SOCIAL_GITEE_CLIENTID:ee6fdc484b3398d17e77d6ff37fd8b9fe502106398c7b22bf5522d3c01303f45}
maxkey.socialsignon.gitee.client.secret =${SOCIAL_GITEE_CLIENTSECRET:d6c3558f295f044df538c966a9084166f9a877c7a7392543184007a5faccdbad}
maxkey.socialsignon.gitee.account.id =id
maxkey.socialsignon.gitee.hidden =false
maxkey.socialsignon.gitee.sortorder =1
#wechat
maxkey.socialsignon.wechatopen.provider =wechatopen
maxkey.socialsignon.wechatopen.provider.name =\u5fae\u4fe1
maxkey.socialsignon.wechatopen.icon =images/social/wechat.png
maxkey.socialsignon.wechatopen.client.id =${SOCIAL_WECHATOPEN_CLIENTID:ee6fdc484b3398d17e7}
maxkey.socialsignon.wechatopen.client.secret =${SOCIAL_WECHATOPEN_CLIENTSECRET:7a5faccdbad}
maxkey.socialsignon.wechatopen.account.id =id
maxkey.socialsignon.wechatopen.hidden =false
maxkey.socialsignon.wechatopen.sortorder =2
#work weixin
maxkey.socialsignon.workweixin.provider =workweixin
maxkey.socialsignon.workweixin.provider.name =\u4F01\u4E1A\u5fae\u4fe1
maxkey.socialsignon.workweixin.icon =images/social/wechat_enterprise.png
maxkey.socialsignon.workweixin.client.id =${SOCIAL_WORKWEIXIN_CLIENTID:ww61ca142e1fe5b8ca}
maxkey.socialsignon.workweixin.client.secret =${SOCIAL_WORKWEIXIN_CLIENTSECRET:CfWEoALuKdSKzXiV-QWXeGSD5zPd6Svze3GR_gB5eFs}
maxkey.socialsignon.workweixin.agent.id =${SOCIAL_WORKWEIXIN_AGENTID:1000002}
maxkey.socialsignon.workweixin.account.id =id
maxkey.socialsignon.workweixin.hidden =true
maxkey.socialsignon.workweixin.sortorder =2
#sina weibo
maxkey.socialsignon.sinaweibo.provider =sinaweibo
maxkey.socialsignon.sinaweibo.provider.name =\u65b0\u6d6a\u5fae\u535a
maxkey.socialsignon.sinaweibo.icon =images/social/weibo.png
maxkey.socialsignon.sinaweibo.client.id =${SOCIAL_SINAWEIBO_CLIENTID:3379757634}
maxkey.socialsignon.sinaweibo.client.secret =${SOCIAL_SINAWEIBO_CLIENTSECRET:1adfdf9800299037bcab9d1c238664ba}
maxkey.socialsignon.sinaweibo.account.id =id
maxkey.socialsignon.sinaweibo.hidden =false
maxkey.socialsignon.sinaweibo.sortorder =3
#Google
maxkey.socialsignon.google.provider =google
maxkey.socialsignon.google.provider.name =Google
maxkey.socialsignon.google.icon =images/social/google.png
maxkey.socialsignon.google.client.id =${SOCIAL_GOOGLE_CLIENTID:519914515488.apps.googleusercontent.com}
maxkey.socialsignon.google.client.secret =${SOCIAL_GOOGLE_CLIENTSECRET:3aTW3Iw7e11QqMnHxciCaXTt}
maxkey.socialsignon.google.account.id =id
maxkey.socialsignon.google.hidden =false
maxkey.socialsignon.google.sortorder =4
#dingtalk
maxkey.socialsignon.dingtalk.provider =dingtalk
maxkey.socialsignon.dingtalk.provider.name =dingtalk
maxkey.socialsignon.dingtalk.icon =images/social/dingtalk.png
maxkey.socialsignon.dingtalk.client.id =${SOCIAL_DINGTALK_CLIENTID:dingoawf2jyiwh2uzqnphg}
maxkey.socialsignon.dingtalk.client.secret =${SOCIAL_DINGTALK_CLIENTSECRET:Crm7YJbMKfRlvG2i1SHpg4GHVpqF_oXiEjhmRQyiSiuzNRWpbFh9i0UjDTfhOoN9}
maxkey.socialsignon.dingtalk.account.id =openid
maxkey.socialsignon.dingtalk.hidden =false
maxkey.socialsignon.dingtalk.sortorder =5
#QQ
maxkey.socialsignon.qq.provider =qq
maxkey.socialsignon.qq.provider.name =QQ
maxkey.socialsignon.qq.icon =images/social/qq.png
maxkey.socialsignon.qq.client.id =${SOCIAL_QQ_CLIENTID:101225363}
maxkey.socialsignon.qq.client.secret =${SOCIAL_QQ_CLIENTSECRET:8577d75e0eb4a91ac549cc8be3371bfd}
maxkey.socialsignon.qq.account.id =openid
maxkey.socialsignon.qq.hidden =false
maxkey.socialsignon.qq.sortorder =6
#Microsoft
maxkey.socialsignon.microsoft.provider =microsoft
maxkey.socialsignon.microsoft.provider.name =Microsoft
maxkey.socialsignon.microsoft.icon =images/social/microsoft.png
maxkey.socialsignon.microsoft.client.id =${SOCIAL_MICROSOFT_CLIENTID:24aa73b6-7928-4e64-bd64-d8682e650f95}
maxkey.socialsignon.microsoft.client.secret =${SOCIAL_MICROSOFT_CLIENTSECRET:PF[_AthtjVrtWVO2mNy@CJxY1@Z8FNf5}
maxkey.socialsignon.microsoft.account.id =id
maxkey.socialsignon.microsoft.hidden =false
maxkey.socialsignon.microsoft.sortorder =7
#facebook
maxkey.socialsignon.facebook.provider =facebook
maxkey.socialsignon.facebook.provider.name =facebook
maxkey.socialsignon.facebook.icon =images/social/facebook.png
maxkey.socialsignon.facebook.client.id =${SOCIAL_FACEBOOK_CLIENTID:appKey}
maxkey.socialsignon.facebook.client.secret =${SOCIAL_FACEBOOK_CLIENTSECRET:appSecret}
maxkey.socialsignon.facebook.account.id =id
maxkey.socialsignon.facebook.hidden =false
maxkey.socialsignon.facebook.sortorder =8
############################################################################
#Management endpoints configuration #
############################################################################
......
......@@ -127,6 +127,8 @@ public class MaxKeyMgtMvcConfig implements WebMvcConfigurer {
.addPathPatterns("/historys/**")
.addPathPatterns("/historys/**/**")
.addPathPatterns("/session/**")
.addPathPatterns("/socialsprovider/**")
.addPathPatterns("/accountsstrategy/**")
;
......
/*
* Copyright [2021] [MaxKey of copyright http://www.maxkey.top]
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.maxkey.web.contorller;
import org.apache.mybatis.jpa.persistence.JpaPageResults;
import org.maxkey.constants.ConstantsOperateMessage;
import org.maxkey.entity.SocialsProvider;
import org.maxkey.persistence.service.SocialsProviderService;
import org.maxkey.web.WebContext;
import org.maxkey.web.message.Message;
import org.maxkey.web.message.MessageType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping(value={"/socialsprovider"})
public class SocialsProviderController {
final static Logger _logger = LoggerFactory.getLogger(SocialsProviderController.class);
@Autowired
SocialsProviderService socialsProviderService;
@RequestMapping(value={"/list"})
public ModelAndView noticesList(){
return new ModelAndView("socialsprovider/socialsProviderList");
}
@RequestMapping(value = { "/grid" })
@ResponseBody
public JpaPageResults<SocialsProvider> queryDataGrid(@ModelAttribute("socialsProvider") SocialsProvider socialsProvider) {
_logger.debug(""+socialsProvider);
return socialsProviderService.queryPageResults(socialsProvider);
}
@RequestMapping(value = { "/forwardAdd" })
public ModelAndView forwardAdd() {
return new ModelAndView("socialsprovider/socialsProviderAdd");
}
@RequestMapping(value = { "/forwardUpdate/{id}" })
public ModelAndView forwardUpdate(@PathVariable("id") String id) {
ModelAndView modelAndView=new ModelAndView("socialsprovider/socialsProviderUpdate");
modelAndView.addObject("model",socialsProviderService.get(id));
return modelAndView;
}
@ResponseBody
@RequestMapping(value={"/add"})
public Message insert(@ModelAttribute("socialsProvider") SocialsProvider socialsProvider) {
_logger.debug("-Add :" + socialsProvider);
if (socialsProviderService.insert(socialsProvider)) {
return new Message(WebContext.getI18nValue(ConstantsOperateMessage.INSERT_SUCCESS),MessageType.success);
} else {
return new Message(WebContext.getI18nValue(ConstantsOperateMessage.INSERT_SUCCESS),MessageType.error);
}
}
/**
* 查询
* @param role
* @return
*/
@ResponseBody
@RequestMapping(value={"/query"})
public Message query(@ModelAttribute("socialsProvider") SocialsProvider socialsProvider) {
_logger.debug("-query :" + socialsProvider);
if (socialsProviderService.load(socialsProvider)!=null) {
return new Message(WebContext.getI18nValue(ConstantsOperateMessage.INSERT_SUCCESS),MessageType.success);
} else {
return new Message(WebContext.getI18nValue(ConstantsOperateMessage.INSERT_ERROR),MessageType.error);
}
}
/**
* 修改
* @param role
* @return
*/
@ResponseBody
@RequestMapping(value={"/update"})
public Message update(@ModelAttribute("socialsProvider") SocialsProvider socialsProvider) {
_logger.debug("-update socialsProvider :" + socialsProvider);
if (socialsProviderService.update(socialsProvider)) {
return new Message(WebContext.getI18nValue(ConstantsOperateMessage.UPDATE_SUCCESS),MessageType.success);
} else {
return new Message(WebContext.getI18nValue(ConstantsOperateMessage.UPDATE_ERROR),MessageType.error);
}
}
@ResponseBody
@RequestMapping(value={"/delete"})
public Message delete(@ModelAttribute("socialsProvider") SocialsProvider socialsProvider) {
_logger.debug("-delete socialsProvider :" + socialsProvider);
if (socialsProviderService.batchDelete(socialsProvider.getId())) {
return new Message(WebContext.getI18nValue(ConstantsOperateMessage.DELETE_SUCCESS),MessageType.success);
} else {
return new Message(WebContext.getI18nValue(ConstantsOperateMessage.DELETE_SUCCESS),MessageType.error);
}
}
}
......@@ -36,6 +36,7 @@ common.text.createddate=\u521b\u5efa\u65f6\u95f4
common.text.modifiedby=\u4fee\u6539\u4eba
common.text.modifieddate=\u4fee\u6539\u65f6\u95f4
common.text.sortindex=\u6392\u5e8f
common.text.status=\u72B6\u6001
common.text.status.start=\u5f00\u59cb
common.text.status.normal=\u6b63\u5e38
common.text.status.validated=\u6709\u6548
......@@ -453,6 +454,15 @@ accounts.strategy.name=\u7B56\u7565\u540D\u79F0
accounts.strategy.mapping=\u8D26\u53F7\u6620\u5C04
accounts.strategy.filters=\u7528\u6237\u6761\u4EF6
accounts.strategy.orgidslist=\u673A\u6784\u5217\u8868
#socials.provider
socials.provider.id=\u7F16\u53F7
socials.provider.provider=\u63D0\u4F9B\u8005
socials.provider.providerName=\u540D\u79F0
socials.provider.icon=\u56FE\u6807
socials.provider.clientId=\u51ED\u8BC1
socials.provider.clientSecret=\u5BC6\u94A5
socials.provider.agentId=AgentId
socials.provider.hidden=\u9690\u85CF
#synchronizers
synchronizers.id=\u7F16\u53F7
synchronizers.name=\u540C\u6B65\u5668\u540D\u79F0
......@@ -592,4 +602,5 @@ navs.role.permissions=\u89d2\u8272\u6743\u9650\u7ba1\u7406
navs.resources=\u8d44\u6e90\u7ba1\u7406
navs.adapters=\u9002\u914D\u5668\u6CE8\u518C
navs.notices=\u901A\u77E5\u516C\u544A
navs.socials.provider=\u793E\u4EA4\u63D0\u4F9B\u5546
navs.synchronizers=\u540C\u6B65\u5668\u7BA1\u7406
\ No newline at end of file
......@@ -36,6 +36,7 @@ common.text.createddate=CreatedDate
common.text.modifiedby=ModifiedBy
common.text.modifieddate=ModifiedDate
common.text.sortindex=sort
common.text.status=status
common.text.status.start=start
common.text.status.normal=normal
common.text.status.validated=validated
......@@ -462,6 +463,15 @@ accounts.strategy.mapping=mapping
accounts.strategy.filters=filters
accounts.strategy.orgidslist=orgIdsList
socials.provider.id=Id
socials.provider.provider=Provider
socials.provider.providerName=ProviderName
socials.provider.icon=Icon
socials.provider.clientId=ClientId
socials.provider.clientSecret=ClientSecret
socials.provider.agentId=AgentId
socials.provider.hidden=Hidden
#synchronizers
synchronizers.id=id
synchronizers.name=name
......@@ -602,4 +612,5 @@ navs.role.permissions=Permissions
navs.resources=Resources
navs.adapters=Adapters
navs.notices=Notices
navs.socials.provider=SocialsProvider
navs.synchronizers=Synchronizers
\ No newline at end of file
......@@ -36,6 +36,7 @@ common.text.createddate=\u521b\u5efa\u65f6\u95f4
common.text.modifiedby=\u4fee\u6539\u4eba
common.text.modifieddate=\u4fee\u6539\u65f6\u95f4
common.text.sortindex=\u6392\u5e8f
common.text.status=\u72B6\u6001
common.text.status.start=\u5f00\u59cb
common.text.status.normal=\u6b63\u5e38
common.text.status.validated=\u6709\u6548
......@@ -459,6 +460,15 @@ accounts.strategy.name=\u7B56\u7565\u540D\u79F0
accounts.strategy.mapping=\u8D26\u53F7\u6620\u5C04
accounts.strategy.filters=\u7528\u6237\u6761\u4EF6
accounts.strategy.orgidslist=\u673A\u6784\u5217\u8868
#socials.provider
socials.provider.id=\u7F16\u53F7
socials.provider.provider=\u63D0\u4F9B\u8005
socials.provider.providerName=\u540D\u79F0
socials.provider.icon=\u56FE\u6807
socials.provider.clientId=\u51ED\u8BC1
socials.provider.clientSecret=\u5BC6\u94A5
socials.provider.agentId=AgentId
socials.provider.hidden=\u9690\u85CF
#synchronizers
synchronizers.id=\u7F16\u53F7
synchronizers.name=\u540C\u6B65\u5668\u540D\u79F0
......@@ -597,4 +607,5 @@ navs.role.permissions=\u89d2\u8272\u6743\u9650\u7ba1\u7406
navs.resources=\u8d44\u6e90\u7ba1\u7406
navs.adapters=\u9002\u914D\u5668\u6CE8\u518C
navs.notices=\u901A\u77E5\u516C\u544A
navs.socials.provider=\u793E\u4EA4\u63D0\u4F9B\u5546
navs.synchronizers=\u540C\u6B65\u5668\u7BA1\u7406
\ No newline at end of file
......@@ -102,7 +102,13 @@
<li>
<a class="side-nav-menu" href="<@base />/accountsstrategy/list/">
<@locale code="navs.accounts.strategy"/>
<span class="fa fa-fw fa-globe fa-lg"></span>
<span class="fa fa-fw fa-superpowers fa-lg"></span>
</a>
</li>
<li>
<a class="side-nav-menu" href="<@base />/socialsprovider/list/">
<@locale code="navs.socials.provider"/>
<span class="fa fa-fw fa-commenting fa-lg"></span>
</a>
</li>
......
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<#include "../layout/header.ftl"/>
<#include "../layout/common.cssjs.ftl"/>
<style type="text/css">
.table th, .table td {
padding: .2rem;
vertical-align: middle;
}
</style>
<script type="text/javascript">
</script>
</head>
<body>
<form id="actionForm" method="post" type="label" autoclose="true" action="<@base/>/socialsprovider/add" class="needs-validation" novalidate>
<table border="0" cellpadding="0" cellspacing="0" class="table table-bordered" >
<tbody>
<tr style="display:none">
<th><@locale code="common.text.id" /></th>
<td nowrap>
<input type="text" id="id" name="id" class="form-control" title="" value="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.icon" /></th>
<td nowrap>
<input type="text" id="title" name="icon" class="form-control" title="" value="" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.provider" /></th>
<td nowrap>
<input type="text" id="provider" name="provider" class="form-control" title="" value="" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.providerName" /></th>
<td nowrap>
<input type="text" id="providerName" name="providerName" class="form-control" title="" value="" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.clientId" /></th>
<td nowrap>
<input type="text" id="clientId" name="clientId" class="form-control" title="" value="" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.clientSecret" /></th>
<td nowrap>
<input type="text" id="clientSecret" name="clientSecret" class="form-control" title="" value="" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.agentId" /></th>
<td nowrap>
<input type="text" id="agentId" name="agentId" class="form-control" title="" value="" required="" />
</td>
</tr>
<tr>
<th><@locale code="common.text.sortindex" /></th>
<td nowrap>
<input type="text" id="sortIndex" name="sortIndex" class="form-control" title="" value="" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.hidden" /></th>
<td nowrap>
<input type="text" id="hidden" name="hidden" class="form-control" title="" value="" required="" />
</td>
</tr>
<tr>
<th><@locale code="common.text.status" /></th>
<td nowrap>
<input type="text" id="status" name="status" class="form-control" title="" value="" required="" />
</td>
</tr>
<tr>
<td nowrap colspan="2" class="center">
<input id="_method" type="hidden" name="_method" value="post"/>
<input class="button btn btn-primary mr-3" id="submitBtn" type="submit" value="<@locale code="button.text.save" />">
<input class="button btn btn-secondary mr-3" id="closeBtn" type="button" value="<@locale code="button.text.cancel" />">
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
\ No newline at end of file
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<#include "../layout/header.ftl"/>
<#include "../layout/common.cssjs.ftl"/>
<script type="text/javascript">
function dynamicFormatter(value, row, index){
return value=='0'? '<@locale code="common.text.no" />':'<@locale code="common.text.yes" />';
};
function iconFormatter(value, row, index){
return "<img height='30' border='0px' src='<@base/>/static/"+value+"'/>";
};
</script>
</head>
<body>
<div class="app header-default side-nav-dark">
<div class="layout">
<div class="header navbar">
<#include "../layout/top.ftl"/>
</div>
<div class="col-md-3 sidebar-nav side-nav" >
<#include "../layout/sidenav.ftl"/>
</div>
<div class="page-container">
<div class="main-content">
<div class="container-fluid">
<div class="breadcrumb-wrapper row">
<div class="col-12 col-lg-3 col-md-6">
<h4 class="page-title"><@locale code="navs.socials.provider"/></h4>
</div>
<div class="col-12 col-lg-9 col-md-6">
<ol class="breadcrumb float-right">
<li><a href="<@base/>/main"><@locale code="navs.home"/></a></li>
<li class="active">/ <@locale code="navs.socials.provider"/></li>
</ol>
</div>
</div>
</div>
<div class="container-fluid">
<div class="content-wrapper row">
<div class="col-12 grid-margin">
<div class="card">
<div class="card-body">
<table class="table table-bordered">
<tr>
<td width="120px"><@locale code="socials.provider.providerName"/>:</td>
<td width="375px">
<form id="basic_search_form">
<input class="form-control" type="text" name="providerName" style ="width:150px;float:left;">
<input class="button btn btn-primary mr-3" id="searchBtn" type="button" size="50" value="<@locale code="button.text.search"/>">
<!--<input class="button btn btn-secondary" id="advancedSearchExpandBtn" type="button" size="50" value="<@locale code="button.text.expandsearch"/>" expandValue="<@locale code="button.text.expandsearch"/>" collapseValue="<@locale code="button.text.collapsesearch"/>">
-->
</form>
</td>
<td colspan="2">
<div id="tool_box_right">
<input class="button btn btn-success mr-3" id="addBtn" type="button" value="<@locale code="button.text.add"/>"
wurl="<@base/>/socialsprovider/forwardAdd"
wwidth="700"
wheight="500"
target="window">
<input class="button btn btn-info mr-3 " id="modifyBtn" type="button" value="<@locale code="button.text.edit"/>"
wurl="<@base/>/socialsprovider/forwardUpdate"
wwidth="700"
wheight="500"
target="window">
<input class="button btn btn-danger mr-3 " id="deleteBtn" type="button" value="<@locale code="button.text.delete"/>"
wurl="<@base/>/socialsprovider/delete" />
</div>
</td>
</tr>
</table>
<div id="advanced_search">
<form id="advanced_search_form">
</form>
</div>
<table data-url="<@base/>/socialsprovider/grid"
id="datagrid"
data-toggle="table"
data-classes="table table-bordered table-hover table-striped"
data-click-to-select="true"
data-pagination="true"
data-total-field="records"
data-page-list="[10, 25, 50, 100]"
data-search="false"
data-locale="zh-CN"
data-query-params="dataGridQueryParams"
data-query-params-type="pageSize"
data-side-pagination="server">
<thead>
<tr>
<th data-checkbox="true"></th>
<th data-sortable="true" data-field="id" data-visible="false">Id</th>
<th data-field="icon" data-formatter="iconFormatter"><@locale code="socials.provider.icon"/></th>
<th data-field="provider"><@locale code="socials.provider.provider"/></th>
<th data-field="providerName"><@locale code="socials.provider.providerName"/></th>
<th data-field="sortIndex"><@locale code="common.text.sortindex"/></th>
<th data-field="status"><@locale code="common.text.status"/></th>
</tr>
</thead>
</table>
</div>
</div>
</div>
</div>
<footer class="content-footer">
<#include "../layout/footer.ftl"/>
</footer>
</div>
</div>
</div>
<div id="preloader">
<div class="loader" id="loader-1"></div>
</div>
</body>
</html>
\ No newline at end of file
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<#include "../layout/header.ftl"/>
<#include "../layout/common.cssjs.ftl"/>
<style type="text/css">
.table th, .table td {
padding: .2rem;
vertical-align: middle;
}
.ck-content {
min-height: 300px;
}
</style>
<script type="text/javascript">
</script>
</head>
<body>
<form id="actionForm" method="post" type="label" autoclose="true" action="<@base/>/socialsprovider/update" class="needs-validation" novalidate>
<table border="0" cellpadding="0" cellspacing="0" class="table table-bordered">
<tbody>
<tr style="display:none">
<th><@locale code="common.text.id" /></th>
<td nowrap>
<input id="id" type="text" readonly name="id" class="form-control" value="${model.id}"/>
</td>
</tr>
<tr>
<th><@locale code="socials.provider.icon" /></th>
<td nowrap>
<input type="text" id="title" name="icon" class="form-control" title="" value="${model.icon!}" required="" style="width:80%;float:left;"/><img height='30' border='0px' src='<@base/>/static/${model.icon!}'/>
</td>
</tr>
<tr>
<th><@locale code="socials.provider.provider" /></th>
<td nowrap>
<input type="text" id="provider" name="provider" class="form-control" title="" value="${model.provider!}" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.providerName" /></th>
<td nowrap>
<input type="text" id="providerName" name="providerName" class="form-control" title="" value="${model.providerName!}" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.clientId" /></th>
<td nowrap>
<input type="text" id="clientId" name="clientId" class="form-control" title="" value="${model.clientId!}" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.clientSecret" /></th>
<td nowrap>
<input type="text" id="clientSecret" name="clientSecret" class="form-control" title="" value="${model.clientSecret!}" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.agentId" /></th>
<td nowrap>
<input type="text" id="agentId" name="agentId" class="form-control" title="" value="${model.agentId!}" required="" />
</td>
</tr>
<tr>
<th><@locale code="common.text.sortindex" /></th>
<td nowrap>
<input type="text" id="sortIndex" name="sortIndex" class="form-control" title="" value="${model.sortIndex!}" required="" />
</td>
</tr>
<tr>
<th><@locale code="socials.provider.hidden" /></th>
<td nowrap>
<input type="text" id="hidden" name="hidden" class="form-control" title="" value="${model.hidden!}" required="" />
</td>
</tr>
<tr>
<th><@locale code="common.text.status" /></th>
<td nowrap>
<input type="text" id="status" name="status" class="form-control" title="" value="${model.status!}" required="" />
</td>
</tr>
<tr>
<td nowrap colspan="2" class="center">
<input id="_method" type="hidden" name="_method" value="post"/>
<input class="button btn btn-primary mr-3" id="submitBtn" type="submit" value="<@locale code="button.text.save" />">
<input class="button btn btn-secondary mr-3" id="closeBtn" type="button" value="<@locale code="button.text.cancel" />">
</td>
</tr>
</tbody>
</table>
</form>
</body>
</html>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册