token session

This commit is contained in:
Sola
2015-12-14 19:15:45 +08:00
parent 584331329b
commit 7c7a9461b3
17 changed files with 157 additions and 260 deletions

View File

@@ -0,0 +1,35 @@
package love.sola.netsupport.wechat;
import love.sola.netsupport.config.Settings;
import me.chanjar.weixin.common.session.StandardSessionManager;
import me.chanjar.weixin.common.session.WxSession;
import java.util.UUID;
/**
* ***********************************************
* Created by Sola on 2015/12/14.
* Don't modify this source without my agreement
* ***********************************************
*/
public class WechatSession {
private static StandardSessionManager manager;
static{
manager = new StandardSessionManager();
manager.setMaxInactiveInterval(Settings.I.User_Session_Max_Inactive);
}
public static WxSession get(String id, boolean create) {
return manager.getSession(id, create);
}
public static WxSession get(String id) {
return manager.getSession(id);
}
public static String genId() {
return UUID.randomUUID().toString();
}
}

View File

@@ -25,6 +25,28 @@ public class LoginHandler implements WxMpMessageHandler {
@Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
// try (Session s = SQLCore.sf.openSession()) {
// if (operator == null || operator.getAccess() == Access.NOLOGIN)
// return new Response(Response.ResponseCode.OPERATOR_NOT_FOUND);
// if (!wechat.equals(operator.getWechat()))
// return new Response(Response.ResponseCode.INCORRECT_WECHAT);
// if (!Crypto.check(password,operator.getPassword()))
// return new Response(Response.ResponseCode.WRONG_PASSWORD);
//
// return new Response(Response.ResponseCode.OK, operator);
// } catch (NumberFormatException e) {
// return new Response(Response.ResponseCode.ILLEGAL_PARAMETER);
// } catch (HibernateException e) {
// e.printStackTrace();
// return new Response(Response.ResponseCode.DATABASE_ERROR, e);
// } catch (Exception e) {
// e.printStackTrace();
// return new Response(Response.ResponseCode.INTERNAL_ERROR, e);
// }
// if (operator == null || operator.getAccess() == Access.NOLOGIN)
// return new Response(Response.ResponseCode.OPERATOR_NOT_FOUND);
TextBuilder out = WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName());
if (!TableOperator.has(wxMessage.getFromUserName())) {
return out.content(lang("Not_Operator")).build();

View File

@@ -1,13 +1,15 @@
package love.sola.netsupport.wechat.handler;
import love.sola.netsupport.api.Authorize;
import love.sola.netsupport.enums.Attribute;
import love.sola.netsupport.pojo.Ticket;
import love.sola.netsupport.pojo.User;
import love.sola.netsupport.sql.TableTicket;
import love.sola.netsupport.sql.TableUser;
import love.sola.netsupport.util.ParseUtil;
import love.sola.netsupport.wechat.Command;
import love.sola.netsupport.wechat.WechatSession;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.session.WxSession;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import me.chanjar.weixin.mp.api.WxMpService;
@@ -38,15 +40,18 @@ public class QueryHandler implements WxMpMessageHandler {
return WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName())
.content(lang("No_Ticket_Available")).build();
}
String id = WechatSession.genId();
WxSession session = WechatSession.get(id, true);
session.setAttribute(Attribute.AUTHORIZED, Command.QUERY);
session.setAttribute(Attribute.WECHAT, wxMessage.getFromUserName());
session.setAttribute(Attribute.USER, u);
NewsBuilder out = WxMpXmlOutMessage.NEWS().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName());
WxMpXmlOutNewsMessage.Item item = new WxMpXmlOutNewsMessage.Item();
item.setTitle(lang("Query_Title"));
item.setDescription(ParseUtil.parseTicket(t) + "\n" + lang("More_Details"));
item.setUrl(format("User_Query_Link", wxMessage.getFromUserName()));
item.setUrl(format("User_Query_Link", id));
out.addArticle(item);
Authorize.fetchedTime.put(wxMessage.getFromUserName(), System.currentTimeMillis());
Authorize.fetchedCommand.put(wxMessage.getFromUserName(), Command.QUERY);
return out.build();
}

View File

@@ -1,10 +1,12 @@
package love.sola.netsupport.wechat.handler;
import love.sola.netsupport.api.Authorize;
import love.sola.netsupport.enums.Attribute;
import love.sola.netsupport.pojo.User;
import love.sola.netsupport.sql.TableUser;
import love.sola.netsupport.wechat.Command;
import love.sola.netsupport.wechat.WechatSession;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.session.WxSession;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import me.chanjar.weixin.mp.api.WxMpService;
@@ -34,9 +36,11 @@ public class RegisterHandler implements WxMpMessageHandler {
if (u != null) {
out.content(lang("Already_Registered"));
} else {
out.content(format("User_Register_Link", wxMessage.getFromUserName()));
Authorize.fetchedTime.put(wxMessage.getFromUserName(), System.currentTimeMillis());
Authorize.fetchedCommand.put(wxMessage.getFromUserName(), Command.REGISTER);
String id = WechatSession.genId();
WxSession session = WechatSession.get(id, true);
session.setAttribute(Attribute.AUTHORIZED, Command.REGISTER);
session.setAttribute(Attribute.WECHAT, wxMessage.getFromUserName());
out.content(format("User_Register_Link", id));
}
return out.build();
}

View File

@@ -1,11 +1,13 @@
package love.sola.netsupport.wechat.handler;
import love.sola.netsupport.api.Authorize;
import love.sola.netsupport.enums.Attribute;
import love.sola.netsupport.pojo.User;
import love.sola.netsupport.sql.TableTicket;
import love.sola.netsupport.sql.TableUser;
import love.sola.netsupport.wechat.Command;
import love.sola.netsupport.wechat.WechatSession;
import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.session.WxSession;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpMessageHandler;
import me.chanjar.weixin.mp.api.WxMpService;
@@ -34,14 +36,18 @@ public class SubmitHandler implements WxMpMessageHandler {
return WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName())
.content(lang("Already_Opening_Ticket")).build();
}
String id = WechatSession.genId();
WxSession session = WechatSession.get(id, true);
session.setAttribute(Attribute.AUTHORIZED, Command.QUERY);
session.setAttribute(Attribute.WECHAT, wxMessage.getFromUserName());
session.setAttribute(Attribute.USER, u);
NewsBuilder out = WxMpXmlOutMessage.NEWS().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName());
WxMpXmlOutNewsMessage.Item item = new WxMpXmlOutNewsMessage.Item();
item.setTitle(lang("Submit_Title"));
item.setDescription(lang("Submit_Desc"));
item.setUrl(format("User_Submit_Link", wxMessage.getFromUserName(), u.getName(), u.getIsp().id, u.getRoom(), u.getBlock(), u.getPhone()));
item.setUrl(format("User_Submit_Link", id, u.getName(), u.getIsp().id, u.getRoom(), u.getBlock(), u.getPhone()));
out.addArticle(item);
Authorize.fetchedTime.put(wxMessage.getFromUserName(), System.currentTimeMillis());
Authorize.fetchedCommand.put(wxMessage.getFromUserName(), Command.SUBMIT);
return out.build();
}