mirror of
https://github.com/ZSCNetSupportDept/WechatTicketSystem.git
synced 2025-10-31 02:16:18 +08:00
@@ -25,76 +25,76 @@ import love.sola.netsupport.enums.ISP;
|
||||
*/
|
||||
public class Checker {
|
||||
|
||||
public static final String STUDENT_ID_REGEX = "^(2014|2015|2016|2017)[0-9]{9}$";
|
||||
public static final String PHONE_NUMBER_REGEX = "^1[34578][0-9]{9}$";
|
||||
public static final String STUDENT_ID_REGEX = "^(2014|2015|2016|2017)[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;
|
||||
}
|
||||
public static boolean hasNull(Object... v) {
|
||||
for (Object o : v) if (o == null) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
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 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 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 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 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 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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -24,12 +24,12 @@ import org.mindrot.jbcrypt.BCrypt;
|
||||
*/
|
||||
public class Crypto {
|
||||
|
||||
public static String hash(String pw) {
|
||||
return BCrypt.hashpw(pw, BCrypt.gensalt());
|
||||
}
|
||||
public static String hash(String pw) {
|
||||
return BCrypt.hashpw(pw, BCrypt.gensalt());
|
||||
}
|
||||
|
||||
public static boolean check(String plain, String hash) {
|
||||
return BCrypt.checkpw(plain, hash);
|
||||
}
|
||||
public static boolean check(String plain, String hash) {
|
||||
return BCrypt.checkpw(plain, hash);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -29,20 +29,20 @@ import static love.sola.netsupport.config.Lang.lang;
|
||||
*/
|
||||
public class ParseUtil {
|
||||
|
||||
public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm EEE");
|
||||
public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm EEE");
|
||||
|
||||
public static String parseTicket(Ticket t) {
|
||||
StringBuilder sb = new StringBuilder()
|
||||
.append(lang("Ticket_Info_Id")).append(t.getId()).append("\n")
|
||||
.append(lang("Ticket_Info_Desc")).append(t.getDescription()).append("\n")
|
||||
.append(lang("Ticket_Info_Submit_Time")).append(dateFormat.format(t.getSubmitTime())).append("\n");
|
||||
if (t.getOperator() != null)
|
||||
sb.append(lang("Ticket_Info_Operator")).append(t.getOperator().getId()).append("\n");
|
||||
if (t.getRemark() != null) sb.append(lang("Ticket_Info_Remark")).append(t.getRemark()).append("\n");
|
||||
if (t.getUpdateTime() != null)
|
||||
sb.append(lang("Ticket_Info_Update_Time")).append(dateFormat.format(t.getUpdateTime())).append("\n");
|
||||
sb.append(lang("Ticket_Info_Status")).append(Status.getLocalized(t.getStatus()));
|
||||
return sb.toString();
|
||||
}
|
||||
public static String parseTicket(Ticket t) {
|
||||
StringBuilder sb = new StringBuilder()
|
||||
.append(lang("Ticket_Info_Id")).append(t.getId()).append("\n")
|
||||
.append(lang("Ticket_Info_Desc")).append(t.getDescription()).append("\n")
|
||||
.append(lang("Ticket_Info_Submit_Time")).append(dateFormat.format(t.getSubmitTime())).append("\n");
|
||||
if (t.getOperator() != null)
|
||||
sb.append(lang("Ticket_Info_Operator")).append(t.getOperator().getId()).append("\n");
|
||||
if (t.getRemark() != null) sb.append(lang("Ticket_Info_Remark")).append(t.getRemark()).append("\n");
|
||||
if (t.getUpdateTime() != null)
|
||||
sb.append(lang("Ticket_Info_Update_Time")).append(dateFormat.format(t.getUpdateTime())).append("\n");
|
||||
sb.append(lang("Ticket_Info_Status")).append(Status.getLocalized(t.getStatus()));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -31,51 +31,51 @@ import java.security.KeyPairGenerator;
|
||||
public class RSAUtil {
|
||||
|
||||
|
||||
public static Key publicKey;
|
||||
public static Key privateKey;
|
||||
public static String publicKey_s;
|
||||
public static String privateKey_s;
|
||||
public static Key publicKey;
|
||||
public static Key privateKey;
|
||||
public static String publicKey_s;
|
||||
public static String privateKey_s;
|
||||
|
||||
static {
|
||||
genKeyPair();
|
||||
}
|
||||
static {
|
||||
genKeyPair();
|
||||
}
|
||||
|
||||
public static void genKeyPair() {
|
||||
try {
|
||||
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
|
||||
kpg.initialize(1024);
|
||||
KeyPair kp = kpg.genKeyPair();
|
||||
publicKey = kp.getPublic();
|
||||
privateKey = kp.getPrivate();
|
||||
publicKey_s = Base64.encodeBase64String(publicKey.getEncoded());
|
||||
privateKey_s = Base64.encodeBase64String(privateKey.getEncoded());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
public static void genKeyPair() {
|
||||
try {
|
||||
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
|
||||
kpg.initialize(1024);
|
||||
KeyPair kp = kpg.genKeyPair();
|
||||
publicKey = kp.getPublic();
|
||||
privateKey = kp.getPrivate();
|
||||
publicKey_s = Base64.encodeBase64String(publicKey.getEncoded());
|
||||
privateKey_s = Base64.encodeBase64String(privateKey.getEncoded());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static String encrypt(String value) {
|
||||
try {
|
||||
Cipher cipher = Cipher.getInstance("RSA");
|
||||
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
|
||||
byte[] encrypted = cipher.doFinal(value.getBytes(StandardCharsets.UTF_8));
|
||||
return Base64.encodeBase64String(encrypted);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public static String encrypt(String value) {
|
||||
try {
|
||||
Cipher cipher = Cipher.getInstance("RSA");
|
||||
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
|
||||
byte[] encrypted = cipher.doFinal(value.getBytes(StandardCharsets.UTF_8));
|
||||
return Base64.encodeBase64String(encrypted);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String decrypt(String encrypted) {
|
||||
try {
|
||||
Cipher cipher = Cipher.getInstance("RSA");
|
||||
cipher.init(Cipher.DECRYPT_MODE, privateKey);
|
||||
byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted));
|
||||
return new String(original, StandardCharsets.UTF_8);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
public static String decrypt(String encrypted) {
|
||||
try {
|
||||
Cipher cipher = Cipher.getInstance("RSA");
|
||||
cipher.init(Cipher.DECRYPT_MODE, privateKey);
|
||||
byte[] original = cipher.doFinal(Base64.decodeBase64(encrypted));
|
||||
return new String(original, StandardCharsets.UTF_8);
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -29,105 +29,105 @@ import static love.sola.netsupport.config.Lang.lang;
|
||||
*/
|
||||
public class Redirect {
|
||||
|
||||
private static final String REDIRECT_PAGE = lang("Result_Page");
|
||||
private static final String REDIRECT_PAGE = lang("Result_Page");
|
||||
|
||||
private static final int SUCCESS = 1;
|
||||
private static final int ERROR = 0;
|
||||
private static final int WARNING = -1;
|
||||
private static final int NON_WECHAT = 88;
|
||||
private static final int SUCCESS = 1;
|
||||
private static final int ERROR = 0;
|
||||
private static final int WARNING = -1;
|
||||
private static final int NON_WECHAT = 88;
|
||||
|
||||
public static RedirectBuilder success() {
|
||||
return new RedirectBuilder(SUCCESS);
|
||||
}
|
||||
public static RedirectBuilder success() {
|
||||
return new RedirectBuilder(SUCCESS);
|
||||
}
|
||||
|
||||
public static RedirectBuilder error() {
|
||||
return new RedirectBuilder(ERROR);
|
||||
}
|
||||
public static RedirectBuilder error() {
|
||||
return new RedirectBuilder(ERROR);
|
||||
}
|
||||
|
||||
public static class RedirectBuilder {
|
||||
public static class RedirectBuilder {
|
||||
|
||||
private StringBuilder sb;
|
||||
private StringBuilder sb;
|
||||
|
||||
RedirectBuilder(int type) {
|
||||
sb = new StringBuilder(REDIRECT_PAGE).append("?");
|
||||
type(type);
|
||||
}
|
||||
RedirectBuilder(int type) {
|
||||
sb = new StringBuilder(REDIRECT_PAGE).append("?");
|
||||
type(type);
|
||||
}
|
||||
|
||||
private RedirectBuilder type(int type) {
|
||||
sb.append("type=").append(type).append("&");
|
||||
return this;
|
||||
}
|
||||
private RedirectBuilder type(int type) {
|
||||
sb.append("type=").append(type).append("&");
|
||||
return this;
|
||||
}
|
||||
|
||||
public RedirectBuilder msg(String msg) {
|
||||
sb.append("msg=").append(escape(msg)).append("&");
|
||||
return this;
|
||||
}
|
||||
public RedirectBuilder msg(String msg) {
|
||||
sb.append("msg=").append(escape(msg)).append("&");
|
||||
return this;
|
||||
}
|
||||
|
||||
public RedirectBuilder title(String title) {
|
||||
sb.append("title=").append(escape(title)).append("&");
|
||||
return this;
|
||||
}
|
||||
public RedirectBuilder title(String title) {
|
||||
sb.append("title=").append(escape(title)).append("&");
|
||||
return this;
|
||||
}
|
||||
|
||||
public RedirectBuilder noButton() {
|
||||
sb.append("btn=").append("hide").append("&");
|
||||
return this;
|
||||
}
|
||||
public RedirectBuilder noButton() {
|
||||
sb.append("btn=").append("hide").append("&");
|
||||
return this;
|
||||
}
|
||||
|
||||
public RedirectBuilder button(String text) {
|
||||
sb.append("btn=").append(escape(text)).append("&");
|
||||
return this;
|
||||
}
|
||||
public RedirectBuilder button(String text) {
|
||||
sb.append("btn=").append(escape(text)).append("&");
|
||||
return this;
|
||||
}
|
||||
|
||||
public RedirectBuilder icon(WeUIIcon icon) {
|
||||
sb.append("icon=").append(icon.toString()).append("&");
|
||||
return this;
|
||||
}
|
||||
public RedirectBuilder icon(WeUIIcon icon) {
|
||||
sb.append("icon=").append(icon.toString()).append("&");
|
||||
return this;
|
||||
}
|
||||
|
||||
public RedirectBuilder to(String url) {
|
||||
sb.append("redirect=").append(escape(url)).append("&");
|
||||
return this;
|
||||
}
|
||||
public RedirectBuilder to(String url) {
|
||||
sb.append("redirect=").append(escape(url)).append("&");
|
||||
return this;
|
||||
}
|
||||
|
||||
public void go(HttpServletResponse resp) throws IOException {
|
||||
resp.sendRedirect(sb.toString());
|
||||
}
|
||||
public void go(HttpServletResponse resp) throws IOException {
|
||||
resp.sendRedirect(sb.toString());
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return sb.toString();
|
||||
}
|
||||
public String toString() {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static String escape(String str) {
|
||||
return UrlEscapers.urlFragmentEscaper().escape(str);
|
||||
}
|
||||
private static String escape(String str) {
|
||||
return UrlEscapers.urlFragmentEscaper().escape(str);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public enum WeUIIcon {
|
||||
SUCCESS("weui_icon_success"),
|
||||
SUCCESS_CIRCLE("weui_icon_success_circle"),
|
||||
SUCCESS_NO_CIRCLE("weui_icon_success_no_circle"),
|
||||
SUCCESS_SAFE("weui_icon_safe_success"),
|
||||
INFO("weui_icon_info"),
|
||||
INFO_CIRCLE("weui_icon_info_circle"),
|
||||
WAITING("weui_icon_waiting"),
|
||||
WAITING_CIRCLE("weui_icon_waiting_circle"),
|
||||
CIRCLE("weui_icon_circle"),
|
||||
WARN("weui_icon_warn"),
|
||||
WARN_SAFE("weui_icon_safe_warn"),
|
||||
DOWNLOAD("weui_icon_download"),
|
||||
CANCEL("weui_icon_cancel"),;
|
||||
public enum WeUIIcon {
|
||||
SUCCESS("weui_icon_success"),
|
||||
SUCCESS_CIRCLE("weui_icon_success_circle"),
|
||||
SUCCESS_NO_CIRCLE("weui_icon_success_no_circle"),
|
||||
SUCCESS_SAFE("weui_icon_safe_success"),
|
||||
INFO("weui_icon_info"),
|
||||
INFO_CIRCLE("weui_icon_info_circle"),
|
||||
WAITING("weui_icon_waiting"),
|
||||
WAITING_CIRCLE("weui_icon_waiting_circle"),
|
||||
CIRCLE("weui_icon_circle"),
|
||||
WARN("weui_icon_warn"),
|
||||
WARN_SAFE("weui_icon_safe_warn"),
|
||||
DOWNLOAD("weui_icon_download"),
|
||||
CANCEL("weui_icon_cancel"),;
|
||||
|
||||
private String value;
|
||||
private String value;
|
||||
|
||||
WeUIIcon(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
WeUIIcon(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return value;
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
return value;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user