Compare commits
No commits in common. "743f08189cc166c8e1b774df478d998aff6a5b18" and "384956677228c2ed899d974ea7ece681d953c14b" have entirely different histories.
743f08189c
...
3849566772
7 changed files with 49 additions and 79 deletions
|
@ -8,7 +8,7 @@ import Button from '../../../common/Button';
|
|||
function SignupForm(props) {
|
||||
const {
|
||||
fields: {
|
||||
username, /* email, */ password, confirmPassword
|
||||
username, email, password, confirmPassword
|
||||
},
|
||||
handleSubmit,
|
||||
submitting,
|
||||
|
@ -33,7 +33,7 @@ function SignupForm(props) {
|
|||
<span className="form-error">{username.error}</span>
|
||||
)}
|
||||
</p>
|
||||
{/* <p className="form__field">
|
||||
<p className="form__field">
|
||||
<label htmlFor="email" className="form__label">{props.t('SignupForm.Email')}</label>
|
||||
<input
|
||||
className="form__input"
|
||||
|
@ -45,7 +45,7 @@ function SignupForm(props) {
|
|||
{email.touched && email.error && (
|
||||
<span className="form-error">{email.error}</span>
|
||||
)}
|
||||
</p> */}
|
||||
</p>
|
||||
<p className="form__field">
|
||||
<label htmlFor="password" className="form__label">{props.t('SignupForm.Password')}</label>
|
||||
<input
|
||||
|
@ -84,7 +84,7 @@ function SignupForm(props) {
|
|||
SignupForm.propTypes = {
|
||||
fields: PropTypes.shape({
|
||||
username: PropTypes.object.isRequired, // eslint-disable-line
|
||||
// email: PropTypes.object.isRequired, // eslint-disable-line
|
||||
email: PropTypes.object.isRequired, // eslint-disable-line
|
||||
password: PropTypes.object.isRequired, // eslint-disable-line
|
||||
confirmPassword: PropTypes.object.isRequired, // eslint-disable-line
|
||||
}).isRequired,
|
||||
|
|
|
@ -9,9 +9,9 @@ import * as UserActions from '../actions';
|
|||
import SignupForm from '../components/SignupForm';
|
||||
import apiClient from '../../../utils/apiClient';
|
||||
import { validateSignup } from '../../../utils/reduxFormUtils';
|
||||
// import SocialAuthButton from '../components/SocialAuthButton';
|
||||
import SocialAuthButton from '../components/SocialAuthButton';
|
||||
import Nav from '../../../components/Nav';
|
||||
// import ResponsiveForm from '../components/ResponsiveForm';
|
||||
import ResponsiveForm from '../components/ResponsiveForm';
|
||||
|
||||
|
||||
class SignupView extends React.Component {
|
||||
|
@ -123,9 +123,9 @@ SignupView.defaultProps = {
|
|||
|
||||
export default withTranslation()(reduxForm({
|
||||
form: 'signup',
|
||||
fields: ['username', /* 'email', */ 'password', 'confirmPassword'],
|
||||
fields: ['username', 'email', 'password', 'confirmPassword'],
|
||||
onSubmitFail,
|
||||
validate: validateSignup,
|
||||
asyncValidate,
|
||||
asyncBlurFields: ['username'/* , 'email' */]
|
||||
asyncBlurFields: ['username', 'email']
|
||||
}, mapStateToProps, mapDispatchToProps)(SignupView));
|
||||
|
|
|
@ -28,11 +28,9 @@ function validateNameEmail(formProps, errors) {
|
|||
errors.username = i18n.t('ReduxFormUtils.errorValidUsername');
|
||||
}
|
||||
|
||||
// if (!formProps.email) {
|
||||
// errors.email = i18n.t('ReduxFormUtils.errorEmptyEmail');
|
||||
// } else
|
||||
if (
|
||||
formProps.email &&
|
||||
if (!formProps.email) {
|
||||
errors.email = i18n.t('ReduxFormUtils.errorEmptyEmail');
|
||||
} else if (
|
||||
// eslint-disable-next-line max-len
|
||||
!formProps.email.match(EMAIL_REGEX)) {
|
||||
errors.email = i18n.t('ReduxFormUtils.errorInvalidEmail');
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "HALLO!"
|
||||
echo "Starting the mongodb daemon"
|
||||
/usr/bin/mongod --fork --syslog
|
||||
|
||||
# echo "navigating to volume /var/www"
|
||||
# cd /var/www
|
||||
# echo "Creating soft link"
|
||||
# ln -s /opt/mysite mysite
|
||||
|
||||
# a2enmod headers
|
||||
# service apache2 restart
|
||||
|
||||
# a2ensite mysite.conf
|
||||
# a2dissite 000-default.conf
|
||||
# service apache2 reload
|
||||
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
exec npm run start:prod
|
||||
else
|
||||
exec "$1"
|
||||
fi
|
|
@ -24,7 +24,7 @@ passport.deserializeUser((id, done) => {
|
|||
* Sign in using Email/Username and Password.
|
||||
*/
|
||||
passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
|
||||
User.findByUsername(email)
|
||||
User.findByEmailOrUsername(email)
|
||||
.then((user) => { // eslint-disable-line consistent-return
|
||||
if (!user) {
|
||||
return done(null, false, { msg: `Email ${email} not found.` });
|
||||
|
|
|
@ -12,7 +12,7 @@ export * from './user.controller/apiKey';
|
|||
|
||||
export function userResponse(user) {
|
||||
return {
|
||||
// email: user.email,
|
||||
email: user.email,
|
||||
username: user.username,
|
||||
preferences: user.preferences,
|
||||
apiKeys: user.apiKeys,
|
||||
|
@ -36,32 +36,31 @@ export function findUserByUsername(username, cb) {
|
|||
}
|
||||
|
||||
export function createUser(req, res, next) {
|
||||
const { username, _ } = req.body;
|
||||
const { username, email } = req.body;
|
||||
const { password } = req.body;
|
||||
// const emailLowerCase = email ? email.toLowerCase() : null;
|
||||
const emailLowerCase = email.toLowerCase();
|
||||
const EMAIL_VERIFY_TOKEN_EXPIRY_TIME = Date.now() + (3600000 * 24); // 24 hours
|
||||
random((tokenError, token) => {
|
||||
const user = new User({
|
||||
username,
|
||||
// email: emailLowerCase,
|
||||
email: emailLowerCase,
|
||||
password,
|
||||
verified: User.EmailConfirmation.Sent,
|
||||
verifiedToken: token,
|
||||
verifiedTokenExpires: EMAIL_VERIFY_TOKEN_EXPIRY_TIME,
|
||||
});
|
||||
|
||||
User.findByUsername(username, (err, existingUser) => {
|
||||
User.findByEmailAndUsername(email, username, (err, existingUser) => {
|
||||
if (err) {
|
||||
res.status(404).send({ error: err });
|
||||
return;
|
||||
}
|
||||
|
||||
if (existingUser) {
|
||||
const fieldInUse = 'Username';
|
||||
const fieldInUse = existingUser.email.toLowerCase() === emailLowerCase ? 'Email' : 'Username';
|
||||
res.status(422).send({ error: `${fieldInUse} is in use` });
|
||||
return;
|
||||
}
|
||||
|
||||
user.save((saveErr) => {
|
||||
if (saveErr) {
|
||||
next(saveErr);
|
||||
|
@ -74,17 +73,17 @@ export function createUser(req, res, next) {
|
|||
}
|
||||
|
||||
const protocol = process.env.NODE_ENV === 'production' ? 'https' : 'http';
|
||||
// const mailOptions = renderEmailConfirmation({
|
||||
// body: {
|
||||
// domain: `${protocol}://${req.headers.host}`,
|
||||
// link: `${protocol}://${req.headers.host}/verify?t=${token}`
|
||||
// },
|
||||
// to: req.user.email,
|
||||
// });
|
||||
const mailOptions = renderEmailConfirmation({
|
||||
body: {
|
||||
domain: `${protocol}://${req.headers.host}`,
|
||||
link: `${protocol}://${req.headers.host}/verify?t=${token}`
|
||||
},
|
||||
to: req.user.email,
|
||||
});
|
||||
|
||||
// mail.send(mailOptions, (mailErr, result) => { // eslint-disable-line no-unused-vars
|
||||
mail.send(mailOptions, (mailErr, result) => { // eslint-disable-line no-unused-vars
|
||||
res.json(userResponse(req.user));
|
||||
// });
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -143,19 +142,18 @@ export function resetPasswordInitiate(req, res) {
|
|||
async.waterfall([
|
||||
random,
|
||||
(token, done) => {
|
||||
// disable since we don't use email
|
||||
// User.findByEmail(req.body.email, (err, user) => {
|
||||
// if (!user) {
|
||||
// res.json({ success: true, message: 'If the email is registered with the editor, an email has been sent.' });
|
||||
// return;
|
||||
// }
|
||||
// user.resetPasswordToken = token;
|
||||
// user.resetPasswordExpires = Date.now() + 3600000; // 1 hour
|
||||
User.findByEmail(req.body.email, (err, user) => {
|
||||
if (!user) {
|
||||
res.json({ success: true, message: 'If the email is registered with the editor, an email has been sent.' });
|
||||
return;
|
||||
}
|
||||
user.resetPasswordToken = token;
|
||||
user.resetPasswordExpires = Date.now() + 3600000; // 1 hour
|
||||
|
||||
// user.save((saveErr) => {
|
||||
// done(saveErr, token, user);
|
||||
// });
|
||||
// });
|
||||
user.save((saveErr) => {
|
||||
done(saveErr, token, user);
|
||||
});
|
||||
});
|
||||
},
|
||||
(token, user, done) => {
|
||||
const protocol = process.env.NODE_ENV === 'production' ? 'https' : 'http';
|
||||
|
|
|
@ -50,7 +50,7 @@ const userSchema = new Schema({
|
|||
verifiedToken: String,
|
||||
verifiedTokenExpires: Date,
|
||||
github: { type: String },
|
||||
email: { type: String },
|
||||
email: { type: String, unique: true },
|
||||
tokens: Array,
|
||||
apiKeys: { type: [apiKeySchema] },
|
||||
preferences: {
|
||||
|
@ -192,10 +192,10 @@ userSchema.statics.findByUsername = function findByUsername(username, cb) {
|
|||
* @return {Promise<Object>} - Returns Promise fulfilled by User document
|
||||
*/
|
||||
userSchema.statics.findByEmailOrUsername = function findByEmailOrUsername(value, cb) {
|
||||
// const isEmail = value.indexOf('@') > -1;
|
||||
// if (isEmail) {
|
||||
// return this.findByEmail(value, cb);
|
||||
// }
|
||||
const isEmail = value.indexOf('@') > -1;
|
||||
if (isEmail) {
|
||||
return this.findByEmail(value, cb);
|
||||
}
|
||||
return this.findByUsername(value, cb);
|
||||
};
|
||||
|
||||
|
@ -210,11 +210,11 @@ userSchema.statics.findByEmailOrUsername = function findByEmailOrUsername(value,
|
|||
* @return {Promise<Object>} - Returns Promise fulfilled by User document
|
||||
*/
|
||||
userSchema.statics.findByEmailAndUsername = function findByEmailAndUsername(email, username, cb) {
|
||||
const query = { username // override username only as we don't want to register email addresses
|
||||
// $or: [
|
||||
// { email },
|
||||
// { username }
|
||||
// ]
|
||||
const query = {
|
||||
$or: [
|
||||
{ email },
|
||||
{ username }
|
||||
]
|
||||
};
|
||||
return this.findOne(query).collation({ locale: 'en', strength: 2 }).exec(cb);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue