From 6578897137d42f7e21e4c2509409fed3d6b6aeed Mon Sep 17 00:00:00 2001 From: MaxKey Date: Sun, 27 Feb 2022 15:34:40 +0800 Subject: [PATCH] qiye.163.com --- .../main/java/org/maxkey/crypto/RSAUtils.java | 4 +- .../ExtendApiQiye163ExmailAdapter.java | 90 +++++++++++++++++++ 2 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 maxkey-protocols/maxkey-protocol-extendapi/src/main/java/org/maxkey/authz/exapi/endpoint/adapter/ExtendApiQiye163ExmailAdapter.java diff --git a/maxkey-common/src/main/java/org/maxkey/crypto/RSAUtils.java b/maxkey-common/src/main/java/org/maxkey/crypto/RSAUtils.java index 56fb14f35..7ceecd56a 100644 --- a/maxkey-common/src/main/java/org/maxkey/crypto/RSAUtils.java +++ b/maxkey-common/src/main/java/org/maxkey/crypto/RSAUtils.java @@ -208,7 +208,7 @@ public final class RSAUtils { return cipher.doFinal(data); } - public byte[] sign(byte[] src, RSAPrivateKey privateKey, String algorithm) { + public static byte[] sign(byte[] src, RSAPrivateKey privateKey, String algorithm) { if(StringUtils.isBlank(algorithm)) { algorithm = "SHA1withRSA"; } @@ -223,7 +223,7 @@ public final class RSAUtils { } } - public boolean verify(byte[] sign, byte[] src, RSAPublicKey publicKey, String algorithm) { + public static boolean verify(byte[] sign, byte[] src, RSAPublicKey publicKey, String algorithm) { try { if(StringUtils.isBlank(algorithm)) { algorithm = "SHA1withRSA"; diff --git a/maxkey-protocols/maxkey-protocol-extendapi/src/main/java/org/maxkey/authz/exapi/endpoint/adapter/ExtendApiQiye163ExmailAdapter.java b/maxkey-protocols/maxkey-protocol-extendapi/src/main/java/org/maxkey/authz/exapi/endpoint/adapter/ExtendApiQiye163ExmailAdapter.java new file mode 100644 index 000000000..d7301d638 --- /dev/null +++ b/maxkey-protocols/maxkey-protocol-extendapi/src/main/java/org/maxkey/authz/exapi/endpoint/adapter/ExtendApiQiye163ExmailAdapter.java @@ -0,0 +1,90 @@ +/* + * Copyright [2022] [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.authz.exapi.endpoint.adapter; + +import java.io.UnsupportedEncodingException; +import java.security.interfaces.RSAPrivateKey; + +import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter; +import org.maxkey.crypto.HexUtils; +import org.maxkey.crypto.RSAUtils; +import org.maxkey.entity.Accounts; +import org.maxkey.entity.ExtraAttrs; +import org.maxkey.entity.apps.Apps; +import org.maxkey.util.HttpsTrusts; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.servlet.ModelAndView; +/** + * qiye.163.com + * @author shimingxy + * + */ +public class ExtendApiQiye163ExmailAdapter extends AbstractAuthorizeAdapter { + final static Logger _logger = LoggerFactory.getLogger(ExtendApiQiye163ExmailAdapter.class); + //https://entryhz.qiye.163.com + static String REDIRECT_URI + = "https://entryhz.qiye.163.com/domain/oa/Entry?domain=%s&account_name=%s&time=%s&enc=%s"; + + Accounts account; + + @Override + public Object generateInfo() { + return null; + } + + @Override + public ModelAndView authorize(ModelAndView modelAndView) { + HttpsTrusts.beforeConnection(); + + Apps details=(Apps)app; + //extraAttrs from Applications + ExtraAttrs extraAttrs=null; + if(details.getIsExtendAttr()==1){ + extraAttrs=new ExtraAttrs(details.getExtendAttr()); + } + String time = System.currentTimeMillis() + ""; + //域名,请使用企业自己的域名 + String domain = details.getPrincipal(); + + String account_name = this.userInfo.getEmail(); + + //String lang = "0"; + String src = account_name + domain + time; + + String privateKey = details.getCredentials(); + String enc = null; + try { + enc = HexUtils.bytes2HexString( + RSAUtils.sign( + src.getBytes("UTF-8"), + (RSAPrivateKey)RSAUtils.privateKey(HexUtils.hex2Bytes(privateKey)), + null) + ); + String loginUrl = String.format(REDIRECT_URI, domain,account_name,time,enc); + _logger.debug("LoginUrl {} " , loginUrl); + modelAndView.addObject("redirect_uri", loginUrl); + } catch (UnsupportedEncodingException e) { + _logger.error("UnsupportedEncodingException ", e); + } catch (Exception e) { + _logger.error("Exception ", e); + } + + return modelAndView; + } +}