Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Jp #31

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Open

Jp #31

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
1 change: 1 addition & 0 deletions backend/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
2 changes: 2 additions & 0 deletions backend/.env.sample
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,5 @@ DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=postgres

COOKIE_SECRET="uma secret key bem legal aqui"
13 changes: 11 additions & 2 deletions backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
FROM node:14-alpine as base
FROM node:18-alpine as base
WORKDIR /src
COPY package*.json ./
EXPOSE 3000

FROM base as production
ENV NODE_ENV=production
RUN npm ci

RUN npm install

RUN npm install node-gyp -g && \
npm install bcrypt -g && \
npm install bcrypt --save

# apk del make gcc g++ python

COPY --chown=node:node . ./

USER node
CMD ["npm", "start"]
60 changes: 44 additions & 16 deletions backend/app.js
Original file line number Diff line number Diff line change
@@ -1,27 +1,55 @@
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var quotesRouter = require('./routes/quotes');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const morgan = require('morgan');

var app = express();
require('express-async-errors')

app.use(function (req, res, next) {
// Allow-origin from frontend
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8000');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
next();
});
require('dotenv').config()

const port = 3000 || process.env.PORT

// importing middlewares
const {
allowFrontendMiddleware,
errorHandlerMiddleware,
notFoundMiddleware
} = require('./middlewares')

// importing Routers
const indexRouter = require('./routes/indexRouter');
const quotesRouter = require('./routes/quotesRouter');
const statusRouter = require('./routes/statusRouter')
const userRouter = require('./routes/userRouter')
const authRouter = require('./routes/authRouter')

// creating app
const app = express();

// maybe could use cors, idk
app.use(allowFrontendMiddleware);

if(process.env.NODE_ENV === 'development') {
app.use(morgan('dev'));
}

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(cookieParser(process.env.COOKIE_SECRET)); // cookies are sent to req.signedCookies

// applying routes
app.use('/', indexRouter);
app.use('/quotes', quotesRouter);
app.use('/status', statusRouter)
app.use('/user', userRouter)
app.use('/auth', authRouter)

app.use(notFoundMiddleware)
app.use(errorHandlerMiddleware)

app.listen(port, () => {
console.log(`Listening on port ${port}`)
})

module.exports = app;
90 changes: 0 additions & 90 deletions backend/bin/www

This file was deleted.

3 changes: 3 additions & 0 deletions backend/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ const config = {
database: env.DB_NAME || 'cklijfef',
},
listPerPage: env.LIST_PER_PAGE || 10,
roles: ['user', 'admin'],
privilegedRoles: ['admin'],
NODE_ENV: env.NODE_ENV
};

module.exports = config;
26 changes: 26 additions & 0 deletions backend/controllers/auth/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

const { StatusCodes } = require('http-status-codes')
const authService = require('../../services/auth/authService')
const { attachCookieToResponse } = require('../../utils/jwt')
const createCookiePayloadFromUser = require('../../utils/create-cookie-payload-from-user.js')

const registerUser = async (req, res) => {
const user = await authService.register(req.body)
const payload = createCookiePayloadFromUser(user)
attachCookieToResponse(res, payload)
res.status(StatusCodes.CREATED).json({ message: 'success' })
}

const loginUser = async (req, res) => {
// req.body has email and password
const user = await authService.login(req.body)
const payload = createCookiePayloadFromUser(user)
attachCookieToResponse(res, payload)
res.status(StatusCodes.OK).json({ message: 'success' })
}

module.exports = {
registerUser,
loginUser
}

26 changes: 26 additions & 0 deletions backend/controllers/quotes/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

const { StatusCodes } = require('http-status-codes')
const quotesService = require('../../services/quotes/quotesService');

const createQuote = async (req, res) => {
await quotesService.create(req.body)
res.status(StatusCodes.CREATED).json({
message: 'Success'
});
}

const getQuotesPage = async (req, res) => {
const { data, meta } = await quotesService.getMultiple(req.query.page) // default value === 1
res.status(StatusCodes.OK).json({
data,
meta: {
...meta,
size: data.length
},
});
}

module.exports = {
createQuote,
getQuotesPage
}
46 changes: 46 additions & 0 deletions backend/controllers/status/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@

const { StatusCodes } = require('http-status-codes')
const statusService = require('../../services/status/statusService');

const createStatus = async (req, res) => {
await statusService.create(req.body)
res.status(StatusCodes.CREATED).json({
message: 'Success'
});
}

const getStatusPage = async (req, res) => {
const { data, meta } = await statusService.getMultiple(req.query.page) // default value === 1
res.status(StatusCodes.OK).json({
data,
meta: {
...meta,
size: data.length
},
});
}

const updateStatus = async (req, res) => {
const updateObject = {
id: req.params.id,
status: req.body.status
}
await statusService.update(updateObject)
res.status(StatusCodes.OK).json({
message: 'Success'
});
}

const deleteStatus = async (req, res) => {
await statusService.deleteSt(req.params.id)
res.status(StatusCodes.OK).json({
message: 'Success'
});
}

module.exports = {
createStatus,
getStatusPage,
updateStatus,
deleteStatus
}
18 changes: 18 additions & 0 deletions backend/controllers/user/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@

const { StatusCodes } = require('http-status-codes')
const userService = require('../../services/user/userService')

const getUserPage = async (req, res) => {
const {data, meta} = await userService.getMultiple(req.query.page)
res.status(StatusCodes.OK).json({
data,
meta: {
...meta,
size: data.length
},
});
}

module.exports = {
getUserPage
}
31 changes: 12 additions & 19 deletions backend/db/sql/init.sql → backend/db/sql/1-init.sql
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
DROP TABLE IF EXISTS USUARIOS CASCADE;
DROP TABLE IF EXISTS ADMIN CASCADE;
DROP TABLE IF EXISTS AVISOS_CATEGORIA CASCADE;
DROP TABLE IF EXISTS AVISOS CASCADE;
DROP TABLE IF EXISTS SLIDES CASCADE;
Expand All @@ -9,7 +8,7 @@ DROP TABLE IF EXISTS NOTICIAS CASCADE;
DROP TABLE IF EXISTS FAQ CASCADE;
DROP TABLE IF EXISTS HORARIOS CASCADE;

CREATE TABLE quote (
CREATE TABLE QUOTE (
id SERIAL PRIMARY KEY,
quote character varying(255) NOT NULL UNIQUE,
author character varying(255) NOT NULL,
Expand All @@ -19,25 +18,18 @@ CREATE TABLE quote (

CREATE TABLE USUARIOS (
id SERIAL PRIMARY KEY,
username character varying(255) NOT NULL,
username character varying(255) NOT NULL UNIQUE,
name character varying(255) NOT NULL,
password character varying(255) NOT NULL,
mail character varying(255) NOT NULL,
mail character varying(255) NOT NULL UNIQUE,
shell character varying(255) DEFAULT '/bin/bash' NOT NULL,
user_group character varying(255) NOT NULL,
ssh_access boolean DEFAULT TRUE NOT NULL,
link_type character varying(255) NOT NULL,
institute character varying(255) NOT NULL,
auth_key character varying(255) NOT NULL,
last_login timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL
);

CREATE TABLE ADMIN (
id SERIAL PRIMARY KEY,
login character varying(255) NOT NULL,
password character varying(255) NOT NULL,
name character varying(255) NOT NULL,
description character varying(255) DEFAULT '/bin/bash' NOT NULL,
auth_key character varying(255) NOT NULL
last_login timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL,
description character varying(255) DEFAULT 'Usuario',
role character varying(255) DEFAULT 'user' NOT NULL
);

CREATE TABLE AVISOS_CATEGORIA (
Expand Down Expand Up @@ -78,7 +70,7 @@ CREATE TABLE SLIDES_BOTOES (

CREATE TABLE STATUS (
id SERIAL PRIMARY KEY,
machine character varying(255) NOT NULL,
machine character varying(255) NOT NULL UNIQUE,
status boolean NOT NULL
);

Expand All @@ -90,7 +82,7 @@ CREATE TABLE NOTICIAS (
author_id INTEGER NOT NULL,

CONSTRAINT noticia_author_ct FOREIGN KEY (author_id)
REFERENCES ADMIN (id)
REFERENCES USUARIOS (id)
);

CREATE TABLE FAQ (
Expand All @@ -106,6 +98,7 @@ CREATE TABLE HORARIOS (
end_time time NOT NULL,
admin_id INTEGER NOT NULL,

CONSTRAINT horario_admin_ct FOREIGN KEY (admin_id)
REFERENCES ADMIN (id)
CONSTRAINT fk_admin
FOREIGN KEY(admin_id)
REFERENCES USUARIOS(id)
);
Loading