aboutsummaryrefslogtreecommitdiff
path: root/src/app/api.service.ts
blob: 9756bd40e3e08a5ecbe752111333cdbbfa430e96 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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: 'Rest API 2', desc: 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed, diam dictum inceptos nostra mus enim id scelerisque, nam congue ligula penatibus dui arcu cubilia. Placerat dapibus felis euismod ligula pellentesque facilisi magna eu curae ridiculus arcu venenatis, ad justo auctor mollis faucibus viverra odio netus lectus risus vitae. Quisque morbi dapibus mollis ut cursus leo nascetur vitae aliquet venenatis per sociosqu, vivamus pulvinar risus nunc libero feugiat auctor gravida commodo proin.', link: 'rest_api2'},
    {name: 'Rest API 3', desc: 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed, diam dictum inceptos nostra mus enim id scelerisque, nam congue ligula penatibus dui arcu cubilia. Placerat dapibus felis euismod ligula pellentesque facilisi magna eu curae ridiculus arcu venenatis, ad justo auctor mollis faucibus viverra odio netus lectus risus vitae. Quisque morbi dapibus mollis ut cursus leo nascetur vitae aliquet venenatis per sociosqu, vivamus pulvinar risus nunc libero feugiat auctor gravida commodo proin.', link: 'rest_api3'}
  ];

  private identityURL = 'http://localhost:7776/identity';  // URL to GNUnet identity web api

  constructor(private http: HttpClient,
              private messages:MessagesService) { }

  getAPIs(): Observable<RestAPI[]> {
    return of(this.apis);
  }

  getIdentities (): Observable<IdentityAPI[]>{
    return this.http.get<IdentityAPI[]>(this.identityURL)
    .pipe(
      tap(json => this.handleJSON(json)),
      catchError(this.handleError('getIdentities', []))
    );
  }

  createIdentity (json: any): Observable<any>{
    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<any>{
    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<any>{
    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', []))
    );
  }
  /**
  * 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<T> (operation = 'operation', result?: T) {
    return (error: any): Observable<T> => {

      //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);
      }
    }
  }
}