Added more typescript support, and started adding documentDB support
This commit is contained in:
+2
-1
@@ -16,4 +16,5 @@ certificate.key
|
||||
package-lock.json
|
||||
._*
|
||||
.DS_Store
|
||||
dist/
|
||||
dist/
|
||||
rds-combined-ca-bundle.pem
|
||||
@@ -1,31 +0,0 @@
|
||||
const env = require("../enviroment/env")
|
||||
const disk = require('diskusage');
|
||||
|
||||
class StorageController {
|
||||
|
||||
constructor() {
|
||||
|
||||
}
|
||||
|
||||
async getStorageInfo(req, res) {
|
||||
|
||||
if (!req.user) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const info = await disk.check(env.root);
|
||||
|
||||
res.send(info)
|
||||
|
||||
} catch (e) {
|
||||
|
||||
console.log(e);
|
||||
res.status(500).send(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = StorageController;
|
||||
@@ -0,0 +1,38 @@
|
||||
import disk from "diskusage";
|
||||
import env from "../enviroment/env";
|
||||
import { Request, Response } from "express";
|
||||
import { UserInterface } from "../models/user";
|
||||
|
||||
interface RequestType extends Request {
|
||||
user?: UserInterface,
|
||||
auth?: any,
|
||||
}
|
||||
|
||||
class StorageController {
|
||||
|
||||
constructor() {
|
||||
|
||||
}
|
||||
|
||||
getStorageInfo = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
const info = await disk.check(env.root!);
|
||||
|
||||
res.send(info)
|
||||
|
||||
} catch (e) {
|
||||
|
||||
console.log(e);
|
||||
res.status(500).send(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default StorageController;
|
||||
@@ -1,21 +1,31 @@
|
||||
const env = require("../enviroment/env");
|
||||
const UserService = require("../services/UserService")
|
||||
|
||||
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() {
|
||||
|
||||
}
|
||||
|
||||
async getUser(req, res) {
|
||||
getUser = async(req: RequestType, res: Response) => {
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
user.tokens = undefined;
|
||||
user.tempTokens = undefined;
|
||||
user.password = undefined;
|
||||
const user = req.user!;
|
||||
user.tokens = [];
|
||||
user.tempTokens = [];
|
||||
user.password = '';
|
||||
user.privateKey = undefined;
|
||||
user.publicKey = undefined;
|
||||
|
||||
@@ -27,7 +37,7 @@ class UserController {
|
||||
}
|
||||
}
|
||||
|
||||
async login(req, res) {
|
||||
login = async(req: RequestType, res: Response) => {
|
||||
|
||||
try {
|
||||
|
||||
@@ -35,9 +45,9 @@ class UserController {
|
||||
|
||||
const {user, token} = await UserProvider.login(body);
|
||||
|
||||
user.tokens = undefined;
|
||||
user.tempTokens = undefined;
|
||||
user.password = undefined;
|
||||
user.tokens = [];
|
||||
user.tempTokens = [];
|
||||
user.password = '';
|
||||
user.privateKey = undefined;
|
||||
user.publicKey = undefined;
|
||||
|
||||
@@ -52,7 +62,7 @@ class UserController {
|
||||
}
|
||||
}
|
||||
|
||||
async logout(req, res) {
|
||||
logout = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
|
||||
@@ -74,13 +84,13 @@ class UserController {
|
||||
}
|
||||
}
|
||||
|
||||
async logoutAll(req, res) {
|
||||
logoutAll = async(req: RequestType, res: Response) => {
|
||||
|
||||
try {
|
||||
|
||||
const user = req.user;
|
||||
|
||||
await UserProvider.logoutAll(user);
|
||||
await UserProvider.logoutAll(user!);
|
||||
|
||||
res.send();
|
||||
|
||||
@@ -90,7 +100,7 @@ class UserController {
|
||||
}
|
||||
}
|
||||
|
||||
async createUser(req, res) {
|
||||
createUser = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (env.createAcctBlocked) {
|
||||
|
||||
@@ -101,9 +111,9 @@ class UserController {
|
||||
|
||||
const {user, token} = await UserProvider.create(req.body);
|
||||
|
||||
user.tokens = undefined;
|
||||
user.tempTokens = undefined;
|
||||
user.password = undefined;
|
||||
user.tokens = [];
|
||||
user.tempTokens = []
|
||||
user.password = '';
|
||||
user.privateKey = undefined;
|
||||
user.publicKey = undefined;
|
||||
|
||||
@@ -118,7 +128,7 @@ class UserController {
|
||||
}
|
||||
}
|
||||
|
||||
async changePassword(req, res) {
|
||||
changePassword = async(req: RequestType, res: Response) => {
|
||||
|
||||
if (!req.user) {
|
||||
|
||||
@@ -145,4 +155,4 @@ class UserController {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = UserController;
|
||||
export default UserController;
|
||||
+25
-6
@@ -1,10 +1,29 @@
|
||||
const mongoose = require("mongoose");
|
||||
const env = require("../enviroment/env");
|
||||
const env = require("../enviroment/env.js");
|
||||
const fs = require("fs");
|
||||
|
||||
if (env.useDocumentDB === "true") {
|
||||
|
||||
console.log("Using DocumentDB");
|
||||
|
||||
mongoose.connect(env.mongoURL, {
|
||||
useNewUrlParser: true,
|
||||
useCreateIndex: true,
|
||||
useUnifiedTopology: true,
|
||||
sslValidate: true,
|
||||
useNewUrlParser: true,
|
||||
sslCA: fs.readFileSync('./rds-combined-ca-bundle.pem')
|
||||
})
|
||||
|
||||
} else {
|
||||
|
||||
mongoose.connect(env.mongoURL, {
|
||||
useNewUrlParser: true,
|
||||
useCreateIndex: true,
|
||||
useUnifiedTopology: true,
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
mongoose.connect(env.mongoURL, {
|
||||
useNewUrlParser: true,
|
||||
useCreateIndex: true,
|
||||
useUnifiedTopology: true,
|
||||
})
|
||||
|
||||
module.exports = mongoose;
|
||||
@@ -1,4 +1,4 @@
|
||||
module.exports = {
|
||||
export default {
|
||||
key: process.env.KEY,
|
||||
newKey: process.env.NEW_KEY,
|
||||
password: process.env.PASSWORD,
|
||||
@@ -10,5 +10,6 @@ module.exports = {
|
||||
fsDirectory: process.env.FS_DIRECTORY,
|
||||
s3ID: process.env.S3_ID,
|
||||
s3Key: process.env.S3_KEY,
|
||||
s3Bucket: process.env.S3_BUCKET
|
||||
s3Bucket: process.env.S3_BUCKET,
|
||||
useDocumentDB: process.env.USE_DOCUMENT_DB
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import {Router} from "express";
|
||||
const router = Router();
|
||||
const auth = require("../middleware/auth");
|
||||
const StorageController = require("../controllers/storage");
|
||||
import StorageController from "../controllers/storage";
|
||||
const storageController = new StorageController();
|
||||
|
||||
router.get("/storage-service/info", auth, storageController.getStorageInfo);
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import {Router} from "express";
|
||||
import { Router } from "express";
|
||||
const router = Router();
|
||||
const auth = require("../middleware/auth");
|
||||
const UserController = require("../controllers/user");
|
||||
import UserController from "../controllers/user";
|
||||
|
||||
const userController = new UserController();
|
||||
|
||||
router.get("/user-service/user", auth, userController.getUser);
|
||||
|
||||
@@ -72,6 +72,10 @@ export interface UserInterface extends Document {
|
||||
generateTempAuthToken: () => any;
|
||||
generateTempAuthTokenVideo: (cookie: string) => any;
|
||||
encryptToken: (tempToken: any, key: any, publicKey: any) => any;
|
||||
findByCreds: (email: string, password: string) => UserInterface;
|
||||
generateAuthToken: () => any;
|
||||
generateEncryptionKeys: () => Promise<void>;
|
||||
changeEncryptionKey: (randomKey: Buffer) => void;
|
||||
}
|
||||
|
||||
// userSchema.virtual("files", {
|
||||
@@ -222,7 +226,7 @@ userSchema.methods.getEncryptionKey = function() {
|
||||
}
|
||||
}
|
||||
|
||||
userSchema.methods.changeEncryptionKey = async function(randomKey: string) {
|
||||
userSchema.methods.changeEncryptionKey = async function(randomKey: Buffer) {
|
||||
|
||||
const user = this;
|
||||
const userPassword = user.password;
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
import User from "../../models/user";
|
||||
const bcrypt = require("bcrypt");
|
||||
const crypto = require("crypto");
|
||||
const NotFoundError = require("../../utils/NotFoundError");
|
||||
const InternalServerError = require("../../utils/InternalServerError");
|
||||
const NotAuthorizedError = require("../../utils/NotAuthorizedError");
|
||||
|
||||
const UserService = function() {
|
||||
|
||||
this.login = async(userData) => {
|
||||
|
||||
const email = userData.email;
|
||||
const password = userData.password;
|
||||
|
||||
const user = await User.findByCreds(email, password);
|
||||
|
||||
const token = await user.generateAuthToken();
|
||||
|
||||
if (!user || !token) throw new NotFoundError("Login User Not Found Error");
|
||||
|
||||
return {user, token}
|
||||
}
|
||||
|
||||
this.logout = async(user, userToken) => {
|
||||
|
||||
user.tokens = user.tokens.filter((token) => {
|
||||
return token.token !== userToken;
|
||||
})
|
||||
|
||||
await user.save();
|
||||
}
|
||||
|
||||
this.logoutAll = async(user) => {
|
||||
|
||||
user.tokens = []
|
||||
user.tempTokens = [];
|
||||
|
||||
await user.save();
|
||||
}
|
||||
|
||||
this.create = async(userData) => {
|
||||
|
||||
console.log("Create");
|
||||
|
||||
const user = new User(userData);
|
||||
await user.save();
|
||||
|
||||
await user.generateEncryptionKeys();
|
||||
|
||||
const token = await user.generateAuthToken();
|
||||
|
||||
if (!user || !token) throw new InternalServerError("Could Not Create New User Error");
|
||||
|
||||
return {user, token}
|
||||
}
|
||||
|
||||
this.changePassword = async(user, oldPassword, newPassword) => {
|
||||
|
||||
const isMatch = await bcrypt.compare(oldPassword, user.password);
|
||||
|
||||
if (!isMatch) throw new NotAuthorizedError("Change Passwords Do Not Match Error");
|
||||
|
||||
const encryptionKey = user.getEncryptionKey();
|
||||
|
||||
user.password = newPassword;
|
||||
|
||||
user.tokens = [];
|
||||
user.tempTokens = [];
|
||||
|
||||
await user.save();
|
||||
await user.changeEncryptionKey(encryptionKey);
|
||||
|
||||
const newToken = await user.generateAuthToken();
|
||||
|
||||
return newToken;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = UserService;
|
||||
@@ -0,0 +1,167 @@
|
||||
import User, {UserInterface} from "../../models/user";
|
||||
const bcrypt = require("bcrypt");
|
||||
const crypto = require("crypto");
|
||||
const NotFoundError = require("../../utils/NotFoundError");
|
||||
const InternalServerError = require("../../utils/InternalServerError");
|
||||
const NotAuthorizedError = require("../../utils/NotAuthorizedError");
|
||||
|
||||
type UserDataType = {
|
||||
email: string,
|
||||
password: string,
|
||||
}
|
||||
|
||||
const uknownUserType = User as unknown;
|
||||
|
||||
const UserStaticType = uknownUserType as {
|
||||
findByCreds: (email: string, password: string) => Promise<UserInterface>;
|
||||
};
|
||||
|
||||
|
||||
class UserService {
|
||||
|
||||
constructor() {
|
||||
|
||||
}
|
||||
|
||||
login = async(userData: UserDataType) => {
|
||||
|
||||
const email = userData.email;
|
||||
const password = userData.password;
|
||||
|
||||
const user = await UserStaticType.findByCreds(email, password);
|
||||
|
||||
const token = await user.generateAuthToken();
|
||||
|
||||
if (!user || !token) throw new NotFoundError("Login User Not Found Error");
|
||||
|
||||
return {user, token}
|
||||
}
|
||||
|
||||
logout = async(user: UserInterface, userToken: any) => {
|
||||
|
||||
user.tokens = user.tokens.filter((token) => {
|
||||
return token.token !== userToken;
|
||||
})
|
||||
|
||||
await user.save();
|
||||
}
|
||||
|
||||
logoutAll = async(user: UserInterface) => {
|
||||
|
||||
user.tokens = []
|
||||
user.tempTokens = [];
|
||||
|
||||
await user.save();
|
||||
}
|
||||
|
||||
create = async(userData: any) => {
|
||||
|
||||
console.log("Create");
|
||||
|
||||
const user = new User(userData);
|
||||
await user.save();
|
||||
|
||||
await user.generateEncryptionKeys();
|
||||
|
||||
const token = await user.generateAuthToken();
|
||||
|
||||
if (!user || !token) throw new InternalServerError("Could Not Create New User Error");
|
||||
|
||||
return {user, token}
|
||||
}
|
||||
|
||||
changePassword = async(user: UserInterface, oldPassword: string, newPassword: string) => {
|
||||
|
||||
const isMatch = await bcrypt.compare(oldPassword, user.password);
|
||||
|
||||
if (!isMatch) throw new NotAuthorizedError("Change Passwords Do Not Match Error");
|
||||
|
||||
const encryptionKey = user.getEncryptionKey();
|
||||
|
||||
user.password = newPassword;
|
||||
|
||||
user.tokens = [];
|
||||
user.tempTokens = [];
|
||||
|
||||
await user.save();
|
||||
await user.changeEncryptionKey(encryptionKey!);
|
||||
|
||||
const newToken = await user.generateAuthToken();
|
||||
|
||||
return newToken;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// const UserService = function() {
|
||||
|
||||
// this.login = async(userData) => {
|
||||
|
||||
// const email = userData.email;
|
||||
// const password = userData.password;
|
||||
|
||||
// const user = await User.findByCreds(email, password);
|
||||
|
||||
// const token = await user.generateAuthToken();
|
||||
|
||||
// if (!user || !token) throw new NotFoundError("Login User Not Found Error");
|
||||
|
||||
// return {user, token}
|
||||
// }
|
||||
|
||||
// this.logout = async(user, userToken) => {
|
||||
|
||||
// user.tokens = user.tokens.filter((token) => {
|
||||
// return token.token !== userToken;
|
||||
// })
|
||||
|
||||
// await user.save();
|
||||
// }
|
||||
|
||||
// this.logoutAll = async(user) => {
|
||||
|
||||
// user.tokens = []
|
||||
// user.tempTokens = [];
|
||||
|
||||
// await user.save();
|
||||
// }
|
||||
|
||||
// this.create = async(userData) => {
|
||||
|
||||
// console.log("Create");
|
||||
|
||||
// const user = new User(userData);
|
||||
// await user.save();
|
||||
|
||||
// await user.generateEncryptionKeys();
|
||||
|
||||
// const token = await user.generateAuthToken();
|
||||
|
||||
// if (!user || !token) throw new InternalServerError("Could Not Create New User Error");
|
||||
|
||||
// return {user, token}
|
||||
// }
|
||||
|
||||
// this.changePassword = async(user, oldPassword, newPassword) => {
|
||||
|
||||
// const isMatch = await bcrypt.compare(oldPassword, user.password);
|
||||
|
||||
// if (!isMatch) throw new NotAuthorizedError("Change Passwords Do Not Match Error");
|
||||
|
||||
// const encryptionKey = user.getEncryptionKey();
|
||||
|
||||
// user.password = newPassword;
|
||||
|
||||
// user.tokens = [];
|
||||
// user.tempTokens = [];
|
||||
|
||||
// await user.save();
|
||||
// await user.changeEncryptionKey(encryptionKey);
|
||||
|
||||
// const newToken = await user.generateAuthToken();
|
||||
|
||||
// return newToken;
|
||||
// }
|
||||
// }
|
||||
|
||||
export default UserService;
|
||||
Reference in New Issue
Block a user