/* Copyright 2008-2015 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/. */ "use strict"; Clipperz.Base.module('Clipperz.PM.UI.Components.Pages'); Clipperz.PM.UI.Components.Pages.LoginPageClass = React.createClass({ displayName: 'Clipperz.PM.UI.Components.Pages.LoginPage', propTypes: { mode: React.PropTypes.oneOf(['CREDENTIALS','PIN']).isRequired, isNewUserRegistrationAvailable: React.PropTypes.bool.isRequired, disabled: React.PropTypes.bool.isRequired }, /* getDefaultProps: function () { return { mode: 'CREDENTIALS', isNewUserRegistrationAvailable: false, disabled: false, // template: Clipperz.PM.UI.Components.PageTemplate } }, */ getInitialState: function () { return { username: '', passphrase: '', pin: '', }; }, //========================================================================= mode: function() { return (this.props['mode'] == 'CREDENTIALS' || this.props['forceCredentials']) ? 'CREDENTIALS' : 'PIN'; }, //========================================================================= handleChange: function (anEvent) { var refs = this.refs; var refName = MochiKit.Base.filter(function (aRefName) { return refs[aRefName] == anEvent.target}, MochiKit.Base.keys(this.refs))[0]; var newState = {}; newState[refName] = anEvent.target.value; this.setState(newState); }, pollForChanges: function() { if (this.mode() == 'CREDENTIALS') { var newState; var usernameValue = this.refs['username'].value; var passphraseValue = this.refs['passphrase'].value; newState = {}; newState['username'] = (usernameValue) ? usernameValue : ""; newState['passphrase'] = (passphraseValue) ? passphraseValue : ""; this.setState(newState); } }, //========================================================================= handleCredentialSubmit: function (event) { event.preventDefault(); this.refs['passphrase'].blur(); var credentials = { 'username': this.refs['username'].value, 'passphrase': this.refs['passphrase'].value } MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'doLogin', credentials); }, handleRegistrationLinkClick: function (event) { event.preventDefault(); MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'showRegistrationForm'); }, //------------------------------------------------------------------------- shouldEnableLoginButton: function () { var result; return ( ((this.state['username'] != '') && (this.state['passphrase'] != '')) // || // (this.state['pin'] != '') ) && !this.props['disabled']; }, loginForm: function () { return React.DOM.form({'key':'loginForm', 'className':'loginForm credentials', 'autoComplete':'off', 'autoCorrect':'off', 'autoCapitalize':'off', 'onChange':this.handleChange, 'onSubmit':this.handleCredentialSubmit}, [ React.DOM.div({'key':'fields'},[ React.DOM.label({'key':'username-label', 'htmlFor' :'name'}, "username"), React.DOM.input({'key':'username', 'type':'text', 'name':'name', 'ref':'username', 'placeholder':"username", 'autoComplete':'off', 'autoCorrect':'off', 'autoCapitalize':'off', 'spellCheck': false}), React.DOM.label({'key':'passphrase-label', 'htmlFor' :'passphrase'}, "passphrase"), React.DOM.input({'key':'passphrase', 'type':'password', 'name':'passphrase', 'ref':'passphrase', 'placeholder':"passphrase"}) ]), React.DOM.button({'key':'button', 'type':'submit', 'disabled':!this.shouldEnableLoginButton(), 'className':'button'}, "login") ]); }, submitPIN: function (event) { this.refs['pin'].blur(); var credentials = { pin: this.refs['pin'].value } MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'doLogin', credentials); }, forcePassphraseLogin: function() { MochiKit.Signal.signal(Clipperz.Signal.NotificationCenter, 'forcePassphraseLogin'); }, handlePinChange: function(anEvent) { if (anEvent.target.value.length == Clipperz.PM.PIN.DEFAULT_PIN_LENGTH) { this.submitPIN(); } this.setState({ 'pin': anEvent.target.value }) }, // handlePinFocus: function(anEvent) { // // anEvent.preventDefault(); // this.refs['pin'].focus(); // }, // pinFormDigits: function() { // var i; // var result; // result = []; // for (i = 0; i