diff --git a/designer-base/src/main/java/com/fr/design/bbs/BBSLoginUtils.java b/designer-base/src/main/java/com/fr/design/bbs/BBSLoginUtils.java index ea24c49da0..9e2ba9a733 100644 --- a/designer-base/src/main/java/com/fr/design/bbs/BBSLoginUtils.java +++ b/designer-base/src/main/java/com/fr/design/bbs/BBSLoginUtils.java @@ -1,14 +1,8 @@ package com.fr.design.bbs; -import com.fr.config.BBSAttr; -import com.fr.config.Configuration; -import com.fr.config.MarketConfig; +import com.fr.base.passport.FinePassportManager; import com.fr.log.FineLoggerFactory; -import com.fr.stable.StringUtils; -import com.fr.transaction.Configurations; -import com.fr.transaction.Worker; -import java.util.List; /** * Created by ibm on 2017/8/21. @@ -16,62 +10,14 @@ import java.util.List; public class BBSLoginUtils { public static void bbsLogin(final String username, final String password) { - final BBSAttr bbsAttr = new BBSAttr(); - bbsAttr.setBbsUsername(username); - bbsAttr.setBbsPassword(password); try { - Configurations.update(new Worker() { - @Override - public void run() { - MarketConfig.getInstance().setBBsAttr(bbsAttr); - } - @Override - public Class[] targets() { - return new Class[]{MarketConfig.class}; - } - }); - - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } - } - - public static void bbsLogin(List list) { - try { - String uid = list.get(0); - String username = list.get(1); - String password = list.get(2); - final BBSAttr bbsAttr = new BBSAttr(); - bbsAttr.setBbsUsername(username); - bbsAttr.setBbsPassword(password); - bbsAttr.setBbsUid(Integer.parseInt(uid)); - bbsAttr.setInShowBBsName(username); - Configurations.update(new Worker() { - @Override - public void run() { - MarketConfig.getInstance().setBBsAttr(bbsAttr); - } - @Override - public Class[] targets() { - return new Class[]{MarketConfig.class}; - } - }); - + FinePassportManager.getInstance().login(username, password); } catch (Exception e) { FineLoggerFactory.getLogger().error(e.getMessage(), e); } } public static void bbsLogout() { - final BBSAttr bbsAttr = new BBSAttr(); - bbsAttr.setBbsUsername(StringUtils.EMPTY); - bbsAttr.setBbsPassword(StringUtils.EMPTY); - bbsAttr.setBbsUid(0); - bbsAttr.setInShowBBsName(StringUtils.EMPTY); - try { - MarketConfig.getInstance().setBBsAttr(bbsAttr); - } catch (Exception e) { - FineLoggerFactory.getLogger().error(e.getMessage(), e); - } + FinePassportManager.getInstance().logout(); } } diff --git a/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java index a89a4df031..43bb8131a4 100644 --- a/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/LoginWebBridge.java @@ -1,23 +1,18 @@ package com.fr.design.extra; -import com.fr.base.FRContext; +import com.fr.base.passport.FinePassportManager; import com.fr.config.MarketConfig; -import com.fr.design.bbs.BBSLoginUtils; import com.fr.design.dialog.UIDialog; import com.fr.design.extra.exe.PluginLoginExecutor; -import com.fr.design.extra.ucenter.Client; -import com.fr.design.extra.ucenter.XMLHelper; import com.fr.design.gui.ilable.UILabel; import com.fr.general.CloudCenter; -import com.fr.general.ComparatorUtils; import com.fr.general.http.HttpClient; -import com.fr.json.JSONObject; +import com.fr.log.FineLoggerFactory; import com.fr.stable.EncodeConstants; import com.fr.stable.StringUtils; import javafx.concurrent.Task; import javafx.scene.web.WebEngine; import netscape.javascript.JSObject; - import javax.swing.JDialog; import javax.swing.SwingUtilities; import java.awt.Color; @@ -25,8 +20,6 @@ import java.awt.Desktop; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URLEncoder; -import java.util.LinkedList; -import java.util.List; /** * @author vito @@ -150,7 +143,7 @@ public class LoginWebBridge { try { Thread.sleep(millis); } catch (InterruptedException e) { - FRContext.getLogger().error(e.getMessage(), e); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } @@ -161,7 +154,7 @@ public class LoginWebBridge { try { Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.register"))); } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } @@ -172,7 +165,7 @@ public class LoginWebBridge { try { Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("bbs.reset"))); } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); + FineLoggerFactory.getLogger().error(e.getMessage(), e); } } @@ -202,35 +195,16 @@ public class LoginWebBridge { if (!testConnection()) { return NET_FAILED; } - List loginResult = frPassport(userInfo, password); - String uid = loginResult.get(0); - String username = loginResult.get(1); - if (Integer.parseInt(uid) > 0) { - loginSuccess(username); - } - return uid; - } - - private List frPassport(String username, String password) { - LinkedList list = new LinkedList<>(); + int uid = 0; try { - Client uc = new Client(); - String result = uc.ucUserLogin(username, password); - result = new String(result.getBytes("iso-8859-1"), "gbk"); - list = XMLHelper.ucUnserialize(result); - if (list.size() > 0) { - int uid = Integer.parseInt(list.get(0)); - if (uid > 0) { - BBSLoginUtils.bbsLogin(list); - } - } else { - list.push(NET_FAILED); - } + uid = FinePassportManager.getInstance().login(userInfo, password); } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); - list.push(UNKNOWN_ERROR); + FineLoggerFactory.getLogger().error(e.getMessage(), e); + } + if (uid > 0) { + loginSuccess(MarketConfig.getInstance().getBbsUsername()); } - return list; + return String.valueOf(uid); } /** @@ -276,39 +250,6 @@ public class LoginWebBridge { } } - /** - * 获取用户信息 - * - * @param userInfo - */ - public void getLoginInfo(String userInfo) { - try { - JSONObject jo = new JSONObject(userInfo); - String status = jo.get("status").toString(); - if (ComparatorUtils.equals(status, LOGIN_SUCCESS)) { - String username = jo.get("username").toString(); - int uid = Integer.parseInt(jo.get("uid") == null ? StringUtils.EMPTY : jo.get("uid").toString()); - closeQQWindow(); - loginSuccess(username); - - LinkedList list = new LinkedList<>(); - list.add(String.valueOf(uid)); - list.add(username); - list.add(StringUtils.EMPTY); - BBSLoginUtils.bbsLogin(list); - } else if (ComparatorUtils.equals(status, LOGIN_FAILED)) { - //账号没有QQ授权 - closeQQWindow(); - try { - Desktop.getDesktop().browse(new URI(CloudCenter.getInstance().acquireUrlByKind("QQ_binding"))); - } catch (Exception ignored) { - // ignored - } - } - } catch (Exception e) { - FRContext.getLogger().error(e.getMessage(), e); - } - } public void openUrlAtLocalWebBrowser(WebEngine eng, String url) { if (url.indexOf("qqLogin.html") > 0) { diff --git a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java index 33d5276453..903418ec93 100644 --- a/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java +++ b/designer-base/src/main/java/com/fr/design/extra/PluginWebBridge.java @@ -1,8 +1,8 @@ package com.fr.design.extra; +import com.fr.base.passport.FinePassportManager; import com.fr.config.MarketConfig; import com.fr.design.RestartHelper; -import com.fr.design.bbs.BBSLoginUtils; import com.fr.design.dialog.UIDialog; import com.fr.design.extra.exe.GetInstalledPluginsExecutor; import com.fr.design.extra.exe.GetPluginCategoriesExecutor; @@ -554,7 +554,7 @@ public class PluginWebBridge { */ public void clearUserInfo() { MarketConfig.getInstance().setInShowBBsName(StringUtils.EMPTY); - BBSLoginUtils.bbsLogout(); + FinePassportManager.getInstance().logout(); uiLabel.setText(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Report_Base_UnSignIn")); } diff --git a/designer-base/src/main/java/com/fr/design/extra/ucenter/AbstractClient.java b/designer-base/src/main/java/com/fr/design/extra/ucenter/AbstractClient.java deleted file mode 100644 index 855e5a96e6..0000000000 --- a/designer-base/src/main/java/com/fr/design/extra/ucenter/AbstractClient.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.fr.design.extra.ucenter; - -import com.fr.base.Base64; -import com.fr.base.FRContext; -import com.fr.stable.StringUtils; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Map; - -/** - * @author lp - * @date 2016/9/9 - */ -public abstract class AbstractClient { - - static final String UC_API_MYSQL = "ucApiMysql"; - static final String UC_API_POST = "ucApiPost"; - - protected String urlEncode(String value) { - return URLEncoder.encode(value); - } - - protected String md5(String input) { - MessageDigest md; - try { - md = MessageDigest.getInstance("MD5"); - } catch (NoSuchAlgorithmException e) { - FRContext.getLogger().info(e.getMessage()); - return ""; - } - return byte2hex(md.digest(input.getBytes())); - } - - protected String md5(long input) { - return md5(String.valueOf(input)); - } - - protected String base64Decode(String input) { - try { - return new String(Base64.decode(input)); - } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); - return ""; - } - } - - protected String base64Encode(String input) { - try { - return Base64.encode(input.getBytes("iso-8859-1")); - } catch (Exception e) { - FRContext.getLogger().info(e.getMessage()); - return ""; - } - } - - protected String byte2hex(byte[] b) { - StringBuilder hs = new StringBuilder(); - String stmp = ""; - for (byte aB : b) { - stmp = (Integer.toHexString(aB & 0XFF)); - if (stmp.length() == 1) { - hs.append("0").append(stmp); - } else { - hs.append(stmp); - } - } - return hs.toString(); - } - - protected String subStr(String input, int begin, int length) { - return input.substring(begin, begin + length); - } - - protected String subStr(String input, int begin) { - if (begin > 0) { - return input.substring(begin); - } else { - return input.substring(input.length() + begin); - } - } - - protected long microTime() { - return System.currentTimeMillis(); - } - - protected long time() { - return System.currentTimeMillis() / 1000; - } - - protected String sprintf(String format, long input) { - String temp = "0000000000" + input; - return temp.substring(temp.length() - 10); - } - - protected String callUserFunc(String function, String model, String action, Map args) { - if (UC_API_MYSQL.equals(function)) { - return this.ucApiMysql(model, action, args); - } - if (UC_API_POST.equals(function)) { - return this.ucApiPost(model, action, args); - } - return StringUtils.EMPTY; - } - - public abstract String ucApiPost(String module, String action, Map arg); - - public abstract String ucApiMysql(String model, String action, Map args); - - protected String urlEncode(String value, String code) { - try { - return URLEncoder.encode(value, code); - } catch (UnsupportedEncodingException e) { - FRContext.getLogger().info(e.getMessage()); - } - return ""; - } -} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/extra/ucenter/Client.java b/designer-base/src/main/java/com/fr/design/extra/ucenter/Client.java deleted file mode 100644 index 903286476e..0000000000 --- a/designer-base/src/main/java/com/fr/design/extra/ucenter/Client.java +++ /dev/null @@ -1,264 +0,0 @@ -package com.fr.design.extra.ucenter; - -import com.fr.base.FRContext; -import com.fr.general.CloudCenter; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.Socket; -import java.net.URL; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -/** - * - * @author lp - * @date 2016/9/9 - */ -public class Client extends AbstractClient { - - private static String UC_IP = ""; - private static String UC_API = ""; - private static String UC_CONNECT = ""; - private static String UC_KEY = "Rc85U37411p4zdvcedm8D4t4D3l9Sa42H0kd98Gbd82aA99a61S2Z5LbQ9u430M0"; - private static String UC_APPID = "4"; - private static String UC_CLIENT_RELEASE = "20090212"; - public static String UC_ROOT = ""; - private static String UC_API_FUNC = "mysql".equals(UC_CONNECT) ? UC_API_MYSQL : UC_API_POST; - - public String ucUserLogin(String username, String password) { - return ucUserLogin(username, password, 0, 0); - } - - public String ucUserLogin(String username, String password, int isUid, int checkQues) { - return ucUserLogin(username, password, isUid, checkQues, "", ""); - } - - /** - * 用户登录 - * - * @param username 用户名 - * @param password 密码 - * @param isUid 是否为uid - * @param checkQues 是否使用安全问题 - * @param questionId 安全提问 - * @param answer 安全提问答案 - * @return array (uid/status, username, password, email) - */ - public String ucUserLogin(String username, String password, int isUid, int checkQues, String questionId, String answer) { - Map args = new HashMap<>(6); - args.put("username", username); - args.put("password", password); - args.put("isUid", isUid); - args.put("checkQues", checkQues); - args.put("questionId", questionId); - args.put("answer", answer); - String res = callUserFunc(UC_API_FUNC, "user", "login", args); - return "mysql".equals(UC_CONNECT) ? res : res; - } - - /** - * 拼接发送的post请求 - * - * @param module 模块 - * @param action 操作模式 - * @param arg 参数 - * @return 发送的请求加密内容 - */ - @Override - public String ucApiPost(String module, String action, Map arg) { - StringBuilder str = new StringBuilder(); - String sep = ""; - for (String k : arg.keySet()) { - Object v = arg.get(k); - k = urlEncode(k); - if (v.getClass().isAssignableFrom(Map.class)) { - StringBuilder s2 = new StringBuilder(); - String sep2 = ""; - for (String k2 : ((Map) v).keySet()) { - Object v2 = ((Map) v).get(k2); - k2 = urlEncode(k2); - s2.append(sep2).append("{").append(k).append("}[").append(k2).append("]=").append(urlEncode(String.valueOf(v2))); - sep2 = "&"; - } - str.append(sep).append(s2); - } else { - str.append(sep).append(k).append("=").append(urlEncode(String.valueOf(v), "GBK")); - } - sep = "&"; - } - String postData = ucApiRequestdata(module, action, str.toString(), ""); - UC_API = CloudCenter.getInstance().acquireUrlByKind("bbs.ucapi"); - UC_IP = CloudCenter.getInstance().acquireUrlByKind("bbs.ip"); - return ucFopen2(UC_API + "/index.php", 500000, postData, "", true, UC_IP, 20, true); - } - - @Override - public String ucApiMysql(String model, String action, Map args) { - return ""; - } - - public String ucApiInput(String data) { - return urlEncode(ucAuthCode(data + "&agent=" + md5("") + "&time=" + time(), "ENCODE", UC_KEY), "GBK"); - } - - protected String ucApiRequestdata(String module, String action, String arg, String extra) { - String input = ucApiInput(arg); - return "m=" + module + "&a=" + action + "&inajax=2&release=" + UC_CLIENT_RELEASE + "&input=" + input + "&appid=" + UC_APPID + extra; - } - - public String ucAuthCode(String string, String operation, String key) { - return ucAuthCode(string, operation, key, 0); - } - - /** - * 内容加密 - * - * @param string 原文 - * @param operation decode或者encode - * @param key 密钥 - * @param expiry 密文有效时限 - * @return 加密之后的原文 - */ - public String ucAuthCode(String string, String operation, String key, int expiry) { - int ckeyLength = 4; - key = md5(key != null ? key : UC_KEY); - String keya = md5(subStr(key, 0, 16)); - String keyb = md5(subStr(key, 16, 16)); - String keyc = "DECODE".equals(operation) ? subStr(string, 0, ckeyLength) : subStr(md5(microTime()), -ckeyLength); - String cryptkey = keya + md5(keya + keyc); - int keyLength = cryptkey.length(); - string = "DECODE".equals(operation) ? base64Decode(subStr(string, ckeyLength)) : sprintf("%010d", expiry > 0 ? expiry + time() : 0) + subStr(md5(string + keyb), 0, 16) + string; - int stringLength = string.length(); - StringBuilder result1 = new StringBuilder(); - int[] box = new int[256]; - for (int i = 0; i < 256; i++) { - box[i] = i; - } - int[] rndkey = new int[256]; - for (int i = 0; i <= 255; i++) { - rndkey[i] = (int) cryptkey.charAt(i % keyLength); - } - int j = 0; - for (int i = 0; i < 256; i++) { - j = (j + box[i] + rndkey[i]) % 256; - int tmp = box[i]; - box[i] = box[j]; - box[j] = tmp; - } - j = 0; - int a = 0; - for (int i = 0; i < stringLength; i++) { - a = (a + 1) % 256; - j = (j + box[a]) % 256; - int tmp = box[a]; - box[a] = box[j]; - box[j] = tmp; - result1.append((char) (((int) string.charAt(i)) ^ (box[(box[a] + box[j]) % 256]))); - } - if ("DECODE".equals(operation)) { - String result = result1.toString(); - try { - result = new String(result.getBytes("iso-8859-1"), "gbk"); - } catch (Exception e) { - result = result1.substring(0, result1.length()); - } - if ((Integer.parseInt(subStr(result, 0, 10)) == 0 || Long.parseLong(subStr(result, 0, 10)) - time() > 0) && subStr(result, 10, 16).equals(subStr(md5(subStr(result, 26) + keyb), 0, 16))) { - return subStr(result, 26); - } else { - return ""; - } - } else { - return keyc + base64Encode(result1.toString()).replaceAll("=", ""); - } - } - - protected String ucFopen2(String url, int limit, String post, String cookie, boolean bysocket, String ip, int timeout, boolean block) { - url += url.indexOf("?") > 0 ? "&" : "?" + "__times__=1"; - return ucFopen(url, limit, post, cookie, bysocket, ip, timeout, block); - } - - /** - * 本地模网络请求取数据 - * - * @param url 打开的url - * @param limit 取返回的数据的长度 - * @param post 要发送的 POST 数据,如uid=1&password=1234 - * @param cookie 要模拟的 COOKIE 数据,如uid=123&auth=a2323sd2323 - * @param bysocket TRUE/FALSE 是否通过SOCKET打开 - * @param ip IP地址 - * @param timeout 连接超时时间 - * @param block 是否为阻塞模式 defaul valuet:true - * @return 取到的字符串 - */ - private String ucFopen(String url, int limit, String post, String cookie, boolean bysocket, String ip, int timeout, boolean block) { - StringBuilder result = new StringBuilder(); - URL matches; - String host = ""; - String path = ""; - int port = 80; - try { - matches = new URL(url); - host = matches.getHost(); - path = matches.getPath() != null ? matches.getPath() + (matches.getQuery() != null ? "?" + matches.getQuery() : "") : "/"; - if (matches.getPort() > 0) port = matches.getPort(); - } catch (Exception e1) { - FRContext.getLogger().info(e1.getMessage()); - } - StringBuilder out = new StringBuilder(); - if (post != null && post.length() > 0) { - out.append("POST ").append(path).append(" HTTP/1.0\r\n"); - out.append("Accept: */*\r\n"); - out.append("Accept-Language: zh-cn\r\n"); - out.append("Content-Type: application/x-www-form-urlencoded\r\n"); - out.append("User-Agent: \r\n"); - out.append("Host: ").append(host).append("\r\n"); - out.append("Content-Length: ").append(post.length()).append("\r\n"); - out.append("Connection: Close\r\n"); - out.append("Cache-Control: no-cache\r\n"); - out.append("Cookie: \r\n\r\n"); - out.append(post); - } else { - out.append("GET $path HTTP/1.0\r\n"); - out.append("Accept: */*\r\n"); - out.append("Accept-Language: zh-cn\r\n"); - out.append("User-Agent: Java/1.5.0_01\r\n"); - out.append("Host: $host\r\n"); - out.append("Connection: Close\r\n"); - out.append("Cookie: $cookie\r\n\r\n"); - } - try { - Socket fp = new Socket(ip != null && ip.length() > 10 ? ip : host, port); - if (!fp.isConnected()) { - return ""; - } else { - OutputStream os = fp.getOutputStream(); - os.write(out.toString().getBytes()); - InputStream ins = fp.getInputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(ins, "iso-8859-1")); - while (true) { - String header = reader.readLine(); - if (header == null || "".equals(header) || Objects.equals(header, "\r\n") || Objects.equals(header, "\n")) { - break; - } - } - while (true) { - String data = reader.readLine(); - if (data == null || "".equals(data)) { - break; - } else { - result.append(data); - } - } - fp.close(); - } - } catch (IOException e) { - FRContext.getLogger().info(e.getMessage()); - } - return result.toString(); - } -} \ No newline at end of file diff --git a/designer-base/src/main/java/com/fr/design/extra/ucenter/XMLHelper.java b/designer-base/src/main/java/com/fr/design/extra/ucenter/XMLHelper.java deleted file mode 100644 index 697da6c56c..0000000000 --- a/designer-base/src/main/java/com/fr/design/extra/ucenter/XMLHelper.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.fr.design.extra.ucenter; - -import com.fr.base.FRContext; -import com.sun.org.apache.xerces.internal.parsers.DOMParser; -import org.w3c.dom.Document; -import org.w3c.dom.NodeList; -import org.xml.sax.InputSource; -import org.xml.sax.SAXException; - -import java.io.IOException; -import java.io.StringReader; -import java.util.LinkedList; - -/** - * @author lp - * @date 2016/9/9 - */ -public class XMLHelper { - - public static LinkedList ucUnserialize(String input) { - - LinkedList result = new LinkedList(); - DOMParser parser = new DOMParser(); - try { - parser.parse(new InputSource(new StringReader(input))); - Document doc = parser.getDocument(); - NodeList nl = doc.getChildNodes().item(0).getChildNodes(); - int length = nl.getLength(); - for (int i = 0; i < length; i++) { - if (nl.item(i).getNodeType() == Document.ELEMENT_NODE) { - result.add(nl.item(i).getTextContent()); - } - } - } catch (SAXException e) { - FRContext.getLogger().info(e.getMessage()); - } catch (IOException e1) { - FRContext.getLogger().info(e1.getLocalizedMessage()); - } - return result; - } -} \ No newline at end of file