First version of the newly restructured repository
This commit is contained in:
305
frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js
Normal file
305
frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js
Normal file
@@ -0,0 +1,305 @@
|
||||
/*
|
||||
|
||||
Copyright 2008-2011 Clipperz Srl
|
||||
|
||||
This file is part of Clipperz's Javascript Crypto Library.
|
||||
Javascript Crypto Library provides web developers with an extensive
|
||||
and efficient set of cryptographic functions. The library aims to
|
||||
obtain maximum execution speed while preserving modularity and
|
||||
reusability.
|
||||
For further information about its features and functionalities please
|
||||
refer to http://www.clipperz.com
|
||||
|
||||
* Javascript Crypto Library 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.
|
||||
|
||||
* Javascript Crypto Library 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 Javascript Crypto Library. 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.ToolsPanel = function(anElement, args) {
|
||||
args = args || {};
|
||||
|
||||
Clipperz.PM.Components.Panels.ToolsPanel.superclass.constructor.call(this, anElement, args);
|
||||
|
||||
this._generateButtonElement = null;
|
||||
this._needsRenderingUponTabSwitch = false;
|
||||
|
||||
this.render();
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
|
||||
YAHOO.extendX(Clipperz.PM.Components.Panels.ToolsPanel, Clipperz.PM.Components.Panels.BasePanel, {
|
||||
|
||||
'toString': function() {
|
||||
return "Clipperz.PM.Components.Panels.ToolsPanel component";
|
||||
},
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
'render': function() {
|
||||
var bookmarkletUrl;
|
||||
|
||||
//MochiKit.Logging.logDebug(">>> ToolsPanel.render");
|
||||
Clipperz.NotificationCenter.unregister(this);
|
||||
MochiKit.Signal.disconnectAllTo(this);
|
||||
|
||||
if (Clipperz_IEisBroken == true) {
|
||||
bookmarkletUrl = bookmarklet_ie;
|
||||
} else {
|
||||
bookmarkletUrl = bookmarklet;
|
||||
}
|
||||
|
||||
this.element().update("");
|
||||
Clipperz.YUI.DomHelper.append(this.element().dom, {tag:'table', border:'0', cellspacing:'0', cellpadding:'0', children:[
|
||||
{tag:'tbody', children:[
|
||||
{tag:'tr', children:[
|
||||
{tag:'td', valign:'top', width:'200', children:[
|
||||
{tag:'ul', id:"dataSubMenu", cls:'subMenu', children:[
|
||||
{tag:'li', id:this.getId('passwordGenerator'), htmlString:Clipperz.PM.Strings['passwordGeneratorTabLabel']},
|
||||
{tag:'li', id:this.getId('bookmarklet'), htmlString:Clipperz.PM.Strings['bookmarkletTabLabel']},
|
||||
{tag:'li', id:this.getId('compact'), htmlString:Clipperz.PM.Strings['compactTabLabel']},
|
||||
{tag:'li', id:this.getId('httpAuth'), htmlString:Clipperz.PM.Strings['httpAuthTabLabel']}
|
||||
]}
|
||||
]},
|
||||
{tag:'td', valign:'top', children:[
|
||||
{tag:'ul', cls:'clipperzTabPanels', children:[
|
||||
{tag:'li', id:this.getId('passwordGeneratorPanel'), children:[
|
||||
{tag:'div', cls:'clipperzSubPanel', children:[
|
||||
{tag:'h5', htmlString:Clipperz.PM.Strings['passwordGeneratorTabTitle']},
|
||||
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['paswordGeneratorTabDescription']},
|
||||
|
||||
//---------------------------------------------------
|
||||
{tag:'div', children:[
|
||||
{tag:'form', id:this.getId('passwordGeneratorForm'), cls:'passwordGenerator', children:[
|
||||
{tag:'input', type:'text', cls:'clipperz_passwordGenerator_password', id:this.getId('passwordField')},
|
||||
{tag:'table', children:[
|
||||
{tag:'tbody', children:[
|
||||
{tag:'tr', children:[
|
||||
{tag:'td', width:'20%', children:[
|
||||
{tag:'input', type:'checkbox', name:'lowercase', id:this.getId('lowercase'), checked:true},
|
||||
{tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLowercaseLabel']}
|
||||
]},
|
||||
{tag:'td', width:'20%', children:[
|
||||
{tag:'input', type:'checkbox', name:'uppercase', id:this.getId('uppercase'), checked:true},
|
||||
{tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorUppercaseLabel']}
|
||||
]},
|
||||
{tag:'td', width:'20%', children:[
|
||||
{tag:'input', type:'checkbox', name:'numbers', id:this.getId('numbers'), checked:true},
|
||||
{tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorNumberLabel']}
|
||||
]},
|
||||
{tag:'td', width:'20%', children:[
|
||||
{tag:'input', type:'checkbox', name:'symbols', id:this.getId('symbols'), checked:true},
|
||||
{tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorSymbolLabel']}
|
||||
]},
|
||||
{tag:'td', width:'20%', children:[
|
||||
{tag:'span', cls:'passwordGeneratorLength', children:[
|
||||
{tag:'span', htmlString:Clipperz.PM.Strings['passwordGeneratorLengthLabel']},
|
||||
{tag:'span', id:this.getId('passwordLength'), cls:'passwordGeneratorLengthValue', html:'0'}
|
||||
]}
|
||||
]}
|
||||
]}
|
||||
]}
|
||||
]}
|
||||
]},
|
||||
{tag:'div', id:this.getId('generateRandomPassword')}
|
||||
]}
|
||||
//---------------------------------------------------
|
||||
|
||||
]}
|
||||
]},
|
||||
{tag:'li', id:this.getId('bookmarkletPanel'), children:[
|
||||
{tag:'div', cls:'clipperzSubPanel', children:[
|
||||
{tag:'h5', htmlString:Clipperz.PM.Strings['bookmarkletTabTitle']},
|
||||
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['bookmarkletTabDescription']},
|
||||
{tag:'a', href:bookmarkletUrl, cls:'bookmarkletLink', htmlString:Clipperz.PM.Strings['bookmarkletTabBookmarkletTitle']},
|
||||
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['bookmarkletTabInstructions']}
|
||||
]}
|
||||
]},
|
||||
{tag:'li', id:this.getId('compactPanel'), children:[
|
||||
{tag:'div', cls:'clipperzSubPanel', children:[
|
||||
{tag:'h5', htmlString:Clipperz.PM.Strings['compactTabTitle']},
|
||||
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['compactTabDescription']}
|
||||
]}
|
||||
]},
|
||||
{tag:'li', id:this.getId('httpAuthPanel'), children:[
|
||||
{tag:'div', cls:'clipperzSubPanel', children:[
|
||||
{tag:'h5', htmlString:Clipperz.PM.Strings['httpAuthTabTitle']},
|
||||
{tag:'div', cls:'panelDescription', htmlString:Clipperz.PM.Strings['httpAuthTabDescription']},
|
||||
{tag:'div', cls:'bookmarkletConfiguration', children:[Clipperz.PM.Strings['httpAuthBookmarkletConfiguration']]}
|
||||
]}
|
||||
]}
|
||||
]}
|
||||
]}
|
||||
]}
|
||||
]}
|
||||
]});
|
||||
|
||||
new Clipperz.PM.Components.PasswordEntropyDisplay(this.getElement('passwordField'));
|
||||
|
||||
MochiKit.Signal.connect(this.getId('lowercase'), 'onclick', this, 'updatePasswordValue');
|
||||
MochiKit.Signal.connect(this.getId('uppercase'), 'onclick', this, 'updatePasswordValue');
|
||||
MochiKit.Signal.connect(this.getId('numbers'), 'onclick', this, 'updatePasswordValue');
|
||||
MochiKit.Signal.connect(this.getId('symbols'), 'onclick', this, 'updatePasswordValue');
|
||||
|
||||
MochiKit.Signal.connect(this.getDom('passwordField'), 'onkeyup', this, 'updatePasswordLengthLabel');
|
||||
MochiKit.Signal.connect(this.getDom('passwordField'), 'onchange', this, 'updatePasswordLengthLabel');
|
||||
MochiKit.Signal.connect(this.getDom('passwordField'), 'onblur', this, 'updatePasswordLengthLabel');
|
||||
|
||||
this.setGenerateButtonElement(new YAHOO.ext.Button(this.getDom('generateRandomPassword'), {text:Clipperz.PM.Strings['passwordGeneratorTabButtonLabel'], handler:this.updatePasswordValue, scope:this}));
|
||||
|
||||
this.setNeedsRenderingUponTabSwitch(false);
|
||||
this.tabPanelController().setUp();
|
||||
Clipperz.NotificationCenter.register(null, 'tabSelected', this, 'tabSelectedHandler');
|
||||
Clipperz.NotificationCenter.register(null, 'switchLanguage', this, 'switchLanguageHandler');
|
||||
//MochiKit.Logging.logDebug("<<< ToolsPanel.render");
|
||||
},
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
'needsRenderingUponTabSwitch': function() {
|
||||
return this._needsRenderingUponTabSwitch;
|
||||
},
|
||||
|
||||
'setNeedsRenderingUponTabSwitch': function(aValue) {
|
||||
this._needsRenderingUponTabSwitch = aValue;
|
||||
},
|
||||
|
||||
'tabSelectedHandler': function(anEvent) {
|
||||
if (this.needsRenderingUponTabSwitch()) {
|
||||
this.render();
|
||||
}
|
||||
|
||||
if (anEvent.parameters() == this.getId('httpAuth')) {
|
||||
var textarea;
|
||||
|
||||
textarea = document.getElementById("httpAuthDefaultConfiguration");
|
||||
textarea.focus();
|
||||
textarea.select();
|
||||
}
|
||||
},
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
'tabPanelController': function() {
|
||||
if (this._tabPanelController == null) {
|
||||
var tabPanelControllerConfig;
|
||||
|
||||
tabPanelControllerConfig = {}
|
||||
tabPanelControllerConfig[this.getId('passwordGenerator')] = this.getId('passwordGeneratorPanel');
|
||||
tabPanelControllerConfig[this.getId('bookmarklet')] = this.getId('bookmarkletPanel');
|
||||
tabPanelControllerConfig[this.getId('compact')] = this.getId('compactPanel');
|
||||
tabPanelControllerConfig[this.getId('httpAuth')] = this.getId('httpAuthPanel');
|
||||
this._tabPanelController = new Clipperz.PM.Components.TabPanel.TabPanelController({ config:tabPanelControllerConfig, selectedTab:this.getId('passwordGenerator') });
|
||||
}
|
||||
|
||||
return this._tabPanelController;
|
||||
},
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
'generateButtonElement': function() {
|
||||
return this._generateButtonElement;
|
||||
},
|
||||
|
||||
'setGenerateButtonElement': function(aValue) {
|
||||
this._generateButtonElement = aValue;
|
||||
},
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
|
||||
'updatePasswordValue': function(anEvent) {
|
||||
var randomBytes;
|
||||
var randomValue;
|
||||
var charset;
|
||||
var charsetBitSize;
|
||||
var stringValue;
|
||||
var blockIndex;
|
||||
|
||||
//MochiKit.Logging.logDebug(">>> updatePasswordValue");
|
||||
randomBytes = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(50);
|
||||
stringValue = "";
|
||||
blockIndex = 0;
|
||||
|
||||
charset = "";
|
||||
if (this.getDom('lowercase').checked) {
|
||||
charset += Clipperz.PM.Strings['passwordGeneratorLowercaseCharset'];
|
||||
}
|
||||
if (this.getDom('uppercase').checked) {
|
||||
charset += Clipperz.PM.Strings['passwordGeneratorUppercaseCharset'];
|
||||
}
|
||||
if (this.getDom('numbers').checked) {
|
||||
charset += Clipperz.PM.Strings['passwordGeneratorNumberCharset'];
|
||||
}
|
||||
if (this.getDom('symbols').checked) {
|
||||
charset += Clipperz.PM.Strings['passwordGeneratorSymbolCharset'];
|
||||
}
|
||||
|
||||
charsetBitSize = 0;
|
||||
while (Math.pow(2, charsetBitSize) < charset.length) {
|
||||
charsetBitSize ++;
|
||||
}
|
||||
|
||||
if (charsetBitSize > 0) {
|
||||
while (Clipperz.PM.Crypto.passwordEntropy(stringValue) < 128) {
|
||||
if (((blockIndex + 1)*charsetBitSize) > (randomBytes.length() * 8)) {
|
||||
randomBytes = Clipperz.Crypto.PRNG.defaultRandomGenerator().getRandomBytes(50);
|
||||
blockIndex = 0;
|
||||
}
|
||||
randomValue = randomBytes.bitBlockAtIndexWithSize(blockIndex*charsetBitSize, charsetBitSize);
|
||||
if (randomValue < charset.length) {
|
||||
stringValue += charset.charAt(randomValue);
|
||||
}
|
||||
|
||||
blockIndex ++;
|
||||
}
|
||||
} else {
|
||||
stringValue = "";
|
||||
}
|
||||
|
||||
this.getElement('passwordField').dom.focus()
|
||||
this.getElement('passwordField').dom.value = stringValue;
|
||||
|
||||
|
||||
if (anEvent.src) {
|
||||
anEvent.src().focus();
|
||||
} else {
|
||||
this.generateButtonElement().el.focus();
|
||||
}
|
||||
|
||||
this.setNeedsRenderingUponTabSwitch(true);
|
||||
|
||||
return false;
|
||||
//MochiKit.Logging.logDebug("<<< updatePasswordValue");
|
||||
},
|
||||
|
||||
//-----------------------------------------------------
|
||||
|
||||
'updatePasswordLengthLabel': function() {
|
||||
this.getElement('passwordLength').update(this.getDom('passwordField').value.length);
|
||||
},
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
__syntaxFix__: "syntax fix"
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user