From 5299d06f5f38a9b26fa3386843c2ba31c8c34a37 Mon Sep 17 00:00:00 2001 From: Sola Date: Tue, 15 Dec 2015 16:48:01 +0800 Subject: [PATCH 1/5] improve login --- src/main/java/love/sola/netsupport/Login.java | 34 +++++++++++++++++++ .../sola/netsupport/api/ProfileModify.java | 17 ++++++++++ .../love/sola/netsupport/api/Register.java | 2 +- .../api/admin/{ => root}/DashBoard.java | 14 ++++++-- .../api/admin/{ => root}/GetUser.java | 2 +- src/main/resources/lang.yml | 1 + 6 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 src/main/java/love/sola/netsupport/Login.java create mode 100644 src/main/java/love/sola/netsupport/api/ProfileModify.java rename src/main/java/love/sola/netsupport/api/admin/{ => root}/DashBoard.java (83%) rename src/main/java/love/sola/netsupport/api/admin/{ => root}/GetUser.java (98%) diff --git a/src/main/java/love/sola/netsupport/Login.java b/src/main/java/love/sola/netsupport/Login.java new file mode 100644 index 0000000..02f2d87 --- /dev/null +++ b/src/main/java/love/sola/netsupport/Login.java @@ -0,0 +1,34 @@ +package love.sola.netsupport; + +import love.sola.netsupport.util.RSAUtil; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +import static love.sola.netsupport.config.Lang.format; + +/** + * *********************************************** + * Created by Sola on 2015/12/12. + * Don't modify this source without my agreement + * *********************************************** + */ + +@WebServlet(name = "LoginRedirect", urlPatterns = "/login", loadOnStartup = 2) +public class Login extends HttpServlet { + + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doGet(request, response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + response.setCharacterEncoding("utf-8"); + response.sendRedirect(format("Operator_Login_Page", RSAUtil.publicKey_s)); + } + +} \ No newline at end of file diff --git a/src/main/java/love/sola/netsupport/api/ProfileModify.java b/src/main/java/love/sola/netsupport/api/ProfileModify.java new file mode 100644 index 0000000..d45d41f --- /dev/null +++ b/src/main/java/love/sola/netsupport/api/ProfileModify.java @@ -0,0 +1,17 @@ +package love.sola.netsupport.api; + +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; + +/** + * *********************************************** + * Created by Sola on 2015/12/15. + * Don't modify this source without my agreement + * *********************************************** + */ +@WebServlet(name = "Register", urlPatterns = "/api/register", loadOnStartup = 22) +public class ProfileModify extends HttpServlet { + + + +} diff --git a/src/main/java/love/sola/netsupport/api/Register.java b/src/main/java/love/sola/netsupport/api/Register.java index 55e60b8..c802d12 100644 --- a/src/main/java/love/sola/netsupport/api/Register.java +++ b/src/main/java/love/sola/netsupport/api/Register.java @@ -26,7 +26,7 @@ import java.io.PrintWriter; * Don't modify this source without my agreement * *********************************************** */ -@WebServlet(name = "Register", urlPatterns = "/api/register", loadOnStartup = 22) +@WebServlet(name = "Register", urlPatterns = "/api/register", loadOnStartup = 21) public class Register extends HttpServlet { public static final String STUDENT_ID_REGEX = "^(2010|2012|2013|2014|2015)[0-9]{9}$"; diff --git a/src/main/java/love/sola/netsupport/api/admin/DashBoard.java b/src/main/java/love/sola/netsupport/api/admin/root/DashBoard.java similarity index 83% rename from src/main/java/love/sola/netsupport/api/admin/DashBoard.java rename to src/main/java/love/sola/netsupport/api/admin/root/DashBoard.java index 0f3e5ef..9ca43e8 100644 --- a/src/main/java/love/sola/netsupport/api/admin/DashBoard.java +++ b/src/main/java/love/sola/netsupport/api/admin/root/DashBoard.java @@ -1,6 +1,9 @@ -package love.sola.netsupport.api.admin; +package love.sola.netsupport.api.admin.root; import com.google.gson.Gson; +import love.sola.netsupport.enums.Access; +import love.sola.netsupport.enums.Attribute; +import love.sola.netsupport.pojo.Operator; import love.sola.netsupport.sql.SQLCore; import love.sola.netsupport.util.Checker; import love.sola.netsupport.wechat.Command; @@ -24,7 +27,7 @@ import java.util.Enumeration; * *********************************************** */ -@WebServlet(name = "dashboard", urlPatterns = "/api/admin/dashboard", loadOnStartup = 41) +@WebServlet(name = "Dashboard", urlPatterns = "/api/admin/dashboard", loadOnStartup = 41) public class DashBoard extends HttpServlet { private Gson gson = SQLCore.gson; @@ -49,6 +52,13 @@ public class DashBoard extends HttpServlet { out.println("Unauthorized"); return; } + + Operator op = (Operator) session.getAttribute(Attribute.OPERATOR); + if (op.getAccess() != Access.ROOT) { + out.println("Unauthorized"); + return; + } + for (InternalSession s : WechatSession.list()) { out.println("=====" + s.getIdInternal() + "====="); WxSession ws = s.getSession(); diff --git a/src/main/java/love/sola/netsupport/api/admin/GetUser.java b/src/main/java/love/sola/netsupport/api/admin/root/GetUser.java similarity index 98% rename from src/main/java/love/sola/netsupport/api/admin/GetUser.java rename to src/main/java/love/sola/netsupport/api/admin/root/GetUser.java index 1483dec..8d36e53 100644 --- a/src/main/java/love/sola/netsupport/api/admin/GetUser.java +++ b/src/main/java/love/sola/netsupport/api/admin/root/GetUser.java @@ -1,4 +1,4 @@ -package love.sola.netsupport.api.admin; +package love.sola.netsupport.api.admin.root; import com.google.gson.Gson; import love.sola.netsupport.api.Response; diff --git a/src/main/resources/lang.yml b/src/main/resources/lang.yml index 9c71d66..699769c 100644 --- a/src/main/resources/lang.yml +++ b/src/main/resources/lang.yml @@ -46,6 +46,7 @@ User_Query_Link: 'http://topaz.sinaapp.com/nm/v1/list.html?token={0}' User_Submit_Link: 'http://topaz.sinaapp.com/nm/v1/rrepair.html?token={0}&name={1}&isp={2}&room={3}&block={4}&phone={5,number,#}' Result_Page: 'http://topaz.sinaapp.com/nm/v1/result.html' Operator_Home_Page: 'CLICK HERE' +Operator_Login_Page: '' #Localized #Status From 72d92748f08a528e23c178aeceea0894cc75bf1c Mon Sep 17 00:00:00 2001 From: Sola Date: Tue, 15 Dec 2015 17:29:53 +0800 Subject: [PATCH 2/5] init --- .../sola/netsupport/api/ProfileModify.java | 29 ++++++++++++++++++- .../love/sola/netsupport/api/Register.java | 1 - 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/main/java/love/sola/netsupport/api/ProfileModify.java b/src/main/java/love/sola/netsupport/api/ProfileModify.java index d45d41f..3319733 100644 --- a/src/main/java/love/sola/netsupport/api/ProfileModify.java +++ b/src/main/java/love/sola/netsupport/api/ProfileModify.java @@ -1,7 +1,16 @@ package love.sola.netsupport.api; +import com.google.gson.Gson; +import love.sola.netsupport.sql.SQLCore; +import love.sola.netsupport.util.ParseUtil; + +import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; /** * *********************************************** @@ -9,9 +18,27 @@ import javax.servlet.http.HttpServlet; * Don't modify this source without my agreement * *********************************************** */ -@WebServlet(name = "Register", urlPatterns = "/api/register", loadOnStartup = 22) +@WebServlet(name = "ProfileModify", urlPatterns = "/api/profilemodify", loadOnStartup = 22) public class ProfileModify extends HttpServlet { + private Gson gson = SQLCore.gson; + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doGet(request, response); + } + + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + response.setCharacterEncoding("utf-8"); + response.addHeader("Content-type", "text/json;charset=utf-8"); + PrintWriter out = response.getWriter(); + String json = gson.toJson(process(request)); + out.println(ParseUtil.parseJsonP(request, json)); + out.close(); + } + + private Response process(HttpServletRequest request) { + return null; + } } diff --git a/src/main/java/love/sola/netsupport/api/Register.java b/src/main/java/love/sola/netsupport/api/Register.java index c802d12..1cebc8a 100644 --- a/src/main/java/love/sola/netsupport/api/Register.java +++ b/src/main/java/love/sola/netsupport/api/Register.java @@ -73,7 +73,6 @@ public class Register extends HttpServlet { out.close(); } - @SuppressWarnings("Duplicates") protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } From fa572b2d36cf2fcb2f804ca04a8a928819546719 Mon Sep 17 00:00:00 2001 From: Sola Date: Tue, 15 Dec 2015 19:30:53 +0800 Subject: [PATCH 3/5] improve room check --- .../sola/netsupport/api/ProfileModify.java | 16 +++++ .../love/sola/netsupport/api/Register.java | 64 +----------------- .../love/sola/netsupport/enums/Block.java | 41 ++++++++++++ .../love/sola/netsupport/util/Checker.java | 65 +++++++++++++++++++ 4 files changed, 124 insertions(+), 62 deletions(-) diff --git a/src/main/java/love/sola/netsupport/api/ProfileModify.java b/src/main/java/love/sola/netsupport/api/ProfileModify.java index 3319733..12624a4 100644 --- a/src/main/java/love/sola/netsupport/api/ProfileModify.java +++ b/src/main/java/love/sola/netsupport/api/ProfileModify.java @@ -1,8 +1,13 @@ package love.sola.netsupport.api; import com.google.gson.Gson; +import love.sola.netsupport.enums.Attribute; +import love.sola.netsupport.pojo.User; import love.sola.netsupport.sql.SQLCore; +import love.sola.netsupport.util.Checker; import love.sola.netsupport.util.ParseUtil; +import love.sola.netsupport.wechat.Command; +import me.chanjar.weixin.common.session.WxSession; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -38,6 +43,17 @@ public class ProfileModify extends HttpServlet { } private Response process(HttpServletRequest request) { + WxSession session = Checker.isAuthorized(request, Command.QUERY); + if (session == null) { + return new Response(Response.ResponseCode.UNAUTHORIZED); + } + User u = (User) session.getAttribute(Attribute.USER); + if (u == null) return new Response(Response.ResponseCode.UNAUTHORIZED); + String isp = request.getParameter("isp"); + String netaccount = request.getParameter("username"); + String block = request.getParameter("block"); + String room = request.getParameter("room"); + String phone = request.getParameter("phone"); return null; } diff --git a/src/main/java/love/sola/netsupport/api/Register.java b/src/main/java/love/sola/netsupport/api/Register.java index 1cebc8a..c647f0f 100644 --- a/src/main/java/love/sola/netsupport/api/Register.java +++ b/src/main/java/love/sola/netsupport/api/Register.java @@ -20,6 +20,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; +import static love.sola.netsupport.util.Checker.*; + /** * *********************************************** * Created by Sola on 2015/11/29. @@ -29,8 +31,6 @@ import java.io.PrintWriter; @WebServlet(name = "Register", urlPatterns = "/api/register", loadOnStartup = 21) public class Register extends HttpServlet { - public static final String STUDENT_ID_REGEX = "^(2010|2012|2013|2014|2015)[0-9]{9}$"; - public static final String PHONE_NUMBER_REGEX = "^1[34578][0-9]{9}$"; private Gson gson = SQLCore.gson; @@ -105,66 +105,6 @@ public class Register extends HttpServlet { return "Register_Success"; } - - private long checkStudentId(String studentId) { - if (studentId == null) return -1; - if (studentId.matches(STUDENT_ID_REGEX)) { - try { - return Long.parseLong(studentId); - } catch (NumberFormatException ignored) { - } - } - return -1; - } - - private long checkPhoneNumber(String phone) { - if (phone == null) return -1; - if (phone.matches(PHONE_NUMBER_REGEX)) { - try { - return Long.parseLong(phone); - } catch (NumberFormatException ignored) { - } - } - return -1; - } - - private ISP checkISP(String isp) { - if (isp == null) return null; - try { - return ISP.fromId(Integer.parseInt(isp)); - } catch (NumberFormatException ignored) { - } - return null; - } - - private String checkNetAccount(String account, ISP isp) { - if (isp == null) return null; - if (account == null) return null; - if (!account.matches(isp.accountRegex)) return null; - return account; - } - - private int checkBlock(String block) { - if (block == null) return -1; - try { - return Integer.parseInt(block); - } catch (NumberFormatException ignored) { - } - return -1; - } - - private int checkRoom(String room, int block) { - if (block == -1) return -1; - if (room == null) return -1; - try { - Integer i = Integer.parseInt(room); - if (i <= 100 || i >= 1300) return -1; - return i; - } catch (NumberFormatException ignored) { - } - return -1; - } - private void printAuthorizeFailed(HttpServletRequest request, PrintWriter out) { out.println(ParseUtil.parseJsonP(request, gson.toJson(new Response(Response.ResponseCode.AUTHORIZE_FAILED)))); out.close(); diff --git a/src/main/java/love/sola/netsupport/enums/Block.java b/src/main/java/love/sola/netsupport/enums/Block.java index 2526e0b..c14d370 100644 --- a/src/main/java/love/sola/netsupport/enums/Block.java +++ b/src/main/java/love/sola/netsupport/enums/Block.java @@ -53,4 +53,45 @@ public class Block { } } + public static final int[][] AVAILABLE = new int[62][0]; + + static { + // -------------------------------------------- // + // THANKS DATA PROVIDED BY Lai Juncheng + // -------------------------------------------- // + AVAILABLE[FX_1] = new int[]{108, 208, 308, 408, 508}; + AVAILABLE[FX_2] = new int[]{110, 210, 310, 410, 510, 610}; + AVAILABLE[FX_3] = new int[]{110, 210, 310, 410, 510, 610}; + AVAILABLE[FX_4] = new int[]{110, 210, 310, 410, 510, 610, 710}; + AVAILABLE[FX_5] = new int[]{108, 208, 308, 408, 508, 608, 708}; + AVAILABLE[BM_7] = new int[]{100, 216, 317, 417, 517, 617, 717}; + AVAILABLE[BM_8] = new int[]{100, 221, 321, 421, 521, 621, 721}; + AVAILABLE[BM_9] = new int[]{100, 221, 321, 421, 521, 621}; + AVAILABLE[BM_10] = new int[]{111, 239, 339, 439, 558, 658, 758, 858}; + AVAILABLE[BM_11] = new int[]{100, 220, 320, 420, 520, 620, 720, 820}; + AVAILABLE[DM_12] = new int[]{119, 221, 321, 421, 521, 621, 720}; + AVAILABLE[DM_13] = new int[]{120, 222, 322, 422, 522, 622, 722}; + AVAILABLE[DM_14] = new int[]{100, 230, 330, 430, 530, 630, 730}; + AVAILABLE[DM_15] = new int[]{119, 219, 319, 419, 519, 619}; + AVAILABLE[QT_16] = new int[]{154, 257, 357, 457, 557, 657, 757}; + AVAILABLE[QT_17] = new int[]{154, 257, 357, 457, 557, 657, 757}; + AVAILABLE[QT_18] = new int[]{139, 239, 339, 439, 539, 639, 739}; + AVAILABLE[QT_19] = new int[]{100, 200, 332, 432, 532, 632, 732}; + AVAILABLE[DM_20] = new int[]{109, 209, 309, 409, 509, 609, 709}; + AVAILABLE[DM_21] = new int[]{109, 209, 309, 409, 509, 609, 709}; + AVAILABLE[XH_A] = new int[]{129, 231, 331, 431, 531, 631, 731, 831, 931, 1031, 1131, 1231}; + AVAILABLE[XH_B] = new int[]{129, 229, 329, 429, 529, 629, 729, 829, 929, 1029, 1129, 1229}; + AVAILABLE[XH_C] = new int[]{126, 226, 326, 426, 526, 626, 726, 826, 926, 1026, 1126, 1226}; + AVAILABLE[XH_D] = new int[]{128, 228, 328, 428, 528, 628, 728, 828, 928, 1028, 1128, 1228}; + AVAILABLE[FX_6] = new int[0]; + } + + public static boolean checkRoom(int block, int room) { + int floor = room / 100; + if (floor == 0 || room % 100 == 0) return false; + if (block < 0 || block >= AVAILABLE.length) return false; + if (AVAILABLE[block].length < floor) return false; + return room <= AVAILABLE[block][floor - 1]; + } + } diff --git a/src/main/java/love/sola/netsupport/util/Checker.java b/src/main/java/love/sola/netsupport/util/Checker.java index d806704..d0cd3b5 100644 --- a/src/main/java/love/sola/netsupport/util/Checker.java +++ b/src/main/java/love/sola/netsupport/util/Checker.java @@ -1,6 +1,8 @@ package love.sola.netsupport.util; import love.sola.netsupport.enums.Attribute; +import love.sola.netsupport.enums.Block; +import love.sola.netsupport.enums.ISP; import love.sola.netsupport.wechat.Command; import love.sola.netsupport.wechat.WechatSession; import me.chanjar.weixin.common.session.WxSession; @@ -15,6 +17,9 @@ import javax.servlet.http.HttpServletRequest; */ public class Checker { + public static final String STUDENT_ID_REGEX = "^(2010|2012|2013|2014|2015)[0-9]{9}$"; + public static final String PHONE_NUMBER_REGEX = "^1[34578][0-9]{9}$"; + public static boolean hasNull(Object... v) { for (Object o : v) if (o == null) return true; return false; @@ -27,4 +32,64 @@ public class Checker { return s == null ? null : s.getAttribute(Attribute.AUTHORIZED) == c ? s : null; } + public static long checkStudentId(String studentId) { + if (studentId == null) return -1; + if (studentId.matches(STUDENT_ID_REGEX)) { + try { + return Long.parseLong(studentId); + } catch (NumberFormatException ignored) { + } + } + return -1; + } + + public static long checkPhoneNumber(String phone) { + if (phone == null) return -1; + if (!phone.matches(PHONE_NUMBER_REGEX)) return -1; + try { + return Long.parseLong(phone); + } catch (NumberFormatException ignored) { } + return -1; + } + + public static ISP checkISP(String isp) { + if (isp == null) return null; + try { + return ISP.fromId(Integer.parseInt(isp)); + } catch (NumberFormatException ignored) { } + return null; + } + + public static String checkNetAccount(String account, ISP isp) { + if (isp == null) return null; + if (account == null) return null; + if (!account.matches(isp.accountRegex)) return null; + return account; + } + + public static int checkBlock(String block) { + if (block == null) return -1; + try { + int b = Integer.parseInt(block); + if (Block.inverseMap.containsKey(b)) + return b; + else + return -1; + } catch (NumberFormatException ignored) { } + return -1; + } + + public static int checkRoom(String room, int block) { + if (block == -1) return -1; + if (room == null) return -1; + try { + Integer i = Integer.parseInt(room); + if (Block.checkRoom(block, i)) + return i; + else + return -1; + } catch (NumberFormatException ignored) { } + return -1; + } + } From b13ec99ddfac2fb90fd10946640c4c81f4684086 Mon Sep 17 00:00:00 2001 From: Sola Date: Tue, 15 Dec 2015 21:26:48 +0800 Subject: [PATCH 4/5] profile modify command --- .../sola/netsupport/api/ProfileModify.java | 42 +++++++++++++++---- .../love/sola/netsupport/api/Register.java | 1 - .../love/sola/netsupport/wechat/Command.java | 1 + .../wechat/handler/ProfileHandler.java | 42 +++++++++++++++++++ src/main/resources/lang.yml | 6 ++- 5 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java diff --git a/src/main/java/love/sola/netsupport/api/ProfileModify.java b/src/main/java/love/sola/netsupport/api/ProfileModify.java index 12624a4..d5817a1 100644 --- a/src/main/java/love/sola/netsupport/api/ProfileModify.java +++ b/src/main/java/love/sola/netsupport/api/ProfileModify.java @@ -2,12 +2,15 @@ package love.sola.netsupport.api; import com.google.gson.Gson; import love.sola.netsupport.enums.Attribute; +import love.sola.netsupport.enums.ISP; import love.sola.netsupport.pojo.User; import love.sola.netsupport.sql.SQLCore; +import love.sola.netsupport.sql.TableUser; import love.sola.netsupport.util.Checker; import love.sola.netsupport.util.ParseUtil; import love.sola.netsupport.wechat.Command; import me.chanjar.weixin.common.session.WxSession; +import org.hibernate.exception.ConstraintViolationException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; @@ -17,6 +20,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; +import static love.sola.netsupport.util.Checker.*; + /** * *********************************************** * Created by Sola on 2015/12/15. @@ -43,18 +48,39 @@ public class ProfileModify extends HttpServlet { } private Response process(HttpServletRequest request) { - WxSession session = Checker.isAuthorized(request, Command.QUERY); + WxSession session = Checker.isAuthorized(request, Command.PROFILE); if (session == null) { return new Response(Response.ResponseCode.UNAUTHORIZED); } User u = (User) session.getAttribute(Attribute.USER); if (u == null) return new Response(Response.ResponseCode.UNAUTHORIZED); - String isp = request.getParameter("isp"); - String netaccount = request.getParameter("username"); - String block = request.getParameter("block"); - String room = request.getParameter("room"); - String phone = request.getParameter("phone"); - return null; - } + ISP isp = checkISP(request.getParameter("isp")); + String netAccount = checkNetAccount(request.getParameter("username"), isp); + int block = checkBlock(request.getParameter("block")); + int room = checkRoom(request.getParameter("room"), block); + long phone = checkPhoneNumber(request.getParameter("phone")); + if (netAccount != null) { + u.setIsp(isp); + u.setNetAccount(netAccount); + } + if (room != -1) { + u.setBlock(block); + u.setRoom(room); + } + if (phone != -1) { + u.setPhone(phone); + } + try { + TableUser.update(u); + } catch (ConstraintViolationException e) { + String dupKey = e.getConstraintName(); + return new Response(Response.ResponseCode.REQUEST_FAILED, "Duplicated_" + dupKey.toUpperCase()); + } catch (Exception e) { + e.printStackTrace(); + return new Response(Response.ResponseCode.INTERNAL_ERROR, e.getMessage()); + } + session.invalidate(); + return new Response(Response.ResponseCode.OK); + } } diff --git a/src/main/java/love/sola/netsupport/api/Register.java b/src/main/java/love/sola/netsupport/api/Register.java index c647f0f..f5365e9 100644 --- a/src/main/java/love/sola/netsupport/api/Register.java +++ b/src/main/java/love/sola/netsupport/api/Register.java @@ -31,7 +31,6 @@ import static love.sola.netsupport.util.Checker.*; @WebServlet(name = "Register", urlPatterns = "/api/register", loadOnStartup = 21) public class Register extends HttpServlet { - private Gson gson = SQLCore.gson; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { diff --git a/src/main/java/love/sola/netsupport/wechat/Command.java b/src/main/java/love/sola/netsupport/wechat/Command.java index fa0e026..2953f34 100644 --- a/src/main/java/love/sola/netsupport/wechat/Command.java +++ b/src/main/java/love/sola/netsupport/wechat/Command.java @@ -20,6 +20,7 @@ public enum Command { QUERY(1, QueryHandler.class), SUBMIT(2, SubmitHandler.class), CANCEL(3, CancelHandler.class), + PROFILE(4, ProfileHandler.class), LOGIN(10, LoginHandler.class), ; diff --git a/src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java b/src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java new file mode 100644 index 0000000..c1b775a --- /dev/null +++ b/src/main/java/love/sola/netsupport/wechat/handler/ProfileHandler.java @@ -0,0 +1,42 @@ +package love.sola.netsupport.wechat.handler; + +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; +import me.chanjar.weixin.mp.bean.WxMpXmlMessage; +import me.chanjar.weixin.mp.bean.WxMpXmlOutMessage; +import me.chanjar.weixin.mp.bean.outxmlbuilder.TextBuilder; + +import java.util.Map; + +import static love.sola.netsupport.config.Lang.format; + +/** + * *********************************************** + * Created by Sola on 2015/12/15. + * Don't modify this source without my agreement + * *********************************************** + */ +public class ProfileHandler implements WxMpMessageHandler { + + @Override + public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException { + User u = TableUser.getByWechat(wxMessage.getFromUserName()); + String id = WechatSession.genId(); + WxSession session = WechatSession.get(id, true); + session.setAttribute(Attribute.AUTHORIZED, Command.PROFILE); + session.setAttribute(Attribute.WECHAT, wxMessage.getFromUserName()); + session.setAttribute(Attribute.USER, u); + TextBuilder out = WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName()); + out.content(format("User_Profile_Link", id, u.getName(), u.getIsp().id, u.getNetAccount(), u.getBlock(), u.getRoom(), u.getPhone())); + return out.build(); + } + +} diff --git a/src/main/resources/lang.yml b/src/main/resources/lang.yml index 699769c..4c95f3e 100644 --- a/src/main/resources/lang.yml +++ b/src/main/resources/lang.yml @@ -5,10 +5,11 @@ Unknown_Encrypt_Type: 'Unknown encrypt-type.' #Command Regex REGEX_QUERY: '^(?i)(Query)|(查询)|(cx)$' -REGEX_REGISTER: '^(?i)(Reg(ister)?)|(注册)|(绑定)|(zc)$' +REGEX_REGISTER: '^(?i)(Reg(ister)?)|(注册)|(绑定)|(zc)|(bd)$' REGEX_SUBMIT: '^(?i)(Submit)|(报修)|(bx)$' -REGEX_CANCEL: '^(?i)(Cancel)|(取消)|(撤销)|(qx)$' +REGEX_CANCEL: '^(?i)(Cancel)|(取消)|(撤销)|(qx)|(cx)$' REGEX_LOGIN: '^(?i)Authme$' +REGEX_PROFILE: '^(?i)(EditProfile)|(修改资料)|(xgzl)$' #Event Event_Subscribe: "欢迎使用电子科技大学中山学院网络维护科微信自助报修平台。\n如您在使用中遇到任何问题,请将投诉或建议邮件至loli@sola.love.\n\n请发送'绑定'进行微信绑定" @@ -44,6 +45,7 @@ Internal_Error: '啊哦,登录失败了哦。' User_Register_Link: '您尚未进行微信绑定, 请点击这里进行微信绑定操作。' User_Query_Link: 'http://topaz.sinaapp.com/nm/v1/list.html?token={0}' User_Submit_Link: 'http://topaz.sinaapp.com/nm/v1/rrepair.html?token={0}&name={1}&isp={2}&room={3}&block={4}&phone={5,number,#}' +User_Profile_Link: 'http://topaz.sinaapp.com/nm/v1/profile.html?token={0}&name={1}&isp={2}&account={3}&block={4}&room={5}&phone={6,number,#}' Result_Page: 'http://topaz.sinaapp.com/nm/v1/result.html' Operator_Home_Page: 'CLICK HERE' Operator_Login_Page: '' From eb24ea4e726fb809686dc9d2d8669c8836f1cf0d Mon Sep 17 00:00:00 2001 From: Sola Date: Tue, 15 Dec 2015 21:34:49 +0800 Subject: [PATCH 5/5] fix header --- src/main/java/love/sola/netsupport/api/ProfileModify.java | 2 +- src/main/java/love/sola/netsupport/api/Register.java | 2 +- src/main/java/love/sola/netsupport/api/TicketQuery.java | 2 +- src/main/java/love/sola/netsupport/api/TicketSubmit.java | 2 +- src/main/java/love/sola/netsupport/api/admin/Login.java | 2 +- src/main/java/love/sola/netsupport/api/admin/TicketUpdate.java | 2 +- src/main/java/love/sola/netsupport/api/admin/root/GetUser.java | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/love/sola/netsupport/api/ProfileModify.java b/src/main/java/love/sola/netsupport/api/ProfileModify.java index d5817a1..1b6c2e2 100644 --- a/src/main/java/love/sola/netsupport/api/ProfileModify.java +++ b/src/main/java/love/sola/netsupport/api/ProfileModify.java @@ -40,7 +40,7 @@ public class ProfileModify extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); - response.addHeader("Content-type", "text/json;charset=utf-8"); + response.addHeader("Content-type", "application/json;charset=utf-8"); PrintWriter out = response.getWriter(); String json = gson.toJson(process(request)); out.println(ParseUtil.parseJsonP(request, json)); diff --git a/src/main/java/love/sola/netsupport/api/Register.java b/src/main/java/love/sola/netsupport/api/Register.java index f5365e9..7417f05 100644 --- a/src/main/java/love/sola/netsupport/api/Register.java +++ b/src/main/java/love/sola/netsupport/api/Register.java @@ -36,7 +36,7 @@ public class Register extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); - response.addHeader("Content-type", "text/json;charset=utf-8"); + response.addHeader("Content-type", "application/json;charset=utf-8"); PrintWriter out = response.getWriter(); WxSession session = Checker.isAuthorized(request, Command.REGISTER); diff --git a/src/main/java/love/sola/netsupport/api/TicketQuery.java b/src/main/java/love/sola/netsupport/api/TicketQuery.java index 470b77e..393b56f 100644 --- a/src/main/java/love/sola/netsupport/api/TicketQuery.java +++ b/src/main/java/love/sola/netsupport/api/TicketQuery.java @@ -42,7 +42,7 @@ public class TicketQuery extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); - response.addHeader("Content-type", "text/json;charset=utf-8"); + response.addHeader("Content-type", "application/json;charset=utf-8"); PrintWriter out = response.getWriter(); String json = gson.toJson(query(request)); out.println(ParseUtil.parseJsonP(request, json)); diff --git a/src/main/java/love/sola/netsupport/api/TicketSubmit.java b/src/main/java/love/sola/netsupport/api/TicketSubmit.java index 192e16d..4f0ccd7 100644 --- a/src/main/java/love/sola/netsupport/api/TicketSubmit.java +++ b/src/main/java/love/sola/netsupport/api/TicketSubmit.java @@ -39,7 +39,7 @@ public class TicketSubmit extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); - response.addHeader("Content-type", "text/json;charset=utf-8"); + response.addHeader("Content-type", "application/json;charset=utf-8"); PrintWriter out = response.getWriter(); String json = gson.toJson(submit(request)); out.println(ParseUtil.parseJsonP(request, json)); diff --git a/src/main/java/love/sola/netsupport/api/admin/Login.java b/src/main/java/love/sola/netsupport/api/admin/Login.java index d9ac941..f8028b8 100644 --- a/src/main/java/love/sola/netsupport/api/admin/Login.java +++ b/src/main/java/love/sola/netsupport/api/admin/Login.java @@ -43,7 +43,7 @@ public class Login extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); - response.addHeader("Content-type", "text/json;charset=utf-8"); + response.addHeader("Content-type", "application/json;charset=utf-8"); PrintWriter out = response.getWriter(); String json = gson.toJson(login(request)); out.println(ParseUtil.parseJsonP(request, json)); diff --git a/src/main/java/love/sola/netsupport/api/admin/TicketUpdate.java b/src/main/java/love/sola/netsupport/api/admin/TicketUpdate.java index a69ed42..d01a2b5 100644 --- a/src/main/java/love/sola/netsupport/api/admin/TicketUpdate.java +++ b/src/main/java/love/sola/netsupport/api/admin/TicketUpdate.java @@ -40,7 +40,7 @@ public class TicketUpdate extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); - response.addHeader("Content-type", "text/json;charset=utf-8"); + response.addHeader("Content-type", "application/json;charset=utf-8"); PrintWriter out = response.getWriter(); String json = gson.toJson(update(request)); out.println(ParseUtil.parseJsonP(request, json)); diff --git a/src/main/java/love/sola/netsupport/api/admin/root/GetUser.java b/src/main/java/love/sola/netsupport/api/admin/root/GetUser.java index 8d36e53..11b01ba 100644 --- a/src/main/java/love/sola/netsupport/api/admin/root/GetUser.java +++ b/src/main/java/love/sola/netsupport/api/admin/root/GetUser.java @@ -46,7 +46,7 @@ public class GetUser extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); - response.addHeader("Content-type", "text/json;charset=utf-8"); + response.addHeader("Content-type", "application/json;charset=utf-8"); PrintWriter out = response.getWriter(); String json = gson.toJson(query(request)); out.println(ParseUtil.parseJsonP(request, json));