@@ -384,6 +384,104 @@ apiUsers.createPublicAccount = function (req, res) {
384384 )
385385}
386386
387+ apiUsers . profileUpdate = function ( req , res ) {
388+ if ( ! req . user ) return res . status ( 400 ) . json ( { success : false , error : 'Invalid Post Data' } )
389+ const username = req . user . username
390+ if ( _ . isNull ( username ) || _ . isUndefined ( username ) )
391+ return res . status ( 400 ) . json ( { success : false , error : 'Invalid Post Data' } )
392+
393+ const data = req . body
394+ let passwordUpdated = false
395+
396+ const obj = {
397+ fullname : data . aFullname ,
398+ title : data . aTitle ,
399+ password : data . aPassword ,
400+ passconfirm : data . aPassConfirm ,
401+ email : data . aEmail
402+ }
403+
404+ let passwordComplexityEnabled = true
405+
406+ async . series (
407+ {
408+ settings : function ( done ) {
409+ const SettingUtil = require ( '../../../settings/settingsUtil' )
410+ SettingUtil . getSettings ( function ( err , content ) {
411+ if ( err ) return done ( err )
412+
413+ const settings = content . data . settings
414+ passwordComplexityEnabled = settings . accountsPasswordComplexity . value
415+
416+ return done ( )
417+ } )
418+ } ,
419+ user : function ( done ) {
420+ UserSchema . getUserByUsername ( username , function ( err , user ) {
421+ if ( err ) return done ( err )
422+ if ( ! user ) return done ( 'Invalid User Object' )
423+
424+ obj . _id = user . _id
425+
426+ if (
427+ ! _ . isUndefined ( obj . password ) &&
428+ ! _ . isEmpty ( obj . password ) &&
429+ ! _ . isUndefined ( obj . passconfirm ) &&
430+ ! _ . isEmpty ( obj . passconfirm )
431+ ) {
432+ if ( obj . password === obj . passconfirm ) {
433+ if ( passwordComplexityEnabled ) {
434+ // check Password Complexity
435+ const passwordComplexity = require ( '../../../settings/passwordComplexity' )
436+ if ( ! passwordComplexity . validate ( obj . password ) ) return done ( 'Password does not meet requirements' )
437+ }
438+
439+ user . password = obj . password
440+ passwordUpdated = true
441+ }
442+ }
443+
444+ if ( ! _ . isUndefined ( obj . fullname ) && obj . fullname . length > 0 ) user . fullname = obj . fullname
445+ if ( ! _ . isUndefined ( obj . email ) && obj . email . length > 0 ) user . email = obj . email
446+ if ( ! _ . isUndefined ( obj . title ) && obj . title . length > 0 ) user . title = obj . title
447+
448+ user . save ( function ( err , nUser ) {
449+ if ( err ) return done ( err )
450+
451+ nUser . populate ( 'role' , function ( err , populatedUser ) {
452+ if ( err ) return done ( err )
453+ const resUser = stripUserFields ( populatedUser )
454+
455+ return done ( null , resUser )
456+ } )
457+ } )
458+ } )
459+ } ,
460+ groups : function ( done ) {
461+ groupSchema . getAllGroupsOfUser ( obj . _id , done )
462+ }
463+ } ,
464+ async function ( err , results ) {
465+ if ( err ) {
466+ winston . debug ( err )
467+ return res . status ( 400 ) . json ( { success : false , error : err } )
468+ }
469+
470+ const user = results . user . toJSON ( )
471+ user . groups = results . groups . map ( function ( g ) {
472+ return { _id : g . _id , name : g . name }
473+ } )
474+
475+ if ( passwordUpdated ) {
476+ const Session = require ( '../../../models/session' )
477+ await Session . destroy ( user . _id )
478+ }
479+
480+ return res . json ( { success : true , user : user } )
481+ }
482+ )
483+ }
484+
387485/**
388486 * @api {put } /api/v1/users/:username Update User
389487 * @apiName updateUser
0 commit comments