Added more typescript support, and started adding documentDB support

This commit is contained in:
subnub
2020-04-17 23:18:06 -04:00
parent 9b83b06556
commit c70abc69bb
11 changed files with 274 additions and 143 deletions
+2 -1
View File
@@ -16,4 +16,5 @@ certificate.key
package-lock.json
._*
.DS_Store
dist/
dist/
rds-combined-ca-bundle.pem
-31
View File
@@ -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;
+38
View File
@@ -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
View File
@@ -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;
+3 -2
View File
@@ -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 -1
View File
@@ -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);
+3 -2
View File
@@ -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);
+5 -1
View File
@@ -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;
-79
View File
@@ -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;
+167
View File
@@ -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;