mirror of
https://github.com/ZSCNetSupportDept/WechatTicketSystem.git
synced 2025-10-29 08:05:04 +08:00
Merge branch 'release/1.2'
This commit is contained in:
2
pom.xml
2
pom.xml
@@ -4,7 +4,7 @@
|
|||||||
<name>WechatTicketSystem</name>
|
<name>WechatTicketSystem</name>
|
||||||
<groupId>love.sola.netsupport</groupId>
|
<groupId>love.sola.netsupport</groupId>
|
||||||
<artifactId>WechatTicketSystem</artifactId>
|
<artifactId>WechatTicketSystem</artifactId>
|
||||||
<version>1.1-SNAPSHOT</version>
|
<version>1.2-SNAPSHOT</version>
|
||||||
<packaging>war</packaging>
|
<packaging>war</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|||||||
@@ -0,0 +1,67 @@
|
|||||||
|
package love.sola.netsupport.api.admin;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import love.sola.netsupport.api.Response;
|
||||||
|
import love.sola.netsupport.enums.Attribute;
|
||||||
|
import love.sola.netsupport.sql.SQLCore;
|
||||||
|
import love.sola.netsupport.util.ParseUtil;
|
||||||
|
import love.sola.netsupport.wechat.WechatSession;
|
||||||
|
import me.chanjar.weixin.common.session.WxSession;
|
||||||
|
|
||||||
|
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;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ***********************************************
|
||||||
|
* Created by Sola on 2015/12/21.
|
||||||
|
* Don't modify this source without my agreement
|
||||||
|
* ***********************************************
|
||||||
|
*/
|
||||||
|
@WebServlet(name = "CheckSession", urlPatterns = "/api/checksession", loadOnStartup = 43)
|
||||||
|
public class CheckSession 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", "application/json;charset=utf-8");
|
||||||
|
PrintWriter out = response.getWriter();
|
||||||
|
String json = gson.toJson(check(request));
|
||||||
|
out.println(ParseUtil.parseJsonP(request, json));
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Response check(HttpServletRequest request) {
|
||||||
|
String t = request.getParameter("token");
|
||||||
|
if (t == null || t.isEmpty()) return new Response(Response.ResponseCode.UNAUTHORIZED);
|
||||||
|
WxSession s = WechatSession.get(t, false);
|
||||||
|
if (s == null) return new Response(Response.ResponseCode.UNAUTHORIZED);
|
||||||
|
String more = request.getParameter("more");
|
||||||
|
Map<String, Object> result = new HashMap<>();
|
||||||
|
result.put(Attribute.AUTHORIZED, s.getAttribute(Attribute.AUTHORIZED));
|
||||||
|
if (more != null){
|
||||||
|
switch (more) {
|
||||||
|
case "1":
|
||||||
|
result.put(Attribute.USER, s.getAttribute(Attribute.USER));
|
||||||
|
result.put(Attribute.OPERATOR, s.getAttribute(Attribute.OPERATOR));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new Response(Response.ResponseCode.OK, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
98
src/main/java/love/sola/netsupport/api/admin/TicketLog.java
Normal file
98
src/main/java/love/sola/netsupport/api/admin/TicketLog.java
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
package love.sola.netsupport.api.admin;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import love.sola.netsupport.api.Response;
|
||||||
|
import love.sola.netsupport.pojo.Ticket;
|
||||||
|
import love.sola.netsupport.sql.SQLCore;
|
||||||
|
import love.sola.netsupport.sql.TableTicket;
|
||||||
|
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.apache.commons.lang3.time.DateUtils;
|
||||||
|
import org.hibernate.HibernateException;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.envers.AuditReader;
|
||||||
|
import org.hibernate.envers.query.AuditEntity;
|
||||||
|
|
||||||
|
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;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ***********************************************
|
||||||
|
* Created by Sola on 2015/12/18.
|
||||||
|
* Don't modify this source without my agreement
|
||||||
|
* ***********************************************
|
||||||
|
*/
|
||||||
|
@WebServlet(name = "TicketLog", urlPatterns = "/api/admin/ticketlog", loadOnStartup = 35)
|
||||||
|
public class TicketLog extends HttpServlet {
|
||||||
|
|
||||||
|
public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
|
||||||
|
private Gson gson = SQLCore.gson;
|
||||||
|
|
||||||
|
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
doGet(request, response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("Duplicates")
|
||||||
|
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
|
request.setCharacterEncoding("utf-8");
|
||||||
|
response.setCharacterEncoding("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));
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Response query(HttpServletRequest request) {
|
||||||
|
WxSession session = Checker.isAuthorized(request, Command.LOGIN);
|
||||||
|
if (session == null) {
|
||||||
|
return new Response(Response.ResponseCode.UNAUTHORIZED);
|
||||||
|
}
|
||||||
|
int first;
|
||||||
|
int limit;
|
||||||
|
Date start;
|
||||||
|
Date end;
|
||||||
|
try {
|
||||||
|
first = request.getParameter("first") == null ? 0 : Integer.parseInt(request.getParameter("first"));
|
||||||
|
limit = request.getParameter("limit") == null ? 20 : Integer.parseInt(request.getParameter("limit"));
|
||||||
|
start = request.getParameter("start") == null ? getToday() : dateFormat.parse(request.getParameter("start"));
|
||||||
|
end = request.getParameter("end") == null ? getToday() : dateFormat.parse(request.getParameter("end"));
|
||||||
|
end = DateUtils.addDays(end, 1);
|
||||||
|
} catch (ParseException | NumberFormatException e) {
|
||||||
|
return new Response(Response.ResponseCode.ILLEGAL_PARAMETER);
|
||||||
|
}
|
||||||
|
try (Session s = SQLCore.sf.openSession()) {
|
||||||
|
AuditReader reader = TableTicket.getAuditReader(s);
|
||||||
|
Object obj = reader.createQuery()
|
||||||
|
.forRevisionsOfEntity(Ticket.class, false, true)
|
||||||
|
.addOrder(AuditEntity.revisionNumber().asc())
|
||||||
|
.add(AuditEntity.revisionProperty("timestamp").between(start.getTime(), end.getTime()))
|
||||||
|
.setFirstResult(first)
|
||||||
|
.setMaxResults(limit)
|
||||||
|
.getResultList();
|
||||||
|
return new Response(Response.ResponseCode.OK, obj);
|
||||||
|
} catch (HibernateException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return new Response(Response.ResponseCode.DATABASE_ERROR, e.getMessage());
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return new Response(Response.ResponseCode.INTERNAL_ERROR, e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Date getToday() {
|
||||||
|
return DateUtils.truncate(new Date(), Calendar.DAY_OF_MONTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -20,6 +20,7 @@ import javax.servlet.http.HttpServletRequest;
|
|||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ***********************************************
|
* ***********************************************
|
||||||
@@ -64,6 +65,7 @@ public class TicketUpdate extends HttpServlet {
|
|||||||
t.setOperator(op);
|
t.setOperator(op);
|
||||||
t.setRemark(remark);
|
t.setRemark(remark);
|
||||||
t.setStatus(Integer.parseInt(status));
|
t.setStatus(Integer.parseInt(status));
|
||||||
|
t.setUpdateTime(new Date());
|
||||||
s.beginTransaction();
|
s.beginTransaction();
|
||||||
s.update(t);
|
s.update(t);
|
||||||
s.getTransaction().commit();
|
s.getTransaction().commit();
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
package love.sola.netsupport.api.admin.root;
|
||||||
|
|
||||||
|
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.util.Crypto;
|
||||||
|
import love.sola.netsupport.wechat.Command;
|
||||||
|
import me.chanjar.weixin.common.session.WxSession;
|
||||||
|
import org.hibernate.Session;
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ***********************************************
|
||||||
|
* Created by Sola on 2015/12/20.
|
||||||
|
* Don't modify this source without my agreement
|
||||||
|
* ***********************************************
|
||||||
|
*/
|
||||||
|
@WebServlet(name = "SetPassword",urlPatterns = "/api/admin/setpass",loadOnStartup = 43)
|
||||||
|
public class SetPassword 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.addHeader("Content-type", "text/plain;charset=utf-8");
|
||||||
|
PrintWriter out = response.getWriter();
|
||||||
|
process(request, out);
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void process(HttpServletRequest request, PrintWriter out) {
|
||||||
|
WxSession session = Checker.isAuthorized(request, Command.LOGIN);
|
||||||
|
if (session == null) {
|
||||||
|
out.println("Unauthorized");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Operator op = (Operator) session.getAttribute(Attribute.OPERATOR);
|
||||||
|
if (op.getAccess() != Access.ROOT) {
|
||||||
|
out.println("Unauthorized");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String id = request.getParameter("id");
|
||||||
|
String pass = request.getParameter("pass");
|
||||||
|
if (pass == null || pass.length() < 8) {
|
||||||
|
out.println("Invalid pass");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try (Session s = SQLCore.sf.openSession()) {
|
||||||
|
s.beginTransaction();
|
||||||
|
op = s.get(Operator.class, Integer.parseInt(id));
|
||||||
|
if (op == null) {
|
||||||
|
out.println("Invalid user");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
op.setPassword(Crypto.hash(pass));
|
||||||
|
s.update(op);
|
||||||
|
s.getTransaction().commit();
|
||||||
|
out.println("Operation success");
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
out.println("Invalid id");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -19,8 +19,8 @@ public class Lang {
|
|||||||
public static Map<String, MessageFormat> format_cache = new HashMap<>(32);
|
public static Map<String, MessageFormat> format_cache = new HashMap<>(32);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
//noinspection unchecked
|
|
||||||
InputStream in = Lang.class.getClassLoader().getResourceAsStream("lang.yml");
|
InputStream in = Lang.class.getClassLoader().getResourceAsStream("lang.yml");
|
||||||
|
//noinspection unchecked
|
||||||
messages = new Yaml().loadAs(in, Map.class);
|
messages = new Yaml().loadAs(in, Map.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,14 @@ import com.google.gson.reflect.TypeToken;
|
|||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
import love.sola.netsupport.enums.ISP;
|
import love.sola.netsupport.enums.ISP;
|
||||||
|
import love.sola.netsupport.wechat.Command;
|
||||||
import org.hibernate.Hibernate;
|
import org.hibernate.Hibernate;
|
||||||
|
import org.hibernate.Session;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.boot.MetadataSources;
|
import org.hibernate.boot.MetadataSources;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
|
import org.hibernate.envers.AuditReader;
|
||||||
|
import org.hibernate.envers.AuditReaderFactory;
|
||||||
import org.hibernate.proxy.HibernateProxy;
|
import org.hibernate.proxy.HibernateProxy;
|
||||||
import org.hibernate.service.ServiceRegistry;
|
import org.hibernate.service.ServiceRegistry;
|
||||||
|
|
||||||
@@ -56,6 +60,8 @@ public class SQLCore {
|
|||||||
.registerTypeAdapter(Date.class, (JsonSerializer<Date>) (src, typeOfSrc, context) -> new JsonPrimitive(src.getTime()))
|
.registerTypeAdapter(Date.class, (JsonSerializer<Date>) (src, typeOfSrc, context) -> new JsonPrimitive(src.getTime()))
|
||||||
.registerTypeAdapter(ISP.class, (JsonDeserializer<ISP>) (json, typeOfT, context) -> ISP.fromId(json.getAsJsonPrimitive().getAsInt()))
|
.registerTypeAdapter(ISP.class, (JsonDeserializer<ISP>) (json, typeOfT, context) -> ISP.fromId(json.getAsJsonPrimitive().getAsInt()))
|
||||||
.registerTypeAdapter(ISP.class, (JsonSerializer<ISP>) (src, typeOfSrc, context) -> new JsonPrimitive(src.id))
|
.registerTypeAdapter(ISP.class, (JsonSerializer<ISP>) (src, typeOfSrc, context) -> new JsonPrimitive(src.id))
|
||||||
|
.registerTypeAdapter(Command.class, (JsonDeserializer<Command>) (json, typeOfT, context) -> Command.fromId(json.getAsJsonPrimitive().getAsInt()))
|
||||||
|
.registerTypeAdapter(Command.class, (JsonSerializer<Command>) (src, typeOfSrc, context) -> new JsonPrimitive(src.id))
|
||||||
.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
|
.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY)
|
||||||
.create();
|
.create();
|
||||||
public static SessionFactory sf;
|
public static SessionFactory sf;
|
||||||
@@ -76,6 +82,10 @@ public class SQLCore {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static AuditReader getAuditReader(Session session) {
|
||||||
|
return AuditReaderFactory.get(session);
|
||||||
|
}
|
||||||
|
|
||||||
public static class HibernateProxyTypeAdapter extends TypeAdapter<HibernateProxy> {
|
public static class HibernateProxyTypeAdapter extends TypeAdapter<HibernateProxy> {
|
||||||
|
|
||||||
public static final TypeAdapterFactory FACTORY = new TypeAdapterFactory() {
|
public static final TypeAdapterFactory FACTORY = new TypeAdapterFactory() {
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ import org.hibernate.criterion.Order;
|
|||||||
import org.hibernate.criterion.Projections;
|
import org.hibernate.criterion.Projections;
|
||||||
import org.hibernate.criterion.Restrictions;
|
import org.hibernate.criterion.Restrictions;
|
||||||
import org.hibernate.envers.AuditReader;
|
import org.hibernate.envers.AuditReader;
|
||||||
import org.hibernate.envers.AuditReaderFactory;
|
|
||||||
import org.hibernate.envers.query.AuditEntity;
|
import org.hibernate.envers.query.AuditEntity;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -79,15 +78,11 @@ public class TableTicket extends SQLCore {
|
|||||||
AuditReader reader = getAuditReader(s);
|
AuditReader reader = getAuditReader(s);
|
||||||
return reader.createQuery()
|
return reader.createQuery()
|
||||||
.forRevisionsOfEntity(Ticket.class, false, true)
|
.forRevisionsOfEntity(Ticket.class, false, true)
|
||||||
.addOrder(AuditEntity.revisionNumber().desc())
|
.addOrder(AuditEntity.revisionNumber().asc())
|
||||||
.add(AuditEntity.id().eq(tid))
|
.add(AuditEntity.id().eq(tid))
|
||||||
.getResultList()
|
.getResultList()
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static AuditReader getAuditReader(Session session) {
|
|
||||||
return AuditReaderFactory.get(session);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,13 +34,11 @@ public enum Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String name;
|
|
||||||
public final String regex;
|
public final String regex;
|
||||||
public final Class<? extends WxMpMessageHandler> handler;
|
public final Class<? extends WxMpMessageHandler> handler;
|
||||||
public final int id;
|
public final int id;
|
||||||
|
|
||||||
Command(int id, Class<? extends WxMpMessageHandler> handler) {
|
Command(int id, Class<? extends WxMpMessageHandler> handler) {
|
||||||
this.name = lang("CMD_" + name());
|
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.regex = lang("REGEX_" + name());
|
this.regex = lang("REGEX_" + name());
|
||||||
this.handler = handler;
|
this.handler = handler;
|
||||||
@@ -52,7 +50,7 @@ public enum Command {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return name;
|
return name();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import static love.sola.netsupport.config.Lang.lang;
|
|||||||
* Don't modify this source without my agreement
|
* Don't modify this source without my agreement
|
||||||
* ***********************************************
|
* ***********************************************
|
||||||
*/
|
*/
|
||||||
@WebServlet(name = "WxMpServlet", urlPatterns = "/wechattest", loadOnStartup = 99)
|
@WebServlet(name = "WxMpServlet", urlPatterns = "/wechat", loadOnStartup = 99)
|
||||||
public class WxMpServlet extends HttpServlet {
|
public class WxMpServlet extends HttpServlet {
|
||||||
|
|
||||||
public static WxMpServlet instance;
|
public static WxMpServlet instance;
|
||||||
@@ -45,7 +45,7 @@ public class WxMpServlet extends HttpServlet {
|
|||||||
config.setAppId(Settings.I.Wechat_AppId);
|
config.setAppId(Settings.I.Wechat_AppId);
|
||||||
config.setSecret(Settings.I.Wechat_Secret);
|
config.setSecret(Settings.I.Wechat_Secret);
|
||||||
config.setToken(Settings.I.Wechat_Token);
|
config.setToken(Settings.I.Wechat_Token);
|
||||||
config.setAesKey(Settings.I.Wechat_Token);
|
config.setAesKey(Settings.I.Wechat_AesKey);
|
||||||
|
|
||||||
wxMpService = new WxMpServiceImpl();
|
wxMpService = new WxMpServiceImpl();
|
||||||
wxMpService.setWxMpConfigStorage(config);
|
wxMpService.setWxMpConfigStorage(config);
|
||||||
|
|||||||
@@ -12,13 +12,11 @@ import me.chanjar.weixin.mp.api.WxMpMessageHandler;
|
|||||||
import me.chanjar.weixin.mp.api.WxMpService;
|
import me.chanjar.weixin.mp.api.WxMpService;
|
||||||
import me.chanjar.weixin.mp.bean.WxMpXmlMessage;
|
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.WxMpXmlOutNewsMessage;
|
import me.chanjar.weixin.mp.bean.outxmlbuilder.TextBuilder;
|
||||||
import me.chanjar.weixin.mp.bean.outxmlbuilder.NewsBuilder;
|
|
||||||
|
|
||||||
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;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ***********************************************
|
* ***********************************************
|
||||||
@@ -36,11 +34,8 @@ public class ProfileHandler implements WxMpMessageHandler {
|
|||||||
session.setAttribute(Attribute.AUTHORIZED, Command.PROFILE);
|
session.setAttribute(Attribute.AUTHORIZED, Command.PROFILE);
|
||||||
session.setAttribute(Attribute.WECHAT, wxMessage.getFromUserName());
|
session.setAttribute(Attribute.WECHAT, wxMessage.getFromUserName());
|
||||||
session.setAttribute(Attribute.USER, u);
|
session.setAttribute(Attribute.USER, u);
|
||||||
NewsBuilder out = WxMpXmlOutMessage.NEWS().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName());
|
TextBuilder out = WxMpXmlOutMessage.TEXT().fromUser(wxMessage.getToUserName()).toUser(wxMessage.getFromUserName());
|
||||||
WxMpXmlOutNewsMessage.Item item = new WxMpXmlOutNewsMessage.Item();
|
out.content(format("User_Profile_Link", id, u.getName(), u.getIsp().id, u.getNetAccount(), u.getBlock(), u.getRoom(), u.getPhone()));
|
||||||
item.setTitle(lang("Modify_Title"));
|
|
||||||
item.setUrl(format("User_Profile_Link", id, u.getName(), u.getIsp().id, u.getNetAccount(), u.getBlock(), u.getRoom(), u.getPhone()));
|
|
||||||
out.addArticle(item);
|
|
||||||
return out.build();
|
return out.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,20 +6,20 @@ Unknown_Encrypt_Type: 'Unknown encrypt-type.'
|
|||||||
#Command Regex
|
#Command Regex
|
||||||
REGEX_QUERY: '^(?i)(Query)|(查询)|(cx)$'
|
REGEX_QUERY: '^(?i)(Query)|(查询)|(cx)$'
|
||||||
REGEX_REGISTER: '^(?i)(Reg(ister)?)|(注册)|(绑定)|(zc)|(bd)$'
|
REGEX_REGISTER: '^(?i)(Reg(ister)?)|(注册)|(绑定)|(zc)|(bd)$'
|
||||||
REGEX_SUBMIT: '^(?i)(Submit)|(报修)|(bx)$'
|
REGEX_SUBMIT: '^(?i)(Submit)|(报修)|(保修)|(bx)$'
|
||||||
REGEX_CANCEL: '^(?i)(Cancel)|(取消)|(撤销)|(qx)|(cx)$'
|
REGEX_CANCEL: '^(?i)(Cancel)|(取消)|(撤销)|(qx)|(cx)$'
|
||||||
REGEX_LOGIN: '^(?i)Authme$'
|
REGEX_LOGIN: '^(?i)Authme$'
|
||||||
REGEX_PROFILE: '^(?i)(EditProfile)|(修改资料)|(xgzl)$'
|
REGEX_PROFILE: '^(?i)(EditProfile)|(修改资料)|(修改信息)|(xgzl)|(xgxx)$'
|
||||||
|
|
||||||
#Event
|
#Event
|
||||||
Event_Subscribe: "欢迎使用电子科技大学中山学院网络维护科微信自助报修平台。\n如您在使用中遇到任何问题,请将投诉或建议邮件至loli@sola.love.\n\n请发送'绑定'进行微信绑定"
|
Event_Subscribe: "欢迎使用电子科技大学中山学院网络维护科微信自助报修平台。\n\n若您尚未进行过微信绑定,请发送'绑定'(bd)进行微信绑定"
|
||||||
Invalid_Operation: 'Whoops,报修姬找不到你想要的东西啦 (╯‵□′)╯︵┻━┻。'
|
Invalid_Operation: 'Whoops,报修姬找不到你想要的东西啦 (╯‵□′)╯︵┻━┻。'
|
||||||
Message_Spam: '你的打字速度太快了,喝一杯82年的Java压压惊吧。'
|
Message_Spam: '你的打字速度太快了,喝一杯82年的Java压压惊吧。'
|
||||||
#Register
|
#Register
|
||||||
Already_Registered: "您已进行过微信绑定。如果需要更改个人信息,请发送 '修改资料' 。"
|
Already_Registered: "您已进行过微信绑定。如果需要更改个人信息,请发送 '修改资料'(xgzl) 。"
|
||||||
#Query
|
#Query
|
||||||
Query_Title: '最近一次报修记录:'
|
Query_Title: '最近一次报修记录:'
|
||||||
More_Details: '查询更早的报修信息,请点击 >'
|
More_Details: '>>> 查询更早的报修信息,请点击 <<<'
|
||||||
No_Ticket_Available: '您尚未提交过任何报修。'
|
No_Ticket_Available: '您尚未提交过任何报修。'
|
||||||
#Submit
|
#Submit
|
||||||
Already_Opening_Ticket: "您上次提交的报修单仍在处理中. 若需要查询报修单状态,请发送 '查询' 。"
|
Already_Opening_Ticket: "您上次提交的报修单仍在处理中. 若需要查询报修单状态,请发送 '查询' 。"
|
||||||
@@ -37,17 +37,17 @@ Cancel_Title: '报修已取消:'
|
|||||||
User_Cancel_Remark: '用户手动取消报修。'
|
User_Cancel_Remark: '用户手动取消报修。'
|
||||||
Cancel_Failed: '取消失败。'
|
Cancel_Failed: '取消失败。'
|
||||||
#Modify
|
#Modify
|
||||||
Modify_Title: '点此修改资料 >'
|
Modify_Title: ''
|
||||||
#Login
|
#Login
|
||||||
Not_Operator: '嘟嘟嘟……'
|
Not_Operator: '嘟嘟嘟……'
|
||||||
No_Login: 'Permission Denied.'
|
No_Login: 'Permission Denied.'
|
||||||
Internal_Error: '啊哦,登录失败了哦。'
|
Internal_Error: '啊哦,登录失败了哦。'
|
||||||
|
|
||||||
#URL
|
#URL
|
||||||
User_Register_Link: '您尚未进行微信绑定, 请<a href="http://topaz.sinaapp.com/nm/v1/reg.html?token={0}">点击这里</a>进行微信绑定操作。'
|
User_Register_Link: "您尚未进行微信绑定。\n<a href=\"http://topaz.sinaapp.com/nm/v1/reg.html?token={0}\">>点击这里进行微信绑定操作<</a>"
|
||||||
User_Query_Link: 'http://topaz.sinaapp.com/nm/v1/list.html?token={0}'
|
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_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/modi.html?token={0}&name={1}&isp={2}&account={3}&block={4}&room={5}&phone={6,number,#}'
|
User_Profile_Link: '<a href="http://topaz.sinaapp.com/nm/v1/modi.html?token={0}&name={1}&isp={2}&username={3}&block={4}&room={5}&phone={6,number,#}">> 点此修改资料 <</a>'
|
||||||
Result_Page: 'http://topaz.sinaapp.com/nm/v1/result.html'
|
Result_Page: 'http://topaz.sinaapp.com/nm/v1/result.html'
|
||||||
Operator_Home_Page: '<a href="http://topaz.sinaapp.com/nm/v1/man/home.html?token={0}">CLICK HERE</a>'
|
Operator_Home_Page: '<a href="http://topaz.sinaapp.com/nm/v1/man/home.html?token={0}">CLICK HERE</a>'
|
||||||
Operator_Login_Page: 'http://topaz.sinaapp.com/nm/v1/man/login.html?pkey={0}'
|
Operator_Login_Page: 'http://topaz.sinaapp.com/nm/v1/man/login.html?pkey={0}'
|
||||||
@@ -58,7 +58,7 @@ STATUS_UNCHECKED: '待处理'
|
|||||||
STATUS_SOLVED: '已解决'
|
STATUS_SOLVED: '已解决'
|
||||||
#Ticket
|
#Ticket
|
||||||
Ticket_Info_Id: '报修单号: '
|
Ticket_Info_Id: '报修单号: '
|
||||||
Ticket_Info_Desc: '报修描述: '
|
Ticket_Info_Desc: ''
|
||||||
Ticket_Info_Submit_Time: '提交时间: '
|
Ticket_Info_Submit_Time: '提交时间: '
|
||||||
Ticket_Info_Operator: '操作员: '
|
Ticket_Info_Operator: '操作员: '
|
||||||
Ticket_Info_Remark: '维修描述: '
|
Ticket_Info_Remark: '维修描述: '
|
||||||
|
|||||||
@@ -1,9 +1,15 @@
|
|||||||
package love.sola.netsupport.wechat;
|
package love.sola.netsupport.wechat;
|
||||||
|
|
||||||
import love.sola.netsupport.util.RSAUtil;
|
import love.sola.netsupport.util.RSAUtil;
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.mindrot.jbcrypt.BCrypt;
|
import org.mindrot.jbcrypt.BCrypt;
|
||||||
|
|
||||||
|
import java.security.KeyFactory;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.security.spec.InvalidKeySpecException;
|
||||||
|
import java.security.spec.X509EncodedKeySpec;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ***********************************************
|
* ***********************************************
|
||||||
* Created by Sola on 2015/12/6.
|
* Created by Sola on 2015/12/6.
|
||||||
@@ -24,4 +30,16 @@ public class TestEncrypt {
|
|||||||
assert "Encrypt".equals(RSAUtil.decrypt(RSAUtil.encrypt("Encrypt")));
|
assert "Encrypt".equals(RSAUtil.decrypt(RSAUtil.encrypt("Encrypt")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// @Test
|
||||||
|
public void testRSASpecKey() throws NoSuchAlgorithmException, InvalidKeySpecException {
|
||||||
|
System.out.println("RSAUtil.privateKey_s = " + RSAUtil.privateKey_s);
|
||||||
|
System.out.println("RSAUtil.publicKey_s = " + RSAUtil.publicKey_s);
|
||||||
|
// String pkey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCA0qyARvHSCIUQ6YM6K+e/QgiZ+dc/MpVz5DIFwQab5iiifruQiaoA74ilHOOiq5i0ToR1VxNhCUZcAy2saHNifoYKTauMOUSV6IoP4X5jp691PlI9yxNx328mSlPNM9+7BgOzrUP1pR71d+T4LDn0o4J6Ad82vVIe7yWszzF4qQIDAQAB";
|
||||||
|
String pkey = RSAUtil.publicKey_s;
|
||||||
|
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
|
||||||
|
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.decodeBase64(pkey));
|
||||||
|
RSAUtil.publicKey = keyFactory.generatePublic(keySpec);
|
||||||
|
System.out.println("RSAUtil.encrypt(\"233\") = " + RSAUtil.encrypt("233"));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user