import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { Observable, of } from 'rxjs'; import { RestAPI } from './rest-api'; import { IdentityAPI } from './identity-api'; import { catchError, map, tap } from 'rxjs/operators'; import { MessagesService } from './messages.service'; @Injectable({ providedIn: 'root' }) export class ApiService { apis: RestAPI[] = [ {name: 'Identity API', desc: 'This is the identity API', link: 'identity'}, {name: 'GNS API', desc: 'This is the gns API', link: 'gns'}, {name: 'Namestore API', desc: 'This is the namestore API', link: 'namestore'}, {name: 'Peerstore API', desc: 'This is the peerstore API', link: 'peerstore'}, ]; private restURL = 'http://localhost:7776/' private identityURL = this.restURL+'identity'; private gnsURL = this.restURL+'gns'; constructor(private http: HttpClient, private messages:MessagesService) { } getAPIs(): Observable { return of(this.apis); } getIdentities (): Observable{ return this.http.get(this.identityURL) .pipe( tap(json => this.handleJSON(json)), catchError(this.handleError('getIdentities', [])) ); } createIdentity (json: any): Observable{ this.messages.dismissError(); const options = {headers: {'Content-Type': 'application/json'}}; return this.http.post(this.identityURL, json, options) .pipe( tap(json => this.handleJSON(json)), catchError(this.handleError('createIdentity', [])) ); } deleteIdentity (id: string): Observable{ this.messages.dismissError(); return this.http.delete(this.identityURL+'/'+id) .pipe( tap(json => this.handleJSON(json)), catchError(this.handleError('deleteIdentity', [])) ); } changeIdentity (id: string, json: any): Observable{ this.messages.dismissError(); const options = {headers: {'Content-Type': 'application/json'}}; return this.http.put(this.identityURL+'/'+id, json, options) .pipe( tap(json => this.handleJSON(json)), catchError(this.handleError('changeIdentity', [])) ); } searchNameSystem (url: string): Observable{ this.messages.dismissError(); return this.http.get(this.gnsURL+'/'+url) .pipe( tap(json => this.handleJSON(json)), catchError(this.handleError('searchNameSystem', [])) ); } /** * Handle Http operation that failed. * Let the app continue. * @param operation - name of the operation that failed * @param result - optional value to return as the observable result */ private handleError (operation = 'operation', result?: T) { return (error: any): Observable => { //console.error(error); // log to console instead if((operation == 'createIdentity') && (error.status == '409')) { this.messages.pushError('Cannot create identity. Identity already exists.'); } if((operation == 'changeIdentity') && (error.status == '404')) { this.messages.pushError('Cannot rename identity. Identity not found.'); } if((operation == 'changeIdentity') && (error.status == '409')) { this.messages.pushError('Cannot rename identity. Identity with this name already exists.'); } if((operation == 'deleteIdentity') && (error.status == '404')) { this.messages.pushError('Cannot delete identity. Identity not found.'); } if((error.statusText == 'Unknown Error')) { this.messages.pushError('Unknown Error. Is the server running?'); } return of(result as T); }; } private handleJSON (json: any) { if(json != null) { if(json.error != null){ this.messages.pushError(json.error); } } } }