Skip to content

Commit

Permalink
Merge d010190 into 58d762b
Browse files Browse the repository at this point in the history
  • Loading branch information
salviosage committed Oct 10, 2019
2 parents 58d762b + d010190 commit f8a0299
Show file tree
Hide file tree
Showing 10 changed files with 147 additions and 150 deletions.
4 changes: 3 additions & 1 deletion src/app.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import winston from 'winston';
import express from 'express';
import bodyParser from 'body-parser';
import logging from './helpers/logging';
import routes from './routes/index';
import './config/cloudinary.config';
import { mock } from './middlewares/validators/socialLogin-mock';


const app = express();
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));

if (process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'development') {
app.use(mock);
Expand Down
89 changes: 42 additions & 47 deletions src/controllers/social.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import dotenv from 'dotenv';
import User from '../services/user.service';
import Helper from '../helpers/helper';
import randPass from '../helpers/passwordgen';
import dbService from '../services/db.service';

dotenv.config();

let data;

/**
Expand All @@ -21,56 +24,48 @@ class Social {
* @memberof Social
*/
static async login(req, res) {
let user;
let message;
let status = 200;
let registeredUser;
data = req.user;
const firstname = data.name ? data.name.givenName : data.displayName.split(' ')[0];
const lastname = data.name ? data.name.middleName || data.name.familyName : data.displayName.split(' ')[1];
const email = data.emails ? data.emails[0].value : '';
const username = `${firstname}.${lastname}`;
// check if user is in db
const tempUser = await User.findOne(email, username);
if (data.provider === 'twitter') {
registeredUser = await dbService.getStat({
firstname: lastname.toLowerCase(), lastname: firstname.toLowerCase()
}, 'user')[0] || tempUser;
} else {
registeredUser = tempUser;
}
if (registeredUser) {
user = registeredUser;
message = 'Logged in successfully';
} else {
const pass = randPass();
const password = Helper.hashPassword(pass);
status = 201;
const newUser = {
firstname, lastname, email, username, password
};
user = await User.addUser(newUser);
message = `Account created with password ${pass}, please change your password`;
if (data.provider === 'twitter') {
message += ' and update your email address';
console.log('cccc', message);
const type = data.provider;
try {
let user;
let registeredUser;
const firstname = data.name ? data.name.givenName : data.displayName.split(' ')[0];
const lastname = data.name ? data.name.middleName || data.name.familyName : data.displayName.split(' ')[1];
const email = data.emails ? data.emails[0].value : '';
const image = data.photos ? data.photos[0].value : '';
const username = `${firstname}.${lastname}.${type}`;
const tempUser = await User.findOne(email, username);
if (type === 'twitter') {
registeredUser = await dbService.getStat({
firstname: lastname.toLowerCase(), lastname: firstname.toLowerCase()
}, 'user')[0] || tempUser;
} else {
registeredUser = tempUser;
}
if (registeredUser) {
user = registeredUser;
} else {
const pass = randPass();
const password = Helper.hashPassword(pass);
const verified = true;
const newUser = {
firstname, lastname, email, username, password, verified, image
};
user = await User.addUser(newUser);
}
const payload = {
id: user.id,
email,
role: user.role,
verified: user.verified
};
const token = Helper.generateToken(payload);
return res.redirect(`${process.env.FRONT_END_URL}/${type}/social-login?socialToken=${token}`);
} catch (error) {
return res.redirect(`${process.env.FRONT_END_URL}/${type}/social-login`);
}
const payload = {
id: user.id,
email,
role: user.role,
verified: user.verified
};
const token = Helper.generateToken(payload);
return res.status(status).json({
message,
status,
token,
data: {
firstname, lastname, username, email
},
});

// check if user is in db
}
}

Expand Down
20 changes: 12 additions & 8 deletions src/controllers/user.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -122,8 +122,7 @@ class UserController {
verified: createdUser.verified
};
const token = await Helper.generateToken(payload);
const verifyUrl = `${process.env.BACKEND_URL}/api/${process.env.API_VERSION}/users/verify?
token=${token}`;
const verifyUrl = `${process.env.FRONT_END_URL}/verify?token=${token}`;
const verify = EmailHelper.sendEmail(payload.email, username, verifyUrl);

return verify
Expand Down Expand Up @@ -168,6 +167,13 @@ class UserController {
message: 'An account with this email already exists'
});
}
const theUsername = await UserService.findOne('', req.body.username);
if (theUsername) {
return res.status(409).send({
status: 409,
message: 'username is taken'
});
}
const hashPassword = await Helper.hashPassword(req.body.password);
if (!hashPassword) {
return res.status(401).send({
Expand All @@ -185,9 +191,7 @@ class UserController {
verified: createdUser.verified
};
const token = await Helper.generateToken(payload);
const verifyUrl = `${process.env.BACKEND_URL}/api/${
process.env.API_VERSION
}/users/verify?token=${token}`;
const verifyUrl = `${process.env.FRONT_END_URL}/verify?token=${token}`;
await EmailHelper.sendEmail(payload.email, newUser.username, verifyUrl);
return res.status(201).json({
status: 201,
Expand All @@ -197,10 +201,10 @@ class UserController {
token
});
} catch (error) {
const { response: { body: { errors } } } = error;
// const { response: { body: { errors } } } = error;
return res.status(404).send({
status: 404,
message: errors[0].message
message: error
});
}
}
Expand Down Expand Up @@ -408,7 +412,7 @@ class UserController {

const token = await Helper.generateToken(payload, (60 * 60));
// create password reset link
const resetUrl = `${process.env.BACKEND_URL}/api/${process.env.API_VERSION}/users/reset/${token}`;
const resetUrl = `${process.env.FRONT_END_URL}/reset?token=${token}`;

// send email to user email address
const emailSent = await sendPasswordResetEmailHelper.sendEmail(user.email, user.username, resetUrl);
Expand Down
1 change: 0 additions & 1 deletion src/middlewares/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ const validateToken = async (req, res, next) => {
message: 'You are logged out!'
});
}

jwt.verify(token, process.env.SECRET_KEY, (err, decode) => {
if (err) {
return res.status(401).send({
Expand Down
5 changes: 4 additions & 1 deletion src/middlewares/validators/user.profile.validator.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ export default (req, res, next) => {
.max(20),
bio: Joi.string()
.trim()
.min(20)
.min(0)
.max(200)
.allow('')
.allow(null),
};
const { error } = Joi.validate({
bio, username
Expand Down
5 changes: 1 addition & 4 deletions src/routes/api/user/user.route.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import validateToken from '../../../middlewares/auth';
import validateUser from '../../../middlewares/validators/signup.validation';
import validateUserId from '../../../middlewares/validators/userId.validation';
import admin from '../../../middlewares/admin';
import verifyEmail from '../../../controllers/verify-controller';
import confirmEmaiAuth from '../../../middlewares/emailVarification.middleware';
import followController from '../../../controllers/follow.controller';
import resetPasswordValidation from '../../../middlewares/validators/resetpassword.validation';
Expand Down Expand Up @@ -47,8 +46,6 @@ router.delete('/bookmarks', [validateToken, confirmEmaiAuth], checkUserBookMarks

// stats route
router.get('/stats', saveStat, checkStats, getStats);

router.get('/verify', verifyEmail);
router.get('/allusers', [validateToken, admin, confirmEmaiAuth], UserController.getAllUsers);
router.post('/signup', validateUser, UserController.signup);
router.post('/login', UserController.login);
Expand All @@ -68,6 +65,6 @@ router.patch('/reset/:token', resetPasswordValidation, UserController.handlePass

// reset password route handlers
router.post('/reset', UserController.requestPasswordReset);
router.patch('/reset/:token', resetPasswordValidation, UserController.handlePasswordReset);
router.put('/reset/:token', resetPasswordValidation, UserController.handlePasswordReset);

export default router;
7 changes: 2 additions & 5 deletions src/routes/index.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import express from 'express';
import session from 'express-session';
import bodyParser from 'body-parser';
import cors from 'cors';
import dotenv from 'dotenv';
import passport from 'passport';
import verifyEmail from '../controllers/verify-controller';

import api from './api/index.route';
import oauth from './api/oauth/oauth.routes';
Expand All @@ -14,9 +14,6 @@ import { mock } from '../middlewares/validators/socialLogin-mock';
dotenv.config();

const router = express.Router();

router.use(bodyParser.json());
router.use(bodyParser.urlencoded({ extended: true }));
router.use(cors());
router.use(
session({
Expand All @@ -35,7 +32,7 @@ router.use(passport.initialize());
const apiVersion = process.env.API_VERSION;

const baseUrl = `/api/${apiVersion}`;

router.put('/verifyemail', verifyEmail);
router.get('/', (req, res) => res.status(200).json({ status: 200, data: 'Welcome to Authors Haven.' }));
router.use(baseUrl, api);
router.use(oauth);
Expand Down
Loading

0 comments on commit f8a0299

Please sign in to comment.