add oauth2 for profile modify

This commit is contained in:
Sola
2016-03-27 13:15:20 +08:00
parent 850e45a2d8
commit a4dea5a21c
6 changed files with 42 additions and 15 deletions

View File

@@ -45,12 +45,12 @@ public class Redirect {
} }
public RedirectBuilder msg(String msg) { public RedirectBuilder msg(String msg) {
sb.append("msg=").append(i18nThenEscape(msg)).append("&"); sb.append("msg=").append(escape(msg)).append("&");
return this; return this;
} }
public RedirectBuilder title(String title) { public RedirectBuilder title(String title) {
sb.append("title=").append(i18nThenEscape(title)).append("&"); sb.append("title=").append(escape(title)).append("&");
return this; return this;
} }
@@ -60,7 +60,7 @@ public class Redirect {
} }
public RedirectBuilder button(String text) { public RedirectBuilder button(String text) {
sb.append("btn=").append(i18nThenEscape(text)).append("&"); sb.append("btn=").append(escape(text)).append("&");
return this; return this;
} }
@@ -70,7 +70,7 @@ public class Redirect {
} }
public RedirectBuilder to(String url) { public RedirectBuilder to(String url) {
sb.append("redirect=").append(i18nThenEscape(url)).append("&"); sb.append("redirect=").append(escape(url)).append("&");
return this; return this;
} }
@@ -82,8 +82,8 @@ public class Redirect {
return sb.toString(); return sb.toString();
} }
private static String i18nThenEscape(String str) { private static String escape(String str) {
return UrlEscapers.urlFragmentEscaper().escape(lang(str)); return UrlEscapers.urlFragmentEscaper().escape(str);
} }
} }

View File

@@ -1,10 +1,12 @@
package love.sola.netsupport.wechat.handler; package love.sola.netsupport.wechat.handler;
import love.sola.netsupport.auth.OAuth2Handler;
import love.sola.netsupport.enums.Attribute; import love.sola.netsupport.enums.Attribute;
import love.sola.netsupport.pojo.User; import love.sola.netsupport.pojo.User;
import love.sola.netsupport.session.WechatSession; import love.sola.netsupport.session.WechatSession;
import love.sola.netsupport.session.WxSession; import love.sola.netsupport.session.WxSession;
import love.sola.netsupport.sql.TableUser; import love.sola.netsupport.sql.TableUser;
import love.sola.netsupport.util.Redirect;
import love.sola.netsupport.wechat.Command; import love.sola.netsupport.wechat.Command;
import me.chanjar.weixin.common.exception.WxErrorException; import me.chanjar.weixin.common.exception.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager; 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.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.bean.outxmlbuilder.TextBuilder; import me.chanjar.weixin.mp.bean.outxmlbuilder.TextBuilder;
import javax.servlet.AsyncContext;
import javax.servlet.http.HttpServletResponse;
import java.util.Map; import java.util.Map;
import static love.sola.netsupport.config.Lang.format; 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 * Don't modify this source without my agreement
* *********************************************** * ***********************************************
*/ */
public class ProfileHandler implements WxMpMessageHandler { public class ProfileHandler implements WxMpMessageHandler, OAuth2Handler {
@Override @Override
public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException { public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
@@ -38,4 +43,25 @@ public class ProfileHandler implements WxMpMessageHandler {
return out.build(); 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();
}
}
} }

View File

@@ -62,12 +62,12 @@ public class LoginHandler implements WxMpMessageHandler, OAuth2Handler {
Operator operator = TableOperator.get(user); Operator operator = TableOperator.get(user);
if (operator == null) { if (operator == null) {
Redirect.error().icon(Redirect.WeUIIcon.WARN_SAFE).noButton() 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; return;
} }
if (operator.getAccess() >= Access.NO_LOGIN) { if (operator.getAccess() >= Access.NO_LOGIN) {
Redirect.error().icon(Redirect.WeUIIcon.WAITING).noButton() 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; return;
} }
session.setAttribute(Attribute.AUTHORIZED, Command.LOGIN); session.setAttribute(Attribute.AUTHORIZED, Command.LOGIN);

View File

@@ -1,6 +1,5 @@
package love.sola.netsupport.wechat.handler.admin; package love.sola.netsupport.wechat.handler.admin;
import love.sola.netsupport.enums.Access;
import love.sola.netsupport.pojo.Operator; import love.sola.netsupport.pojo.Operator;
import love.sola.netsupport.sql.TableOperator; import love.sola.netsupport.sql.TableOperator;
import me.chanjar.weixin.common.exception.WxErrorException; 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()); TextBuilder out = WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName());
try { try {
Operator op = TableOperator.get(wxMessage.getFromUserName()); Operator op = TableOperator.get(wxMessage.getFromUserName());
if (op == null) if (op == null) {
out.content(lang("Not_Operator")); out.content(lang("Not_Operator"));
else if (op.getAccess() >= Access.NO_LOGIN) { // } else if (op.getAccess() >= Access.NO_LOGIN) {
out.content(lang("No_Login")); // out.content(lang("No_Login"));
} else { } else {
out.content(format("Operator_Info", op.getId(), op.getName(), op.getAccess(), op.getBlock(), op.getWeek())); out.content(format("Operator_Info", op.getId(), op.getName(), op.getAccess(), op.getBlock(), op.getWeek()));
} }

View File

@@ -42,6 +42,8 @@ User_Cancel_Remark: '用户手动取消报修。'
Cancel_Failed: '取消失败。' Cancel_Failed: '取消失败。'
#Modify #Modify
Profile_Modify: '<a href="{0}">> 点此修改资料 <</a>' Profile_Modify: '<a href="{0}">> 点此修改资料 <</a>'
Need_Register_Title: '尚未进行微信绑定'
Need_Register: '您尚未进行微信绑定3秒后将自动跳转至微信绑定页面。'
#Login #Login
Home_Page_Msg: '<a href="{0}">CLICK HERE</a>' Home_Page_Msg: '<a href="{0}">CLICK HERE</a>'
Not_Operator: '嘟嘟嘟……' Not_Operator: '嘟嘟嘟……'
@@ -59,7 +61,7 @@ Operator_Info: |
值班片区: {3,choice,0#'全图 >ω<'|1#岐头片区|2#北门片区|3#东门片区|4#香灰片区|5#凤翔片区} 值班片区: {3,choice,0#'全图 >ω<'|1#岐头片区|2#北门片区|3#东门片区|4#香灰片区|5#凤翔片区}
值班日: {4,choice,0#'2月30日 >ω<'|1#周一|2#周二|3#周三|4#周四|5#周五|6#周六|7#周日} 值班日: {4,choice,0#'2月30日 >ω<'|1#周一|2#周二|3#周三|4#周四|5#周五|6#周六|7#周日}
若以上信息有误,请及时联系@15-排污-沙子森。 若以上信息有误,请及时联系@15-沙子森。
#URL #URL
User_Register_Link: 'http://topaz.sinaapp.com/nm/v2/user/reg.html?token={0}' 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}' User_Query_Link: 'http://topaz.sinaapp.com/nm/v2/user/list.html?token={0}'

View File

@@ -27,7 +27,7 @@ public class URLEncodeTest {
.title("Test Title") .title("Test Title")
.msg("Test Message") .msg("Test Message")
.toString(), .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&")
); );
} }