2017-02-09 17:50:28 +00:00
define ( [
2017-04-18 10:14:32 +00:00
'jquery' ,
2018-01-10 09:14:49 +00:00
'/customize/login.js' ,
2017-02-10 15:49:17 +00:00
'/common/cryptpad-common.js' ,
2017-06-01 08:23:50 +00:00
'/common/test.js' ,
2019-09-27 10:04:31 +00:00
'/common/common-credential.js' ,
2017-11-13 09:23:18 +00:00
'/common/common-interface.js' ,
2017-11-13 15:32:40 +00:00
'/common/common-util.js' ,
2017-11-13 16:01:09 +00:00
'/common/common-realtime.js' ,
2017-11-21 15:46:19 +00:00
'/common/common-constants.js' ,
2017-11-23 11:28:49 +00:00
'/common/common-feedback.js' ,
'/common/outer/local-store.js' ,
2017-09-07 14:48:17 +00:00
2018-03-21 17:31:53 +00:00
'css!/bower_components/components-font-awesome/css/font-awesome.min.css' ,
2017-11-23 11:28:49 +00:00
] , function ( $ , Login , Cryptpad , Test , Cred , UI , Util , Realtime , Constants , Feedback , LocalStore ) {
2017-02-13 10:41:48 +00:00
var Messages = Cryptpad . Messages ;
2017-02-10 17:29:49 +00:00
$ ( function ( ) {
var $main = $ ( '#mainBlock' ) ;
// main block is hidden in case javascript is disabled
$main . removeClass ( 'hidden' ) ;
// Make sure we don't display non-translated content (empty button)
$main . find ( '#data' ) . removeClass ( 'hidden' ) ;
2017-11-23 11:28:49 +00:00
if ( LocalStore . isLoggedIn ( ) ) {
2017-02-10 17:29:49 +00:00
// already logged in, redirect to drive
document . location . href = '/drive/' ;
return ;
} else {
$main . find ( '#userForm' ) . removeClass ( 'hidden' ) ;
}
2017-02-17 14:16:03 +00:00
// text and password input fields
var $uname = $ ( '#username' ) ;
var $passwd = $ ( '#password' ) ;
var $confirm = $ ( '#password-confirm' ) ;
2017-02-09 17:50:28 +00:00
2020-10-30 14:13:22 +00:00
if ( localStorage . login _user ) {
$uname . val ( localStorage . login _user ) ;
2020-11-02 11:55:40 +00:00
delete localStorage . login _user ;
2017-02-17 14:16:03 +00:00
}
2017-02-10 15:49:17 +00:00
2017-02-17 14:16:03 +00:00
[ $uname , $passwd , $confirm ]
. some ( function ( $el ) { if ( ! $el . val ( ) ) { $el . focus ( ) ; return true ; } } ) ;
2017-02-10 15:49:17 +00:00
2017-02-17 14:16:03 +00:00
// checkboxes
var $checkImport = $ ( '#import-recent' ) ;
var $checkAcceptTerms = $ ( '#accept-terms' ) ;
2017-02-09 17:50:28 +00:00
2017-02-17 14:16:03 +00:00
var $register = $ ( 'button#register' ) ;
2017-02-09 17:50:28 +00:00
2017-06-19 12:18:10 +00:00
var registering = false ;
2018-01-11 17:11:06 +00:00
var test ;
2017-03-14 11:39:22 +00:00
2019-08-30 14:05:04 +00:00
var I _REALLY _WANT _TO _USE _MY _EMAIL _FOR _MY _USERNAME = false ;
var registerClick = function ( ) {
2017-02-17 14:16:03 +00:00
var uname = $uname . val ( ) ;
var passwd = $passwd . val ( ) ;
var confirmPassword = $confirm . val ( ) ;
2017-02-09 17:50:28 +00:00
2017-02-17 14:16:03 +00:00
var shouldImport = $checkImport [ 0 ] . checked ;
var doesAccept = $checkAcceptTerms [ 0 ] . checked ;
2017-02-09 17:50:28 +00:00
2019-08-30 14:05:04 +00:00
if ( Cred . isEmail ( uname ) && ! I _REALLY _WANT _TO _USE _MY _EMAIL _FOR _MY _USERNAME ) {
2019-08-30 14:09:38 +00:00
var emailWarning = [
2019-08-30 14:05:04 +00:00
Messages . register _emailWarning0 ,
Messages . register _emailWarning1 ,
Messages . register _emailWarning2 ,
Messages . register _emailWarning3 ,
] . join ( '<br><br>' ) ;
Feedback . send ( "EMAIL_USERNAME_WARNING" , true ) ;
2019-08-30 14:09:38 +00:00
return void UI . confirm ( emailWarning , function ( yes ) {
2019-08-30 14:05:04 +00:00
if ( ! yes ) { return ; }
I _REALLY _WANT _TO _USE _MY _EMAIL _FOR _MY _USERNAME = true ;
registerClick ( ) ;
} , { } , true ) ;
}
2017-02-17 14:16:03 +00:00
/* basic validation */
2017-09-12 08:50:59 +00:00
if ( ! Cred . isLongEnoughPassword ( passwd ) ) {
var warning = Messages . _getKey ( 'register_passwordTooShort' , [
Cred . MINIMUM _PASSWORD _LENGTH
] ) ;
2017-11-13 09:23:18 +00:00
return void UI . alert ( warning , function ( ) {
2017-09-12 08:50:59 +00:00
registering = false ;
} ) ;
}
2017-02-17 14:16:03 +00:00
if ( passwd !== confirmPassword ) { // do their passwords match?
2017-11-13 09:23:18 +00:00
return void UI . alert ( Messages . register _passwordsDontMatch ) ;
2017-02-17 14:16:03 +00:00
}
2017-02-09 17:50:28 +00:00
2017-02-17 14:16:03 +00:00
if ( ! doesAccept ) { // do they accept the terms of service?
2017-11-13 09:23:18 +00:00
return void UI . alert ( Messages . register _mustAcceptTerms ) ;
2017-02-17 14:16:03 +00:00
}
2017-02-09 17:50:28 +00:00
2020-10-27 16:32:26 +00:00
// XXX
Messages . register _warning = "<i class='fa fa-warning'></i> Warning" ; // existing key
Messages . register _warning _note = "Due to the encrypted nature of CrytpPad even the the service administrators will not be able to recover data in case the username and/or password are forgotten. Please save them in a safe place." ;
2020-10-27 16:36:04 +00:00
Messages . register _cancel = "Cancel" ; // existing key
2020-10-27 16:32:26 +00:00
2017-07-04 12:56:03 +00:00
setTimeout ( function ( ) {
2020-10-27 16:32:26 +00:00
UI . confirm ( "<h2 class='msg'>" + Messages . register _warning + "</h2>" + Messages . register _warning _note ,
2017-03-14 11:00:23 +00:00
function ( yes ) {
if ( ! yes ) { return ; }
2018-02-06 17:45:12 +00:00
Login . loginOrRegisterUI ( uname , passwd , true , shouldImport , Test . testing , function ( ) {
if ( test ) {
localStorage . clear ( ) ;
test . pass ( ) ;
return true ;
}
} ) ;
2017-06-19 12:18:10 +00:00
registering = true ;
2017-03-14 11:00:23 +00:00
} , {
2017-03-16 09:37:16 +00:00
ok : Messages . register _writtenPassword ,
cancel : Messages . register _cancel ,
2020-06-22 20:23:16 +00:00
/ * I f w e ' r e c e r t a i n t h a t w e a r e n ' t u s i n g t h e s e " * C l a s s " A P I s
anywhere else then we can deprecate them and make this a
custom modal in common - interface ( or here ) . * /
2020-10-27 16:32:26 +00:00
cancelClass : 'btn.cancel' ,
okClass : 'btn.btn-danger.btn-register-confirm' ,
2017-03-14 11:00:23 +00:00
reverseOrder : true ,
2017-09-11 14:24:43 +00:00
done : function ( $dialog ) {
$dialog . find ( '> div' ) . addClass ( 'half' ) ;
} ,
} , true ) ;
2017-07-04 12:56:03 +00:00
} , 150 ) ;
2019-08-30 14:05:04 +00:00
} ;
$register . click ( registerClick ) ;
2017-07-04 12:56:03 +00:00
2017-11-13 15:32:40 +00:00
var clickRegister = Util . notAgainForAnother ( function ( ) {
2017-07-04 12:56:03 +00:00
$register . click ( ) ;
} , 500 ) ;
$register . on ( 'keypress' , function ( e ) {
2018-04-17 13:50:24 +00:00
if ( e . which === 13 ) {
e . preventDefault ( ) ;
e . stopPropagation ( ) ;
return clickRegister ( ) ;
2017-07-04 12:56:03 +00:00
}
2017-02-10 15:49:17 +00:00
} ) ;
2017-06-01 08:23:50 +00:00
2018-01-11 17:11:06 +00:00
Test ( function ( t ) {
test = t ;
$uname . val ( 'testuser' ) ;
2017-09-13 12:00:48 +00:00
$passwd . val ( 'testtest' ) ;
$confirm . val ( 'testtest' ) ;
2017-06-01 08:23:50 +00:00
$checkImport [ 0 ] . checked = true ;
$checkAcceptTerms [ 0 ] . checked = true ;
$register . click ( ) ;
window . setTimeout ( function ( ) {
2017-11-13 09:23:18 +00:00
UI . findOKButton ( ) . click ( ) ;
2017-06-01 08:23:50 +00:00
} , 1000 ) ;
} ) ;
2017-02-09 17:50:28 +00:00
} ) ;
} ) ;