2017-08-22 10:53:26 +03:00
import EmberObject from '@ember/object' ;
2021-04-12 15:21:57 +03:00
import UnauthenticatedRoute from 'ghost-admin/routes/unauthenticated' ;
2018-09-17 18:03:58 +03:00
import ValidationEngine from 'ghost-admin/mixins/validation-engine' ;
2022-01-17 12:34:55 +03:00
import classic from 'ember-classic-decorator' ;
2022-11-03 14:14:36 +03:00
import { inject } from 'ghost-admin/decorators/inject' ;
2022-05-27 15:28:29 +03:00
import { inject as service } from '@ember/service' ;
import { tracked } from '@glimmer/tracking' ;
2014-03-10 07:44:08 +04:00
2022-05-27 15:28:29 +03:00
// EmberObject is still needed here for ValidationEngine
@ classic
class SignupDetails extends EmberObject . extend ( ValidationEngine ) {
@ tracked name = '' ;
@ tracked email = '' ;
@ tracked password = '' ;
token = '' ;
blogTitle = '' ; // used for password validation
validationType = 'signup' ;
}
2015-10-28 14:36:45 +03:00
2022-01-17 12:34:55 +03:00
export default class SignupRoute extends UnauthenticatedRoute {
@ service ghostPaths ;
@ service notifications ;
@ service session ;
@ service ajax ;
2022-11-03 14:14:36 +03:00
@ inject config ;
2015-05-26 05:10:50 +03:00
2015-10-28 14:36:45 +03:00
beforeModel ( ) {
2022-01-17 12:34:55 +03:00
if ( this . session . isAuthenticated ) {
2019-03-06 16:53:54 +03:00
this . notifications . showAlert ( 'You need to sign out to register as a new user.' , { type : 'warn' , delayed : true , key : 'signup.create.already-authenticated' } ) ;
2014-07-03 19:06:07 +04:00
}
2017-02-10 13:34:37 +03:00
2022-01-17 12:34:55 +03:00
super . beforeModel ( ... arguments ) ;
}
2014-09-19 08:50:15 +04:00
2015-10-28 14:36:45 +03:00
model ( params ) {
2018-09-17 18:03:58 +03:00
let signupDetails = SignupDetails . create ( ) ;
2017-09-11 10:56:11 +03:00
let re = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2}|[A-Za-z0-9_-]{3})?$/ ;
2015-10-28 14:36:45 +03:00
let email ,
tokenText ;
2014-09-19 08:50:15 +04:00
2016-01-19 16:03:27 +03:00
return new Promise ( ( resolve ) => {
2014-09-19 08:50:15 +04:00
if ( ! re . test ( params . token ) ) {
2019-03-06 16:53:54 +03:00
this . notifications . showAlert ( 'Invalid token.' , { type : 'error' , delayed : true , key : 'signup.create.invalid-token' } ) ;
2014-09-19 08:50:15 +04:00
2022-08-03 14:21:16 +03:00
resolve ( this . transitionTo ( 'signin' ) ) ;
return ;
2014-08-06 19:08:02 +04:00
}
2014-08-25 06:34:26 +04:00
2014-09-19 08:50:15 +04:00
tokenText = atob ( params . token ) ;
email = tokenText . split ( '|' ) [ 1 ] ;
2019-02-11 14:35:27 +03:00
// leave e-mail blank even though we get it from the token because
// we need the user to type it in for Chrome to remember the
// email/password combo properly
2022-05-27 15:28:29 +03:00
signupDetails . email = '' ;
signupDetails . token = params . token ;
2014-09-19 08:50:15 +04:00
2022-05-27 15:28:29 +03:00
let authUrl = this . ghostPaths . url . api ( 'authentication' , 'invitation' ) ;
2016-01-18 18:37:14 +03:00
2022-08-03 14:21:16 +03:00
this . ajax . request ( authUrl , {
2014-08-25 06:34:26 +04:00
dataType : 'json' ,
data : {
2015-10-28 14:36:45 +03:00
email
2014-08-25 06:34:26 +04:00
}
2015-10-28 14:36:45 +03:00
} ) . then ( ( response ) => {
2014-08-25 06:34:26 +04:00
if ( response && response . invitation && response . invitation [ 0 ] . valid === false ) {
2019-03-06 16:53:54 +03:00
this . notifications . showAlert ( 'The invitation does not exist or is no longer valid.' , { type : 'warn' , delayed : true , key : 'signup.create.invalid-invitation' } ) ;
2014-09-19 08:50:15 +04:00
2022-08-03 14:21:16 +03:00
resolve ( this . transitionTo ( 'signin' ) ) ;
return ;
2014-08-25 06:34:26 +04:00
}
2014-09-19 08:50:15 +04:00
2017-10-26 13:02:17 +03:00
// set blogTitle, so password validation has access to it
2022-10-07 17:24:03 +03:00
signupDetails . blogTitle = this . config . blogTitle ;
2017-10-26 13:02:17 +03:00
2018-01-11 01:57:43 +03:00
resolve ( signupDetails ) ;
2015-10-28 14:36:45 +03:00
} ) . catch ( ( ) => {
2018-01-11 01:57:43 +03:00
resolve ( signupDetails ) ;
2014-08-25 06:34:26 +04:00
} ) ;
2014-09-19 08:50:15 +04:00
} ) ;
2022-01-17 12:34:55 +03:00
}
2014-08-25 06:34:26 +04:00
2015-10-28 14:36:45 +03:00
deactivate ( ) {
2022-01-17 12:34:55 +03:00
super . deactivate ( ... arguments ) ;
2014-09-19 08:50:15 +04:00
// clear the properties that hold the sensitive data from the controller
2022-05-27 15:28:29 +03:00
const signupDetails = this . controllerFor ( 'signup' ) . signupDetails ;
signupDetails . email = '' ;
signupDetails . password = '' ;
signupDetails . token = '' ;
2014-07-03 19:06:07 +04:00
}
2022-01-17 12:34:55 +03:00
}