|
|
@ -2,9 +2,18 @@ package com.fr.design.login.utils; |
|
|
|
|
|
|
|
|
|
|
|
import com.fr.design.DesignerEnvManager; |
|
|
|
import com.fr.design.DesignerEnvManager; |
|
|
|
import com.fr.design.mainframe.toast.DesignerToastMsgUtil; |
|
|
|
import com.fr.design.mainframe.toast.DesignerToastMsgUtil; |
|
|
|
|
|
|
|
import com.fr.general.CloudCenter; |
|
|
|
import com.fr.general.GeneralContext; |
|
|
|
import com.fr.general.GeneralContext; |
|
|
|
|
|
|
|
import com.fr.general.log.MessageFormatter; |
|
|
|
|
|
|
|
import com.fr.json.JSONObject; |
|
|
|
|
|
|
|
import com.fr.log.FineLoggerFactory; |
|
|
|
|
|
|
|
import com.fr.third.org.bouncycastle.util.encoders.Hex; |
|
|
|
|
|
|
|
import java.security.SecureRandom; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
import javax.crypto.Cipher; |
|
|
|
|
|
|
|
import javax.crypto.spec.IvParameterSpec; |
|
|
|
|
|
|
|
import javax.crypto.spec.SecretKeySpec; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* @author Lanlan |
|
|
|
* @author Lanlan |
|
|
@ -13,6 +22,10 @@ import java.util.Map; |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public class DesignerLoginUtils { |
|
|
|
public class DesignerLoginUtils { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final String PRODUCT_FINEREPORT = "product-finereport"; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final String KEY = "i7hP48WAcuTrmxfN"; |
|
|
|
|
|
|
|
|
|
|
|
public static Map<String, String> renderMap() { |
|
|
|
public static Map<String, String> renderMap() { |
|
|
|
Map<String, String> map4Tpl = new HashMap<>(); |
|
|
|
Map<String, String> map4Tpl = new HashMap<>(); |
|
|
|
map4Tpl.put("language", GeneralContext.getLocale().toString()); |
|
|
|
map4Tpl.put("language", GeneralContext.getLocale().toString()); |
|
|
@ -32,4 +45,43 @@ public class DesignerLoginUtils { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static String generateDesignerSSOUrl(String referrer) { |
|
|
|
|
|
|
|
String ssoTemplate = CloudCenter.getInstance().acquireUrlByKind("designer.sso.api", "https://id.fanruan.com/api/app/?code={}&referrer={}"); |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
String code = generateLoginCode(); |
|
|
|
|
|
|
|
MessageFormatter.FormattingTuple tuple = MessageFormatter.arrayFormat(ssoTemplate, new String[]{code, referrer}); |
|
|
|
|
|
|
|
return tuple.getMessage(); |
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
|
|
|
|
FineLoggerFactory.getLogger().error(e.getMessage(), e); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return referrer; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static String generateLoginCode() throws Exception { |
|
|
|
|
|
|
|
DesignerEnvManager manager = DesignerEnvManager.getEnvManager(); |
|
|
|
|
|
|
|
JSONObject jo = JSONObject.create(); |
|
|
|
|
|
|
|
jo.put("uid", manager.getDesignerLoginUid()); |
|
|
|
|
|
|
|
jo.put("username", manager.getDesignerLoginUsername()); |
|
|
|
|
|
|
|
jo.put("source", PRODUCT_FINEREPORT); |
|
|
|
|
|
|
|
byte[] iv = randomIv(); |
|
|
|
|
|
|
|
return new String(Hex.encode(iv)) + encrypt(jo.toString(), KEY.getBytes(), iv); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static byte[] randomIv() { |
|
|
|
|
|
|
|
byte[] salt = new byte[16]; |
|
|
|
|
|
|
|
SecureRandom secureRandom = new SecureRandom(); |
|
|
|
|
|
|
|
secureRandom.setSeed(System.currentTimeMillis()); |
|
|
|
|
|
|
|
secureRandom.nextBytes(salt); |
|
|
|
|
|
|
|
return salt; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static String encrypt(String content, byte[] key, byte[] iv) throws Exception { |
|
|
|
|
|
|
|
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES"); |
|
|
|
|
|
|
|
Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding"); |
|
|
|
|
|
|
|
IvParameterSpec ivParameterSpec = new IvParameterSpec(iv); |
|
|
|
|
|
|
|
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); |
|
|
|
|
|
|
|
byte[] resultBytes = cipher.doFinal(content.getBytes()); |
|
|
|
|
|
|
|
return new String(Hex.encode(resultBytes)); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|