Compare commits

...

2 Commits

Author SHA1 Message Date
Ruben van de Ven 743f08189c Add docker-entrypoint.sh - used by Dockerfile 2021-01-27 22:15:11 +01:00
Ruben van de Ven 34aab31921 Remove email from signup form - email not required anymore! 2021-01-27 22:14:21 +01:00
7 changed files with 79 additions and 49 deletions

View File

@ -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,

View File

@ -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));

View File

@ -28,9 +28,11 @@ function validateNameEmail(formProps, errors) {
errors.username = i18n.t('ReduxFormUtils.errorValidUsername');
}
if (!formProps.email) {
errors.email = i18n.t('ReduxFormUtils.errorEmptyEmail');
} else if (
// if (!formProps.email) {
// errors.email = i18n.t('ReduxFormUtils.errorEmptyEmail');
// } else
if (
formProps.email &&
// eslint-disable-next-line max-len
!formProps.email.match(EMAIL_REGEX)) {
errors.email = i18n.t('ReduxFormUtils.errorInvalidEmail');

26
docker-entrypoint.sh Normal file
View File

@ -0,0 +1,26 @@
#!/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

View File

@ -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.findByEmailOrUsername(email)
User.findByUsername(email)
.then((user) => { // eslint-disable-line consistent-return
if (!user) {
return done(null, false, { msg: `Email ${email} not found.` });

View File

@ -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,31 +36,32 @@ export function findUserByUsername(username, cb) {
}
export function createUser(req, res, next) {
const { username, email } = req.body;
const { username, _ } = req.body;
const { password } = req.body;
const emailLowerCase = email.toLowerCase();
// const emailLowerCase = email ? email.toLowerCase() : null;
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.findByEmailAndUsername(email, username, (err, existingUser) => {
User.findByUsername(username, (err, existingUser) => {
if (err) {
res.status(404).send({ error: err });
return;
}
if (existingUser) {
const fieldInUse = existingUser.email.toLowerCase() === emailLowerCase ? 'Email' : 'Username';
const fieldInUse = 'Username';
res.status(422).send({ error: `${fieldInUse} is in use` });
return;
}
user.save((saveErr) => {
if (saveErr) {
next(saveErr);
@ -73,17 +74,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
res.json(userResponse(req.user));
});
// mail.send(mailOptions, (mailErr, result) => { // eslint-disable-line no-unused-vars
res.json(userResponse(req.user));
// });
});
});
});
@ -142,18 +143,19 @@ export function resetPasswordInitiate(req, res) {
async.waterfall([
random,
(token, done) => {
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
// 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.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';

View File

@ -50,7 +50,7 @@ const userSchema = new Schema({
verifiedToken: String,
verifiedTokenExpires: Date,
github: { type: String },
email: { type: String, unique: true },
email: { type: String },
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 = {
$or: [
{ email },
{ username }
]
const query = { username // override username only as we don't want to register email addresses
// $or: [
// { email },
// { username }
// ]
};
return this.findOne(query).collation({ locale: 'en', strength: 2 }).exec(cb);
};