Skip to content

Commit

Permalink
skeleton code
Browse files Browse the repository at this point in the history
  • Loading branch information
Mehss committed Jun 11, 2021
1 parent daf2c0d commit 552c2c8
Show file tree
Hide file tree
Showing 2,783 changed files with 318,027 additions and 0 deletions.
8 changes: 8 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
SECRET_KEY_JWT="BluePeriod"

DEV_USERNAME = "postgres"
DEV_PASSWORD =
DEV_SERVER = "localhost"
DEV_DB = "kanban_db"

DEV_G_CLIENT_ID = 982085477024-6n2tpq82aracq5krun8e705oj863h0q2.apps.googleusercontent.com
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
.env
node_modules
21 changes: 21 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
require("dotenv").config();
const express = require('express')
const app = express()
const port = 3000
const routes = require('./routes')
const cors = require('cors')
const { hash, compareHash } = require('./helpers/brcypt')
const errorHandler = require('./middlewares/error-handler')

app.locals.hash = hash
app.locals.compareHash = compareHash

app.use(cors())
app.use(express.urlencoded({extended:true}))
app.use(express.json())
app.use('/', routes)
app.use('/', errorHandler)

app.listen(port, () => {
console.log(`app listening at http://localhost:${port}`)
})
23 changes: 23 additions & 0 deletions config/config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module.exports = {
"development": {
"username": process.env.DEV_USERNAME,
"password": process.env.DEV_PASSWORD,
"database": process.env.DEV_DB,
"host": process.env.DEV_SERVER,
"dialect": "postgres"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
14 changes: 14 additions & 0 deletions helpers/brcypt.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
const bcrypt = require('bcryptjs')

function hash(password) {
return bcrypt.hashSync(password, bcrypt.genSaltSync(10))
}

function compareHash(password, db_password) {
return bcrypt.compareSync(password, db_password)
}

module.exports = {
hash,
compareHash
}
8 changes: 8 additions & 0 deletions helpers/jwt.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
const jwt = require("jsonwebtoken")

const SECRET_KEY = process.env.SECRET_KEY_JWT
const jwtEncrypt = (payload) => jwt.sign(payload, SECRET_KEY)

const jwtDecrypt = (token) => jwt.verify(token, SECRET_KEY)

module.exports = {jwtDecrypt, jwtEncrypt}
24 changes: 24 additions & 0 deletions middlewares/auth.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const {jwtDecrypt} = require("../helpers/jwt")
const {User, Todo} = require("../models")

const authentication = (req, res, next) =>{
try{
const {access_token} = req.headers
const dataDecoded = jwtDecrypt(access_token)
User.findByPk(dataDecoded.id)
.then(user => {
if (!user){
throw {name: "AuthenticationError", message:"User not Found"}
} else {
req.currentUser = {id: user.id}
next()
}
}) .catch(err => {
next(err)
})
} catch(err) {
next(err)
}
}

module.exports = {authentication, todoAuth}
53 changes: 53 additions & 0 deletions middlewares/error-handler.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
const errorHandler = (err, req, res, next) => {
let statusCode
let message
console.log(err)
switch (err.name) {
case "noEmail":
statusCode = 400
message = "Email not found"
break;

case "wrongPassword":
statusCode = 400
message = "Wrong password"
break;

case "SequelizeUniqueConstraintError":
statusCode = 400
message = err.errors.map(el => el.message)
break;

case "FillEmailPassword":
statusCode = 400
message = "Please Fill Email and Password"
break;

case "TodoNotFound":
statusCode = 404
message = "Todo not Found"
break;

case "AuthorizationError":
statusCode = 401
message = "User does not have permission"
break;

case "JsonWebTokenError":
statusCode = 400
message= "Login Error"
break;

case "SequelizeValidationError":
statusCode = 400
message = err.errors.map(el => el.message)
break;

default:
statusCode = 500
message = "Internal Server Error"
break;
}
res.status(statusCode).json({message: message, devMessage: err})
}
module.exports = errorHandler
33 changes: 33 additions & 0 deletions migrations/20210611124853-create-users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
email: {
type: Sequelize.STRING,
unique:true,
allowNull: false,
},
password: {
type: Sequelize.STRING,
allowNull: false
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};
37 changes: 37 additions & 0 deletions models/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}

fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
db[model.name] = model;
});

Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});

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

module.exports = db;
24 changes: 24 additions & 0 deletions models/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Users extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
};
Users.init({
email: DataTypes.STRING,
password: DataTypes.STRING
}, {
sequelize,
modelName: 'Users',
});
return Users;
};
15 changes: 15 additions & 0 deletions node_modules/.bin/mime

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions node_modules/.bin/mime.cmd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions node_modules/.bin/mime.ps1

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions node_modules/.bin/semver

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 17 additions & 0 deletions node_modules/.bin/semver.cmd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 18 additions & 0 deletions node_modules/.bin/semver.ps1

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions node_modules/.bin/uuid

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 552c2c8

Please sign in to comment.