 07d0357bee
			
		
	
	07d0357bee
	
	
	
		
			
			- updated reference dates; - removed reference to Community Edition; - normalized logging using Clipperz.log[Warn|Error|Debug]
		
			
				
	
	
		
			1110 lines
		
	
	
		
			46 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			1110 lines
		
	
	
		
			46 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| 
 | |
| Copyright 2008-2013 Clipperz Srl
 | |
| 
 | |
| This file is part of Clipperz, the online password manager.
 | |
| For further information about its features and functionalities please
 | |
| refer to http://www.clipperz.com.
 | |
| 
 | |
| * Clipperz is free software: you can redistribute it and/or modify it
 | |
|   under the terms of the GNU Affero General Public License as published
 | |
|   by the Free Software Foundation, either version 3 of the License, or 
 | |
|   (at your option) any later version.
 | |
| 
 | |
| * Clipperz is distributed in the hope that it will be useful, but 
 | |
|   WITHOUT ANY WARRANTY; without even the implied warranty of 
 | |
|   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 | |
|   See the GNU Affero General Public License for more details.
 | |
| 
 | |
| * You should have received a copy of the GNU Affero General Public
 | |
|   License along with Clipperz. If not, see http://www.gnu.org/licenses/.
 | |
| 
 | |
| */
 | |
| 
 | |
| if (typeof(Clipperz) == 'undefined') { Clipperz = {}; }
 | |
| if (typeof(Clipperz.PM) == 'undefined') { Clipperz.PM = {}; }
 | |
| if (typeof(Clipperz.PM.Components) == 'undefined') { Clipperz.PM.Components = {}; }
 | |
| if (typeof(Clipperz.PM.Components.Panels) == 'undefined') { Clipperz.PM.Components.Panels = {}; }
 | |
| 
 | |
| 
 | |
| Clipperz.PM.Components.Panels.LoginPanel = function(anElement, args) {
 | |
| 	args = args || {};
 | |
| 
 | |
|     Clipperz.PM.Components.Panels.LoginPanel.superclass.constructor.call(this, anElement, args);
 | |
| 
 | |
| 	this._showLoginFormAnimator = null;
 | |
| 	this._showRegistrationFormAnimator = null;
 | |
| 	this._shouldShowRegistrationAlert = true;
 | |
| 	
 | |
| 	this._visibleForm = null;
 | |
| //	this._isPassphraseVisible = true;
 | |
| 
 | |
| 	Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler');
 | |
| 	
 | |
| 	this.render();
 | |
| 	
 | |
| 	return this;
 | |
| }
 | |
| 
 | |
| //=============================================================================
 | |
| 
 | |
| //MochiKit.Base.update(Clipperz.PM.Components.Panels.LoginPanel.prototype, {
 | |
| YAHOO.extendX(Clipperz.PM.Components.Panels.LoginPanel, Clipperz.PM.Components.Panels.BasePanel, {
 | |
| 
 | |
| 	'toString': function() {
 | |
| 		return "Clipperz.PM.Components.LoginPanel component";
 | |
| 	},
 | |
| 	
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'render': function() {
 | |
| 		var result;
 | |
| 		var	layout;
 | |
| 		var registerButton;
 | |
| 		
 | |
| 		MochiKit.Signal.disconnectAllTo(this);
 | |
| 		this.element().update("");
 | |
| 		
 | |
| //MochiKit.Logging.logDebug(">>> LoginPanel.initPanel");
 | |
| 		Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'div', id:this.getId('baseDiv'), cls:'LoginPanel', children:[
 | |
| 			{tag:'table', children:[
 | |
| 				{tag:'thead'},
 | |
| 				{tag:'tbody', children:[
 | |
| 					{tag:'tr', children:[
 | |
| 						{tag:'td', valign:'top', children:[
 | |
| 							{tag:'div', cls:'clipperzServiceDescription', htmlString:Clipperz.PM.Strings['clipperzServiceDescription']}
 | |
| 						]},
 | |
| 						{tag:'td', valign:'top', align:'right', children:[
 | |
| {tag:'div', id:this.getId('forms'), cls:'clipperzLoginForm', children:[
 | |
| 	{tag:'div', id:this.getId('loginForm'), cls:'loginForm', children:[
 | |
| 		{tag:'div', cls:'loginFormHeaderBox', children:[{tag:'h3', htmlString:Clipperz.PM.Strings['loginFormTitle']}]},
 | |
| 		{tag:'form', id:this.getId('loginForm_form'), autocomplete:'off', children:[
 | |
| 
 | |
| 			{tag:'table', cls:'formLayout', children:[
 | |
| 				{tag:'thead'},
 | |
| 				{tag:'tbody', children:[
 | |
| 					{tag:'tr', cls:'formFieldTR', children:[
 | |
| 						{tag:'td', width:'90', htmlString:Clipperz.PM.Strings['loginFormUsernameLabel']},
 | |
| 						{tag:'td', children:[
 | |
| 							{tag:'input', id:this.getId('login_username'), cls:'loginFormField', type:'text', name:'username'}
 | |
| 						]}
 | |
| 					]},
 | |
| 					{tag:'tr', cls:'formFieldTR', children:[
 | |
| 						{tag:'td', htmlString:Clipperz.PM.Strings['loginFormPassphraseLabel']},
 | |
| 						{tag:'td', children:[
 | |
| 							{tag:'div', id:this.getId('passphraseDIV'), children:[
 | |
| 								{tag:'input', id:this.getId('login_passphrase'), cls:'loginFormField', type:'password', name:'passphrase'}
 | |
| 							]},
 | |
| 							{tag:'div', cls:'oneTimePassword', id:this.getId('oneTimePasswordDIV'), children:[
 | |
| 								{tag:'input', type:'text', id:this.getId('oneTimePassword_1'), name:'passphrase'},
 | |
| 								{tag:'span', html:'-'},
 | |
| 								{tag:'input', type:'text', id:this.getId('oneTimePassword_2'), name:'passphrase'},
 | |
| 								{tag:'span', html:'-'},
 | |
| 								{tag:'input', type:'text', id:this.getId('oneTimePassword_3'), name:'passphrase'},
 | |
| 								{tag:'span', html:'-'},
 | |
| 								{tag:'input', type:'text', id:this.getId('oneTimePassword_4'), name:'passphrase'}
 | |
| 							]}
 | |
| 						]}
 | |
| 					]},
 | |
| 					{tag:'tr', cls:'formFieldTR', id:this.getId('passwordTypeChooserTR'), children:[
 | |
| 						{tag:'td', valign:'top', align:'right', children:[
 | |
| 							{tag:'input', type:'checkbox', cls:'passwordTypeCheckbox', id:this.getId('useOneTimePasswordCheckbox')}
 | |
| 						]},
 | |
| 						{tag:'td', children:[
 | |
| 							{tag:'div', cls:'passwordTypeChooser', children:[
 | |
| 								{tag:'h4', htmlString:Clipperz.PM.Strings['loginFormOneTimePasswordCheckboxLabel']},
 | |
| 								{tag:'span', htmlString:Clipperz.PM.Strings['loginFormOneTimePasswordCheckboxDescription']}
 | |
| 							]}
 | |
| 						]}
 | |
| 					]},
 | |
| 					{tag:'tr', children:[
 | |
| 						{tag:'td'},
 | |
| 						{tag:'td', children:[
 | |
| 							{tag:'div', id:this.getId('login_submit')}
 | |
| 						]}
 | |
| 					]}
 | |
| 				]},
 | |
| 				{tag:'tfoot'}
 | |
| 			]}
 | |
| 		]},
 | |
| 
 | |
| 		{tag:'div', cls:'loginFormFooterBox', children:[
 | |
| 			{tag:'ul', children:[
 | |
| 				{tag:'li', id:this.getId('showRegistrationLI'), children:[
 | |
| 					{tag:'span', htmlString:Clipperz.PM.Strings['loginFormDontHaveAnAccountLabel']},
 | |
| 					{tag:'a', href:'.', id:this.getId('showRegistration'), cls:'clipperzActionLink', htmlString:Clipperz.PM.Strings['loginFormCreateOneLabel']}
 | |
| 				]},
 | |
| 				{tag:'li', children:[
 | |
| 					{tag:'span', htmlString:Clipperz.PM.Strings['loginFormForgotYourCredentialsLabel']},
 | |
| 					{tag:'a', href:Clipperz.PM.Strings['loginFormAarghThatsBadUrl'], target:'Clipperz_Help', htmlString:Clipperz.PM.Strings['loginFormAarghThatsBadLabel']}
 | |
| 				]},
 | |
| 				{tag:'li', children:[
 | |
| 					{tag:'span', htmlString:Clipperz.PM.Strings['loginFormAfraidOfMaliciousScriptsLabel']},
 | |
| 					{tag:'a', href:Clipperz.PM.Strings['loginFormVerifyTheCodeUrl'], target:'Clipperz_Help', htmlString:Clipperz.PM.Strings['loginFormVerifyTheCodeLabel']}
 | |
| 				]}
 | |
| 			]}
 | |
| 		]}
 | |
| 	]},
 | |
| 
 | |
| 
 | |
| 
 | |
| 	{tag:'div', id:this.getId('registrationForm'), cls:'registrationForm', children:[
 | |
| 		{tag:'div', cls:'loginFormHeaderBox', children:[{tag:'h3', htmlString:Clipperz.PM.Strings['registrationFormTitle']}]},
 | |
| 		{tag:'form', id:this.getId('registrationForm_form'), children:[
 | |
| 			{tag:'h5', cls:'errorMessage', id:this.getId('registration_errorMessage')},
 | |
| 			{tag:'table', cls:'formLayout', children:[
 | |
| 				{tag:'thead'},
 | |
| 				{tag:'tbody', children:[
 | |
| 					{tag:'tr', cls:'formFieldTR', children:[
 | |
| 						{tag:'td', width:'90', htmlString:Clipperz.PM.Strings['registrationFormUsernameLabel']},
 | |
| 						{tag:'td', children:[
 | |
| 							{tag:'input', id:this.getId('registration_username'), cls:'loginFormField', type:'text', name:'username'}
 | |
| 						]}
 | |
| 					]},
 | |
| 					{tag:'tr', cls:'formFieldTR', children:[
 | |
| 						{tag:'td', htmlString:Clipperz.PM.Strings['registrationFormPassphraseLabel']},
 | |
| 						{tag:'td', children:[
 | |
| 							{tag:'input', id:this.getId('registration_passphrase'), cls:'loginFormField', type:'password', name:'passphrase'}
 | |
| 						]}
 | |
| 					]},
 | |
| 					{tag:'tr', cls:'formFieldTR', children:[
 | |
| 						{tag:'td', htmlString:Clipperz.PM.Strings['registrationFormRetypePassphraseLabel']},
 | |
| 						{tag:'td', children:[
 | |
| 							{tag:'input', id:this.getId('registration_repassphrase'), cls:'loginFormField', type:'password', name:'repeat-passphrase'}
 | |
| 						]}
 | |
| 					]},
 | |
| 					{tag:'tr', cls:'formFieldTR', children:[
 | |
| 						{tag:'td', align:'right', valign:'top', children:[
 | |
| 							{tag:'input', id:this.getId('registration_check'), type:'checkbox', name:'safetyCheck'}
 | |
| 						]},
 | |
| 						{tag:'td', children:[
 | |
| 							{tag:'span', htmlString:Clipperz.PM.Strings['registrationFormSafetyCheckLabel']}
 | |
| 						]}
 | |
| 					]},
 | |
| 					{tag:'tr', cls:'formFieldTR', children:[
 | |
| 						{tag:'td', align:'right', valign:'top', children:[
 | |
| 							{tag:'input', id:this.getId('registration_termsOfServiceCheck'), type:'checkbox', name:'termsOfServiceCheck'}
 | |
| 						]},
 | |
| 						{tag:'td', children:[
 | |
| 							{tag:'span', htmlString:Clipperz.PM.Strings['registrationFormTermsOfServiceCheckLabel']}
 | |
| 						]}
 | |
| 					]},
 | |
| //					{tag:'tr', cls:'formFieldTR', children:[
 | |
| //						{tag:'td', htmlString:Clipperz.PM.Strings['registrationFormInvitationCodeLabel']},
 | |
| //						{tag:'td', children:[
 | |
| //							{tag:'input', id:this.getId('registration_invitationCode'), type:'text', size:'30', name:'invitationCode'}
 | |
| //						]}
 | |
| //					]},
 | |
| 					{tag:'tr', children:[
 | |
| 						{tag:'td'},
 | |
| 						{tag:'td', children:[
 | |
| 							{tag:'div', id:this.getId('registration_submit')}
 | |
| 						]}
 | |
| 					]}
 | |
| 				]},
 | |
| 				{tag:'tfoot'}
 | |
| 			]}
 | |
| 		]},
 | |
| 		{tag:'div', cls:'loginFormFooterBox', children:[
 | |
| 			{tag:'ul', children:[
 | |
| 				{tag:'li', children:[
 | |
| 					{tag:'span', htmlString:Clipperz.PM.Strings['registrationFormDoYouAlreadyHaveAnAccountLabel']},
 | |
| 					{tag:'a', href:'.', id:this.getId('showLogin'), cls:'clipperzActionLink', htmlString:Clipperz.PM.Strings['registrationFormSimplyLoginLabel']}
 | |
| 				]}
 | |
| 			]}
 | |
| 		]}
 | |
| 	]}
 | |
| ]},
 | |
| 							{tag:'div', cls:'loginPanelSwitchLanguageBox', children:[
 | |
| 								{tag:'div', cls:'loginPanelSwitchLanguageDescription', htmlString:Clipperz.PM.Strings['loginPanelSwithLanguageDescription']},
 | |
| 								{tag:'div', cls:'loginPanelSwitchLanguageSelect', children:[
 | |
| 									{tag:'select', id:this.getId('languageSelector'), children:Clipperz.PM.Strings['loginPanelSwitchLanguageSelectOptions']}
 | |
| 								]}
 | |
| 							]},
 | |
| 							{tag:'div', cls:'browserCompatibilityBox', htmlString:Clipperz.PM.Strings['browserCompatibilityDescription']}
 | |
| 						]}
 | |
| 					]}
 | |
| 				]}
 | |
| 			]}
 | |
| 		]});
 | |
| 
 | |
| 		MochiKit.Signal.connect(this.getId('loginForm_form'), 'onsubmit', function(e){e.stop();});
 | |
| 		MochiKit.Signal.connect(this.getId('registrationForm_form'), 'onsubmit', function(e){e.stop();});
 | |
| 
 | |
| 		MochiKit.Signal.connect(this.getId('showRegistration'), 'onclick', this, 'showRegistrationFormEventHandler');
 | |
| 		MochiKit.Signal.connect(this.getId('showLogin'), 'onclick', this, 'showLoginFormEventHandler');
 | |
| 
 | |
| 		new YAHOO.ext.Button(this.getId('login_submit'), {text:Clipperz.PM.Strings['loginFormButtonLabel'], handler:this.doLogin, scope:this, minWidth:0});
 | |
| 		registerButton = new YAHOO.ext.Button(this.getId('registration_submit'), {text:Clipperz.PM.Strings['registrationFormButtonLabel'], handler:this.doRegister, scope:this, minWidth:0})
 | |
| 
 | |
| 		if (Clipperz.PM.Proxy.defaultProxy.isReadOnly()) {
 | |
| //			this.getElement('showRegistrationLI').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
 | |
| 			this.getElement('registrationForm_form').addClass('read-only');
 | |
| 			registerButton.disable();
 | |
| 			this.getElement('passwordTypeChooserTR').addClass('read-only');
 | |
| 			this.getDom('useOneTimePasswordCheckbox').disabled = true;
 | |
| 		}
 | |
| 		
 | |
| 		MochiKit.Signal.connect(this.getId('loginForm'), 'onkeydown', this, 'onkeydown');
 | |
| 		MochiKit.Signal.connect(this.getId('registrationForm'), 'onkeydown', this, 'onkeydown');
 | |
| //		MochiKit.Signal.connect(this.getId('useOneTimePasswordCheckbox'), 'onchange', this, 'renderPasswordField');
 | |
| 		MochiKit.Signal.connect(this.getId('useOneTimePasswordCheckbox'), 'onclick', this, 'renderPasswordField');
 | |
| 		this.renderPasswordField();
 | |
| 
 | |
| 		this.selectSelectedLanguageOption();
 | |
| 		MochiKit.Signal.connect(this.getId('languageSelector'), 'onchange', this, 'switchLanguage');
 | |
| 
 | |
| 		MochiKit.Signal.connect(this.getId('oneTimePassword_1'), 'onkeypress', this, 'handleOneTimePasswordFieldKeyPress');
 | |
| 		MochiKit.Signal.connect(this.getId('oneTimePassword_2'), 'onkeypress', this, 'handleOneTimePasswordFieldKeyPress');
 | |
| 		MochiKit.Signal.connect(this.getId('oneTimePassword_3'), 'onkeypress', this, 'handleOneTimePasswordFieldKeyPress');
 | |
| 		MochiKit.Signal.connect(this.getId('oneTimePassword_4'), 'onkeypress', this, 'handleOneTimePasswordFieldKeyPress');
 | |
| 
 | |
| 		MochiKit.Signal.connect(this.getId('oneTimePassword_1'), 'onkeyup', this, 'handleOneTimePasswordFieldKeyUp');
 | |
| 		MochiKit.Signal.connect(this.getId('oneTimePassword_2'), 'onkeyup', this, 'handleOneTimePasswordFieldKeyUp');
 | |
| 		MochiKit.Signal.connect(this.getId('oneTimePassword_3'), 'onkeyup', this, 'handleOneTimePasswordFieldKeyUp');
 | |
| 		MochiKit.Signal.connect(this.getId('oneTimePassword_4'), 'onkeyup', this, 'handleOneTimePasswordFieldKeyUp');
 | |
| 
 | |
| 		new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('login_passphrase'));
 | |
| 		new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('registration_passphrase'));
 | |
| //MochiKit.Logging.logDebug("<<< LoginPanel.initPanel");
 | |
| 
 | |
| 		return result;
 | |
| 	},
 | |
| 
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'renderPasswordField': function() {
 | |
| 		if (this.getDom('useOneTimePasswordCheckbox').checked == false) {
 | |
| 			this.getElement('oneTimePasswordDIV').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide(false);
 | |
| 			this.getElement('passphraseDIV').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show(false);
 | |
| 			this.getElement('login_passphrase').focus();
 | |
| 		} else {
 | |
| 			this.getElement('passphraseDIV').setVisibilityMode(YAHOO.ext.Element.DISPLAY).hide();
 | |
| 			this.getElement('oneTimePasswordDIV').setVisibilityMode(YAHOO.ext.Element.DISPLAY).show();
 | |
| 			this.getElement('oneTimePassword_1').focus();
 | |
| 		}
 | |
| 
 | |
| 	},
 | |
| 	
 | |
| 	//.........................................................................
 | |
| 
 | |
| 	'handleOneTimePasswordFieldKeyPress': function(anEvent) {
 | |
| 		if (anEvent.key().string == '-') {
 | |
| 			switch (anEvent.src().id) {
 | |
| 				case this.getId('oneTimePassword_1'):
 | |
| 					this.getElement('oneTimePassword_2').focus();
 | |
| 					break;
 | |
| 				case this.getId('oneTimePassword_2'):
 | |
| 					this.getElement('oneTimePassword_3').focus();
 | |
| 					break;
 | |
| 				case this.getId('oneTimePassword_3'):
 | |
| 					this.getElement('oneTimePassword_4').focus();
 | |
| 					break;
 | |
| 			}
 | |
| 			
 | |
| 			anEvent.stop();
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| /*
 | |
|   var ctrl = document.getElementById("txtTargetText");
 | |
|   var saveText = ctrl.value;
 | |
|   ctrl.focus();
 | |
| 
 | |
|   var range = document.selection.createRange();
 | |
|   var specialchar = String.fromCharCode(1);
 | |
|   range.text = specialchar;
 | |
|   var pos = ctrl.value.indexOf(specialchar);
 | |
|   ctrl.value = saveText;
 | |
|   range = ctrl.createTextRange();
 | |
|   range.move('character', pos);
 | |
|   range.select();
 | |
|   range.text = 
 | |
|  document.getElementById("txtSourceText").value;
 | |
|   document.getElementById("txtTargetText").focus();
 | |
|   window.event.returnValue = false;
 | |
| */
 | |
| 
 | |
| 	'handleOneTimePasswordFieldKeyUp': function(anEvent) {
 | |
| 		var	field;
 | |
| 		var	fieldValue;
 | |
| 		var key;
 | |
| 		
 | |
| //console.log("keyUp", anEvent);
 | |
| 		field = anEvent.src();
 | |
| 		fieldValue = field.value;
 | |
| 		key = anEvent.key();
 | |
| 
 | |
| //			&&	(key.string != 'KEY_TAB')
 | |
| //			&&	(key.string != 'KEY_SHIFT')
 | |
| //			&&	(key.string != 'KEY_BACKSPACE')
 | |
| //			&&	(key.string != 'KEY_DELETE')
 | |
| //			&&	(key.string.indexOf('KEY_ARROW') != 0)
 | |
| 		
 | |
| 
 | |
| 		if ((fieldValue.replace(/\s/g, '').length == 8) && (key.string == 'KEY_SPACEBAR')) {
 | |
| //			field.value = Clipperz.Base.trim(fieldValue).replace(/.{4}/g, '$&' + ' ');
 | |
| 			
 | |
| 			switch (field.id) {
 | |
| 				case this.getId('oneTimePassword_1'):
 | |
| 					this.getElement('oneTimePassword_2').focus();
 | |
| 					break;
 | |
| 				case this.getId('oneTimePassword_2'):
 | |
| 					this.getElement('oneTimePassword_3').focus();
 | |
| 					break;
 | |
| 				case this.getId('oneTimePassword_3'):
 | |
| 					this.getElement('oneTimePassword_4').focus();
 | |
| 					break;
 | |
| 			}
 | |
| //		} else if (fieldValue.replace(/\s/g, '').length > 8) {
 | |
| 		}
 | |
| 		
 | |
| //MochiKit.Logging.logDebug("-- fieldValue: " + fieldValue);
 | |
| 	},
 | |
| 	
 | |
| 	//.........................................................................
 | |
| 	
 | |
| 	'doLogin': function() {
 | |
| //MochiKit.Logging.logDebug(">>> LoginPanel.doLogin");
 | |
| 		if (this.checkLoginForm()) {
 | |
| 			if (this.getDom('useOneTimePasswordCheckbox').checked == false) {
 | |
| 				this.doLoginWithUsernameAndPassphrase(this.getDom('login_username').value, this.getDom('login_passphrase').value);
 | |
| 			} else {
 | |
| 				var	oneTimePasswordValue;
 | |
| 				
 | |
| 				oneTimePasswordValue = this.getDom('oneTimePassword_1').value + this.getDom('oneTimePassword_2').value + this.getDom('oneTimePassword_3').value + this.getDom('oneTimePassword_4').value;
 | |
| 				this.doLoginWithUsernameAndOneTimePassword(this.getDom('login_username').value, oneTimePasswordValue);
 | |
| 			}
 | |
| 		}
 | |
| //MochiKit.Logging.logDebug("<<< LoginPanel.doLogin");
 | |
| 	},
 | |
| 
 | |
| 	//.........................................................................
 | |
| 
 | |
| 	'doLoginWithUsernameAndPassphrase': function(anUsername, aPassphrase) {
 | |
| 		var deferredResult;
 | |
| 		var user;
 | |
| 		var loginPanel;
 | |
| 
 | |
| //MochiKit.Logging.logDebug(">>> LoginPanel.doLoginWithUsernameAndPassphrase");
 | |
| 		user = new Clipperz.PM.DataModel.User({username:anUsername, passphrase:aPassphrase});
 | |
| 		loginPanel = this;
 | |
| 
 | |
| 		deferredResult = new MochiKit.Async.Deferred();
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("0 - LoginPanel.doLogin - 0: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Components.MessageBox(), 'deferredShow'),
 | |
| 			{
 | |
| 				title: "",
 | |
| 				text: "",
 | |
| 				width:240,
 | |
| 				showProgressBar:true,
 | |
| 				showCloseButton:false,
 | |
| 				fn:MochiKit.Base.method(deferredResult, 'cancel'),
 | |
| 				scope:this
 | |
| 			},
 | |
| 			this.getDom('login_submit')
 | |
| 		);
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("1 - LoginPanel.doLogin - 1: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'login_start');
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("2 - LoginPanel.doLogin - 2: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(user, 'connect'));
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("3 - LoginPanel.doLogin - 3: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_done');
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("4 - LoginPanel.doLogin - 4: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'connection_loadingUserData');
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("5 - LoginPanel.doLogin - 5: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(user, 'loadPreferences'));
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("6 - LoginPanel.doLogin - 6: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(user, 'loadRecords'));
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("7 - LoginPanel.doLogin - 7: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(user, 'loadDirectLogins'));
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("8 - LoginPanel.doLogin - 8: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'login_connected');
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("9 - LoginPanel.doLogin - 9: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, user, 'setupDone', null);
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("10 - LoginPanel.doLogin - 10: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 
 | |
| 		deferredResult.addCallback(MochiKit.Async.wait, 0.5);
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("11 - LoginPanel.doLogin - 11: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 
 | |
| 		deferredResult.addCallback(function(res) {
 | |
| 			Clipperz.PM.Components.MessageBox().hide(YAHOO.ext.Element.get('main'));
 | |
| 			return res;
 | |
| 		});
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("12 - LoginPanel.doLogin - 12: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 
 | |
| 		deferredResult.addErrback(MochiKit.Base.bind(function() {
 | |
| 			Clipperz.PM.Components.MessageBox().update({
 | |
| 				title:Clipperz.PM.Strings['loginMessagePanelFailureTitle'],
 | |
| 				text:Clipperz.PM.Strings['loginMessagePanelFailureText'],
 | |
| 				showProgressBar:false,
 | |
| 				buttons:{'ok':Clipperz.PM.Strings['loginMessagePanelFailureButtonLabel']},
 | |
| 				fn:MochiKit.Base.bind(function() {
 | |
| 					this.getElement('login_passphrase').focus();
 | |
| 					this.getElement('login_passphrase').dom.select();
 | |
| 				}, this),
 | |
| 				scope:this
 | |
| 			});
 | |
| 		}, this));
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("13 - LoginPanel.doLogin - 13: "/* + res*/); return res;});
 | |
| //deferredResult.addErrback(function(res) {MochiKit.Logging.logDebug("ERROR: " + res); return res;});
 | |
| 		
 | |
| 		deferredResult.callback("token");
 | |
| //MochiKit.Logging.logDebug("<<< LoginPanel.doLoginWithUsernameAndPassphrase");
 | |
| 		
 | |
| 		return deferredResult;
 | |
| 	},
 | |
| 
 | |
| 	//.........................................................................
 | |
| 
 | |
| 	'doLoginWithUsernameAndOneTimePassword': function(anUsername, aOneTimePassword) {
 | |
| 		var deferredResult;
 | |
| 		var loginPanel;
 | |
| 		var oneTimePassword;
 | |
| 		
 | |
| 		oneTimePassword = Clipperz.PM.DataModel.OneTimePassword.normalizedOneTimePassword(aOneTimePassword);
 | |
| 
 | |
| //MochiKit.Logging.logDebug(">>> LoginPanel.doLoginWithUsernameAndPassphrase");
 | |
| 		deferredResult = new MochiKit.Async.Deferred();
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Components.MessageBox(), 'deferredShow'),
 | |
| 			{
 | |
| 				title: "",
 | |
| 				text: "",
 | |
| 				width:240,
 | |
| 				showProgressBar:true,
 | |
| 				showCloseButton:false,
 | |
| 				fn:MochiKit.Base.method(deferredResult, 'cancel'),
 | |
| 				scope:this,
 | |
| 				steps:7,
 | |
| 				buttons:{
 | |
| 				//	'ok':Clipperz.PM.Strings['loginMessagePanelInitialButtonLabel']
 | |
| 				}
 | |
| 			},
 | |
| 			this.getDom('login_submit')
 | |
| 		);
 | |
| 		deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'OTP_login_start');
 | |
| 		deferredResult.addCallback(function(anUsername, aOneTimePassword) {
 | |
| 			var args;
 | |
| 			
 | |
| 			args = {
 | |
| 				'message': 'oneTimePassword',
 | |
| 				'version': Clipperz.PM.Crypto.communicationProtocol.currentVersion,
 | |
| 				'parameters': {
 | |
| 					'oneTimePasswordKey': Clipperz.PM.DataModel.OneTimePassword.computeKeyWithUsernameAndPassword(anUsername, aOneTimePassword),
 | |
| 					'oneTimePasswordKeyChecksum': Clipperz.PM.DataModel.OneTimePassword.computeKeyChecksumWithUsernameAndPassword(anUsername, aOneTimePassword)
 | |
| 				}
 | |
| 			}
 | |
| 			
 | |
| 			return args;
 | |
| 		}, anUsername, oneTimePassword);
 | |
| 		deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'OTP_login_loadingOTP');
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Proxy.defaultProxy, 'handshake'));
 | |
| 		deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, this, 'updatedProgressState', 'OTP_login_extractingPassphrase');
 | |
| 		deferredResult.addCallback(function(aResult) {
 | |
| 			return Clipperz.PM.Crypto.deferredDecrypt(oneTimePassword, aResult['data'], aResult['version']);
 | |
| 		});
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.otpLogin - 4: " + res); return res;});
 | |
| 		deferredResult.addCallback(function(aResult) {
 | |
| //MochiKit.Logging.logDebug("aResult")			
 | |
| 			return (new Clipperz.ByteArray().appendBase64String(aResult['passphrase'])).asString();
 | |
| 		});
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.otpLogin - 5: " + res); return res;});
 | |
| 		deferredResult.addCallbacks(
 | |
| 			MochiKit.Base.method(this, 'doLoginWithUsernameAndPassphrase', anUsername),
 | |
| 			MochiKit.Base.bind(function(aLoginPanel) {
 | |
| 				Clipperz.PM.Components.MessageBox().update({
 | |
| 					title:Clipperz.PM.Strings['loginMessagePanelFailureTitle'],
 | |
| 					text:Clipperz.PM.Strings['loginMessagePanelFailureText'],
 | |
| 					showProgressBar:false,
 | |
| 					buttons:{'ok':Clipperz.PM.Strings['loginMessagePanelFailureButtonLabel']},
 | |
| 					fn:MochiKit.Base.bind(function() {
 | |
| 						this.getElement('oneTimePassword_1').focus();
 | |
| 					}, this),
 | |
| 					scope:aLoginPanel
 | |
| 				});
 | |
| 			}, this)
 | |
| 		);
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.otpLogin - 6: " + res); return res;});
 | |
| 		deferredResult.callback("token");
 | |
| //MochiKit.Logging.logDebug("<<< LoginPanel.doLoginWithUsernameAndPassphrase");
 | |
| 		
 | |
| 		return deferredResult;
 | |
| 	},
 | |
| 	
 | |
| 	//.........................................................................
 | |
| 
 | |
| 	'checkLoginForm': function() {
 | |
| 		var result;
 | |
| 		var username
 | |
| 
 | |
| 		result = true;
 | |
| 		
 | |
| //MochiKit.Logging.logDebug(">>> checkLoginForm");
 | |
| 		username = Clipperz.Base.trim(this.getDom('login_username').value);
 | |
| 		if (username == "") {
 | |
| 			this.getElement('login_username').focus();
 | |
| 			result = false;
 | |
| 		} else {
 | |
| 			if (this.getDom('useOneTimePasswordCheckbox').checked == false) {
 | |
| 				var	passphrase;
 | |
| 			
 | |
| 				passphrase = Clipperz.Base.trim(this.getDom('login_passphrase').value);
 | |
| 
 | |
| 				if (passphrase == "") {
 | |
| 					this.getElement('login_passphrase').focus();
 | |
| 					result = false;
 | |
| 				}
 | |
| 			} else {
 | |
| 				if (Clipperz.Base.trim(this.getDom('oneTimePassword_1').value) == "") {
 | |
| 					this.getElement('oneTimePassword_1').focus();
 | |
| 					result = false;
 | |
| 				} else  if (Clipperz.Base.trim(this.getDom('oneTimePassword_2').value) == "") {
 | |
| 					this.getElement('oneTimePassword_2').focus();
 | |
| 					result = false;
 | |
| 				} else if (Clipperz.Base.trim(this.getDom('oneTimePassword_3').value) == "") {
 | |
| 					this.getElement('oneTimePassword_3').focus();
 | |
| 					result = false;
 | |
| 				} else if (Clipperz.Base.trim(this.getDom('oneTimePassword_4').value) == "") {
 | |
| 					this.getElement('oneTimePassword_4').focus();
 | |
| 					result = false;
 | |
| 				}
 | |
| 			}
 | |
| 		}
 | |
| //MochiKit.Logging.logDebug("<<< checkLoginForm - " + result);
 | |
| 		
 | |
| 		return result;
 | |
| 	},
 | |
| 
 | |
| 	//.........................................................................
 | |
| 
 | |
| 	'doRegister': function(anEvent) {
 | |
| 		if ((Clipperz.PM.Proxy.defaultProxy.isReadOnly() == false) && (this.checkRegistrationForm())) {
 | |
| 			this.doRegistrationWithUsernameAndPassphrase(this.getDom('registration_username').value, this.getDom('registration_passphrase').value /*, this.getDom('registration_invitationCode').value*/);
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	//.........................................................................
 | |
| 
 | |
| 	'checkRegistrationForm': function() {
 | |
| 		var result;
 | |
| 		var username
 | |
| 		var	passphrase;
 | |
| 		var	rePassphrase;
 | |
| 		var	safetyCheck;
 | |
| 		var	termsOfServiceCheck;
 | |
| //		var	invitationCode;
 | |
| 		
 | |
| 		username = this.getDom('registration_username').value;
 | |
| 		passphrase = this.getDom('registration_passphrase').value;
 | |
| 		rePassphrase = this.getDom('registration_repassphrase').value;
 | |
| 		safetyCheck = this.getDom('registration_check').checked;
 | |
| 		termsOfServiceCheck = this.getDom('registration_termsOfServiceCheck').checked;
 | |
| //		invitationCode = this.getDom('registration_invitationCode').value;
 | |
| 		
 | |
| 		if ((username != "") && (passphrase != "") && (rePassphrase != "") /*&& (invitationCode != "")*/) {
 | |
| 			if (passphrase != rePassphrase) {
 | |
| 				//	show alert that the passphrase and rePassphrase should be equal
 | |
| //MochiKit.Logging.logDebug("WARNING: passphrase != rePassphrase");
 | |
| 				this.showRegistrationFormErrorMessageAnimation(Clipperz.PM.Strings['registrationFormWarningMessageNotMatchingPassphrases']);
 | |
| 				this.getElement('registration_repassphrase').focus().dom.select();
 | |
| //				this.getElement('registration_repassphrase').select();
 | |
| 				result = false;
 | |
| 			} else if (safetyCheck != true) {
 | |
| 				//	show alert that the safetyCheck should be checed
 | |
| //MochiKit.Logging.logDebug("WARNING: safetyCheck not checked");
 | |
| 				this.showRegistrationFormErrorMessageAnimation(Clipperz.PM.Strings['registrationFormWarningMessageSafetyCheckNotSelected']);
 | |
| 				this.getElement('registration_check').focus();
 | |
| 				result = false;
 | |
| 			} else if (termsOfServiceCheck != true) {
 | |
| 				this.showRegistrationFormErrorMessageAnimation(Clipperz.PM.Strings['registrationFormWarningMessageTermsOfServiceCheckNotSelected']);
 | |
| 				this.getElement('registration_termsOfServiceCheck').focus();
 | |
| 			} else {
 | |
| 				result = true;
 | |
| 			}
 | |
| 		} else {
 | |
| 			if (username == "") {
 | |
| 				this.getElement('registration_username').focus();
 | |
| 			} else if (passphrase == "") {
 | |
| 				this.getElement('registration_passphrase').focus();
 | |
| 			} else if (rePassphrase == "") {
 | |
| 				this.getElement('registration_repassphrase').focus();
 | |
| //			} else if (invitationCode == "") {
 | |
| //				this.showRegistrationFormErrorMessageAnimation(Clipperz.PM.Strings['registrationFormWarningMessageInvitationCodeMissing']);
 | |
| //				this.getElement('registration_invitationCode').focus();
 | |
| 			}
 | |
| 			
 | |
| 			result = false;
 | |
| 		}
 | |
| 		
 | |
| 		if (result === true) {
 | |
| 			this.getActor('registration_errorMessage').hide();
 | |
| 		}
 | |
| 		
 | |
| 		return result;
 | |
| 	},
 | |
| 
 | |
| 	//.........................................................................
 | |
| 
 | |
| 	'showRegistrationFormErrorMessageAnimation': function(anErrorMessage, aCallback) {
 | |
| 		var	errorMessageActor;
 | |
| 		
 | |
| 		errorMessageActor = this.getActor('registration_errorMessage');
 | |
| 		errorMessageActor.update(anErrorMessage);
 | |
| 		errorMessageActor.show(true);
 | |
| 		errorMessageActor.play(aCallback);
 | |
| 	},
 | |
| 
 | |
| 	//.........................................................................
 | |
| 	
 | |
| 	'doRegistrationWithUsernameAndPassphrase': function(anUsername, aPassphrase /*, anInvitationCode */) {
 | |
| 		var deferredResult;
 | |
| 		var user;
 | |
| 		var loginPanel;
 | |
| 
 | |
| //MochiKit.Logging.logDebug(">>> LoginPanel.doRegistrationWithUsernameAndPassphrase");
 | |
| 		user = new Clipperz.PM.DataModel.User({username:anUsername, passphrase:aPassphrase});
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 1");
 | |
| 		loginPanel = this;
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 2");
 | |
| 
 | |
| 		deferredResult = new MochiKit.Async.Deferred();
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 3");
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.doRegistrationWithUsernameAndPassphrase - 1: " + res); return res;});
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(Clipperz.PM.Components.MessageBox(), 'deferredShow'),
 | |
| 			{
 | |
| 				title:Clipperz.PM.Strings['registrationMessagePanelInitialTitle'],
 | |
| 				text: Clipperz.PM.Strings['registrationMessagePanelInitialText'],
 | |
| 				width:240,
 | |
| 				showProgressBar:true,
 | |
| 				showCloseButton:false,
 | |
| 				fn:MochiKit.Base.method(deferredResult, 'cancel'),
 | |
| 				scope:this,
 | |
| 				steps:9,
 | |
| 				buttons:{
 | |
| 					'ok':Clipperz.PM.Strings['registrationMessagePanelInitialButtonLabel']
 | |
| 				}
 | |
| 			},
 | |
| 			this.getDom('registration_submit')
 | |
| 		);
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 4");
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.doRegistrationWithUsernameAndPassphrase - 2: " + res); return res;});
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(user, 'register'), /*anInvitationCode*/ "VeryBraveBetaTester");
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 5");
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.doRegistrationWithUsernameAndPassphrase - 3: " + res); return res;});
 | |
| 		deferredResult.addCallback(function(res) {
 | |
| 			Clipperz.PM.Components.MessageBox().update({
 | |
| 				title:Clipperz.PM.Strings['registrationMessagePanelRegistrationDoneTitle'],
 | |
| 				text:Clipperz.PM.Strings['registrationMessagePanelRegistrationDoneText'],
 | |
| 				step:'next'
 | |
| 			});
 | |
| 			return res;
 | |
| 		});
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 6");
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.doRegistrationWithUsernameAndPassphrase - 5: " + res); return res;});
 | |
| 		deferredResult.addCallback(MochiKit.Async.wait, 1);
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 7");
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.doRegistrationWithUsernameAndPassphrase - 6: " + res); return res;});
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(user, 'connect'));
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 8");
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.doRegistrationWithUsernameAndPassphrase - 7: " + res); return res;});
 | |
| 		deferredResult.addCallback(MochiKit.Async.wait, 1);
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 9");
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.doRegistrationWithUsernameAndPassphrase - 8: " + res); return res;});
 | |
| 		deferredResult.addCallback(function(res) {
 | |
| 			Clipperz.PM.Components.MessageBox().hide(YAHOO.ext.Element.get('main'));
 | |
| 			return res;
 | |
| 		});
 | |
| 		deferredResult.addCallback(MochiKit.Base.method(this, 'showRegistrationSplashScreen'), user);
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 10");
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.doRegistrationWithUsernameAndPassphrase - 9: " + res); return res;});
 | |
| 		deferredResult.addErrback(function(anError) {
 | |
| 			Clipperz.PM.Components.MessageBox().update({
 | |
| 				title:Clipperz.PM.Strings['registrationMessagePanelFailureTitle'],
 | |
| 				text:anError.message,
 | |
| 				showProgressBar:false,
 | |
| 				buttons:{'ok':Clipperz.PM.Strings['registrationMessagePanelFailureButtonLabel']}});
 | |
| 			return anError;
 | |
| 		});
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 11");
 | |
| //deferredResult.addBoth(function(res) {MochiKit.Logging.logDebug("LoginPanel.doRegistrationWithUsernameAndPassphrase - 10: " + res); return res;});
 | |
| 		deferredResult.addCallback(Clipperz.NotificationCenter.deferredNotification, user, 'setupDone', null);
 | |
| 		deferredResult.callback("token");
 | |
| //MochiKit.Logging.logDebug("--- LoginPanel.doRegistrationWithUsernameAndPassphrase - 12");
 | |
| 		
 | |
| 		return deferredResult;
 | |
| 	},
 | |
| 
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'showRegistrationSplashScreen': function(anUser) {
 | |
| 		var deferredResult;
 | |
| 		var alertElement;
 | |
| 		var	alertDialog;
 | |
| 		var closeButton;
 | |
| 		var closeFunction;
 | |
| 
 | |
| 		deferredResult = new MochiKit.Async.Deferred();
 | |
| 
 | |
| //MochiKit.Logging.logDebug(">>> Main.showRegistrationSplashScreen");
 | |
| 		alertElement = Clipperz.YUI.DomHelper.append(document.body, {tag:'div', id:'registrationSplash', children:[
 | |
| 			{tag:'div', cls:'ydlg-hd', htmlString:Clipperz.PM.Strings['registrationSplashPanelTitle']},
 | |
| 			{tag:'div', cls:'ydlg-bd', children:[
 | |
| 				{tag:'div', cls:'alert-message', id:'splashMessage', children:[
 | |
| 					{tag:'div', htmlString:Clipperz.PM.Strings['registrationSplashPanelDescription']},
 | |
| 					{tag:'table', border:'0', cellpadding:'5', children:[
 | |
| 						{tag:'tbody', children:[
 | |
| 							{tag:'tr', children:[
 | |
| 								{tag:'td', valign:'top', children:[
 | |
| 									{tag:'span', cls:'label', htmlString:Clipperz.PM.Strings['registrationSplashPanelUsernameLabel']}
 | |
| 								]},
 | |
| 								{tag:'td', valign:'top', children:[
 | |
| 									{tag:'span', cls:'value', html:Clipperz.Base.escapeHTML(anUser.username())}
 | |
| 								]}
 | |
| 							]},
 | |
| 							{tag:'tr', children:[
 | |
| 								{tag:'td', valign:'top', children:[
 | |
| 									{tag:'span', cls:'label', htmlString:Clipperz.PM.Strings['registrationSplashPanelPassphraseLabel']}
 | |
| 								]},
 | |
| 								{tag:'td', valign:'top', children:[
 | |
| 									{tag:'div', id:this.getId('showPassphraseDiv'), children:[
 | |
| 										{tag:'span', cls:'value', html:Clipperz.Base.escapeHTML(anUser.passphrase())}
 | |
| 									]},
 | |
| 									{tag:'div', id:this.getId('hidePassphraseDiv'), cls:'Clipperz_recordFieldData', children:[
 | |
| 										{tag:'input', id:this.getId('passwordField'), type:'text', cls:'scrambledField', title:Clipperz.PM.Strings['recordDetailPasswordFieldTooltipLabel'], value:"anUser.passphrase()"}
 | |
| 									]}
 | |
| 								]}
 | |
| 							]},
 | |
| 							{tag:'tr', children:[
 | |
| 								{tag:'td'},
 | |
| 								{tag:'td', valign:'top', children:[
 | |
| //									{tag:'a', href:"#", id:this.getId('togglePassphraseVisibility'), htmlString:Clipperz.PM.Strings['registrationSplashPanelShowPassphraseButtonLabel']} 
 | |
| 									{tag:'input', type:'checkbox', id:this.getId('showPassphraseCheckbox')},
 | |
| 									{tag:'span', cls:'activeText', id:this.getId('showPassphraseText'), htmlString:Clipperz.PM.Strings['registrationSplashPanelShowPassphraseButtonLabel']}
 | |
| 								]}
 | |
| 							]}
 | |
| 						]}
 | |
| 					]}
 | |
| 				]}
 | |
| 			]},
 | |
| 			{tag:'div', cls:'ydlg-ft'}
 | |
| 		]}, true);
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 1");
 | |
| 
 | |
| 		this.getElement('passwordField').dom.value = anUser.passphrase();
 | |
| 		this.getElement('passwordField').wrap({tag:'div', cls:'passwordBackground'}).setStyle('background-position', "0px -" + Math.min(128, Clipperz.PM.Crypto.passwordEntropy(anUser.passphrase())) + "px").setStyle('width', '71px');
 | |
| 		MochiKit.Signal.connect(this.getId('showPassphraseCheckbox'), 'onclick', this, 'togglePassphraseVisibility');
 | |
| 		MochiKit.Signal.connect(this.getId('showPassphraseText'), 'onclick', this, 'togglePassphraseCheckbox');
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 1.1");
 | |
| 
 | |
| 		this.getElement('showPassphraseDiv').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
 | |
| 		this.getElement('hidePassphraseDiv').setVisibilityMode(YAHOO.ext.Element.DISPLAY);
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 1.1.1");
 | |
| 		this.togglePassphraseVisibility();
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 1.2");
 | |
| 		
 | |
| 		alertDialog = new YAHOO.ext.BasicDialog(
 | |
| 			alertElement, { 
 | |
| 				closable:false,
 | |
| 				modal:true,
 | |
| 				autoTabs:false,
 | |
| 				resizable:false,
 | |
| 				fixedcenter:true,
 | |
| 				constraintoviewport:false,
 | |
| 				width:450,
 | |
| 				height:220,
 | |
| 				shadow:true,
 | |
| 				minWidth:300,
 | |
| 				minHeight:300
 | |
| 			}
 | |
| 		);
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 2");
 | |
| 	
 | |
| 		closeFunction = deferredResult.callback;
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 3");
 | |
| 		alertDialog.addKeyListener(27, closeFunction);
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 4");
 | |
| 		closeButton = alertDialog.addButton(Clipperz.PM.Strings['splashAlertCloseButtonLabel'], closeFunction, deferredResult);
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 5");
 | |
| 		alertDialog.setDefaultButton(closeButton);
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 6");
 | |
| 		alertDialog.show('main');
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 7");
 | |
| 
 | |
| 		deferredResult.addBoth(MochiKit.Base.method(alertDialog, 'hide'));
 | |
| 		deferredResult.addCallback(MochiKit.Signal.disconnectAllTo, this)
 | |
| //MochiKit.Logging.logDebug("--- Main.showRegistrationSplashScreen - 8");
 | |
| 		deferredResult.addCallback(MochiKit.Async.succeed);
 | |
| //MochiKit.Logging.logDebug("<<< Main.showRegistrationSplashScreen");
 | |
| 		
 | |
| 		return deferredResult;
 | |
| 	},
 | |
| 	
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'showLoginFormEventHandler': function(anEvent) {
 | |
| 		anEvent.stop();
 | |
| 		this.showLoginForm(true);
 | |
| 	},
 | |
| 	
 | |
| 	'showLoginForm': function(shouldAnimate) {
 | |
| 		if (shouldAnimate) {
 | |
| 			this.showLoginFormAnimator().play();
 | |
| 		} else {
 | |
| 			this.hideRegistrationForm(false);
 | |
| 			this.getActor('loginForm').show(false);
 | |
| 			this.getElement('login_username').focus();
 | |
| 		}
 | |
| 		this.setVisibleForm('login');
 | |
| 	},
 | |
| 
 | |
| 	'showLoginFormAnimator': function() {
 | |
| 		if (this._showLoginFormAnimator == null) {
 | |
| 			var animator;
 | |
| 			var	loginFormActor;
 | |
| 			var registrationFormActor;
 | |
| 			var usernameFieldActor;
 | |
| 			
 | |
| 			animator = new YAHOO.ext.Animator();
 | |
| 			loginFormActor = this.getActor('loginForm', animator);
 | |
| 			loginFormActor.setVisibilityMode(YAHOO.ext.Element.DISPLAY);
 | |
| 			registrationFormActor = this.getActor('registrationForm', animator);
 | |
| 			registrationFormActor.setVisibilityMode(YAHOO.ext.Element.DISPLAY);
 | |
| 			usernameFieldActor = this.getActor('login_username', animator);
 | |
| 			
 | |
| 			animator.startCapture();
 | |
| 			registrationFormActor.hide(true);
 | |
| 			loginFormActor.show(true);
 | |
| 			usernameFieldActor.focus();
 | |
| 			animator.stopCapture();
 | |
| 
 | |
| 			this._showLoginFormAnimator = animator;
 | |
| 		}
 | |
| 		
 | |
| 		return this._showLoginFormAnimator;
 | |
| 	},
 | |
| 
 | |
| 	
 | |
| 	'hideLoginForm': function(shouldAnimate) {
 | |
| 		var loginFormActor;
 | |
| 
 | |
| 		loginFormActor = this.getActor('loginForm');
 | |
| 		loginFormActor.setVisibilityMode(YAHOO.ext.Element.DISPLAY);
 | |
| 		loginFormActor.hide(shouldAnimate);
 | |
| 	},
 | |
| 
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'showRegistrationFormEventHandler': function(anEvent) {
 | |
| 		anEvent.stop();
 | |
| 		this.showRegistrationForm(true);
 | |
| 	},
 | |
| 	
 | |
| 	'showRegistrationForm': function(shouldAnimate) {
 | |
| 		if (shouldAnimate) {
 | |
| 			this.showRegistrationFormAnimator().play(MochiKit.Base.bind(this.showRegistrationAlert, this));
 | |
| 		} else {
 | |
| 			var	errorMessageActor;
 | |
| 			
 | |
| 			this.hideLoginForm(shouldAnimate)
 | |
| 			this.getActor('registrationForm').show(false);
 | |
| 			this.getElement('registration_username').focus();
 | |
| 
 | |
| 			errorMessageActor = this.getActor('registration_errorMessage');
 | |
| 			errorMessageActor.setVisibilityMode(YAHOO.ext.Element.DISPLAY);
 | |
| 			errorMessageActor.update("---");
 | |
| 			errorMessageActor.hide();
 | |
| 			
 | |
| 			this.showRegistrationAlert();
 | |
| 		}
 | |
| 		this.setVisibleForm('registration');
 | |
| 	},
 | |
| 
 | |
| 	'showRegistrationFormAnimator': function() {
 | |
| 		if (this._showRegistrationFormAnimator == null) {
 | |
| 			var animator;
 | |
| 			var	loginFormActor;
 | |
| 			var registrationFormActor;
 | |
| 			var usernameFieldActor;
 | |
| 			var	errorMessageActor;
 | |
| 			
 | |
| 			animator = new YAHOO.ext.Animator();
 | |
| 			loginFormActor = this.getActor('loginForm', animator);
 | |
| 			loginFormActor.setVisibilityMode(YAHOO.ext.Element.DISPLAY);
 | |
| 			registrationFormActor = this.getActor('registrationForm', animator);
 | |
| 			registrationFormActor.setVisibilityMode(YAHOO.ext.Element.DISPLAY);
 | |
| 			usernameFieldActor = this.getActor('registration_username', animator);
 | |
| 			errorMessageActor = this.getActor('registration_errorMessage', animator);
 | |
| 			errorMessageActor.setVisibilityMode(YAHOO.ext.Element.DISPLAY);
 | |
| 			
 | |
| 			animator.startCapture();
 | |
| 			loginFormActor.hide(true);
 | |
| 			errorMessageActor.update("---");
 | |
| 			errorMessageActor.hide();
 | |
| 			registrationFormActor.show(true);
 | |
| 			usernameFieldActor.focus();
 | |
| 			animator.stopCapture();
 | |
| 
 | |
| 			this._showRegistrationFormAnimator = animator;
 | |
| 		}
 | |
| 		
 | |
| 		return this._showRegistrationFormAnimator;
 | |
| 	},
 | |
| 	
 | |
| 	'hideRegistrationForm': function(shouldAnimate) {
 | |
| 		var registrationFormActor;
 | |
| 
 | |
| 		registrationFormActor = this.getActor('registrationForm');
 | |
| 		registrationFormActor.setVisibilityMode(YAHOO.ext.Element.DISPLAY);
 | |
| 		registrationFormActor.hide(shouldAnimate);
 | |
| 	},
 | |
| 
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'shouldShowRegistrationAlert': function() {
 | |
| 		return this._shouldShowRegistrationAlert;
 | |
| 	},
 | |
| 	
 | |
| 	'showRegistrationAlert': function() {
 | |
| 		if ((this.shouldShowRegistrationAlert()) && (Clipperz.PM.Proxy.defaultProxy.isReadOnly() == false)) {
 | |
| 			var alertElement;
 | |
| 			var	alertDialog;
 | |
| 			var closeButton;
 | |
| 			var closeFunction;
 | |
| 
 | |
| 			alertElement = Clipperz.YUI.DomHelper.append(document.body, {tag:'div', id:'alert', children:[
 | |
| 				{tag:'div', cls:'ydlg-hd', htmlString:Clipperz.PM.Strings['splashAlertTitle']},
 | |
| 				{tag:'div', cls:'ydlg-bd', children:[
 | |
| 					{tag:'div', cls:'alert-message', id:'splashMessage', htmlString:Clipperz.PM.Strings['splashAlertText']}
 | |
| 				]},
 | |
| 				{tag:'div', cls:'ydlg-ft'}
 | |
| 			]}, true);
 | |
| 
 | |
| 			alertDialog = new YAHOO.ext.BasicDialog(
 | |
| 				alertElement, { 
 | |
| 					closable:false,
 | |
| 					modal:true,
 | |
| 					autoTabs:false,
 | |
| 					resizable:false,
 | |
| 					fixedcenter:true,
 | |
| 					constraintoviewport:false,
 | |
| 					width:450,
 | |
| 					height:320,
 | |
| 					shadow:true,
 | |
| 					minWidth:300,
 | |
| 					minHeight:300
 | |
| 				}
 | |
| 			);
 | |
| 		
 | |
| 			closeFunction = MochiKit.Base.partial(MochiKit.Base.bind(this.closeResigrationAlert, this), alertDialog);
 | |
| 			alertDialog.addKeyListener(27, closeFunction);
 | |
| 			closeButton = alertDialog.addButton(Clipperz.PM.Strings['splashAlertCloseButtonLabel'], closeFunction, this);
 | |
| 			alertDialog.setDefaultButton(closeButton);
 | |
| 			alertDialog.show('main');
 | |
| 			
 | |
| 			this._shouldShowRegistrationAlert = false;
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	'closeResigrationAlert': function(anAlertDialog) {
 | |
| 		anAlertDialog.hide(MochiKit.Base.bind(function() {anAlertDialog.destroy(true); this.focusOnVisibleForm();}, this));
 | |
| 	},
 | |
| 	
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'onkeydown': function(anEvent) {
 | |
| //MochiKit.Logging.logDebug(">>> onkeydown - " + anEvent.src().id);
 | |
| 		if (anEvent.key().code == 13) {
 | |
| 			if (anEvent.src() == this.getDom('loginForm')) {
 | |
| 				this.doLogin();
 | |
| 			} else if (anEvent.src() == this.getDom('registrationForm')) {
 | |
| 				this.doRegister();
 | |
| 			} else {
 | |
| 			}
 | |
| 			
 | |
| 			anEvent.stop();
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'visibleForm': function() {
 | |
| 		return this._visibleForm;
 | |
| 	},
 | |
| 
 | |
| 	'setVisibleForm': function(aValue) {
 | |
| 		this._visibleForm = aValue;
 | |
| 	},
 | |
| 
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'focusOnVisibleForm': function() {
 | |
| 		if (this.visibleForm() == 'registration') {
 | |
| 			this.getElement('registration_username').focus();
 | |
| 		} else {
 | |
| 			this.getElement('login_username').focus();
 | |
| 		}
 | |
| 	},
 | |
| 
 | |
| 	//-------------------------------------------------------------------------
 | |
| 	
 | |
| 	'show': function() {
 | |
| 		if (this.visibleForm() == 'registration') {
 | |
| 			this.showRegistrationForm(false);
 | |
| 		} else {
 | |
| 			this.showLoginForm(false);
 | |
| 		}
 | |
| 	},
 | |
| 	
 | |
| 	//-------------------------------------------------------------------------
 | |
| 	
 | |
| 	'switchLanguage': function(anEvent) {
 | |
| 		Clipperz.PM.Strings.Languages.setSelectedLanguage(anEvent.src().value);
 | |
| 	},
 | |
| 
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'selectSelectedLanguageOption': function() {
 | |
| 		Clipperz.DOM.selectOptionMatchingValue(this.getDom('languageSelector'), Clipperz.PM.Strings.selectedLanguage, true);
 | |
| 	},
 | |
| 
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'switchLanguageHandler': function() {
 | |
| 		this.render();
 | |
| 		this.show();
 | |
| 	},
 | |
| 
 | |
| 	//-------------------------------------------------------------------------
 | |
| 
 | |
| 	'togglePassphraseCheckbox': function(anEvent) {
 | |
| 		this.getDom('showPassphraseCheckbox').click();
 | |
| 	},
 | |
| 	
 | |
| 	'togglePassphraseVisibility': function(anEvent) {
 | |
| 		if (this.getDom('showPassphraseCheckbox').checked == true) {
 | |
| 			this.getElement('showPassphraseDiv').show();
 | |
| 			this.getElement('hidePassphraseDiv').hide();
 | |
| 		} else {
 | |
| 			this.getElement('showPassphraseDiv').hide();
 | |
| 			this.getElement('hidePassphraseDiv').show();
 | |
| 		}
 | |
| 	},
 | |
| 	
 | |
| 	//-------------------------------------------------------------------------
 | |
| 	__syntaxFix__: "syntax fix"
 | |
| 	
 | |
| });
 |