2020-12-02 20:48:03 +00:00
module . exports = {
friendlyName : 'Update profile' ,
description : 'Update the profile for the logged-in user.' ,
inputs : {
Add customer portal and license dispenser to fleetdm.com (#3546)
* Add images for customer portal, dashboard, and email templates
* updated email layout and reset password template, new email template
* update ajax-button component to have an optional spinner
* updated cloud-error & stripe-card-element component styles
* updates to user model, add quote and subscription
* Login, signup, forgot password, update profile
* link to customer portal from pricing
* new-license page, bootstrap updates
* create quote action, dashboard page, update routes
* Add new page styles to importer, update component styles
* updates to js-timestamp
* update modal styles and layout
* using @submitted on ajax form, controller updates
* Update create-quote.js
* updates to quote model, action updates, truncate license key on dashboard
* update email layout, subscribe action, user model
* Update importer.less
* style updates, order confirmation
* use correct font
* style updates
* create license key
* new-license page changes
* signup page changes
* add billing format to js-timestamp component, dashboard updates, change password
* swap get started link for customers
* order -> subscription
* Update login.ejs
* Lint fixes, page updates, mobile styles
* remove edit-profile route, update layout, bootstrap, forms
* change customer-layout name to match other layout names, update copyright year in layouts
* changes requested from code review and #3570
* submit button width, contact font-size
* Update dashboard.less
* Update bootstrap-overrides.less
* slack logo update, login text
2022-01-05 02:02:42 +00:00
firstName : {
type : 'string'
} ,
lastName : {
type : 'string'
} ,
organization : {
2020-12-02 20:48:03 +00:00
type : 'string'
} ,
emailAddress : {
type : 'string'
} ,
} ,
exits : {
emailAlreadyInUse : {
statusCode : 409 ,
description : 'The provided email address is already in use.' ,
} ,
} ,
Add customer portal and license dispenser to fleetdm.com (#3546)
* Add images for customer portal, dashboard, and email templates
* updated email layout and reset password template, new email template
* update ajax-button component to have an optional spinner
* updated cloud-error & stripe-card-element component styles
* updates to user model, add quote and subscription
* Login, signup, forgot password, update profile
* link to customer portal from pricing
* new-license page, bootstrap updates
* create quote action, dashboard page, update routes
* Add new page styles to importer, update component styles
* updates to js-timestamp
* update modal styles and layout
* using @submitted on ajax form, controller updates
* Update create-quote.js
* updates to quote model, action updates, truncate license key on dashboard
* update email layout, subscribe action, user model
* Update importer.less
* style updates, order confirmation
* use correct font
* style updates
* create license key
* new-license page changes
* signup page changes
* add billing format to js-timestamp component, dashboard updates, change password
* swap get started link for customers
* order -> subscription
* Update login.ejs
* Lint fixes, page updates, mobile styles
* remove edit-profile route, update layout, bootstrap, forms
* change customer-layout name to match other layout names, update copyright year in layouts
* changes requested from code review and #3570
* submit button width, contact font-size
* Update dashboard.less
* Update bootstrap-overrides.less
* slack logo update, login text
2022-01-05 02:02:42 +00:00
fn : async function ( { firstName , lastName , organization , emailAddress } ) {
2020-12-02 20:48:03 +00:00
var newEmailAddress = emailAddress ;
if ( newEmailAddress !== undefined ) {
newEmailAddress = newEmailAddress . toLowerCase ( ) ;
}
// Determine if this request wants to change the current user's email address,
// revert her pending email address change, modify her pending email address
// change, or if the email address won't be affected at all.
var desiredEmailEffect ; // ('change-immediately', 'begin-change', 'cancel-pending-change', 'modify-pending-change', or '')
if (
newEmailAddress === undefined ||
( this . req . me . emailStatus !== 'change-requested' && newEmailAddress === this . req . me . emailAddress ) ||
( this . req . me . emailStatus === 'change-requested' && newEmailAddress === this . req . me . emailChangeCandidate )
) {
desiredEmailEffect = '' ;
} else if ( this . req . me . emailStatus === 'change-requested' && newEmailAddress === this . req . me . emailAddress ) {
desiredEmailEffect = 'cancel-pending-change' ;
} else if ( this . req . me . emailStatus === 'change-requested' && newEmailAddress !== this . req . me . emailAddress ) {
desiredEmailEffect = 'modify-pending-change' ;
} else if ( ! sails . config . custom . verifyEmailAddresses || this . req . me . emailStatus === 'unconfirmed' ) {
desiredEmailEffect = 'change-immediately' ;
} else {
desiredEmailEffect = 'begin-change' ;
}
// If the email address is changing, make sure it is not already being used.
if ( _ . contains ( [ 'begin-change' , 'change-immediately' , 'modify-pending-change' ] , desiredEmailEffect ) ) {
let conflictingUser = await User . findOne ( {
or : [
{ emailAddress : newEmailAddress } ,
{ emailChangeCandidate : newEmailAddress }
]
} ) ;
if ( conflictingUser ) {
throw 'emailAlreadyInUse' ;
}
}
// Start building the values to set in the db.
// (We always set the fullName if provided.)
var valuesToSet = {
Add customer portal and license dispenser to fleetdm.com (#3546)
* Add images for customer portal, dashboard, and email templates
* updated email layout and reset password template, new email template
* update ajax-button component to have an optional spinner
* updated cloud-error & stripe-card-element component styles
* updates to user model, add quote and subscription
* Login, signup, forgot password, update profile
* link to customer portal from pricing
* new-license page, bootstrap updates
* create quote action, dashboard page, update routes
* Add new page styles to importer, update component styles
* updates to js-timestamp
* update modal styles and layout
* using @submitted on ajax form, controller updates
* Update create-quote.js
* updates to quote model, action updates, truncate license key on dashboard
* update email layout, subscribe action, user model
* Update importer.less
* style updates, order confirmation
* use correct font
* style updates
* create license key
* new-license page changes
* signup page changes
* add billing format to js-timestamp component, dashboard updates, change password
* swap get started link for customers
* order -> subscription
* Update login.ejs
* Lint fixes, page updates, mobile styles
* remove edit-profile route, update layout, bootstrap, forms
* change customer-layout name to match other layout names, update copyright year in layouts
* changes requested from code review and #3570
* submit button width, contact font-size
* Update dashboard.less
* Update bootstrap-overrides.less
* slack logo update, login text
2022-01-05 02:02:42 +00:00
firstName ,
lastName ,
organization ,
2020-12-02 20:48:03 +00:00
} ;
switch ( desiredEmailEffect ) {
// Change now
case 'change-immediately' :
_ . extend ( valuesToSet , {
emailAddress : newEmailAddress ,
emailChangeCandidate : '' ,
emailProofToken : '' ,
emailProofTokenExpiresAt : 0 ,
emailStatus : this . req . me . emailStatus === 'unconfirmed' ? 'unconfirmed' : 'confirmed'
} ) ;
break ;
// Begin new email change, or modify a pending email change
case 'begin-change' :
case 'modify-pending-change' :
_ . extend ( valuesToSet , {
emailChangeCandidate : newEmailAddress ,
emailProofToken : await sails . helpers . strings . random ( 'url-friendly' ) ,
emailProofTokenExpiresAt : Date . now ( ) + sails . config . custom . emailProofTokenTTL ,
emailStatus : 'change-requested'
} ) ;
break ;
// Cancel pending email change
case 'cancel-pending-change' :
_ . extend ( valuesToSet , {
emailChangeCandidate : '' ,
emailProofToken : '' ,
emailProofTokenExpiresAt : 0 ,
emailStatus : 'confirmed'
} ) ;
break ;
// Otherwise, do nothing re: email
}
// Save to the db
await User . updateOne ( { id : this . req . me . id } )
. set ( valuesToSet ) ;
// If this is an immediate change, and billing features are enabled,
// then also update the billing email for this user's linked customer entry
// in the Stripe API to make sure they receive email receipts.
// > Note: If there was not already a Stripe customer entry for this user,
// > then one will be set up implicitly, so we'll need to persist it to our
// > database. (This could happen if Stripe credentials were not configured
// > at the time this user was originally created.)
if ( desiredEmailEffect === 'change-immediately' && sails . config . custom . enableBillingFeatures ) {
let didNotAlreadyHaveCustomerId = ( ! this . req . me . stripeCustomerId ) ;
let stripeCustomerId = await sails . helpers . stripe . saveBillingInfo . with ( {
stripeCustomerId : this . req . me . stripeCustomerId ,
emailAddress : newEmailAddress
} ) . timeout ( 5000 ) . retry ( ) ;
if ( didNotAlreadyHaveCustomerId ) {
await User . updateOne ( { id : this . req . me . id } )
. set ( {
stripeCustomerId
} ) ;
}
}
// If an email address change was requested, and re-confirmation is required,
// send the "confirm account" email.
if ( desiredEmailEffect === 'begin-change' || desiredEmailEffect === 'modify-pending-change' ) {
Add customer portal and license dispenser to fleetdm.com (#3546)
* Add images for customer portal, dashboard, and email templates
* updated email layout and reset password template, new email template
* update ajax-button component to have an optional spinner
* updated cloud-error & stripe-card-element component styles
* updates to user model, add quote and subscription
* Login, signup, forgot password, update profile
* link to customer portal from pricing
* new-license page, bootstrap updates
* create quote action, dashboard page, update routes
* Add new page styles to importer, update component styles
* updates to js-timestamp
* update modal styles and layout
* using @submitted on ajax form, controller updates
* Update create-quote.js
* updates to quote model, action updates, truncate license key on dashboard
* update email layout, subscribe action, user model
* Update importer.less
* style updates, order confirmation
* use correct font
* style updates
* create license key
* new-license page changes
* signup page changes
* add billing format to js-timestamp component, dashboard updates, change password
* swap get started link for customers
* order -> subscription
* Update login.ejs
* Lint fixes, page updates, mobile styles
* remove edit-profile route, update layout, bootstrap, forms
* change customer-layout name to match other layout names, update copyright year in layouts
* changes requested from code review and #3570
* submit button width, contact font-size
* Update dashboard.less
* Update bootstrap-overrides.less
* slack logo update, login text
2022-01-05 02:02:42 +00:00
throw new Error ( 'Not yet supported: the email confirmation feature is unused and has not been adapted for fleetdm.com. This error should never be displayed.' ) ;
// await sails.helpers.sendTemplateEmail.with({
// to: newEmailAddress,
// subject: 'Your account has been updated',
// template: 'email-verify-new-email',
// templateData: {
// fullName: fullName||this.req.me.fullName,
// token: valuesToSet.emailProofToken
// }
// });
2020-12-02 20:48:03 +00:00
}
}
} ;