From 2116a55549fad5507b86efca94211bcfa19bd16a Mon Sep 17 00:00:00 2001 From: Spencer Ofwiti Date: Sat, 17 Apr 2021 13:31:07 +0300 Subject: [PATCH] Refactor AJAX to use fetch API. --- src/app/_services/auth.service.ts | 65 ++++++++++++++----------------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/src/app/_services/auth.service.ts b/src/app/_services/auth.service.ts index 7bf0431..7e40b01 100644 --- a/src/app/_services/auth.service.ts +++ b/src/app/_services/auth.service.ts @@ -13,7 +13,6 @@ import {Observable } from 'rxjs'; }) export class AuthService { sessionToken: any; - sessionLoginCount = 0; privateKey: any; mutableKeyStore: MutableKeyStore = new MutablePgpKeyStore(); @@ -36,55 +35,51 @@ export class AuthService { } getWithToken(): void { - const xhr = new XMLHttpRequest(); - xhr.responseType = 'text'; - xhr.open('GET', environment.cicMetaUrl + window.location.search.substring(1)); - xhr.setRequestHeader('Authorization', 'Bearer ' + this.sessionToken); - xhr.setRequestHeader('Content-Type', 'application/json'); - xhr.setRequestHeader('x-cic-automerge', 'none'); - xhr.addEventListener('load', (e) => { - if (xhr.status === 401) { - throw new Error('login rejected'); + const headers = { + Authorization: 'Bearer ' + this.sessionToken, + 'Content-Type': 'application/json;charset=utf-8', + 'x-cic-automerge': 'none' + }; + const options = { + headers, + }; + fetch(environment.cicMetaUrl, options).then(response => { + if (response.status === 401) { + return Promise.reject({ statusText: response.statusText }); } - this.sessionLoginCount++; - this.setState('Click button to log in'); return; - }); - xhr.send(); + }).catch(error => this.loggingService.sendErrorLevelMessage('Login rejected', this, {error})); } sendResponse(hobaResponseEncoded): void { - const xhr = new XMLHttpRequest(); - xhr.responseType = 'text'; - xhr.open('GET', environment.cicMetaUrl + window.location.search.substring(1)); - xhr.setRequestHeader('Authorization', 'HOBA ' + hobaResponseEncoded); - xhr.setRequestHeader('Content-Type', 'application/json'); - xhr.setRequestHeader('x-cic-automerge', 'none'); - xhr.addEventListener('load', (e) => { - if (xhr.status === 401) { - throw new Error('login rejected'); + const headers = { + Authorization: 'HOBA ' + hobaResponseEncoded, + 'Content-Type': 'application/json;charset=utf-8', + 'x-cic-automerge': 'none' + }; + const options = { + headers, + }; + fetch(environment.cicMetaUrl, options).then(response => { + if (response.status === 401) { + return Promise.reject({ statusText: response.statusText }); } - this.sessionToken = xhr.getResponseHeader('Token'); + this.sessionToken = response.headers.get('Token'); sessionStorage.setItem(btoa('CICADA_SESSION_TOKEN'), this.sessionToken); - this.sessionLoginCount++; this.setState('Click button to log in'); return; - }); - xhr.send(); + }).catch(error => this.loggingService.sendErrorLevelMessage('Login rejected', this, {error})); } getChallenge(password: string): void { - const xhr = new XMLHttpRequest(); - xhr.responseType = 'arraybuffer'; - xhr.open('GET', environment.cicMetaUrl + window.location.search.substring(1)); - xhr.onload = async (e) => { - if (xhr.status === 401) { - const authHeader = xhr.getResponseHeader('WWW-Authenticate'); + fetch(environment.cicMetaUrl).then(async response => { + console.log(response); + if (response.status === 401) { + const authHeader = response.headers.get('WWW-Authenticate'); const o = hobaParseChallengeHeader(authHeader); await this.loginResponse(o, password); } - }; - xhr.send(); + }).catch(error => this.loggingService.sendErrorLevelMessage('Fetching challenge failed', this, {error})); } passwordLogin(password: string): boolean {