commit bdc25653a406c61b0f80f2107fa2b313c2dd8b3f
Author: qubiaobiao <3294694717@qq.com>
Date: Fri Mar 27 17:50:18 2026 +0800
北斗启航科技教育平台登录系统
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..4ebc8ae
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1 @@
+coverage
diff --git a/.eslintrc b/.eslintrc
new file mode 100644
index 0000000..f304bdd
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,4 @@
+{
+ "extends": "eslint-config-egg",
+ "root": true
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..652759b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+logs/
+npm-debug.log
+yarn-error.log
+node_modules/
+*-lock.json
+*-lock.yaml
+yarn.lock
+coverage/
+.idea/
+run/
+.DS_Store
+*.sw*
+*.un~
+typings/
+.nyc_output/
diff --git a/.sequelizerc b/.sequelizerc
new file mode 100644
index 0000000..01d9847
--- /dev/null
+++ b/.sequelizerc
@@ -0,0 +1,10 @@
+'use strict';
+
+const path = require('path');
+
+module.exports = {
+ "config": path.join(__dirname, 'database/config.json'),
+ 'migrations-path': path.join(__dirname, 'database/migrations'),
+ 'seeders-path': path.join(__dirname, 'database/seeders'),
+ 'models-path': path.join(__dirname, 'app/model'),
+};
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..f9ce2fd
--- /dev/null
+++ b/README.md
@@ -0,0 +1,31 @@
+# authentication
+
+
+
+## QuickStart
+
+
+
+see [egg docs][egg] for more detail.
+
+### Development
+
+```bash
+npm i
+npm run dev
+open http://localhost:7001/
+```
+
+### Deploy
+
+```bash
+npm start
+npm stop
+```
+
+### npm scripts
+
+- Use `npm run lint` to check code style.
+- Use `npm test` to run unit test.
+
+[egg]: https://eggjs.org
diff --git a/app/controller/BSide.js b/app/controller/BSide.js
new file mode 100644
index 0000000..b886891
--- /dev/null
+++ b/app/controller/BSide.js
@@ -0,0 +1,109 @@
+'use strict';
+
+const Controller = require('../core/base_controller');
+
+const fileName = "BSide";
+
+const checkUid = async (thisPlace) => {
+ const ctx = thisPlace.ctx;
+ const token = ctx.request.header.authorization;
+ const redis = ctx.app.redis;
+ let rdmcode = await redis.get('db0').get(token);
+ if (!rdmcode) {
+ return false;
+ }
+ return rdmcode;
+};
+
+class BSideController extends Controller {
+ // B端登录
+ async login() {
+ const { ctx } = this;
+ try {
+ const body = ctx.request.body;
+ const name = this.decryptRequest(body.name);
+ const password = this.decryptRequest(body.password);
+ const user = await ctx.service.bSide.loginUser(name);
+ if(user == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ const client = await ctx.service.verify.loginClient(body.client_id);
+ if(client == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ // await ctx.service.bSide.subscribe(user.dataValues, client.dataValues);
+ if (user && client && user.dataValues.status !== 2 && user.dataValues.password == this.shaForm(password, this.decryptRequest(user.dataValues.salt))) {
+ const result = await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/user/authorize', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 3000,
+ data: {
+ state: 'xyz',
+ response_type: 'code',
+ username: user.dataValues.uid,
+ password: password,
+ client_id: client.dataValues.client_id,
+ client_secret: client.dataValues.client_secret,
+ redirect_uri: 'http://127.0.0.1:' + ctx.app.server.address().port + '/getToken/'
+ },
+ });
+ const timestamp = new Date().getTime();
+ const data = {
+ data: this.encryptRequest(user.dataValues.uid + '?' + timestamp),
+ redirect: client.dataValues.client_url + '?' + result.headers.location.split('?')[1].split('&')[0].split('=')[1]
+ };
+ await ctx.service.bSide.loginStatus(user.dataValues.uid, 1);
+ this.setResponse(ctx, 200, '登录成功', "deconstruction", data);
+ } else {
+ const data = user.dataValues.status == 2 ? { msg: '该账号已被封禁,请联系管理员申诉', code: 444 } : { msg: '登录失败', code: 404 };
+ this.setResponse(ctx, 404, '登录失败', "deconstruction", data);
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "login";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ //B端管理员修改用户基本信息
+ async editUserManager() {
+ const ctx = this.ctx;
+ try {
+ let rdmcode = await checkUid(this);
+ if (!rdmcode) {
+ this.setResponse(ctx, 401, 'token过期或错误', "none");
+ return;
+ }
+ const uid = JSON.parse(rdmcode).uid;
+ const body = ctx.request.body;
+ const Manager = await ctx.service.bSide.uidfinder(uid);
+ if (Manager == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (Manager && Manager.dataValues.role == '1') {
+ const userData = await ctx.service.bSide.editUserManager(body.editMsg, body.userMsg);
+ if (userData == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (userData[0] !== 0) {
+ this.setResponse(ctx, 200, '修改用户基本信息成功', "none");
+ } else {
+ this.setResponse(ctx, 404, '修改用户基本信息失败', "none");
+ }
+ } else {
+ this.setResponse(ctx, 404, '修改用户基本信息失败', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "editUserManager";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+}
+
+module.exports = BSideController;
\ No newline at end of file
diff --git a/app/controller/CNTEVService.js b/app/controller/CNTEVService.js
new file mode 100644
index 0000000..fc89542
--- /dev/null
+++ b/app/controller/CNTEVService.js
@@ -0,0 +1,50 @@
+'use strict';
+
+const Controller = require('../core/base_controller');
+
+const fileName = "CNTEVService";
+
+class CNTEVServiceController extends Controller {
+ // 身份证二要素核验
+ async CNTEV() {
+ const { ctx } = this;
+ try {
+ const { user_name, identity_card } = ctx.request.body;
+ const result = await ctx.service.cNTEVService.CNTEV(user_name, identity_card);
+ if (result == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (result.status == "1") {
+ await ctx.service.cNTEVService.realMark(user_name, identity_card, true);
+ this.setResponse(ctx, 200, result.msg, "none");
+ } else if (result.status == "0" || result.status == "2" || result.status == "400") {
+ await ctx.service.cNTEVService.realMark(user_name, identity_card, false);
+ this.setResponse(ctx, 200, result.msg, "none");
+ } else if (result.status == "600") {
+ setTimeout(async () => {
+ await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/CNTEV', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 3000,
+ data: {
+ identity_card,
+ user_name
+ },
+ });
+ }, 3000);
+ this.setResponse(ctx, 200, '正在核验中', "none");
+ } else {
+ await ctx.service.cNTEVService.realMark(user_name, identity_card, false);
+ this.setResponse(ctx, 404, '核验失败', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "CNTEV";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+}
+
+module.exports = CNTEVServiceController;
\ No newline at end of file
diff --git a/app/controller/CSide.js b/app/controller/CSide.js
new file mode 100644
index 0000000..75ddfa0
--- /dev/null
+++ b/app/controller/CSide.js
@@ -0,0 +1,170 @@
+'use strict';
+
+const Controller = require('../core/base_controller');
+
+const fileName = "CSide";
+
+class CSideController extends Controller {
+ // 比较用户名
+ async diffName() {
+ try {
+ const ctx = this.ctx;
+ const body = ctx.request.body;
+ const result = await ctx.service.cSide.loginUser(body.name);
+ if (result == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (result) {
+ this.setResponse(ctx, 404, '该用户名已存在', "none");
+ } else {
+ this.setResponse(ctx, 200, '验证通过', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "diffName";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 比较电话号码
+ async diffPhone() {
+ try {
+ const ctx = this.ctx;
+ const body = ctx.request.body;
+ const result = await ctx.service.cSide.diffPhone(body.phone);
+ if (result == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (result) {
+ this.setResponse(ctx, 404, '该手机号已注册', "none");
+ } else {
+ this.setResponse(ctx, 200, '验证通过', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "diffPhone";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 比较邮箱
+ async diffEmail() {
+ try {
+ const ctx = this.ctx;
+ const body = ctx.request.body;
+ const result = await ctx.service.cSide.diffEmail(body.email);
+ if (result == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (result) {
+ this.setResponse(ctx, 404, '该邮箱已经注册', "none");
+ } else {
+ this.setResponse(ctx, 200, '验证通过', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "diffEmail";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // C端用户注册
+ async registered() {
+ const { ctx } = this;
+ try {
+ const salt = this.generateRandomString();
+ const body = ctx.request.body;
+ const form = {
+ uid: this.generateNumberString('C'),
+ salt: this.encryptRequest(salt),
+ status: 0,
+ role: 0,
+ avatar: 'default',
+ account_name: this.decryptRequest(body.account_name),
+ password: this.shaForm(this.decryptRequest(body.password), salt),
+ user_name: body.user_name == "" ? "" : this.decryptRequest(body.user_name),
+ phone: this.decryptRequest(body.phone),
+ gender: body.gender == "" ? null : this.decryptRequest(body.gender),
+ age: body.age == "" ? null : this.decryptRequest(body.age),
+ email: body.email == "" ? "" : this.decryptRequest(body.email),
+ address: body.address == "" ? "" : this.decryptRequest(body.address),
+ post_code: body.post_code == "" ? "" : this.decryptRequest(body.post_code),
+ created_at: new Date(),
+ updated_at: new Date(),
+ login_at: new Date(),
+ login_status: 0,
+ };
+ const result = await ctx.service.cSide.registered(form);
+ if(result == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (result) {
+ this.setResponse(ctx, result.code, result.message, "none");
+ } else {
+ this.setResponse(ctx, 404, '注册失败', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "registered";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 通用服务登录
+ async login() {
+ const { ctx } = this;
+ try {
+ const body = ctx.request.body;
+ const name = this.decryptRequest(body.name);
+ const password = this.decryptRequest(body.password);
+ const user = await ctx.service.cSide.loginUser(name);
+ if(user == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ const client = await ctx.service.verify.loginClient(body.client_id);
+ if(client == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ // await ctx.service.cSide.subscribe(user.dataValues, client.dataValues);
+ if (user && client && user.dataValues.status !== 2 && user.dataValues.password == this.shaForm(password, this.decryptRequest(user.dataValues.salt))) {
+ const result = await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/user/authorize', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 3000,
+ data: {
+ state: 'xyz',
+ response_type: 'code',
+ username: user.dataValues.uid,
+ password: password,
+ client_id: client.dataValues.client_id,
+ client_secret: client.dataValues.client_secret,
+ redirect_uri: 'http://127.0.0.1:' + ctx.app.server.address().port + '/getToken/'
+ },
+ });
+ const timestamp = new Date().getTime();
+ const data = {
+ data: this.encryptRequest(user.dataValues.uid + '?' + timestamp),
+ redirect: client.dataValues.client_url + '?' + result.headers.location.split('?')[1].split('&')[0].split('=')[1]
+ };
+ await ctx.service.cSide.loginStatus(user.dataValues.uid, 1);
+ this.setResponse(ctx, 200, '登录成功', "deconstruction", data);
+ } else {
+ const data = user.dataValues.status == 2 ? { msg: '该账号已被封禁,请联系管理员申诉', code: 444 } : { msg: '登录失败', code: 404 };
+ this.setResponse(ctx, 404, '登录失败', "deconstruction", data);
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "login";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+}
+
+module.exports = CSideController;
\ No newline at end of file
diff --git a/app/controller/Contest.js b/app/controller/Contest.js
new file mode 100644
index 0000000..d9f6bba
--- /dev/null
+++ b/app/controller/Contest.js
@@ -0,0 +1,60 @@
+'use strict';
+
+const Controller = require('../core/base_controller');
+
+const fileName = "Contest";
+
+class ContestController extends Controller {
+ // 竞赛用户登录
+ async login() {
+ const { ctx } = this;
+ try {
+ const body = ctx.request.body;
+ const name = this.decryptRequest(body.name);
+ const password = this.decryptRequest(body.password);
+ const user = await ctx.service.contest.loginUser(name);
+ if(user == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ const client = await ctx.service.verify.loginClient(body.client_id);
+ if(client == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (user && client && user.dataValues.status !== 2 && user.dataValues.password == this.shaForm(password, this.decryptRequest(user.dataValues.salt))) {
+ const result = await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/user/authorize', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 3000,
+ data: {
+ state: 'xyz',
+ response_type: 'code',
+ username: user.dataValues.uid,
+ password: password,
+ client_id: client.dataValues.client_id,
+ client_secret: client.dataValues.client_secret,
+ redirect_uri: 'http://127.0.0.1:' + ctx.app.server.address().port + '/getToken/'
+ },
+ });
+ const timestamp = new Date().getTime();
+ const data = {
+ data: this.encryptRequest(user.dataValues.uid + '?' + timestamp),
+ redirect: client.dataValues.client_url + '?' + result.headers.location.split('?')[1].split('&')[0].split('=')[1]
+ };
+ await ctx.service.contest.loginStatus(user.dataValues.uid, 1);
+ this.setResponse(ctx, 200, '登录成功', "deconstruction", data);
+ } else {
+ const data = user.dataValues.status == 2 ? { msg: '该账号已被封禁,请联系管理员申诉', code: 444 } : { msg: '登录失败', code: 404 };
+ this.setResponse(ctx, 404, '登录失败', "deconstruction", data);
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "login";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+}
+
+module.exports = ContestController;
\ No newline at end of file
diff --git a/app/controller/Exam.js b/app/controller/Exam.js
new file mode 100644
index 0000000..68f7619
--- /dev/null
+++ b/app/controller/Exam.js
@@ -0,0 +1,55 @@
+'use strict';
+
+const Controller = require('../core/base_controller');
+
+const fileName = "Exam";
+
+class ExamController extends Controller {
+ // 北斗应用技术培训证书项目报名系统登录
+ async login() {
+ const { ctx } = this;
+ try {
+ const body = ctx.request.body;
+ const phone = this.decryptRequest(body.phone);
+ const password = this.decryptRequest(body.password);
+ const user = await ctx.service.exam.loginUser(phone);
+ if(user == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (user && user.dataValues.status !== 2 && user.dataValues.password == this.shaForm(password, this.decryptRequest(user.dataValues.salt))) {
+ const result =await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/user/authorize', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 3000,
+ data: {
+ state: 'xyz',
+ response_type: 'code',
+ username: user.dataValues.uid,
+ password: password,
+ client_id: "exam",
+ client_secret: "exam",
+ redirect_uri: 'http://127.0.0.1:' + ctx.app.server.address().port + '/getToken/'
+ },
+ });
+ const timestamp = new Date().getTime();
+ const data = {
+ data: this.encryptRequest(user.dataValues.uid + '?' + timestamp),
+ loginCode: result.headers.location.split('?')[1].split('&')[0].split('=')[1]
+ };
+ await ctx.service.exam.loginStatus(user.dataValues.uid, 1);
+ this.setResponse(ctx, 200, '登录成功', "deconstruction", data);
+ } else {
+ const data = user.dataValues.status == 2 ? { msg: '该账号已被封禁,请联系管理员申诉', code: 444 } : { msg: '登录失败', code: 404 };
+ this.setResponse(ctx, 404, '登录失败', "deconstruction", data);
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "login";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+}
+
+module.exports = ExamController;
\ No newline at end of file
diff --git a/app/controller/ExamManager.js b/app/controller/ExamManager.js
new file mode 100644
index 0000000..3ec4f90
--- /dev/null
+++ b/app/controller/ExamManager.js
@@ -0,0 +1,55 @@
+'use strict';
+
+const Controller = require('../core/base_controller');
+
+const fileName = "ExamManager";
+
+class ExamManagerController extends Controller {
+ // 北斗应用技术培训证书项目报名系统管理系统登录
+ async login() {
+ const { ctx } = this;
+ try {
+ const body = ctx.request.body;
+ const name = this.decryptRequest(body.name);
+ const password = this.decryptRequest(body.password);
+ const user = await ctx.service.examManager.loginUser(name);
+ if(user == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (user && user.dataValues.status !== 2 && user.dataValues.password == this.shaForm(password, this.decryptRequest(user.dataValues.salt))) {
+ const result =await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/user/authorize', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 3000,
+ data: {
+ state: 'xyz',
+ response_type: 'code',
+ username: user.dataValues.uid,
+ password: password,
+ client_id: "exam-manager",
+ client_secret: "exam-manager",
+ redirect_uri: 'http://127.0.0.1:' + ctx.app.server.address().port + '/getToken/'
+ },
+ });
+ const timestamp = new Date().getTime();
+ const data = {
+ data: this.encryptRequest(user.dataValues.uid + '?' + timestamp),
+ loginCode: result.headers.location.split('?')[1].split('&')[0].split('=')[1]
+ };
+ await ctx.service.examManager.loginStatus(user.dataValues.uid, 1);
+ this.setResponse(ctx, 200, '登录成功', "deconstruction", data);
+ } else {
+ const data = user.dataValues.status == 2 ? { msg: '该账号已被封禁,请联系管理员申诉', code: 444 } : { msg: '登录失败', code: 404 };
+ this.setResponse(ctx, 404, '登录失败', "deconstruction", data);
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "login";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+}
+
+module.exports = ExamManagerController;
\ No newline at end of file
diff --git a/app/controller/Id2MVService.js b/app/controller/Id2MVService.js
new file mode 100644
index 0000000..72bc194
--- /dev/null
+++ b/app/controller/Id2MVService.js
@@ -0,0 +1,47 @@
+'use strict';
+
+const Controller = require('../core/base_controller');
+
+const fileName = "Id2MVService";
+
+class Id2MVServiceController extends Controller {
+ // 身份二要素核验
+ async checkIdCard() {
+ const { ctx } = this;
+ try {
+ // this.decryptRequest(body.idCard)
+ // this.decryptRequest(body.name)
+ const { idCard, name } = ctx.request.body;
+ const result = await ctx.service.id2MVService.checkIdCard(idCard, name);
+ if (result == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (result.status == "1" || result.status == "2" || result.status == "3") {
+ this.setResponse(ctx, 200, result.msg, "none");
+ } else if (result.status == "600") {
+ setTimeout(async () => {
+ await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/checkIdCard', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 3000,
+ data: {
+ idCard,
+ name
+ },
+ });
+ }, 3000);
+ this.setResponse(ctx, 200, '正在核验中', "none");
+ } else {
+ this.setResponse(ctx, 404, '核验失败', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "checkIdCard";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+}
+
+module.exports = Id2MVServiceController;
\ No newline at end of file
diff --git a/app/controller/Insiders.js b/app/controller/Insiders.js
new file mode 100644
index 0000000..7f69c44
--- /dev/null
+++ b/app/controller/Insiders.js
@@ -0,0 +1,55 @@
+'use strict';
+
+const Controller = require('../core/base_controller');
+
+const fileName = "Insiders";
+
+class InsidersController extends Controller {
+ // 管理系统登录
+ async login() {
+ const { ctx } = this;
+ try {
+ const body = ctx.request.body;
+ const name = this.decryptRequest(body.name);
+ const password = this.decryptRequest(body.password);
+ const user = await ctx.service.insiders.loginUser(name);
+ if(user == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (user && user.dataValues.status !== 2 && user.dataValues.password == this.shaForm(password, this.decryptRequest(user.dataValues.salt))) {
+ const result =await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/user/authorize', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 3000,
+ data: {
+ state: 'xyz',
+ response_type: 'code',
+ username: user.dataValues.uid,
+ password: password,
+ client_id: "insiders-manager",
+ client_secret: "insiders-manager",
+ redirect_uri: 'http://127.0.0.1:' + ctx.app.server.address().port + '/getToken/'
+ },
+ });
+ const timestamp = new Date().getTime();
+ const data = {
+ data: this.encryptRequest(user.dataValues.uid + '?' + timestamp),
+ loginCode: result.headers.location.split('?')[1].split('&')[0].split('=')[1]
+ };
+ await ctx.service.insiders.loginStatus(user.dataValues.uid, 1);
+ this.setResponse(ctx, 200, '登录成功', "deconstruction", data);
+ } else {
+ const data = user.dataValues.status == 2 ? { msg: '该账号已被封禁,请联系管理员申诉', code: 444 } : { msg: '登录失败', code: 404 };
+ this.setResponse(ctx, 404, '登录失败', "deconstruction", data);
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "login";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+}
+
+module.exports = InsidersController;
\ No newline at end of file
diff --git a/app/controller/SMSService.js b/app/controller/SMSService.js
new file mode 100644
index 0000000..41fcab0
--- /dev/null
+++ b/app/controller/SMSService.js
@@ -0,0 +1,68 @@
+'use strict';
+
+const Controller = require('../core/base_controller');
+
+const fileName = "SMSService";
+
+class SMSServiceController extends Controller {
+ // 向手机发送短信验证码
+ async sendSMS() {
+ const { ctx } = this;
+ try {
+ const { phone } = ctx.request.body;
+ const result = await ctx.service.sMSService.sendSMS(this.decryptRequest(phone));
+ if (result == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (result.status == "200") {
+ this.setResponse(ctx, 200, '验证码已发送', "none");
+ } else if (result.status == "600") {
+ setTimeout(async () => {
+ await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/sendSMS', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 6000,
+ data: {
+ phone
+ },
+ });
+ }, 3000);
+ this.setResponse(ctx, 200, '正在发送验证码', "none");
+ } else {
+ this.setResponse(ctx, 404, '请重试', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "sendSMS";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 校验短信验证码
+ async checkCode() {
+ const { ctx } = this;
+ try {
+ const body = ctx.request.body;
+ const phone = this.decryptRequest(body.phone);
+ const code = this.decryptRequest(body.code);
+ const result = await ctx.service.sMSService.checkCode(phone, code);
+ if (result == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (result) {
+ this.setResponse(ctx, 200, '验证通过', "none");
+ } else {
+ this.setResponse(ctx, 404, '验证失败', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "checkCode";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+}
+
+module.exports = SMSServiceController;
\ No newline at end of file
diff --git a/app/controller/verify.js b/app/controller/verify.js
new file mode 100644
index 0000000..e58992c
--- /dev/null
+++ b/app/controller/verify.js
@@ -0,0 +1,396 @@
+'use strict';
+
+const Controller = require('../core/base_controller');
+
+const fileName = "verify";
+
+const redisType = {
+ "B": "db0",
+ "C": "db1",
+ "M": "db2",
+ "T": "db5",
+ "E": "db6",
+ "A": "db7"
+};
+
+const modelType = {
+ "B": "bSide",
+ "C": "cSide",
+ "M": "insiders",
+ "T": "contest",
+ "E": "exam",
+ "A": "examManager"
+};
+
+const checkUid = async (thisPlace) => {
+ const ctx = thisPlace.ctx;
+ const uid = ctx.request.body.uid;
+ const token = ctx.request.header.authorization;
+ const redis = ctx.app.redis;
+ let rdmcode;
+ if (!uid) {
+ let allRedis = [];
+ Object.entries(redisType).forEach(([key, value]) => {
+ allRedis.push(redis.get(value).get(token));
+ });
+ const [buser, cuser, muser, tuser, euser, auser] = await Promise.all(allRedis);
+ rdmcode = buser || cuser || muser || tuser || euser || auser;
+ } else {
+ let decryptUid = thisPlace.decryptRequest(uid).split('?')[0];
+ const lastCode = decryptUid[decryptUid.length - 1];
+ rdmcode = await redis.get(redisType[lastCode]).get(token);
+ }
+ if (!rdmcode) {
+ return false;
+ }
+ return rdmcode;
+};
+
+class VerifyController extends Controller {
+ // 确定登录页面
+ async toLogin() {
+ const ctx = this.ctx;
+ try {
+ // 请求发出的源网址,适用于不同端用户登录不同域名网站
+ const origin_url = ctx.request.header.origin;
+ // 请求发出的具体网址,适用于不同端用户登录同一域名的网站
+ // const { origin_url } = ctx.request.body;
+ const result = await ctx.service.verify.toLogin(origin_url);
+ if (result == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (result) {
+ const data = { redirect: result.dataValues.login_url + '?client_id=' + result.dataValues.temporary_id };
+ this.setResponse(ctx, 200, '跳转到登录页', "deconstruction", data);
+ } else {
+ this.setResponse(ctx, 404, '未找到登录页', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "toLogin";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 确定登录状态
+ async loginStatus() {
+ const ctx = this.ctx;
+ try {
+ const body = ctx.request.body;
+ const uid = this.decryptRequest(body.data).split('?')[0];
+ const lastCode = uid[uid.length - 1];
+ const status = await ctx.app.redis.get(redisType[lastCode]).get(uid);
+ const client = await ctx.service.verify.loginClient(body.client_id);
+ if (client == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (status !== null && client.dataValues.login_url == ctx.request.header.referer.split('?')[0] && client.dataValues.client_id == JSON.parse(status).clientId) {
+ const timestamp = new Date().getTime();
+ const serverType = ctx.service[modelType[lastCode]];
+ await serverType.loginStatus(uid, 1);
+ const data = {
+ data: this.encryptRequest(uid + '?' + timestamp),
+ access_token: JSON.parse(status).accessToken,
+ refresh_token: JSON.parse(status).refreshToken,
+ redirect: client.dataValues.client_url + '?' + body.data,
+ };
+ this.setResponse(ctx, 200, '已登录', "deconstruction", data);
+ } else {
+ const serverType = ctx.service[modelType[lastCode]];
+ await serverType.loginStatus(uid, 0);
+ this.setResponse(ctx, 404, '未登录', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "loginStatus";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 退出登录
+ async unLogin() {
+ const ctx = this.ctx;
+ try {
+ let rdmcode = await checkUid(this);
+ if (!rdmcode) {
+ this.setResponse(ctx, 401, 'token过期或错误', "none");
+ return;
+ }
+ const uid = JSON.parse(rdmcode).uid;
+ const lastCode = uid[uid.length - 1];
+ const serverType = ctx.service[modelType[lastCode]];
+ if(modelType == 'B' || modelType == 'C' || modelType == 'M') await serverType.loginStatus(uid, 0);
+ const redisDbType = redisType[lastCode];
+ await ctx.app.redis.get(redisDbType).del(ctx.request.body.access_token);
+ await ctx.app.redis.get(redisDbType).del(ctx.request.body.refresh_token);
+ await ctx.app.redis.get(redisDbType).del(uid);
+ this.setResponse(ctx, 200, 'unLogin', "none");
+ } catch (error) {
+ const blockName = fileName + "--" + "unLogin";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 获取 token
+ async getToken() {
+ const ctx = this.ctx;
+ try {
+ const body = ctx.request.body;
+ let code = body.code, type = this.decryptRequest(body.type), codeObj, typeMark = type, accessToken, refreshToken;
+ if (type === 'code') {
+ codeObj = await ctx.app.redis.get('db3').get(code);
+ if (!codeObj) {
+ typeMark = 'passLogin';
+ code = this.decryptRequest(code).split('?')[0];
+ const redisDbType = redisType[code[code.length - 1]];
+ codeObj = await ctx.app.redis.get(redisDbType).get(code);
+ if (!codeObj) return codeObj;
+ accessToken = JSON.parse(codeObj).accessToken;
+ refreshToken = JSON.parse(codeObj).refreshToken;
+ codeObj = await ctx.app.redis.get(redisDbType).get(refreshToken);
+ }
+ } else {
+ type = type.split('?')[0];
+ const redisDbType = redisType[type[type.length - 1]];
+ codeObj = await ctx.app.redis.get(redisDbType).get(code);
+ }
+ if (!codeObj) {
+ this.setResponse(ctx, 402, '请重新登录', "none");
+ } else {
+ const client_id = JSON.parse(codeObj).clientId;
+ const client = await ctx.service.verify.getToken(client_id);
+ const timestamp = new Date().getTime();
+ const origin_url = ctx.request.header.origin;
+ if (client == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ } else if (client && typeMark == "passLogin") {
+ const data = {
+ data: this.encryptRequest(JSON.parse(codeObj).uid + '?' + timestamp),
+ access_token: accessToken,
+ refresh_token: refreshToken,
+ redirect: origin_url
+ };
+ this.setResponse(ctx, 200, '验证通过', "deconstruction", data);
+ } else if (client && typeMark !== "passLogin") {
+ const redisCode = { code, type };
+ const result = await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/user/token', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 3000,
+ data: {
+ grant_type: 'authorization_code',
+ code: JSON.stringify(redisCode),
+ client_id: client.dataValues.client_id,
+ client_secret: client.dataValues.client_secret,
+ redirect_uri: 'http://127.0.0.1:' + ctx.app.server.address().port + '/getToken/',
+ },
+ });
+ if (result.status == 200) {
+ const data = {
+ data: this.encryptRequest(result.data.access_token.uid + '?' + timestamp),
+ access_token: result.data.access_token.token,
+ refresh_token: result.data.refresh_token,
+ redirect: client.dataValues.client_id == "insiders-manager" ? origin_url : client.dataValues.client_url
+ }
+ this.setResponse(ctx, 200, '验证通过', "deconstruction", data);
+ } else {
+ this.setResponse(ctx, 402, '请重新登录', "none");
+ }
+ } else {
+ this.setResponse(ctx, 402, '请重新登录', "none");
+ }
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "getToken";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 验证token
+ async getMsg() {
+ const { ctx } = this;
+ try {
+ // 客户端实现
+ // 访问 /user/token 端口验证 accessToken,获取用户信息
+ let accessToken = {
+ access_token: ctx.request.header.authorization,
+ uid: this.decryptRequest(ctx.request.body.data).split('?')[0]
+ };
+ const result = await ctx.curl('http://127.0.0.1:' + ctx.app.server.address().port + '/user/authenticate', {
+ dataType: 'json',
+ contentType: 'application/x-www-form-urlencoded',
+ method: 'POST',
+ timeout: 3000,
+ data: {
+ status: 'success',
+ access_token: JSON.stringify(accessToken)
+ },
+ });
+ if (result.status == 200) {
+ let uid = result.data.data.token.user.uid;
+ let lastCode = uid[uid.length - 1];
+ const userdata = await ctx.service[modelType[lastCode]].uidfinder(uid);
+ if (userdata == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ const timestamp = new Date().getTime();
+ const encryptData = this.encryptRequest(userdata.uid + '?' + timestamp);
+ if (userdata) {
+ const data = { data: encryptData };
+ this.setResponse(ctx, 200, '验证通过', "deconstruction", data);
+ } else {
+ this.setResponse(ctx, 401, 'token错误或过期', "none");
+ }
+ } else {
+ this.setResponse(ctx, 401, 'token错误或过期', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "getMsg";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ async show() {
+ const ctx = this.ctx;
+ try {
+ const data = { data: ctx.state.oauth };
+ this.setResponse(ctx, 200, '返回信息', "deconstruction", data);
+ } catch (error) {
+ const blockName = fileName + "--" + "show";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 获取用户基本信息
+ async getUser() {
+ const ctx = this.ctx;
+ try {
+ let rdmcode = await checkUid(this);
+ if (!rdmcode) {
+ this.setResponse(ctx, 401, 'token过期或错误', "none");
+ return;
+ }
+ const uid = JSON.parse(rdmcode).uid;
+ const lastCode = uid[uid.length - 1];
+ const userData = await ctx.service[modelType[lastCode]].getUser(uid);
+ if (userData == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (userData) {
+ const data = { userData };
+ this.setResponse(ctx, 200, '获取用户基本信息成功', "deconstruction", data);
+ } else {
+ this.setResponse(ctx, 404, '获取用户基本信息失败', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "getUser";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 修改用户基本信息
+ async editUser() {
+ const ctx = this.ctx;
+ try {
+ let rdmcode = await checkUid(this);
+ if (!rdmcode) {
+ this.setResponse(ctx, 401, 'token过期或错误', "none");
+ return;
+ }
+ const uid = JSON.parse(rdmcode).uid;
+ const body = ctx.request.body;
+ const lastCode = uid[uid.length - 1];
+ const userData = await ctx.service[modelType[lastCode]].editUser(body.userMsg, uid);
+ if (userData == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (userData[0] != 0) {
+ this.setResponse(ctx, 200, '修改用户基本信息成功', "none");
+ } else {
+ this.setResponse(ctx, 404, '修改用户基本信息失败', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "editUser";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 修改密码
+ async changePassword() {
+ const ctx = this.ctx;
+ try {
+ let rdmcode = await checkUid(this);
+ if (!rdmcode) {
+ this.setResponse(ctx, 401, 'token过期或错误', "none");
+ return;
+ }
+ const uid = JSON.parse(rdmcode).uid;
+ const lastCode = uid[uid.length - 1];
+ const body = ctx.request.body;
+ const oldPassword = this.decryptRequest(body.passwordForm.oldPassword);
+ const newPassword = this.decryptRequest(body.passwordForm.newPassword);
+ const changeList = await ctx.service[modelType[lastCode]].changePassword(uid, oldPassword, newPassword);
+ if (changeList == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (changeList && changeList[0] !== 0) {
+ this.setResponse(ctx, 200, '修改密码成功', "none");
+ } else {
+ this.setResponse(ctx, 404, '修改密码失败', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "changePassword";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+
+ // 重置密码
+ async resetPassword() {
+ const ctx = this.ctx;
+ try {
+ let rdmcode = await checkUid(this);
+ if (!rdmcode) {
+ this.setResponse(ctx, 401, 'token过期或错误', "none");
+ return;
+ }
+ const uid = JSON.parse(rdmcode).uid;
+ const lastCode = uid[uid.length - 1];
+ const body = ctx.request.body;
+ const model = this.decryptRequest(body.model);
+ const defaultPassword = this.decryptRequest(body.defaultPassword);
+ const password = this.decryptRequest(body.password);
+ const requestMsg = body.userMsg;
+ const resetType = body.resetType;
+ const resetList = await ctx.service[modelType[lastCode]].resetPassword(uid, model, defaultPassword, password, requestMsg, resetType);
+ if (resetList == "error") {
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ return;
+ }
+ if (resetList) {
+ this.setResponse(ctx, 200, '重置密码成功', "none");
+ } else {
+ this.setResponse(ctx, 404, '重置密码失败', "none");
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "resetPassword";
+ ctx.app.middleware.log('../../controllerLog', blockName + ">>>>" + error);
+ this.setResponse(ctx, 500, '服务器错误', "none");
+ }
+ }
+}
+
+module.exports = VerifyController;
\ No newline at end of file
diff --git a/app/core/base_controller.js b/app/core/base_controller.js
new file mode 100644
index 0000000..7d3eab9
--- /dev/null
+++ b/app/core/base_controller.js
@@ -0,0 +1,95 @@
+const { Controller } = require('egg');
+
+const sha256 = require("crypto-js/sha256");
+
+const CryptoJS = require("crypto-js");
+
+const KEY = CryptoJS.enc.Utf8.parse('BDQH');
+
+class BaseController extends Controller {
+ shaForm = (body, salt) => {
+ return sha256(sha256(body).toString() + salt).toString();
+ }
+
+ encryptRequest = (body) => {
+ return CryptoJS.AES.encrypt(body, KEY, {
+ mode: CryptoJS.mode.ECB,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString();
+ }
+
+ decryptRequest = (body) => {
+ return CryptoJS.AES.decrypt(body, KEY, {
+ mode: CryptoJS.mode.ECB,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString(CryptoJS.enc.Utf8);
+ }
+
+ // 用户uid生成函数
+ generateNumberString = (side) => {
+ // 获取当前日期(年月日)
+ const now = new Date();
+ const year = String(now.getFullYear()).padStart(4, '0');
+ const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份从0开始,所以加1
+ const date = String(now.getDate()).padStart(2, '0');
+ const dateString = year + month + date;
+
+ // 获取当前时间戳的后三位
+ const timestamp = String(Date.now()).slice(-3);
+
+ // 生成三位随机数字
+ const randomDigits = Math.floor(Math.random() * 100).toString().padStart(3, '0');
+
+ // 组合成最终的15位字符串
+ const fullNumberString = dateString + timestamp + randomDigits + side;
+
+ return fullNumberString;
+ }
+
+ // 随机盐生成函数
+ generateRandomString = () => {
+ const lowerCaseLetters = 'abcdefghijklmnopqrstuvwxyz';
+ const upperCaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+ const numbers = '0123456789';
+
+ let result = '';
+
+ // 生成5位随机小写字母
+ for (let i = 0; i < 5; i++) {
+ const randomIndex = Math.floor(Math.random() * lowerCaseLetters.length);
+ result += lowerCaseLetters[randomIndex];
+ }
+
+ // 生成5位随机大写字母
+ for (let i = 0; i < 5; i++) {
+ const randomIndex = Math.floor(Math.random() * upperCaseLetters.length);
+ result += upperCaseLetters[randomIndex];
+ }
+
+ // 生成2位随机数字
+ for (let i = 0; i < 2; i++) {
+ const randomIndex = Math.floor(Math.random() * numbers.length);
+ result += numbers[randomIndex];
+ }
+
+ // 打乱整个字符串
+ const characters = result.split('');
+ for (let i = characters.length - 1; i > 0; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ [characters[i], characters[j]] = [characters[j], characters[i]];
+ }
+
+ return characters.join('');
+ }
+
+ setResponse = (ctx, code, msg, model, data = {}) => {
+ const modelType = {
+ "none": { code, msg },
+ "deconstruction": { code, msg, ...data },
+ "polymerization": { code, msg, data }
+ }
+ ctx.body = modelType[model];
+ }
+}
+
+module.exports = BaseController;
\ No newline at end of file
diff --git a/app/core/base_service.js b/app/core/base_service.js
new file mode 100644
index 0000000..e2547fc
--- /dev/null
+++ b/app/core/base_service.js
@@ -0,0 +1,114 @@
+const { Service } = require('egg');
+
+const crypto = require('crypto');
+
+const sha256 = require("crypto-js/sha256");
+
+const CryptoJS = require("crypto-js");
+
+const KEY = CryptoJS.enc.Utf8.parse('BDQH');
+
+class BaseService extends Service {
+ calculateMD5 = (data) => {
+ return crypto.createHash('md5').update(data).digest('hex');
+ }
+
+ shaForm = (body, salt) => {
+ return sha256(sha256(body).toString() + salt).toString();
+ }
+
+ encryptRequest = (body) => {
+ return CryptoJS.AES.encrypt(body, KEY, {
+ mode: CryptoJS.mode.ECB,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString();
+ }
+
+ decryptRequest = (body) => {
+ return CryptoJS.AES.decrypt(body, KEY, {
+ mode: CryptoJS.mode.ECB,
+ padding: CryptoJS.pad.Pkcs7
+ }).toString(CryptoJS.enc.Utf8);
+ }
+
+ // uid生成函数
+ generateNumberString = () => {
+ // 获取当前日期(年月日)
+ const now = new Date();
+ const year = String(now.getFullYear()).padStart(4, '0');
+ const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份从0开始,所以加1
+ const date = String(now.getDate()).padStart(2, '0');
+ const dateString = year + month + date;
+
+ // 获取当前时间戳的后四位
+ const timestamp = String(Date.now()).slice(-4);
+
+ // 生成四位随机数字
+ const randomDigits = Math.floor(Math.random() * 10000).toString().padStart(4, '0');
+
+ // 组合成最终的16位数字字符串
+ const fullNumberString = dateString + timestamp + randomDigits;
+
+ return fullNumberString;
+ }
+
+ // 随机盐生成函数
+ generateRandomString = () => {
+ const lowerCaseLetters = 'abcdefghijklmnopqrstuvwxyz';
+ const upperCaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
+ const numbers = '0123456789';
+
+ let result = '';
+
+ // 生成5位随机小写字母
+ for (let i = 0; i < 5; i++) {
+ const randomIndex = Math.floor(Math.random() * lowerCaseLetters.length);
+ result += lowerCaseLetters[randomIndex];
+ }
+
+ // 生成5位随机大写字母
+ for (let i = 0; i < 5; i++) {
+ const randomIndex = Math.floor(Math.random() * upperCaseLetters.length);
+ result += upperCaseLetters[randomIndex];
+ }
+
+ // 生成2位随机数字
+ for (let i = 0; i < 2; i++) {
+ const randomIndex = Math.floor(Math.random() * numbers.length);
+ result += numbers[randomIndex];
+ }
+
+ // 打乱整个字符串
+ const characters = result.split('');
+ for (let i = characters.length - 1; i > 0; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ [characters[i], characters[j]] = [characters[j], characters[i]];
+ }
+
+ return characters.join('');
+ }
+
+ // 随机验证码生成函数
+ generateCodeString = () => {
+ const numbers = '0123456789';
+
+ let result = '';
+
+ // 生成6位随机数字
+ for (let i = 0; i < 6; i++) {
+ const randomIndex = Math.floor(Math.random() * numbers.length);
+ result += numbers[randomIndex];
+ }
+
+ // 打乱整个字符串
+ const characters = result.split('');
+ for (let i = characters.length - 1; i > 0; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ [characters[i], characters[j]] = [characters[j], characters[i]];
+ }
+
+ return characters.join('');
+ }
+}
+
+module.exports = BaseService;
\ No newline at end of file
diff --git a/app/extend/oauth.js b/app/extend/oauth.js
new file mode 100644
index 0000000..6987e80
--- /dev/null
+++ b/app/extend/oauth.js
@@ -0,0 +1,333 @@
+'use strict';
+
+// const sha256 = require("crypto-js/sha256");
+
+module.exports = () => {
+ class Model {
+ constructor(ctx) {
+ this.ctx = ctx;
+ this.fileName = "oauth";
+ this.redisType = {
+ "B": "db0",
+ "C": "db1",
+ "M": "db2",
+ "T": "db5",
+ "E": "db6",
+ "A": "db7"
+ };
+ this.modelType = {
+ "B": this.ctx.model.BSide,
+ "C": this.ctx.model2.CSide,
+ "M": this.ctx.model3.Insiders,
+ "T": this.ctx.model4.Account,
+ "E": this.ctx.model5.Examinee,
+ "A": this.ctx.model5.Manager,
+ };
+ this.redisAccessTokenEX = {
+ "B": 1000,
+ "C": 1000,
+ "M": 1000,
+ "T": 1000,
+ "E": 3000,
+ "A": 1000
+ };
+ this.redisRefreshTokenEX = {
+ "B": 1000,
+ "C": 1000,
+ "M": 1000,
+ "T": 1000,
+ "E": 360000,
+ "A": 1000
+ };
+ }
+ async getClient(clientId) {
+ // let clientSecret = this.ctx.request.body.client_secret;
+ try {
+ // 1. 从数据库中查询客户端信息
+ // if(clientId == "insiders-manager" && clientSecret == "insiders-manager") {
+ let checkFixedClient = false;
+ this.ctx.app.config.fixedClient.forEach(element => {
+ if (clientId == element) checkFixedClient = true;
+ });
+ if (checkFixedClient) {
+ return {
+ id: clientId,
+ redirectUris: 'http://127.0.0.1:'+this.ctx.app.server.address().port+'/getToken/',
+ grants: ['authorization_code'],
+ type: clientId,
+ };
+ } else {
+ const client = await this.ctx.model3.Business.findOne({ where: { client_id: clientId } });
+ if (!client) return false;
+
+ // 2. 校验客户端密钥
+ // if (clientSecret && (clientSecret !== client.client_secret)) {
+ // return false;
+ // }
+ // 3. 返回数据
+ return {
+ id: client.client_id,
+ redirectUris: 'http://127.0.0.1:'+this.ctx.app.server.address().port+'/getToken/',
+ grants: ['authorization_code'],
+ type: client.type,
+ };
+ }
+ } catch (error) {
+ const blockName = this.fileName + "--" + "getClient";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ }
+ async grantTypeAllowed (clientId, grantType) {
+ try {
+ const client = await this.ctx.model.Oauth2.findOne({ where: { clientId: clientId } });
+ if(clientId == client.clientId && grantType == client.grants.split(',')){
+ return true;
+ }else{
+ return false;
+ }
+ } catch (error) {
+ const blockName = this.fileName + "--" + "grantTypeAllowed";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ }
+ async getUser(username, password) {
+ try {
+ // 返回用户信息
+ return {
+ uid: username,
+ };
+ } catch (error) {
+ const blockName = this.fileName + "--" + "getUser";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ }
+ async getUserFromClient (clientId) {
+ try {
+ return {
+ uid:clientId.id
+ };
+ } catch (error) {
+ const blockName = this.fileName + "--" + "getUserFromClient";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ };
+
+ async saveToken(token, client, user) {
+ try {
+ const rdmtoken = {
+ accessToken: token.accessToken,
+ refreshToken: token.refreshToken,
+ clientId: client.id,
+ };
+ const lastCode = user.uid[user.uid.length-1];
+ const redisDbType = this.redisType[lastCode];
+ const redisAccessTokenEX = this.redisAccessTokenEX[lastCode];
+ const redisRefreshTokenEX = this.redisRefreshTokenEX[lastCode];
+ let reex = ((new Date(token.refreshTokenExpiresAt).getTime() - new Date().getTime()) / redisRefreshTokenEX).toFixed(0);
+ const usertoken = await this.ctx.app.redis.get(redisDbType).get(user.uid);
+ if(usertoken){
+ await this.ctx.app.redis.get(redisDbType).del(JSON.parse(usertoken).accessToken);
+ let remainder = await this.ctx.app.redis.get(redisDbType).ttl(user.uid);
+ reex = remainder;
+ await this.ctx.app.redis.get(redisDbType).del(JSON.parse(usertoken).refreshToken);
+ }
+ await this.ctx.app.redis.get(redisDbType).set(user.uid, JSON.stringify(rdmtoken), 'EX', reex);
+ // 1.保存访问令牌
+ const rdmaccess = {
+ token: token.accessToken,
+ expiresAt: token.accessTokenExpiresAt,
+ scope: token.scope || '',
+ clientId: client.id,
+ clientType: client.type,
+ uid: user.uid,
+ };
+ let acex = ((new Date(token.accessTokenExpiresAt).getTime() - new Date().getTime()) / redisAccessTokenEX).toFixed(0);
+ await this.ctx.app.redis.get(redisDbType).set(token.accessToken, JSON.stringify(rdmaccess), 'EX', acex);
+ // 2.保存刷新令牌
+ if(token.refreshToken){
+ const rdmrefresh = {
+ token: token.refreshToken,
+ expiresAt: token.refreshTokenExpiresAt,
+ scope: token.scope || '',
+ clientId: client.id,
+ clientType: client.type,
+ uid: user.uid,
+ };
+ await this.ctx.app.redis.get(redisDbType).set(token.refreshToken, JSON.stringify(rdmrefresh), 'EX', reex);
+ }
+ // 3.返回保存的令牌信息
+ return {
+ accessToken: { uid: user.uid, token:token.accessToken },
+ accessTokenExpiresAt: token.accessTokenExpiresAt,
+ refreshToken: token.refreshToken ? token.refreshToken : '',
+ refreshTokenExpiresAt: token.refreshTokenExpiresAt ? token.refreshTokenExpiresAt : '',
+ scope: token.scope || '',
+ client: { id: client.id, type: client.type },
+ user: { uid: user.uid },
+ };
+ } catch (error) {
+ const blockName = this.fileName + "--" + "saveToken";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ }
+ async getAccessToken(bearerToken) {
+ try {
+ // 1. 查询数据库,获取访问密钥信息
+ // 2. 查询数据库,获取客户端信息
+ // 3. 查询数据库,获取用户信息
+ let { access_token, uid } = JSON.parse(bearerToken);
+ const lastCode = uid[uid.length-1];
+ const redisDbType = this.redisType[lastCode];
+ const token = await this.ctx.app.redis.get(redisDbType).get(access_token);
+ if (token == null) {
+ const data = await this.ctx.app.redis.get(redisDbType).get(uid);
+ const refreshToken = await this.ctx.app.redis.get(redisDbType).get(JSON.parse(data).refreshToken);
+ if (refreshToken == null) await this.ctx.app.redis.get(redisDbType).del(uid);
+ };
+
+ // 4. 返回数据
+ let accessToken = {
+ accessTokenExpiresAt: new Date(JSON.parse(token).expiresAt),
+ user: { uid: JSON.parse(token).uid },
+ client_type: JSON.parse(token).clientType,
+ }
+ return accessToken;
+ } catch (error) {
+ const blockName = this.fileName + "--" + "getAccessToken";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ }
+ async revokeToken(token) {
+ try {
+ // 查询数据库并删除刷新令牌
+ const revokeValue = await this.ctx.app.redis.del(token.refreshToken);
+ if(revokeValue){
+ return true;
+ }else{
+ return false;
+ }
+ } catch (error) {
+ const blockName = this.fileName + "--" + "revokeToken";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ }
+ async saveAuthorizationCode(code, client, user) {
+ try {
+ // 1. 保存授权码信息到数据库
+ const rdmcode = {
+ code: code.authorizationCode,
+ expiresAt: code.expiresAt,
+ redirectUri: code.redirectUri,
+ scope: code.scope || '',
+ clientId: client.id,
+ clientType: client.type,
+ uid: user.uid
+ }
+ let ex = ((new Date(code.expiresAt).getTime() - new Date().getTime()) / 1000).toFixed(0);
+ await this.ctx.app.redis.get('db3').set(code.authorizationCode, JSON.stringify(rdmcode), 'EX', ex);
+
+ // 2. 返回数据
+ return {
+ authorizationCode: code.authorizationCode,
+ expiresAt: code.expiresAt,
+ redirectUri: code.redirectUri,
+ scope: code.scope || '',
+ client: { id: client.id },
+ user: { uid: user.uid },
+ };
+ } catch (error) {
+ const blockName = this.fileName + "--" + "saveAuthorizationCode";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ }
+ async getAuthorizationCode(authorizationCode) {
+ try {
+ // 1. 从数据库中查询授权码信息
+ const { code, type } = JSON.parse(authorizationCode);
+ const lastCode = type[type.length - 1];
+ const redisDbType = this.redisType[lastCode];
+ let rdmcode;
+ if(type == 'code') {
+ rdmcode = await this.ctx.app.redis.get('db3').get(code);
+ } else {
+ rdmcode = await this.ctx.app.redis.get(redisDbType).get(code);
+ }
+ if (!rdmcode) return false;
+
+ // 2. 从数据库中查询客户端信息、用户信息
+ const cloneRdmcode = JSON.parse(rdmcode);
+ const cloneLastCode = cloneRdmcode.uid[cloneRdmcode.uid.length-1];
+ const modelDbType = this.modelType[cloneLastCode];
+ const user = await modelDbType.findOne({ where: { uid: cloneRdmcode.uid } });
+ if (!user) return false;
+
+ // 3. 返回数据
+ return {
+ code: authorizationCode,
+ expiresAt: new Date(cloneRdmcode.expiresAt),
+ redirectUri: cloneRdmcode.redirectUri,
+ scope: cloneRdmcode.scope,
+ client: { id: cloneRdmcode.clientId },
+ user: { uid: cloneRdmcode.uid },
+ };
+ } catch (error) {
+ const blockName = this.fileName + "--" + "getAuthorizationCode";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ }
+ async revokeAuthorizationCode(authorizationCode) {
+ try {
+ // 从数据库中查询该授权码并删除
+ const { code, type } = JSON.parse(authorizationCode.code);
+ const lastCode = type[type.length - 1];
+ const redisDbType = this.redisType[lastCode];
+ let revokeValue;
+ if(type == 'code') {
+ revokeValue = await this.ctx.app.redis.get('db3').del(code);
+ } else {
+ revokeValue = await this.ctx.app.redis.get(redisDbType).del(code);
+ }
+ if(revokeValue){
+ return true;
+ }else{
+ return false;
+ }
+ } catch (error) {
+ const blockName = this.fileName + "--" + "revokeAuthorizationCode";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ }
+ async getRefreshToken(refreshToken) {
+ try {
+ // 1. 查询数据库获取刷新令牌
+ const rdmrefresh = await this.ctx.app.redis.get(refreshToken);
+ if (!rdmrefresh) return false;
+
+ // 2. 返回数据
+ return {
+ refreshToken: JSON.parse(rdmrefresh).token,
+ refreshTokenExpiresAt: new Date(JSON.parse(rdmrefresh).expiresAt),
+ scope: JSON.parse(rdmrefresh).scope,
+ client: { id: JSON.parse(rdmrefresh).clientId },
+ user: { uid: JSON.parse(rdmrefresh).uid },
+ };
+ } catch (error) {
+ const blockName = this.fileName + "--" + "getRefreshToken";
+ this.ctx.app.middleware.log('../../oauthLog', blockName + ">>>>" + error);
+ return false;
+ }
+ }
+ }
+
+ return Model;
+};
\ No newline at end of file
diff --git a/app/middleware/log.js b/app/middleware/log.js
new file mode 100644
index 0000000..6d7323a
--- /dev/null
+++ b/app/middleware/log.js
@@ -0,0 +1,72 @@
+// 错误日志
+const fs = require('fs');
+const os = require('os');
+const path = require('path');
+
+const dirCheck = (dirPath) => {
+ // 检查文件夹是否存在
+ fs.access(dirPath, fs.constants.F_OK, (err) => {
+ if (err) {
+ // 文件夹不存在
+ console.log('文件夹不存在,正在创建...');
+ fs.mkdir(dirPath, { recursive: true }, (err) => {
+ if (err) throw err;
+ console.log('文件夹已创建');
+ });
+ } else {
+ // 文件夹存在
+ console.log('文件夹已存在');
+ }
+ });
+}
+
+module.exports = (filePath, msg) => {
+ // 获取时间
+ let now = new Date(),
+ times = {
+ year: now.getFullYear(),
+ month: now.getMonth() + 1,
+ day: now.getDate(),
+ hour: now.getHours(),
+ minute: now.getMinutes(),
+ second: now.getSeconds()
+ };
+ // 获取操作系统类型
+ const type = os.type();
+ console.log(`操作系统类型: ${type}`);
+ filePath = path.join(__dirname, filePath);
+ dirCheck(filePath);
+ const yearPath = filePath + '/' + times.year;
+ dirCheck(yearPath);
+ const monthPath = yearPath + '/' + times.month;
+ dirCheck(monthPath);
+ const dayPath = monthPath + '/' + times.day + '.txt';
+ const logTime = '[' + times.year + '-' + times.month + '-' + times.day + '>>>' + times.hour + ':' + times.minute + ':' + times.second + ']' + '>>>';
+ let crlf;
+ // 判断操作系统类型,设置换行符
+ if (type === 'Windows_NT') {
+ crlf = '\n';
+ } else {
+ crlf = '\r\n';
+ }
+ // 读取文件内容
+ fs.readFile(dayPath, 'utf8', (err, data) => {
+ if (err) {
+ if (err.code === 'ENOENT') {
+ // 文件不存在,直接写入新内容(这里实际上还是使用了覆盖的方式)
+ fs.writeFile(dayPath, logTime + msg + crlf, (err) => {
+ if (err) throw err;
+ console.log('文件已创建并写入新内容');
+ });
+ } else {
+ throw err;
+ }
+ } else {
+ // 文件存在,追加新内容
+ fs.appendFile(dayPath, logTime + msg + crlf, (err) => {
+ if (err) throw err;
+ console.log('新内容已追加到文件');
+ });
+ }
+ });
+};
\ No newline at end of file
diff --git a/app/model/BSide.js b/app/model/BSide.js
new file mode 100644
index 0000000..726431c
--- /dev/null
+++ b/app/model/BSide.js
@@ -0,0 +1,30 @@
+'use strict';
+
+module.exports = (app) => {
+ const { INTEGER, CHAR, STRING, DATE } = app.Sequelize;
+
+ const BSide = app.model.define('b-side', {
+ id: { type: INTEGER(8), primaryKey: true, autoIncrement: true },
+ uid: CHAR(15),
+ salt: CHAR(24),
+ status: INTEGER(3),
+ role: INTEGER(3),
+ account_name: STRING(20),
+ password: CHAR(64),
+ organization: CHAR(16),
+ user_name: STRING(20),
+ phone: CHAR(11),
+ msg: STRING(300),
+ created_at: DATE,
+ updated_at: DATE,
+ login_at: DATE,
+ login_status: INTEGER(3)
+ },{
+ freezeTableName: true,
+ timestamp: true,
+ createdAt: true,
+ updatedAt: true,
+ });
+
+ return BSide;
+};
\ No newline at end of file
diff --git a/app/model/BSubscribe.js b/app/model/BSubscribe.js
new file mode 100644
index 0000000..3f27e77
--- /dev/null
+++ b/app/model/BSubscribe.js
@@ -0,0 +1,22 @@
+'use strict';
+
+module.exports = (app) => {
+ const { INTEGER, CHAR, DATE } = app.Sequelize;
+
+ const BSubscribe = app.model.define('bsubscribe', {
+ id: { type: INTEGER(11), primaryKey: true, autoIncrement: true },
+ user_uid: CHAR(15),
+ business: INTEGER(3),
+ status: INTEGER(3),
+ type: INTEGER(3),
+ created_at: DATE,
+ updated_at: DATE,
+ },{
+ freezeTableName: true,
+ timestamp: true,
+ createdAt: true,
+ updatedAt: true,
+ });
+
+ return BSubscribe;
+};
\ No newline at end of file
diff --git a/app/model2/CSide.js b/app/model2/CSide.js
new file mode 100644
index 0000000..2c433ef
--- /dev/null
+++ b/app/model2/CSide.js
@@ -0,0 +1,34 @@
+'use strict';
+
+module.exports = (app) => {
+ const { INTEGER, CHAR, STRING, DATE } = app.Sequelize;
+
+ const CSide = app.model2.define('c-side', {
+ id: { type: INTEGER(8), primaryKey: true, autoIncrement: true },
+ uid: CHAR(15),
+ salt: CHAR(24),
+ status: INTEGER(3),
+ role: INTEGER(3),
+ avatar: STRING(200),
+ account_name: STRING(20),
+ password: CHAR(64),
+ user_name: STRING(20),
+ phone: CHAR(11),
+ gender: INTEGER(1),
+ age: INTEGER(3),
+ email: STRING(254),
+ address: STRING(300),
+ post_code: CHAR(6),
+ created_at: DATE,
+ updated_at: DATE,
+ login_at: DATE,
+ login_status: INTEGER(3)
+ },{
+ freezeTableName: true,
+ timestamp: true,
+ createdAt: true,
+ updatedAt: true,
+ });
+
+ return CSide;
+};
\ No newline at end of file
diff --git a/app/model2/CSubscribe.js b/app/model2/CSubscribe.js
new file mode 100644
index 0000000..2b1437f
--- /dev/null
+++ b/app/model2/CSubscribe.js
@@ -0,0 +1,22 @@
+'use strict';
+
+module.exports = (app) => {
+ const { INTEGER, CHAR, DATE } = app.Sequelize;
+
+ const CSubscribe = app.model2.define('csubscribe', {
+ id: { type: INTEGER(11), primaryKey: true, autoIncrement: true },
+ user_uid: CHAR(15),
+ business: INTEGER(3),
+ status: INTEGER(3),
+ type: INTEGER(3),
+ created_at: DATE,
+ updated_at: DATE,
+ },{
+ freezeTableName: true,
+ timestamp: true,
+ createdAt: true,
+ updatedAt: true,
+ });
+
+ return CSubscribe;
+};
\ No newline at end of file
diff --git a/app/model3/Business.js b/app/model3/Business.js
new file mode 100644
index 0000000..375c5b8
--- /dev/null
+++ b/app/model3/Business.js
@@ -0,0 +1,28 @@
+'use strict';
+
+module.exports = (app) => {
+ const { INTEGER, CHAR, STRING, DATE } = app.Sequelize;
+
+ const Business = app.model3.define('business', {
+ id: { type: INTEGER(3), primaryKey: true, autoIncrement: true },
+ salt: CHAR(24),
+ login_url: STRING(200),
+ client_url: STRING(200),
+ temporary_id: CHAR(64),
+ client_id: CHAR(12),
+ client_secret: CHAR(64),
+ name: STRING(30),
+ type: INTEGER(3),
+ level: INTEGER(3),
+ status: INTEGER(3),
+ created_at: DATE,
+ updated_at: DATE,
+ },{
+ freezeTableName: true,
+ timestamp: true,
+ createdAt: true,
+ updatedAt: true,
+ });
+
+ return Business;
+};
\ No newline at end of file
diff --git a/app/model3/Insiders.js b/app/model3/Insiders.js
new file mode 100644
index 0000000..0ca9bc2
--- /dev/null
+++ b/app/model3/Insiders.js
@@ -0,0 +1,28 @@
+'use strict';
+
+module.exports = (app) => {
+ const { INTEGER, CHAR, STRING, DATE } = app.Sequelize;
+
+ const Insiders = app.model3.define('insiders', {
+ id: { type: INTEGER(5), primaryKey: true, autoIncrement: true },
+ uid: CHAR(15),
+ salt: CHAR(24),
+ status: INTEGER(3),
+ role: INTEGER(3),
+ name: STRING(20),
+ password: CHAR(64),
+ department: STRING(20),
+ change: STRING(200),
+ created_at: DATE,
+ updated_at: DATE,
+ login_at: DATE,
+ login_status: INTEGER(3)
+ },{
+ freezeTableName: true,
+ timestamp: true,
+ createdAt: true,
+ updatedAt: true,
+ });
+
+ return Insiders;
+};
\ No newline at end of file
diff --git a/app/model4/Account.js b/app/model4/Account.js
new file mode 100644
index 0000000..6cae864
--- /dev/null
+++ b/app/model4/Account.js
@@ -0,0 +1,24 @@
+'use strict';
+
+module.exports = (app) => {
+ const { INTEGER, CHAR, DATE } = app.Sequelize;
+
+ const Account = app.model4.define('account', {
+ id: { type: INTEGER(8), primaryKey: true, autoIncrement: true },
+ uid: CHAR(15),
+ salt: CHAR(24),
+ contest_uid: CHAR(15),
+ account_name: CHAR(20),
+ password: CHAR(64),
+ status: INTEGER(3),
+ created_at: DATE,
+ login_status: INTEGER(3),
+ },{
+ freezeTableName: true,
+ timestamp: true,
+ createdAt: true,
+ updatedAt: false,
+ });
+
+ return Account;
+};
\ No newline at end of file
diff --git a/app/model5/Audit.js b/app/model5/Audit.js
new file mode 100644
index 0000000..fe4aa53
--- /dev/null
+++ b/app/model5/Audit.js
@@ -0,0 +1,21 @@
+'use strict';
+
+module.exports = (app) => {
+ const { INTEGER, CHAR, STRING, DATE } = app.Sequelize;
+
+ const Audit = app.model5.define('audit', {
+ id: { type: INTEGER(8), primaryKey: true, autoIncrement: true },
+ user_uid: CHAR(15),
+ identity_card: CHAR(18),
+ user_name: STRING(6),
+ status: INTEGER(3),
+ created_at: DATE,
+ },{
+ freezeTableName: true,
+ timestamp: true,
+ createdAt: true,
+ updatedAt: false,
+ });
+
+ return Audit;
+};
\ No newline at end of file
diff --git a/app/model5/Examinee.js b/app/model5/Examinee.js
new file mode 100644
index 0000000..c159f3a
--- /dev/null
+++ b/app/model5/Examinee.js
@@ -0,0 +1,30 @@
+'use strict';
+
+module.exports = (app) => {
+ const { INTEGER, CHAR, STRING, DATE } = app.Sequelize;
+
+ const Examinee = app.model5.define('examinee', {
+ id: { type: INTEGER(8), primaryKey: true, autoIncrement: true },
+ uid: CHAR(15),
+ salt: CHAR(24),
+ password: CHAR(64),
+ user_name: STRING(6),
+ identity_card: CHAR(18),
+ real_check: INTEGER(3),
+ workplace: STRING(60),
+ address: STRING(120),
+ phone: CHAR(11),
+ email: STRING(60),
+ status: INTEGER(3),
+ created_at: DATE,
+ updated_at: DATE,
+ login_status: INTEGER(3),
+ },{
+ freezeTableName: true,
+ timestamp: true,
+ createdAt: true,
+ updatedAt: true,
+ });
+
+ return Examinee;
+};
\ No newline at end of file
diff --git a/app/model5/Manager.js b/app/model5/Manager.js
new file mode 100644
index 0000000..8f51ca8
--- /dev/null
+++ b/app/model5/Manager.js
@@ -0,0 +1,25 @@
+'use strict';
+
+module.exports = (app) => {
+ const { INTEGER, CHAR, STRING, DATE } = app.Sequelize;
+
+ const Manager = app.model5.define('manager', {
+ id: { type: INTEGER(8), primaryKey: true, autoIncrement: true },
+ uid: CHAR(15),
+ salt: CHAR(24),
+ account_name: STRING(5),
+ password: CHAR(64),
+ role: INTEGER(3),
+ status: INTEGER(3),
+ created_at: DATE,
+ updated_at: DATE,
+ login_status: INTEGER(3),
+ },{
+ freezeTableName: true,
+ timestamp: true,
+ createdAt: true,
+ updatedAt: true,
+ });
+
+ return Manager;
+};
\ No newline at end of file
diff --git a/app/router.js b/app/router.js
new file mode 100644
index 0000000..6439137
--- /dev/null
+++ b/app/router.js
@@ -0,0 +1,69 @@
+/**
+ * @param {Egg.Application} app - egg application
+ */
+module.exports = app => {
+ const { router, controller } = app;
+
+ // 获取授权码
+ // authorize 是用来获取授权码的路由
+ // 生命周期:getClient --> getUser --> saveAuthorizationCode
+ router.all('/user/authorize', app.oAuth2Server.authorize());
+ // 通过授权码获取 accessToken
+ // token 是用来发放访问令牌的路由
+ // 生命周期:getClient --> getAuthorizationCode --> saveToken --> revokeAuthorizationCode
+ router.all('/user/token', app.oAuth2Server.token());
+ // 通过 accessToken 获取用户信息
+ // authenticate 是登录之后可以访问的路由
+ // 生命周期:getAccessToken
+ router.all('/user/authenticate', app.oAuth2Server.authenticate(), controller.verify.show);
+ // 北斗启航科技教育平台管理系统登录
+ router.post("/mlogin", controller.insiders.login);
+ // 北斗启航科技教育平台B端用户登录
+ router.post("/blogin", controller.bSide.login);
+ // 北斗启航科技教育平台通用服务登录
+ router.post("/clogin", controller.cSide.login);
+ // 北斗启航科技教育平台竞赛用户登录
+ router.post("/tlogin", controller.contest.login);
+ // 北斗启航科技教育平台C端用户注册
+ router.post("/cregistered", controller.cSide.registered);
+ // 比较用户名
+ router.post("/diffName", controller.cSide.diffName);
+ // 比较电话号码
+ router.post("/diffPhone", controller.cSide.diffPhone);
+ // 比较邮箱
+ router.post("/diffEmail", controller.cSide.diffEmail);
+ // 获取token
+ router.post("/getToken", controller.verify.getToken);
+ // 确定登录页面
+ router.post("/toLogin", controller.verify.toLogin);
+ // 确定登录状态
+ router.post("/loginStatus", controller.verify.loginStatus);
+ // 退出登录
+ router.post("/unLogin", controller.verify.unLogin);
+ // 验证token
+ router.post("/verify", controller.verify.getMsg);
+ // 获取用户基本信息
+ router.post("/getUser", controller.verify.getUser);
+ // 修改用户基本信息
+ router.post("/editUser", controller.verify.editUser);
+ // 修改密码
+ router.post("/changePassword", controller.verify.changePassword);
+ // 重置密码
+ router.post("/resetPassword", controller.verify.resetPassword);
+ // 北斗启航科技教育平台B端单位管理员编辑用户基本信息
+ router.post("/editUserManager", controller.bSide.editUserManager);
+
+ // 北斗应用技术培训证书项目报名系统登录
+ router.post("/elogin", controller.exam.login);
+ // 北斗应用技术培训证书项目报名系统管理系统登录
+ router.post("/alogin", controller.examManager.login);
+
+ // 向手机发送短信验证码
+ router.post("/sendSMS", controller.sMSService.sendSMS);
+ // 校验短信验证码
+ router.post("/checkCode", controller.sMSService.checkCode);
+ // 身份二要素核验
+ router.post("/checkIdCard", controller.id2MVService.checkIdCard);
+ // 身份证二要素核验
+ router.post("/CNTEV", controller.cNTEVService.CNTEV);
+};
diff --git a/app/service/BSide.js b/app/service/BSide.js
new file mode 100644
index 0000000..b258c5f
--- /dev/null
+++ b/app/service/BSide.js
@@ -0,0 +1,182 @@
+'use strict';
+
+const Service = require('../core/base_service');
+
+const fileName = "BSide";
+
+const { Op } = require('sequelize');
+
+const shunt = (uid) => {
+ return uid[uid.length - 1];
+}
+
+class BSideService extends Service {
+ async loginUser(name) {
+ const { ctx } = this;
+ try {
+ const where = { account_name: name };
+ const result = await ctx.model.BSide.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "loginUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async subscribe(user, client) {
+ const { ctx } = this;
+ try {
+ const where = {
+ user_uid: user.uid,
+ business: client.id
+ };
+ const defaults = {
+ user_uid: user.uid,
+ business: client.id,
+ status: 0,
+ type: 0,
+ created_at: new Date(),
+ updated_at: new Date(),
+ }
+ await ctx.model.BSubscribe.findOrCreate({ where, defaults });
+ return true;
+ } catch (error) {
+ const blockName = fileName + "--" + "subscribe";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async getUser(uid) {
+ const { ctx } = this;
+ try {
+ const attributes = ['status', 'role', 'account_name', 'user_name', 'phone'];
+ const where = { uid };
+ const result = await ctx.model.BSide.findOne({ attributes, where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "getUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async editUserManager(editMsg, userMsg) {
+ const { ctx } = this;
+ try {
+ delete userMsg.location;
+ const where = { ...userMsg };
+ const result = await ctx.model.BSide.update(editMsg, { where });
+ return result[0] == 0 ? false : result;
+ } catch (error) {
+ const blockName = fileName + "--" + "editUserManager";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async editUser(userMsg, uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const result = await ctx.model.BSide.update(userMsg, { where });
+ return result[0] == 0 ? false : result;
+ } catch (error) {
+ const blockName = fileName + "--" + "editUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async uidfinder(uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const result = await ctx.model.BSide.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "uidfinder";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async changePassword(uid, oldPassword, newPassword) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const salt = this.generateRandomString();
+ const setPassword = this.shaForm(newPassword, salt);
+ const result = await ctx.model.BSide.findOne({ where });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
+ const resultList = await ctx.model.BSide.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
+ return resultList[0] == 0 ? false : resultList;
+ } catch (error) {
+ const blockName = fileName + "--" + "changePassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
+ const { ctx } = this;
+ try {
+ const uidLastCode = shunt(uid);
+ const modelName = uidLastCode === 'B' ? 'BSide' : 'Insiders';
+ const model = uidLastCode === 'B' ? ctx.model : ctx.model3;
+ const managerWhere = uidLastCode === 'B' ? { uid, role: 1 } : { uid, role: [3, 6, 9] };
+ const result = await model[modelName].findOne({ where: managerWhere });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
+ const salt = this.generateRandomString();
+ if(defaultPassword == "") {
+ defaultPassword = '123456';
+ }
+ const originPassword = this.shaForm(defaultPassword, salt);
+ let where = {};
+ const organization = result.organization;
+ const role = { [Op.not]: 1 };
+ if(modelType == "single") {
+ where = { role, organization, ...body };
+ delete where.location;
+ } else if (modelType == "multiple") {
+ let account_name = [], user_name = [], phone = [];
+ for (const key in body) {
+ body[key].forEach(element => {
+ account_name.push(element.account_name);
+ user_name.push(element.user_name);
+ phone.push(element.phone);
+ });
+ }
+ where = { role, organization, account_name, user_name, phone };
+ } else if (modelType == "all") {
+ where = { role, organization, };
+ }
+ let updateObj = { salt: this.encryptRequest(salt), status: 0, password: originPassword };
+ if(resetType == "default") {
+ updateObj.user_name = "";
+ updateObj.phone = "";
+ }
+ const resetList = await ctx.model.BSide.update(updateObj, { where });
+ return resetList.length == 0 ? false : resetList;
+ } catch (error) {
+ const blockName = fileName + "--" + "resetPassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async loginStatus(uid, login_status) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ await ctx.model.BSide.update({ login_status }, { where });
+ } catch (error) {
+ const blockName = fileName + "--" + "loginStatus";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+}
+
+module.exports = BSideService;
\ No newline at end of file
diff --git a/app/service/CNTEVService.js b/app/service/CNTEVService.js
new file mode 100644
index 0000000..9365a3b
--- /dev/null
+++ b/app/service/CNTEVService.js
@@ -0,0 +1,93 @@
+'use strict';
+
+const Service = require('../core/base_service');
+
+const fileName = "CNTEVService";
+
+const Dytnsapi20200217 = require('@alicloud/dytnsapi20200217');
+const OpenApi = require('@alicloud/openapi-client');
+const Util = require('@alicloud/tea-util');
+
+class Client {
+ static createClient() {
+ let config = new OpenApi.Config({
+ // 凭证类型。
+ // type: 'access_key',
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+ accessKeyId: "LTAI5tM3QC6kY4r23sWnsvuY",
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+ accessKeySecret: "Lj9QTWVMJSTAffscjykhaKZt7RN0Xh",
+ // 访问的地域
+ // regionId: 'cn-beijing'
+ });
+ // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
+ // 访问的地址
+ config.endpoint = `dytnsapi.aliyuncs.com`;
+ return new Dytnsapi20200217.default(config);
+ }
+}
+
+class CNTEVServiceService extends Service {
+ // 身份证二要素核验
+ async CNTEV(user_name, identity_card) {
+ const { ctx } = this;
+ try {
+ let client = Client.createClient();
+ // 创建请求对象并设置入参
+ let certNoTwoElementVerificationRequest = new Dytnsapi20200217.CertNoTwoElementVerificationRequest({
+ authCode: "3V2qgr9a2W",
+ certName: user_name,
+ certNo: identity_card,
+ });
+ // 创建运行时配置对象
+ let runtime = new Util.RuntimeOptions({});
+ runtime.readTimeout = 5000;
+ runtime.connectTimeout = 5000;
+ // 发起请求
+ const response = await client.certNoTwoElementVerificationWithOptions(certNoTwoElementVerificationRequest, runtime);
+ const { code, data } = response.body;
+ if (code == "OK") {
+ await ctx.app.redis.get('db3').set(identity_card, JSON.stringify({ user_name, real_check: data.isConsistent }), 'EX', 600);
+ if (data.isConsistent == "1") return { status: 1, msg: "姓名与身份证信息核验一致" };
+ if (data.isConsistent == "0") return { status: 0, msg: "姓名与身份证信息核验不一致" };
+ if (data.isConsistent == "2") return { status: 2, msg: "查无此人" };
+ } else {
+ return false;
+ }
+ } catch (error) {
+ // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+ // 错误 message
+ // console.log('1===========================================')
+ // console.log(error.message);
+ if (error.message.includes("身份证号参数非法")) return { status: 400, msg: "身份证号参数非法" };
+ // 若捕捉到 ConnectTimeout 错误,则尝试重发
+ if (error.message.includes("ConnectTimeout")) return { status: 600, msg: "尝试重新核验" };
+ // console.log('2===========================================')
+ // 诊断地址
+ console.log(error);
+ // console.log('3===========================================')
+ // console.log(error.data);
+ // console.log('4===========================================')
+ // console.log(error.data["Recommend"]);
+ // Util.default.assertAsString(error.message);
+
+ const blockName = fileName + "--" + "CNTEV";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ // 身份证二要素核验结果标记
+ async realMark(user_name, identity_card, real_check) {
+ const { ctx } = this;
+ try {
+ await ctx.model5.Examinee.update({ real_check: real_check ? 1 : 2 }, { where: { user_name, identity_card } });
+ } catch (error) {
+ const blockName = fileName + "--" + "realMark";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+}
+
+module.exports = CNTEVServiceService;
\ No newline at end of file
diff --git a/app/service/CSide.js b/app/service/CSide.js
new file mode 100644
index 0000000..3e50db8
--- /dev/null
+++ b/app/service/CSide.js
@@ -0,0 +1,203 @@
+'use strict';
+
+const Service = require('../core/base_service');
+
+const fileName = "CSide";
+
+class CSideService extends Service {
+ async diffPhone(phone) {
+ const { ctx } = this;
+ try {
+ const where = { phone };
+ const result = await ctx.model2.CSide.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "diffPhone";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async diffEmail(email) {
+ const { ctx } = this;
+ try {
+ const where = { email };
+ const result = await ctx.model2.CSide.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "diffEmail";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async registered(form) {
+ const { ctx } = this;
+ try {
+ const user = await ctx.model2.CSide.create(form);
+ if (!user) {
+ return { code: 404, message: '注册失败', data: false };
+ };
+ return { code: 200, message: '注册成功', data: user };
+ } catch (error) {
+ const blockName = fileName + "--" + "registered";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async loginUser(name) {
+ const { ctx } = this;
+ try {
+ const where = { account_name: name };
+ const [buser, cuser] = await Promise.all([
+ ctx.model.BSide.findOne({ where }),
+ ctx.model2.CSide.findOne({ where })
+ ]);
+ if (!buser && !cuser) return false;
+ return buser || cuser;
+ } catch (error) {
+ const blockName = fileName + "--" + "loginUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async subscribe(user, client) {
+ const { ctx } = this;
+ try {
+ const where = {
+ user_uid: user.uid,
+ business: client.id
+ };
+ const uidLastCode = user.uid[user.uid.length - 1];
+ const subscribeModel = {
+ "B": ctx.model.BSubscribe,
+ "C": ctx.model2.CSubscribe
+ };
+ const defaults = {
+ user_uid: user.uid,
+ business: client.id,
+ status: 0,
+ type: 0,
+ created_at: new Date(),
+ updated_at: new Date(),
+ };
+ await subscribeModel[uidLastCode].findOrCreate({ where, defaults });
+ return true;
+ } catch (error) {
+ const blockName = fileName + "--" + "subscribe";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async getUser(uid) {
+ const { ctx } = this;
+ try {
+ const attributes = ['status', 'role', 'account_name', 'user_name', 'phone', 'gender', 'age', 'email', 'address', 'post_code'];
+ const where = { uid };
+ const result = await ctx.model2.CSide.findOne({ attributes, where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "getUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async editUser(userMsg, uid) {
+ const { ctx } = this;
+ try {
+ userMsg.gender = userMsg.gender == "1" ? true : false;
+ const where = { uid };
+ const result = await ctx.model2.CSide.update(userMsg, { where });
+ return result[0] == 0 ? false : result;
+ } catch (error) {
+ const blockName = fileName + "--" + "editUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async uidfinder(uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const result = await ctx.model2.CSide.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "uidfinder";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async changePassword(uid, oldPassword, newPassword) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const salt = this.generateRandomString();
+ const setPassword = this.shaForm(newPassword, salt);
+ const result = await ctx.model2.CSide.findOne({ where });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
+ const resultList = await ctx.model2.CSide.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
+ return resultList[0] == 0 ? false : resultList;
+ } catch (error) {
+ const blockName = fileName + "--" + "changePassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
+ const { ctx } = this;
+ try {
+ const uidLastCode = shunt(uid);
+ const modelName = uidLastCode === 'C' ? 'CSide' : 'Insiders';
+ const model = uidLastCode === 'C' ? ctx.model : ctx.model3;
+ const managerWhere = uidLastCode === 'C' ? { uid } : { uid, role: [3, 6, 9] };
+ const result = await model[modelName].findOne({ where: managerWhere });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
+ const salt = this.generateRandomString();
+ if(defaultPassword == "") {
+ defaultPassword = '123456';
+ }
+ const originPassword = this.shaForm(defaultPassword, salt);
+ let where = {};
+ if(modelType == "single") {
+ where = body;
+ } else if (modelType == "multiple") {
+ let account_name = [], user_name = [], phone = [];
+ for (const key in body) {
+ body[key].forEach(element => {
+ account_name.push(element.account_name);
+ user_name.push(element.user_name);
+ phone.push(element.phone);
+ });
+ }
+ where = { account_name, user_name, phone };
+ }
+ const resetList = await ctx.model2.CSide.update({ salt: this.encryptRequest(salt), status: 0, password: originPassword }, { where });
+ return resetList.length == 0 ? false : resetList;
+ } catch (error) {
+ const blockName = fileName + "--" + "resetPassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async loginStatus(uid, login_status) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ await ctx.model.BSide.update({ login_status }, { where });
+ } catch (error) {
+ const blockName = fileName + "--" + "loginStatus";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+}
+
+module.exports = CSideService;
\ No newline at end of file
diff --git a/app/service/Contest.js b/app/service/Contest.js
new file mode 100644
index 0000000..e25907c
--- /dev/null
+++ b/app/service/Contest.js
@@ -0,0 +1,151 @@
+'use strict';
+
+const Service = require('../core/base_service');
+
+const fileName = "Contest";
+
+const { Op } = require('sequelize');
+
+class ContestService extends Service {
+ async loginUser(name) {
+ const { ctx } = this;
+ try {
+ const where = { account_name: name };
+ const result = await ctx.model4.Account.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "loginUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async getUser(uid) {
+ const { ctx } = this;
+ try {
+ const attributes = ['account_name', 'status'];
+ const where = { uid };
+ const result = await ctx.model4.Account.findOne({ attributes, where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "getUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async editUserManager(editMsg, userMsg) {
+ const { ctx } = this;
+ try {
+ delete userMsg.location;
+ const where = { ...userMsg };
+ const result = await ctx.model4.Account.update(editMsg, { where });
+ return result[0] == 0 ? false : result;
+ } catch (error) {
+ const blockName = fileName + "--" + "editUserManager";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async editUser(userMsg, uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const result = await ctx.model4.Account.update(userMsg, { where });
+ return result[0] == 0 ? false : result;
+ } catch (error) {
+ const blockName = fileName + "--" + "editUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async uidfinder(uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const result = await ctx.model4.Account.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "uidfinder";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async changePassword(uid, oldPassword, newPassword) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const salt = this.generateRandomString();
+ const setPassword = this.shaForm(newPassword, salt);
+ const result = await ctx.model4.Account.findOne({ where });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
+ const resultList = await ctx.model4.Account.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
+ return resultList[0] == 0 ? false : resultList;
+ } catch (error) {
+ const blockName = fileName + "--" + "changePassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
+ const { ctx } = this;
+ try {
+ const managerWhere = { uid, role: [3, 6, 9] };
+ const result = await ctx.model3.Insiders.findOne({ where: managerWhere });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
+ const salt = this.generateRandomString();
+ if(defaultPassword == "") {
+ defaultPassword = '123456';
+ }
+ const originPassword = this.shaForm(defaultPassword, salt);
+ let where = {};
+ const organization = result.organization;
+ const role = { [Op.not]: 1 };
+ if(modelType == "single") {
+ where = { role, organization, ...body };
+ delete where.location;
+ } else if (modelType == "multiple") {
+ let account_name = [], user_name = [], phone = [];
+ for (const key in body) {
+ body[key].forEach(element => {
+ account_name.push(element.account_name);
+ user_name.push(element.user_name);
+ phone.push(element.phone);
+ });
+ }
+ where = { role, organization, account_name, user_name, phone };
+ } else if (modelType == "all") {
+ where = { role, organization, };
+ }
+ let updateObj = { salt: this.encryptRequest(salt), status: 0, password: originPassword };
+ if(resetType == "default") {
+ updateObj.user_name = "";
+ updateObj.phone = "";
+ }
+ const resetList = await ctx.model4.Account.update(updateObj, { where });
+ return resetList.length == 0 ? false : resetList;
+ } catch (error) {
+ const blockName = fileName + "--" + "resetPassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async loginStatus(uid, login_status) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ await ctx.model4.Account.update({ login_status }, { where });
+ } catch (error) {
+ const blockName = fileName + "--" + "loginStatus";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+}
+
+module.exports = ContestService;
\ No newline at end of file
diff --git a/app/service/Exam.js b/app/service/Exam.js
new file mode 100644
index 0000000..88d2adc
--- /dev/null
+++ b/app/service/Exam.js
@@ -0,0 +1,166 @@
+'use strict';
+
+const Service = require('../core/base_service');
+
+const fileName = "Exam";
+
+const { Op } = require('sequelize');
+
+class ExamService extends Service {
+ async loginUser(phone) {
+ const { ctx } = this;
+ try {
+ const where = { phone };
+ const result = await ctx.model5.Examinee.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "loginUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async uidfinder(uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const result = await ctx.model5.Examinee.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "uidfinder";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async getUser(uid) {
+ const { ctx } = this;
+ try {
+ const attributes = ['user_name', 'identity_card', 'real_check', 'email', 'phone', 'address', 'workplace', 'status'];
+ const where = { uid };
+ const result = await ctx.model5.Examinee.findOne({ attributes, where });
+ if(result.dataValues.status == 2) return false;
+ if(result.dataValues.real_check == 0 || result.dataValues.real_check == 2) {
+ const where = {
+ user_uid: uid,
+ user_name: result.dataValues.user_name,
+ identity_card: result.dataValues.identity_card,
+ };
+ const audit = await ctx.model5.Audit.findOne({ attributes: ['status'], where });
+ if (audit != null) await ctx.model5.Examinee.update({ real_check: audit.dataValues.status }, { where: { uid } });
+ };
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "getUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async editUser(userMsg, uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ let attributes = ['user_name', 'identity_card'];
+ const check = await ctx.model5.Examinee.findOne({ attributes, where });
+ const { user_name, identity_card } = check.dataValues;
+ if(user_name !== userMsg.user_name || identity_card !== userMsg.identity_card) {
+ userMsg.real_check = 0;
+ };
+ const audit = await ctx.model5.Audit.findOne({ where: { user_uid: uid, status: 0 } });
+ if(audit == null) {
+ const auditForm = {
+ user_uid: uid,
+ user_name: userMsg.user_name,
+ identity_card: userMsg.identity_card,
+ status: 0,
+ created_at: new Date(),
+ };
+ await ctx.model5.Audit.create(auditForm);
+ } else {
+ const auditUpdate = {
+ user_name: userMsg.user_name,
+ identity_card: userMsg.identity_card,
+ created_at: new Date(),
+ }
+ await ctx.model5.Audit.update(auditUpdate, { where: { user_uid: uid, status: 0 } });
+ }
+ const result = await ctx.model5.Examinee.update(userMsg, { where });
+ return result[0] == 0 ? false : result;
+ } catch (error) {
+ const blockName = fileName + "--" + "editUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async changePassword(uid, oldPassword, newPassword) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const salt = this.generateRandomString();
+ const setPassword = this.shaForm(newPassword, salt);
+ const result = await ctx.model5.Examinee.findOne({ where });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
+ const resultList = await ctx.model5.Examinee.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
+ return resultList[0] == 0 ? false : resultList;
+ } catch (error) {
+ const blockName = fileName + "--" + "changePassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
+ const { ctx } = this;
+ try {
+ const result = await ctx.model5.Examinee.findOne({ where: { uid, role: [6, 9] } });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
+ const salt = this.generateRandomString();
+ if(defaultPassword == "") {
+ defaultPassword = '123456';
+ }
+ const originPassword = this.shaForm(defaultPassword, salt);
+ let where = {}, role;
+ if(result.dataValues.password == 9) {
+ role = { [Op.not]: [9] };
+ } else {
+ role = { [Op.not]: [6, 9] };
+ }
+ if(modelType == "single") {
+ where = { role, ...body };
+ } else if (modelType == "multiple") {
+ let user_name = [], phone = [];
+ for (const key in body) {
+ body[key].forEach(element => {
+ user_name.push(element.user_name);
+ phone.push(element.phone);
+ });
+ }
+ where = { role, user_name, phone };
+ } else if (modelType == "all") {
+ where = { role };
+ }
+ const resetList = await ctx.model5.Examinee.update({ salt: this.encryptRequest(salt), status: 0, password: originPassword }, { where });
+ return resetList.length == 0 ? false : resetList;
+ } catch (error) {
+ const blockName = fileName + "--" + "resetPassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async loginStatus(uid, login_status) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ await ctx.model5.Examinee.update({ login_status }, { where });
+ } catch (error) {
+ const blockName = fileName + "--" + "loginStatus";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+}
+
+module.exports = ExamService;
\ No newline at end of file
diff --git a/app/service/ExamManager.js b/app/service/ExamManager.js
new file mode 100644
index 0000000..5377fe0
--- /dev/null
+++ b/app/service/ExamManager.js
@@ -0,0 +1,133 @@
+'use strict';
+
+const Service = require('../core/base_service');
+
+const fileName = "ExamManager";
+
+const { Op } = require('sequelize');
+
+class ExamManagerService extends Service {
+ async loginUser(name) {
+ const { ctx } = this;
+ try {
+ const where = { account_name: name };
+ const result = await ctx.model5.Manager.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "loginUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async uidfinder(uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const result = await ctx.model5.Manager.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "uidfinder";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async getUser(uid) {
+ const { ctx } = this;
+ try {
+ const attributes = ['account_name', 'role', 'status'];
+ const where = { uid };
+ const result = await ctx.model5.Manager.findOne({ attributes, where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "getUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async editUser(userMsg, uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const result = await ctx.model5.Manager.update(userMsg, { where });
+ return result[0] == 0 ? false : result;
+ } catch (error) {
+ const blockName = fileName + "--" + "editUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async changePassword(uid, oldPassword, newPassword) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const salt = this.generateRandomString();
+ const setPassword = this.shaForm(newPassword, salt);
+ const result = await ctx.model5.Manager.findOne({ where });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
+ const resultList = await ctx.model5.Manager.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
+ return resultList[0] == 0 ? false : resultList;
+ } catch (error) {
+ const blockName = fileName + "--" + "changePassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
+ const { ctx } = this;
+ try {
+ const result = await ctx.model5.Manager.findOne({ where: { uid, role: [6, 9] } });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
+ const salt = this.generateRandomString();
+ if(defaultPassword == "") {
+ defaultPassword = '123456';
+ }
+ const originPassword = this.shaForm(defaultPassword, salt);
+ let where = {}, role;
+ if(result.dataValues.password == 9) {
+ role = { [Op.not]: [9] };
+ } else {
+ role = { [Op.not]: [6, 9] };
+ }
+ if(modelType == "single") {
+ where = { role, ...body };
+ } else if (modelType == "multiple") {
+ let account_name = [], user_name = [], phone = [];
+ for (const key in body) {
+ body[key].forEach(element => {
+ account_name.push(element.account_name);
+ user_name.push(element.user_name);
+ phone.push(element.phone);
+ });
+ }
+ where = { role, account_name, user_name, phone };
+ } else if (modelType == "all") {
+ where = { role };
+ }
+ const resetList = await ctx.model5.Manager.update({ salt: this.encryptRequest(salt), status: 0, password: originPassword }, { where });
+ return resetList.length == 0 ? false : resetList;
+ } catch (error) {
+ const blockName = fileName + "--" + "resetPassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async loginStatus(uid, login_status) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ await ctx.model5.Manager.update({ login_status }, { where });
+ } catch (error) {
+ const blockName = fileName + "--" + "loginStatus";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+}
+
+module.exports = ExamManagerService;
\ No newline at end of file
diff --git a/app/service/Id2MVService.js b/app/service/Id2MVService.js
new file mode 100644
index 0000000..f102aee
--- /dev/null
+++ b/app/service/Id2MVService.js
@@ -0,0 +1,75 @@
+'use strict';
+
+const Service = require('../core/base_service');
+
+const fileName = "Id2MVService";
+
+const Cloudauth20190307 = require('@alicloud/cloudauth20190307');
+const OpenApi = require('@alicloud/openapi-client');
+const Util = require('@alicloud/tea-util');
+
+class Client {
+ static createClient() {
+ let config = new OpenApi.Config({
+ // 凭证类型。
+ // type: 'access_key',
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+ accessKeyId: "LTAI5tM3QC6kY4r23sWnsvuY",
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+ accessKeySecret: "Lj9QTWVMJSTAffscjykhaKZt7RN0Xh",
+ // 访问的地域
+ // regionId: 'cn-beijing'
+ });
+ // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
+ // 访问的地址
+ config.endpoint = `cloudauth.cn-beijing.aliyuncs.com`;
+ return new Cloudauth20190307.default(config);
+ }
+}
+
+class Id2MVServiceService extends Service {
+ // 身份二要素核验
+ async checkIdCard(idCard, name) {
+ const { ctx } = this;
+ try {
+ let client = Client.createClient();
+ // 创建请求对象并设置入参
+ let id2MetaVerifyRequest = new Cloudauth20190307.Id2MetaVerifyRequest({
+ paramType: "md5",
+ identifyNum: idCard.substring(0, 6) + this.calculateMD5(idCard.substring(6, 14)) + idCard.substring(14),
+ userName: this.calculateMD5(name.substring(0, 1)) + name.substring(1),
+ });
+ // 创建运行时配置对象
+ let runtime = new Util.RuntimeOptions({});
+ runtime.readTimeout = 5000;
+ runtime.connectTimeout = 5000;
+ // 发起请求
+ const response = await client.id2MetaVerifyWithOptions(id2MetaVerifyRequest, runtime);
+ const { code, data } = response.body;
+ if(code == "OK" && data.isConsistent == "1") return { status: 1, msg: "姓名与身份证信息核验一致" };
+ if(code == "OK" && data.isConsistent == "2") return { status: 2, msg: "姓名与身份证信息核验不一致" };
+ if(code == "OK" && data.isConsistent == "3") return { status: 3, msg: "查无此人" };
+ } catch (error) {
+ // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+ // 错误 message
+ // console.log('1===========================================')
+ // console.log(error.message);
+ // 若捕捉到 ConnectTimeout 错误,则尝试重发
+ if(error.message.includes("ConnectTimeout")) return { status: 600, msg: "尝试重新核验" };
+ // console.log('2===========================================')
+ // 诊断地址
+ console.log(error);
+ // console.log('3===========================================')
+ // console.log(error.data);
+ // console.log('4===========================================')
+ // console.log(error.data["Recommend"]);
+ // Util.default.assertAsString(error.message);
+
+ const blockName = fileName + "--" + "checkIdCard";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+}
+
+module.exports = Id2MVServiceService;
\ No newline at end of file
diff --git a/app/service/Insiders.js b/app/service/Insiders.js
new file mode 100644
index 0000000..c890894
--- /dev/null
+++ b/app/service/Insiders.js
@@ -0,0 +1,133 @@
+'use strict';
+
+const Service = require('../core/base_service');
+
+const fileName = "Insiders";
+
+const { Op } = require('sequelize');
+
+class InsidersService extends Service {
+ async loginUser(name) {
+ const { ctx } = this;
+ try {
+ const where = { name };
+ const result = await ctx.model3.Insiders.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "loginUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async uidfinder(uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const result = await ctx.model3.Insiders.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "uidfinder";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async getUser(uid) {
+ const { ctx } = this;
+ try {
+ const attributes = ['status', 'role', 'name', 'department'];
+ const where = { uid };
+ const result = await ctx.model3.Insiders.findOne({ attributes, where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "getUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async editUser(userMsg, uid) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const result = await ctx.model3.Insiders.update(userMsg, { where });
+ return result[0] == 0 ? false : result;
+ } catch (error) {
+ const blockName = fileName + "--" + "editUser";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async changePassword(uid, oldPassword, newPassword) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ const salt = this.generateRandomString();
+ const setPassword = this.shaForm(newPassword, salt);
+ const result = await ctx.model3.Insiders.findOne({ where });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(oldPassword, this.decryptRequest(result.dataValues.salt))) return false;
+ const resultList = await ctx.model3.Insiders.update({ salt: this.encryptRequest(salt), status: 1, password: setPassword }, { where });
+ return resultList[0] == 0 ? false : resultList;
+ } catch (error) {
+ const blockName = fileName + "--" + "changePassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async resetPassword(uid, modelType, defaultPassword, password, body, resetType) {
+ const { ctx } = this;
+ try {
+ const result = await ctx.model3.Insiders.findOne({ where: { uid, role: [6, 9] } });
+ if(!result || result.dataValues.status == 2 || result.dataValues.password !== this.shaForm(password, this.decryptRequest(result.dataValues.salt))) return false;
+ const salt = this.generateRandomString();
+ if(defaultPassword == "") {
+ defaultPassword = '123456';
+ }
+ const originPassword = this.shaForm(defaultPassword, salt);
+ let where = {}, role;
+ if(result.dataValues.password == 9) {
+ role = { [Op.not]: [9] };
+ } else {
+ role = { [Op.not]: [6, 9] };
+ }
+ if(modelType == "single") {
+ where = { role, ...body };
+ } else if (modelType == "multiple") {
+ let account_name = [], user_name = [], phone = [];
+ for (const key in body) {
+ body[key].forEach(element => {
+ account_name.push(element.account_name);
+ user_name.push(element.user_name);
+ phone.push(element.phone);
+ });
+ }
+ where = { role, account_name, user_name, phone };
+ } else if (modelType == "all") {
+ where = { role };
+ }
+ const resetList = await ctx.model3.Insiders.update({ salt: this.encryptRequest(salt), status: 0, password: originPassword }, { where });
+ return resetList.length == 0 ? false : resetList;
+ } catch (error) {
+ const blockName = fileName + "--" + "resetPassword";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async loginStatus(uid, login_status) {
+ const { ctx } = this;
+ try {
+ const where = { uid };
+ await ctx.model.BSide.update({ login_status }, { where });
+ } catch (error) {
+ const blockName = fileName + "--" + "loginStatus";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+}
+
+module.exports = InsidersService;
\ No newline at end of file
diff --git a/app/service/SMSService.js b/app/service/SMSService.js
new file mode 100644
index 0000000..7c9211e
--- /dev/null
+++ b/app/service/SMSService.js
@@ -0,0 +1,108 @@
+'use strict';
+
+const Service = require('../core/base_service');
+
+const fileName = "SMSService";
+
+const Dysmsapi20170525 = require('@alicloud/dysmsapi20170525');
+const OpenApi = require('@alicloud/openapi-client');
+const Util = require('@alicloud/tea-util');
+
+class Client {
+ static createClient() {
+ let config = new OpenApi.Config({
+ // 凭证类型。
+ // type: 'access_key',
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
+ accessKeyId: "LTAI5tM3QC6kY4r23sWnsvuY",
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
+ accessKeySecret: "Lj9QTWVMJSTAffscjykhaKZt7RN0Xh",
+ // 访问的地域
+ // regionId: 'cn-beijing'
+ });
+ // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
+ // 访问的地址
+ config.endpoint = `dysmsapi.aliyuncs.com`;
+ return new Dysmsapi20170525.default(config);
+ }
+}
+
+class SMSServiceService extends Service {
+ // 向手机发送短信验证码
+ async sendSMS(phone) {
+ const { ctx } = this;
+ try {
+ const code = this.generateCodeString();
+ const mark = await ctx.app.redis.get('db3').get(phone);
+ if(mark == null) await ctx.app.redis.get('db3').set(phone, JSON.stringify({ status: 0 }), 'EX', 600);
+ let client = Client.createClient();
+ // 创建请求对象并设置入参
+ let sendSmsRequest = new Dysmsapi20170525.SendSmsRequest({
+ phoneNumbers: phone,
+ // signName: "身份验证",
+ // templateCode: "SMS_480180061",
+ // signName: "登录验证",
+ // templateCode: "SMS_487315107",
+ signName: "华云智联",
+ templateCode: "SMS_487315108",
+ // signName: "北京华云智联",
+ // templateCode: "SMS_487350086",
+ // signName: "北京华云智联科技",
+ // templateCode: "SMS_487410093",
+ templateParam: `{\"code\":\"${code}\"}`,
+ });
+ // 创建运行时配置对象
+ let runtime = new Util.RuntimeOptions({});
+ runtime.readTimeout = 5000;
+ runtime.connectTimeout = 5000;
+ // 发起请求
+ const response = await client.sendSmsWithOptions(sendSmsRequest, runtime);
+ if(response.body.code == "OK") {
+ await ctx.app.redis.get('db3').set(code, phone.toString(), 'EX', 600);
+ return { status: 200, msg: "验证码发送成功" };
+ };
+ } catch (error) {
+ // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
+ // 错误 message
+ // console.log('1===========================================')
+ // console.log(error.message);
+ // 若捕捉到 ConnectTimeout 错误,则尝试重发
+ if(error.message.includes("ConnectTimeout")) return { status: 600, msg: "尝试重新核验" };
+ // console.log('2===========================================')
+ // 诊断地址
+ console.log(error);
+ // console.log('3===========================================')
+ // console.log(error.data);
+ // console.log('4===========================================')
+ // console.log(error.data["Recommend"]);
+ // Util.default.assertAsString(error.message);
+
+ const blockName = fileName + "--" + "sendSMS";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ // 校验短信验证码
+ async checkCode(phone, code) {
+ const { ctx } = this;
+ try {
+ const phoneResult = await ctx.app.redis.get('db3').get(phone);
+ if (phoneResult == null) await ctx.app.redis.get('db3').set(phone, JSON.stringify({ status: 0 }), 'EX', 600);
+ else if (JSON.parse(phoneResult).status == '1') return true;
+ const check = await ctx.app.redis.get('db3').get(code);
+ if (check == null || check != phone) return false;
+ await ctx.app.redis.get('db3').del(code);
+ let remainder = await ctx.app.redis.get('db3').ttl(phone);
+ if (remainder < 60) remainder = 600;
+ await ctx.app.redis.get('db3').set(phone, JSON.stringify({ status: 1 }), 'EX', remainder);
+ return true;
+ } catch (error) {
+ const blockName = fileName + "--" + "checkCode";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+}
+
+module.exports = SMSServiceService;
\ No newline at end of file
diff --git a/app/service/verify.js b/app/service/verify.js
new file mode 100644
index 0000000..60448a7
--- /dev/null
+++ b/app/service/verify.js
@@ -0,0 +1,84 @@
+'use strict';
+
+const Service = require('../core/base_service');
+
+const fileName = "verify";
+
+// const sha256 = require("crypto-js/sha256");
+
+const { Op } = require("sequelize");
+
+class VerifyService extends Service {
+ async toLogin(origin_url) {
+ const { ctx } = this;
+ try {
+ // const temporary = sha256(sha256(this.generateRandomString()).toString()+'temporary').toString();
+ // Op.regexp 正则匹配,适用于不同端用户登录同一域名的网站
+ // await ctx.model.Business.update({ temporary_id: temporary }, { where: { client_url: { [Op.regexp]: origin_url } } });
+ // const result = await ctx.model.Business.findOne({ where: { client_url: { [Op.regexp]: origin_url } } });
+ // Op.startsWith 包含,适用于不同端用户登录不同域名网站
+ // await ctx.model.Business.update({ temporary_id: temporary }, { where: { client_url: { [Op.startsWith]: origin_url } } });
+ const where = { client_url: { [Op.startsWith]: origin_url } };
+ const result = await ctx.model3.Business.findOne({ where });
+ return result || false;
+ } catch (error) {
+ const blockName = fileName + "--" + "toLogin";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async loginClient(client_id) {
+ const { ctx } = this;
+ try {
+ let checkFixedClient = false;
+ ctx.app.config.fixedClient.forEach(element => {
+ if (client_id == element) checkFixedClient = true;
+ });
+ if (checkFixedClient) {
+ return {
+ dataValues: {
+ client_id,
+ client_secret: client_id
+ }
+ };
+ } else {
+ const where = { temporary_id: client_id };
+ const result = await ctx.model3.Business.findOne({ where });
+ return result || false;
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "loginClient";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+
+ async getToken(client_id) {
+ const { ctx } = this;
+ try {
+ let checkFixedClient = false;
+ ctx.app.config.fixedClient.forEach(element => {
+ if (client_id == element) checkFixedClient = true;
+ });
+ if (checkFixedClient) {
+ return {
+ dataValues: {
+ client_id,
+ client_secret: client_id
+ }
+ };
+ } else {
+ const where = { client_id };
+ const result = await ctx.model3.Business.findOne({ where });
+ return result || false;
+ }
+ } catch (error) {
+ const blockName = fileName + "--" + "getToken";
+ ctx.app.middleware.log('../../serviceLog', blockName + ">>>>" + error);
+ return 'error';
+ }
+ }
+}
+
+module.exports = VerifyService;
\ No newline at end of file
diff --git a/app/view/index.html b/app/view/index.html
new file mode 100644
index 0000000..356e37f
--- /dev/null
+++ b/app/view/index.html
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+ OAuth Account Login Page
+
+
+
+
+
+ <%= title %>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/config/config.default.js b/config/config.default.js
new file mode 100644
index 0000000..38d6f1c
--- /dev/null
+++ b/config/config.default.js
@@ -0,0 +1,244 @@
+/* eslint valid-jsdoc: "off" */
+
+/**
+ * @param {Egg.EggAppInfo} appInfo app info
+ */
+module.exports = appInfo => {
+ /**
+ * built-in config
+ * @type {Egg.EggAppConfig}
+ **/
+ const config = exports = {};
+
+ // use for cookie sign key, should change to your own and keep security
+ config.keys = appInfo.name + '_1715070357590_9945';
+
+ // add your middleware config here
+ // config.middleware = [];
+
+ config.security = {
+ csrf: {
+ enable: false
+ },
+ };
+
+ config.jwt = {
+ secret: "authentication"
+ };
+
+ config.oAuth2Server = {
+ debug: true,
+ grants: ['password', 'client_credentials', 'authorization_code', 'refresh_token'],
+ };
+
+ config.fixedClient = ["insiders-manager", "exam", "exam-manager"];
+
+ config.redis = {
+ // 开发/测试环境
+ clients: {
+ db0: {
+ port: 6379,
+ host: '127.0.0.1',
+ password: '74191221',
+ db: 0,
+ },
+ db1: {
+ port: 6379,
+ host: '127.0.0.1',
+ password: '74191221',
+ db: 1,
+ },
+ db2: {
+ port: 6379,
+ host: '127.0.0.1',
+ password: '74191221',
+ db: 2,
+ },
+ db3: {
+ port: 6379,
+ host: '127.0.0.1',
+ password: '74191221',
+ db: 3,
+ },
+ db5: {
+ port: 6379,
+ host: '127.0.0.1',
+ password: '74191221',
+ db: 5,
+ },
+ db6: {
+ port: 6379,
+ host: '127.0.0.1',
+ password: '74191221',
+ db: 6,
+ },
+ db7: {
+ port: 6379,
+ host: '127.0.0.1',
+ password: '74191221',
+ db: 7,
+ }
+ }
+ // 生产环境
+ // clients: {
+ // db0: {
+ // port: 6379,
+ // host: '127.0.0.1',
+ // password: 'bd3@htcc2023',
+ // db: 2,
+ // },
+ // db1: {
+ // port: 6379,
+ // host: '127.0.0.1',
+ // password: 'bd3@htcc2023',
+ // db: 3,
+ // },
+ // db2: {
+ // port: 6379,
+ // host: '127.0.0.1',
+ // password: 'bd3@htcc2023',
+ // db: 4,
+ // },
+ // db3: {
+ // port: 6379,
+ // host: '127.0.0.1',
+ // password: 'bd3@htcc2023',
+ // db: 5,
+ // },
+ // db5: {
+ // port: 6379,
+ // host: '127.0.0.1',
+ // password: 'bd3@htcc2023',
+ // db: 7,
+ // },
+ // db6: {
+ // port: 6379,
+ // host: '127.0.0.1',
+ // password: 'bd3@htcc2023',
+ // db: 8,
+ // },
+ // db7: {
+ // port: 6379,
+ // host: '127.0.0.1',
+ // password: 'bd3@htcc2023',
+ // db: 9,
+ // }
+ // }
+ };
+
+ config.sequelize = {
+ // 开发/测试环境
+ datasources: [
+ {
+ dialect: 'mariadb',
+ host: 'localhost',
+ port: 3306,
+ username: 'root',
+ password: '74191221',
+ database: 'bside',
+ },
+ {
+ dialect: 'mariadb',
+ host: 'localhost',
+ port: 3306,
+ username: 'root',
+ password: '74191221',
+ database: 'cside',
+ delegate: 'model2',
+ baseDir: 'model2',
+ },
+ {
+ dialect: 'mariadb',
+ host: 'localhost',
+ port: 3306,
+ username: 'root',
+ password: '74191221',
+ database: 'insiders',
+ delegate: 'model3',
+ baseDir: 'model3',
+ },
+ {
+ dialect: 'mariadb',
+ host: 'localhost',
+ port: 3306,
+ username: 'root',
+ password: '74191221',
+ database: 'bdContest',
+ delegate: 'model4',
+ baseDir: 'model4',
+ },
+ {
+ dialect: 'mariadb',
+ host: 'localhost',
+ port: 3306,
+ username: 'root',
+ password: '74191221',
+ database: 'bdTrainingExam',
+ delegate: 'model5',
+ baseDir: 'model5',
+ }
+ ]
+ // 生产环境
+ // datasources: [
+ // {
+ // dialect: 'mariadb',
+ // host: 'localhost',
+ // port: 3306,
+ // username: 'bdqh_platform',
+ // password: '124689@XXxx',
+ // database: 'bside',
+ // },
+ // {
+ // dialect: 'mariadb',
+ // host: 'localhost',
+ // port: 3306,
+ // username: 'bdqh_platform',
+ // password: '124689@XXxx',
+ // database: 'cside',
+ // delegate: 'model2',
+ // baseDir: 'model2',
+ // },
+ // {
+ // dialect: 'mariadb',
+ // host: 'localhost',
+ // port: 3306,
+ // username: 'bdqh_platform',
+ // password: '124689@XXxx',
+ // database: 'insiders',
+ // delegate: 'model3',
+ // baseDir: 'model3',
+ // },
+ // {
+ // dialect: 'mariadb',
+ // host: 'localhost',
+ // port: 3306,
+ // username: 'bdqh_platform',
+ // password: '124689@XXxx',
+ // database: 'bdContest',
+ // delegate: 'model4',
+ // baseDir: 'model4',
+ // },
+ // {
+ // dialect: 'mariadb',
+ // host: 'localhost',
+ // port: 3306,
+ // username: 'bdqh_platform',
+ // password: '124689@XXxx',
+ // database: 'bdTrainingExam',
+ // delegate: 'model5',
+ // baseDir: 'model5',
+ // }
+ // ]
+ };
+
+ // add your user config here
+ const userConfig = {
+ // myAppName: 'egg',
+ salt: 'authentication'
+ };
+
+ return {
+ ...config,
+ ...userConfig,
+ };
+};
diff --git a/config/plugin.js b/config/plugin.js
new file mode 100644
index 0000000..a4a76bb
--- /dev/null
+++ b/config/plugin.js
@@ -0,0 +1,42 @@
+/** @type Egg.EggPlugin */
+module.exports = {
+ // had enabled by egg
+ // static: {
+ // enable: true,
+ // }
+
+ CryptoJS : {
+ enable: true,
+ package: 'crypto-js',
+ },
+
+ jwt : {
+ enable: true,
+ package: 'egg-jwt',
+ },
+
+ oAuth2Server: {
+ enable: true,
+ package: 'egg-oauth2-server',
+ },
+
+ redis : {
+ enable: true,
+ package: 'egg-redis',
+ },
+
+ sequelize : {
+ enable: true,
+ package: 'egg-sequelize',
+ },
+
+ validate : {
+ enable: true,
+ package: 'egg-validate',
+ },
+
+ NodeRsa : {
+ enable: true,
+ package: 'node-rsa',
+ },
+};
diff --git a/controllerLog/2024/10/18.txt b/controllerLog/2024/10/18.txt
new file mode 100644
index 0000000..3bec1ca
--- /dev/null
+++ b/controllerLog/2024/10/18.txt
@@ -0,0 +1,4 @@
+[2024-10-18>>>9:20:26]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-18>>>9:20:34]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-18>>>9:21:7]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-18>>>9:22:22]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
diff --git a/controllerLog/2024/10/23.txt b/controllerLog/2024/10/23.txt
new file mode 100644
index 0000000..d45c283
--- /dev/null
+++ b/controllerLog/2024/10/23.txt
@@ -0,0 +1,5 @@
+[2024-10-23>>>17:38:52]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-23>>>17:39:47]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-23>>>17:40:10]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-23>>>17:41:22]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-23>>>17:41:44]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
diff --git a/controllerLog/2024/10/24.txt b/controllerLog/2024/10/24.txt
new file mode 100644
index 0000000..923d7c7
--- /dev/null
+++ b/controllerLog/2024/10/24.txt
@@ -0,0 +1,26 @@
+[2024-10-24>>>9:42:35]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>9:44:14]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>9:44:41]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>9:51:25]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>9:52:29]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>9:53:25]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>9:54:47]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>9:59:32]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>9:59:57]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>10:0:23]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>10:0:47]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>10:1:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>10:1:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>10:1:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>10:1:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>10:1:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>10:9:55]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-24>>>10:43:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>10:43:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>10:43:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>10:43:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>10:43:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>11:18:46]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>11:26:56]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-24>>>11:47:1]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'client_id')
+[2024-10-24>>>11:48:44]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'client_id')
diff --git a/controllerLog/2024/10/25.txt b/controllerLog/2024/10/25.txt
new file mode 100644
index 0000000..4e64eb1
--- /dev/null
+++ b/controllerLog/2024/10/25.txt
@@ -0,0 +1,4 @@
+[2024-10-25>>>14:55:21]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-25>>>14:55:24]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-25>>>14:55:50]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-25>>>14:56:39]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
diff --git a/controllerLog/2024/10/29.txt b/controllerLog/2024/10/29.txt
new file mode 100644
index 0000000..dae851e
--- /dev/null
+++ b/controllerLog/2024/10/29.txt
@@ -0,0 +1,12 @@
+[2024-10-29>>>10:10:38]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-29>>>10:20:11]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-29>>>10:27:1]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-29>>>10:28:2]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-29>>>10:28:45]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-29>>>10:32:3]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-29>>>10:35:2]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-29>>>10:36:11]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-29>>>10:50:9]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-29>>>17:28:27]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-29>>>17:28:33]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-29>>>17:29:13]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
diff --git a/controllerLog/2024/10/31.txt b/controllerLog/2024/10/31.txt
new file mode 100644
index 0000000..80905b9
--- /dev/null
+++ b/controllerLog/2024/10/31.txt
@@ -0,0 +1,25 @@
+[2024-10-31>>>15:16:25]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-31>>>15:16:32]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-31>>>15:17:14]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-31>>>15:17:37]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-31>>>15:54:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:54:34]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:54:37]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:54:39]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:54:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:54:43]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:54:48]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:54:51]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:54:54]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:54:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:54:59]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:55:1]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:55:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:55:6]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:55:8]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:55:10]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:55:12]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:55:14]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:55:16]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-31>>>15:55:35]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-10-31>>>15:55:46]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
diff --git a/controllerLog/2024/10/8.txt b/controllerLog/2024/10/8.txt
new file mode 100644
index 0000000..753372f
--- /dev/null
+++ b/controllerLog/2024/10/8.txt
@@ -0,0 +1,73 @@
+[2024-10-8>>>15:19:28]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>15:19:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>15:19:54]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>15:40:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>15:43:38]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:2:59]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:5:8]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:5:9]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:6:11]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:18:59]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:20:46]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:28:15]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:28:15]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:28:58]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:28:58]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:32:21]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:32:21]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:34:9]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:34:9]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:35:52]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:35:52]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:37:21]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:37:22]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:9]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:10]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:10]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:11]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:12]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:13]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:14]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:14]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:15]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:16]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:17]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:18]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:18]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:19]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:20]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>16:38:21]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:2]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-8>>>17:9:32]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:32]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:33]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:34]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:34]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:35]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:36]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:36]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:37]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:38]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:39]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:40]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:40]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:41]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:42]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:43]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:44]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:45]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:45]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:46]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:47]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:48]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:49]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:49]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:9:50]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-10-8>>>17:13:14]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-8>>>17:13:14]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-10-8>>>17:13:25]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'uidfinder')
+[2024-10-8>>>17:13:26]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'uidfinder')
+[2024-10-8>>>17:13:27]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'uidfinder')
+[2024-10-8>>>17:13:28]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'uidfinder')
+[2024-10-8>>>17:13:29]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'uidfinder')
diff --git a/controllerLog/2024/10/9.txt b/controllerLog/2024/10/9.txt
new file mode 100644
index 0000000..74b9557
--- /dev/null
+++ b/controllerLog/2024/10/9.txt
@@ -0,0 +1 @@
+[2024-10-9>>>14:45:31]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2024/11/12.txt b/controllerLog/2024/11/12.txt
new file mode 100644
index 0000000..9b30366
--- /dev/null
+++ b/controllerLog/2024/11/12.txt
@@ -0,0 +1,2 @@
+[2024-11-12>>>9:24:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-12>>>9:24:16]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2024/11/15.txt b/controllerLog/2024/11/15.txt
new file mode 100644
index 0000000..521248c
--- /dev/null
+++ b/controllerLog/2024/11/15.txt
@@ -0,0 +1,7 @@
+[2024-11-15>>>9:56:46]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-15>>>9:56:56]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-15>>>9:57:23]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-15>>>9:58:8]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-15>>>9:58:48]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-15>>>9:59:4]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-15>>>16:38:39]>>>BSide--editUserManager>>>>ReferenceError: checkUid is not defined
diff --git a/controllerLog/2024/11/19.txt b/controllerLog/2024/11/19.txt
new file mode 100644
index 0000000..9103630
--- /dev/null
+++ b/controllerLog/2024/11/19.txt
@@ -0,0 +1,7 @@
+[2024-11-19>>>9:8:29]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-19>>>9:8:30]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-19>>>9:8:31]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-19>>>9:8:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-19>>>9:8:34]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-19>>>9:8:35]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-19>>>9:8:36]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2024/11/26.txt b/controllerLog/2024/11/26.txt
new file mode 100644
index 0000000..747d701
--- /dev/null
+++ b/controllerLog/2024/11/26.txt
@@ -0,0 +1,14 @@
+[2024-11-26>>>16:55:37]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>16:56:24]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>16:56:31]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>16:56:38]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>16:57:10]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>16:58:12]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>17:5:9]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>17:6:4]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>17:6:58]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>17:7:54]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>17:10:49]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>17:16:24]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>17:24:48]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-26>>>17:26:16]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
diff --git a/controllerLog/2024/11/27.txt b/controllerLog/2024/11/27.txt
new file mode 100644
index 0000000..7dc26c8
--- /dev/null
+++ b/controllerLog/2024/11/27.txt
@@ -0,0 +1,2 @@
+[2024-11-27>>>9:22:45]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2024-11-27>>>9:23:12]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
diff --git a/controllerLog/2024/11/5.txt b/controllerLog/2024/11/5.txt
new file mode 100644
index 0000000..ecc9409
--- /dev/null
+++ b/controllerLog/2024/11/5.txt
@@ -0,0 +1,17 @@
+[2024-11-5>>>11:23:48]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:23:49]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:23:51]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:23:53]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:23:56]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:23:59]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:5]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:8]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:12]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:16]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:21]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:23]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:25]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-5>>>11:24:30]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2024/11/6.txt b/controllerLog/2024/11/6.txt
new file mode 100644
index 0000000..704c514
--- /dev/null
+++ b/controllerLog/2024/11/6.txt
@@ -0,0 +1,2 @@
+[2024-11-6>>>9:0:24]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-11-6>>>9:0:27]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2024/12/4.txt b/controllerLog/2024/12/4.txt
new file mode 100644
index 0000000..349ab2d
--- /dev/null
+++ b/controllerLog/2024/12/4.txt
@@ -0,0 +1,3 @@
+[2024-12-4>>>9:37:46]>>>Insiders--login>>>>TypeError: ctx.service.insiders.longinStatus is not a function
+[2024-12-4>>>9:38:7]>>>Insiders--login>>>>TypeError: ctx.service.insiders.longinStatus is not a function
+[2024-12-4>>>9:38:35]>>>Insiders--login>>>>TypeError: ctx.service.insiders.longinStatus is not a function
diff --git a/controllerLog/2024/8/19.txt b/controllerLog/2024/8/19.txt
new file mode 100644
index 0000000..6db16be
--- /dev/null
+++ b/controllerLog/2024/8/19.txt
@@ -0,0 +1 @@
+[2024-8-19>>>15:38:4]>>>TypeError: this.decryptRequest is not a function
diff --git a/controllerLog/2024/8/21.txt b/controllerLog/2024/8/21.txt
new file mode 100644
index 0000000..992f634
--- /dev/null
+++ b/controllerLog/2024/8/21.txt
@@ -0,0 +1 @@
+[2024-8-21>>>16:2:45]>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
diff --git a/controllerLog/2024/8/22.txt b/controllerLog/2024/8/22.txt
new file mode 100644
index 0000000..2f286aa
--- /dev/null
+++ b/controllerLog/2024/8/22.txt
@@ -0,0 +1,5 @@
+[2024-8-22>>>16:37:8]>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-8-22>>>16:47:55]>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
+[2024-8-22>>>17:7:3]>>>TypeError: Cannot read properties of undefined (reading '0')
+[2024-8-22>>>17:9:49]>>>TypeError: Cannot read properties of undefined (reading '0')
+[2024-8-22>>>17:10:35]>>>TypeError: Cannot read properties of undefined (reading '0')
diff --git a/controllerLog/2024/8/30.txt b/controllerLog/2024/8/30.txt
new file mode 100644
index 0000000..b1456ee
--- /dev/null
+++ b/controllerLog/2024/8/30.txt
@@ -0,0 +1,4 @@
+[2024-8-30>>>14:5:9]>>>TypeError: Cannot read properties of undefined (reading '0')
+[2024-8-30>>>14:5:55]>>>TypeError: Cannot read properties of undefined (reading '0')
+[2024-8-30>>>14:18:1]>>>TypeError: Cannot read properties of undefined (reading '0')
+[2024-8-30>>>14:32:1]>>>TypeError: Cannot read properties of undefined (reading '0')
diff --git a/controllerLog/2024/9/13.txt b/controllerLog/2024/9/13.txt
new file mode 100644
index 0000000..165a559
--- /dev/null
+++ b/controllerLog/2024/9/13.txt
@@ -0,0 +1,8 @@
+[2024-9-13>>>14:27:9]>>>TypeError: ctx.service.verify.uidfinder is not a function
+[2024-9-13>>>14:27:16]>>>TypeError: ctx.service.verify.uidfinder is not a function
+[2024-9-13>>>14:37:23]>>>Error: Malformed UTF-8 data
+[2024-9-13>>>14:44:46]>>>Error: Malformed UTF-8 data
+[2024-9-13>>>14:45:33]>>>Error: Malformed UTF-8 data
+[2024-9-13>>>14:58:0]>>>Error: Malformed UTF-8 data
+[2024-9-13>>>15:0:2]>>>Error: Malformed UTF-8 data
+[2024-9-13>>>17:54:23]>>>TypeError: Cannot read properties of undefined (reading 'ciphertext')
diff --git a/controllerLog/2024/9/14.txt b/controllerLog/2024/9/14.txt
new file mode 100644
index 0000000..82f6182
--- /dev/null
+++ b/controllerLog/2024/9/14.txt
@@ -0,0 +1,21 @@
+[2024-9-14>>>15:49:55]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>15:57:26]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>15:57:30]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>16:3:14]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>16:3:58]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>16:7:1]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>16:20:53]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>16:34:39]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:41:54]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:42:1]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:42:44]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:42:51]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:47:27]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:47:34]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:48:12]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:48:19]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:50:10]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:50:17]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:51:3]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:51:58]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-14>>>17:52:21]>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2024/9/24.txt b/controllerLog/2024/9/24.txt
new file mode 100644
index 0000000..b512c51
--- /dev/null
+++ b/controllerLog/2024/9/24.txt
@@ -0,0 +1,3 @@
+[2024-9-24>>>11:19:43]>>>ReferenceError: Cannot access 'body' before initialization
+[2024-9-24>>>11:26:40]>>>ReferenceError: Cannot access 'body' before initialization
+[2024-9-24>>>11:35:48]>>>ReferenceError: Cannot access 'body' before initialization
diff --git a/controllerLog/2024/9/25.txt b/controllerLog/2024/9/25.txt
new file mode 100644
index 0000000..b593b6c
--- /dev/null
+++ b/controllerLog/2024/9/25.txt
@@ -0,0 +1,28 @@
+[2024-9-25>>>15:14:25]>>>ReferenceError: Cannot access 'body' before initialization
+[2024-9-25>>>15:23:50]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>15:25:37]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>15:27:5]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>15:28:23]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>15:29:6]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>15:32:6]>>>TypeError: Cannot read properties of null (reading 'clientId')
+[2024-9-25>>>15:33:40]>>>TypeError: Cannot read properties of null (reading 'clientId')
+[2024-9-25>>>15:35:58]>>>TypeError: Cannot read properties of null (reading 'clientId')
+[2024-9-25>>>15:37:24]>>>TypeError: Cannot read properties of null (reading 'clientId')
+[2024-9-25>>>15:38:0]>>>TypeError: Cannot read properties of null (reading 'clientId')
+[2024-9-25>>>16:36:11]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>16:43:11]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>16:47:20]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>16:48:9]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>16:48:16]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:29:51]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:30:19]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:30:24]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:30:32]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:30:34]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:30:39]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:32:27]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:32:29]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:32:52]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:33:28]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:33:33]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-9-25>>>17:37:19]>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2024/9/27.txt b/controllerLog/2024/9/27.txt
new file mode 100644
index 0000000..0dd8781
--- /dev/null
+++ b/controllerLog/2024/9/27.txt
@@ -0,0 +1 @@
+[2024-9-27>>>13:50:55]>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2024/9/3.txt b/controllerLog/2024/9/3.txt
new file mode 100644
index 0000000..e9a3235
--- /dev/null
+++ b/controllerLog/2024/9/3.txt
@@ -0,0 +1,3 @@
+[2024-9-3>>>17:43:8]>>>ReferenceError: ctx is not defined
+[2024-9-3>>>17:45:45]>>>ReferenceError: ctx is not defined
+[2024-9-3>>>17:54:22]>>>TypeError: Cannot read properties of undefined (reading 'uid')
diff --git a/controllerLog/2025/2/12.txt b/controllerLog/2025/2/12.txt
new file mode 100644
index 0000000..11769cb
--- /dev/null
+++ b/controllerLog/2025/2/12.txt
@@ -0,0 +1 @@
+[2025-2-12>>>16:26:35]>>>verify--unLogin>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/2/13.txt b/controllerLog/2025/2/13.txt
new file mode 100644
index 0000000..266c55b
--- /dev/null
+++ b/controllerLog/2025/2/13.txt
@@ -0,0 +1,28 @@
+[2025-2-13>>>9:42:26]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>10:45:5]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:19:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:30:22]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:30:22]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/2/14.txt b/controllerLog/2025/2/14.txt
new file mode 100644
index 0000000..bc82578
--- /dev/null
+++ b/controllerLog/2025/2/14.txt
@@ -0,0 +1,13 @@
+[2025-2-14>>>14:26:53]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>14:34:17]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>14:34:17]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>14:34:17]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:27:34]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:41:29]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:41:29]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:42:9]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:42:9]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:48:38]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:48:38]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:48:38]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:54:8]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/2/25.txt b/controllerLog/2025/2/25.txt
new file mode 100644
index 0000000..10a7484
--- /dev/null
+++ b/controllerLog/2025/2/25.txt
@@ -0,0 +1 @@
+[2025-2-25>>>15:7:8]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
diff --git a/controllerLog/2025/2/26.txt b/controllerLog/2025/2/26.txt
new file mode 100644
index 0000000..56b54f9
--- /dev/null
+++ b/controllerLog/2025/2/26.txt
@@ -0,0 +1,37 @@
+[2025-2-26>>>11:39:59]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:40:8]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:45:15]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:45:19]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:47:43]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:49:49]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:50:4]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:50:54]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:51:6]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:51:38]>>>verify--unLogin>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:51:54]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:51:57]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:51:59]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:52:54]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:54:5]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:55:46]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:56:19]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:56:30]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:56:59]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>11:58:4]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'B')
+[2025-2-26>>>15:48:37]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-26>>>15:51:12]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-26>>>16:0:29]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'uidfinder')
+[2025-2-26>>>16:1:18]>>>verify--getMsg>>>>TypeError: Cannot read properties of undefined (reading 'uidfinder')
+[2025-2-26>>>16:6:46]>>>verify--unLogin>>>>TypeError: serverType.loginStatus is not a function
+[2025-2-26>>>17:37:42]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>17:39:30]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>17:41:45]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>17:47:8]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>17:47:33]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>17:48:6]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>17:49:43]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>17:50:24]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>17:53:16]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>17:54:50]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>17:59:49]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-26>>>18:0:39]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
diff --git a/controllerLog/2025/2/27.txt b/controllerLog/2025/2/27.txt
new file mode 100644
index 0000000..4ef7de9
--- /dev/null
+++ b/controllerLog/2025/2/27.txt
@@ -0,0 +1,20 @@
+[2025-2-27>>>9:22:46]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:24:46]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:26:17]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:30:52]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:38:41]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:38:55]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:40:35]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:47:34]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:51:7]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:52:3]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:53:37]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:56:38]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:57:6]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:58:19]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>9:59:31]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>14:17:52]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>14:30:5]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-2-27>>>17:52:22]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-2-27>>>17:59:28]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-2-27>>>17:59:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/2/28.txt b/controllerLog/2025/2/28.txt
new file mode 100644
index 0000000..36241b6
--- /dev/null
+++ b/controllerLog/2025/2/28.txt
@@ -0,0 +1,5 @@
+[2025-2-28>>>9:10:59]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-28>>>9:11:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-28>>>9:12:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-28>>>9:48:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-28>>>9:49:5]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/3/11.txt b/controllerLog/2025/3/11.txt
new file mode 100644
index 0000000..950058f
--- /dev/null
+++ b/controllerLog/2025/3/11.txt
@@ -0,0 +1 @@
+[2025-3-11>>>14:58:21]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
diff --git a/controllerLog/2025/3/12.txt b/controllerLog/2025/3/12.txt
new file mode 100644
index 0000000..ce1a9d4
--- /dev/null
+++ b/controllerLog/2025/3/12.txt
@@ -0,0 +1,8 @@
+[2025-3-12>>>11:16:53]>>>Id2MVService--checkIdCard>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-12>>>12:10:15]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-12>>>12:10:20]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-12>>>12:27:6]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-12>>>12:27:7]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-12>>>12:29:21]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-12>>>12:49:11]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-12>>>12:50:51]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/3/18.txt b/controllerLog/2025/3/18.txt
new file mode 100644
index 0000000..5ea2a29
--- /dev/null
+++ b/controllerLog/2025/3/18.txt
@@ -0,0 +1 @@
+[2025-3-18>>>17:39:44]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/3/19.txt b/controllerLog/2025/3/19.txt
new file mode 100644
index 0000000..900a3e2
--- /dev/null
+++ b/controllerLog/2025/3/19.txt
@@ -0,0 +1,31 @@
+[2025-3-19>>>15:46:11]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:46:15]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:48:30]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:48:33]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:48:34]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:48:43]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:48:45]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:45]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:46]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:47]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:47]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:48]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:49]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:50]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:50]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:51]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:52]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:52]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:53]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:54]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:55]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:56]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:56]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:57]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:57]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:58]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:49:59]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:51:3]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:51:11]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:53:13]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-19>>>15:53:25]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/3/24.txt b/controllerLog/2025/3/24.txt
new file mode 100644
index 0000000..07f4ecd
--- /dev/null
+++ b/controllerLog/2025/3/24.txt
@@ -0,0 +1,24 @@
+[2025-3-24>>>11:26:5]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:26:36]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:29:40]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:30:2]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:32:12]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:34:21]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:34:58]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:39:0]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:39:8]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:41:36]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:41:43]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:42:48]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:44:42]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:45:40]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>11:49:40]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>12:12:6]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>12:13:30]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>12:18:44]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>12:23:57]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>12:28:16]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>12:33:50]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>12:37:2]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>12:40:8]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
+[2025-3-24>>>12:41:50]>>>CSide--login>>>>TypeError: Cannot read properties of undefined (reading 'split')
diff --git a/controllerLog/2025/3/25.txt b/controllerLog/2025/3/25.txt
new file mode 100644
index 0000000..92b8670
--- /dev/null
+++ b/controllerLog/2025/3/25.txt
@@ -0,0 +1 @@
+[2025-3-25>>>12:25:44]>>>Insiders--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
diff --git a/controllerLog/2025/3/26.txt b/controllerLog/2025/3/26.txt
new file mode 100644
index 0000000..6726bcc
--- /dev/null
+++ b/controllerLog/2025/3/26.txt
@@ -0,0 +1,5 @@
+[2025-3-26>>>9:30:3]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-26>>>11:42:44]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-26>>>11:42:46]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-26>>>11:42:48]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-3-26>>>14:59:34]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'status')
diff --git a/controllerLog/2025/3/27.txt b/controllerLog/2025/3/27.txt
new file mode 100644
index 0000000..b959130
--- /dev/null
+++ b/controllerLog/2025/3/27.txt
@@ -0,0 +1,30 @@
+[2025-3-27>>>11:38:52]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>11:38:53]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>11:41:33]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>11:41:33]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>11:41:33]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>11:53:31]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>11:53:31]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>12:19:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>12:19:19]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>12:26:59]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>12:26:59]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>14:18:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>14:18:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>14:18:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>14:18:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>14:18:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>14:18:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>14:18:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>14:18:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>14:18:2]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>15:22:41]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>15:22:41]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>15:22:41]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>15:22:41]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>15:22:41]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>15:22:41]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>15:22:41]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>15:22:41]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>15:22:41]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>15:22:42]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/3/28.txt b/controllerLog/2025/3/28.txt
new file mode 100644
index 0000000..5a0cb97
--- /dev/null
+++ b/controllerLog/2025/3/28.txt
@@ -0,0 +1,37 @@
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:50:13]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>17:56:28]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/3/31.txt b/controllerLog/2025/3/31.txt
new file mode 100644
index 0000000..34c30d7
--- /dev/null
+++ b/controllerLog/2025/3/31.txt
@@ -0,0 +1,13 @@
+[2025-3-31>>>10:22:24]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>10:22:24]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>11:29:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>11:29:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>11:29:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>11:29:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>11:29:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>11:29:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>11:29:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>11:29:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>11:29:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>11:29:14]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-31>>>14:3:54]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
diff --git a/controllerLog/2025/3/6.txt b/controllerLog/2025/3/6.txt
new file mode 100644
index 0000000..eba482e
--- /dev/null
+++ b/controllerLog/2025/3/6.txt
@@ -0,0 +1,19 @@
+[2025-3-6>>>14:27:49]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>14:29:2]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>14:30:59]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>14:32:15]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>14:40:0]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>14:47:32]>>>SMSService--sendSMS>>>>TypeError: Dysmsapi20170525 is not a constructor
+[2025-3-6>>>14:47:42]>>>SMSService--sendSMS>>>>TypeError: Dysmsapi20170525 is not a constructor
+[2025-3-6>>>14:48:14]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>14:49:7]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>14:58:59]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>15:5:17]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>15:7:4]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>15:8:44]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>15:10:7]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>15:10:12]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>17:20:25]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>17:27:35]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>17:29:45]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-6>>>17:36:33]>>>SMSService--sendSMS>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
diff --git a/controllerLog/2025/3/7.txt b/controllerLog/2025/3/7.txt
new file mode 100644
index 0000000..a273b72
--- /dev/null
+++ b/controllerLog/2025/3/7.txt
@@ -0,0 +1,6 @@
+[2025-3-7>>>11:28:57]>>>Id2MVService--checkIdCard>>>>TypeError: Cannot read properties of undefined (reading 'Recommend')
+[2025-3-7>>>14:44:37]>>>CNTEVService--CNTEV>>>>ReferenceError: app is not defined
+[2025-3-7>>>14:45:28]>>>CNTEVService--CNTEV>>>>ReferenceError: app is not defined
+[2025-3-7>>>14:46:24]>>>CNTEVService--CNTEV>>>>ResponseTimeoutError: Response timeout for 3000ms, POST http://127.0.0.1:8011/CNTEV -1 (connected: true, keepalive socket: false, agent status: {"createSocketCount":1,"createSocketErrorCount":0,"closeSocketCount":1,"errorSocketCount":0,"timeoutSocketCount":0,"requestCount":0,"freeSockets":{},"sockets":{},"requests":{}}, socketHandledRequests: 1, socketHandledResponses: 0)
+headers: {}
+[2025-3-7>>>16:23:38]>>>CNTEVService--CNTEV>>>>ReferenceError: realMark is not defined
diff --git a/controllerLog/2025/4/15.txt b/controllerLog/2025/4/15.txt
new file mode 100644
index 0000000..236b3f6
--- /dev/null
+++ b/controllerLog/2025/4/15.txt
@@ -0,0 +1,8 @@
+[2025-4-15>>>17:50:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-15>>>17:50:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-15>>>17:50:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-15>>>17:50:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-15>>>17:50:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-15>>>17:50:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-15>>>17:50:19]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-15>>>17:50:20]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/4/23.txt b/controllerLog/2025/4/23.txt
new file mode 100644
index 0000000..0b4ec67
--- /dev/null
+++ b/controllerLog/2025/4/23.txt
@@ -0,0 +1,28 @@
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>16:20:58]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>17:28:40]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>17:28:40]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>17:28:40]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>17:28:40]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>17:28:41]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-23>>>17:29:0]>>>ExamManager--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
diff --git a/controllerLog/2025/4/24.txt b/controllerLog/2025/4/24.txt
new file mode 100644
index 0000000..660d1cb
--- /dev/null
+++ b/controllerLog/2025/4/24.txt
@@ -0,0 +1,2 @@
+[2025-4-24>>>9:57:56]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-24>>>9:57:56]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/4/25.txt b/controllerLog/2025/4/25.txt
new file mode 100644
index 0000000..f2126de
--- /dev/null
+++ b/controllerLog/2025/4/25.txt
@@ -0,0 +1,21 @@
+[2025-4-25>>>11:40:15]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>11:40:15]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>14:33:42]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>14:33:42]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>15:34:1]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>15:34:1]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>15:34:1]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>15:34:1]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>15:34:1]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:41:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:41:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:41:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:41:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:41:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:41:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:41:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:41:2]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:43:20]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:43:21]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>17:25:26]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>17:25:26]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/5/16.txt b/controllerLog/2025/5/16.txt
new file mode 100644
index 0000000..1701410
--- /dev/null
+++ b/controllerLog/2025/5/16.txt
@@ -0,0 +1,9 @@
+[2025-5-16>>>11:47:35]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-16>>>11:47:35]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-16>>>11:47:35]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-16>>>11:47:35]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-16>>>11:47:35]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-16>>>11:47:35]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-16>>>11:47:35]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-16>>>11:47:35]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-16>>>11:47:36]>>>verify--loginStatus>>>>Error: Malformed UTF-8 data
diff --git a/controllerLog/2025/5/19.txt b/controllerLog/2025/5/19.txt
new file mode 100644
index 0000000..330d3df
--- /dev/null
+++ b/controllerLog/2025/5/19.txt
@@ -0,0 +1,15 @@
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-19>>>17:16:47]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/5/20.txt b/controllerLog/2025/5/20.txt
new file mode 100644
index 0000000..40cb11f
--- /dev/null
+++ b/controllerLog/2025/5/20.txt
@@ -0,0 +1,23 @@
+[2025-5-20>>>10:59:39]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>16:7:41]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:13]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:26:50]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:26:50]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/5/21.txt b/controllerLog/2025/5/21.txt
new file mode 100644
index 0000000..9e144ac
--- /dev/null
+++ b/controllerLog/2025/5/21.txt
@@ -0,0 +1,24 @@
+[2025-5-21>>>9:42:6]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>10:19:27]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>10:19:27]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>10:19:27]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>10:19:27]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>10:19:27]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>10:19:27]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>11:0:46]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>11:0:46]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>11:0:46]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>11:0:46]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>12:7:27]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>14:36:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>14:36:57]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:8:15]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:28:50]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:28:50]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:28:50]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:30:16]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:36:15]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:37:2]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:37:45]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>17:24:11]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>17:55:50]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/5/22.txt b/controllerLog/2025/5/22.txt
new file mode 100644
index 0000000..4510ee3
--- /dev/null
+++ b/controllerLog/2025/5/22.txt
@@ -0,0 +1,20 @@
+[2025-5-22>>>9:39:55]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:10:6]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:31]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:31]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:32]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>16:31:16]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>16:31:16]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>16:31:16]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>16:31:16]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>16:31:17]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/5/28.txt b/controllerLog/2025/5/28.txt
new file mode 100644
index 0000000..57aec16
--- /dev/null
+++ b/controllerLog/2025/5/28.txt
@@ -0,0 +1,7 @@
+[2025-5-28>>>15:29:1]>>>verify--getMsg>>>>Error: Malformed UTF-8 data
+[2025-5-28>>>15:34:18]>>>verify--getMsg>>>>Error: Malformed UTF-8 data
+[2025-5-28>>>16:19:28]>>>verify--getMsg>>>>Error: Malformed UTF-8 data
+[2025-5-28>>>16:33:27]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-28>>>16:33:27]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-28>>>16:33:27]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-5-28>>>16:33:28]>>>verify--loginStatus>>>>Error: Malformed UTF-8 data
diff --git a/controllerLog/2025/5/6.txt b/controllerLog/2025/5/6.txt
new file mode 100644
index 0000000..ae32d44
--- /dev/null
+++ b/controllerLog/2025/5/6.txt
@@ -0,0 +1,2 @@
+[2025-5-6>>>16:5:35]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-6>>>16:5:36]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/5/9.txt b/controllerLog/2025/5/9.txt
new file mode 100644
index 0000000..c886adf
--- /dev/null
+++ b/controllerLog/2025/5/9.txt
@@ -0,0 +1 @@
+[2025-5-9>>>10:12:50]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/6/20.txt b/controllerLog/2025/6/20.txt
new file mode 100644
index 0000000..533495f
--- /dev/null
+++ b/controllerLog/2025/6/20.txt
@@ -0,0 +1,4 @@
+[2025-6-20>>>17:23:37]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-6-20>>>17:30:50]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-6-20>>>17:30:50]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-6-20>>>17:38:40]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
diff --git a/controllerLog/2025/6/23.txt b/controllerLog/2025/6/23.txt
new file mode 100644
index 0000000..b3c723e
--- /dev/null
+++ b/controllerLog/2025/6/23.txt
@@ -0,0 +1,3 @@
+[2025-6-23>>>9:58:21]>>>verify--getUser>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-6-23>>>9:58:23]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-6-23>>>9:58:23]>>>verify--loginStatus>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2025/6/27.txt b/controllerLog/2025/6/27.txt
new file mode 100644
index 0000000..56e8215
--- /dev/null
+++ b/controllerLog/2025/6/27.txt
@@ -0,0 +1,13 @@
+[2025-6-27>>>16:12:15]>>>verify--loginStatus>>>>TypeError: Cannot read properties of null (reading 'accessToken')
+[2025-6-27>>>16:12:20]>>>verify--loginStatus>>>>TypeError: Cannot read properties of null (reading 'accessToken')
+[2025-6-27>>>16:23:44]>>>verify--loginStatus>>>>TypeError: Cannot read properties of null (reading 'accessToken')
+[2025-6-27>>>16:23:44]>>>verify--loginStatus>>>>TypeError: Cannot read properties of null (reading 'accessToken')
+[2025-6-27>>>16:23:51]>>>verify--loginStatus>>>>TypeError: Cannot read properties of null (reading 'accessToken')
+[2025-6-27>>>16:25:2]>>>verify--loginStatus>>>>SyntaxError: Unexpected token a in JSON at position 0
+[2025-6-27>>>16:25:11]>>>verify--loginStatus>>>>SyntaxError: Unexpected token a in JSON at position 0
+[2025-6-27>>>16:26:3]>>>verify--loginStatus>>>>SyntaxError: Unexpected token c in JSON at position 3
+[2025-6-27>>>16:26:5]>>>verify--loginStatus>>>>SyntaxError: Unexpected token c in JSON at position 3
+[2025-6-27>>>16:46:32]>>>verify--loginStatus>>>>TypeError: Cannot read properties of null (reading 'clientId')
+[2025-6-27>>>16:46:52]>>>verify--loginStatus>>>>TypeError: Cannot read properties of null (reading 'clientId')
+[2025-6-27>>>16:47:16]>>>verify--loginStatus>>>>TypeError: Cannot read properties of null (reading 'clientId')
+[2025-6-27>>>16:47:24]>>>verify--loginStatus>>>>TypeError: Cannot read properties of null (reading 'clientId')
diff --git a/controllerLog/2025/6/9.txt b/controllerLog/2025/6/9.txt
new file mode 100644
index 0000000..bb8921e
--- /dev/null
+++ b/controllerLog/2025/6/9.txt
@@ -0,0 +1,4 @@
+[2025-6-9>>>9:14:12]>>>verify--getMsg>>>>Error: Malformed UTF-8 data
+[2025-6-9>>>9:14:12]>>>verify--getToken>>>>Error: Malformed UTF-8 data
+[2025-6-9>>>9:14:12]>>>verify--loginStatus>>>>Error: Malformed UTF-8 data
+[2025-6-9>>>15:35:50]>>>verify--getToken>>>>Error: Malformed UTF-8 data
diff --git a/controllerLog/2025/7/25.txt b/controllerLog/2025/7/25.txt
new file mode 100644
index 0000000..2cd5640
--- /dev/null
+++ b/controllerLog/2025/7/25.txt
@@ -0,0 +1,8 @@
+[2025-7-25>>>11:58:41]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
+[2025-7-25>>>12:30:53]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-7-25>>>12:38:37]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-7-25>>>12:46:27]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-7-25>>>12:46:27]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-7-25>>>12:57:8]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-7-25>>>13:2:48]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-7-25>>>13:6:14]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/controllerLog/2026/2/28.txt b/controllerLog/2026/2/28.txt
new file mode 100644
index 0000000..e4ab265
--- /dev/null
+++ b/controllerLog/2026/2/28.txt
@@ -0,0 +1 @@
+[2026-2-28>>>16:4:31]>>>Exam--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
diff --git a/controllerLog/2026/3/9.txt b/controllerLog/2026/3/9.txt
new file mode 100644
index 0000000..86ffe60
--- /dev/null
+++ b/controllerLog/2026/3/9.txt
@@ -0,0 +1 @@
+[2026-3-9>>>11:4:20]>>>Contest--login>>>>TypeError: Cannot read properties of undefined (reading 'status')
diff --git a/database/config.json b/database/config.json
new file mode 100644
index 0000000..1b65e53
--- /dev/null
+++ b/database/config.json
@@ -0,0 +1,23 @@
+{
+ "development": {
+ "username": "root",
+ "password": 74191221,
+ "database": "vm_centos",
+ "host": "127.0.0.1",
+ "dialect": "mariadb"
+ },
+ "test": {
+ "username": "root",
+ "password": 74191221,
+ "database": "vm_centos",
+ "host": "127.0.0.1",
+ "dialect": "mariadb"
+ },
+ "production": {
+ "username": "root",
+ "password": 74191221,
+ "database": "vm_centos",
+ "host": "127.0.0.1",
+ "dialect": "mariadb"
+ }
+}
diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 0000000..1bbed3f
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,5 @@
+{
+ "include": [
+ "**/*"
+ ]
+}
\ No newline at end of file
diff --git a/oauthLog/2024/11/27.txt b/oauthLog/2024/11/27.txt
new file mode 100644
index 0000000..2504eaa
--- /dev/null
+++ b/oauthLog/2024/11/27.txt
@@ -0,0 +1,2 @@
+[2024-11-27>>>9:22:45]>>>ReferenceError: clientSecret is not defined
+[2024-11-27>>>9:23:12]>>>ReferenceError: clientSecret is not defined
diff --git a/oauthLog/2025/2/13.txt b/oauthLog/2025/2/13.txt
new file mode 100644
index 0000000..632aa68
--- /dev/null
+++ b/oauthLog/2025/2/13.txt
@@ -0,0 +1,2 @@
+[2025-2-13>>>9:42:26]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-13>>>15:30:22]>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/oauthLog/2025/2/14.txt b/oauthLog/2025/2/14.txt
new file mode 100644
index 0000000..910d08f
--- /dev/null
+++ b/oauthLog/2025/2/14.txt
@@ -0,0 +1,7 @@
+[2025-2-14>>>14:26:53]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>14:34:16]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:27:34]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:41:29]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:42:9]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:48:38]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-2-14>>>15:54:8]>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/oauthLog/2025/2/26.txt b/oauthLog/2025/2/26.txt
new file mode 100644
index 0000000..0cf7cd1
--- /dev/null
+++ b/oauthLog/2025/2/26.txt
@@ -0,0 +1,4 @@
+[2025-2-26>>>15:32:29]>>>TypeError: Cannot read properties of undefined (reading 'findOne')
+[2025-2-26>>>15:53:47]>>>TypeError: Cannot read properties of undefined (reading 'findOne')
+[2025-2-26>>>15:55:37]>>>TypeError: Cannot read properties of undefined (reading 'findOne')
+[2025-2-26>>>15:59:47]>>>ReferenceError: modelType is not defined
diff --git a/oauthLog/2025/3/10.txt b/oauthLog/2025/3/10.txt
new file mode 100644
index 0000000..4f7eb3d
--- /dev/null
+++ b/oauthLog/2025/3/10.txt
@@ -0,0 +1,3 @@
+[2025-3-10>>>10:17:46]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-10>>>10:23:13]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-10>>>10:23:51]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/11.txt b/oauthLog/2025/3/11.txt
new file mode 100644
index 0000000..1790bf8
--- /dev/null
+++ b/oauthLog/2025/3/11.txt
@@ -0,0 +1,2 @@
+[2025-3-11>>>16:3:45]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-11>>>17:4:1]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/12.txt b/oauthLog/2025/3/12.txt
new file mode 100644
index 0000000..f584bb1
--- /dev/null
+++ b/oauthLog/2025/3/12.txt
@@ -0,0 +1,5 @@
+[2025-3-12>>>9:29:27]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-12>>>9:29:29]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-12>>>15:42:22]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-12>>>17:16:28]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-12>>>17:16:28]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/13.txt b/oauthLog/2025/3/13.txt
new file mode 100644
index 0000000..7533291
--- /dev/null
+++ b/oauthLog/2025/3/13.txt
@@ -0,0 +1,9 @@
+[2025-3-13>>>9:59:50]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-13>>>11:4:16]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-13>>>11:4:16]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-13>>>12:4:25]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-13>>>15:50:50]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-13>>>15:50:50]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-13>>>16:51:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-13>>>18:55:51]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-13>>>18:55:51]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/14.txt b/oauthLog/2025/3/14.txt
new file mode 100644
index 0000000..02eacf6
--- /dev/null
+++ b/oauthLog/2025/3/14.txt
@@ -0,0 +1,10 @@
+[2025-3-14>>>9:24:21]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-14>>>9:24:21]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-14>>>10:26:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-14>>>10:26:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-14>>>11:30:58]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-14>>>11:30:58]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-14>>>12:32:10]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-14>>>12:32:10]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-14>>>16:10:30]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-14>>>16:10:30]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/17.txt b/oauthLog/2025/3/17.txt
new file mode 100644
index 0000000..43f5b5d
--- /dev/null
+++ b/oauthLog/2025/3/17.txt
@@ -0,0 +1,10 @@
+[2025-3-17>>>9:22:26]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-17>>>9:22:26]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-17>>>10:31:11]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-17>>>10:31:11]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-17>>>11:5:52]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-17>>>11:5:52]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-17>>>14:1:15]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-17>>>15:5:15]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-17>>>15:5:15]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-17>>>15:45:31]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/19.txt b/oauthLog/2025/3/19.txt
new file mode 100644
index 0000000..4af6381
--- /dev/null
+++ b/oauthLog/2025/3/19.txt
@@ -0,0 +1,24 @@
+[2025-3-19>>>9:5:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>9:5:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>10:6:20]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>10:6:20]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>10:24:52]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>10:24:52]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>10:43:19]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>10:43:19]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>10:51:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>10:51:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>11:25:49]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>11:25:49]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>11:31:43]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>11:31:43]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>11:46:0]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>11:46:0]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>14:32:5]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>14:32:5]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>14:33:59]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-19>>>14:33:59]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-19>>>14:36:24]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>14:36:24]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>15:48:14]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-19>>>15:48:14]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/20.txt b/oauthLog/2025/3/20.txt
new file mode 100644
index 0000000..431fa41
--- /dev/null
+++ b/oauthLog/2025/3/20.txt
@@ -0,0 +1,14 @@
+[2025-3-20>>>9:9:41]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>9:9:41]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>9:9:42]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>9:9:42]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>10:49:7]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>10:49:7]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>11:17:0]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>11:17:0]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>14:29:33]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>15:51:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>17:41:45]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>17:41:45]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>17:41:46]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-20>>>17:41:46]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/21.txt b/oauthLog/2025/3/21.txt
new file mode 100644
index 0000000..a499af1
--- /dev/null
+++ b/oauthLog/2025/3/21.txt
@@ -0,0 +1,3 @@
+[2025-3-21>>>14:16:34]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-21>>>17:54:1]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-21>>>17:54:1]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/24.txt b/oauthLog/2025/3/24.txt
new file mode 100644
index 0000000..c2d58e6
--- /dev/null
+++ b/oauthLog/2025/3/24.txt
@@ -0,0 +1,15 @@
+[2025-3-24>>>12:46:5]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>16:15:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>16:15:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>17:16:4]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>17:16:4]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>18:37:25]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>18:37:25]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>19:37:26]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>19:37:26]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>19:58:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>19:58:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>19:58:45]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>19:58:45]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>20:9:25]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-24>>>20:9:25]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/25.txt b/oauthLog/2025/3/25.txt
new file mode 100644
index 0000000..fd38d50
--- /dev/null
+++ b/oauthLog/2025/3/25.txt
@@ -0,0 +1,57 @@
+[2025-3-25>>>9:45:42]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>9:45:42]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>10:50:17]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:6:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:6:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:8:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:8:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:8:40]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:8:40]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:10:21]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:10:21]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:18:14]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:18:14]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:18:38]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:18:38]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:18:52]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:18:52]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:19:46]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:19:46]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:20:1]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:20:1]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:20:41]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:20:41]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:21:3]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:21:3]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:21:48]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:21:48]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:22:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:22:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:22:53]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:22:53]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:23:6]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:23:6]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:42:33]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:42:33]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:42:51]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:42:51]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:44:10]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:44:10]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:44:23]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:44:23]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:44:59]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:44:59]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:45:12]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:45:12]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:45:39]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:45:39]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-25>>>12:45:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:45:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:51:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:51:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:59:14]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>12:59:14]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>13:45:13]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>14:47:49]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>15:51:25]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-25>>>16:53:29]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/26.txt b/oauthLog/2025/3/26.txt
new file mode 100644
index 0000000..17bf7be
--- /dev/null
+++ b/oauthLog/2025/3/26.txt
@@ -0,0 +1,27 @@
+[2025-3-26>>>9:20:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>9:20:57]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>9:29:52]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-26>>>9:29:52]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-3-26>>>9:30:12]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>9:30:12]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>11:47:28]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>11:47:28]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>11:48:19]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>11:48:19]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>12:19:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>12:19:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>12:47:27]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>12:47:27]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>13:14:53]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>13:14:53]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>13:16:57]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>13:16:57]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>13:30:15]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>13:30:15]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>13:37:31]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>13:37:31]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>14:3:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>14:3:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>15:10:21]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>15:10:21]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-26>>>15:25:55]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/27.txt b/oauthLog/2025/3/27.txt
new file mode 100644
index 0000000..6fa7a6d
--- /dev/null
+++ b/oauthLog/2025/3/27.txt
@@ -0,0 +1,13 @@
+[2025-3-27>>>9:23:48]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-27>>>11:38:52]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>11:40:3]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-27>>>11:41:33]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>11:42:34]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-27>>>11:53:31]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>11:54:9]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-27>>>12:19:19]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>12:19:55]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-27>>>12:26:59]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-27>>>12:31:4]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-27>>>14:18:22]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-27>>>15:22:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/28.txt b/oauthLog/2025/3/28.txt
new file mode 100644
index 0000000..c33df41
--- /dev/null
+++ b/oauthLog/2025/3/28.txt
@@ -0,0 +1,7 @@
+[2025-3-28>>>10:4:15]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-28>>>10:4:19]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-28>>>11:17:40]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-28>>>13:54:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-28>>>16:4:23]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-28>>>16:50:13]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-3-28>>>16:55:10]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/3/31.txt b/oauthLog/2025/3/31.txt
new file mode 100644
index 0000000..c2b3a8e
--- /dev/null
+++ b/oauthLog/2025/3/31.txt
@@ -0,0 +1,11 @@
+[2025-3-31>>>9:17:16]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-31>>>10:22:38]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-31>>>11:32:38]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-31>>>14:4:5]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-31>>>14:4:5]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-31>>>14:40:56]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-31>>>14:40:56]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-31>>>16:16:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-31>>>16:16:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-31>>>16:46:36]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-3-31>>>16:46:36]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/11.txt b/oauthLog/2025/4/11.txt
new file mode 100644
index 0000000..ad24497
--- /dev/null
+++ b/oauthLog/2025/4/11.txt
@@ -0,0 +1 @@
+[2025-4-11>>>17:0:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/14.txt b/oauthLog/2025/4/14.txt
new file mode 100644
index 0000000..f50844a
--- /dev/null
+++ b/oauthLog/2025/4/14.txt
@@ -0,0 +1,4 @@
+[2025-4-14>>>9:3:55]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-14>>>9:3:56]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-14>>>12:0:44]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-14>>>16:41:30]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/15.txt b/oauthLog/2025/4/15.txt
new file mode 100644
index 0000000..c9ce4d3
--- /dev/null
+++ b/oauthLog/2025/4/15.txt
@@ -0,0 +1,4 @@
+[2025-4-15>>>10:14:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-15>>>14:41:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-15>>>16:24:52]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-15>>>17:50:41]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/16.txt b/oauthLog/2025/4/16.txt
new file mode 100644
index 0000000..f1afbe5
--- /dev/null
+++ b/oauthLog/2025/4/16.txt
@@ -0,0 +1,7 @@
+[2025-4-16>>>14:54:55]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-4-16>>>14:56:5]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-16>>>15:54:15]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-4-16>>>15:54:15]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-4-16>>>15:54:30]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-16>>>15:54:30]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-16>>>16:1:7]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/17.txt b/oauthLog/2025/4/17.txt
new file mode 100644
index 0000000..f27e824
--- /dev/null
+++ b/oauthLog/2025/4/17.txt
@@ -0,0 +1 @@
+[2025-4-17>>>17:22:17]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/2.txt b/oauthLog/2025/4/2.txt
new file mode 100644
index 0000000..9b0417a
--- /dev/null
+++ b/oauthLog/2025/4/2.txt
@@ -0,0 +1,2 @@
+[2025-4-2>>>9:36:4]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-4-2>>>9:36:20]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/21.txt b/oauthLog/2025/4/21.txt
new file mode 100644
index 0000000..3d70bae
--- /dev/null
+++ b/oauthLog/2025/4/21.txt
@@ -0,0 +1,2 @@
+[2025-4-21>>>11:29:43]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-21>>>15:14:46]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/22.txt b/oauthLog/2025/4/22.txt
new file mode 100644
index 0000000..86cc575
--- /dev/null
+++ b/oauthLog/2025/4/22.txt
@@ -0,0 +1,7 @@
+[2025-4-22>>>9:48:34]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-22>>>16:0:10]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-22>>>16:0:10]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-22>>>16:15:35]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-22>>>16:15:35]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-22>>>16:20:8]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-22>>>16:20:8]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/23.txt b/oauthLog/2025/4/23.txt
new file mode 100644
index 0000000..2d30450
--- /dev/null
+++ b/oauthLog/2025/4/23.txt
@@ -0,0 +1,5 @@
+[2025-4-23>>>9:27:17]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-23>>>14:16:22]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-23>>>15:20:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-23>>>16:21:25]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-23>>>17:29:16]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/24.txt b/oauthLog/2025/4/24.txt
new file mode 100644
index 0000000..1563042
--- /dev/null
+++ b/oauthLog/2025/4/24.txt
@@ -0,0 +1,3 @@
+[2025-4-24>>>9:57:56]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-24>>>9:58:11]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-24>>>17:7:42]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/25.txt b/oauthLog/2025/4/25.txt
new file mode 100644
index 0000000..f83d1b0
--- /dev/null
+++ b/oauthLog/2025/4/25.txt
@@ -0,0 +1,9 @@
+[2025-4-25>>>11:40:15]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>14:33:42]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>15:40:23]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-25>>>16:41:17]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-25>>>16:43:20]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>16:43:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-25>>>17:25:25]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-4-25>>>17:25:40]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-25>>>17:27:29]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/27.txt b/oauthLog/2025/4/27.txt
new file mode 100644
index 0000000..c7d0a05
--- /dev/null
+++ b/oauthLog/2025/4/27.txt
@@ -0,0 +1 @@
+[2025-4-27>>>10:6:52]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/28.txt b/oauthLog/2025/4/28.txt
new file mode 100644
index 0000000..a582be8
--- /dev/null
+++ b/oauthLog/2025/4/28.txt
@@ -0,0 +1,9 @@
+[2025-4-28>>>14:42:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-28>>>14:42:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-28>>>14:42:56]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-28>>>14:42:56]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-28>>>14:43:26]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-28>>>14:43:26]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-28>>>14:43:56]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-28>>>14:43:56]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-28>>>14:47:47]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/3.txt b/oauthLog/2025/4/3.txt
new file mode 100644
index 0000000..c504655
--- /dev/null
+++ b/oauthLog/2025/4/3.txt
@@ -0,0 +1,2 @@
+[2025-4-3>>>14:31:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-4-3>>>15:34:37]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/4/8.txt b/oauthLog/2025/4/8.txt
new file mode 100644
index 0000000..a722af9
--- /dev/null
+++ b/oauthLog/2025/4/8.txt
@@ -0,0 +1 @@
+[2025-4-8>>>16:23:48]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/12.txt b/oauthLog/2025/5/12.txt
new file mode 100644
index 0000000..25d617e
--- /dev/null
+++ b/oauthLog/2025/5/12.txt
@@ -0,0 +1,2 @@
+[2025-5-12>>>15:44:45]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-5-12>>>15:45:3]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/13.txt b/oauthLog/2025/5/13.txt
new file mode 100644
index 0000000..9b97406
--- /dev/null
+++ b/oauthLog/2025/5/13.txt
@@ -0,0 +1 @@
+[2025-5-13>>>17:18:2]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/14.txt b/oauthLog/2025/5/14.txt
new file mode 100644
index 0000000..eb062f6
--- /dev/null
+++ b/oauthLog/2025/5/14.txt
@@ -0,0 +1,2 @@
+[2025-5-14>>>10:50:47]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-14>>>14:12:17]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/15.txt b/oauthLog/2025/5/15.txt
new file mode 100644
index 0000000..e6eeedb
--- /dev/null
+++ b/oauthLog/2025/5/15.txt
@@ -0,0 +1,2 @@
+[2025-5-15>>>14:51:15]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-15>>>16:18:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/16.txt b/oauthLog/2025/5/16.txt
new file mode 100644
index 0000000..6534ead
--- /dev/null
+++ b/oauthLog/2025/5/16.txt
@@ -0,0 +1,12 @@
+[2025-5-16>>>9:46:55]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>10:38:4]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>10:38:4]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>10:39:10]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>10:39:10]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>10:39:57]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>10:39:57]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>11:47:57]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>17:38:21]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>17:38:21]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>17:39:30]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-16>>>17:39:30]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/19.txt b/oauthLog/2025/5/19.txt
new file mode 100644
index 0000000..4247433
--- /dev/null
+++ b/oauthLog/2025/5/19.txt
@@ -0,0 +1 @@
+[2025-5-19>>>17:16:55]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/20.txt b/oauthLog/2025/5/20.txt
new file mode 100644
index 0000000..815bfea
--- /dev/null
+++ b/oauthLog/2025/5/20.txt
@@ -0,0 +1,8 @@
+[2025-5-20>>>10:59:38]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>10:59:44]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-20>>>15:24:14]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-20>>>16:7:41]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:3]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:4:13]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:26:49]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-20>>>17:26:58]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/21.txt b/oauthLog/2025/5/21.txt
new file mode 100644
index 0000000..30e8e73
--- /dev/null
+++ b/oauthLog/2025/5/21.txt
@@ -0,0 +1,16 @@
+[2025-5-21>>>9:42:6]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>9:42:12]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-21>>>10:19:27]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>11:0:46]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>11:0:53]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-21>>>12:7:33]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-21>>>14:37:3]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-21>>>16:8:15]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:8:22]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-21>>>16:28:50]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:30:16]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:36:15]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:37:2]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>16:37:45]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-21>>>17:24:17]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-21>>>17:55:50]>>>TypeError: Cannot read properties of undefined (reading 'get')
diff --git a/oauthLog/2025/5/22.txt b/oauthLog/2025/5/22.txt
new file mode 100644
index 0000000..e065da5
--- /dev/null
+++ b/oauthLog/2025/5/22.txt
@@ -0,0 +1,6 @@
+[2025-5-22>>>9:39:55]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>9:39:58]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-22>>>10:10:6]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>10:42:39]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-22>>>16:31:16]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-22>>>16:31:23]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/23.txt b/oauthLog/2025/5/23.txt
new file mode 100644
index 0000000..d03a88f
--- /dev/null
+++ b/oauthLog/2025/5/23.txt
@@ -0,0 +1,2 @@
+[2025-5-23>>>9:26:26]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-23>>>11:24:3]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/26.txt b/oauthLog/2025/5/26.txt
new file mode 100644
index 0000000..da99d3f
--- /dev/null
+++ b/oauthLog/2025/5/26.txt
@@ -0,0 +1,2 @@
+[2025-5-26>>>10:39:24]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-26>>>10:39:27]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/27.txt b/oauthLog/2025/5/27.txt
new file mode 100644
index 0000000..bf6f818
--- /dev/null
+++ b/oauthLog/2025/5/27.txt
@@ -0,0 +1,2 @@
+[2025-5-27>>>9:43:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-27>>>15:43:12]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/28.txt b/oauthLog/2025/5/28.txt
new file mode 100644
index 0000000..8d9e471
--- /dev/null
+++ b/oauthLog/2025/5/28.txt
@@ -0,0 +1,4 @@
+[2025-5-28>>>9:17:18]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-28>>>11:0:22]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-5-28>>>15:27:11]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-28>>>16:34:23]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/29.txt b/oauthLog/2025/5/29.txt
new file mode 100644
index 0000000..3d129ce
--- /dev/null
+++ b/oauthLog/2025/5/29.txt
@@ -0,0 +1,5 @@
+[2025-5-29>>>9:41:23]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-29>>>11:57:39]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-29>>>14:50:41]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-29>>>14:50:41]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-29>>>15:13:46]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/6.txt b/oauthLog/2025/5/6.txt
new file mode 100644
index 0000000..1580d38
--- /dev/null
+++ b/oauthLog/2025/5/6.txt
@@ -0,0 +1,5 @@
+[2025-5-6>>>14:52:22]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-6>>>16:5:35]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2025-5-6>>>16:5:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-6>>>17:7:35]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-6>>>17:7:35]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/7.txt b/oauthLog/2025/5/7.txt
new file mode 100644
index 0000000..f9cfa1c
--- /dev/null
+++ b/oauthLog/2025/5/7.txt
@@ -0,0 +1,2 @@
+[2025-5-7>>>10:34:1]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-7>>>17:24:20]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/5/9.txt b/oauthLog/2025/5/9.txt
new file mode 100644
index 0000000..c97ec2e
--- /dev/null
+++ b/oauthLog/2025/5/9.txt
@@ -0,0 +1,7 @@
+[2025-5-9>>>9:49:59]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-9>>>9:50:28]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-9>>>9:50:28]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-9>>>10:6:31]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-9>>>10:6:31]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-9>>>10:13:14]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-5-9>>>10:13:14]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/6/10.txt b/oauthLog/2025/6/10.txt
new file mode 100644
index 0000000..0327b07
--- /dev/null
+++ b/oauthLog/2025/6/10.txt
@@ -0,0 +1 @@
+[2025-6-10>>>15:52:37]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
diff --git a/oauthLog/2025/6/11.txt b/oauthLog/2025/6/11.txt
new file mode 100644
index 0000000..514d101
--- /dev/null
+++ b/oauthLog/2025/6/11.txt
@@ -0,0 +1,2 @@
+[2025-6-11>>>10:39:10]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-11>>>14:37:13]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/6/23.txt b/oauthLog/2025/6/23.txt
new file mode 100644
index 0000000..a725040
--- /dev/null
+++ b/oauthLog/2025/6/23.txt
@@ -0,0 +1,4 @@
+[2025-6-23>>>9:58:17]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-23>>>9:58:24]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-23>>>16:10:34]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-23>>>17:22:13]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/6/24.txt b/oauthLog/2025/6/24.txt
new file mode 100644
index 0000000..d6ef937
--- /dev/null
+++ b/oauthLog/2025/6/24.txt
@@ -0,0 +1,3 @@
+[2025-6-24>>>11:8:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-24>>>11:8:57]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-24>>>15:48:46]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/6/26.txt b/oauthLog/2025/6/26.txt
new file mode 100644
index 0000000..4e97cad
--- /dev/null
+++ b/oauthLog/2025/6/26.txt
@@ -0,0 +1,2 @@
+[2025-6-26>>>14:23:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-26>>>16:4:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/6/27.txt b/oauthLog/2025/6/27.txt
new file mode 100644
index 0000000..3624021
--- /dev/null
+++ b/oauthLog/2025/6/27.txt
@@ -0,0 +1,4 @@
+[2025-6-27>>>11:48:23]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-27>>>11:48:26]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-27>>>11:52:18]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-6-27>>>11:55:59]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
diff --git a/oauthLog/2025/6/30.txt b/oauthLog/2025/6/30.txt
new file mode 100644
index 0000000..7068731
--- /dev/null
+++ b/oauthLog/2025/6/30.txt
@@ -0,0 +1,2 @@
+[2025-6-30>>>11:8:57]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-30>>>11:39:12]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/6/9.txt b/oauthLog/2025/6/9.txt
new file mode 100644
index 0000000..121ea5a
--- /dev/null
+++ b/oauthLog/2025/6/9.txt
@@ -0,0 +1,4 @@
+[2025-6-9>>>9:14:40]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-9>>>10:20:22]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-9>>>10:20:22]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-6-9>>>14:37:54]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
diff --git a/oauthLog/2025/7/1.txt b/oauthLog/2025/7/1.txt
new file mode 100644
index 0000000..5a80a87
--- /dev/null
+++ b/oauthLog/2025/7/1.txt
@@ -0,0 +1,3 @@
+[2025-7-1>>>9:24:37]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-1>>>15:29:25]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-1>>>16:33:26]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/7/15.txt b/oauthLog/2025/7/15.txt
new file mode 100644
index 0000000..117f9c1
--- /dev/null
+++ b/oauthLog/2025/7/15.txt
@@ -0,0 +1,13 @@
+[2025-7-15>>>9:38:45]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2025-7-15>>>9:49:29]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:5:15]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:7:1]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:8:37]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:14:55]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:15:37]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:16:56]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:19:12]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:20:30]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:21:41]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:25:54]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-15>>>10:37:52]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/7/23.txt b/oauthLog/2025/7/23.txt
new file mode 100644
index 0000000..90f9c5f
--- /dev/null
+++ b/oauthLog/2025/7/23.txt
@@ -0,0 +1 @@
+[2025-7-23>>>16:25:53]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
diff --git a/oauthLog/2025/7/24.txt b/oauthLog/2025/7/24.txt
new file mode 100644
index 0000000..172c246
--- /dev/null
+++ b/oauthLog/2025/7/24.txt
@@ -0,0 +1,3 @@
+[2025-7-24>>>10:3:38]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-24>>>10:4:45]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-24>>>11:6:45]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/7/25.txt b/oauthLog/2025/7/25.txt
new file mode 100644
index 0000000..ffdcc00
--- /dev/null
+++ b/oauthLog/2025/7/25.txt
@@ -0,0 +1,56 @@
+[2025-7-25>>>11:58:47]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>11:58:47]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>11:59:30]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>11:59:30]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:3:20]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:3:20]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:8:15]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:8:15]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:12:20]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:28:53]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:28:53]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:30:8]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:30:8]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:33:53]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:33:53]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:44:29]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:44:29]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:47:7]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:47:7]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:50:18]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:50:18]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:51:13]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:51:13]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:57:39]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:57:39]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:58:7]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>12:58:7]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:1:57]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:1:58]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:3:25]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:3:27]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:4:56]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:4:56]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:6:49]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:6:49]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:8:50]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:8:50]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:9:58]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:10:0]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:10:33]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:11:35]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:14:3]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:15:1]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:15:1]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:20:13]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:20:13]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:22:47]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:22:47]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:24:4]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:24:4]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:25:5]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:25:5]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:27:51]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:27:51]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:28:21]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-25>>>13:28:21]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/7/8.txt b/oauthLog/2025/7/8.txt
new file mode 100644
index 0000000..a6338c1
--- /dev/null
+++ b/oauthLog/2025/7/8.txt
@@ -0,0 +1,3 @@
+[2025-7-8>>>9:4:51]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-8>>>14:50:47]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2025-7-8>>>16:14:25]>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2025/7/9.txt b/oauthLog/2025/7/9.txt
new file mode 100644
index 0000000..3fd937d
--- /dev/null
+++ b/oauthLog/2025/7/9.txt
@@ -0,0 +1 @@
+[2025-7-9>>>9:27:55]>>>TypeError: Cannot read properties of null (reading 'refreshToken')
diff --git a/oauthLog/2026/2/28.txt b/oauthLog/2026/2/28.txt
new file mode 100644
index 0000000..c6cc7fc
--- /dev/null
+++ b/oauthLog/2026/2/28.txt
@@ -0,0 +1 @@
+[2026-2-28>>>17:55:26]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2026/3/10.txt b/oauthLog/2026/3/10.txt
new file mode 100644
index 0000000..ea7aa45
--- /dev/null
+++ b/oauthLog/2026/3/10.txt
@@ -0,0 +1,4 @@
+[2026-3-10>>>9:30:14]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2026-3-10>>>9:30:14]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
+[2026-3-10>>>9:30:53]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2026-3-10>>>9:30:53]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'refreshToken')
diff --git a/oauthLog/2026/3/19.txt b/oauthLog/2026/3/19.txt
new file mode 100644
index 0000000..bbacdeb
--- /dev/null
+++ b/oauthLog/2026/3/19.txt
@@ -0,0 +1 @@
+[2026-3-19>>>15:1:48]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2026/3/27.txt b/oauthLog/2026/3/27.txt
new file mode 100644
index 0000000..3a36a96
--- /dev/null
+++ b/oauthLog/2026/3/27.txt
@@ -0,0 +1 @@
+[2026-3-27>>>10:4:35]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'expiresAt')
diff --git a/oauthLog/2026/3/9.txt b/oauthLog/2026/3/9.txt
new file mode 100644
index 0000000..7de33f1
--- /dev/null
+++ b/oauthLog/2026/3/9.txt
@@ -0,0 +1,2 @@
+[2026-3-9>>>17:58:12]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'refreshToken')
+[2026-3-9>>>17:58:12]>>>oauth--getAccessToken>>>>TypeError: Cannot read properties of null (reading 'refreshToken')
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..09ccc14
--- /dev/null
+++ b/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "authentication",
+ "version": "1.0.0",
+ "description": "",
+ "private": true,
+ "egg": {
+ "declarations": true
+ },
+ "dependencies": {
+ "@alicloud/cloudauth20190307": "^3.4.1",
+ "@alicloud/credentials": "^2.4.0",
+ "@alicloud/dysmsapi20170525": "^3.1.1",
+ "@alicloud/dytnsapi20200217": "^2.12.0",
+ "@alicloud/openapi-client": "^0.4.12",
+ "@alicloud/tea-util": "^1.4.10",
+ "crypto-js": "^4.2.0",
+ "egg": "^3.17.5",
+ "egg-jwt": "^3.1.7",
+ "egg-oauth2-server": "^2.2.6",
+ "egg-redis": "^2.6.0",
+ "egg-scripts": "2",
+ "egg-sequelize": "^6.0.0",
+ "egg-validate": "^2.0.2",
+ "ioredis": "^5.4.1",
+ "mariadb": "^3.3.0",
+ "mysql2": "^3.9.7",
+ "node-rsa": "^1.1.1",
+ "oauth2-server": "^3.1.1",
+ "sequelize": "^6.37.3"
+ },
+ "devDependencies": {
+ "egg-bin": "6",
+ "egg-mock": "5",
+ "eslint": "8",
+ "eslint-config-egg": "13",
+ "sequelize-cli": "^6.6.2"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ },
+ "scripts": {
+ "reload": "egg-scripts stop --title=egg-server-authentication && egg-scripts start --daemon --port=8011 --title=egg-server-authentication --ignore-stderr",
+ "start": "egg-scripts start --daemon --port=8011 --title=egg-server-authentication --ignore-stderr",
+ "stop": "egg-scripts stop --title=egg-server-authentication",
+ "dev": "egg-bin dev --port=8011",
+ "test": "egg-scripts start --env=test --daemon --port=8011",
+ "test:local": "egg-bin test",
+ "cov": "egg-bin cov",
+ "lint": "eslint .",
+ "ci": "npm run lint && npm run cov"
+ },
+ "repository": {
+ "type": "git",
+ "url": ""
+ },
+ "author": "",
+ "license": "MIT"
+}
diff --git a/serviceLog/2024/10/31.txt b/serviceLog/2024/10/31.txt
new file mode 100644
index 0000000..4701b24
--- /dev/null
+++ b/serviceLog/2024/10/31.txt
@@ -0,0 +1 @@
+[2024-10-31>>>15:16:17]>>>CSide--subscribe>>>>TypeError: Cannot read properties of undefined (reading 'uid')
diff --git a/serviceLog/2024/10/8.txt b/serviceLog/2024/10/8.txt
new file mode 100644
index 0000000..f3b94b4
--- /dev/null
+++ b/serviceLog/2024/10/8.txt
@@ -0,0 +1 @@
+[2024-10-8>>>15:39:53]>>>Insiders--loginUser>>>>Error: WHERE parameter "password" has invalid "undefined" value
diff --git a/serviceLog/2024/11/15.txt b/serviceLog/2024/11/15.txt
new file mode 100644
index 0000000..192be28
--- /dev/null
+++ b/serviceLog/2024/11/15.txt
@@ -0,0 +1,12 @@
+[2024-11-15>>>16:42:48]>>>BSide--editUserManager>>>>SequelizeDatabaseError: (conn:1303, no: 1054, SQLState: 42S22) Unknown column 'location' in 'where clause'
+sql: UPDATE `b-side` SET `account_name`=?,`user_name`=?,`phone`=?,`updated_at`=? WHERE `account_name` = ? AND `user_name` = ? AND `phone` = ? AND `location` = ? - parameters:['b6','btest6','15964821536','2024-11-15 08:42:48.358','b6','btest3','15964821531',5]
+[2024-11-15>>>16:53:3]>>>BSide--resetPassword>>>>SequelizeDatabaseError: (conn:1339, no: 1054, SQLState: 42S22) Unknown column 'location' in 'where clause'
+sql: UPDATE `b-side` SET `salt`=?,`status`=?,`password`=?,`user_name`=?,`phone`=?,`updated_at`=? WHERE `role` != 1 AND `organization` = ? AND `account_name` = ? AND `user_name` = ? AND `phone` = ? AND `location` = ? - parameters:['Ue+IUqlCDiKUgyPkWQP0wg==',0,'b...
+[2024-11-15>>>16:57:39]>>>BSide--resetPassword>>>>SequelizeDatabaseError: (conn:1346, no: 1054, SQLState: 42S22) Unknown column 'location' in 'where clause'
+sql: UPDATE `b-side` SET `salt`=?,`status`=?,`password`=?,`user_name`=?,`phone`=?,`updated_at`=? WHERE `role` != 1 AND `organization` = ? AND `account_name` = ? AND `user_name` = ? AND `phone` = ? AND `location` = ? - parameters:['E8tmKkZR7kyPg1fhepg/aw==',0,'0...
+[2024-11-15>>>16:58:2]>>>BSide--resetPassword>>>>SequelizeDatabaseError: (conn:1347, no: 1054, SQLState: 42S22) Unknown column 'location' in 'where clause'
+sql: UPDATE `b-side` SET `salt`=?,`status`=?,`password`=?,`updated_at`=? WHERE `role` != 1 AND `organization` = ? AND `account_name` = ? AND `user_name` = ? AND `phone` = ? AND `location` = ? - parameters:['/eczK1P4NBnG1JreesfKqA==',0,'011ec8446bfdeeb42b7cc7b29...
+[2024-11-15>>>16:59:17]>>>BSide--resetPassword>>>>SequelizeDatabaseError: (conn:1351, no: 1054, SQLState: 42S22) Unknown column 'location' in 'where clause'
+sql: UPDATE `b-side` SET `salt`=?,`status`=?,`password`=?,`user_name`=?,`phone`=?,`updated_at`=? WHERE `role` != 1 AND `organization` = ? AND `account_name` = ? AND `user_name` = ? AND `phone` = ? AND `location` = ? - parameters:['hNwgdOOAG0qtbEXT5zJ7hw==',0,'e...
+[2024-11-15>>>17:4:40]>>>BSide--resetPassword>>>>SequelizeDatabaseError: (conn:1399, no: 1054, SQLState: 42S22) Unknown column 'location' in 'where clause'
+sql: UPDATE `b-side` SET `salt`=?,`status`=?,`password`=?,`user_name`=?,`phone`=?,`updated_at`=? WHERE `role` != 1 AND `organization` = ? AND `account_name` = ? AND `user_name` = ? AND `phone` = ? AND `location` = ? - parameters:['sietPd41b54SRCKqfRV6yw==',0,'3...
diff --git a/serviceLog/2024/11/18.txt b/serviceLog/2024/11/18.txt
new file mode 100644
index 0000000..f2af48e
--- /dev/null
+++ b/serviceLog/2024/11/18.txt
@@ -0,0 +1,5 @@
+[2024-11-18>>>16:2:44]>>>verify--loginClient>>>>Error: WHERE parameter "temporary_id" has invalid "undefined" value
+[2024-11-18>>>16:3:57]>>>CSide--registered>>>>SequelizeDatabaseError: (conn:666, no: 1406, SQLState: 22001) Data too long for column 'uid' at row 1
+sql: INSERT INTO `c-side` (`id`,`uid`,`salt`,`status`,`role`,`avatar`,`account_name`,`password`,`user_name`,`phone`,`gender`,`age`,`email`,`address`,`post_code`,`created_at`,`updated_at`,`login_at`,`login_status`) VALUES (DEFAULT,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?...
+[2024-11-18>>>16:4:51]>>>CSide--registered>>>>SequelizeDatabaseError: (conn:671, no: 1406, SQLState: 22001) Data too long for column 'uid' at row 1
+sql: INSERT INTO `c-side` (`id`,`uid`,`salt`,`status`,`role`,`avatar`,`account_name`,`password`,`user_name`,`phone`,`gender`,`age`,`email`,`address`,`post_code`,`created_at`,`updated_at`,`login_at`,`login_status`) VALUES (DEFAULT,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?...
diff --git a/serviceLog/2024/8/19.txt b/serviceLog/2024/8/19.txt
new file mode 100644
index 0000000..466361c
--- /dev/null
+++ b/serviceLog/2024/8/19.txt
@@ -0,0 +1,8 @@
+[2024-8-19>>>17:33:56]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-19>>>17:33:56]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-19>>>17:33:56]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-19>>>17:33:56]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-19>>>17:33:56]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-19>>>17:33:56]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-19>>>17:35:32]>>>TypeError: ctx.model.BSide.updata is not a function
+[2024-8-19>>>17:35:40]>>>TypeError: ctx.model.BSide.updata is not a function
diff --git a/serviceLog/2024/8/20.txt b/serviceLog/2024/8/20.txt
new file mode 100644
index 0000000..3d27e4f
--- /dev/null
+++ b/serviceLog/2024/8/20.txt
@@ -0,0 +1,19 @@
+[2024-8-20>>>9:10:28]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>11:19:37]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>11:19:37]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>11:19:37]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>11:19:37]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>11:19:37]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>11:19:37]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>13:53:28]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>13:53:28]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>13:53:28]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>13:53:28]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>13:53:28]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>13:53:28]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>14:54:55]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>14:56:39]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>15:0:0]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>15:3:35]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>15:3:53]>>>TypeError: Cannot read properties of undefined (reading 'get')
+[2024-8-20>>>15:4:59]>>>ReferenceError: decryptType is not defined
diff --git a/serviceLog/2024/8/22.txt b/serviceLog/2024/8/22.txt
new file mode 100644
index 0000000..dd03693
--- /dev/null
+++ b/serviceLog/2024/8/22.txt
@@ -0,0 +1,2 @@
+[2024-8-22>>>17:16:44]>>>TypeError: this.generateRandomString is not a function
+[2024-8-22>>>17:19:38]>>>TypeError: this.generateRandomString is not a function
diff --git a/serviceLog/2024/9/13.txt b/serviceLog/2024/9/13.txt
new file mode 100644
index 0000000..f525af1
--- /dev/null
+++ b/serviceLog/2024/9/13.txt
@@ -0,0 +1,5 @@
+[2024-9-13>>>11:47:2]>>>SequelizeForeignKeyConstraintError: (conn:39, no: 1452, SQLState: 23000) Cannot add or update a child row: a foreign key constraint fails (`bside`.`bsubscribe`, CONSTRAINT `FK_bsubscribe_b-side` FOREIGN KEY (`user_uid`) REFERENCES `b-side` (`uid`))
+sql: INSERT INTO `bsubscribe` (`id`,`user_uid`,`business`,`status`,`type`,`created_at`,`updated_at`) VALUES (DEFAULT,?,?,?,?,?,?); - parameters:['20240613698218C',7,0,0,'2024-09-13 03:47:02.363','2024-09-13 03:47:02.363']
+[2024-9-13>>>11:59:22]>>>TypeError: (intermediate value) is not iterable
+[2024-9-13>>>12:1:2]>>>TypeError: (intermediate value) is not iterable
+[2024-9-13>>>12:1:53]>>>TypeError: (intermediate value) is not iterable
diff --git a/serviceLog/2024/9/25.txt b/serviceLog/2024/9/25.txt
new file mode 100644
index 0000000..56f6e46
--- /dev/null
+++ b/serviceLog/2024/9/25.txt
@@ -0,0 +1,2 @@
+[2024-9-25>>>16:0:54]>>>Error: WHERE parameter "client_id" has invalid "undefined" value
+[2024-9-25>>>16:1:20]>>>Error: WHERE parameter "client_id" has invalid "undefined" value
diff --git a/serviceLog/2024/9/3.txt b/serviceLog/2024/9/3.txt
new file mode 100644
index 0000000..b841c5e
--- /dev/null
+++ b/serviceLog/2024/9/3.txt
@@ -0,0 +1,2 @@
+[2024-9-3>>>17:52:38]>>>TypeError: Cannot read properties of undefined (reading 'uid')
+[2024-9-3>>>17:54:43]>>>TypeError: Cannot read properties of undefined (reading 'uid')
diff --git a/serviceLog/2024/9/4.txt b/serviceLog/2024/9/4.txt
new file mode 100644
index 0000000..9914c5f
--- /dev/null
+++ b/serviceLog/2024/9/4.txt
@@ -0,0 +1,2 @@
+[2024-9-4>>>9:9:9]>>>Error: WHERE parameter "temporary_id" has invalid "undefined" value
+[2024-9-4>>>9:9:21]>>>Error: WHERE parameter "temporary_id" has invalid "undefined" value
diff --git a/serviceLog/2025/2/26.txt b/serviceLog/2025/2/26.txt
new file mode 100644
index 0000000..489c944
--- /dev/null
+++ b/serviceLog/2025/2/26.txt
@@ -0,0 +1,6 @@
+[2025-2-26>>>15:28:3]>>>Contest--loginUser>>>>TypeError: Cannot read properties of undefined (reading 'findOne')
+[2025-2-26>>>15:29:47]>>>Contest--loginUser>>>>SequelizeDatabaseError: (conn:431, no: 1146, SQLState: 42S02) Table 'bside.account' doesn't exist
+sql: SELECT `id`, `uid`, `salt`, `contest_uid`, `account_name`, `password`, `status`, `created_at`, `created_at` AS `createdAt` FROM `account` AS `account` WHERE `account`.`account_name` = 'test' LIMIT 1; - parameters:[]
+[2025-2-26>>>15:30:45]>>>Contest--loginUser>>>>TypeError: Cannot read properties of undefined (reading 'findOne')
+[2025-2-26>>>15:31:33]>>>Contest--loginUser>>>>SequelizeDatabaseError: (conn:456, no: 1146, SQLState: 42S02) Table 'bside.account' doesn't exist
+sql: SELECT `id`, `uid`, `salt`, `contest_uid`, `account_name`, `password`, `status`, `created_at`, `created_at` AS `createdAt` FROM `account` AS `account` WHERE `account`.`account_name` = 'test' LIMIT 1; - parameters:[]
diff --git a/serviceLog/2025/2/27.txt b/serviceLog/2025/2/27.txt
new file mode 100644
index 0000000..24fdf69
--- /dev/null
+++ b/serviceLog/2025/2/27.txt
@@ -0,0 +1,8 @@
+[2025-2-27>>>11:44:33]>>>ExamManager--loginUser>>>>SequelizeDatabaseError: (conn:320, no: 1146, SQLState: 42S02) Table 'bdtrainingexam.manager' doesn't exist
+sql: SELECT `id`, `uid`, `salt`, `account_name`, `password`, `role`, `status`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `manager` AS `manager` WHERE `manager`.`name` = 'test' LIMIT 1; - parameters:[]
+[2025-2-27>>>11:46:44]>>>ExamManager--loginUser>>>>SequelizeDatabaseError: (conn:340, no: 1146, SQLState: 42S02) Table 'bdtrainingexam.manager' doesn't exist
+sql: SELECT `id`, `uid`, `salt`, `account_name`, `password`, `role`, `status`, `created_at`, `updated_at`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `manager` AS `manager` WHERE `manager`.`account_name` = 'test' LIMIT 1; - parameters:[]
+[2025-2-27>>>14:31:57]>>>ExamManager--loginUser>>>>SequelizeDatabaseError: (conn:453, no: 1146, SQLState: 42S02) Table 'bdtrainingexam.manager' doesn't exist
+sql: SELECT `id`, `uid`, `salt`, `account_name`, `password`, `role`, `status`, `created_at`, `updated_at`, `login_status`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `manager` AS `manager` WHERE `manager`.`account_name` = 'test' LIMIT 1; - parameters:[]
+[2025-2-27>>>14:33:29]>>>ExamManager--loginUser>>>>SequelizeDatabaseError: (conn:461, no: 1146, SQLState: 42S02) Table 'bdtrainingexam.manager' doesn't exist
+sql: SELECT `id`, `uid`, `salt`, `account_name`, `password`, `role`, `status`, `created_at`, `updated_at`, `login_status`, `created_at` AS `createdAt`, `updated_at` AS `updatedAt` FROM `manager` AS `manager` WHERE `manager`.`account_name` = 'test' LIMIT 1; - parameters:[]
diff --git a/serviceLog/2025/2/28.txt b/serviceLog/2025/2/28.txt
new file mode 100644
index 0000000..8a7dc7a
--- /dev/null
+++ b/serviceLog/2025/2/28.txt
@@ -0,0 +1,8 @@
+[2025-2-28>>>15:34:14]>>>Exam--editUser>>>>SequelizeDatabaseError: (conn:498, no: 1406, SQLState: 22001) Data too long for column 'user_name' at row 1
+sql: UPDATE `examinee` SET `account_name`=?,`user_name`=?,`phone`=?,`updated_at`=? WHERE `uid` = ? - parameters:['test','testuser','18435854948','2025-02-28 07:34:14.160','20240613698218E']
+[2025-2-28>>>16:29:4]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'forEach')
+[2025-2-28>>>16:29:4]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'forEach')
+[2025-2-28>>>16:29:4]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'forEach')
+[2025-2-28>>>16:29:4]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'forEach')
+[2025-2-28>>>16:29:14]>>>verify--getToken>>>>TypeError: Cannot read properties of undefined (reading 'forEach')
+[2025-2-28>>>16:29:25]>>>verify--loginClient>>>>TypeError: Cannot read properties of undefined (reading 'forEach')
diff --git a/serviceLog/2025/3/12.txt b/serviceLog/2025/3/12.txt
new file mode 100644
index 0000000..b15f138
--- /dev/null
+++ b/serviceLog/2025/3/12.txt
@@ -0,0 +1,26 @@
+[2025-3-12>>>12:24:17]>>>SMSService--checkCode>>>>TypeError: Cannot read properties of null (reading 'status')
+[2025-3-12>>>12:43:14]>>>SMSService--checkCode>>>>TypeError: Cannot read properties of null (reading 'status')
+[2025-3-12>>>12:44:9]>>>SMSService--checkCode>>>>TypeError: Cannot read properties of null (reading 'status')
+[2025-3-12>>>12:45:37]>>>SMSService--checkCode>>>>TypeError: Cannot read properties of null (reading 'status')
+[2025-3-12>>>12:45:42]>>>SMSService--checkCode>>>>TypeError: Cannot read properties of null (reading 'status')
+[2025-3-12>>>12:45:46]>>>SMSService--checkCode>>>>TypeError: Cannot read properties of null (reading 'status')
+[2025-3-12>>>12:47:9]>>>SMSService--checkCode>>>>TypeError: Cannot read properties of null (reading 'status')
+[2025-3-12>>>17:39:38]>>>Exam--editUser>>>>SequelizeDatabaseError: (conn:386, no: 1406, SQLState: 22001) Data too long for column 'gender' at row 1
+sql: UPDATE `examinee` SET `account_name`=?,`identity_card`=?,`user_name`=?,`gender`=?,`age`=?,`email`=?,`phone`=?,`address`=?,`workplace`=?,`updated_at`=? WHERE `uid` = ? - parameters:['屈彪彪','142327200010180611','屈彪彪','1','24','2357702763@qq.com','18435854948'...
+[2025-3-12>>>17:39:46]>>>Exam--editUser>>>>SequelizeDatabaseError: (conn:386, no: 1406, SQLState: 22001) Data too long for column 'gender' at row 1
+sql: UPDATE `examinee` SET `account_name`=?,`identity_card`=?,`user_name`=?,`gender`=?,`age`=?,`email`=?,`phone`=?,`address`=?,`workplace`=?,`updated_at`=? WHERE `uid` = ? - parameters:['屈彪彪','142327200010180611','屈彪彪','1',24,'2357702763@qq.com','18435854948','...
+[2025-3-12>>>17:40:4]>>>Exam--editUser>>>>SequelizeDatabaseError: (conn:390, no: 1406, SQLState: 22001) Data too long for column 'gender' at row 1
+sql: UPDATE `examinee` SET `account_name`=?,`identity_card`=?,`user_name`=?,`gender`=?,`age`=?,`email`=?,`phone`=?,`address`=?,`workplace`=?,`updated_at`=? WHERE `uid` = ? - parameters:['屈彪彪','142327200010180611','屈彪彪','1',24,'2357702763@qq.com','18435854948','...
+[2025-3-12>>>17:40:11]>>>Exam--editUser>>>>SequelizeDatabaseError: (conn:398, no: 1406, SQLState: 22001) Data too long for column 'gender' at row 1
+sql: UPDATE `examinee` SET `account_name`=?,`identity_card`=?,`user_name`=?,`gender`=?,`age`=?,`email`=?,`phone`=?,`address`=?,`workplace`=?,`updated_at`=? WHERE `uid` = ? - parameters:['屈彪彪','142327200010180611','屈彪彪','1',24,'2357702763@qq.com','18435854948','...
+[2025-3-12>>>17:40:37]>>>Exam--editUser>>>>SequelizeDatabaseError: (conn:413, no: 1406, SQLState: 22001) Data too long for column 'gender' at row 1
+sql: UPDATE `examinee` SET `account_name`=?,`identity_card`=?,`user_name`=?,`gender`=?,`age`=?,`email`=?,`phone`=?,`address`=?,`workplace`=?,`updated_at`=? WHERE `uid` = ? - parameters:['屈彪彪','142327200010180611','屈彪彪','1',24,'2357702763@qq.com','18435854948','...
+[2025-3-12>>>17:41:5]>>>Exam--editUser>>>>SequelizeDatabaseError: (conn:417, no: 1406, SQLState: 22001) Data too long for column 'gender' at row 1
+sql: UPDATE `examinee` SET `account_name`=?,`identity_card`=?,`user_name`=?,`gender`=?,`age`=?,`email`=?,`phone`=?,`address`=?,`workplace`=?,`updated_at`=? WHERE `uid` = ? - parameters:['屈彪彪','142327200010180610','屈彪彪','1',24,'2357702763@qq.com','18435854948','...
+[2025-3-12>>>17:44:57]>>>Exam--editUser>>>>SequelizeDatabaseError: (conn:427, no: 1406, SQLState: 22001) Data too long for column 'gender' at row 1
+sql: UPDATE `examinee` SET `account_name`=?,`identity_card`=?,`user_name`=?,`gender`=?,`age`=?,`email`=?,`phone`=?,`address`=?,`workplace`=?,`updated_at`=? WHERE `uid` = ? - parameters:['屈彪彪','142327200010180611','屈彪彪','1',24,'2357702763@qq.com','18435854948','...
+[2025-3-12>>>17:56:11]>>>Exam--editUser>>>>SequelizeDatabaseError: (conn:446, no: 1406, SQLState: 22001) Data too long for column 'gender' at row 1
+sql: UPDATE `examinee` SET `account_name`=?,`identity_card`=?,`user_name`=?,`gender`=?,`age`=?,`email`=?,`phone`=?,`address`=?,`workplace`=?,`updated_at`=? WHERE `uid` = ? - parameters:['屈彪彪','142327200010180611','屈彪彪','1','24','2357702763@qq.com','18435854948'...
+[2025-3-12>>>17:56:27]>>>Exam--editUser>>>>SequelizeDatabaseError: (conn:448, no: 1406, SQLState: 22001) Data too long for column 'gender' at row 1
+sql: UPDATE `examinee` SET `account_name`=?,`identity_card`=?,`user_name`=?,`gender`=?,`age`=?,`email`=?,`phone`=?,`address`=?,`workplace`=?,`updated_at`=? WHERE `uid` = ? - parameters:['屈彪彪','142327200010180610','屈彪彪','1',24,'2357702763@qq.com','18435854948','...
+[2025-3-12>>>17:59:46]>>>Exam--editUser>>>>SequelizeUniqueConstraintError: Validation error
diff --git a/serviceLog/2025/3/13.txt b/serviceLog/2025/3/13.txt
new file mode 100644
index 0000000..2b8b0dc
--- /dev/null
+++ b/serviceLog/2025/3/13.txt
@@ -0,0 +1,23 @@
+[2025-3-13>>>10:29:56]>>>Exam--editUser>>>>SequelizeUniqueConstraintError: Validation error
+[2025-3-13>>>10:49:55]>>>Exam--editUser>>>>SequelizeUniqueConstraintError: Validation error
+[2025-3-13>>>15:50:53]>>>Exam--getUser>>>>SequelizeDatabaseError: (conn:427, no: 1146, SQLState: 42S02) Table 'bside.audit' doesn't exist
+sql: SELECT `status` FROM `audit` AS `audit` WHERE `audit`.`uid` = '20250312837014E' AND `audit`.`identity_card` = '142327200010180611' AND `audit`.`user_name` = '屈彪彪' LIMIT 1; - parameters:[]
+[2025-3-13>>>15:51:55]>>>Exam--getUser>>>>SequelizeDatabaseError: (conn:444, no: 1146, SQLState: 42S02) Table 'bside.audit' doesn't exist
+sql: SELECT `status` FROM `audit` AS `audit` WHERE `audit`.`uid` = '20250312837014E' AND `audit`.`identity_card` = '142327200010180611' AND `audit`.`user_name` = '屈彪彪' LIMIT 1; - parameters:[]
+[2025-3-13>>>15:52:20]>>>Exam--getUser>>>>SequelizeDatabaseError: (conn:454, no: 1146, SQLState: 42S02) Table 'bside.audit' doesn't exist
+sql: SELECT `status` FROM `audit` AS `audit` WHERE `audit`.`uid` = '20250312837014E' AND `audit`.`identity_card` = '142327200010180611' AND `audit`.`user_name` = '屈彪彪' LIMIT 1; - parameters:[]
+[2025-3-13>>>15:53:47]>>>Exam--getUser>>>>SequelizeDatabaseError: (conn:473, no: 1146, SQLState: 42S02) Table 'bside.audit' doesn't exist
+sql: SELECT `status` FROM `audit` AS `audit` WHERE `audit`.`uid` = '20250312837014E' AND `audit`.`identity_card` = '142327200010180611' AND `audit`.`user_name` = '屈彪彪' LIMIT 1; - parameters:[]
+[2025-3-13>>>15:54:20]>>>Exam--getUser>>>>SequelizeDatabaseError: (conn:481, no: 1146, SQLState: 42S02) Table 'bside.audit' doesn't exist
+sql: SELECT `status` FROM `audit` AS `audit` WHERE `audit`.`uid` = '20250312837014E' AND `audit`.`identity_card` = '142327200010180611' AND `audit`.`user_name` = '屈彪彪' LIMIT 1; - parameters:[]
+[2025-3-13>>>15:55:22]>>>Exam--getUser>>>>SequelizeDatabaseError: (conn:504, no: 1146, SQLState: 42S02) Table 'bside.audit' doesn't exist
+sql: SELECT `status` FROM `audit` AS `audit` WHERE `audit`.`uid` = '20250312837014E' AND `audit`.`identity_card` = '142327200010180611' AND `audit`.`user_name` = '屈彪彪' LIMIT 1; - parameters:[]
+[2025-3-13>>>15:57:15]>>>Exam--getUser>>>>SequelizeDatabaseError: (conn:526, no: 1054, SQLState: 42S22) Unknown column 'audit.uid' in 'where clause'
+sql: SELECT `status` FROM `audit` AS `audit` WHERE `audit`.`uid` = '20250312837014E' AND `audit`.`identity_card` = '142327200010180611' AND `audit`.`user_name` = '屈彪彪' LIMIT 1; - parameters:[]
+[2025-3-13>>>15:57:29]>>>Exam--getUser>>>>SequelizeDatabaseError: (conn:530, no: 1054, SQLState: 42S22) Unknown column 'audit.uid' in 'where clause'
+sql: SELECT `status` FROM `audit` AS `audit` WHERE `audit`.`uid` = '20250312837014E' AND `audit`.`identity_card` = '142327200010180611' AND `audit`.`user_name` = '屈彪彪' LIMIT 1; - parameters:[]
+[2025-3-13>>>15:58:28]>>>Exam--getUser>>>>SequelizeDatabaseError: (conn:552, no: 1054, SQLState: 42S22) Unknown column 'audit.uid' in 'where clause'
+sql: SELECT `status` FROM `audit` AS `audit` WHERE `audit`.`uid` = '20250312837014E' AND `audit`.`identity_card` = '142327200010180611' AND `audit`.`user_name` = '屈彪彪' LIMIT 1; - parameters:[]
+[2025-3-13>>>15:59:12]>>>Exam--getUser>>>>SequelizeDatabaseError: (conn:555, no: 1054, SQLState: 42S22) Unknown column 'audit.uid' in 'where clause'
+sql: SELECT `status` FROM `audit` AS `audit` WHERE `audit`.`uid` = '20250312837014E' AND `audit`.`identity_card` = '142327200010180611' AND `audit`.`user_name` = '屈彪彪' LIMIT 1; - parameters:[]
+[2025-3-13>>>16:0:35]>>>Exam--getUser>>>>TypeError: Cannot read properties of null (reading 'dataValues')
diff --git a/serviceLog/2025/3/24.txt b/serviceLog/2025/3/24.txt
new file mode 100644
index 0000000..948d051
--- /dev/null
+++ b/serviceLog/2025/3/24.txt
@@ -0,0 +1,7 @@
+[2025-3-24>>>15:33:15]>>>CNTEVService--realMark>>>>SequelizeDatabaseError: (conn:660, no: 1054, SQLState: 42S22) Unknown column 'idCard' in 'where clause'
+sql: UPDATE `examinee` SET `real_check`=?,`updated_at`=? WHERE `idCard` = ? AND `name` = ? - parameters:[2,'2025-03-24 07:33:15.374','142020202010100610','曲静静']
+[2025-3-24>>>15:33:18]>>>CNTEVService--realMark>>>>SequelizeDatabaseError: (conn:660, no: 1054, SQLState: 42S22) Unknown column 'idCard' in 'where clause'
+sql: UPDATE `examinee` SET `real_check`=?,`updated_at`=? WHERE `idCard` = ? AND `name` = ? - parameters:[2,'2025-03-24 07:33:18.238','142020202010100610','曲静静']
+[2025-3-24>>>15:33:25]>>>CNTEVService--realMark>>>>SequelizeDatabaseError: (conn:660, no: 1054, SQLState: 42S22) Unknown column 'idCard' in 'where clause'
+sql: UPDATE `examinee` SET `real_check`=?,`updated_at`=? WHERE `idCard` = ? AND `name` = ? - parameters:[2,'2025-03-24 07:33:25.235','142020202010100610','曲静静']
+[2025-3-24>>>17:39:15]>>>CNTEVService--CNTEV>>>>ClientError: MissingCertName: code: 400, CertName is mandatory for this action. request id: 8571A2CD-DE76-58E3-98AA-A0397C466C12
diff --git a/serviceLog/2025/3/26.txt b/serviceLog/2025/3/26.txt
new file mode 100644
index 0000000..412dd4f
--- /dev/null
+++ b/serviceLog/2025/3/26.txt
@@ -0,0 +1,3 @@
+[2025-3-26>>>12:33:28]>>>CNTEVService--CNTEV>>>>ClientError: MissingCertName: code: 400, CertName is mandatory for this action. request id: D2FCD20A-DE3B-53BE-AF54-373E4D5B9F44
+[2025-3-26>>>13:33:39]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 9166F944-7860-51D2-9A28-B142FF937456
+[2025-3-26>>>14:33:39]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 3D2614A2-4456-5419-B273-AA3400A5A682
diff --git a/serviceLog/2025/3/6.txt b/serviceLog/2025/3/6.txt
new file mode 100644
index 0000000..e2ed243
--- /dev/null
+++ b/serviceLog/2025/3/6.txt
@@ -0,0 +1,10 @@
+[2025-3-6>>>14:31:32]>>>SMSService--sendSMS>>>>Error: MissingTemplateCode: code: 400, TemplateCode is mandatory for this action. request id: AA53B73A-70C3-529E-8441-3F4909704930
+[2025-3-6>>>17:28:14]>>>SMSService--sendSMS>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dysmsapi.aliyuncs.com/?PhoneNumbers=18435854948&SignName=%E5%8F%98%E6%9B%B4%E9%AA%8C%E8%AF%81&TemplateCode=SMS_480180061&TemplateParam=%7B%22code%22%3A%22812905%22%7D failed.
+[2025-3-6>>>17:30:4]>>>SMSService--sendSMS>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dysmsapi.aliyuncs.com/?PhoneNumbers=18435854948&SignName=%E5%8F%98%E6%9B%B4%E9%AA%8C%E8%AF%81&TemplateCode=SMS_480180061&TemplateParam=%7B%22code%22%3A%22610961%22%7D failed.
+[2025-3-6>>>17:37:6]>>>SMSService--sendSMS>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dysmsapi.aliyuncs.com/?PhoneNumbers=18435854948&SignName=%E5%8F%98%E6%9B%B4%E9%AA%8C%E8%AF%81&TemplateCode=SMS_480180061&TemplateParam=%7B%22code%22%3A%22836702%22%7D failed.
+[2025-3-6>>>17:37:11]>>>SMSService--sendSMS>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dysmsapi.aliyuncs.com/?PhoneNumbers=18435854948&SignName=%E5%8F%98%E6%9B%B4%E9%AA%8C%E8%AF%81&TemplateCode=SMS_480180061&TemplateParam=%7B%22code%22%3A%22606799%22%7D failed.
+[2025-3-6>>>17:44:43]>>>SMSService--sendSMS>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dysmsapi.aliyuncs.com/?PhoneNumbers=18435854948&SignName=&TemplateCode=SMS_480180061&TemplateParam=%7B%22code%22%3A%22201035%22%7D failed.
+[2025-3-6>>>17:44:48]>>>SMSService--sendSMS>>>>Error: MissingSignName: code: 400, SignName is mandatory for this action. request id: 895962B4-1B24-5466-9041-9B0AFA1AA015
+[2025-3-6>>>17:44:56]>>>SMSService--sendSMS>>>>Error: MissingSignName: code: 400, SignName is mandatory for this action. request id: EA8E4933-37A3-579D-BDF4-5895805FF8B4
+[2025-3-6>>>17:45:32]>>>SMSService--sendSMS>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dysmsapi.aliyuncs.com/?PhoneNumbers=18435854948&SignName=%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81&TemplateCode=SMS_480180061&TemplateParam=%7B%22code%22%3A%22851283%22%7D failed.
+[2025-3-6>>>17:45:39]>>>SMSService--sendSMS>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dysmsapi.aliyuncs.com/?PhoneNumbers=18435854948&SignName=%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81&TemplateCode=SMS_480180061&TemplateParam=%7B%22code%22%3A%22943074%22%7D failed.
diff --git a/serviceLog/2025/3/7.txt b/serviceLog/2025/3/7.txt
new file mode 100644
index 0000000..b54524e
--- /dev/null
+++ b/serviceLog/2025/3/7.txt
@@ -0,0 +1,26 @@
+[2025-3-7>>>11:29:55]>>>Id2MVService--checkIdCard>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://cloudauth.cn-qingdao.aliyuncs.com/ failed.
+[2025-3-7>>>11:30:26]>>>Id2MVService--checkIdCard>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://cloudauth.cn-beijing.aliyuncs.com/ failed.
+[2025-3-7>>>11:30:52]>>>Id2MVService--checkIdCard>>>>TypeError: Cloudauth20190307 is not a constructor
+[2025-3-7>>>11:31:12]>>>Id2MVService--checkIdCard>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://cloudauth.cn-beijing.aliyuncs.com/ failed.
+[2025-3-7>>>11:36:28]>>>Id2MVService--checkIdCard>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://cloudauth.cn-beijing.aliyuncs.com/ failed.
+[2025-3-7>>>11:39:51]>>>Id2MVService--checkIdCard>>>>ClientError: Forbidden.NoPermission: code: 403, You are not authorized to do this operation. Action: yundun-cloudauth:Id2MetaVerify;Resource: acs:yundun-cloudauth::1909211897072021:* request id: DD6CBC62-2EB1-567B-A433-B8C65E40FEC1
+[2025-3-7>>>11:44:14]>>>Id2MVService--checkIdCard>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://cloudauth.cn-beijing.aliyuncs.com/ failed.
+[2025-3-7>>>11:50:30]>>>Id2MVService--checkIdCard>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://cloudauth.cn-beijing.aliyuncs.com/ failed.
+[2025-3-7>>>11:50:36]>>>Id2MVService--checkIdCard>>>>ClientError: Forbidden.NoPermission: code: 403, You are not authorized to do this operation. Action: yundun-cloudauth:Id2MetaVerify;Resource: acs:yundun-cloudauth::1909211897072021:* request id: 34EE2D5C-EB9F-5E56-8725-1EF57FBF6DBF
+[2025-3-7>>>11:51:44]>>>Id2MVService--checkIdCard>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://cloudauth.cn-beijing.aliyuncs.com/ failed.
+[2025-3-7>>>12:32:57]>>>CNTEVService--CNTEV>>>>TypeError: client.CertNoTwoElementVerificationWithOptions is not a function
+[2025-3-7>>>12:33:31]>>>CNTEVService--CNTEV>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dytnsapi.aliyuncs.com/?AuthCode=3V2qgr9a2W&CertName=%E5%B1%88%E5%BD%AA%E5%BD%AA&CertNo=142327200010180611 failed.
+[2025-3-7>>>12:33:48]>>>CNTEVService--CNTEV>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dytnsapi.aliyuncs.com/?AuthCode=3V2qgr9a2W&CertName=%E5%B1%88%E5%BD%AA%E5%BD%AA&CertNo=142327200010180611 failed.
+[2025-3-7>>>12:35:23]>>>CNTEVService--CNTEV>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dytnsapi.aliyuncs.com/?AuthCode=3V2qgr9a2W&CertName=%E5%B1%88%E5%BD%AA%E5%BD%AA&CertNo=142327200010180611 failed.
+[2025-3-7>>>14:5:42]>>>CNTEVService--CNTEV>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dytnsapi.aliyuncs.com/?AuthCode=3V2qgr9a2W&CertName=%E5%90%B4%E9%91%AB%E5%AE%B8&CertNo=110108201402105714 failed.
+[2025-3-7>>>14:9:15]>>>CNTEVService--CNTEV>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dytnsapi.aliyuncs.com/?AuthCode=3V2qgr9a2W&CertName=%E5%B1%88%E5%BD%AA%E5%BD%AA&CertNo=142327200208190620 failed.
+[2025-3-7>>>14:10:12]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, 身份证号参数非法 request id: 2D63C32B-3A1A-5CBB-9A97-5176D973AC0A
+[2025-3-7>>>14:10:30]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, 身份证号参数非法 request id: 1EAE97A5-C5FF-59AF-8EC0-BFF4BF2EC90E
+[2025-3-7>>>14:12:8]>>>CNTEVService--CNTEV>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dytnsapi.aliyuncs.com/?AuthCode=3V2qgr9a2W&CertName=%E5%B1%88%E6%BD%87%E6%BD%87&CertNo=142327200010180601 failed.
+[2025-3-7>>>14:12:47]>>>CNTEVService--CNTEV>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dytnsapi.aliyuncs.com/?AuthCode=3V2qgr9a2W&CertName=%E5%B1%88%E6%BD%87%E6%BD%87&CertNo=142327200010180621 failed.
+[2025-3-7>>>14:12:54]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, 身份证号参数非法 request id: 6873979A-CECC-5898-81C2-81C94E5777E8
+[2025-3-7>>>14:13:21]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, 身份证号参数非法 request id: 208B5677-7570-5CA3-997E-797E4F683AC9
+[2025-3-7>>>14:17:16]>>>CNTEVService--CNTEV>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dytnsapi.aliyuncs.com/?AuthCode=3V2qgr9a2W&CertName=%E5%B1%88%E5%BD%AA%E5%BD%AA&CertNo=142327200010180611 failed.
+[2025-3-7>>>14:17:31]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, 参数格式错误 request id: 8EFF0487-25BE-53C1-8E9D-A837465C4390
+[2025-3-7>>>14:26:21]>>>CNTEVService--CNTEV>>>>RequestTimeoutError: ConnectTimeout: Connect HTTPS://dytnsapi.aliyuncs.com/?AuthCode=3V2qgr9a2W&CertName=tom%20trump&CertNo=142327200010180611 failed.
+[2025-3-7>>>15:38:6]>>>SMSService--checkCode>>>>TypeError: ctx.app.redis.get(...).get(...).ttl is not a function
diff --git a/serviceLog/2025/4/1.txt b/serviceLog/2025/4/1.txt
new file mode 100644
index 0000000..f1a8d3c
--- /dev/null
+++ b/serviceLog/2025/4/1.txt
@@ -0,0 +1 @@
+[2025-4-1>>>10:51:12]>>>CNTEVService--CNTEV>>>>ClientError: MissingCertName: code: 400, CertName is mandatory for this action. request id: 7FA2D692-0EE3-5704-BA3E-B6DD5E9F0874
diff --git a/serviceLog/2025/4/24.txt b/serviceLog/2025/4/24.txt
new file mode 100644
index 0000000..e82dfed
--- /dev/null
+++ b/serviceLog/2025/4/24.txt
@@ -0,0 +1 @@
+[2025-4-24>>>17:40:56]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: BBD4C1D2-A233-56D4-A10A-665CA809C0F5
diff --git a/serviceLog/2025/4/25.txt b/serviceLog/2025/4/25.txt
new file mode 100644
index 0000000..891771b
--- /dev/null
+++ b/serviceLog/2025/4/25.txt
@@ -0,0 +1,2 @@
+[2025-4-25>>>15:33:43]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 96792D2C-72DB-55CF-9635-FF8C940F6E7E
+[2025-4-25>>>16:33:46]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: D0ACDEE7-4E59-50C7-B1CE-23B6F44C3096
diff --git a/serviceLog/2025/5/12.txt b/serviceLog/2025/5/12.txt
new file mode 100644
index 0000000..2a89067
--- /dev/null
+++ b/serviceLog/2025/5/12.txt
@@ -0,0 +1 @@
+[2025-5-12>>>16:44:47]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 9B659065-3396-5632-B298-2129E072150A
diff --git a/serviceLog/2025/5/14.txt b/serviceLog/2025/5/14.txt
new file mode 100644
index 0000000..69ad811
--- /dev/null
+++ b/serviceLog/2025/5/14.txt
@@ -0,0 +1,7 @@
+[2025-5-14>>>11:50:49]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 04002D2D-BFC9-51E8-801F-57A66D3EE582
+[2025-5-14>>>12:50:49]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 00ECDFEF-E20D-534C-BAE1-30F1624A6CC6
+[2025-5-14>>>13:50:49]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 9B364D44-37A0-57F4-A495-D501F2688539
+[2025-5-14>>>14:50:46]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 79207ACE-B9AA-54D5-8F10-F9A2189EA554
+[2025-5-14>>>15:50:49]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 24AA17CA-5F0C-5ED6-9DD4-9062D22659D4
+[2025-5-14>>>16:50:49]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: DFBDA065-A9D4-5518-89EC-D8D61A65B815
+[2025-5-14>>>17:50:49]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 517383DC-2C2C-5186-9F03-9284B5164146
diff --git a/serviceLog/2025/5/15.txt b/serviceLog/2025/5/15.txt
new file mode 100644
index 0000000..1cedd7d
--- /dev/null
+++ b/serviceLog/2025/5/15.txt
@@ -0,0 +1,3 @@
+[2025-5-15>>>15:51:21]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 1686728D-AB91-5606-9F59-14E9007C51E7
+[2025-5-15>>>16:51:21]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 4E7ED9DF-B4A6-5BCD-AA18-BF7682F88F4F
+[2025-5-15>>>17:51:17]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 33F27433-BC53-5DA2-A9FA-2C3F76A8D977
diff --git a/serviceLog/2025/5/16.txt b/serviceLog/2025/5/16.txt
new file mode 100644
index 0000000..5127c9b
--- /dev/null
+++ b/serviceLog/2025/5/16.txt
@@ -0,0 +1,7 @@
+[2025-5-16>>>10:46:58]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 199903B8-7573-5C89-8358-2EB326CC2DB0
+[2025-5-16>>>11:46:55]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 2325B78E-9FAB-5A97-BB03-ACDD06638797
+[2025-5-16>>>12:46:58]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 88424FEC-81FA-58C1-AF19-A87A024850ED
+[2025-5-16>>>13:46:58]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 6CC65752-E502-5845-BB9E-45F6D3E3E730
+[2025-5-16>>>14:46:55]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: CFE6E244-CA8F-54B8-8077-3C8C6C9B7B1D
+[2025-5-16>>>15:46:47]>>>CNTEVService--CNTEV>>>>ClientError: MissingCertName: code: 400, CertName is mandatory for this action. request id: 83711542-8A06-5D12-B602-B8D7A5B14779
+[2025-5-16>>>16:46:47]>>>CNTEVService--CNTEV>>>>ClientError: MissingCertName: code: 400, CertName is mandatory for this action. request id: C1F95B18-2F26-5078-ADB3-2942101A96FD
diff --git a/serviceLog/2025/5/28.txt b/serviceLog/2025/5/28.txt
new file mode 100644
index 0000000..fd89c07
--- /dev/null
+++ b/serviceLog/2025/5/28.txt
@@ -0,0 +1,5 @@
+[2025-5-28>>>12:0:28]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: CC9826F7-BB5F-564B-8BB1-85EF0A05D24B
+[2025-5-28>>>13:0:28]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 19080BEE-FF0E-5945-9A5F-502C4AA93493
+[2025-5-28>>>14:0:25]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: DF8C028D-2238-59D0-887A-A170B85263CE
+[2025-5-28>>>15:0:28]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: E2BFDD55-115F-5AE5-BBC0-FD595F70716E
+[2025-5-28>>>16:0:17]>>>CNTEVService--CNTEV>>>>ClientError: MissingCertName: code: 400, CertName is mandatory for this action. request id: 1E6CD829-744B-5EAB-A18E-19E177A053C0
diff --git a/serviceLog/2025/5/6.txt b/serviceLog/2025/5/6.txt
new file mode 100644
index 0000000..c20aa48
--- /dev/null
+++ b/serviceLog/2025/5/6.txt
@@ -0,0 +1,2 @@
+[2025-5-6>>>16:0:33]>>>CNTEVService--CNTEV>>>>ClientError: MissingCertName: code: 400, CertName is mandatory for this action. request id: 53D60F69-FAB2-540B-AAE2-2090EB7DB93F
+[2025-5-6>>>17:0:41]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 76AA2B8A-2562-5396-8330-3B928BCE65E6
diff --git a/serviceLog/2025/5/7.txt b/serviceLog/2025/5/7.txt
new file mode 100644
index 0000000..6d9d70c
--- /dev/null
+++ b/serviceLog/2025/5/7.txt
@@ -0,0 +1 @@
+[2025-5-7>>>11:33:59]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 9D30F673-FBA6-56FB-9B94-0D8E9CB143A2
diff --git a/serviceLog/2025/6/9.txt b/serviceLog/2025/6/9.txt
new file mode 100644
index 0000000..54a4724
--- /dev/null
+++ b/serviceLog/2025/6/9.txt
@@ -0,0 +1,7 @@
+[2025-6-9>>>11:5:59]>>>CNTEVService--CNTEV>>>>ClientError: MissingCertName: code: 400, CertName is mandatory for this action. request id: F70FCBF7-A3CC-56FF-ADFB-B3D2D1061580
+[2025-6-9>>>12:6:11]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: F91BC71F-0FD7-55B2-A655-FE7A4513767A
+[2025-6-9>>>13:6:11]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 4F1F64CA-6E4C-5B4E-87C7-DEE0E59E7D87
+[2025-6-9>>>14:6:11]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: A2CEC33B-1B56-5F80-B2AA-3EEE6B9D8F95
+[2025-6-9>>>15:5:59]>>>CNTEVService--CNTEV>>>>ClientError: MissingCertName: code: 400, CertName is mandatory for this action. request id: 3FA68B90-77F8-5E37-8C63-9554FB6BDE4C
+[2025-6-9>>>16:6:11]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: A42A2D51-0516-5A29-A809-85C3C44AC10B
+[2025-6-9>>>17:6:11]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 9962251E-0F26-56ED-9D62-0064C1AA57E3
diff --git a/serviceLog/2025/7/25.txt b/serviceLog/2025/7/25.txt
new file mode 100644
index 0000000..1f86076
--- /dev/null
+++ b/serviceLog/2025/7/25.txt
@@ -0,0 +1,5 @@
+[2025-7-25>>>12:49:19]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 33863F00-3AE1-5687-9131-A19688974885
+[2025-7-25>>>13:49:18]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: FFA6D863-ED77-50DE-A0FD-9D92CA539AFE
+[2025-7-25>>>14:49:19]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: 412812BB-CDB7-5CFE-8B2F-35918C9D0AA7
+[2025-7-25>>>16:50:40]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: EC8B7952-8D1A-5FD9-BEC6-7DE462DAC148
+[2025-7-25>>>17:50:40]>>>CNTEVService--CNTEV>>>>ClientError: InvalidParameter: code: 400, Invalid parameter. request id: F199C535-7AE9-5C38-B5DB-6611D28D41CA
diff --git a/serviceLog/2026/2/28.txt b/serviceLog/2026/2/28.txt
new file mode 100644
index 0000000..db4b9eb
--- /dev/null
+++ b/serviceLog/2026/2/28.txt
@@ -0,0 +1 @@
+[2026-2-28>>>17:3:24]>>>CNTEVService--CNTEV>>>>ClientError: MissingCertName: code: 400, CertName is mandatory for this action. request id: AA34736A-0A92-5E4F-B198-A52C87A66130
diff --git a/test/app/controller/home.test.js b/test/app/controller/home.test.js
new file mode 100644
index 0000000..ea43dbb
--- /dev/null
+++ b/test/app/controller/home.test.js
@@ -0,0 +1,23 @@
+const { strict: assert } = require('node:assert');
+const path = require('node:path');
+const { statSync } = require('node:fs');
+const { app } = require('egg-mock/bootstrap');
+
+describe('test/app/controller/home.test.js', () => {
+ it('should assert', async () => {
+ const pkg = require('../../../package.json');
+ assert(app.config.keys.startsWith(pkg.name));
+ });
+
+ it('should typings exists', async () => {
+ const typings = path.join(__dirname, '../../../typings');
+ assert(statSync(typings));
+ });
+
+ it('should GET /', async () => {
+ return app.httpRequest()
+ .get('/')
+ .expect('hi, egg')
+ .expect(200);
+ });
+});