Major update to auth for MAuth
This commit is contained in:
@@ -9,10 +9,10 @@
|
||||
</a>
|
||||
<div *ngIf="auth.isLoggedIn" class="top-bar-buttons flex-right">
|
||||
<a class="nav-button nav-button-login" routerLink="/account/settings"><span>{{ auth.loggedInUser.userName.toUpperCase() }}</span></a>
|
||||
<a class="nav-button nav-button-login" routerLink="/account/logout"><span>LOGOUT</span></a>
|
||||
<a class="nav-button nav-button-login" href="/api/account/logout"><span>LOGOUT</span></a>
|
||||
</div>
|
||||
<div *ngIf="!auth.isLoggedIn" class="top-bar-buttons flex-right">
|
||||
<a class="nav-button nav-button-login" routerLink="/account/login"><span>LOGIN</span></a>
|
||||
<a class="nav-button nav-button-login" href="https://auth.mistox.com/account/login?returnURL=https://boredcareers.com/"><span>LOGIN</span></a>
|
||||
<a class="nav-button nav-button-login" routerLink="/account/register"><span>REGISTER</span></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
import { Routes } from '@angular/router';
|
||||
import { ForgotPasswordComponent } from './pages/account/forgotpassword/forgotpassword.component';
|
||||
import { LoginComponent } from './pages/account/login/login.component';
|
||||
import { RegisterComponent } from './pages/account/register/register.component';
|
||||
import { AboutComponent } from './pages/legal/about/about.component';
|
||||
import { SettingsComponent } from './pages/account/settings/settings.component';
|
||||
import { LogoutComponent } from './pages/account/logout/logout.component';
|
||||
import { ResetPasswordComponent } from './pages/account/resetpassword/resetpassword.component';
|
||||
import { VerifyEmailComponent } from './pages/account/verifyemail/verifyemail.component';
|
||||
import { HomeComponent } from './pages/main/home/home.component';
|
||||
import { ContactComponent } from './pages/legal/contact/contact.component';
|
||||
import { PrivacyComponent } from './pages/legal/privacy/privacy.component';
|
||||
@@ -30,15 +23,6 @@ export const routes: Routes = [
|
||||
// Company
|
||||
{ path: "company/connect", component: CompanyConnectComponent },
|
||||
|
||||
// Account stuff
|
||||
{ path: "account/forgotpassword", component: ForgotPasswordComponent },
|
||||
{ path: "account/resetpassword", component: ResetPasswordComponent },
|
||||
{ path: "account/verifyemail", component: VerifyEmailComponent },
|
||||
{ path: "account/login", component: LoginComponent },
|
||||
{ path: "account/logout", component: LogoutComponent },
|
||||
{ path: "account/register", component: RegisterComponent },
|
||||
{ path: "account/settings", component: SettingsComponent },
|
||||
|
||||
// Legal
|
||||
{ path: "about", component: AboutComponent },
|
||||
{ path: "contact", component: ContactComponent },
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import { Component, ElementRef, ViewChild } from '@angular/core';
|
||||
import { Router, RouterModule, RouterOutlet } from '@angular/router';
|
||||
import { Router, RouterModule, RouterOutlet, ActivatedRoute } from '@angular/router';
|
||||
import { Authentication } from './services/Authentication';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { CommonModule, Location } from '@angular/common';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
@@ -15,7 +16,31 @@ export class App {
|
||||
@ViewChild('jobsLink') jobLink!: ElementRef<HTMLAnchorElement>;
|
||||
@ViewChild('resumesLink') resumeLink!: ElementRef<HTMLAnchorElement>;
|
||||
|
||||
constructor(public auth: Authentication, private router: Router){}
|
||||
constructor( private http: HttpClient, public auth: Authentication, private router: Router, private route: ActivatedRoute, private location: Location){
|
||||
this.route.queryParams.subscribe(params => {
|
||||
|
||||
const loginToken = params['LoginToken'];
|
||||
console.log("LoginToken : " + loginToken);
|
||||
|
||||
if (loginToken){
|
||||
this.http.post( "api/account/loginticket", JSON.stringify(loginToken), { headers: {'Content-Type': 'application/json'} } ).subscribe({
|
||||
next: data => {
|
||||
auth.getLoginState();
|
||||
const pathWithoutQuery = this.location.path().split('?')[0];
|
||||
this.location.replaceState(pathWithoutQuery);
|
||||
},
|
||||
error: err => {
|
||||
auth.getLoginState();
|
||||
const pathWithoutQuery = this.location.path().split('?')[0];
|
||||
this.location.replaceState(pathWithoutQuery);
|
||||
}
|
||||
})
|
||||
}else{
|
||||
auth.getLoginState();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
ngAfterViewInit(){
|
||||
let ViewLinks = [ this.homeLink, this.resumeLink, this.jobLink ];
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
export class Account {
|
||||
public id: number = 0;
|
||||
public id: number = -1;
|
||||
public userName: string = "";
|
||||
public email: string = "";
|
||||
public emailVerified: boolean = false;
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
<div class="center">
|
||||
<form class="big-frame background-border" #accountForm="ngForm" (ngSubmit)="onSubmit()">
|
||||
|
||||
<h3>Forgot Password</h3>
|
||||
|
||||
<div class="frame-item">
|
||||
<input type="text" [(ngModel)]="email" name="email" placeholder=" " />
|
||||
<label>Email</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="flex-row">
|
||||
<div class="frame-button">
|
||||
<input class="submit" type="submit" value="Send Code" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul *ngIf="errorMsgs.length > 0" >
|
||||
<li *ngFor="let msg of errorMsgs" >{{ msg }}</li>
|
||||
</ul>
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,55 +0,0 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'account-forgot',
|
||||
templateUrl: './forgotpassword.component.html',
|
||||
imports: [ FormsModule, CommonModule ]
|
||||
})
|
||||
export class ForgotPasswordComponent {
|
||||
email: string = "";
|
||||
errorMsgs: string[] = [];
|
||||
returnURL: string = '/';
|
||||
|
||||
constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title) {
|
||||
this.title.setTitle("Forgot Password | Mistox");
|
||||
this.route.queryParams.subscribe(params => {
|
||||
this.returnURL = params['returnURL'] || '/';
|
||||
});
|
||||
}
|
||||
|
||||
sleep(ms: number) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
// Clear errors
|
||||
this.errorMsgs = [];
|
||||
|
||||
// Send to server and wait for response
|
||||
this.errorMsgs.push("Waiting for response from server");
|
||||
const body = new HttpParams()
|
||||
.set("Email", this.email)
|
||||
const headers = new HttpHeaders({
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
});
|
||||
this.http.post( "api/account/sendresetpassword", body, { headers, responseType: "text" } ).subscribe({
|
||||
next: async (data) => {
|
||||
if (data.trim() == "Success"){
|
||||
this.errorMsgs = ["Reset-password sent"];
|
||||
await this.sleep(3000);
|
||||
this.router.navigate([this.returnURL]);
|
||||
}else{
|
||||
this.errorMsgs = [data];
|
||||
}
|
||||
},
|
||||
error: err => {
|
||||
console.log("HTTP Error Signing In: ", err);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
<div class="center">
|
||||
<form class="big-frame background-border" #accountForm="ngForm" (ngSubmit)="onSubmit()">
|
||||
<h3>Login</h3>
|
||||
|
||||
<div class="frame-item">
|
||||
<input type="text" [(ngModel)]="UserName" name="userName" placeholder=" " autocomplete="username" />
|
||||
<label>UserName</label>
|
||||
</div>
|
||||
|
||||
<div class="frame-item">
|
||||
<input type="password" [(ngModel)]="Password" name="password" placeholder=" " autocomplete="current-password" />
|
||||
<label>Password</label>
|
||||
</div>
|
||||
|
||||
<div class="flex-row">
|
||||
<div class="frame-button">
|
||||
<input class="submit" type="submit" value="LOGIN" />
|
||||
</div>
|
||||
|
||||
<div class="frame-forgot">
|
||||
<div class="sub-frame">
|
||||
Stay Logged In
|
||||
<input type="checkbox" [(ngModel)]="StayLoggedIn" name="stayLoggedIn" />
|
||||
</div>
|
||||
<div class="sub-frame">
|
||||
<a href="/account/forgotpassword">Forgot Password</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul *ngIf="errorMsgs.length > 0" >
|
||||
<li *ngFor="let msg of errorMsgs" >{{ msg }}</li>
|
||||
</ul>
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,55 +0,0 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { Authentication, SessionType } from '../../../services/Authentication';
|
||||
|
||||
@Component({
|
||||
selector: 'account-login',
|
||||
templateUrl: './login.component.html',
|
||||
imports: [ FormsModule, CommonModule ],
|
||||
standalone: true
|
||||
})
|
||||
export class LoginComponent {
|
||||
UserName: string = "";
|
||||
Password: string = "";
|
||||
StayLoggedIn: boolean = false;
|
||||
errorMsgs: string[] = [];
|
||||
returnURL: string = '/';
|
||||
|
||||
constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) {
|
||||
this.title.setTitle("Login | Mistox");
|
||||
this.route.queryParams.subscribe(params => {
|
||||
this.returnURL = params['returnURL'] || '/';
|
||||
});
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
this.errorMsgs = [];
|
||||
|
||||
if (!this.UserName) {
|
||||
this.errorMsgs.push("The 'username' field is required");
|
||||
}
|
||||
if (!this.Password) {
|
||||
this.errorMsgs.push("The 'password' field is required");
|
||||
}
|
||||
if (this.Password.length < 6) {
|
||||
this.errorMsgs.push("Password must be at least 6 Characters long");
|
||||
}
|
||||
if (this.errorMsgs.length > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.errorMsgs.push("Waiting for response from server");
|
||||
this.auth.Login(this.UserName, this.Password, this.StayLoggedIn).subscribe({
|
||||
next: data => {
|
||||
this.router.navigate([this.returnURL]);
|
||||
},
|
||||
error: err => {
|
||||
this.errorMsgs = [ err.error ];
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,30 +0,0 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { Authentication } from '../../../services/Authentication';
|
||||
|
||||
@Component({
|
||||
selector: 'account-logout',
|
||||
templateUrl: './logout.component.html',
|
||||
imports: [ FormsModule, CommonModule ],
|
||||
standalone: true
|
||||
})
|
||||
export class LogoutComponent {
|
||||
errorMsgs: string[] = [];
|
||||
returnURL: string = '/';
|
||||
|
||||
constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title, public auth: Authentication ) {
|
||||
this.title.setTitle("Logout | Mistox");
|
||||
}
|
||||
|
||||
ngAfterViewInit(){
|
||||
this.auth.Logout().subscribe({
|
||||
next: data => {
|
||||
window.location.href = "";
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
<div class="center">
|
||||
<form class="big-frame background-border" #accountForm="ngForm" (ngSubmit)="onSubmit()">
|
||||
<h3>Register</h3>
|
||||
|
||||
<div class="frame-item">
|
||||
<input type="text" [(ngModel)]="userName" name="userName" placeholder=" " autocomplete="username" />
|
||||
<label>UserName</label>
|
||||
</div>
|
||||
|
||||
<div class="frame-item">
|
||||
<input type="email" [(ngModel)]="email" name="email" placeholder=" " autocomplete="current-password" />
|
||||
<label>Email</label>
|
||||
</div>
|
||||
|
||||
<div class="frame-item">
|
||||
<input type="password" [(ngModel)]="passwordHash" name="password" placeholder=" " autocomplete="current-password" />
|
||||
<label>Password</label>
|
||||
</div>
|
||||
|
||||
<div class="frame-item">
|
||||
<input type="password" [(ngModel)]="passwordHash2" name="repeat password" placeholder=" " autocomplete="current-password" />
|
||||
<label>Repeat Password</label>
|
||||
</div>
|
||||
|
||||
<div class="flex-row">
|
||||
<div class="frame-button">
|
||||
<input class="submit" type="submit" value="REGISTER" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul *ngIf="errorMsgs.length > 0" >
|
||||
<li *ngFor="let msg of errorMsgs" >{{ msg }}</li>
|
||||
</ul>
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,80 +0,0 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { Account } from '../../../models/Account';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'account-register',
|
||||
templateUrl: './register.component.html',
|
||||
imports: [ FormsModule, CommonModule ]
|
||||
})
|
||||
export class RegisterComponent {
|
||||
userName: string = ""
|
||||
email: string = "";
|
||||
passwordHash: string = "";
|
||||
passwordHash2: string = "";
|
||||
error: string = "";
|
||||
|
||||
errorMsgs: string[] = [];
|
||||
returnURL: string = '/';
|
||||
|
||||
constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title ) {
|
||||
this.title.setTitle("Register | Mistox");
|
||||
this.route.queryParams.subscribe(params => {
|
||||
this.returnURL = params['returnURL'] || '/';
|
||||
});
|
||||
}
|
||||
|
||||
sleep(ms: number) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
// Clear errors
|
||||
this.errorMsgs = [];
|
||||
|
||||
// Validate data
|
||||
const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
||||
if (!regex.test(this.email)){
|
||||
this.errorMsgs.push("A valid email is required");
|
||||
}
|
||||
if (!this.userName) {
|
||||
this.errorMsgs.push("The 'username' field is required");
|
||||
}
|
||||
if (!this.passwordHash) {
|
||||
this.errorMsgs.push("The 'password' field is required");
|
||||
}
|
||||
if (this.passwordHash.length < 6) {
|
||||
this.errorMsgs.push("Password must be at least 6 Characters long");
|
||||
}
|
||||
if (this.passwordHash !== this.passwordHash2){
|
||||
this.errorMsgs.push("Passwords don't match");
|
||||
}
|
||||
if (this.errorMsgs.length > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Send to server and wait for response
|
||||
this.errorMsgs.push("Waiting for response from server");
|
||||
const body = new HttpParams()
|
||||
.set("Email", this.email)
|
||||
.set("UserName", this.userName)
|
||||
.set("PasswordHash", this.passwordHash);
|
||||
const headers = new HttpHeaders({
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
});
|
||||
this.http.post<Account>( "api/account/register", body, { headers } ).subscribe({
|
||||
next: async (data) => {
|
||||
this.errorMsgs = ["Account Created"];
|
||||
await this.sleep(3000);
|
||||
this.router.navigate([this.returnURL]);
|
||||
},
|
||||
error: err => {
|
||||
this.errorMsgs = [ err.error ]
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
<div class="center">
|
||||
<form class="big-frame background-border" #accountForm="ngForm" (ngSubmit)="onSubmit()">
|
||||
|
||||
<h3>Reset Password</h3>
|
||||
<h2>User: {{ UserName }}</h2>
|
||||
|
||||
<div class="frame-item">
|
||||
<input type="password" [(ngModel)]="Password" name="Password" placeholder=" " />
|
||||
<label>New Password</label>
|
||||
</div>
|
||||
|
||||
<div class="frame-item">
|
||||
<input type="password" [(ngModel)]="PassworR" name="PassworR" placeholder=" " />
|
||||
<label>Repeat New Password</label>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<div class="flex-row">
|
||||
<div class="frame-button">
|
||||
<input class="submit" type="submit" value="Send Code" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<ul *ngIf="errorMsgs.length > 0" >
|
||||
<li *ngFor="let msg of errorMsgs" >{{ msg }}</li>
|
||||
</ul>
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,69 +0,0 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'account-reset',
|
||||
templateUrl: './resetpassword.component.html',
|
||||
imports: [ FormsModule, CommonModule ]
|
||||
})
|
||||
export class ResetPasswordComponent {
|
||||
|
||||
UserName: string = "";
|
||||
ResetPwd: string = "";
|
||||
Password: string = "";
|
||||
PassworR: string = "";
|
||||
|
||||
errorMsgs: string[] = [];
|
||||
|
||||
constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title ) {
|
||||
this.title.setTitle("Reset Password | Mistox");
|
||||
this.route.queryParams.subscribe(params => {
|
||||
this.UserName = params['UserName'] || '';
|
||||
this.ResetPwd = params['ResetPwd'] || '';
|
||||
});
|
||||
}
|
||||
|
||||
sleep(ms: number) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
if (this.Password != this.PassworR){
|
||||
this.errorMsgs.push("Passwords must match");
|
||||
}
|
||||
if (this.Password.length < 6){
|
||||
this.errorMsgs.push("Password must be at least 6 Characters long");
|
||||
}
|
||||
if (this.errorMsgs.length == 0){
|
||||
// Send to server and wait for response
|
||||
this.errorMsgs.push("Waiting for response from server");
|
||||
const body = new HttpParams()
|
||||
.set("UserName", this.UserName)
|
||||
.set("NewPassword", this.Password)
|
||||
.set("ResetToken", this.ResetPwd);
|
||||
const headers = new HttpHeaders({
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
});
|
||||
this.http.post<boolean>( "api/account/resetpassword", body, { headers } ).subscribe({
|
||||
next: async (data) => {
|
||||
if (data == true){
|
||||
this.errorMsgs = ["Password reset successfully"];
|
||||
await this.sleep(3000);
|
||||
this.router.navigate(["/account/login"]);
|
||||
}else{
|
||||
this.errorMsgs = ["An error has ocurred"];
|
||||
await this.sleep(3000);
|
||||
this.router.navigate(["/account/sendresetpassword"]);
|
||||
}
|
||||
},
|
||||
error: err => {
|
||||
console.log("HTTP Error Signing In: ", err);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,29 +0,0 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { HttpClient } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { Account } from '../../../models/Account';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'account-settings',
|
||||
templateUrl: './settings.component.html',
|
||||
imports: [ FormsModule, CommonModule ]
|
||||
})
|
||||
export class SettingsComponent {
|
||||
user!: Account;
|
||||
errorMsgs: string[] = [];
|
||||
returnURL: string = '/';
|
||||
|
||||
constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title ) {
|
||||
this.title.setTitle("Settings | Mistox");
|
||||
this.route.queryParams.subscribe(params => {
|
||||
this.returnURL = params['returnURL'] || '/';
|
||||
});
|
||||
}
|
||||
|
||||
onSubmit() {
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
<div class="center">
|
||||
<form class="big-frame background-border" #accountForm="ngForm" (ngSubmit)="onSubmit()">
|
||||
|
||||
<h3>Verifying Email</h3>
|
||||
<h3 style="color: red;">{{ Result }}</h3>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
@@ -1,54 +0,0 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
|
||||
import { FormsModule } from '@angular/forms';
|
||||
import { Router, ActivatedRoute } from '@angular/router';
|
||||
import { Title } from '@angular/platform-browser';
|
||||
import { CommonModule } from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'account-verifyemail',
|
||||
templateUrl: './verifyemail.component.html',
|
||||
imports: [ FormsModule, CommonModule ]
|
||||
})
|
||||
export class VerifyEmailComponent {
|
||||
|
||||
UserName: string = "";
|
||||
Guid: string = "";
|
||||
Result: string = "";
|
||||
|
||||
constructor( private http: HttpClient, private router: Router, private route: ActivatedRoute, private title: Title ) {
|
||||
this.title.setTitle("Verify Email | Mistox");
|
||||
this.route.queryParams.subscribe(params => {
|
||||
this.UserName = params['UserName'] || '';
|
||||
this.Guid = params['Guid'] || '';
|
||||
});
|
||||
}
|
||||
|
||||
sleep(ms: number) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
async onSubmit() {
|
||||
// Send to server and wait for response
|
||||
const body = new HttpParams()
|
||||
.set("UserName", this.UserName)
|
||||
.set("EmailToken", this.Guid);
|
||||
const headers = new HttpHeaders({
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
});
|
||||
this.http.post<boolean>( "api/account/verifyemail", body, { headers } ).subscribe({
|
||||
next: async (data) => {
|
||||
if (data == true){
|
||||
this.Result = "Verified Email Successfully";
|
||||
}else{
|
||||
this.Result = "Email was not able to be verified please resend email";
|
||||
}
|
||||
await this.sleep(3000);
|
||||
this.router.navigate(["/"]);
|
||||
},
|
||||
error: err => {
|
||||
console.log("HTTP Error Signing In: ", err);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -6,30 +6,20 @@ import { HttpClient, HttpHeaders, HttpParams } from "@angular/common/http";
|
||||
@Injectable({ providedIn: 'root' })
|
||||
export class Authentication{
|
||||
|
||||
private _user = new BehaviorSubject<Account>(this.getUserFromStorage());
|
||||
private _user = new BehaviorSubject<Account>( new Account );
|
||||
user$ = this._user.asObservable();
|
||||
|
||||
constructor( private http: HttpClient){ }
|
||||
|
||||
Login(UserName: string, Password: string, StayLoggedIn: boolean): Observable<Account> {
|
||||
|
||||
const body = new HttpParams()
|
||||
.set("UserName", UserName)
|
||||
.set("PasswordHash", Password)
|
||||
.set("StayLoggedIn", StayLoggedIn );
|
||||
const headers = new HttpHeaders({
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
});
|
||||
|
||||
let sub = this.http.post<Account>( "api/account/login", body, { headers } );
|
||||
getLoginState(): Observable<Account> {
|
||||
let sub = this.http.post<Account>( "api/account/loginState", {}, {} );
|
||||
sub.subscribe({
|
||||
next: data => {
|
||||
data.passwordHash = "";
|
||||
this._user.next(data);
|
||||
this.setUserToStorage(data, StayLoggedIn == true ? SessionType.Forever : SessionType.Session);
|
||||
},
|
||||
error: err => {
|
||||
console.log("HTTP Error Signing In: ", err.error);
|
||||
console.log("No login state found: ", err.error);
|
||||
}
|
||||
});
|
||||
return sub;
|
||||
@@ -37,7 +27,6 @@ export class Authentication{
|
||||
|
||||
Logout(){
|
||||
this._user.next( new Account );
|
||||
this.delUserFromStorage();
|
||||
return this.http.post<Account>( "api/account/logout", {}, { responseType: 'json' } );
|
||||
}
|
||||
|
||||
@@ -48,36 +37,4 @@ export class Authentication{
|
||||
get loggedInUser(): Account {
|
||||
return this._user.value;
|
||||
}
|
||||
|
||||
private getUserFromStorage(): Account {
|
||||
const foreverUser = localStorage.getItem('user');
|
||||
const sessionUser = sessionStorage.getItem('user');
|
||||
let user = null;
|
||||
if (foreverUser != null){
|
||||
user = JSON.parse(foreverUser)
|
||||
} else if (sessionUser != null){
|
||||
user = JSON.parse(sessionUser)
|
||||
} else {
|
||||
user = new Account();
|
||||
user.id = -1;
|
||||
}
|
||||
return user;
|
||||
}
|
||||
private setUserToStorage(user: Account, session: SessionType): void {
|
||||
if (session == SessionType.Forever){
|
||||
localStorage.setItem('user', JSON.stringify(user));
|
||||
}else if(session == SessionType.Session){
|
||||
sessionStorage.setItem('user', JSON.stringify(user));
|
||||
}
|
||||
}
|
||||
private delUserFromStorage(): void {
|
||||
localStorage.removeItem('user');
|
||||
sessionStorage.removeItem('user');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export enum SessionType {
|
||||
Forever,
|
||||
Session
|
||||
}
|
||||
Reference in New Issue
Block a user