diff --git a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java index 16129b4f1..1c3f83aa0 100644 --- a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -47,6 +47,8 @@ public class UserInfoLabel extends UILabel{ private static final int MIN_MESSAGE_COUNT = 1; private static final int MENU_HEIGHT = 20; + private static final int DEFAULT_BBS_UID = 0; + //用户名 private String userName; //消息条数 @@ -116,6 +118,8 @@ public class UserInfoLabel extends UILabel{ private void clearLoginInformation(){ DesignerEnvManager.getEnvManager().setBBSName(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setBBSPassword(StringUtils.EMPTY); + DesignerEnvManager.getEnvManager().setInShowBBsName(StringUtils.EMPTY); + DesignerEnvManager.getEnvManager().setBbsUid(DEFAULT_BBS_UID); } private void updateInfoPane(){ diff --git a/designer/src/com/fr/design/mainframe/bbs/UserInfoPane.java b/designer/src/com/fr/design/mainframe/bbs/UserInfoPane.java index b73ac6717..b8a168baa 100644 --- a/designer/src/com/fr/design/mainframe/bbs/UserInfoPane.java +++ b/designer/src/com/fr/design/mainframe/bbs/UserInfoPane.java @@ -14,6 +14,7 @@ import java.util.Date; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; import com.fr.design.dialog.BasicPane; +import com.fr.design.extra.LoginWebBridge; import com.fr.design.mainframe.DesignerContext; import com.fr.general.DateUtils; import com.fr.general.FRLogger; @@ -33,6 +34,9 @@ public class UserInfoPane extends BasicPane{ private static final Color LOGIN_BACKGROUND = new Color(184, 220, 242); private static final int WIDTH = 104; private static final int HEIGHT = 24; + + //登录成功 + private static final String LOGININ = "0"; // 登录框弹出间隔时间 private static final int LOGIN_DIFF_DAY = 7; @@ -74,10 +78,11 @@ public class UserInfoPane extends BasicPane{ public void run() { String username = DesignerEnvManager.getEnvManager().getBBSName(); String password = DesignerEnvManager.getEnvManager().getBBSPassword(); - if(!BBSLoginDialog.login(username, password)){ - markUnSignIn(); - }else{ + String loginResult = LoginWebBridge.getHelper().login(username, password); + if (loginResult.equals(LOGININ)) { markSignIn(username); + }else { + markUnSignIn(); } } }); diff --git a/designer_base/src/com/fr/design/DesignerEnvManager.java b/designer_base/src/com/fr/design/DesignerEnvManager.java index e1e346552..524f4f96c 100644 --- a/designer_base/src/com/fr/design/DesignerEnvManager.java +++ b/designer_base/src/com/fr/design/DesignerEnvManager.java @@ -93,6 +93,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { private String bbsName; //当前设计器用户的论坛密码 private String bbsPassword; + //当前设计器用户的论坛ID + private int bbsUid; //当前设计器用户的昵称显示(带消息) private String inShowBBsName; //上一次登录弹窗的时间, 为了控制一天只弹一次窗口 @@ -1151,6 +1153,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter { this.bbsPassword = bbsPassword; } + public int getBbsUid() { + return bbsUid; + } + + public void setBbsUid(int bbsUid) { + this.bbsUid = bbsUid; + } + public void setInShowBBsName(String inShowBBsName) { this.inShowBBsName = inShowBBsName; } diff --git a/designer_base/src/com/fr/design/extra/LoginWebBridge.java b/designer_base/src/com/fr/design/extra/LoginWebBridge.java index 46e66c98c..c1c32b11f 100644 --- a/designer_base/src/com/fr/design/extra/LoginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/LoginWebBridge.java @@ -3,9 +3,10 @@ package com.fr.design.extra; import com.fr.base.FRContext; import com.fr.design.DesignerEnvManager; import com.fr.design.dialog.UIDialog; +import com.fr.design.extra.ucenter.Client; +import com.fr.design.extra.ucenter.XMLHelper; import com.fr.design.gui.ilable.UILabel; import com.fr.design.mainframe.DesignerContext; -import com.fr.general.FRLogger; import com.fr.general.SiteCenter; import com.fr.general.http.HttpClient; import com.fr.json.JSONObject; @@ -14,12 +15,12 @@ import com.fr.stable.StringUtils; import javafx.scene.web.WebEngine; import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; import java.net.URI; import javax.swing.*; import java.awt.*; import java.net.URLEncoder; import java.util.HashMap; +import java.util.LinkedList; public class LoginWebBridge { @@ -29,18 +30,22 @@ public class LoginWebBridge { private static final String SUCCESS_MESSAGE_STATUS = "ok"; //数据通讯失败 private static final String FAILED_MESSAGE_STATUS = "error"; - //消息条数 private int messageCount; - //最低消息的条数 private static final int MIN_MESSAGE_COUNT = 0; - - private static final String LOGIN_SUCCESS_FLAG = "http://bbs.finereport.com"; + //登录成功 private static final String LOGININ = "0"; - private static final String LOGIN_INFO_EMPTY = "-1"; - private static final String DISCONNECTED = "-2"; - private static final String LOGININFO_ERROR = "-3"; + //用户名不存在 + private static final String USERNAME_NOT_EXSIT = "-1"; + //密码错误 + private static final String PASSWORD_ERROR = "-2"; + //未知错误 + private static final String UNKNOWN_ERROR = "-3"; + //网络连接失败 + private static final String NET_FAILED = "-4"; + //用户名,密码为空 + private static final String LOGIN_INFO_EMPTY = "-5"; private static final int TIME_OUT = 10000; private static com.fr.design.extra.LoginWebBridge helper; @@ -52,6 +57,10 @@ public class LoginWebBridge { return messageCount; } + /** + * 测试论坛网络连接 + * @return + */ private boolean testConnection() { HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.test")); return client.isServerAlive(); @@ -94,6 +103,11 @@ public class LoginWebBridge { setUserName(username, uiLabel); } + /** + * 设置显示的用户名 + * @param userName 登录用户名 + * @param label label显示 + */ public void setUserName(String userName, UILabel label) { if (uiLabel == null) { this.uiLabel = label; @@ -101,27 +115,27 @@ public class LoginWebBridge { if(StringUtils.isEmpty(userName)){ return; } - if(!StringUtils.isEmpty(this.userName)){ updateMessageCount(); } - //往designerenvmanger里写一下 DesignerEnvManager.getEnvManager().setBBSName(userName); this.userName = userName; } + /** + * 定时取后台论坛消息 + */ private void updateMessageCount(){ //启动获取消息更新的线程 //登陆状态, 根据存起来的用户名密码, 每1分钟发起一次请求, 更新消息条数. Thread updateMessageThread = new Thread(new Runnable() { - @Override public void run() { sleep(CHECK_MESSAGE_TIME); - //从env中获取username, 因为如果注销的话, env的里username会被清空. while(StringUtils.isNotEmpty(DesignerEnvManager.getEnvManager().getBBSName())){ - HashMap para = new HashMap(); - para.put("username", encode(encode(userName))); + HashMap para = new HashMap<>(); + int uid = DesignerEnvManager.getEnvManager().getBbsUid(); + para.put("uid", String.valueOf(uid)); HttpClient getMessage = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.message"), para); getMessage.asGet(); if(getMessage.isServerAlive()){ @@ -145,6 +159,10 @@ public class LoginWebBridge { updateMessageThread.start(); } + /** + * 设置获取的消息长度,并设置显示 + * @param count + */ public void setMessageCount(int count) { if (count == MIN_MESSAGE_COUNT) { uiLabel.setText(DesignerEnvManager.getEnvManager().getBBSName()); @@ -199,45 +217,47 @@ public class LoginWebBridge { } /** - * 登录操作的回调 - * @param username - * @param password - * @return + * 设计器端的用户登录 + * @param username 用户名 + * @param password 密码 + * @return 登录信息标志 */ public String defaultLogin(String username, String password) { - if (!StringUtils.isNotBlank(username) && !StringUtils.isNotBlank(password)) { - return LOGIN_INFO_EMPTY; - } - if (!testConnection()) { - return DISCONNECTED; - } - if (login(username, password)) { - updateUserInfo(username, password); - loginSuccess(username); - setUserName(username, uiLabel); - return LOGININ; - }else { - return LOGININFO_ERROR; - } + return login(username, password, uiLabel); } - /* - 插件管理那边的登录 + /** + * 插件管理的用户登录部分 + * @param username 用户名 + * @param password 密码 + * @param uiLabel 设计器端的label + * @return 登录信息标志 */ public String pluginManageLogin(String username, String password, UILabel uiLabel) { + return login(username, password, uiLabel); + } + + /** + * 登录操作 + * @param username 用户名 + * @param password 密码 + * @param uiLabel 两边的label显示 + * @return 登录信息标志 + */ + private String login(String username, String password, UILabel uiLabel) { if (!StringUtils.isNotBlank(username) && !StringUtils.isNotBlank(password)) { return LOGIN_INFO_EMPTY; } if (!testConnection()) { - return DISCONNECTED; + return NET_FAILED; } - if (login(username, password)) { + String loginResult = login(username, password); + if (loginResult.equals(LOGININ)) { updateUserInfo(username, password); - uiLabel.setText(username); - return LOGININ; - }else { - return LOGININFO_ERROR; + loginSuccess(username); + setUserName(username, uiLabel); } + return loginResult; } /** @@ -251,9 +271,15 @@ public class LoginWebBridge { } } + /** + * 更新后台的用户信息 + * @param username 用户名 + * @param password 密码 + */ public void updateUserInfo(String username,String password) { DesignerEnvManager.getEnvManager().setBBSName(username); DesignerEnvManager.getEnvManager().setBBSPassword(password); + DesignerEnvManager.getEnvManager().setInShowBBsName(username); this.userName = username; } @@ -284,28 +310,30 @@ public class LoginWebBridge { }); } - public boolean login(String username, String password) { - if (StringUtils.isNotBlank(username) && StringUtils.isNotBlank(password)) { - try { - username = URLEncoder.encode(username, EncodeConstants.ENCODING_GBK); - password = URLEncoder.encode(password, EncodeConstants.ENCODING_GBK); - } catch (UnsupportedEncodingException e) { - FRLogger.getLogger().error(e.getMessage()); - } - String url = SiteCenter.getInstance().acquireUrlByKind("bbs.login") + "&username=" + username + "&password=" + password; - HttpClient client = new HttpClient(url); - client.setTimeout(TIME_OUT); - if (client.getResponseCodeNoException() == HttpURLConnection.HTTP_OK) { - try { - String res = client.getResponseText(EncodeConstants.ENCODING_GBK); - if (res.contains(LOGIN_SUCCESS_FLAG)) { - return true; - } - } catch (Exception e) { - FRLogger.getLogger().error(e.getMessage()); + public String login(String username, String password) { + try { + Client uc = new Client(); + String result = uc.uc_user_login(username, password); + result = new String(result.getBytes("iso-8859-1"), "gbk"); + LinkedList list = XMLHelper.uc_unserialize(result); + if (list.size() > 0) { + int $uid = Integer.parseInt(list.get(0)); + if ($uid > 0) { + DesignerEnvManager.getEnvManager().setBbsUid($uid); + return LOGININ;//登录成功,0 + } else if ($uid == -1) { + return USERNAME_NOT_EXSIT;//用户名不存在,-1 + } else if ($uid == -2) { + return PASSWORD_ERROR;//密码错误,-2 + } else { + return UNKNOWN_ERROR;//未知错误,-3 } + }else { + return NET_FAILED; } + }catch (Exception e) { + FRContext.getLogger().info(e.getMessage()); } - return false; + return UNKNOWN_ERROR; } } \ No newline at end of file diff --git a/designer_base/src/com/fr/design/extra/PluginWebBridge.java b/designer_base/src/com/fr/design/extra/PluginWebBridge.java index bcd1aea70..4446ffae8 100644 --- a/designer_base/src/com/fr/design/extra/PluginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/PluginWebBridge.java @@ -43,11 +43,6 @@ public class PluginWebBridge { private String KEYWORD = "keyword"; private Map config; - private static final String LOGININ = "0"; - private static final String LOGIN_INFO_EMPTY = "-1"; - private static final String DISCONNECTED = "-2"; - private static final String LOGININFO_ERROR = "-3"; - private UILabel uiLabel; /** @@ -547,6 +542,7 @@ public class PluginWebBridge { public void clearUserInfo() { DesignerEnvManager.getEnvManager().setBBSName(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setBBSPassword(StringUtils.EMPTY); + DesignerEnvManager.getEnvManager().setInShowBBsName(StringUtils.EMPTY); uiLabel.setText(Inter.getLocText("FR-Base_UnSignIn")); } } diff --git a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java index 1538e71c2..a2826cd0d 100644 --- a/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/QQLoginWebBridge.java @@ -106,10 +106,13 @@ public class QQLoginWebBridge { String status = jo.get("status").toString(); if (status.equals(LOGINSUCCESS)) { String username = jo.get("username").toString(); + int uid = Integer.parseInt(jo.get("uid") == null ? "" : jo.get("uid").toString()); closeQQWindow(); closeParentWindow(); pluginuiLabel.setText(username); DesignerEnvManager.getEnvManager().setBBSName(username); + DesignerEnvManager.getEnvManager().setBbsUid(uid); + DesignerEnvManager.getEnvManager().setInShowBBsName(username); }else if (status.equals(LOGINFAILED)){ //账号没有QQ授权 closeQQWindow(); diff --git a/designer_base/src/com/fr/design/extra/exe/GetLoginInfoExecutor.java b/designer_base/src/com/fr/design/extra/exe/GetLoginInfoExecutor.java index 06a064698..91402c47c 100644 --- a/designer_base/src/com/fr/design/extra/exe/GetLoginInfoExecutor.java +++ b/designer_base/src/com/fr/design/extra/exe/GetLoginInfoExecutor.java @@ -30,7 +30,7 @@ public class GetLoginInfoExecutor implements Executor { String inShowUsername = DesignerEnvManager.getEnvManager().getInShowBBsName(); if (StringUtils.isEmpty(username) && StringUtils.isEmpty(inShowUsername)) { }else { - result = inShowUsername; + result = StringUtils.isEmpty(inShowUsername) ? username : inShowUsername; } } } diff --git a/designer_base/src/com/fr/design/extra/ucenter/Client.java b/designer_base/src/com/fr/design/extra/ucenter/Client.java new file mode 100644 index 000000000..eeb6cd57e --- /dev/null +++ b/designer_base/src/com/fr/design/extra/ucenter/Client.java @@ -0,0 +1,255 @@ +package com.fr.design.extra.ucenter; + +import com.fr.base.FRContext; +import com.fr.general.SiteCenter; + +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; + +/** + * Created by lp on 2016/9/9. + */ +public class Client extends PHPFunctions{ + + public static String UC_IP = "211.149.195.54"; + public static String UC_API = SiteCenter.getInstance().acquireUrlByKind("bbs.ucapi"); + public static String UC_CONNECT = ""; + public static String UC_KEY = "Rc85U37411p4zdvcedm8D4t4D3l9Sa42H0kd98Gbd82aA99a61S2Z5LbQ9u430M0"; + public static String UC_APPID = "4"; + public static String UC_CLIENT_RELEASE = "20090212"; + public static String UC_ROOT = ""; + public static String UC_API_FUNC = UC_CONNECT.equals("mysql") ? "uc_api_mysql" : "uc_api_post"; + + public String uc_user_login(String username, String password) { + return uc_user_login(username, password, 0, 0); + } + + public String uc_user_login(String username, String password, int isuid, int checkques) { + return uc_user_login(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 uc_user_login(String username, String password, int isuid, int checkques, String questionid, String answer) { + Map args = new HashMap<>(); + 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 $return = call_user_func(UC_API_FUNC, "user", "login", args); + return UC_CONNECT.equals("mysql") ? $return : $return; + } + + /** + * 拼接发送的post请求 + * @param module 模块 + * @param action 操作模式 + * @param arg 参数 + * @return 发送的请求加密内容 + */ + public String uc_api_post(String module, String action, Map arg) { + StringBuffer str = new StringBuffer(); + String sep = ""; + for (String k : arg.keySet()) { + Object v = arg.get(k); + k = urlencode(k); + if (v.getClass().isAssignableFrom(Map.class)) { + String s2 = ""; + String sep2 = ""; + for (String k2 : ((Map) v).keySet()) { + Object v2 = ((Map) v).get(k2); + k2 = urlencode(k2); + s2 += sep2 + "{" + k + "}[" + k2 + "]=" + 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 = uc_api_requestdata(module, action, str.toString(), ""); + return uc_fopen2(UC_API + "/index.php", 500000, $postdata, "", true, UC_IP, 20, true); + } + + public String uc_api_mysql(String model, String action, Map args) { + return ""; + } + + public String uc_api_input(String data) { + String str = urlencode(uc_authcode(data + "&agent=" + md5("") + "&time=" + time(), "ENCODE", UC_KEY), "GBK"); + return str; + } + + protected String uc_api_requestdata(String module, String action, String arg, String extra) { + String input = uc_api_input(arg); + String post = "m=" + module + "&a=" + action + "&inajax=2&release=" + UC_CLIENT_RELEASE + "&input=" + input + "&appid=" + UC_APPID + extra; + return post; + } + + public String uc_authcode(String string, String operation, String key) { + return uc_authcode(string, operation, key, 0); + } + + /** + * 内容加密 + * @param string 原文 + * @param operation decode或者encode + * @param key 密钥 + * @param expiry 密文有效时限 + * @return 加密之后的原文 + */ + public String uc_authcode(String string, String operation, String key, int expiry) { + int ckey_length = 4; + key = md5(key != null ? key : UC_KEY); + String keya = md5(substr(key, 0, 16)); + String keyb = md5(substr(key, 16, 16)); + String keyc = ckey_length > 0 ? (operation.equals("DECODE") ? substr(string, 0, ckey_length) : substr(md5(microtime()), - ckey_length)) : ""; + String cryptkey = keya + md5(keya + keyc); + int key_length = cryptkey.length(); + string = operation.equals("DECODE") ? base64_decode(substr(string, ckey_length)) : sprintf("%010d", expiry > 0 ? expiry + time() : 0) + substr(md5(string + keyb), 0, 16) + string; + int string_length = string.length(); + StringBuffer result1 = new StringBuffer(); + 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 % key_length); + } + 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 < string_length; 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 (operation.equals("DECODE")) { + 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.toString(), 0, 10)) == 0 || Long.parseLong(substr(result.toString(), 0, 10)) - time() > 0) && substr(result.toString(), 10, 16).equals(substr(md5(substr(result.toString(), 26) + keyb), 0, 16))) { + return substr(result.toString(), 26); + } else { + return ""; + } + } else { + return keyc + base64_encode(result1.toString()).replaceAll("=", ""); + } + } + + protected String uc_fopen2(String url, int limit, String post, String cookie, boolean bysocket, String ip, int timeout, boolean block) { + url += url.indexOf("?") > 0 ? "&" : "?" + "__times__=1"; + return uc_fopen(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 取到的字符串 + */ + protected String uc_fopen(String url, int limit, String post, String cookie, boolean bysocket, String ip, int timeout, boolean block) { + String result = ""; + 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()); + } + StringBuffer out = new StringBuffer(); + 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 || header.equals("") || header == "\r\n" || header == "\n") { + break; + } + } + while (true) { + String data = reader.readLine(); + if (data == null || data.equals("")) { + break; + } else { + result += data; + } + } + fp.close(); + } + } catch (IOException e) { + FRContext.getLogger().info(e.getMessage()); + } + return result; + } +} \ No newline at end of file diff --git a/designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java b/designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java new file mode 100644 index 000000000..f32912c07 --- /dev/null +++ b/designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java @@ -0,0 +1,113 @@ +package com.fr.design.extra.ucenter; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Map; +import com.fr.base.Base64; +import com.fr.base.FRContext; + +/** + * Created by lp on 2016/9/9. + */ +public abstract class PHPFunctions { + + 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 base64_decode(String input){ + try { + return new String(Base64.decode(input)); + } catch (Exception e) { + FRContext.getLogger().info(e.getMessage()); + return ""; + } + } + + protected String base64_encode(String input){ + try { + return new String(Base64.encode(input.getBytes("iso-8859-1"))); + } catch (Exception e) { + FRContext.getLogger().info(e.getMessage()); + return ""; + } + } + + protected String byte2hex(byte[] b) { + StringBuffer hs = new StringBuffer(); + String stmp = ""; + for (int n = 0; n < b.length; n++) { + stmp = (java.lang.Integer.toHexString(b[n] & 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 call_user_func(String function, String model, String action, Map args){ + if("uc_api_mysql".equals(function)){ + return this.uc_api_mysql(model, action, args); + } + if("uc_api_post".equals(function)){ + return this.uc_api_post(model, action, args); + } + return ""; + } + + public abstract String uc_api_post(String $module, String $action, Map $arg ); + + public abstract String uc_api_mysql(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/com/fr/design/extra/ucenter/XMLHelper.java b/designer_base/src/com/fr/design/extra/ucenter/XMLHelper.java new file mode 100644 index 000000000..0b58b2bdd --- /dev/null +++ b/designer_base/src/com/fr/design/extra/ucenter/XMLHelper.java @@ -0,0 +1,39 @@ +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; + +/** + * Created by lp on 2016/9/9. + */ +public class XMLHelper { + + public static LinkedList uc_unserialize(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