code upload

This commit is contained in:
Pavel Nedoshivkin 2024-06-16 18:00:51 +07:00
parent 4b65ecc54c
commit 6dc1907ef0
28 changed files with 2166 additions and 332 deletions

11
.eslintrc.cjs Normal file
View File

@ -0,0 +1,11 @@
/* eslint-env node */
module.exports = {
root: true,
'extends': [
'plugin:vue/vue3-essential',
'eslint:recommended'
],
parserOptions: {
ecmaVersion: 'latest'
}
}

287
.gitignore vendored
View File

@ -1,281 +1,30 @@
# ---> Linux
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
# ---> Windows
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# ---> macOS
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# ---> VisualStudioCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
# ---> Emacs
# -*- mode: gitignore; -*-
*~
\#*\#
/.emacs.desktop
/.emacs.desktop.lock
*.elc
auto-save-list
tramp
.\#*
# Org-mode
.org-id-locations
*_archive
# flymake-mode
*_flymake.*
# eshell files
/eshell/history
/eshell/lastdir
# elpa packages
/elpa/
# reftex files
*.rel
# AUCTeX auto folder
/auto/
# cask packages
.cask/
dist/
# Flycheck
flycheck_*.el
# server auth directory
/server/
# projectiles files
.projectile
# directory configuration
.dir-locals.el
# network security
/network-security.data
# ---> Node
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional stylelint cache
.stylelintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variable files
.env
.env.development.local
.env.test.local
.env.production.local
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
node_modules
.DS_Store
dist
dist-ssr
coverage
*.local
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
/cypress/videos/
/cypress/screenshots/
# vuepress build output
.vuepress/dist
# vuepress v2.x temp and cache directory
.temp
.cache
# Docusaurus cache and generated files
.docusaurus
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
# ---> Hugo
# Generated files by hugo
/public/
/resources/_gen/
/assets/jsconfig.json
hugo_stats.json
# Executable may be added to repository
hugo.exe
hugo.darwin
hugo.linux
# Temporary lock file while building
/.hugo_build.lock
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
*.tsbuildinfo

47
Jenkinsfile vendored
View File

@ -1,47 +0,0 @@
pipeline {
agent {label 'html'}
stages {
stage('Check host') {
steps {
withCredentials(bindings: [sshUserPrivateKey(credentialsId: '301d16da-51e4-438d-abf7-51b88a05bcec', \
keyFileVariable: 'SSH_KEY_PEREC', usernameVariable: 'SSH_USERNAME')]) {
sh '''
ssh -i $SSH_KEY_PEREC -o StrictHostKeyChecking=no $SSH_USERNAME@172.16.0.22 "freebsd-version"
'''
}
}
}
stage('Deploy site rsync') {
steps {
withCredentials(bindings: [sshUserPrivateKey(credentialsId: '301d16da-51e4-438d-abf7-51b88a05bcec', \
keyFileVariable: 'SSH_KEY_PEREC', usernameVariable: 'SSH_USERNAME')]) {
sh '''
rsync -avz --delete -e "ssh -i $SSH_KEY_PEREC -o StrictHostKeyChecking=no" src/ $SSH_USERNAME@172.16.0.22:/home/$SSH_USERNAME/site/web_example_static/
'''
}
}
}
// stage ('Deploy site ssh){
// steps {
// withCredentials(bindings: [sshUserPrivateKey(credentialsId: '301d16da-51e4-438d-abf7-51b88a05bcec', \
// keyFileVariable: 'SSH_KEY_PEREC', usernameVariable: 'SSH_USERNAME')]) {
// sh '''
// scp -rp -i $SSH_KEY_PEREC -o StrictHostKeyChecking=no src/* $SSH_USERNAME@172.16.0.22:/home/$SSH_USERNAME/site/web_example_static/
// '''
// }
// }
// }
}
// post{
// success {
// echo "success"
// }
// failure {
// echo "failure"
// }
// }
}

View File

@ -1,5 +1,6 @@
# example_static
# API service
[![Build Status](https://jenkins.myhome.ru.net/buildStatus/icon?job=GiteaMyHome%2Fexample_static%2Fmain)](https://jenkins.myhome.ru.net/job/GiteaMyHome/job/example_static/job/main/)
[![Build Status](https://jenkins.myhome.ru.net/buildStatus/icon?job=GiteaMyHome%2Fecokam-auth%2Fmain)](https://jenkins.myhome.ru.net/job/GiteaMyHome/job/ecokam-auth/job/main/)
API service
Example HTML static website

View File

@ -0,0 +1,3 @@
module.exports = {
secret: "ab3ec09b9b12a8cd3f445eac903ea06504c087bc"
};

View File

@ -0,0 +1,3 @@
module.exports = {
secret: "ab3ec09b9b12a8cd3f445eac903ea06504c087bc"
};

View File

@ -0,0 +1,13 @@
module.exports = {
HOST: "127.0.0.1",
USER: "usr_beartrack",
PASSWORD: "pwd_beartrack",
DB: "beartrack_db",
dialect: "postgres",
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
};

View File

@ -0,0 +1,13 @@
module.exports = {
HOST: "127.0.0.1",
USER: "usr_beartrack",
PASSWORD: "pwd_beartrack",
DB: "beartrack_db",
dialect: "postgres",
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
}
};

View File

@ -0,0 +1,92 @@
const db = require("../models");
const config = require("../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) => {
// Save User to Database
User.create({
username: req.body.username,
email: req.body.email,
password: bcrypt.hashSync(req.body.password, 8)
})
.then(user => {
if (req.body.roles) {
Role.findAll({
where: {
name: {
[Op.or]: req.body.roles
}
}
}).then(roles => {
user.setRoles(roles).then(() => {
res.send({ message: "User was registered successfully!" });
});
});
} else {
// user role = 1
user.setRoles([1]).then(() => {
res.send({ message: "User was registered successfully!" });
});
}
})
.catch(err => {
res.status(500).send({ message: err.message });
});
};
exports.signin = (req, res) => {
User.findOne({
where: {
username: req.body.username
}
})
.then(user => {
if (!user) {
return res.status(404).send({ message: "User Not found." });
}
var passwordIsValid = bcrypt.compareSync(
req.body.password,
user.password
);
if (!passwordIsValid) {
return res.status(401).send({
accessToken: null,
message: "Invalid Password!"
});
}
const token = jwt.sign({ id: user.id },
config.secret,
{
algorithm: 'HS256',
allowInsecureKeySizes: true,
expiresIn: 86400, // 24 hours
});
var authorities = [];
user.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
authorities.push("ROLE_" + roles[i].name.toUpperCase());
}
res.status(200).send({
id: user.id,
username: user.username,
email: user.email,
roles: authorities,
accessToken: token
});
});
})
.catch(err => {
res.status(500).send({ message: err.message });
});
};

View File

@ -0,0 +1,171 @@
const db = require("../models");
const uploadFile = require("../middleware/filesLoad");
const FileEvent = db.fileevent;
const fs = require("fs");
//const baseUrl = "https://eco.beartrack.ru/files/";
const upload = async (req, res) => {
try {
await uploadFile(req, res);
if (req.file == undefined) {
return res.status(400).send({ message: "Please upload a file!" });
}
await FileEvent.create({
uuid: req.body.id,
filename: req.file.originalname,
eventdate: req.body.eventdate,
message: req.body.message,
latitude: req.body.latitude,
longitude: req.body.longitude,
status: 0,
});
res.status(200).send({
uuid: req.body.id,
message: "Uploaded the file successfully: " + req.file.originalname,
});
} catch (err) {
res.status(500).send({
message: `Could not upload the file: ${req.file.originalname}. ${err}`,
});
}
};
// const upload = async (req, res) => {
// try {
// await uploadFile(req, res);
// ...
// } catch (err) {
// if (err.code == "LIMIT_FILE_SIZE") {
// return res.status(500).send({
// message: "File size cannot be larger than 2MB!",
// });
// }
// res.status(500).send({
// message: `Could not upload the file: ${req.file.originalname}. ${err}`,
// });
// }
// };
const getListFiles = async (req, res) => {
const directoryPath = __basedir + "/resources/static/assets/uploads/";
const baseUrl = "https://cdn.beartrack.ru/files/";
const fileEvents = await FileEvent.findAll({
attributes: [
'uuid',
'eventdate',
'latitude',
'longitude',
'message',
'status',
[db.sequelize.fn('CONCAT', baseUrl, db.sequelize.col('uuid')), 'url']
],
});
//console.log(fileEvents.every(fileevents => fileevents instanceof FileEvent)); // true
//console.log('All event:', JSON.stringify(fileEvents, null, 2));
fs.readdir(directoryPath, function (err, files) {
if (err) {
res.status(500).send({
message: "Unable to scan files!",
});
}
let fileInfos = [];
files.forEach((file) => {
fileInfos.push({
name: file,
url: baseUrl + file,
});
});
res.status(200).send(JSON.stringify(fileEvents, null, 2));
});
};
const verifyFile = (req, res) => {
const fileuuid = req.params.id;
const directoryPath = __basedir + "/resources/static/assets/uploads/";
fs.stat(directoryPath+fileuuid, (err, stats) => {
if (err) {
res.status(404).send({
message: "File not found",
status: false,
});
}
if (stats.isFile()) {
res.status(200).send({
message: "File found: " + fileuuid,
status: stats.isFile(),
})
}
});
};
const updateFile = async (req, res) => {
const fileuuid = req.params.id;
const newstatus = req.body.status;
const directoryPath = __basedir + "/resources/static/assets/uploads/";
try {
const currentEvent = await FileEvent.findOne({
where:{
uuid: fileuuid
}
});
//modifying the related field
currentEvent.status = newstatus;
//saving the changes
currentEvent.save({fields: ['status']});
// await FileEvent.update(
// { 'status': req.body.status },
// {
// where: {
// 'uuid': req.params.id,
// },
// },
// );
res.status(200).send({
uuid: fileuuid,
message: "Update the file successfully: " + fileuuid,
});
} catch (err) {
res.status(500).send({
message: `Could not update: ${fileuuid}. ${err}`,
});
}
};
const download = (req, res) => {
const fileName = req.params.id;
const directoryPath = __basedir + "/resources/static/assets/uploads/";
res.download(directoryPath + fileName, fileName, (err) => {
if (err) {
res.status(500).send({
message: "Could not download the file. " + err,
});
}
});
};
module.exports = {
upload,
getListFiles,
verifyFile,
updateFile,
download,
};

View File

@ -0,0 +1,41 @@
exports.allAccess = (req, res) => {
res.status(200).send("Общий контент.");
};
exports.userBoard = (req, res) => {
res.status(200).send("Пользовательский контент.");
};
exports.adminBoard = (req, res) => {
res.status(200).send("Административный.");
};
exports.moderatorBoard = (req, res) => {
res.status(200).send("Модерируемый контент.");
};
const mapevents = [
{
coordinates: [166.623, 60.752],
iconSrc:
'https://yastatic.net/s3/front-maps-static/maps-front-jsapi-3/examples/images/marker-custom-icon/yellow-capybara.png',
message: 'Вырубка',
},
{
coordinates: [166.125, 60.622],
iconSrc:
'https://yastatic.net/s3/front-maps-static/maps-front-jsapi-3/examples/images/marker-custom-icon/purple-capybara.png',
message: 'Лесной пожар',
},
{
coordinates: [166.295, 61.415],
iconSrc:
'https://yastatic.net/s3/front-maps-static/maps-front-jsapi-3/examples/images/marker-custom-icon/green-capybara.png',
message: 'Браконьерство',
},
];
exports.eventBoard = (req, res) => {
res.status(200).send(JSON.stringify(mapevents));
};

View File

@ -0,0 +1,91 @@
const jwt = require("jsonwebtoken");
const config = require("../config/auth.config.js");
const db = require("../models");
const User = db.user;
verifyToken = (req, res, next) => {
let token = req.headers["x-access-token"];
if (!token) {
return res.status(403).send({
message: "No token provided!"
});
}
jwt.verify(token,
config.secret,
(err, decoded) => {
if (err) {
return res.status(401).send({
message: "Unauthorized!",
});
}
req.userId = decoded.id;
next();
});
};
isAdmin = (req, res, next) => {
User.findByPk(req.userId).then(user => {
user.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
if (roles[i].name === "admin") {
next();
return;
}
}
res.status(403).send({
message: "Require Admin Role!"
});
return;
});
});
};
isModerator = (req, res, next) => {
User.findByPk(req.userId).then(user => {
user.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
if (roles[i].name === "moderator") {
next();
return;
}
}
res.status(403).send({
message: "Require Moderator Role!"
});
});
});
};
isModeratorOrAdmin = (req, res, next) => {
User.findByPk(req.userId).then(user => {
user.getRoles().then(roles => {
for (let i = 0; i < roles.length; i++) {
if (roles[i].name === "moderator") {
next();
return;
}
if (roles[i].name === "admin") {
next();
return;
}
}
res.status(403).send({
message: "Require Moderator or Admin Role!"
});
});
});
};
const authJwt = {
verifyToken: verifyToken,
isAdmin: isAdmin,
isModerator: isModerator,
isModeratorOrAdmin: isModeratorOrAdmin
};
module.exports = authJwt;

View File

@ -0,0 +1,22 @@
const util = require("util");
const multer = require("multer");
const maxSize = 10 * 1024 * 1024;
let storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, __basedir + "/resources/static/assets/uploads/");
},
filename: (req, file, cb) => {
console.log(file.originalname);
cb(null, req.body.id);
},
});
let uploadFile = multer({
storage: storage,
limits: { fileSize: maxSize },
}).single("file");
let uploadFileMiddleware = util.promisify(uploadFile);
module.exports = uploadFileMiddleware;

View File

@ -0,0 +1,7 @@
const authJwt = require("./authJwt");
const verifySignUp = require("./verifySignUp");
module.exports = {
authJwt,
verifySignUp
};

View File

@ -0,0 +1,57 @@
const db = require("../models");
const ROLES = db.ROLES;
const User = db.user;
checkDuplicateUsernameOrEmail = (req, res, next) => {
// Username
User.findOne({
where: {
username: req.body.username
}
}).then(user => {
if (user) {
res.status(400).send({
message: "Failed! Username is already in use!"
});
return;
}
// Email
User.findOne({
where: {
email: req.body.email
}
}).then(user => {
if (user) {
res.status(400).send({
message: "Failed! Email is already in use!"
});
return;
}
next();
});
});
};
checkRolesExisted = (req, res, next) => {
if (req.body.roles) {
for (let i = 0; i < req.body.roles.length; i++) {
if (!ROLES.includes(req.body.roles[i])) {
res.status(400).send({
message: "Failed! Role does not exist = " + req.body.roles[i]
});
return;
}
}
}
next();
};
const verifySignUp = {
checkDuplicateUsernameOrEmail: checkDuplicateUsernameOrEmail,
checkRolesExisted: checkRolesExisted
};
module.exports = verifySignUp;

View File

@ -0,0 +1,29 @@
module.exports = (sequelize, Sequelize) => {
const FileEvent = sequelize.define("fileevent", {
uuid: {
type: Sequelize.UUID,
primaryKey: true,
},
filename: {
type: Sequelize.STRING
},
eventdate: {
type: Sequelize.STRING
},
message: {
type: Sequelize.STRING
},
latitude: {
type: Sequelize.STRING
},
longitude: {
type: Sequelize.STRING
},
status: {
type: Sequelize.INTEGER
}
});
return FileEvent;
};

39
src/app/models/index.js Normal file
View File

@ -0,0 +1,39 @@
const config = require("../config/db.config.js");
const Sequelize = require("sequelize");
const sequelize = new Sequelize(
config.DB,
config.USER,
config.PASSWORD,
{
host: config.HOST,
dialect: config.dialect,
pool: {
max: config.pool.max,
min: config.pool.min,
acquire: config.pool.acquire,
idle: config.pool.idle
}
}
);
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);
db.fileevent = require("./fileevent.model.js")(sequelize, Sequelize);
db.role.belongsToMany(db.user, {
through: "user_roles"
});
db.user.belongsToMany(db.role, {
through: "user_roles"
});
db.ROLES = ["user", "admin", "moderator"];
module.exports = db;

View File

@ -0,0 +1,13 @@
module.exports = (sequelize, Sequelize) => {
const Role = sequelize.define("roles", {
id: {
type: Sequelize.INTEGER,
primaryKey: true
},
name: {
type: Sequelize.STRING
}
});
return Role;
};

View File

@ -0,0 +1,16 @@
module.exports = (sequelize, Sequelize) => {
const User = sequelize.define("users", {
username: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
password: {
type: Sequelize.STRING
}
});
return User;
};

View File

@ -0,0 +1,22 @@
const { verifySignUp } = require("../middleware");
const controller = require("../controllers/auth.controller");
module.exports = function(app) {
app.use(function(req, res, next) {
res.header(
"Access-Control-Allow-Headers",
"x-access-token, Origin, Content-Type, Accept"
);
next();
});
app.post(
"/v1/auth/signup",
[
verifySignUp.checkDuplicateUsernameOrEmail,
verifySignUp.checkRolesExisted
],
controller.signup
);
app.post("/v1/auth/signin", controller.signin);
};

View File

@ -0,0 +1,49 @@
const { authJwt } = require("../middleware");
const controller = require("../controllers/file.controller");
module.exports = function(app) {
app.use(function(req, res, next) {
res.header(
"Access-Control-Allow-Headers",
"x-access-token, Origin, Content-Type, Accept"
);
next();
});
app.post(
"/v1/upload",
[authJwt.verifyToken],
controller.upload);
app.put(
"/v1/event/:id",
[authJwt.verifyToken],
controller.updateFile);
app.get(
"/v1/files",
// [authJwt.verifyToken],
controller.getListFiles);
app.get(
"/v1/files/:id",
[authJwt.verifyToken],
controller.verifyFile);
// app.get(
// "/v1/files/:name",
// [authJwt.verifyToken],
// controller.download);
};
// let routes = (app) => {
// router.post("/upload", controller.upload);
// router.get("/files", controller.getListFiles);
// router.get("/files/:name", controller.download);
// app.use(router);
// };
// module.exports = routes;

View File

@ -0,0 +1,39 @@
const { authJwt } = require("../middleware");
const controller = require("../controllers/user.controller");
module.exports = function(app) {
app.use(function(req, res, next) {
res.header(
"Access-Control-Allow-Headers",
"x-access-token, Origin, Content-Type, Accept"
);
next();
});
app.get("/v1/test/all", controller.allAccess);
app.get(
"/v1/test/user",
[authJwt.verifyToken],
controller.userBoard
);
app.get(
"/v1/test/mod",
[authJwt.verifyToken, authJwt.isModerator],
controller.moderatorBoard
);
app.get(
"/v1/test/admin",
[authJwt.verifyToken, authJwt.isAdmin],
controller.adminBoard
);
app.get(
"/v1/test/event",
[authJwt.verifyToken, authJwt.isAdmin],
controller.eventBoard
);
};

View File

View File

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example HTML5 site final</title>
<link rel="stylesheet" href="/css/style.css">
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
</body>
</html>

1319
src/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

22
src/package.json Normal file
View File

@ -0,0 +1,22 @@
{
"name": "ekocam-auth-service",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"bcryptjs": "^2.4.3",
"cors": "^2.8.5",
"express": "^4.19.2",
"jsonwebtoken": "^9.0.2",
"multer": "^1.4.5-lts.1",
"pg": "^8.12.0",
"pg-hstore": "^2.3.4",
"sequelize": "^6.37.3",
"uuid": "^10.0.0"
}
}

View File

@ -0,0 +1 @@
Uploads directory

71
src/server.js Normal file
View File

@ -0,0 +1,71 @@
const express = require("express");
const cors = require("cors");
const app = express();
global.__basedir = __dirname;
var corsOptions = {
origin: "*"
};
var bcrypt = require("bcryptjs");
app.use(cors(corsOptions));
// parse requests of content-type - application/json
app.use(express.json());
// parse requests of content-type - application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));
// simple route
app.get("/", (req, res) => {
res.json({ message: "Welcome to Auth application." });
});
const db = require("./app/models");
const Role = db.role;
const User = db.user;
const FileEvent = db.fileevent;
db.sequelize.sync({force: true}).then(() => {
console.log('Drop and Resync Db');
initial();
});
// routes
require('./app/routes/auth.routes')(app);
require('./app/routes/user.routes')(app);
require('./app/routes/file.routes')(app);
// set port, listen for requests
const PORT = process.env.PORT || 3201;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}.`);
});
function initial() {
Role.create({
id: 1,
name: "user"
});
Role.create({
id: 2,
name: "moderator"
});
Role.create({
id: 3,
name: "admin"
});
User.create({
username: "admin",
email: "admin@example.net",
password: bcrypt.hashSync("admin", 8)
}).then(user => {
user.setRoles([3]).then();
});
};