From 541bb378ddece2eab135a8066a16994e94436dea Mon Sep 17 00:00:00 2001 From: Giulio Cesare Solaroli Date: Mon, 03 Oct 2011 16:04:12 +0000 Subject: Merge pull request #1 from gcsolaroli/master First version of the restructured repository --- (limited to 'frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js') diff --git a/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js b/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js new file mode 100644 index 0000000..abd2621 --- a/dev/null +++ b/frontend/beta/js/Clipperz/PM/Components/Panels/ToolsPanel.js @@ -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 + . + +*/ + +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" + +}); + -- cgit v0.9.0.2