Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import View from "../View";
- import ServiceLocator from "../../ServiceLocator";
- import FieldValidator from "../util/FieldValidator";
- import DataModel from "../../model/DataModel";
- import Path from "../../Path";
- import * as shajs from "sha.js";
- import { view_layer_id } from "../../services/ViewManager";
- import InfoMessageView from "../common/popup/InfoMessageView";
- import ForgottenPasswordView from "./ForgottenPasswordView";
- import ForgottenUsernameView from "./ForgottenUsernameView";
- import Signal from "../../lib/signals/Signal";
- import TooltipManager, { ITooltipInfo } from "../TooltipManager";
- import UserRegistrationView from "./UserRegistrationView";
- import UsuariosEvent from "../../events/UsuariosEvent";
- import UsuariosVO from "../../vo/UsuarioVO";
- import { event_type } from "../../services/server_events/ServerEvent";
- import Config from "../../Config";
- export default class LoginView extends View
- {
- // #region Attributes //
- // private:
- private _isValidUsername: boolean = true;
- private _isValidPassword: boolean = true;
- private _tooltipManager: TooltipManager = null;
- private _fieldValidator: FieldValidator = null;
- // Signals.
- private _onLoginSuccess: Signal = new Signal();
- // Constants.
- private static readonly _kResId: string = "login-login";
- // #endregion //
- // #region Properties //
- public static get kResId(): string { return this._kResId; }
- // Signals.
- public get onLoginSuccess(): Signal { return this._onLoginSuccess; };
- // #endregion //
- // #region Methods //
- // public:
- public constructor()
- {
- super( LoginView._kResId );
- this._fieldValidator = new FieldValidator();
- // Attach UI event handlers.
- this._jqRoot.find( "#username" ).on( "input", this.onUsername_Changed.bind( this ) );
- this._jqRoot.find( "#username" ).on( "keydown", this.onEnterKey_Pressed.bind( this ) );
- this._jqRoot.find( "#password" ).on( "input", this.onPassword_Changed.bind( this ) );
- this._jqRoot.find( "#password" ).on( "keydown", this.onEnterKey_Pressed.bind( this ) );
- this._jqRoot.find( "#loginBtn" ).on( "click", this.onLoginBtn_Click.bind( this ) );
- this._jqRoot.find( "#generalConditions" ).on( "click", this.onGeneralConditions_Click );
- this._jqRoot.find( "#register" ).on( "click", this.onRegister_Click.bind( this ) );
- this._jqRoot.find( "#recoverPassword" ).on( "click", this.onRecoverPassword_Click.bind( this ) );
- this._jqRoot.find( "#recoverUsername" ).on( "click", this.onRecoverUsername_Click.bind( this ) );
- }
- public init(): void
- {
- // Signals.
- DataModel.usuario.isLoggedSignal.add( this.onLogin_Result, this );
- }
- public postinit(): void
- {
- // Add tooltips.
- const kArrTooltipInfo: Array<ITooltipInfo> = [
- { selector: "#lgUsernameError", locale: "CAMPONOVALIDO" },
- { selector: "#passwordError", locale: "CAMPONOVALIDO" }
- ];
- this._tooltipManager = new TooltipManager();
- this._tooltipManager.init( kArrTooltipInfo, this._jqRoot );
- }
- public preend(): void
- {
- // Cleanup tooltips.
- this._tooltipManager.end();
- }
- public end(): void
- {
- // Signals.
- DataModel.usuario.isLoggedSignal.remove( this.onLogin_Result, this );
- super.end();
- }
- public scale( scaleFactor: number, winWidth: number, winHeight: number ): void
- {
- this._jqRoot.find( "#huntersLogo" ).css( "transform", "scale(" + scaleFactor.toString() + ")" );
- this._jqRoot.find( "#loginPanel" ).css( "transform", "scale(" + scaleFactor.toString() + ")" );
- }
- // TEST:
- public test_login( username: string, password: string ): void
- {
- // TODO: SHA256 should not be used for passwords because it is not safe ??? Look for information about this matter.
- let passHash: string = shajs( "sha256" ).update( password ).digest( "hex" );
- // Disable login button.
- this._jqRoot.find( "#loginBtn" ).prop( "disabled", true );
- // Login.
- let usuarioVO: UsuariosVO = new UsuariosVO();
- usuarioVO.IdPersonaje = username;
- usuarioVO.Contrasena = passHash;
- DataModel.usuario.passHash = passHash;
- new UsuariosEvent( event_type.LOGIN, { usuarioVO: usuarioVO, atributo: jQuery.i18n( "LOCALE" ) } ).dispatch();
- // Show loading animation.
- ServiceLocator.loadingAnimation.show();
- }
- // #endregion //
- // #region Callbacks //
- private onEnterKey_Pressed(event: KeyboardEvent):void{
- let keycode:number = (event.keyCode ? event.keyCode : event.which);
- if (keycode == 13) {
- this.onLoginBtn_Click();
- }
- }
- private onLoginBtn_Click(): void
- {
- // Get input fields.
- let username: string = this._jqRoot.find( "#username" ).val() as string;
- username = username.trim();
- this._jqRoot.find( "#username" ).val( username );
- let password: string = this._jqRoot.find( "#password" ).val() as string;
- // Validate input fields.
- this._isValidUsername = this._fieldValidator.validate( this._fieldValidator.kAlphanumeric, username, Config.minimoCaracteresUsuario, Config.maximoCaracteresUsuario );
- this._isValidPassword = password.length >= Config.minimoCaracteresContra ? true : false;
- if ( this._isValidUsername && this._isValidPassword )
- {
- // TODO: SHA256 should not be used for passwords because it is not safe ??? Look for information about this matter.
- let passHash: string = shajs( "sha256" ).update( password ).digest( "hex" );
- // Disable login button.
- this._jqRoot.find( "#loginBtn" ).prop( "disabled", true );
- // Login.
- let usuarioVO: UsuariosVO = new UsuariosVO();
- usuarioVO.IdPersonaje = username;
- usuarioVO.Contrasena = passHash;
- DataModel.usuario.passHash = passHash;
- new UsuariosEvent( event_type.LOGIN, { usuarioVO: usuarioVO, atributo: jQuery.i18n( "LOCALE" ) } ).dispatch();
- // Show loading animation.
- ServiceLocator.loadingAnimation.show();
- }
- else
- {
- // Show error.
- if ( this._isValidUsername )
- this._jqRoot.find( "#lgUsernameError" ).css( "visibility", "hidden" );
- else
- this._jqRoot.find( "#lgUsernameError" ).css( "visibility", "visible" );
- if ( this._isValidPassword )
- this._jqRoot.find( "#passwordError" ).css( "visibility", "hidden" );
- else
- this._jqRoot.find( "#passwordError" ).css( "visibility", "visible" );
- }
- }
- private onRegister_Click(): void
- {
- let userRegistration = new UserRegistrationView();
- userRegistration.init();
- ServiceLocator.viewManager.fadeIn( userRegistration, view_layer_id.POPUP );
- }
- private onRecoverPassword_Click(): void
- {
- let forgottenPassword = new ForgottenPasswordView();
- forgottenPassword.init();
- ServiceLocator.viewManager.fadeIn( forgottenPassword, view_layer_id.POPUP );
- }
- private onRecoverUsername_Click(): void
- {
- let forgottenUsername = new ForgottenUsernameView();
- forgottenUsername.init();
- ServiceLocator.viewManager.fadeIn( forgottenUsername, view_layer_id.POPUP );
- }
- private onGeneralConditions_Click(): void
- {
- window.open( Path.kGeneralConditions );
- }
- private onLogin_Result( result: number ): void
- {
- // Hide loading animation.
- ServiceLocator.loadingAnimation.hide();
- switch ( result )
- {
- case login_result.INVALID_USERNAME:
- {
- // Invalid username.
- let popInfo: InfoMessageView = new InfoMessageView();
- popInfo.message = jQuery.i18n( "USUINCORRECTO" );
- popInfo.init();
- ServiceLocator.viewManager.fadeIn( popInfo, view_layer_id.POPUP );
- break;
- }
- case login_result.ACCOUNT_NOT_ACTIVATED:
- {
- // User account not activated.
- let popInfo: InfoMessageView = new InfoMessageView();
- popInfo.message = jQuery.i18n( "PENDIENTECONFIRMACION" );
- popInfo.init();
- ServiceLocator.viewManager.fadeIn( popInfo, view_layer_id.POPUP );
- break;
- }
- case login_result.LOGIN_SUCCESS:
- {
- // Login success.
- //this._jqRoot.find( "#loginform" ).submit(); //Launch browser save password prompt
- this._onLoginSuccess.dispatch(); //Change view
- break;
- }
- case login_result.SERVER_UNAVAILABLE:
- {
- // Server unavailable.
- let popInfo: InfoMessageView = new InfoMessageView();
- popInfo.message = jQuery.i18n( "SERVERMANTENIMIENTO" );
- popInfo.init();
- ServiceLocator.viewManager.fadeIn( popInfo, view_layer_id.POPUP );
- break;
- }
- case login_result.ACCOUNT_BANNED:
- {
- // User account banned.
- let fechaArr: string[] = DataModel.usuario.usuarioVO.FechaIniBan.split( ' ' );
- let popInfo: InfoMessageView = new InfoMessageView();
- popInfo.message = jQuery.i18n( "REGISTERBAN1" ) + " " + fechaArr[ 0 ] + " " + jQuery.i18n( "REGISTERBAN2" ) + " " +
- fechaArr[ 1 ] + ", " + jQuery.i18n( "REGISTERBAN3" ) + " " + DataModel.usuario.usuarioVO.DiasBan + " " + jQuery.i18n( "REGISTERBAN4" );
- popInfo.init();
- ServiceLocator.viewManager.fadeIn( popInfo, view_layer_id.POPUP );
- break;
- }
- }
- this._jqRoot.find( "#loginBtn" ).prop( "disabled", false );
- }
- private onUsername_Changed(): void
- {
- if ( !this._isValidUsername )
- {
- let username: string = this._jqRoot.find( "#username" ).val() as string;
- username = username.trim();
- this._jqRoot.find( "#username" ).val( username );
- if ( this._fieldValidator.validate( this._fieldValidator.kAlphanumeric, username, Config.minimoCaracteresUsuario, Config.maximoCaracteresUsuario ) )
- this._jqRoot.find( "#lgUsernameError" ).css( "visibility", "hidden" );
- else
- this._jqRoot.find( "#lgUsernameError" ).css( "visibility", "visible" );
- }
- }
- private onPassword_Changed(): void
- {
- if ( !this._isValidPassword )
- {
- let password: string = this._jqRoot.find( "#password" ).val() as string;
- if ( password.length >= Config.minimoCaracteresContra )
- this._jqRoot.find( "#passwordError" ).css( "visibility", "hidden" );
- else
- this._jqRoot.find( "#passwordError" ).css( "visibility", "visible" );
- }
- }
- // #endregion //
- }
- const enum login_result
- {
- INVALID_USERNAME = 1,
- ACCOUNT_NOT_ACTIVATED,
- LOGIN_SUCCESS,
- SERVER_UNAVAILABLE,
- ACCOUNT_BANNED
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement