158 lines
3.2 KiB
TypeScript
158 lines
3.2 KiB
TypeScript
|
|
import env from "../enviroment/env";
|
|
import UserService from "../services/UserService";
|
|
import { Request, Response } from "express";
|
|
import { UserInterface } from "../models/user";
|
|
const UserProvider = new UserService();
|
|
|
|
interface RequestType extends Request {
|
|
user?: UserInterface,
|
|
auth?: any,
|
|
busboy?: any,
|
|
encryptedToken?: any
|
|
}
|
|
|
|
class UserController {
|
|
|
|
constructor() {
|
|
|
|
}
|
|
|
|
getUser = async(req: RequestType, res: Response) => {
|
|
|
|
try {
|
|
|
|
const user = req.user!;
|
|
user.tokens = [];
|
|
user.tempTokens = [];
|
|
user.password = '';
|
|
user.privateKey = undefined;
|
|
user.publicKey = undefined;
|
|
|
|
res.send(user)
|
|
|
|
} catch (e) {
|
|
|
|
res.status(500).send(e);
|
|
}
|
|
}
|
|
|
|
login = async(req: RequestType, res: Response) => {
|
|
|
|
try {
|
|
|
|
const body = req.body;
|
|
|
|
const {user, token} = await UserProvider.login(body);
|
|
|
|
user.tokens = [];
|
|
user.tempTokens = [];
|
|
user.password = '';
|
|
user.privateKey = undefined;
|
|
user.publicKey = undefined;
|
|
|
|
res.status(200).send({user, token});
|
|
|
|
} catch (e) {
|
|
|
|
const code = e.code || 500;
|
|
|
|
console.log(e);
|
|
res.status(code).send(e);
|
|
}
|
|
}
|
|
|
|
logout = async(req: RequestType, res: Response) => {
|
|
|
|
if (!req.user) {
|
|
|
|
return;
|
|
}
|
|
|
|
try {
|
|
|
|
const user = req.user;
|
|
const token = req.encryptedToken;
|
|
|
|
await UserProvider.logout(user, token);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
res.status(500).send(e);
|
|
}
|
|
}
|
|
|
|
logoutAll = async(req: RequestType, res: Response) => {
|
|
|
|
try {
|
|
|
|
const user = req.user;
|
|
|
|
await UserProvider.logoutAll(user!);
|
|
|
|
res.send();
|
|
|
|
} catch (e) {
|
|
|
|
res.status(500).send(e);
|
|
}
|
|
}
|
|
|
|
createUser = async(req: RequestType, res: Response) => {
|
|
|
|
if (env.createAcctBlocked) {
|
|
|
|
return await res.status(401).send()
|
|
}
|
|
|
|
try {
|
|
|
|
const {user, token} = await UserProvider.create(req.body);
|
|
|
|
user.tokens = [];
|
|
user.tempTokens = []
|
|
user.password = '';
|
|
user.privateKey = undefined;
|
|
user.publicKey = undefined;
|
|
|
|
res.status(201).send({user, token})
|
|
|
|
} catch (e) {
|
|
|
|
const code = e.code || 500;
|
|
|
|
console.log(e);
|
|
res.status(code).send(e);
|
|
}
|
|
}
|
|
|
|
changePassword = async(req: RequestType, res: Response) => {
|
|
|
|
if (!req.user) {
|
|
|
|
return;
|
|
}
|
|
|
|
try {
|
|
|
|
const user = req.user;
|
|
const oldPassword = req.body.oldPassword;
|
|
const newPassword = req.body.newPassword;
|
|
|
|
const newToken = await UserProvider.changePassword(user, oldPassword, newPassword);
|
|
|
|
res.send(newToken);
|
|
|
|
} catch (e) {
|
|
|
|
const code = e.code || 500;
|
|
|
|
console.log(e);
|
|
res.status(code).send(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
export default UserController; |