365 lines
9.2 KiB
TypeScript
365 lines
9.2 KiB
TypeScript
|
|
import env from "../enviroment/env";
|
|
import UserService from "../services/UserService";
|
|
import { Request, Response } from "express";
|
|
import { UserInterface } from "../models/user";
|
|
import { createLoginCookie, createLogoutCookie } from "../cookies/createCookies";
|
|
import NotFoundError from "../utils/NotFoundError";
|
|
import InternalServerError from "../utils/InternalServerError";
|
|
|
|
const UserProvider = new UserService();
|
|
|
|
type userAccessType = {
|
|
_id: string,
|
|
emailVerified: boolean,
|
|
email: string,
|
|
admin: boolean,
|
|
botChecked: boolean,
|
|
username: string,
|
|
}
|
|
|
|
interface RequestTypeRefresh extends Request {
|
|
user?: UserInterface,
|
|
encryptedToken?: string
|
|
}
|
|
|
|
interface RequestType extends Request {
|
|
user?: userAccessType,
|
|
encryptedToken?: string
|
|
}
|
|
|
|
class UserController {
|
|
|
|
constructor() {
|
|
|
|
}
|
|
|
|
getUser = async(req: RequestType, res: Response) => {
|
|
|
|
try {
|
|
|
|
const user = req.user!;
|
|
|
|
res.send(user)
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nGet User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
login = async(req: RequestType, res: Response) => {
|
|
|
|
try {
|
|
|
|
const body = req.body;
|
|
const ipAddress = req.clientIp;
|
|
|
|
const {user, accessToken, refreshToken} = await UserProvider.login(body, ipAddress);
|
|
|
|
await user.save();
|
|
|
|
createLoginCookie(res, accessToken, refreshToken);
|
|
|
|
user.tokens = [];
|
|
user.tempTokens = []
|
|
user.privateKey = undefined;
|
|
user.publicKey = undefined;
|
|
|
|
res.status(200).send({user});
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nLogin User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
getToken = async(req: RequestTypeRefresh, res: Response) => {
|
|
|
|
try {
|
|
|
|
console.log("\nCreating New Refresh Token...")
|
|
|
|
const user = req.user;
|
|
|
|
if (!user) throw new NotFoundError("User Not Found");
|
|
|
|
console.log("tokens", user.tokens.length);
|
|
|
|
const {accessToken, refreshToken} = await user.generateAuthToken(req.clientIp);
|
|
|
|
if (!accessToken || !refreshToken) throw new InternalServerError("User/Access/Refresh Token Missing");
|
|
|
|
createLoginCookie(res, accessToken, refreshToken);
|
|
|
|
res.status(201).send();
|
|
|
|
console.log("New Refresh Token And Access Token Sent");
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nGet Refresh Token User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
logout = async(req: RequestType, res: Response) => {
|
|
|
|
if (!req.user) {
|
|
|
|
return;
|
|
}
|
|
|
|
try {
|
|
|
|
const userID = req.user._id;
|
|
const refreshToken = req.cookies["refresh-token"];
|
|
|
|
await UserProvider.logout(userID, refreshToken);
|
|
|
|
createLogoutCookie(res);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nLogout User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
createLogoutCookie(res);
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
logoutAll = async(req: RequestType, res: Response) => {
|
|
|
|
if (!req.user) return;
|
|
|
|
try {
|
|
|
|
const userID = req.user._id;
|
|
|
|
await UserProvider.logoutAll(userID);
|
|
|
|
createLogoutCookie(res);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nLogout All User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
createUser = async(req: RequestType, res: Response) => {
|
|
|
|
if (env.createAcctBlocked) {
|
|
|
|
return await res.status(401).send()
|
|
}
|
|
|
|
try {
|
|
|
|
const ipAddress = req.clientIp;
|
|
|
|
const {user, accessToken, refreshToken} = await UserProvider.create(req.body, ipAddress);
|
|
|
|
createLoginCookie(res, accessToken, refreshToken);
|
|
|
|
user.tokens = [];
|
|
user.tempTokens = []
|
|
user.password = '';
|
|
user.privateKey = undefined;
|
|
user.publicKey = undefined;
|
|
|
|
res.status(201).send({user})
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nCreate User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
changePassword = async(req: RequestType, res: Response) => {
|
|
|
|
if (!req.user) {
|
|
|
|
return;
|
|
}
|
|
|
|
try {
|
|
|
|
const userID = req.user._id;
|
|
const oldPassword = req.body.oldPassword;
|
|
const newPassword = req.body.newPassword;
|
|
const oldRefreshToken = req.cookies["refresh-token"];
|
|
const ipAddress = req.clientIp;
|
|
|
|
const {accessToken, refreshToken} = await UserProvider.changePassword(userID, oldPassword, newPassword, oldRefreshToken, ipAddress);
|
|
|
|
createLoginCookie(res, accessToken, refreshToken);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nChange Password User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
refreshStorageSize = async(req: RequestType, res: Response) => {
|
|
|
|
if (!req.user) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
|
|
const userID = req.user._id;
|
|
|
|
await UserProvider.refreshStorageSize(userID);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nRefresh Storage Size User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
getUserDetailed = async(req: RequestType, res: Response) => {
|
|
|
|
if (!req.user) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
|
|
const userID = req.user._id;
|
|
|
|
const userDetailed = await UserProvider.getUserDetailed(userID);
|
|
|
|
res.send(userDetailed);
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nGet User Detailed User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
verifyEmail = async(req: RequestType, res: Response) => {
|
|
|
|
try {
|
|
|
|
const verifyToken = req.body.emailToken;
|
|
|
|
await UserProvider.verifyEmail(verifyToken);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nVerify Email User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
resendVerifyEmail = async(req: RequestType, res: Response) => {
|
|
|
|
if (!req.user) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
|
|
const userID = req.user._id;
|
|
|
|
await UserProvider.resendVerifyEmail(userID);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nResend Email User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
sendPasswordReset = async(req: RequestType, res: Response) => {
|
|
|
|
try {
|
|
|
|
const email = req.body.email;
|
|
|
|
await UserProvider.sendPasswordReset(email);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nSend Password Reset Email User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
resetPassword = async(req: RequestType, res: Response) => {
|
|
|
|
try {
|
|
|
|
const verifyToken = req.body.passwordToken;
|
|
const newPassword = req.body.password;
|
|
|
|
await UserProvider.resetPassword(newPassword, verifyToken);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nReset Password User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
|
|
addName = async(req: RequestType, res: Response) => {
|
|
|
|
if (!req.user) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
|
|
const userID = req.user._id;
|
|
const name = req.body.name;
|
|
|
|
await UserProvider.addName(userID, name);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
console.log("\nAdd Name User Route Error:", e.message);
|
|
const code = !e.code ? 500 : e.code >= 400 && e.code <= 599 ? e.code : 500;
|
|
res.status(code).send();
|
|
}
|
|
}
|
|
}
|
|
|
|
export default UserController; |