Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
4e34ff9
added dependencies and dev dependencies
ThorbenBender Apr 15, 2019
047e043
created the server
ThorbenBender Apr 15, 2019
14da24e
added a .env file and created a tokencreator
ThorbenBender Apr 15, 2019
63a83cc
created a routes folder
ThorbenBender Apr 15, 2019
8fa4ad6
created knexfile
ThorbenBender Apr 15, 2019
60265a7
added dbConfig file
ThorbenBender Apr 15, 2019
11b0675
created server test file
ThorbenBender Apr 15, 2019
de3175b
server testing working and added cross-env
ThorbenBender Apr 15, 2019
4d711db
created registerRoute and registerRouteHelper
ThorbenBender Apr 15, 2019
97f2112
use bcrypt to hash the password
ThorbenBender Apr 15, 2019
30b797b
use bcrypt in the register helper file instead of the route file
ThorbenBender Apr 16, 2019
57fd88d
connected server with the registerRoute
ThorbenBender Apr 16, 2019
360e4d6
added login, login helper and connected login to the server
ThorbenBender Apr 16, 2019
0565526
login is working
ThorbenBender Apr 16, 2019
bf69b2d
added a start in package.json
ThorbenBender Apr 16, 2019
a09924e
change the port
ThorbenBender Apr 16, 2019
b6f87b3
added a get user crudd
ThorbenBender Apr 16, 2019
90c58ac
removed the testing in the env file
ThorbenBender Apr 16, 2019
17cff73
will load the users on the mainpage
ThorbenBender Apr 16, 2019
e4b9933
added passport, passport setup file and a google route
ThorbenBender Apr 16, 2019
7efd110
saving the google account to user
ThorbenBender Apr 16, 2019
da4649c
working on login with google
ThorbenBender Apr 17, 2019
c692e20
getting twitter trends is working
ThorbenBender Apr 17, 2019
2d220eb
change the res of the get trends
ThorbenBender Apr 17, 2019
cebfe8b
login with google is working
ThorbenBender Apr 18, 2019
cce0044
changed the directory of the get trends route
ThorbenBender Apr 18, 2019
2fd040a
deleted get user endpoint
ThorbenBender Apr 18, 2019
e6ec9e8
register testing working
ThorbenBender Apr 19, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
2 changes: 2 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
JWT_SECRET="Super secret code"
PORT=8000
14 changes: 14 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}\\index.js"
}
]
}
17 changes: 17 additions & 0 deletions api/Routes/login/loginRoute.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const express = require('express');
const login = require('./loginRouteHelper');

const routes = express.Router();

routes.post('/', async (req, res) => {
try {
message = await login(req.body);
if (message) {
res.status(200).json(message);
}
} catch (error) {
res.status(500).json(error);
}
})

module.exports = routes;
15 changes: 15 additions & 0 deletions api/Routes/login/loginRoute.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const request = require('supertest');
const db = require('../../../data/dbConfig');

const server = require('../../../server/server');

describe('login route', () => {

it('should login succesfull', () => {
return request(server)
.post('/login')
.send({ username: "Ben 8716", password: "Test" })
.expect('Content-Type', 'application/json; charset=utf-8')
.expect(200);
})
})
18 changes: 18 additions & 0 deletions api/Routes/login/loginRouteHelper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const db = require('../../../data/dbConfig');
const bcrypt = require('bcryptjs');
const createToken = require('../../webtoken/webtoken');

async function login(user) {
newUser = await db('Users').where({ username: user.username }).first();
if (newUser) {
if (user && bcrypt.compareSync(user.password, newUser.password)) {
const token = createToken(user);
return {
message: 'You are logged in',
token,
}
}
}
}

module.exports = login;
19 changes: 19 additions & 0 deletions api/Routes/login/loginWithGoogle.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
const passport = require('passport');
const router = require('express').Router();
const createToken = require('../../webtoken/webtoken');

router.use(passport.initialize());

router.get('', passport.authenticate('google', {
scope: ['profile']
}));

router.get('/redirect', passport.authenticate('google'), (req, res) => {
token = createToken(req.user);
if (token) {
res.status(200).json({ message: 'You are logged in', token })
}
})


module.exports = router;
17 changes: 17 additions & 0 deletions api/Routes/register/registerRoute.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const express = require('express');
const register = require('./registerRouteHelper');

const route = express.Router();

route.post('', async (req, res) => {
try {
user = await register(req.body);
if (user) {
res.status(200).json(user);
}
} catch (error) {
res.status(500).json(error);
}
})

module.exports = route;
15 changes: 15 additions & 0 deletions api/Routes/register/registerRoute.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const request = require('supertest');
const db = require('../../../data/dbConfig');

const server = require('../../../server/server');


describe('register route', () => {
it('should register succesfull', () => {
return request(server)
.post('/register')
.send({ username: `Ben ${Math.floor(Math.random() * 10000)}`, password: "Test" })
.expect('Content-Type', 'application/json; charset=utf-8')
.expect(200)
})
})
12 changes: 12 additions & 0 deletions api/Routes/register/registerRouteHelper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
const db = require('../../../data/dbConfig');
const bcrypt = require('bcryptjs');



function register(user) {
hash = bcrypt.hashSync(user.password, 10);
user.password = hash;
return db('Users').insert(user);
}

module.exports = register;
25 changes: 25 additions & 0 deletions api/Routes/trends/trendsRoute.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const router = require('express').Router();
const Twitter = require('twitter');

const client = new Twitter({
consumer_key: '4mHbWoxb3JzcfIFUyjDlyJL6h',
consumer_secret: 'EJa6iru09FRUVHpI7XRcR4m1DX0XSlZIapxTZLoRabqCIUwgFF',
bearer_token: 'AAAAAAAAAAAAAAAAAAAAAMQL%2BAAAAAAAOZVd9ROoyKKWxmET%2FkCxS8aqrrw%3DhgbkeyZVPR7P6VtVhaY4mx25Y9aZ88jteTj3fu31vlCJURej8T',
});

router.get('', async (req, res) => {
try {
var params = { screen_name: 'nodejs', id: 1 };
client.get('/trends/place.json', params, function (error, tweets, response) {
if (!error) {
res.status(200).json(tweets[0].trends);
} else {
res.send(error);
}
});
} catch (error) {
res.status(500).json(error);
}
})

module.exports = router;
6 changes: 6 additions & 0 deletions api/config/keys.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
google: {
client_id: '270161845360-vhnm28ub30m36r7622065bnk0a5h763q.apps.googleusercontent.com',
client_secret: 'g0ZpdQZ8iJghn77yFeN8cMY2'
}
}
35 changes: 35 additions & 0 deletions api/config/passport-setup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20');
const keys = require('./keys');
const db = require('../../data/dbConfig');
const bcrypt = require('bcryptjs');

passport.serializeUser((user, done) => {
done(null, user);
})

passport.deserializeUser((user, done) => {
done(null, user);
})

passport.use(
new GoogleStrategy({
callbackURL: '/login/google/redirect',
clientID: keys.google.client_id,
clientSecret: keys.google.client_secret
}, (accessToken, refreshToken, profile, done) => {
const hashed = bcrypt.hashSync(profile.id, 10);
profile.id = hashed;
db('Users').where({ username: profile.displayName }).first()
.then(user => {
if (user) {
done(null, user);
} else {
db('Users').insert({ username: profile.displayName, password: profile.id })
.then(user => {
done(null, user);
})
}
})
})
)
15 changes: 15 additions & 0 deletions api/webtoken/webtoken.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const jwt = require('jsonwebtoken');

const createToken = user => {
const payload = {
subject: user.user_id,
username: user.username
};
const options = {
expiresIn: '1h'
};
const token = jwt.sign(payload, process.env.JWT_SECRET, options);
return token;
}

module.exports = createToken;
Binary file added data/buildWeek.db3
Binary file not shown.
6 changes: 6 additions & 0 deletions data/dbConfig.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
const knex = require('knex');
const config = require('../knexfile');

const dbEnv = process.env.DB_ENV || 'development';

module.exports = knex(config[dbEnv]);
14 changes: 14 additions & 0 deletions data/migrations/20190415204301_createUserTable.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

exports.up = function (knex, Promise) {
return knex.schema.createTable('Users', table => {
table.increments('user_id');

table.string('username').unique().notNullable();

table.string('password').notNullable();
})
};

exports.down = function (knex, Promise) {
return knex.schema.dropTableIfExists('Users');
};
14 changes: 14 additions & 0 deletions data/migrations/20190416205506_searchTable.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@

exports.up = function (knex, Promise) {
return knex.schema.createTable('Searches', table => {
table.increments('search_id');

table.string('search_message').notNullable();

table.integer('User').references('user_id').inTable('Users');
})
};

exports.down = function (knex, Promise) {
return knex.schema.dropTableIfExists('Searches');
};
Binary file added data/test.db3
Binary file not shown.
10 changes: 10 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
require('dotenv').config();
const server = require('./server/server');
const passportSetup = require('./api/config/passport-setup');

port = process.env.PORT || 8000


server.listen(port, () => {
console.log(`Server listening on http://localhost:${port}`);
})
Loading