Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/config/auth.config.js → app/config/auth.config.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module.exports = {
export const config = {
secret: "bezkoder-secret-key"
};
2 changes: 1 addition & 1 deletion app/config/db.config.js → app/config/db.config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module.exports = {
export const config = {
HOST: "localhost",
USER: "postgres",
PASSWORD: "123",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
const db = require("../models");
const config = require("../config/auth.config");
import { RequestHandler } from "express";
import { db } from "../models";
import { Op } from "sequelize";
import { config } from "../config/auth.config";
const User = db.user;
const Role = db.role;

const Op = db.Sequelize.Op;

var jwt = require("jsonwebtoken");
var bcrypt = require("bcryptjs");

exports.signup = (req, res) => {
import * as jwt from "jsonwebtoken";
import * as bcrypt from "bcryptjs";

export const signup: RequestHandler = (req, res) => {
// Save User to Database
User.create({
username: req.body.username,
Expand All @@ -24,12 +26,12 @@ exports.signup = (req, res) => {
}
}
}).then(roles => {

user.setRoles(roles).then(() => {
res.send({ message: "User registered successfully!" });
});
});
} else {
// user role = 1
user.setRoles([1]).then(() => {
res.send({ message: "User registered successfully!" });
});
Expand All @@ -40,7 +42,7 @@ exports.signup = (req, res) => {
});
};

exports.signin = (req, res) => {
export const signin: RequestHandler = (req, res) => {
User.findOne({
where: {
username: req.body.username
Expand All @@ -67,7 +69,7 @@ exports.signin = (req, res) => {
expiresIn: 86400 // 24 hours
});

var authorities = [];
var authorities = [] as string[];
user.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
authorities.push("ROLE_" + roles[i].name.toUpperCase());
Expand Down
15 changes: 0 additions & 15 deletions app/controllers/user.controller.js

This file was deleted.

17 changes: 17 additions & 0 deletions app/controllers/user.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { RequestHandler } from "express";

export const allAccess: RequestHandler = (req, res) => {
res.status(200).send("Public Content.");
};

export const userBoard: RequestHandler = (req, res) => {
res.status(200).send("User Content.");
};

export const adminBoard: RequestHandler = (req, res) => {
res.status(200).send("Admin Content.");
};

export const moderatorBoard: RequestHandler = (req, res) => {
res.status(200).send("Moderator Content.");
};
43 changes: 24 additions & 19 deletions app/middleware/authJwt.js → app/middleware/authJwt.ts
Original file line number Diff line number Diff line change
@@ -1,31 +1,36 @@
const jwt = require("jsonwebtoken");
const config = require("../config/auth.config.js");
const db = require("../models");
const User = db.user;
import { RequestHandler } from 'express';
import jwt from "jsonwebtoken";
import { config } from "../config/auth.config";
import { db } from "../models";
import { User } from '../models/user.model';

verifyToken = (req, res, next) => {
let token = req.headers["x-access-token"];




const verifyToken: RequestHandler = (req, res, next) => {
let token = req.headers["x-access-token"] as string;

if (!token) {
return res.status(403).send({
message: "No token provided!"
});
}

jwt.verify(token, config.secret, (err, decoded) => {
jwt.verify(token, config.secret, (err: any, decoded: any) => {
if (err) {
return res.status(401).send({
message: "Unauthorized!"
});
}
req.userId = decoded.id;
(req as any).userId = decoded.id;
next();
});
};

isAdmin = (req, res, next) => {
User.findByPk(req.userId).then(user => {
user.getRoles().then(roles => {
const isAdmin: RequestHandler = (req, res, next) => {
User.findByPk((req as any).userId).then(user => {
user!.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
if (roles[i].name === "admin") {
next();
Expand All @@ -41,9 +46,9 @@ isAdmin = (req, res, next) => {
});
};

isModerator = (req, res, next) => {
User.findByPk(req.userId).then(user => {
user.getRoles().then(roles => {
const isModerator: RequestHandler = (req, res, next) => {
User.findByPk((req as any).userId).then(user => {
user!.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
if (roles[i].name === "moderator") {
next();
Expand All @@ -58,9 +63,9 @@ isModerator = (req, res, next) => {
});
};

isModeratorOrAdmin = (req, res, next) => {
User.findByPk(req.userId).then(user => {
user.getRoles().then(roles => {
const isModeratorOrAdmin: RequestHandler = (req, res, next) => {
User.findByPk((req as any).userId).then(user => {
user!.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
if (roles[i].name === "moderator") {
next();
Expand All @@ -80,10 +85,10 @@ isModeratorOrAdmin = (req, res, next) => {
});
};

const authJwt = {
export const authJwt = {
verifyToken: verifyToken,
isAdmin: isAdmin,
isModerator: isModerator,
isModeratorOrAdmin: isModeratorOrAdmin
};
module.exports = authJwt;

7 changes: 0 additions & 7 deletions app/middleware/index.js

This file was deleted.

2 changes: 2 additions & 0 deletions app/middleware/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export { authJwt } from "./authJwt";
export { verifySignUp } from "./verifySignUp";
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
const db = require("../models");
import { RequestHandler } from "express";

import { db } from "../models";
const ROLES = db.ROLES;
const User = db.user;

checkDuplicateUsernameOrEmail = (req, res, next) => {
const checkDuplicateUsernameOrEmail: RequestHandler = (req, res, next) => {
// Username
User.findOne({
where: {
Expand Down Expand Up @@ -34,7 +36,7 @@ checkDuplicateUsernameOrEmail = (req, res, next) => {
});
};

checkRolesExisted = (req, res, next) => {
const checkRolesExisted: RequestHandler = (req, res, next) => {
if (req.body.roles) {
for (let i = 0; i < req.body.roles.length; i++) {
if (!ROLES.includes(req.body.roles[i])) {
Expand All @@ -45,13 +47,13 @@ checkRolesExisted = (req, res, next) => {
}
}
}

next();
};

const verifySignUp = {
export const verifySignUp = {
checkDuplicateUsernameOrEmail: checkDuplicateUsernameOrEmail,
checkRolesExisted: checkRolesExisted
};

module.exports = verifySignUp;

29 changes: 15 additions & 14 deletions app/models/index.js → app/models/index.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
const config = require("../config/db.config.js");
import { config } from "../config/db.config";

const Sequelize = require("sequelize");
import { Dialect, Sequelize } from "sequelize";
import { initRole, Role } from "./role.model";
import { initUsers, User } from "./user.model";
const sequelize = new Sequelize(
config.DB,
config.USER,
config.PASSWORD,
{
host: config.HOST,
dialect: config.dialect,
operatorsAliases: false,
dialect: config.dialect as Dialect,
//operatorsAliases: false,

pool: {
max: config.pool.max,
Expand All @@ -19,25 +21,24 @@ const sequelize = new Sequelize(
}
);

const db = {};

db.Sequelize = Sequelize;
db.sequelize = sequelize;

db.user = require("../models/user.model.js")(sequelize, Sequelize);
db.role = require("../models/role.model.js")(sequelize, Sequelize);
export const db = {
user: User,
role: Role,
sequelize,
ROLES: ["user", "admin", "moderator"]
};
initUsers(sequelize);
initRole(sequelize);

db.role.belongsToMany(db.user, {
through: "user_roles",
foreignKey: "roleId",
otherKey: "userId"
});

db.user.belongsToMany(db.role, {
through: "user_roles",
foreignKey: "userId",
otherKey: "roleId"
});

db.ROLES = ["user", "admin", "moderator"];

module.exports = db;
13 changes: 0 additions & 13 deletions app/models/role.model.js

This file was deleted.

22 changes: 22 additions & 0 deletions app/models/role.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { DataTypes, Model, Sequelize } from 'sequelize';
export class Role extends Model {
id!: number;
name!: string;
}
export function initRole(sequelize: Sequelize) {

Role.init({
id: {
type: DataTypes.INTEGER,
primaryKey: true
},
name: {
type: DataTypes.STRING
}
},
{
sequelize,
tableName: 'roles'
});
return Role;
};
15 changes: 0 additions & 15 deletions app/models/user.model.js

This file was deleted.

28 changes: 28 additions & 0 deletions app/models/user.model.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import { DataTypes, Model, Sequelize } from "sequelize";
import { Role } from "./role.model";

export class User extends Model {
id!: number;
username!: string;
email!: string;
password!: string;
setRoles!: (roles: (Role | number)[]) => Promise<void>;
getRoles!: () => Promise<Role[]>
}
export function initUsers(sequelize: Sequelize) {
User.init({
username: {
type: DataTypes.STRING
},
email: {
type: DataTypes.STRING
},
password: {
type: DataTypes.STRING
}
}, {
sequelize,
tableName: "users"
});

}
9 changes: 5 additions & 4 deletions app/routes/auth.routes.js → app/routes/auth.routes.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const { verifySignUp } = require("../middleware");
const controller = require("../controllers/auth.controller");
import { Express } from 'express';
import { verifySignUp } from "../middleware";
import * as controller from "../controllers/auth.controller";

module.exports = function(app) {
app.use(function(req, res, next) {
export function authRoutes(app: Express) {
app.use(function (req, res, next) {
res.header(
"Access-Control-Allow-Headers",
"x-access-token, Origin, Content-Type, Accept"
Expand Down
Loading