diff --git a/src/main/java/love/sola/netsupport/util/Redirect.java b/src/main/java/love/sola/netsupport/util/Redirect.java index 54fed1f..cb90b39 100644 --- a/src/main/java/love/sola/netsupport/util/Redirect.java +++ b/src/main/java/love/sola/netsupport/util/Redirect.java @@ -45,12 +45,12 @@ public class Redirect { } public RedirectBuilder msg(String msg) { - sb.append("msg=").append(i18nThenEscape(msg)).append("&"); + sb.append("msg=").append(escape(msg)).append("&"); return this; } public RedirectBuilder title(String title) { - sb.append("title=").append(i18nThenEscape(title)).append("&"); + sb.append("title=").append(escape(title)).append("&"); return this; } @@ -60,7 +60,7 @@ public class Redirect { } public RedirectBuilder button(String text) { - sb.append("btn=").append(i18nThenEscape(text)).append("&"); + sb.append("btn=").append(escape(text)).append("&"); return this; } @@ -70,7 +70,7 @@ public class Redirect { } public RedirectBuilder to(String url) { - sb.append("redirect=").append(i18nThenEscape(url)).append("&"); + sb.append("redirect=").append(escape(url)).append("&"); return this; } @@ -82,8 +82,8 @@ public class Redirect { return sb.toString(); } - private static String i18nThenEscape(String str) { - return UrlEscapers.urlFragmentEscaper().escape(lang(str)); + private static String escape(String str) { + return UrlEscapers.urlFragmentEscaper().escape(str); } } diff --git a/src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java index 4728823..2737cf8 100644 --- a/src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java +++ b/src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java @@ -1,10 +1,12 @@ package love.sola.netsupport.wechat.handler; +import love.sola.netsupport.auth.OAuth2Handler; import love.sola.netsupport.enums.Attribute; import love.sola.netsupport.pojo.User; import love.sola.netsupport.session.WechatSession; import love.sola.netsupport.session.WxSession; import love.sola.netsupport.sql.TableUser; +import love.sola.netsupport.util.Redirect; import love.sola.netsupport.wechat.Command; import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.session.WxSessionManager; @@ -14,9 +16,12 @@ import me.chanjar.weixin.mp.bean.WxMpXmlMessage; import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; import me.chanjar.weixin.mp.bean.outxmlbuilder.TextBuilder; +import javax.servlet.AsyncContext; +import javax.servlet.http.HttpServletResponse; import java.util.Map; import static love.sola.netsupport.config.Lang.format; +import static love.sola.netsupport.config.Lang.lang; /** * *********************************************** @@ -24,7 +29,7 @@ import static love.sola.netsupport.config.Lang.format; * Don't modify this source without my agreement * *********************************************** */ -public class ProfileHandler implements WxMpMessageHandler { +public class ProfileHandler implements WxMpMessageHandler, OAuth2Handler { @Override public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException { @@ -38,4 +43,25 @@ public class ProfileHandler implements WxMpMessageHandler { return out.build(); } + @Override + public void onOAuth2(AsyncContext acxt, HttpServletResponse resp, String user, WxSession session) { + try { + User u = TableUser.getByWechat(user); + if (u == null) { + session.setAttribute(Attribute.AUTHORIZED, Command.REGISTER); + session.setAttribute(Attribute.WECHAT, user); + Redirect.error().icon(Redirect.WeUIIcon.INFO).noButton() + .title(lang("Need_Register_Title")).msg(lang("Need_Register")) + .to(format(lang("User_Register_Link"), session.getId())).go(resp); + return; + } + session.setAttribute(Attribute.AUTHORIZED, Command.PROFILE); + session.setAttribute(Attribute.WECHAT, user); + session.setAttribute(Attribute.USER, u); + resp.sendRedirect(format("User_Profile_Link", session.getId(), u.getName(), u.getIsp().id, u.getNetAccount(), u.getBlock(), u.getRoom(), u.getPhone())); + } catch (Exception e) { + e.printStackTrace(); + } + } + } diff --git a/src/main/java/love/sola/netsupport/wechat/handler/admin/LoginHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/admin/LoginHandler.java index 1117ef6..c15e481 100644 --- a/src/main/java/love/sola/netsupport/wechat/handler/admin/LoginHandler.java +++ b/src/main/java/love/sola/netsupport/wechat/handler/admin/LoginHandler.java @@ -62,12 +62,12 @@ public class LoginHandler implements WxMpMessageHandler, OAuth2Handler { Operator operator = TableOperator.get(user); if (operator == null) { Redirect.error().icon(Redirect.WeUIIcon.WARN_SAFE).noButton() - .title("Not_Operator").msg("Not_Operator_OAuth2").go(resp); + .title(lang("Not_Operator")).msg(lang("Not_Operator_OAuth2")).go(resp); return; } if (operator.getAccess() >= Access.NO_LOGIN) { Redirect.error().icon(Redirect.WeUIIcon.WAITING).noButton() - .title("Left_Operator_Title").msg("Left_Operator").go(resp); + .title(lang("Left_Operator_Title")).msg(lang("Left_Operator")).go(resp); return; } session.setAttribute(Attribute.AUTHORIZED, Command.LOGIN); diff --git a/src/main/java/love/sola/netsupport/wechat/handler/admin/OperatorInfoHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/admin/OperatorInfoHandler.java index df13755..38bfaa7 100644 --- a/src/main/java/love/sola/netsupport/wechat/handler/admin/OperatorInfoHandler.java +++ b/src/main/java/love/sola/netsupport/wechat/handler/admin/OperatorInfoHandler.java @@ -1,6 +1,5 @@ package love.sola.netsupport.wechat.handler.admin; -import love.sola.netsupport.enums.Access; import love.sola.netsupport.pojo.Operator; import love.sola.netsupport.sql.TableOperator; import me.chanjar.weixin.common.exception.WxErrorException; @@ -29,10 +28,10 @@ public class OperatorInfoHandler implements WxMpMessageHandler { TextBuilder out = WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName()); try { Operator op = TableOperator.get(wxMessage.getFromUserName()); - if (op == null) + if (op == null) { out.content(lang("Not_Operator")); - else if (op.getAccess() >= Access.NO_LOGIN) { - out.content(lang("No_Login")); +// } else if (op.getAccess() >= Access.NO_LOGIN) { +// out.content(lang("No_Login")); } else { out.content(format("Operator_Info", op.getId(), op.getName(), op.getAccess(), op.getBlock(), op.getWeek())); } diff --git a/src/main/resources/lang.yml b/src/main/resources/lang.yml index c2ea928..cabfc96 100644 --- a/src/main/resources/lang.yml +++ b/src/main/resources/lang.yml @@ -42,6 +42,8 @@ User_Cancel_Remark: '用户手动取消报修。' Cancel_Failed: '取消失败。' #Modify Profile_Modify: '> 点此修改资料 <' +Need_Register_Title: '尚未进行微信绑定' +Need_Register: '您尚未进行微信绑定,3秒后将自动跳转至微信绑定页面。' #Login Home_Page_Msg: 'CLICK HERE' Not_Operator: '嘟嘟嘟……' @@ -59,7 +61,7 @@ Operator_Info: | 值班片区: {3,choice,0#'全图 >ω<'|1#岐头片区|2#北门片区|3#东门片区|4#香灰片区|5#凤翔片区} 值班日: {4,choice,0#'2月30日 >ω<'|1#周一|2#周二|3#周三|4#周四|5#周五|6#周六|7#周日} - 若以上信息有误,请及时联系@15-排污-沙子森。 + 若以上信息有误,请及时联系@15-沙子森。 #URL User_Register_Link: 'http://topaz.sinaapp.com/nm/v2/user/reg.html?token={0}' User_Query_Link: 'http://topaz.sinaapp.com/nm/v2/user/list.html?token={0}' diff --git a/src/test/java/love/sola/netsupport/util/URLEncodeTest.java b/src/test/java/love/sola/netsupport/util/URLEncodeTest.java index ec11410..69b1423 100644 --- a/src/test/java/love/sola/netsupport/util/URLEncodeTest.java +++ b/src/test/java/love/sola/netsupport/util/URLEncodeTest.java @@ -27,7 +27,7 @@ public class URLEncodeTest { .title("Test Title") .msg("Test Message") .toString(), - equalTo("http://topaz.sinaapp.com/nm/v2/result.html?type=1&title=!!Test%20Title!!&msg=!!Test%20Message!!&") + equalTo("http://topaz.sinaapp.com/nm/v2/result.html?type=1&title=Test%20Title&msg=Test%20Message&") ); }