/** @file * @author Edouard DUPIN * @copyright 2018, Edouard DUPIN, all right reserved * @license PROPRIETARY (see license file) */ import { Component, OnInit } from '@angular/core'; import { Router } from "@angular/router"; import { Location } from '@angular/common'; import { fadeInAnimation } from '../_animations/index'; import { slideInOutAnimation } from '../_animations/index'; import { UserService } from '../user.service'; import { SessionService } from '../session.service'; import { CookiesService } from '../cookies.service'; export let checkLoginValidity = function(_value:string):boolean { let regexCheck = new RegExp("^[a-zA-Z0-9_\.-]+$"); if (regexCheck.test(_value)) { return true; } return false; }; export let checkEmailValidity = function(_value:string):boolean { let regexCheck = new RegExp("^[a-zA-Z0-9_\.@-]+@[a-zA-Z0-9_\.-]+\\.[a-zA-Z]+$"); if (regexCheck.test(_value)) { return true; } return false; }; export let checkPasswordValidity = function(_value:string):boolean { let regexCheck = new RegExp("^[a-zA-Z0-9_\.@ %:;,=}{\?\!\*\+\(\)\[\]\|&#%~°/\\\<\>-]+$"); if (regexCheck.test(_value)) { return true; } return false; }; declare function SHA512(param1: any): any; @Component({ selector: 'app-login', templateUrl: './login.component.html', styleUrls: ['./login.component.less'], animations: [fadeInAnimation], host: { '[@fadeInAnimation]': '' } }) export class LoginComponent implements OnInit { public loginOK:boolean = false; public loginHelp:string = ""; public login:string = ""; public passOK:boolean = false; public passHelp:string = ""; public password:string = ""; public loginButtonDisabled:boolean = true; public error:string = ""; public loginType:string = "Username/E-mail"; public rememberMe:boolean = true; constructor(private router: Router, private locate: Location, private cookiesService: CookiesService, private userService: UserService, private sessionService: SessionService) { } ngOnInit() { // TODO : If already loaded ==> jusp in the home page ... } updateButtonVisibility():void { if ( this.loginOK == true && this.passOK == true) { this.loginButtonDisabled = false; } else { this.loginButtonDisabled = true; } this.error = ""; } checkLogin(_newValue:string):void { this.login = _newValue; if (this.login == null) { this.loginOK = false; this.loginHelp = ""; this.updateButtonVisibility(); return; } if (this.login.length < 6) { this.loginOK = false; this.loginHelp = "Need 6 characters"; this.loginType = "Username/E-mail"; this.updateButtonVisibility(); return; } if (checkLoginValidity(this.login) == true) { this.loginOK = true; this.loginHelp = ""; this.loginType = "Username"; } else { if (checkEmailValidity(this.login) == true) { this.loginOK = true; this.loginHelp = ""; this.loginType = "E-mail"; } else { this.loginOK = false; this.loginHelp = 'Not valid: characters, numbers, "_-." and email format: you@example.com'; } } this.updateButtonVisibility(); } checkPassword(_newValue:string):void { this.password = _newValue; if (this.password == null) { this.passOK = false; this.passHelp = ""; this.updateButtonVisibility(); return; } if (this.password.length < 6) { this.passOK = false; this.passHelp = "Need 6 characters"; } else { if (checkPasswordValidity(this.password) == true) { this.passOK = true; this.passHelp = ""; } else { this.passOK = false; this.passHelp = 'Not valid: characters, numbers and "_-:;.,?!*+=}{([|)]% @&~#/\<>"'; } } this.updateButtonVisibility(); } onLogin():void { this.sessionService.destroy(); let self = this this.userService.login(this.login, this.password) .then(function(response) { self.error = "Login ..."; self.sessionService.create(response['sessionId'], response['login'], response['email'], response['role'], response['avatar']); if (self.rememberMe == true) { self.cookiesService.set("yota-login", response['login'], 365); self.cookiesService.set("yota-password", SHA512(self.password), 365); } self.router.navigate(['home']); }).catch(function(response) { self.error = "Wrong e-mail/login or password"; }); } onCancel():void { console.log("onCancel ... '" + this.login + "':'" + this.password + "'"); this.locate.back(); } }