From fe81cb5e16772ff1b52ea4fd9d5819fe9d0264f0 Mon Sep 17 00:00:00 2001 From: lensferno Date: Thu, 12 May 2022 20:47:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8C=86=E5=BF=99=E5=86=99=E4=BA=86=E4=B8=AA?= =?UTF-8?q?=E8=83=BD=E8=B7=91=E7=9A=84=E4=B8=9C=E8=A5=BF=E5=87=BA=E6=9D=A5?= =?UTF-8?q?=EF=BC=8C=E8=BF=98=E5=BE=88=E7=83=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 19 +- pom.xml | 113 +++++++++++ .../me/lensfrex/littlebusters/ApiIndex.java | 16 ++ .../me/lensfrex/littlebusters/RestTest.java | 15 ++ .../littlebusters/api/v1/Register.java | 86 +++++++++ .../api/v1/beans/ProfileItem.java | 27 +++ .../api/v1/dao/UserInformation.java | 10 + .../api/v1/dao/UserRegister.java | 9 + .../littlebusters/api/v1/inputTest.java | 15 ++ .../littlebusters/api/v1/login/Login.java | 89 +++++++++ .../api/v1/login/LoginIdentify.java | 24 +++ .../api/v1/pojos/UserResult.java | 17 ++ .../api/v1/responses/LoginResponseData.java | 55 ++++++ .../api/v1/responses/ProfileResponseData.java | 24 +++ .../v1/responses/RegisterResponseData.java | 52 +++++ .../v1/responses/general/ErrorResponse.java | 16 ++ .../v1/responses/general/ResponseBase.java | 53 ++++++ .../api/v1/utils/InputChecker.java | 27 +++ .../api/v1/utils/MyBatisUtil.java | 28 +++ src/main/resources/mappers/LoginSqlMapper.xml | 13 ++ .../resources/mappers/RegisterSqlMapper.xml | 12 ++ src/main/webapp/404.html | 93 +++++++++ src/main/webapp/WEB-INF/web.xml | 27 +++ src/main/webapp/css/welcomepage.css | 180 ++++++++++++++++++ .../webapp/images/54120216_p0_conpressed.jpg | Bin 0 -> 131140 bytes src/main/webapp/index.html | 52 +++++ src/main/webapp/js/events.js | 28 +++ src/main/webapp/js/init.js | 12 ++ src/main/webapp/js/jquery-3.6.0.min.js | 2 + src/main/webapp/js/sha256-min.js | 16 ++ src/main/webapp/js/utils.js | 28 +++ src/main/webapp/js/welcomepage_message.js | 54 ++++++ 32 files changed, 1203 insertions(+), 9 deletions(-) create mode 100644 pom.xml create mode 100644 src/main/java/me/lensfrex/littlebusters/ApiIndex.java create mode 100644 src/main/java/me/lensfrex/littlebusters/RestTest.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/Register.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/beans/ProfileItem.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/dao/UserInformation.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/dao/UserRegister.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/inputTest.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/login/Login.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/login/LoginIdentify.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/pojos/UserResult.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/responses/LoginResponseData.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/responses/ProfileResponseData.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/responses/RegisterResponseData.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/responses/general/ErrorResponse.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/responses/general/ResponseBase.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/utils/InputChecker.java create mode 100644 src/main/java/me/lensfrex/littlebusters/api/v1/utils/MyBatisUtil.java create mode 100644 src/main/resources/mappers/LoginSqlMapper.xml create mode 100644 src/main/resources/mappers/RegisterSqlMapper.xml create mode 100644 src/main/webapp/404.html create mode 100644 src/main/webapp/WEB-INF/web.xml create mode 100644 src/main/webapp/css/welcomepage.css create mode 100644 src/main/webapp/images/54120216_p0_conpressed.jpg create mode 100644 src/main/webapp/index.html create mode 100644 src/main/webapp/js/events.js create mode 100644 src/main/webapp/js/init.js create mode 100644 src/main/webapp/js/jquery-3.6.0.min.js create mode 100644 src/main/webapp/js/sha256-min.js create mode 100644 src/main/webapp/js/utils.js create mode 100644 src/main/webapp/js/welcomepage_message.js diff --git a/.gitignore b/.gitignore index e4a1cf1..3299ceb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 -.target +target # User-specific stuff .idea/**/workspace.xml @@ -33,14 +33,14 @@ # When using Gradle or Maven with auto-import, you should exclude module files, # since they will be recreated, and may cause churn. Uncomment if using # auto-import. - .idea/artifacts - .idea/compiler.xml - .idea/jarRepositories.xml - .idea/modules.xml - .idea/*.iml - .idea/modules - *.iml - *.ipr +.idea/artifacts +.idea/compiler.xml +.idea/jarRepositories.xml +.idea/modules.xml +.idea/*.iml +.idea/modules +*.iml +*.ipr # CMake cmake-build-*/ @@ -78,3 +78,4 @@ fabric.properties # Android studio 3.1+ serialized cache file .idea/caches/build_file_checksums.ser /.idea +/src/main/resources/mybatis-config.xml diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..73c70ad --- /dev/null +++ b/pom.xml @@ -0,0 +1,113 @@ + + + 4.0.0 + + me.lensfrex + LittleBusters + 0.0.1-dev + LittleBusters + war + + + UTF-8 + 1.8 + 1.8 + 5.8.1 + + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.glassfish.jersey.core + jersey-server + 3.0.4 + + + org.glassfish.jersey.containers + jersey-container-servlet + 3.0.4 + + + org.glassfish.jersey.inject + jersey-hk2 + 3.0.4 + + + + + com.google.code.gson + gson + 2.9.0 + + + + + org.mindrot + jbcrypt + 0.4 + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + io.jsonwebtoken + jjwt-gson + 0.11.5 + runtime + + + + + org.mybatis + mybatis + 3.5.9 + + + + + org.mariadb.jdbc + mariadb-java-client + 3.0.4 + + + + + + + + + org.apache.maven.plugins + maven-war-plugin + 3.3.2 + + + + \ No newline at end of file diff --git a/src/main/java/me/lensfrex/littlebusters/ApiIndex.java b/src/main/java/me/lensfrex/littlebusters/ApiIndex.java new file mode 100644 index 0000000..2d0967d --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/ApiIndex.java @@ -0,0 +1,16 @@ +package me.lensfrex.littlebusters; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; + +@Path("/") +public class ApiIndex { + @GET + @Produces(MediaType.TEXT_HTML) + public String index() { + return "Here is the API root of LittleBusters.
\n" + + "To use the API currently, please see the LittleBusters RESTFul API document."; + } +} diff --git a/src/main/java/me/lensfrex/littlebusters/RestTest.java b/src/main/java/me/lensfrex/littlebusters/RestTest.java new file mode 100644 index 0000000..09503c0 --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/RestTest.java @@ -0,0 +1,15 @@ +package me.lensfrex.littlebusters; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; + +@Path("/lb") +public class RestTest { + @GET + @Produces(MediaType.TEXT_PLAIN) + public String getMessage() { + return "ASJKDFHYG"; + } +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/Register.java b/src/main/java/me/lensfrex/littlebusters/api/v1/Register.java new file mode 100644 index 0000000..dff5ea9 --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/Register.java @@ -0,0 +1,86 @@ +package me.lensfrex.littlebusters.api.v1; + +import com.google.gson.Gson; +import com.google.gson.annotations.SerializedName; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import me.lensfrex.littlebusters.api.v1.dao.UserInformation; +import me.lensfrex.littlebusters.api.v1.dao.UserRegister; +import me.lensfrex.littlebusters.api.v1.responses.RegisterResponseData; +import me.lensfrex.littlebusters.api.v1.responses.general.ErrorResponse; +import me.lensfrex.littlebusters.api.v1.responses.general.ResponseBase; +import me.lensfrex.littlebusters.api.v1.utils.InputChecker; +import me.lensfrex.littlebusters.api.v1.utils.MyBatisUtil; +import org.apache.ibatis.session.SqlSession; +import org.mindrot.jbcrypt.BCrypt; + +import java.util.UUID; + +@Path("/register") +public class Register { + private final static Gson gson = new Gson(); + + @POST + @Produces(MediaType.APPLICATION_JSON) + public String register(String request) { + System.out.println("Start register."); + RegisterRequestBody registerRequestBody; + try { + registerRequestBody = gson.fromJson(request, RegisterRequestBody.class); + if (InputChecker.hasInvalidChar(registerRequestBody.userName) || + InputChecker.hasInvisibleChar(registerRequestBody.password)) { + ErrorResponse errorResponse = new ErrorResponse(1, "用户名或密码非法"); + + return gson.toJson(errorResponse); + } + } catch (Exception e) { + System.err.println(request); + ErrorResponse errorResponse = new ErrorResponse(2, "请求的数据格式不对"); + + return gson.toJson(errorResponse); + } + + String userUUID = UUID.randomUUID().toString(); + String userBcryptPasswd = BCrypt.hashpw(registerRequestBody.password, BCrypt.gensalt()); + + SqlSession sqlSession = MyBatisUtil.getSqlSession(true); + UserRegister userRegister = sqlSession.getMapper(UserRegister.class); + + userRegister.addRegisterInfoIntoDb(userUUID, registerRequestBody.userName, userBcryptPasswd); + + RegisterResponseData registerResponseBody = new RegisterResponseData(10101, userUUID, userBcryptPasswd); + ResponseBase response = new ResponseBase<>(200, "success", registerResponseBody); + + return gson.toJson(response); + } + + public static class RegisterRequestBody { + @SerializedName("user_name") + private String userName; + + private String password; + + public RegisterRequestBody(String userName, String password) { + this.userName = userName; + this.password = password; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + } +} \ No newline at end of file diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/beans/ProfileItem.java b/src/main/java/me/lensfrex/littlebusters/api/v1/beans/ProfileItem.java new file mode 100644 index 0000000..7992538 --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/beans/ProfileItem.java @@ -0,0 +1,27 @@ +package me.lensfrex.littlebusters.api.v1.beans; + +public class ProfileItem { + private String itemName; + private String data; + + public ProfileItem(String itemName, String data) { + this.itemName = itemName; + this.data = data; + } + + public String getItemName() { + return itemName; + } + + public void setItemName(String itemName) { + this.itemName = itemName; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/dao/UserInformation.java b/src/main/java/me/lensfrex/littlebusters/api/v1/dao/UserInformation.java new file mode 100644 index 0000000..cde05a9 --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/dao/UserInformation.java @@ -0,0 +1,10 @@ +package me.lensfrex.littlebusters.api.v1.dao; + +import org.apache.ibatis.annotations.Param; + +import java.util.Map; + +public interface UserInformation { + + Map getBasicInfoByUserName(@Param("userName") String userName); +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/dao/UserRegister.java b/src/main/java/me/lensfrex/littlebusters/api/v1/dao/UserRegister.java new file mode 100644 index 0000000..77c2a2a --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/dao/UserRegister.java @@ -0,0 +1,9 @@ +package me.lensfrex.littlebusters.api.v1.dao; + +import org.apache.ibatis.annotations.Param; + +public interface UserRegister { + int addRegisterInfoIntoDb(@Param("uuid") String UUID, + @Param("userName") String userName, + @Param("password") String password); +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/inputTest.java b/src/main/java/me/lensfrex/littlebusters/api/v1/inputTest.java new file mode 100644 index 0000000..21536e2 --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/inputTest.java @@ -0,0 +1,15 @@ +package me.lensfrex.littlebusters.api.v1; + +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; + +@Path("/inputTest") +public class inputTest { + @POST + @Produces(MediaType.APPLICATION_JSON) + public String inputTest(String string) { + return string; + } +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/login/Login.java b/src/main/java/me/lensfrex/littlebusters/api/v1/login/Login.java new file mode 100644 index 0000000..6ddce40 --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/login/Login.java @@ -0,0 +1,89 @@ +package me.lensfrex.littlebusters.api.v1.login; + +import com.google.gson.Gson; +import com.google.gson.JsonParseException; +import com.google.gson.annotations.SerializedName; +import com.sun.org.apache.xalan.internal.xsltc.trax.XSLTCSource; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import me.lensfrex.littlebusters.api.v1.dao.UserInformation; +import me.lensfrex.littlebusters.api.v1.responses.LoginResponseData; +import me.lensfrex.littlebusters.api.v1.responses.general.ErrorResponse; +import me.lensfrex.littlebusters.api.v1.responses.general.ResponseBase; +import me.lensfrex.littlebusters.api.v1.utils.InputChecker; +import me.lensfrex.littlebusters.api.v1.utils.MyBatisUtil; +import org.apache.ibatis.session.SqlSession; +import org.mindrot.jbcrypt.BCrypt; + +import java.math.BigInteger; +import java.time.LocalDate; +import java.util.HashMap; +import java.util.Map; + +@Path("/login") +public class Login { + private final static Gson gson = new Gson(); + + @POST + @Produces(MediaType.APPLICATION_JSON) + public String login(String request) { + LoginRequestBody loginRequestBody; + try { + loginRequestBody = gson.fromJson(request, LoginRequestBody.class); + if (InputChecker.hasInvalidChar(loginRequestBody.userName) || + InputChecker.hasInvisibleChar(loginRequestBody.password)) { + ErrorResponse errorResponse = new ErrorResponse(100, "请求的用户名或密码非法"); + + return gson.toJson(errorResponse); + } + + if () + LoginResponseData loginResponseData = new LoginResponseData(((BigInteger) selectResult.get("uid")).intValue(), (String) selectResult.get("password"), LocalDate.now().toString()); + ResponseBase response = new ResponseBase<>(200, "success", loginResponseData); + + return gson.toJson(response); + + } catch (JsonParseException e) { + System.err.println(request); + + ErrorResponse errorResponse = new ErrorResponse(300, "请求的数据格式不对"); + return gson.toJson(errorResponse); + } catch (Exception e) { + System.err.println(request); + System.err.println(e.getMessage()); + + ErrorResponse errorResponse = new ErrorResponse(400, "服务器内部错误,请联系那个背锅的家伙。"); + return gson.toJson(errorResponse); + } + } + + public static class LoginRequestBody { + @SerializedName("user_name") + private String userName; + + private String password; + + public LoginRequestBody(String userName, String password) { + this.userName = userName; + this.password = password; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + } +} \ No newline at end of file diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/login/LoginIdentify.java b/src/main/java/me/lensfrex/littlebusters/api/v1/login/LoginIdentify.java new file mode 100644 index 0000000..5afc94b --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/login/LoginIdentify.java @@ -0,0 +1,24 @@ +package me.lensfrex.littlebusters.api.v1.login; + +import me.lensfrex.littlebusters.api.v1.dao.UserInformation; +import me.lensfrex.littlebusters.api.v1.utils.MyBatisUtil; +import org.apache.ibatis.session.SqlSession; +import org.mindrot.jbcrypt.BCrypt; + + +import java.util.Map; + +public class LoginIdentify { + + public boolean identifyLoginUserName(String userName, String passwordSHA256) { + SqlSession sqlSession = MyBatisUtil.getSqlSession(true); + + UserInformation mapper = sqlSession.getMapper(UserInformation.class); + Map selectResult = mapper.getBasicInfoByUserName(userName); + if (selectResult == null) { + return false; + } + + return BCrypt.checkpw(passwordSHA256, (String) selectResult.get("password")); + } +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/pojos/UserResult.java b/src/main/java/me/lensfrex/littlebusters/api/v1/pojos/UserResult.java new file mode 100644 index 0000000..a43436f --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/pojos/UserResult.java @@ -0,0 +1,17 @@ +package me.lensfrex.littlebusters.api.v1.pojos; + +public class UserResult { + public final int uid; + public final String UUID; + public final String password; + public final boolean deleted; + public final short accountStatus; + + public UserResult(int uid, String UUID, String password, boolean deleted, short accountStatus) { + this.uid = uid; + this.UUID = UUID; + this.password = password; + this.deleted = deleted; + this.accountStatus = accountStatus; + } +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/responses/LoginResponseData.java b/src/main/java/me/lensfrex/littlebusters/api/v1/responses/LoginResponseData.java new file mode 100644 index 0000000..2250add --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/responses/LoginResponseData.java @@ -0,0 +1,55 @@ +package me.lensfrex.littlebusters.api.v1.responses; + +import com.google.gson.annotations.SerializedName; + +/** + * 登录响应中data字段的对象 + */ +public class LoginResponseData { + /** + * 登录用户的uid + */ + private int uid; + + /** + * 用户本次登录得到的token + */ + @SerializedName("access_token") + private String accessToken; + + /** + * 用户此次得到的token的过期时间 + */ + @SerializedName("expired_at") + private String expiredAt; + + public LoginResponseData(int uid, String accessToken, String expiredAt) { + this.uid = uid; + this.accessToken = accessToken; + this.expiredAt = expiredAt; + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public String getExpiredAt() { + return expiredAt; + } + + public void setExpiredAt(String expiredAt) { + this.expiredAt = expiredAt; + } +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/responses/ProfileResponseData.java b/src/main/java/me/lensfrex/littlebusters/api/v1/responses/ProfileResponseData.java new file mode 100644 index 0000000..4854faf --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/responses/ProfileResponseData.java @@ -0,0 +1,24 @@ +package me.lensfrex.littlebusters.api.v1.responses; + +import me.lensfrex.littlebusters.api.v1.beans.ProfileItem; + +import java.util.ArrayList; +import java.util.List; + +public class ProfileResponseData { + private List profileItems; + + public ProfileResponseData(List profileItems) { + this.profileItems = new ArrayList<>(profileItems); + } + + public List getProfileItems() { + return profileItems; + } + + public void setProfileItems(List profileItems) { + this.profileItems = profileItems; + } +} + + diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/responses/RegisterResponseData.java b/src/main/java/me/lensfrex/littlebusters/api/v1/responses/RegisterResponseData.java new file mode 100644 index 0000000..42d03bf --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/responses/RegisterResponseData.java @@ -0,0 +1,52 @@ +package me.lensfrex.littlebusters.api.v1.responses; + +import com.google.gson.annotations.SerializedName; + +public class RegisterResponseData { + /** + * 用户注册分派到的uid + */ + private int uid; + + /** + * 用户本次注册时得到的token + */ + @SerializedName("access_token") + private String accessToken; + + /** + * 用户此次得到的token的过期时间 + */ + @SerializedName("expired_at") + private String expiredAt; + + public RegisterResponseData(int uid, String accessToken, String expiredAt) { + this.uid = uid; + this.accessToken = accessToken; + this.expiredAt = expiredAt; + } + + public int getUid() { + return uid; + } + + public void setUid(int uid) { + this.uid = uid; + } + + public String getAccessToken() { + return accessToken; + } + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public String getExpiredAt() { + return expiredAt; + } + + public void setExpiredAt(String expiredAt) { + this.expiredAt = expiredAt; + } +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/responses/general/ErrorResponse.java b/src/main/java/me/lensfrex/littlebusters/api/v1/responses/general/ErrorResponse.java new file mode 100644 index 0000000..393f983 --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/responses/general/ErrorResponse.java @@ -0,0 +1,16 @@ +package me.lensfrex.littlebusters.api.v1.responses.general; + +/** + * 错误响应类。 + */ +public class ErrorResponse extends ResponseBase { + public ErrorResponse(int code, String message) { + super(code, message, null); + } +} + +class ErrorData {} + +class ErrorCode { + public static final int REQUEST_PARAM_INVALID = 100; +} \ No newline at end of file diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/responses/general/ResponseBase.java b/src/main/java/me/lensfrex/littlebusters/api/v1/responses/general/ResponseBase.java new file mode 100644 index 0000000..5851cff --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/responses/general/ResponseBase.java @@ -0,0 +1,53 @@ +package me.lensfrex.littlebusters.api.v1.responses.general; + +import com.google.gson.annotations.SerializedName; + +public class ResponseBase { + /** + * 信息码 + */ + private int code; + + /** + * 处理信息 + */ + @SerializedName("msg") + private String message; + + private T data; + + /** + * 构造一个基本响应 + * @param code 信息码 + * @param message 处理信息 + */ + public ResponseBase(int code, String message, T data) { + this.code = code; + this.message = message; + this.data = data; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/utils/InputChecker.java b/src/main/java/me/lensfrex/littlebusters/api/v1/utils/InputChecker.java new file mode 100644 index 0000000..8df2201 --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/utils/InputChecker.java @@ -0,0 +1,27 @@ +package me.lensfrex.littlebusters.api.v1.utils; + +public class InputChecker { + + public static boolean hasInvalidChar(String input) { + char[] source = input.toCharArray(); + for (char c : source) { + if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9'))) { + return true; + } + } + + return false; + } + + public static boolean hasInvisibleChar(String input) { + char[] source = input.toCharArray(); + for (char c : source) { + if (!(c >= ' ' && c <= '~')) { + return true; + } + } + + return false; + } +} diff --git a/src/main/java/me/lensfrex/littlebusters/api/v1/utils/MyBatisUtil.java b/src/main/java/me/lensfrex/littlebusters/api/v1/utils/MyBatisUtil.java new file mode 100644 index 0000000..8e6b03a --- /dev/null +++ b/src/main/java/me/lensfrex/littlebusters/api/v1/utils/MyBatisUtil.java @@ -0,0 +1,28 @@ +package me.lensfrex.littlebusters.api.v1.utils; + +import org.apache.ibatis.io.Resources; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.session.SqlSessionFactoryBuilder; + +import java.io.IOException; +import java.io.InputStream; + +public class MyBatisUtil { + + private static SqlSessionFactory sqlSessionFactory; + + static { + try { + String resource = "mybatis-config.xml"; + InputStream inputStream = Resources.getResourceAsStream(resource); + sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static SqlSession getSqlSession(boolean autoCommit) { + return sqlSessionFactory.openSession(autoCommit); + } +} diff --git a/src/main/resources/mappers/LoginSqlMapper.xml b/src/main/resources/mappers/LoginSqlMapper.xml new file mode 100644 index 0000000..1436b1b --- /dev/null +++ b/src/main/resources/mappers/LoginSqlMapper.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/mappers/RegisterSqlMapper.xml b/src/main/resources/mappers/RegisterSqlMapper.xml new file mode 100644 index 0000000..6c309ad --- /dev/null +++ b/src/main/resources/mappers/RegisterSqlMapper.xml @@ -0,0 +1,12 @@ + + + + + + + insert into `LittleBusters`.`account_basic` (`uuid`, `user_name`, `passwd`) + values (#{uuid}, #{userName}, #{password}) + + \ No newline at end of file diff --git a/src/main/webapp/404.html b/src/main/webapp/404.html new file mode 100644 index 0000000..4c42f1b --- /dev/null +++ b/src/main/webapp/404.html @@ -0,0 +1,93 @@ + + + + 出问题啦 - 真不愧是lensfrex的破站呢 + + + + + +
+
+ +

找不到页面...

+ +
+ +
+

找不到你要访问的页面哟

+

是不是把地址给搞错了?

+
+ +
+
+ + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..21b66f4 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,27 @@ + + + + + LittleBustersApiV1 + org.glassfish.jersey.servlet.ServletContainer + + + jersey.config.server.provider.packages + me.lensfrex.littlebusters + + + + com.sun.jersey.api.json.POJOMappingFeature + true + + + + + LittleBustersApiV1 + /api/v1/* + + + \ No newline at end of file diff --git a/src/main/webapp/css/welcomepage.css b/src/main/webapp/css/welcomepage.css new file mode 100644 index 0000000..97e588e --- /dev/null +++ b/src/main/webapp/css/welcomepage.css @@ -0,0 +1,180 @@ +body { + word-wrap: break-word; + /* background: url(https://res.ciduid.top/static/imgs/compressed/93527505_p0_conpressed.jpg) no-repeat fixed; */ + background-position: 45% 0; + background-size: cover; +} + +.login-box { + background-color: rgb(256, 256, 256, 0.6); + position: fixed; + top: 10%; + left: 5%; + border-radius: 15px; + padding: 20px 20px 17px 20px; +} + +.input-field-group { + transition: height .5s; +} + +.login-box-title { + font-size: 45px; + padding-bottom: 40px; +} + +.input-field input { + width: 400px; + height: 40px; + font-family: Consolas monospace; + padding-left: 10px; + font-size: 16px; + font-weight: bold; + border-radius: 10px; + border: none; + background: rgba(256, 256, 256, 0.6); + outline: none; + outline: 0; + transition: background-color .5s; +} + +.input-field input:focus { + background-color: rgb(214, 234, 248, 0.6); +} + +.input-field { + margin-bottom: 15px; +} + +/* 仿的是pixiv上登录页的按钮 */ +.operator-box .big-button { + display: block; + margin-top: 15px; + margin-bottom: 15px; + width: 190px; + height: 40px; + line-height: 40px; + border-radius: 10px; + border-style: none; + color: #fff; + + outline: none; + font-weight: 700; + font-size: 14px; + text-align: center; + transition: background-color .2s; + cursor: pointer; + display: inline-block; + text-decoration: none; +} + +#login-botton { + background-color: rgb(0 150 250); +} + +#register-botton { + background-color: rgb(34 139 34); +} + +.botton-box { + text-align: center; + display: flex; + justify-content: space-between; +} + +.operator-box .big-button:hover { + background-color: #0382d6; +} + +.operator-box .rl-layout-box .small-link { + cursor: pointer; +} + +.rl-layout-box { + text-align: center; + display: flex; + justify-content: space-between; + /* line-height: 25px; */ +} + +#dialogMask { + width: 100%; + height: 100%; + word-wrap: break-word; + position: fixed; + top: 0; + left: 0; + background: rgb(45 44 44 / 45%); + transition: background 300ms; + z-index: 1001; + display: none; +} + +#background { + width: 100%; + height: 100%; + background: url(https://res.ciduid.top/static/imgs/compressed/93527505_p0_conpressed.jpg) no-repeat fixed; + background-position: 45% 0; + background-size: cover; + word-wrap: break-word; + position: fixed; + top: 0; + left: 0; + z-index: -1; + filter: blur(1.5px); + /* 稍微放大除白边 */ + transform: scale(1.01); +} + +.dialogContentBox { + display: block; + position: fixed; + top: 50%; + left: 50%; + width: 435px; + /* height: 313px; */ + margin-left: -227px; + margin-top: -200px; + box-shadow: 2px 2px 11px #a0a0a0, -2px -2px 4px #a0a0a0; + background-color: #fff; + border-radius: 15px; + padding: 30px 20px 15px 20px; +} + +.dialogContentBox .titleBox { +} + +.dialogContentBox .titleBox #title { + font-size: 30px; + margin: auto auto 15px auto; +} + +.dialogContentBox .bodyBox p { + font-size: 20px; +} + +.dialogContentBox .bottonBox { + text-align: right; + /* margin: auto auto 15px auto; */ +} + +.dialogContentBox .bottonBox #okbtn { + border: none; + background: rgb(0 150 250); + cursor: pointer; + color: white; + font-family: sans-serif; + font-size: 16px; + border-radius: 5px; + height: 31px; + width: 80px; +} + +#errMsgBox p { + margin: 0 0 0 0; + color: red; +} + +@media screen and (max-width: 494px) { + +} \ No newline at end of file diff --git a/src/main/webapp/images/54120216_p0_conpressed.jpg b/src/main/webapp/images/54120216_p0_conpressed.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8230022cb3cedf9df568e4b0d20e6d9bf60b6eed GIT binary patch literal 131140 zcmbrk1yEei_V_uty9F2sGC=U)Is|tK?hu?|&>3v71Og;LaQEO2!5JiiySwY)E(yez z@9$N;_jYUl|J~X>cdF|%r%&JRd%ACR-|q8w@$V*pR9#t38Gwcc0H8fyfd3oKHlc}{ zf`au+Jso8=O{M=aB~;afxO^x!Kk4=90Xf0�JnSO@JDv_ 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 p?MG~>qMN;}xY?Ln;aTY} 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 + + + + + + 欢迎 - LittleBusters + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/js/events.js b/src/main/webapp/js/events.js new file mode 100644 index 0000000..2b5ceaa --- /dev/null +++ b/src/main/webapp/js/events.js @@ -0,0 +1,28 @@ +function login() { + console.log("start login"); + username = $("#username").val(); + password = $("#passwd").val(); + + if (!checkInputDataCorrect(username, password)) { + return; + } + + encPassword = encryptPassword(password); + postData = { + "user_name": username, + "password": encPassword + }; + + $.ajax({ + url: "/api/v1/login", + type: "post", + dataType: "json", + data: JSON.stringify(postData), + success: (result) => { + showDialog("Test", "获取到数据:" + JSON.stringify(result)); + }, + error: (msg, status) => { + showMessage("登陆时发生错误:",JSON.stringify(msg)); + } + }) +} \ No newline at end of file diff --git a/src/main/webapp/js/init.js b/src/main/webapp/js/init.js new file mode 100644 index 0000000..290fa3b --- /dev/null +++ b/src/main/webapp/js/init.js @@ -0,0 +1,12 @@ +init(); + +function init() { + addEventListeners(); +} + +function addEventListeners() { + $(document).on("click", "#register-botton", register); + $(document).on("click", "#login-botton", login); + $(document).on("click", "#forgotPasswordLabel", forgotPasswd); +} + diff --git a/src/main/webapp/js/jquery-3.6.0.min.js b/src/main/webapp/js/jquery-3.6.0.min.js new file mode 100644 index 0000000..c4c6022 --- /dev/null +++ b/src/main/webapp/js/jquery-3.6.0.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0>>2]|=(d[e>>>2]>>>24-8*(e%4)&255)<<24-8*((b+e)%4);else if(65535>>2]=d[e>>>2];else c.push.apply(c,d);this.sigBytes+=a;return this},clamp:function(){var a=this.words,c=this.sigBytes;a[c>>>2]&=4294967295<< +32-8*(c%4);a.length=h.ceil(c/4)},clone:function(){var a=j.clone.call(this);a.words=this.words.slice(0);return a},random:function(a){for(var c=[],d=0;d>>2]>>>24-8*(b%4)&255;d.push((e>>>4).toString(16));d.push((e&15).toString(16))}return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>3]|=parseInt(a.substr(b, +2),16)<<24-4*(b%8);return new q.init(d,c/2)}},k=v.Latin1={stringify:function(a){var c=a.words;a=a.sigBytes;for(var d=[],b=0;b>>2]>>>24-8*(b%4)&255));return d.join("")},parse:function(a){for(var c=a.length,d=[],b=0;b>>2]|=(a.charCodeAt(b)&255)<<24-8*(b%4);return new q.init(d,c)}},l=v.Utf8={stringify:function(a){try{return decodeURIComponent(escape(k.stringify(a)))}catch(c){throw Error("Malformed UTF-8 data");}},parse:function(a){return k.parse(unescape(encodeURIComponent(a)))}}, +x=t.BufferedBlockAlgorithm=j.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(a){"string"==typeof a&&(a=l.parse(a));this._data.concat(a);this._nDataBytes+=a.sigBytes},_process:function(a){var c=this._data,d=c.words,b=c.sigBytes,e=this.blockSize,f=b/(4*e),f=a?h.ceil(f):h.max((f|0)-this._minBufferSize,0);a=f*e;b=h.min(4*a,b);if(a){for(var m=0;mk;){var l;a:{l=u;for(var x=h.sqrt(l),w=2;w<=x;w++)if(!(l%w)){l=!1;break a}l=!0}l&&(8>k&&(j[k]=v(h.pow(u,0.5))),q[k]=v(h.pow(u,1/3)),k++);u++}var a=[],f=f.SHA256=g.extend({_doReset:function(){this._hash=new t.init(j.slice(0))},_doProcessBlock:function(c,d){for(var b=this._hash.words,e=b[0],f=b[1],m=b[2],h=b[3],p=b[4],j=b[5],k=b[6],l=b[7],n=0;64>n;n++){if(16>n)a[n]= +c[d+n]|0;else{var r=a[n-15],g=a[n-2];a[n]=((r<<25|r>>>7)^(r<<14|r>>>18)^r>>>3)+a[n-7]+((g<<15|g>>>17)^(g<<13|g>>>19)^g>>>10)+a[n-16]}r=l+((p<<26|p>>>6)^(p<<21|p>>>11)^(p<<7|p>>>25))+(p&j^~p&k)+q[n]+a[n];g=((e<<30|e>>>2)^(e<<19|e>>>13)^(e<<10|e>>>22))+(e&f^e&m^f&m);l=k;k=j;j=p;p=h+r|0;h=m;m=f;f=e;e=r+g|0}b[0]=b[0]+e|0;b[1]=b[1]+f|0;b[2]=b[2]+m|0;b[3]=b[3]+h|0;b[4]=b[4]+p|0;b[5]=b[5]+j|0;b[6]=b[6]+k|0;b[7]=b[7]+l|0},_doFinalize:function(){var a=this._data,d=a.words,b=8*this._nDataBytes,e=8*a.sigBytes; +d[e>>>5]|=128<<24-e%32;d[(e+64>>>9<<4)+14]=h.floor(b/4294967296);d[(e+64>>>9<<4)+15]=b;a.sigBytes=4*d.length;this._process();return this._hash},clone:function(){var a=g.clone.call(this);a._hash=this._hash.clone();return a}});s.SHA256=g._createHelper(f);s.HmacSHA256=g._createHmacHelper(f)})(Math); diff --git a/src/main/webapp/js/utils.js b/src/main/webapp/js/utils.js new file mode 100644 index 0000000..b003c1a --- /dev/null +++ b/src/main/webapp/js/utils.js @@ -0,0 +1,28 @@ +function isLetter(source) { + for (i = 0; i < source.length; i++) { + char = source.charCodeAt(i); + if (!((char >= 65 && char <= 90) || + (char >= 97 && char <= 122) || + (char >= 48 && char <= 57))) { + return false; + } + } + + return true; +} + +function isNormalCharacter(source) { + for (i = 0; i < source.length; i++) { + char = source.charCodeAt(i); + if (!(char >= 32 && char <= 126)) { + return false; + } + } + + return true; +} + +function encryptPassword(password) { + sha256 = CryptoJS.SHA256; + return sha256(sha256(password).toString()).toString(); +} \ No newline at end of file diff --git a/src/main/webapp/js/welcomepage_message.js b/src/main/webapp/js/welcomepage_message.js new file mode 100644 index 0000000..dc805fb --- /dev/null +++ b/src/main/webapp/js/welcomepage_message.js @@ -0,0 +1,54 @@ +function forgotPasswd() { + showDialog("( ̄﹏ ̄;)", "欸这个嘛...我还没做完呢...( ̄﹏ ̄;)"); +} + +function register() { + showDialog("( ̄﹏ ̄;)", "欸这个嘛...我还没做完呢...( ̄﹏ ̄;)"); +} + +function closeDialog() { + $("#dialogMask").fadeOut(400); +} + +function checkInputDataCorrect(username, password) { + if (username == "" || passwd == "") { + showMessage("用户名和密码都不可以是空的哦"); + return false; + } + + if (!isLetter(username)) { + showMessage("用户名只能是大小写字母和数字哦"); + return false; + } + + if (!isNormalCharacter(passwd)) { + showMessage("不知道你往密码框都搞了点什么东西..."); + return false; + } + return true; +} + +function showMessage(message) { + $("#errMsgBox")[0].innerHTML = `

${message}

`; +} + +function showDialog(title, message) { + html = `
+
+

${title}

+

+
+

${message}

+
+
+ +
+
`; + + dialogMask = $("#dialogMask"); + + dialogMask[0].innerHTML = html; + $(".dialogContentBox .bottonBox #okbtn").click(closeDialog); + dialogMask.fadeIn(400); + dialogMask.css("display", "block"); +}