user.service.ts 4.72 KB
Newer Older
Lukas Burgey's avatar
Lukas Burgey committed
1
2
3
4
5
6
7
8
9
10
11
12
import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/of';

import { CookieService } from 'ngx-cookie-service';
import { MatTableDataSource } from '@angular/material';

import { SnackBarService } from './snackbar.service';

Lukas Burgey's avatar
Lukas Burgey committed
13
import { environment } from '../environments/environment';
14
import { User, Service, AuthInfo, UserState } from './types/types.module';
Lukas Burgey's avatar
Lukas Burgey committed
15

Lukas Burgey's avatar
Lukas Burgey committed
16
17
18
19
20
21
22

@Injectable()
export class UserService {
  public loggedIn = false;
  public user: User;
  public sshKeyData: MatTableDataSource<any>;
  public userInfoData: MatTableDataSource<any>;
23
  public services: Service[];
Lukas Burgey's avatar
Lukas Burgey committed
24
  public authInfo: AuthInfo;
Lukas Burgey's avatar
Lukas Burgey committed
25
26
27
28
29
30
31


  constructor(
    public cookieService: CookieService,
    public http: HttpClient,
    public snackBar: SnackBarService,
  ) {
Lukas Burgey's avatar
Lukas Burgey committed
32
    this.update();
Lukas Burgey's avatar
Lukas Burgey committed
33
34
35
  }

  public logState() {
Lukas Burgey's avatar
Lukas Burgey committed
36
37
    console.log(
      this.user,
Lukas Burgey's avatar
Lukas Burgey committed
38
39
40
    );
  }

41
  public setIdPPreference(idpId: number) {
Lukas Burgey's avatar
Lukas Burgey committed
42
    this.cookieService.set(environment.idpCookieName, String(idpId));
Lukas Burgey's avatar
Lukas Burgey committed
43
44
  }

45
  public getIdPPreference(): number {
Lukas Burgey's avatar
Lukas Burgey committed
46
    return Number(this.cookieService.get(environment.idpCookieName));
Lukas Burgey's avatar
Lukas Burgey committed
47
48
  }

49
  public updateData(data: any) {
50
51
52
53
54

    if (data['error']) {
      this.snackBar.open(data['error']);
    }

55
56
57
58
59
    if (!this.loggedIn && data.logged_in) {
      this.snackBar.open('Logged in');
    }

    this.loggedIn = data.logged_in;
Lukas Burgey's avatar
Lukas Burgey committed
60
61
    if (!this.services) {
      this.services = data.services;
62
63
64
65
66
67
68
69
70
71
72
73
74
    }
    this.user = data.user;

    if (this.user) {
      // build sshKeyData
      if ('ssh_keys' in this.user) {
        this.sshKeyData = new MatTableDataSource(this.user.ssh_keys);
      } else {
        this.sshKeyData = null;
      }

      // build userInfoData
      const userInfoList = [];
Lukas Burgey's avatar
Lukas Burgey committed
75
76
77
      for (const key in this.user.userinfo) {
        if (this.user.userinfo.hasOwnProperty(key)) {
          userInfoList.push({name: key, info: this.user.userinfo[key]});
Lukas Burgey's avatar
Lukas Burgey committed
78
        }
79
80
81
82
83
84
85
      }
      this.userInfoData = new MatTableDataSource(userInfoList);

    } else {
      this.sshKeyData = null;
      this.userInfoData = null;
    }
Lukas Burgey's avatar
Lukas Burgey committed
86

87
88
    // FIXME remove
    this.logState();
89
90
  }

Lukas Burgey's avatar
Lukas Burgey committed
91
92
93
94
95
96
97
98
99
100
101
102
  public getAuthInfo() {
    return this.http.get('/backend/auth/v1/info/').map(
      (data) => {
        return data;
      },
      (err) => {
        return {};
      }
    );
  }

  public updateState() {
Lukas Burgey's avatar
Lukas Burgey committed
103
104
105
    this.http
      .get('/backend/api/state/')
      .subscribe(
106
        (data: UserState) => {
107
          this.updateData(data);
Lukas Burgey's avatar
Lukas Burgey committed
108
109
110
111
112
113
114
115
        },
        (err: HttpErrorResponse) => {
          console.log('Error', err);
          this.snackBar.open('Error receiving data from the server');
        }
      );
  }

Lukas Burgey's avatar
Lukas Burgey committed
116
117
118
119
  public update() {
    this.updateState();
  }

120
121
122
123
124
  public login(idpId: number) {
    this.setIdPPreference(idpId);
    window.location.href = 'https://hdf-portal.data.kit.edu/backend/auth/v1/request';
  }

Lukas Burgey's avatar
Lukas Burgey committed
125
  public logout() {
Lukas Burgey's avatar
Lukas Burgey committed
126
    this.http.post('/backend/auth/v1/logout/', {}).subscribe(
Lukas Burgey's avatar
Lukas Burgey committed
127
      data => {
Lukas Burgey's avatar
Lukas Burgey committed
128
        this.updateData(data);
Lukas Burgey's avatar
Lukas Burgey committed
129
130
131
132
133
134
135
136
137
138
139
      }
    );
  }

  public addSshKey(key: Object) {
    const body = {
      'type': 'add',
      'key': key,
    };
    return this.http.post('/backend/api/sshkey/', body).subscribe(
      data => {
140
        this.updateData(data);
Lukas Burgey's avatar
Lukas Burgey committed
141
142
143
144
      },
      (err) => {
        this.snackBar.open('Error uploading key');
        console.log(err);
145
        this.update();
Lukas Burgey's avatar
Lukas Burgey committed
146
147
148
149
      }
    );
  }

150
  public removeSshKey(id: string) {
Lukas Burgey's avatar
Lukas Burgey committed
151
152
    const body = {
      'type': 'remove',
153
      'id': id,
Lukas Burgey's avatar
Lukas Burgey committed
154
155
156
    };
    return this.http.post('/backend/api/sshkey/', body).subscribe(
      (data) => {
157
        this.updateData(data);
Lukas Burgey's avatar
Lukas Burgey committed
158
159
160
161
      },
      (err) => {
        this.snackBar.open('Error deleting key');
        console.log(err);
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
        this.update();
      }
    );
  }

  public addDeployment(serviceName: string, keyName: string) {
    const body = {
      'type': 'add',
      'key': keyName,
      'service': serviceName,
    };
    return this.http.post('/backend/api/deployments/', body).subscribe(
      (data) => {
        this.snackBar.open('Deployed key ' + keyName);
        this.updateData(data);
      },
      (err) => {
        this.snackBar.open('Error deploying key ' + keyName);
        console.log(err);
        this.update();
      }
    );
  }

  public removeDeployment(serviceName: string, keyName: string) {
    const body = {
      'type': 'remove',
      'key': keyName,
      'service': serviceName,
    };
    return this.http.post('/backend/api/deployments/', body).subscribe(
      (data) => {
        this.snackBar.open('Withdrew key ' + keyName);
        this.updateData(data);
      },
      (err) => {
        this.snackBar.open('Error withdrawing key ' + keyName);
        console.log(err);
        this.update();
Lukas Burgey's avatar
Lukas Burgey committed
201
202
203
204
      }
    );
  }
}