Skip to content
This repository was archived by the owner on Apr 19, 2023. It is now read-only.

Commit 9c4f9af

Browse files
✨ Better validate register (fixed #115)
1 parent 9405d53 commit 9c4f9af

File tree

4 files changed

+67
-50
lines changed

4 files changed

+67
-50
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "staart-manager",
3-
"version": "1.0.52",
3+
"version": "1.0.53",
44
"main": "index.js",
55
"repository": "git@github.com:AnandChowdhary/staart.git",
66
"author": "Anand Chowdhary <mail@anandchowdhary.com>",

src/controllers/auth.ts

Lines changed: 51 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,14 @@ import {
2929
ClassWrapper,
3030
ClassMiddleware
3131
} from "@overnightjs/core";
32-
import { authHandler, bruteForceHandler } from "../helpers/middleware";
32+
import {
33+
authHandler,
34+
bruteForceHandler,
35+
validator
36+
} from "../helpers/middleware";
3337
import { CREATED } from "http-status-codes";
3438
import asyncHandler from "express-async-handler";
35-
import {
36-
joiValidate,
37-
safeRedirect,
38-
getCodeFromRequest
39-
} from "../helpers/utils";
39+
import { safeRedirect, joiValidate } from "../helpers/utils";
4040
import Joi from "@hapi/joi";
4141
import { KeyValue } from "../interfaces/general";
4242
import { FRONTEND_URL, BASE_URL } from "../config";
@@ -46,27 +46,16 @@ import { FRONTEND_URL, BASE_URL } from "../config";
4646
@ClassWrapper(asyncHandler)
4747
export class AuthController {
4848
@Post("register")
49-
async register(req: Request, res: Response) {
50-
const email = req.body.email;
51-
joiValidate(
49+
@Middleware(
50+
validator(
5251
{
5352
email: Joi.string()
5453
.email()
55-
.required()
56-
},
57-
{ email }
58-
);
59-
const user = req.body;
60-
delete user.organizationId;
61-
delete user.email;
62-
if (user.role == UserRole.ADMIN) delete user.role;
63-
delete user.membershipRole;
64-
joiValidate(
65-
{
54+
.required(),
6655
name: Joi.string()
6756
.min(3)
57+
.regex(/^[a-zA-Z ]*$/)
6858
.required(),
69-
nickname: Joi.string().min(3),
7059
countryCode: Joi.string().length(2),
7160
password: Joi.string().min(6),
7261
gender: Joi.string().length(1),
@@ -75,8 +64,16 @@ export class AuthController {
7564
.max(5),
7665
timezone: Joi.string()
7766
},
78-
user
79-
);
67+
"body"
68+
)
69+
)
70+
async register(req: Request, res: Response) {
71+
const email = req.body.email;
72+
const user = req.body;
73+
delete user.organizationId;
74+
delete user.email;
75+
if (user.role == UserRole.ADMIN) delete user.role;
76+
delete user.membershipRole;
8077
await register(
8178
user,
8279
res.locals,
@@ -90,10 +87,8 @@ export class AuthController {
9087
}
9188

9289
@Post("login")
93-
async login(req: Request, res: Response) {
94-
const email = req.body.email;
95-
const password = req.body.password;
96-
joiValidate(
90+
@Middleware(
91+
validator(
9792
{
9893
email: Joi.string()
9994
.email()
@@ -102,39 +97,45 @@ export class AuthController {
10297
.min(6)
10398
.required()
10499
},
105-
{ email, password }
106-
);
107-
res.json(await login(email, password, res.locals));
100+
"body"
101+
)
102+
)
103+
async login(req: Request, res: Response) {
104+
res.json(await login(req.body.email, req.body.password, res.locals));
108105
}
109106

110107
@Post("2fa")
111-
async twoFactor(req: Request, res: Response) {
112-
const code = req.body.code;
113-
const token = req.body.token;
114-
joiValidate(
108+
@Middleware(
109+
validator(
115110
{
116111
token: Joi.string().required(),
117112
code: Joi.number()
118113
.min(5)
119114
.required()
120115
},
121-
{ code, token }
122-
);
116+
"body"
117+
)
118+
)
119+
async twoFactor(req: Request, res: Response) {
120+
const code = req.body.code;
121+
const token = req.body.token;
123122
res.json(await login2FA(code, token, res.locals));
124123
}
125124

126125
@Post("verify-token")
127-
async postVerifyToken(req: Request, res: Response) {
128-
const token =
129-
req.body.token || (req.get("Authorization") || "").replace("Bearer ", "");
130-
const subject = req.body.subject;
131-
joiValidate(
126+
@Middleware(
127+
validator(
132128
{
133129
token: Joi.string().required(),
134130
subject: Joi.string().required()
135131
},
136-
{ token, subject }
137-
);
132+
"body"
133+
)
134+
)
135+
async postVerifyToken(req: Request, res: Response) {
136+
const token =
137+
req.body.token || (req.get("Authorization") || "").replace("Bearer ", "");
138+
const subject = req.body.subject;
138139
try {
139140
const data = await verifyToken(token, subject);
140141
res.json({ verified: true, data });
@@ -153,16 +154,18 @@ export class AuthController {
153154
}
154155

155156
@Post("reset-password/request")
156-
async postResetPasswordRequest(req: Request, res: Response) {
157-
const email = req.body.email;
158-
joiValidate(
157+
@Middleware(
158+
validator(
159159
{
160160
email: Joi.string()
161161
.email()
162162
.required()
163163
},
164-
{ email }
165-
);
164+
"body"
165+
)
166+
)
167+
async postResetPasswordRequest(req: Request, res: Response) {
168+
const email = req.body.email;
166169
await sendPasswordReset(email, res.locals);
167170
res.json({ queued: true });
168171
}

src/controllers/organization.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,20 @@ export class OrganizationController {
8282
}
8383

8484
@Patch(":id")
85+
@Middleware(
86+
validator(
87+
{
88+
name: Joi.string(),
89+
username: Joi.string(),
90+
forceTwoFactor: Joi.bool(),
91+
ipRestrictions: Joi.string(),
92+
invitationDomain: Joi.string().regex(
93+
/([a-z])([a-z0-9]+\.)*[a-z0-9]+\.[a-z.]+/
94+
)
95+
},
96+
"body"
97+
)
98+
)
8599
async patch(req: Request, res: Response) {
86100
const id = await organizationUsernameToId(req.params.id);
87101
joiValidate({ id: Joi.number().required() }, { id });

src/internal/staart-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.0.52
1+
1.0.53

0 commit comments

Comments
 (0)