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
3,180 changes: 3,180 additions & 0 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@
"author": "",
"license": "ISC",
"dependencies": {
"bcrypt": "^1.0.3",
"body-parser": "^1.17.1",
"ejs": "^2.5.6",
"express": "^4.15.2",
"express-session": "^1.15.5",
"pg-promise": "^6.2.1"
},
"devDependencies": {
Expand Down
6 changes: 6 additions & 0 deletions src/auth/authPass.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// const bcrypt = require('bcrypt')

// module.exports = ( password, user ) => {
// return bcrypt.compare( password, user.password )
// }

11 changes: 10 additions & 1 deletion src/db/schema/schema.sql
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
DROP TABLE IF EXISTS contacts;
DROP TABLE IF EXISTS users;


CREATE TABLE contacts (
id serial,
id SERIAL PRIMARY KEY,
first_name varchar(255) NOT NULL,
last_name varchar(255) NOT NULL
);

CREATE TABLE users (
id SERIAL PRIMARY KEY,
username TEXT UNIQUE NOT NULL,
password TEXT NOT NULL,
role TEXT NOT NULL
);
17 changes: 17 additions & 0 deletions src/db/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const express = require('express');
const router = express.Router();
const db = require('./db');

const createUser = function( username, password ) {
return db.none(`INSERT INTO users(username, password, role)
VALUES($1, $2, 'regular')`, [ username, password ]);
}

const getUser = function(username) {
return db.one(`SELECT * FROM users WHERE username = $1`, [username]);
}

module.exports = {
createUser,
getUser
}
7 changes: 7 additions & 0 deletions src/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,17 @@ const dbContacts = require('./db/contacts')
const app = express()
const {renderError} = require('./server/utils')
const routes = require('./server/routes');
const session = require('express-session')

app.set('view engine', 'ejs');
app.set('views', __dirname + '/views')

app.use(session(
{
secret: 'testesttestsdfsdfsdf'
}
));

app.use(express.static('public'))
app.use(bodyParser.urlencoded({ extended: false }))
app.use((request, response, next) => {
Expand Down
12 changes: 12 additions & 0 deletions src/server/middlewares/logInSignUp.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const logInSignUp = ( request, response, next ) => {
const user = request.session.user;

if (!user) {
request.session.user = 'test';
response.render('logInSignUp');
} else if (user) {
next();
}
}

module.exports = logInSignUp;
20 changes: 18 additions & 2 deletions src/server/routes/index.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,29 @@
const router = require('express').Router();
const contacts = require('./contacts')
const DbContacts = require('../../db/contacts');
const loginSignUp = require('../middlewares/loginSignUp')
const users = require('./users');

router.use( '/users', users );

router.get('/', loginSignUp, (request, response) => {
response.locals.username = request.session.user.username;
response.locals.role = request.session.user.role;

router.get('/', (request, response) => {
DbContacts.getContacts()
.then((contacts) => {response.render('index', { contacts })})
.catch( err => console.log('err', err) )
})

router.use('/contacts', contacts); // /contacts/search
router.get('/signup', (request, response) => {
response.render('signup')
})

router.get('/login', (request, response) => {
response.render('login', {error: false});
})

router.use( '/contacts', contacts ); // /contacts/search


module.exports = router;
37 changes: 37 additions & 0 deletions src/server/routes/users.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const express = require('express');
const router = express.Router();
const db = require('../../db/users');

const bcrypt = require('bcrypt');

router.post('/createuser', (request, response) => {
const { username, password } = request.body;

bcrypt.hash(password, 10, function (err, hash) {
db.createUser(username, hash)
.catch(err => console.log('err', err));
response.redirect('/login');
});
});

router.post('/loginuser', (request, response) => {
const { username, password: plainPassword } = request.body;

db.getUser(username)
.then((user) => {
bcrypt.compare(plainPassword, user.password, function (err, res) {
if (res === true) {
request.session.user = user;
response.redirect('/');
}
else {
response.render('login', { error: true });
}
});
})
.catch((noUser) => {
response.render('login', { error: true });
});
});

module.exports = router;
10 changes: 10 additions & 0 deletions src/views/logInSignUp.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Sign In / Sign Up</title>
</head>
<body>
<a href="/signup">Sign Up</a>
<a href="/login">Log In</a>
</body>
</html>
25 changes: 25 additions & 0 deletions src/views/login.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html>
<header>
<title>Log In</title>
</header>

<body>
<form method="POST" action="/users/loginuser">
<h1>Log In</h1>
<label for="username"> Username: </label>
<input type="text" name="username" id="username" />
<label for="password"> Password: </label>
<input type="text" name="password" id="password" />
<input type="submit" />
</form>

<% if (error === true) {%>
<p style="color:red">
Please verify your username and/or password.
</p>
<% } %>

</body>

</html>
16 changes: 16 additions & 0 deletions src/views/signup.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Sign In</title>
</head>
<body>
<form method="POST" action="/users/createuser">
<h1>Sign up!</h1>
<label for="username">Username:</label>
<input type="text" name="username" id="username"/>
<label for="password">Password:</label>
<input type="text" name="password" id="password"/>
<input type="submit"/>
</form>
</body>
</html>