Skip to content

Commit

Permalink
fix(account): security fix
Browse files Browse the repository at this point in the history
  • Loading branch information
polonel committed May 15, 2022
1 parent 36a542a commit e836d04
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 3 deletions.
2 changes: 2 additions & 0 deletions src/models/user.js
Expand Up @@ -100,6 +100,8 @@ userSchema.pre('save', function (next) {
return next()
}

if (user.password.toString().length > 255) user.password = utils.applyMaxTextLength(user.password)

bcrypt.genSalt(SALT_FACTOR, function (err, salt) {
if (err) return next(err)

Expand Down
19 changes: 19 additions & 0 deletions src/public/js/angularjs/controllers/profile.js
Expand Up @@ -45,13 +45,32 @@ define([
}, 0)
}

function validateEmail (email) {
return String(email)
.toLowerCase()
.match(
/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
)
}

$scope.updateUser = function ($event) {
$event.preventDefault()

var id = $('div[data-user_id]').attr('data-user_id')
if (_.isUndefined(id)) return
var data = getFormData()

if (
data.fullname.toString().length > 25 ||
data.password.toString().length > 255 ||
data.cPassword.toString().length > 255 ||
data.email.toString().length > 255 ||
!validateEmail(data.email.toString())
) {
helpers.UI.showSnackbar('Form data invalid.', true)
return false
}

$http
.put('/api/v1/users/' + data.username, {
aId: id,
Expand Down
6 changes: 3 additions & 3 deletions src/views/subviews/profile.hbs
Expand Up @@ -92,15 +92,15 @@
</div>
<div class="uk-margin-medium-bottom">
<label for="aPass">Password</label>
<input id="aPass" class="md-input" name="aPass" type="password" />
<input id="aPass" class="md-input" name="aPass" type="password" data-validation="length" data-validation-length="max255" data-validation-error-msg="Password too long. Maximum length is 25 characters." />
</div>
<div class="uk-margin-medium-bottom">
<label for="aPassConfirm">Confirm Password</label>
<input id="aPassConfirm" class="md-input" name="aPassConfirm" type="password" />
<input id="aPassConfirm" class="md-input" name="aPassConfirm" type="password" data-validation="length" data-validation-length="max255" data-validation-error-msg="Password too long. Maximum length is 25 characters." />
</div>
<div class="uk-margin-medium-bottom">
<label for="aEmail">Email</label>
<input id="aEmail" class="md-input" name="aEmail" type="email" value="{{data.account.email}}"/>
<input id="aEmail" class="md-input" name="aEmail" type="email" value="{{data.account.email}}" data-validation="email" data-validation-error-msg="Please enter a valid email address."/>
</div>
<div class="uk-clearfix">
<button type="submit" class="uk-float-right md-btn md-btn-small md-btn-success md-btn-wave-light" ng-click="updateUser($event)">Save</button>
Expand Down

0 comments on commit e836d04

Please sign in to comment.