From a2a1495d276920749f262399d92fb776f869be68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=94=80?= Date: Fri, 9 Sep 2016 09:56:02 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E5=90=8D=E7=A7=B0=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java | 1 + designer_base/src/com/fr/design/extra/LoginWebBridge.java | 1 + 2 files changed, 2 insertions(+) diff --git a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java index 16129b4f1..197321ede 100644 --- a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -116,6 +116,7 @@ public class UserInfoLabel extends UILabel{ private void clearLoginInformation(){ DesignerEnvManager.getEnvManager().setBBSName(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setBBSPassword(StringUtils.EMPTY); + DesignerEnvManager.getEnvManager().setInShowBBsName(StringUtils.EMPTY); } private void updateInfoPane(){ diff --git a/designer_base/src/com/fr/design/extra/LoginWebBridge.java b/designer_base/src/com/fr/design/extra/LoginWebBridge.java index 46e66c98c..d98315151 100644 --- a/designer_base/src/com/fr/design/extra/LoginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/LoginWebBridge.java @@ -254,6 +254,7 @@ public class LoginWebBridge { public void updateUserInfo(String username,String password) { DesignerEnvManager.getEnvManager().setBBSName(username); DesignerEnvManager.getEnvManager().setBBSPassword(password); + DesignerEnvManager.getEnvManager().setInShowBBsName(username); this.userName = username; } From 82eb0f87d6f8a84022ad5c71a54d2f945da8df50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=94=80?= Date: Fri, 9 Sep 2016 10:30:49 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E7=99=BB=E5=87=BA=E6=B8=85=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/extra/PluginWebBridge.java | 1 + 1 file changed, 1 insertion(+) diff --git a/designer_base/src/com/fr/design/extra/PluginWebBridge.java b/designer_base/src/com/fr/design/extra/PluginWebBridge.java index bcd1aea70..23b6fa460 100644 --- a/designer_base/src/com/fr/design/extra/PluginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/PluginWebBridge.java @@ -547,6 +547,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")); } } From 6dc2e9c87288fb872a06a825a7c6c81306b5d23e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=94=80?= Date: Fri, 9 Sep 2016 16:19:11 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=9B=AE=E5=89=8D?= =?UTF-8?q?=E7=9A=84=E8=AE=BE=E8=AE=A1=E5=99=A8=E7=9A=84=E8=AE=BA=E5=9D=9B?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将之前的使用shop的登录接口,改成设计器内实现登录,另外修改了之前的autoLogin操作,改成现在的直接登录 --- .../design/mainframe/bbs/UserInfoLabel.java | 1 + .../fr/design/mainframe/bbs/UserInfoPane.java | 11 +- .../src/com/fr/design/DesignerEnvManager.java | 10 + .../com/fr/design/extra/LoginWebBridge.java | 144 +++++--- .../com/fr/design/extra/QQLoginWebBridge.java | 3 + .../extra/exe/GetLoginInfoExecutor.java | 2 +- .../com/fr/design/extra/ucenter/Base64.java | 256 +++++++++++++ .../com/fr/design/extra/ucenter/Client.java | 335 ++++++++++++++++++ .../fr/design/extra/ucenter/PHPFunctions.java | 108 ++++++ .../fr/design/extra/ucenter/XMLHelper.java | 36 ++ 10 files changed, 843 insertions(+), 63 deletions(-) create mode 100644 designer_base/src/com/fr/design/extra/ucenter/Base64.java create mode 100644 designer_base/src/com/fr/design/extra/ucenter/Client.java create mode 100644 designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java create mode 100644 designer_base/src/com/fr/design/extra/ucenter/XMLHelper.java diff --git a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java index 197321ede..54a2016eb 100644 --- a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java +++ b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java @@ -117,6 +117,7 @@ public class UserInfoLabel extends UILabel{ DesignerEnvManager.getEnvManager().setBBSName(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setBBSPassword(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setInShowBBsName(StringUtils.EMPTY); + DesignerEnvManager.getEnvManager().setBbsUid(Integer.parseInt(StringUtils.EMPTY)); } 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 d98315151..e20948128 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,24 +115,23 @@ 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))); @@ -145,6 +158,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 +216,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,6 +270,11 @@ public class LoginWebBridge { } } + /** + * 更新后台的用户信息 + * @param username 用户名 + * @param password 密码 + */ public void updateUserInfo(String username,String password) { DesignerEnvManager.getEnvManager().setBBSName(username); DesignerEnvManager.getEnvManager().setBBSPassword(password); @@ -285,28 +309,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/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/Base64.java b/designer_base/src/com/fr/design/extra/ucenter/Base64.java new file mode 100644 index 000000000..199cc0bc8 --- /dev/null +++ b/designer_base/src/com/fr/design/extra/ucenter/Base64.java @@ -0,0 +1,256 @@ +package com.fr.design.extra.ucenter; + +import java.io.*; + +/** + * Created by lp on 2016/9/9. + */ +public class Base64 { + /** + * returns an array of base64-encoded characters to represent the + * passed data array. + * + * @param data the array of bytes to encode + * @return base64-coded character array. + */ + public static char[] encode(byte[] data) { + char[] out = new char[((data.length + 2) / 3) * 4]; + + // + // 3 bytes encode to 4 chars. Output is always an even + // multiple of 4 characters. + // + for (int i = 0, index = 0; i < data.length; i += 3, index += 4) { + boolean quad = false; + boolean trip = false; + + int val = (0xFF & data[i]); + val <<= 8; + if ((i + 1) < data.length) { + val |= (0xFF & data[i + 1]); + trip = true; + } + val <<= 8; + if ((i + 2) < data.length) { + val |= (0xFF & data[i + 2]); + quad = true; + } + out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)]; + val >>= 6; + out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)]; + val >>= 6; + out[index + 1] = alphabet[val & 0x3F]; + val >>= 6; + out[index + 0] = alphabet[val & 0x3F]; + } + return out; + } + + /** + * Decodes a BASE-64 encoded stream to recover the original + * data. White space before and after will be trimmed away, + * but no other manipulation of the input will be performed. + * + * As of version 1.2 this method will properly handle input + * containing junk characters (newlines and the like) rather + * than throwing an error. It does this by pre-parsing the + * input and generating from that a count of VALID input + * characters. + **/ + public static byte[] decode(char[] data) { + // as our input could contain non-BASE64 data (newlines, + // whitespace of any sort, whatever) we must first adjust + // our count of USABLE data so that... + // (a) we don't misallocate the output array, and + // (b) think that we miscalculated our data length + // just because of extraneous throw-away junk + + int tempLen = data.length; + for (int ix = 0; ix < data.length; ix++) { + if ((data[ix] > 255) || codes[data[ix]] < 0) + --tempLen; // ignore non-valid chars and padding + } + // calculate required length: + // -- 3 bytes for every 4 valid base64 chars + // -- plus 2 bytes if there are 3 extra base64 chars, + // or plus 1 byte if there are 2 extra. + + int len = (tempLen / 4) * 3; + if ((tempLen % 4) == 3) + len += 2; + if ((tempLen % 4) == 2) + len += 1; + + byte[] out = new byte[len]; + + + int shift = 0; // # of excess bits stored in accum + int accum = 0; // excess bits + int index = 0; + + // we now go through the entire array (NOT using the 'tempLen' value) + for (int ix = 0; ix < data.length; ix++) { + int value = (data[ix] > 255) ? -1 : codes[data[ix]]; + + if (value >= 0)// skip over non-code + { + accum <<= 6; // bits shift up by 6 each time thru + shift += 6; // loop, with new bits being put in + accum |= value; // at the bottom. + if (shift >= 8)// whenever there are 8 or more shifted in, + { + shift -= 8; // write them out (from the top, leaving any + out[index++] = // excess at the bottom for next iteration. + (byte) ((accum >> shift) & 0xff); + } + } + // we will also have skipped processing a padding null byte ('=') here; + // these are used ONLY for padding to an even length and do not legally + // occur as encoded data. for this reason we can ignore the fact that + // no index++ operation occurs in that special case: the out[] array is + // initialized to all-zero bytes to start with and that works to our + // advantage in this combination. + } + + // if there is STILL something wrong we just have to throw up now! + if (index != out.length) { + throw new Error("Miscalculated data length (wrote " + + index + " instead of " + out.length + ")"); + } + + return out; + } + + + // + // code characters for values 0..63 + // + private static char[] alphabet = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray(); + + // + // lookup table for converting base64 characters to value in range 0..63 + // + private static byte[] codes = new byte[256]; + + static { + for (int i = 0; i < 256; i++) + codes[i] = -1; + for (int i = 'A'; i <= 'Z'; i++) + codes[i] = (byte) (i - 'A'); + for (int i = 'a'; i <= 'z'; i++) + codes[i] = (byte) (26 + i - 'a'); + for (int i = '0'; i <= '9'; i++) + codes[i] = (byte) (52 + i - '0'); + codes['+'] = 62; + codes['/'] = 63; + } + + + + + /////////////////////////////////////////////////// + // remainder (main method and helper functions) is + // for testing purposes only, feel free to clip it. + /////////////////////////////////////////////////// + + public static void main(String[] args) { + boolean decode = false; + + if (args.length == 0) { + System.out.println("usage: java Base64 [-d[ecode]] filename"); + System.exit(0); + } + for (int i = 0; i < args.length; i++) { + if ("-decode".equalsIgnoreCase(args[i])) + decode = true; + else if ("-d".equalsIgnoreCase(args[i])) + decode = true; + } + + String filename = args[args.length - 1]; + File file = new File(filename); + if (!file.exists()) { + System.out.println("Error: file '" + filename + "' doesn't exist!"); + System.exit(0); + } + + if (decode) { + char[] encoded = readChars(file); + byte[] decoded = decode(encoded); + writeBytes(file, decoded); + } + else { + byte[] decoded = readBytes(file); + char[] encoded = encode(decoded); + writeChars(file, encoded); + } + } + + private static byte[] readBytes(File file) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try { + InputStream fis = new FileInputStream(file); + InputStream is = new BufferedInputStream(fis); + int count = 0; + byte[] buf = new byte[16384]; + while ((count = is.read(buf)) != -1) { + if (count > 0) + baos.write(buf, 0, count); + } + is.close(); + } + catch (Exception e) { + e.printStackTrace(); + } + + return baos.toByteArray(); + } + + private static char[] readChars(File file) { + CharArrayWriter caw = new CharArrayWriter(); + try { + Reader fr = new FileReader(file); + Reader in = new BufferedReader(fr); + int count = 0; + char[] buf = new char[16384]; + while ((count = in.read(buf)) != -1) { + if (count > 0) + caw.write(buf, 0, count); + } + in.close(); + } + catch (Exception e) { + e.printStackTrace(); + } + + return caw.toCharArray(); + } + + private static void writeBytes(File file, byte[] data) { + try { + OutputStream fos = new FileOutputStream(file); + OutputStream os = new BufferedOutputStream(fos); + os.write(data); + os.close(); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + private static void writeChars(File file, char[] data) { + try { + Writer fos = new FileWriter(file); + Writer os = new BufferedWriter(fos); + os.write(data); + os.close(); + } + catch (Exception e) { + e.printStackTrace(); + } + } + /////////////////////////////////////////////////// + // end of test code. + /////////////////////////////////////////////////// +} 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..172488182 --- /dev/null +++ b/designer_base/src/com/fr/design/extra/ucenter/Client.java @@ -0,0 +1,335 @@ +package com.fr.design.extra.ucenter; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.MalformedURLException; +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 boolean IN_UC = true; + public static String UC_IP = "211.149.195.54"; + public static String UC_API = "http://bbs.fanruan.com/uc_server"; + public static String UC_CONNECT = ""; + public static String UC_KEY = "Rc85U37411p4zdvcedm8D4t4D3l9Sa42H0kd98Gbd82aA99a61S2Z5LbQ9u430M0"; + public static String UC_APPID = "4"; + public static String UC_CLIENT_VERSION = "1.0"; + public static String UC_CLIENT_RELEASE = "20090212"; + public static String UC_ROOT = ""; //note ûĿͻ˵ĸĿ?? UC_CLIENTROOT + public static String UC_DATADIR = UC_ROOT + "./data/"; //note ûĵݻĿ?? + public static String UC_DATAURL = "UC_API" + "/data"; //note ûĵ?? URL + public static String UC_API_FUNC = UC_CONNECT.equals("mysql") ? "uc_api_mysql" : "uc_api_post"; + public static String[] uc_controls = {}; + + protected String uc_serialize(String $arr, int $htmlon) { + return $arr; + } + + protected String uc_unserialize(String $s) { + return $s; + } + + protected String uc_addslashes(String $string, int $force, boolean $strip) { + return $string; + } + + protected String daddslashes(String $string, int $force) { + return uc_addslashes($string, $force, false); + } + + protected String uc_stripslashes(String $string) { + return $string; + } + + public String uc_api_post(String $module, String $action, Map $arg) { + StringBuffer $s = 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(uc_stripslashes(String.valueOf($v2))); + $sep2 = "&"; + } + $s.append($sep).append($s2); + } else { + $s.append($sep).append($k).append("=").append(urlencode(uc_stripslashes(String.valueOf($v)), "GBK")); + } + $sep = "&"; + } + String $postdata = uc_api_requestdata($module, $action, $s.toString(), ""); + return uc_fopen2(UC_API + "/index.php", 500000, $postdata, "", true, UC_IP, 20, true); + } + + 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; + } + + protected String uc_api_url(String $module, String $action, String $arg, String $extra) { + String $url = UC_API + "/index.php?" + uc_api_requestdata($module, $action, $arg, $extra); + return $url; + } + + public String uc_api_input(String $data) { + String $s = urlencode(uc_authcode($data + "&agent=" + md5("") + "&time=" + time(), "ENCODE", UC_KEY), "GBK"); + return $s; + } + + public String uc_api_mysql(String $model, String $action, Map $args) { + if ($action.charAt(0) != '_') { + return null; + } else { + return ""; + } + } + + public String uc_authcode(String $string, String $operation) { + return uc_authcode($string, $operation, null); + } + + public String uc_authcode(String $string, String $operation, String $key) { + return uc_authcode($string, $operation, $key, 0); + } + + 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); + } + + protected String uc_fopen(String $url, int $limit, String $post, String $cookie, boolean $bysocket, String $ip, int $timeout, boolean $block) { + String $return = ""; + + 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 (MalformedURLException e1) { + } + 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 { + $return += $data; + } + } + $fp.close(); + } + } catch (IOException e) { + + } + return $return; + } + + public String uc_app_ls() { + String $return = call_user_func(UC_API_FUNC, "app", "ls", null); + return UC_CONNECT.equals("mysql") ? $return : uc_unserialize($return); + } + + public String uc_user_register(String $username, String $password, String $email) { + return uc_user_register($username, $password, $email, "", ""); + } + + public String uc_user_register(String $username, String $password, String $email, String $questionid, String $answer) { + Map args = new HashMap(); + args.put("username", $username); + args.put("password", $password); + args.put("email", $email); + args.put("questionid", $questionid); + args.put("answer", $answer); + return call_user_func(UC_API_FUNC, "user", "register", args); + } + + 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 + * @param $checkques + * @param $questionid + * @param $answer + * @return + */ + 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 : uc_unserialize($return); + } + + public String uc_user_synlogin(int $uid) { + Map args = new HashMap(); + args.put("uid", $uid); + String $return = uc_api_post("user", "synlogin", args); + return $return; + } + + public String uc_user_synlogout() { + String $return = uc_api_post("user", "synlogout", new HashMap()); + return $return; + } + + public String uc_get_user(String $username, int $isuid) { + Map args = new HashMap(); + args.put("username", $username); + args.put("isuid", $isuid); + String $return = call_user_func(UC_API_FUNC, "user", "get_user", args); + return UC_CONNECT.equals("mysql") ? $return : uc_unserialize($return); + } + + public String uc_user_edit(String $username, String $oldpw, String $newpw, String $email, int $ignoreoldpw, String $questionid, String $answer) { + Map args = new HashMap(); + args.put("username", $username); + args.put("oldpw", $oldpw); + args.put("newpw", $newpw); + args.put("email", $email); + args.put("ignoreoldpw", $ignoreoldpw); + args.put("questionid", $questionid); + args.put("answer", $answer); + return call_user_func(UC_API_FUNC, "user", "edit", args); + } + + public String uc_user_delete(String $uid) { + Map args = new HashMap(); + args.put("uid", $uid); + return call_user_func(UC_API_FUNC, "user", "delete", args); + } + + public String uc_user_deleteavatar(String $uid) { + Map args = new HashMap(); + args.put("uid", $uid); + return uc_api_post("user", "deleteavatar", args); + } +} 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..511fbd9b9 --- /dev/null +++ b/designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java @@ -0,0 +1,108 @@ +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; + +/** + * 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) { + e.printStackTrace(); + return null; + } + 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.toCharArray()),"iso-8859-1"); + } catch (Exception e) { + return e.getMessage(); + } + } + + protected String base64_encode(String input){ + try { + return new String(Base64.encode(input.getBytes("iso-8859-1"))); + } catch (Exception e) { + return e.getMessage(); + } + } + + 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) { + e.printStackTrace(); + } + return null; + } +} \ 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..09868af15 --- /dev/null +++ b/designer_base/src/com/fr/design/extra/ucenter/XMLHelper.java @@ -0,0 +1,36 @@ +package com.fr.design.extra.ucenter; + +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 Date: Fri, 9 Sep 2016 16:45:32 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E5=86=85=E7=BD=AE?= =?UTF-8?q?=E7=9A=84Base64?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../design/mainframe/bbs/UserInfoLabel.java | 4 +- .../com/fr/design/extra/ucenter/Base64.java | 256 ------------------ .../fr/design/extra/ucenter/PHPFunctions.java | 3 +- 3 files changed, 5 insertions(+), 258 deletions(-) delete mode 100644 designer_base/src/com/fr/design/extra/ucenter/Base64.java diff --git a/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java b/designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java index 54a2016eb..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; //消息条数 @@ -117,7 +119,7 @@ public class UserInfoLabel extends UILabel{ DesignerEnvManager.getEnvManager().setBBSName(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setBBSPassword(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setInShowBBsName(StringUtils.EMPTY); - DesignerEnvManager.getEnvManager().setBbsUid(Integer.parseInt(StringUtils.EMPTY)); + DesignerEnvManager.getEnvManager().setBbsUid(DEFAULT_BBS_UID); } private void updateInfoPane(){ diff --git a/designer_base/src/com/fr/design/extra/ucenter/Base64.java b/designer_base/src/com/fr/design/extra/ucenter/Base64.java deleted file mode 100644 index 199cc0bc8..000000000 --- a/designer_base/src/com/fr/design/extra/ucenter/Base64.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.fr.design.extra.ucenter; - -import java.io.*; - -/** - * Created by lp on 2016/9/9. - */ -public class Base64 { - /** - * returns an array of base64-encoded characters to represent the - * passed data array. - * - * @param data the array of bytes to encode - * @return base64-coded character array. - */ - public static char[] encode(byte[] data) { - char[] out = new char[((data.length + 2) / 3) * 4]; - - // - // 3 bytes encode to 4 chars. Output is always an even - // multiple of 4 characters. - // - for (int i = 0, index = 0; i < data.length; i += 3, index += 4) { - boolean quad = false; - boolean trip = false; - - int val = (0xFF & data[i]); - val <<= 8; - if ((i + 1) < data.length) { - val |= (0xFF & data[i + 1]); - trip = true; - } - val <<= 8; - if ((i + 2) < data.length) { - val |= (0xFF & data[i + 2]); - quad = true; - } - out[index + 3] = alphabet[(quad ? (val & 0x3F) : 64)]; - val >>= 6; - out[index + 2] = alphabet[(trip ? (val & 0x3F) : 64)]; - val >>= 6; - out[index + 1] = alphabet[val & 0x3F]; - val >>= 6; - out[index + 0] = alphabet[val & 0x3F]; - } - return out; - } - - /** - * Decodes a BASE-64 encoded stream to recover the original - * data. White space before and after will be trimmed away, - * but no other manipulation of the input will be performed. - * - * As of version 1.2 this method will properly handle input - * containing junk characters (newlines and the like) rather - * than throwing an error. It does this by pre-parsing the - * input and generating from that a count of VALID input - * characters. - **/ - public static byte[] decode(char[] data) { - // as our input could contain non-BASE64 data (newlines, - // whitespace of any sort, whatever) we must first adjust - // our count of USABLE data so that... - // (a) we don't misallocate the output array, and - // (b) think that we miscalculated our data length - // just because of extraneous throw-away junk - - int tempLen = data.length; - for (int ix = 0; ix < data.length; ix++) { - if ((data[ix] > 255) || codes[data[ix]] < 0) - --tempLen; // ignore non-valid chars and padding - } - // calculate required length: - // -- 3 bytes for every 4 valid base64 chars - // -- plus 2 bytes if there are 3 extra base64 chars, - // or plus 1 byte if there are 2 extra. - - int len = (tempLen / 4) * 3; - if ((tempLen % 4) == 3) - len += 2; - if ((tempLen % 4) == 2) - len += 1; - - byte[] out = new byte[len]; - - - int shift = 0; // # of excess bits stored in accum - int accum = 0; // excess bits - int index = 0; - - // we now go through the entire array (NOT using the 'tempLen' value) - for (int ix = 0; ix < data.length; ix++) { - int value = (data[ix] > 255) ? -1 : codes[data[ix]]; - - if (value >= 0)// skip over non-code - { - accum <<= 6; // bits shift up by 6 each time thru - shift += 6; // loop, with new bits being put in - accum |= value; // at the bottom. - if (shift >= 8)// whenever there are 8 or more shifted in, - { - shift -= 8; // write them out (from the top, leaving any - out[index++] = // excess at the bottom for next iteration. - (byte) ((accum >> shift) & 0xff); - } - } - // we will also have skipped processing a padding null byte ('=') here; - // these are used ONLY for padding to an even length and do not legally - // occur as encoded data. for this reason we can ignore the fact that - // no index++ operation occurs in that special case: the out[] array is - // initialized to all-zero bytes to start with and that works to our - // advantage in this combination. - } - - // if there is STILL something wrong we just have to throw up now! - if (index != out.length) { - throw new Error("Miscalculated data length (wrote " + - index + " instead of " + out.length + ")"); - } - - return out; - } - - - // - // code characters for values 0..63 - // - private static char[] alphabet = - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".toCharArray(); - - // - // lookup table for converting base64 characters to value in range 0..63 - // - private static byte[] codes = new byte[256]; - - static { - for (int i = 0; i < 256; i++) - codes[i] = -1; - for (int i = 'A'; i <= 'Z'; i++) - codes[i] = (byte) (i - 'A'); - for (int i = 'a'; i <= 'z'; i++) - codes[i] = (byte) (26 + i - 'a'); - for (int i = '0'; i <= '9'; i++) - codes[i] = (byte) (52 + i - '0'); - codes['+'] = 62; - codes['/'] = 63; - } - - - - - /////////////////////////////////////////////////// - // remainder (main method and helper functions) is - // for testing purposes only, feel free to clip it. - /////////////////////////////////////////////////// - - public static void main(String[] args) { - boolean decode = false; - - if (args.length == 0) { - System.out.println("usage: java Base64 [-d[ecode]] filename"); - System.exit(0); - } - for (int i = 0; i < args.length; i++) { - if ("-decode".equalsIgnoreCase(args[i])) - decode = true; - else if ("-d".equalsIgnoreCase(args[i])) - decode = true; - } - - String filename = args[args.length - 1]; - File file = new File(filename); - if (!file.exists()) { - System.out.println("Error: file '" + filename + "' doesn't exist!"); - System.exit(0); - } - - if (decode) { - char[] encoded = readChars(file); - byte[] decoded = decode(encoded); - writeBytes(file, decoded); - } - else { - byte[] decoded = readBytes(file); - char[] encoded = encode(decoded); - writeChars(file, encoded); - } - } - - private static byte[] readBytes(File file) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try { - InputStream fis = new FileInputStream(file); - InputStream is = new BufferedInputStream(fis); - int count = 0; - byte[] buf = new byte[16384]; - while ((count = is.read(buf)) != -1) { - if (count > 0) - baos.write(buf, 0, count); - } - is.close(); - } - catch (Exception e) { - e.printStackTrace(); - } - - return baos.toByteArray(); - } - - private static char[] readChars(File file) { - CharArrayWriter caw = new CharArrayWriter(); - try { - Reader fr = new FileReader(file); - Reader in = new BufferedReader(fr); - int count = 0; - char[] buf = new char[16384]; - while ((count = in.read(buf)) != -1) { - if (count > 0) - caw.write(buf, 0, count); - } - in.close(); - } - catch (Exception e) { - e.printStackTrace(); - } - - return caw.toCharArray(); - } - - private static void writeBytes(File file, byte[] data) { - try { - OutputStream fos = new FileOutputStream(file); - OutputStream os = new BufferedOutputStream(fos); - os.write(data); - os.close(); - } - catch (Exception e) { - e.printStackTrace(); - } - } - - private static void writeChars(File file, char[] data) { - try { - Writer fos = new FileWriter(file); - Writer os = new BufferedWriter(fos); - os.write(data); - os.close(); - } - catch (Exception e) { - e.printStackTrace(); - } - } - /////////////////////////////////////////////////// - // end of test code. - /////////////////////////////////////////////////// -} diff --git a/designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java b/designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java index 511fbd9b9..5e9ff8393 100644 --- a/designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java +++ b/designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java @@ -5,6 +5,7 @@ import java.net.URLEncoder; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Map; +import com.fr.base.Base64; /** * Created by lp on 2016/9/9. @@ -31,7 +32,7 @@ public abstract class PHPFunctions { protected String base64_decode(String input){ try { - return new String(Base64.decode(input.toCharArray()),"iso-8859-1"); + return new String(Base64.decode(input)); } catch (Exception e) { return e.getMessage(); } From d5f590a50673b99b393c93944028fe554acc8c99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=94=80?= Date: Fri, 9 Sep 2016 16:46:51 +0800 Subject: [PATCH 5/8] 1 1 --- designer_base/src/com/fr/design/extra/ucenter/Client.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/designer_base/src/com/fr/design/extra/ucenter/Client.java b/designer_base/src/com/fr/design/extra/ucenter/Client.java index 172488182..e8a172d5b 100644 --- a/designer_base/src/com/fr/design/extra/ucenter/Client.java +++ b/designer_base/src/com/fr/design/extra/ucenter/Client.java @@ -24,9 +24,9 @@ public class Client extends PHPFunctions{ public static String UC_APPID = "4"; public static String UC_CLIENT_VERSION = "1.0"; public static String UC_CLIENT_RELEASE = "20090212"; - public static String UC_ROOT = ""; //note ûĿͻ˵ĸĿ?? UC_CLIENTROOT - public static String UC_DATADIR = UC_ROOT + "./data/"; //note ûĵݻĿ?? - public static String UC_DATAURL = "UC_API" + "/data"; //note ûĵ?? URL + public static String UC_ROOT = ""; //note 用户中心客户端的根目�? UC_CLIENTROOT + public static String UC_DATADIR = UC_ROOT + "./data/"; //note 用户中心的数据缓存目�? + public static String UC_DATAURL = "UC_API" + "/data"; //note 用户中心的数�? URL public static String UC_API_FUNC = UC_CONNECT.equals("mysql") ? "uc_api_mysql" : "uc_api_post"; public static String[] uc_controls = {}; @@ -268,7 +268,7 @@ public class Client extends PHPFunctions{ } /** - * ȡ¼Ϣ + * 获取登录信息 * @param $username * @param $password * @param $isuid From 54d3347182849469f820bec90f23be38ca254f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=94=80?= Date: Fri, 9 Sep 2016 16:49:27 +0800 Subject: [PATCH 6/8] 1 1 --- designer_base/src/com/fr/design/extra/ucenter/Client.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/designer_base/src/com/fr/design/extra/ucenter/Client.java b/designer_base/src/com/fr/design/extra/ucenter/Client.java index e8a172d5b..8afcd0e49 100644 --- a/designer_base/src/com/fr/design/extra/ucenter/Client.java +++ b/designer_base/src/com/fr/design/extra/ucenter/Client.java @@ -24,9 +24,9 @@ public class Client extends PHPFunctions{ public static String UC_APPID = "4"; public static String UC_CLIENT_VERSION = "1.0"; public static String UC_CLIENT_RELEASE = "20090212"; - public static String UC_ROOT = ""; //note 用户中心客户端的根目�? UC_CLIENTROOT - public static String UC_DATADIR = UC_ROOT + "./data/"; //note 用户中心的数据缓存目�? - public static String UC_DATAURL = "UC_API" + "/data"; //note 用户中心的数�? URL + public static String UC_ROOT = ""; + public static String UC_DATADIR = UC_ROOT + "./data/"; + public static String UC_DATAURL = "UC_API" + "/data"; public static String UC_API_FUNC = UC_CONNECT.equals("mysql") ? "uc_api_mysql" : "uc_api_post"; public static String[] uc_controls = {}; From 295e0aaab398c0fa0e795ed2eea247a6092066ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=94=80?= Date: Fri, 9 Sep 2016 17:59:40 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fr/design/extra/LoginWebBridge.java | 5 +- .../com/fr/design/extra/ucenter/Client.java | 419 +++++++----------- .../fr/design/extra/ucenter/PHPFunctions.java | 18 +- .../fr/design/extra/ucenter/XMLHelper.java | 9 +- 4 files changed, 189 insertions(+), 262 deletions(-) diff --git a/designer_base/src/com/fr/design/extra/LoginWebBridge.java b/designer_base/src/com/fr/design/extra/LoginWebBridge.java index e20948128..c1c32b11f 100644 --- a/designer_base/src/com/fr/design/extra/LoginWebBridge.java +++ b/designer_base/src/com/fr/design/extra/LoginWebBridge.java @@ -133,8 +133,9 @@ public class LoginWebBridge { public void run() { sleep(CHECK_MESSAGE_TIME); 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()){ diff --git a/designer_base/src/com/fr/design/extra/ucenter/Client.java b/designer_base/src/com/fr/design/extra/ucenter/Client.java index 8afcd0e49..66796a0b7 100644 --- a/designer_base/src/com/fr/design/extra/ucenter/Client.java +++ b/designer_base/src/com/fr/design/extra/ucenter/Client.java @@ -1,11 +1,12 @@ package com.fr.design.extra.ucenter; +import com.fr.base.FRContext; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; -import java.net.MalformedURLException; import java.net.Socket; import java.net.URL; import java.util.HashMap; @@ -16,320 +17,238 @@ import java.util.Map; */ public class Client extends PHPFunctions{ - public static boolean IN_UC = true; public static String UC_IP = "211.149.195.54"; public static String UC_API = "http://bbs.fanruan.com/uc_server"; public static String UC_CONNECT = ""; public static String UC_KEY = "Rc85U37411p4zdvcedm8D4t4D3l9Sa42H0kd98Gbd82aA99a61S2Z5LbQ9u430M0"; public static String UC_APPID = "4"; - public static String UC_CLIENT_VERSION = "1.0"; public static String UC_CLIENT_RELEASE = "20090212"; public static String UC_ROOT = ""; - public static String UC_DATADIR = UC_ROOT + "./data/"; - public static String UC_DATAURL = "UC_API" + "/data"; public static String UC_API_FUNC = UC_CONNECT.equals("mysql") ? "uc_api_mysql" : "uc_api_post"; - public static String[] uc_controls = {}; - - protected String uc_serialize(String $arr, int $htmlon) { - return $arr; - } - - protected String uc_unserialize(String $s) { - return $s; - } - protected String uc_addslashes(String $string, int $force, boolean $strip) { - return $string; + public String uc_user_login(String username, String password) { + return uc_user_login(username, password, 0, 0); } - protected String daddslashes(String $string, int $force) { - return uc_addslashes($string, $force, false); + public String uc_user_login(String username, String password, int isuid, int checkques) { + return uc_user_login(username, password, isuid, checkques, "", ""); } - protected String uc_stripslashes(String $string) { - return $string; + /** + * 用户登录 + * @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; } - public String uc_api_post(String $module, String $action, Map $arg) { - StringBuffer $s = 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(uc_stripslashes(String.valueOf($v2))); - $sep2 = "&"; + /** + * 拼接发送的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 = "&"; } - $s.append($sep).append($s2); + str.append(sep).append(s2); } else { - $s.append($sep).append($k).append("=").append(urlencode(uc_stripslashes(String.valueOf($v)), "GBK")); + str.append(sep).append(k).append("=").append(urlencode(String.valueOf(v), "GBK")); } - $sep = "&"; + sep = "&"; } - String $postdata = uc_api_requestdata($module, $action, $s.toString(), ""); + String $postdata = uc_api_requestdata(module, action, str.toString(), ""); return uc_fopen2(UC_API + "/index.php", 500000, $postdata, "", true, UC_IP, 20, true); } - 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_api_mysql(String model, String action, Map args) { + return ""; } - protected String uc_api_url(String $module, String $action, String $arg, String $extra) { - String $url = UC_API + "/index.php?" + uc_api_requestdata($module, $action, $arg, $extra); - return $url; + public String uc_api_input(String data) { + String str = urlencode(uc_authcode(data + "&agent=" + md5("") + "&time=" + time(), "ENCODE", UC_KEY), "GBK"); + return str; } - public String uc_api_input(String $data) { - String $s = urlencode(uc_authcode($data + "&agent=" + md5("") + "&time=" + time(), "ENCODE", UC_KEY), "GBK"); - return $s; - } - - public String uc_api_mysql(String $model, String $action, Map $args) { - if ($action.charAt(0) != '_') { - return null; - } else { - return ""; - } + 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) { - return uc_authcode($string, $operation, null); + public String uc_authcode(String string, String operation, String key) { + return uc_authcode(string, operation, key, 0); } - public String uc_authcode(String $string, String $operation, String $key) { - return uc_authcode($string, $operation, $key, 0); - } - - 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]; + /** + * 内容加密 + * @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; + box[i] = i; } - - int[] $rndkey = new int[256]; - for (int $i = 0; $i <= 255; $i++) { - $rndkey[$i] = (int) $cryptkey.charAt($i % $key_length); + 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; + 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]))); + 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(); + if (operation.equals("DECODE")) { + String result = result1.toString(); try { - $result = new String($result.getBytes("iso-8859-1"), "gbk"); + result = new String(result.getBytes("iso-8859-1"), "gbk"); } catch (Exception e) { - $result = $result1.substring(0, $result1.length()); + 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); + 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("=", ""); + 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); + 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); } - protected String uc_fopen(String $url, int $limit, String $post, String $cookie, boolean $bysocket, String $ip, int $timeout, boolean $block) { - String $return = ""; - - URL $matches; - String $host = ""; - String $path = ""; - int $port = 80; + /** + * 本地模网络请求取数据 + * @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 (MalformedURLException e1) { + 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); + 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"); + 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()) { + 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(); + 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") { + 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("")) { + String data = reader.readLine(); + if (data == null || data.equals("")) { break; } else { - $return += $data; + result += data; } } - $fp.close(); + fp.close(); } } catch (IOException e) { - + FRContext.getLogger().info(e.getMessage()); } - return $return; - } - - public String uc_app_ls() { - String $return = call_user_func(UC_API_FUNC, "app", "ls", null); - return UC_CONNECT.equals("mysql") ? $return : uc_unserialize($return); - } - - public String uc_user_register(String $username, String $password, String $email) { - return uc_user_register($username, $password, $email, "", ""); - } - - public String uc_user_register(String $username, String $password, String $email, String $questionid, String $answer) { - Map args = new HashMap(); - args.put("username", $username); - args.put("password", $password); - args.put("email", $email); - args.put("questionid", $questionid); - args.put("answer", $answer); - return call_user_func(UC_API_FUNC, "user", "register", args); - } - - 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 - * @param $checkques - * @param $questionid - * @param $answer - * @return - */ - 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 : uc_unserialize($return); - } - - public String uc_user_synlogin(int $uid) { - Map args = new HashMap(); - args.put("uid", $uid); - String $return = uc_api_post("user", "synlogin", args); - return $return; - } - - public String uc_user_synlogout() { - String $return = uc_api_post("user", "synlogout", new HashMap()); - return $return; - } - - public String uc_get_user(String $username, int $isuid) { - Map args = new HashMap(); - args.put("username", $username); - args.put("isuid", $isuid); - String $return = call_user_func(UC_API_FUNC, "user", "get_user", args); - return UC_CONNECT.equals("mysql") ? $return : uc_unserialize($return); - } - - public String uc_user_edit(String $username, String $oldpw, String $newpw, String $email, int $ignoreoldpw, String $questionid, String $answer) { - Map args = new HashMap(); - args.put("username", $username); - args.put("oldpw", $oldpw); - args.put("newpw", $newpw); - args.put("email", $email); - args.put("ignoreoldpw", $ignoreoldpw); - args.put("questionid", $questionid); - args.put("answer", $answer); - return call_user_func(UC_API_FUNC, "user", "edit", args); - } - - public String uc_user_delete(String $uid) { - Map args = new HashMap(); - args.put("uid", $uid); - return call_user_func(UC_API_FUNC, "user", "delete", args); - } - - public String uc_user_deleteavatar(String $uid) { - Map args = new HashMap(); - args.put("uid", $uid); - return uc_api_post("user", "deleteavatar", args); + 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 index 5e9ff8393..f32912c07 100644 --- a/designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java +++ b/designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java @@ -6,11 +6,13 @@ 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); } @@ -20,8 +22,8 @@ public abstract class PHPFunctions { try { md = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - return null; + FRContext.getLogger().info(e.getMessage()); + return ""; } return byte2hex(md.digest(input.getBytes())); } @@ -34,7 +36,8 @@ public abstract class PHPFunctions { try { return new String(Base64.decode(input)); } catch (Exception e) { - return e.getMessage(); + FRContext.getLogger().info(e.getMessage()); + return ""; } } @@ -42,7 +45,8 @@ public abstract class PHPFunctions { try { return new String(Base64.encode(input.getBytes("iso-8859-1"))); } catch (Exception e) { - return e.getMessage(); + FRContext.getLogger().info(e.getMessage()); + return ""; } } @@ -64,7 +68,7 @@ public abstract class PHPFunctions { } protected String substr(String input,int begin){ - if(begin>0){ + if(begin > 0){ return input.substring(begin); }else{ return input.substring(input.length()+ begin); @@ -102,8 +106,8 @@ public abstract class PHPFunctions { try { return URLEncoder.encode(value,code); } catch (UnsupportedEncodingException e) { - e.printStackTrace(); + FRContext.getLogger().info(e.getMessage()); } - return null; + 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 index 09868af15..0b58b2bdd 100644 --- a/designer_base/src/com/fr/design/extra/ucenter/XMLHelper.java +++ b/designer_base/src/com/fr/design/extra/ucenter/XMLHelper.java @@ -1,5 +1,6 @@ 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; @@ -14,7 +15,9 @@ 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 { @@ -27,9 +30,9 @@ public class XMLHelper { result.add(nl.item(i).getTextContent()); } } catch (SAXException e) { - e.printStackTrace(); - } catch (IOException e) { - e.printStackTrace(); + FRContext.getLogger().info(e.getMessage()); + } catch (IOException e1) { + FRContext.getLogger().info(e1.getLocalizedMessage()); } return result; } From c0989e28fd8fcc2b22758be03521e405a0f2a1af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=94=80?= Date: Mon, 12 Sep 2016 19:21:48 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E7=BD=91=E5=9D=80=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/design/extra/PluginWebBridge.java | 5 ----- designer_base/src/com/fr/design/extra/ucenter/Client.java | 3 ++- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/designer_base/src/com/fr/design/extra/PluginWebBridge.java b/designer_base/src/com/fr/design/extra/PluginWebBridge.java index 23b6fa460..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; /** diff --git a/designer_base/src/com/fr/design/extra/ucenter/Client.java b/designer_base/src/com/fr/design/extra/ucenter/Client.java index 66796a0b7..eeb6cd57e 100644 --- a/designer_base/src/com/fr/design/extra/ucenter/Client.java +++ b/designer_base/src/com/fr/design/extra/ucenter/Client.java @@ -1,6 +1,7 @@ package com.fr.design.extra.ucenter; import com.fr.base.FRContext; +import com.fr.general.SiteCenter; import java.io.BufferedReader; import java.io.IOException; @@ -18,7 +19,7 @@ import java.util.Map; public class Client extends PHPFunctions{ public static String UC_IP = "211.149.195.54"; - public static String UC_API = "http://bbs.fanruan.com/uc_server"; + 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";