Browse Source

更改目前的设计器的论坛登录逻辑

将之前的使用shop的登录接口,改成设计器内实现登录,另外修改了之前的autoLogin操作,改成现在的直接登录
master
李攀 8 years ago
parent
commit
6dc2e9c872
  1. 1
      designer/src/com/fr/design/mainframe/bbs/UserInfoLabel.java
  2. 11
      designer/src/com/fr/design/mainframe/bbs/UserInfoPane.java
  3. 10
      designer_base/src/com/fr/design/DesignerEnvManager.java
  4. 140
      designer_base/src/com/fr/design/extra/LoginWebBridge.java
  5. 3
      designer_base/src/com/fr/design/extra/QQLoginWebBridge.java
  6. 2
      designer_base/src/com/fr/design/extra/exe/GetLoginInfoExecutor.java
  7. 256
      designer_base/src/com/fr/design/extra/ucenter/Base64.java
  8. 335
      designer_base/src/com/fr/design/extra/ucenter/Client.java
  9. 108
      designer_base/src/com/fr/design/extra/ucenter/PHPFunctions.java
  10. 36
      designer_base/src/com/fr/design/extra/ucenter/XMLHelper.java

1
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().setBBSName(StringUtils.EMPTY);
DesignerEnvManager.getEnvManager().setBBSPassword(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setBBSPassword(StringUtils.EMPTY);
DesignerEnvManager.getEnvManager().setInShowBBsName(StringUtils.EMPTY); DesignerEnvManager.getEnvManager().setInShowBBsName(StringUtils.EMPTY);
DesignerEnvManager.getEnvManager().setBbsUid(Integer.parseInt(StringUtils.EMPTY));
} }
private void updateInfoPane(){ private void updateInfoPane(){

11
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.base.FRContext;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.dialog.BasicPane; import com.fr.design.dialog.BasicPane;
import com.fr.design.extra.LoginWebBridge;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.general.DateUtils; import com.fr.general.DateUtils;
import com.fr.general.FRLogger; import com.fr.general.FRLogger;
@ -34,6 +35,9 @@ public class UserInfoPane extends BasicPane{
private static final int WIDTH = 104; private static final int WIDTH = 104;
private static final int HEIGHT = 24; private static final int HEIGHT = 24;
//登录成功
private static final String LOGININ = "0";
// 登录框弹出间隔时间 // 登录框弹出间隔时间
private static final int LOGIN_DIFF_DAY = 7; private static final int LOGIN_DIFF_DAY = 7;
// 等待国际化等相关初始化工作完成之后再弹出登录框 // 等待国际化等相关初始化工作完成之后再弹出登录框
@ -74,10 +78,11 @@ public class UserInfoPane extends BasicPane{
public void run() { public void run() {
String username = DesignerEnvManager.getEnvManager().getBBSName(); String username = DesignerEnvManager.getEnvManager().getBBSName();
String password = DesignerEnvManager.getEnvManager().getBBSPassword(); String password = DesignerEnvManager.getEnvManager().getBBSPassword();
if(!BBSLoginDialog.login(username, password)){ String loginResult = LoginWebBridge.getHelper().login(username, password);
markUnSignIn(); if (loginResult.equals(LOGININ)) {
}else{
markSignIn(username); markSignIn(username);
}else {
markUnSignIn();
} }
} }
}); });

10
designer_base/src/com/fr/design/DesignerEnvManager.java

@ -93,6 +93,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
private String bbsName; private String bbsName;
//当前设计器用户的论坛密码 //当前设计器用户的论坛密码
private String bbsPassword; private String bbsPassword;
//当前设计器用户的论坛ID
private int bbsUid;
//当前设计器用户的昵称显示(带消息) //当前设计器用户的昵称显示(带消息)
private String inShowBBsName; private String inShowBBsName;
//上一次登录弹窗的时间, 为了控制一天只弹一次窗口 //上一次登录弹窗的时间, 为了控制一天只弹一次窗口
@ -1151,6 +1153,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
this.bbsPassword = bbsPassword; this.bbsPassword = bbsPassword;
} }
public int getBbsUid() {
return bbsUid;
}
public void setBbsUid(int bbsUid) {
this.bbsUid = bbsUid;
}
public void setInShowBBsName(String inShowBBsName) { public void setInShowBBsName(String inShowBBsName) {
this.inShowBBsName = inShowBBsName; this.inShowBBsName = inShowBBsName;
} }

140
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.base.FRContext;
import com.fr.design.DesignerEnvManager; import com.fr.design.DesignerEnvManager;
import com.fr.design.dialog.UIDialog; 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.gui.ilable.UILabel;
import com.fr.design.mainframe.DesignerContext; import com.fr.design.mainframe.DesignerContext;
import com.fr.general.FRLogger;
import com.fr.general.SiteCenter; import com.fr.general.SiteCenter;
import com.fr.general.http.HttpClient; import com.fr.general.http.HttpClient;
import com.fr.json.JSONObject; import com.fr.json.JSONObject;
@ -14,12 +15,12 @@ import com.fr.stable.StringUtils;
import javafx.scene.web.WebEngine; import javafx.scene.web.WebEngine;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URI; import java.net.URI;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedList;
public class LoginWebBridge { public class LoginWebBridge {
@ -29,18 +30,22 @@ public class LoginWebBridge {
private static final String SUCCESS_MESSAGE_STATUS = "ok"; private static final String SUCCESS_MESSAGE_STATUS = "ok";
//数据通讯失败 //数据通讯失败
private static final String FAILED_MESSAGE_STATUS = "error"; private static final String FAILED_MESSAGE_STATUS = "error";
//消息条数 //消息条数
private int messageCount; private int messageCount;
//最低消息的条数 //最低消息的条数
private static final int MIN_MESSAGE_COUNT = 0; 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 LOGININ = "0";
private static final String LOGIN_INFO_EMPTY = "-1"; //用户名不存在
private static final String DISCONNECTED = "-2"; private static final String USERNAME_NOT_EXSIT = "-1";
private static final String LOGININFO_ERROR = "-3"; //密码错误
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 final int TIME_OUT = 10000;
private static com.fr.design.extra.LoginWebBridge helper; private static com.fr.design.extra.LoginWebBridge helper;
@ -52,6 +57,10 @@ public class LoginWebBridge {
return messageCount; return messageCount;
} }
/**
* 测试论坛网络连接
* @return
*/
private boolean testConnection() { private boolean testConnection() {
HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.test")); HttpClient client = new HttpClient(SiteCenter.getInstance().acquireUrlByKind("bbs.test"));
return client.isServerAlive(); return client.isServerAlive();
@ -94,6 +103,11 @@ public class LoginWebBridge {
setUserName(username, uiLabel); setUserName(username, uiLabel);
} }
/**
* 设置显示的用户名
* @param userName 登录用户名
* @param label label显示
*/
public void setUserName(String userName, UILabel label) { public void setUserName(String userName, UILabel label) {
if (uiLabel == null) { if (uiLabel == null) {
this.uiLabel = label; this.uiLabel = label;
@ -101,24 +115,23 @@ public class LoginWebBridge {
if(StringUtils.isEmpty(userName)){ if(StringUtils.isEmpty(userName)){
return; return;
} }
if(!StringUtils.isEmpty(this.userName)){ if(!StringUtils.isEmpty(this.userName)){
updateMessageCount(); updateMessageCount();
} }
//往designerenvmanger里写一下
DesignerEnvManager.getEnvManager().setBBSName(userName); DesignerEnvManager.getEnvManager().setBBSName(userName);
this.userName = userName; this.userName = userName;
} }
/**
* 定时取后台论坛消息
*/
private void updateMessageCount(){ private void updateMessageCount(){
//启动获取消息更新的线程 //启动获取消息更新的线程
//登陆状态, 根据存起来的用户名密码, 每1分钟发起一次请求, 更新消息条数. //登陆状态, 根据存起来的用户名密码, 每1分钟发起一次请求, 更新消息条数.
Thread updateMessageThread = new Thread(new Runnable() { Thread updateMessageThread = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
sleep(CHECK_MESSAGE_TIME); sleep(CHECK_MESSAGE_TIME);
//从env中获取username, 因为如果注销的话, env的里username会被清空.
while(StringUtils.isNotEmpty(DesignerEnvManager.getEnvManager().getBBSName())){ while(StringUtils.isNotEmpty(DesignerEnvManager.getEnvManager().getBBSName())){
HashMap<String, String> para = new HashMap<String, String>(); HashMap<String, String> para = new HashMap<String, String>();
para.put("username", encode(encode(userName))); para.put("username", encode(encode(userName)));
@ -145,6 +158,10 @@ public class LoginWebBridge {
updateMessageThread.start(); updateMessageThread.start();
} }
/**
* 设置获取的消息长度并设置显示
* @param count
*/
public void setMessageCount(int count) { public void setMessageCount(int count) {
if (count == MIN_MESSAGE_COUNT) { if (count == MIN_MESSAGE_COUNT) {
uiLabel.setText(DesignerEnvManager.getEnvManager().getBBSName()); uiLabel.setText(DesignerEnvManager.getEnvManager().getBBSName());
@ -199,45 +216,47 @@ public class LoginWebBridge {
} }
/** /**
* 登录操作的回调 * 设计器端的用户登录
* @param username * @param username 用户名
* @param password * @param password 密码
* @return * @return 登录信息标志
*/ */
public String defaultLogin(String username, String password) { public String defaultLogin(String username, String password) {
if (!StringUtils.isNotBlank(username) && !StringUtils.isNotBlank(password)) { return login(username, password, uiLabel);
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;
}
} }
/* /**
插件管理那边的登录 * 插件管理的用户登录部分
* @param username 用户名
* @param password 密码
* @param uiLabel 设计器端的label
* @return 登录信息标志
*/ */
public String pluginManageLogin(String username, String password, UILabel uiLabel) { 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)) { if (!StringUtils.isNotBlank(username) && !StringUtils.isNotBlank(password)) {
return LOGIN_INFO_EMPTY; return LOGIN_INFO_EMPTY;
} }
if (!testConnection()) { if (!testConnection()) {
return DISCONNECTED; return NET_FAILED;
} }
if (login(username, password)) { String loginResult = login(username, password);
if (loginResult.equals(LOGININ)) {
updateUserInfo(username, password); updateUserInfo(username, password);
uiLabel.setText(username); loginSuccess(username);
return LOGININ; setUserName(username, uiLabel);
}else {
return LOGININFO_ERROR;
} }
return loginResult;
} }
/** /**
@ -251,6 +270,11 @@ public class LoginWebBridge {
} }
} }
/**
* 更新后台的用户信息
* @param username 用户名
* @param password 密码
*/
public void updateUserInfo(String username,String password) { public void updateUserInfo(String username,String password) {
DesignerEnvManager.getEnvManager().setBBSName(username); DesignerEnvManager.getEnvManager().setBBSName(username);
DesignerEnvManager.getEnvManager().setBBSPassword(password); DesignerEnvManager.getEnvManager().setBBSPassword(password);
@ -285,28 +309,30 @@ public class LoginWebBridge {
}); });
} }
public boolean login(String username, String password) { public String login(String username, String password) {
if (StringUtils.isNotBlank(username) && StringUtils.isNotBlank(password)) {
try { try {
username = URLEncoder.encode(username, EncodeConstants.ENCODING_GBK); Client uc = new Client();
password = URLEncoder.encode(password, EncodeConstants.ENCODING_GBK); String result = uc.uc_user_login(username, password);
} catch (UnsupportedEncodingException e) { result = new String(result.getBytes("iso-8859-1"), "gbk");
FRLogger.getLogger().error(e.getMessage()); LinkedList<String> 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
} }
String url = SiteCenter.getInstance().acquireUrlByKind("bbs.login") + "&username=" + username + "&password=" + password; }else {
HttpClient client = new HttpClient(url); return NET_FAILED;
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) { }catch (Exception e) {
FRLogger.getLogger().error(e.getMessage()); FRContext.getLogger().info(e.getMessage());
}
}
} }
return false; return UNKNOWN_ERROR;
} }
} }

3
designer_base/src/com/fr/design/extra/QQLoginWebBridge.java

@ -106,10 +106,13 @@ public class QQLoginWebBridge {
String status = jo.get("status").toString(); String status = jo.get("status").toString();
if (status.equals(LOGINSUCCESS)) { if (status.equals(LOGINSUCCESS)) {
String username = jo.get("username").toString(); String username = jo.get("username").toString();
int uid = Integer.parseInt(jo.get("uid") == null ? "" : jo.get("uid").toString());
closeQQWindow(); closeQQWindow();
closeParentWindow(); closeParentWindow();
pluginuiLabel.setText(username); pluginuiLabel.setText(username);
DesignerEnvManager.getEnvManager().setBBSName(username); DesignerEnvManager.getEnvManager().setBBSName(username);
DesignerEnvManager.getEnvManager().setBbsUid(uid);
DesignerEnvManager.getEnvManager().setInShowBBsName(username);
}else if (status.equals(LOGINFAILED)){ }else if (status.equals(LOGINFAILED)){
//账号没有QQ授权 //账号没有QQ授权
closeQQWindow(); closeQQWindow();

2
designer_base/src/com/fr/design/extra/exe/GetLoginInfoExecutor.java

@ -30,7 +30,7 @@ public class GetLoginInfoExecutor implements Executor {
String inShowUsername = DesignerEnvManager.getEnvManager().getInShowBBsName(); String inShowUsername = DesignerEnvManager.getEnvManager().getInShowBBsName();
if (StringUtils.isEmpty(username) && StringUtils.isEmpty(inShowUsername)) { if (StringUtils.isEmpty(username) && StringUtils.isEmpty(inShowUsername)) {
}else { }else {
result = inShowUsername; result = StringUtils.isEmpty(inShowUsername) ? username : inShowUsername;
} }
} }
} }

256
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.
///////////////////////////////////////////////////
}

335
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<String, Object> $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<String, Object>) $v).keySet()) {
Object $v2 = ((Map<String, Object>) $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<String, Object> args = new HashMap<String, Object>();
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<String, Object> args = new HashMap<String, Object>();
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<String, Object> args = new HashMap<String, Object>();
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<String, Object>());
return $return;
}
public String uc_get_user(String $username, int $isuid) {
Map<String, Object> args = new HashMap<String, Object>();
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<String, Object> args = new HashMap<String, Object>();
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<String, Object> args = new HashMap<String, Object>();
args.put("uid", $uid);
return call_user_func(UC_API_FUNC, "user", "delete", args);
}
public String uc_user_deleteavatar(String $uid) {
Map<String, Object> args = new HashMap<String, Object>();
args.put("uid", $uid);
return uc_api_post("user", "deleteavatar", args);
}
}

108
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<String,Object> 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<String,Object> $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;
}
}

36
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<String> uc_unserialize(String input){
LinkedList<String> result = new LinkedList<String>();
DOMParser parser = new DOMParser();
try {
parser.parse(new InputSource(new StringReader(input)));
Document doc = parser.getDocument();
NodeList nl = doc.getChildNodes().item(0).getChildNodes();
int length = nl.getLength();
for(int i=0;i<length;i++){
if(nl.item(i).getNodeType()==Document.ELEMENT_NODE)
result.add(nl.item(i).getTextContent());
}
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
}
Loading…
Cancel
Save