From a0b74795f30af1ca18aa5a2af2b00a46c5a8778f Mon Sep 17 00:00:00 2001 From: David Ludwig Date: Tue, 13 Apr 2021 15:44:03 -0500 Subject: [PATCH] Organized web service. Added detailed frontend/backend form validation. --- .env.example | 2 + nodemon.json | 4 +- package.json | 6 +- src/app/App.vue | 4 +- src/app/components/TextBox.vue | 90 ++++++++++-- src/app/util.ts | 5 + src/app/validation.ts | 0 src/app/views/Login.vue | 2 +- src/app/views/Register.vue | 128 ++++++++++++++---- src/common/validation.ts | 53 ++++++++ src/server/Application.ts | 10 +- src/server/database/entities/RegisterToken.ts | 7 + src/server/database/entities/User.ts | 9 +- src/server/services/Database.ts | 8 ++ src/server/services/DiscordBot.ts | 25 +++- src/server/services/Service.ts | 7 +- src/server/services/TorrentClientIpc.ts | 10 +- .../{WebServer.ts => WebServer/index.ts} | 47 +++++-- .../WebServer/requests/RegisterRequest.ts | 37 +++++ .../services/WebServer/requests/Request.ts | 56 ++++++++ .../services/WebServer/requests/index.ts | 24 ++++ src/server/services/WebServer/validators.ts | 24 ++++ src/server/util.ts | 11 ++ tailwind.config.js | 2 +- tsconfig.json | 10 +- tsconfig.server.json | 10 +- vite.config.ts | 1 - yarn.lock | 60 +++++++- 28 files changed, 558 insertions(+), 94 deletions(-) create mode 100644 src/app/util.ts create mode 100644 src/app/validation.ts create mode 100644 src/common/validation.ts rename src/server/services/{WebServer.ts => WebServer/index.ts} (66%) create mode 100644 src/server/services/WebServer/requests/RegisterRequest.ts create mode 100644 src/server/services/WebServer/requests/Request.ts create mode 100644 src/server/services/WebServer/requests/index.ts create mode 100644 src/server/services/WebServer/validators.ts create mode 100644 src/server/util.ts diff --git a/.env.example b/.env.example index 66b5969..10358c1 100644 --- a/.env.example +++ b/.env.example @@ -7,3 +7,5 @@ DB_DATABASE = autoplex_request SERVER_PORT = 3200 TORRENT_CLIENT_IPC_SOCKET = /tmp/torrent_client.sock + +DISCORD_BOT_TOKEN= diff --git a/nodemon.json b/nodemon.json index 04071a0..0cf4da5 100644 --- a/nodemon.json +++ b/nodemon.json @@ -1,8 +1,8 @@ { - "watch": ["src/server"], + "watch": ["src/common", "src/server"], "ext": "ts,json", "ignore": ["src/**/*.spec.ts"], - "exec": "node --inspect=0.0.0.0:9229 -r ts-node/register src/server/index.ts", + "exec": "node --inspect=0.0.0.0:9229 -r tsconfig-paths/register -r ts-node/register src/server/index.ts", "events": { "start": "clear" } diff --git a/package.json b/package.json index e51b91b..852ff59 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "clean": "rimraf ./build", "dev": "vite", "build": "yarn run build:backend && yarn run build:frontend", - "build:backend": "tsc -p ./tsconfig.server.json", + "build:backend": "ttsc -P ./tsconfig.server.json", "build:frontend": "vue-tsc --noEmit -p ./tsconfig.vite.json && vite build", "start": "NODE_ENV=production node .", "start:dev": "nodemon" @@ -27,6 +27,7 @@ "node-ipc": "^9.1.4", "tvdb-v4": "^1.0.0", "typeorm": "^0.2.32", + "validate.js": "^0.13.1", "vue": "^3.0.5", "vue-router": "^4.0.6", "vuedraggable": "^4.0.1", @@ -37,12 +38,15 @@ "@types/node-ipc": "^9.1.3", "@vitejs/plugin-vue": "^1.2.1", "@vue/compiler-sfc": "^3.0.5", + "@zerollup/ts-transform-paths": "^1.7.18", "autoprefixer": "^10.2.5", "nodemon": "^2.0.7", "postcss": "^8.2.9", "rimraf": "^3.0.2", "tailwindcss": "^2.1.1", "ts-node": "^9.1.1", + "tsconfig-paths": "^3.9.0", + "ttypescript": "^1.5.12", "typescript": "^4.1.3", "vite": "^2.1.5", "vue-tsc": "^0.0.15" diff --git a/src/app/App.vue b/src/app/App.vue index 61979da..fc9563e 100644 --- a/src/app/App.vue +++ b/src/app/App.vue @@ -5,6 +5,6 @@ diff --git a/src/app/components/TextBox.vue b/src/app/components/TextBox.vue index b6e5558..2ae75b2 100644 --- a/src/app/components/TextBox.vue +++ b/src/app/components/TextBox.vue @@ -4,25 +4,83 @@ {{ label }}
- - + :class="{ 'pr-10': (isValid || error), 'border-red-600 text-red-600': error }" + @blur="onBlur" @change="onChange" @input="setErrorMessage('')"> + - +
-
{{ errorMessage }}
+
{{ error }}
diff --git a/src/app/util.ts b/src/app/util.ts new file mode 100644 index 0000000..6b8b50e --- /dev/null +++ b/src/app/util.ts @@ -0,0 +1,5 @@ +import { single as validate } from "validate.js"; + +export function validateValue(value: string, constraints: any) { + return (validate(value || null, constraints) ?? [""])[0]; +} diff --git a/src/app/validation.ts b/src/app/validation.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/app/views/Login.vue b/src/app/views/Login.vue index 825f8a9..b5e9662 100644 --- a/src/app/views/Login.vue +++ b/src/app/views/Login.vue @@ -1,5 +1,5 @@