Newer
Older
import { Injectable, Inject } from '@angular/core';
import {HttpClient, HttpParams} from '@angular/common/http';
import { Observable, of } from 'rxjs';
import {catchError, map, switchMap} from 'rxjs/operators';
import {LoginData, BookletStatus, PersonTokenAndTestId, KeyValuePair, SysConfig} from './app.interfaces';
import {ErrorHandler, ServerError} from 'iqb-components';
// ============================================================================
@Injectable({
providedIn: 'root'
})

Martin Mechtel
committed
@Inject('SERVER_URL') private readonly serverUrl: string,
login(name: string, password: string): Observable<LoginData | ServerError> {
.put<LoginData>(this.serverUrl + 'session/login', {name, password})

Martin Mechtel
committed
catchError(ErrorHandler.handle),
switchMap(myLoginData => {
if (myLoginData instanceof ServerError) {

Martin Mechtel
committed
return this.http
.put<LoginData>(this.serverUrl + 'session/admin', {name, password})

Martin Mechtel
committed
} else {

Martin Mechtel
committed
}
} else {
return of(myLoginData);
}
})
getSession(loginToken: string, personToken: string): Observable<LoginData | ServerError> {
const authToken = JSON.stringify({l: loginToken, p: personToken});
.get<LoginData>(this.serverUrl + 'session', {headers: {'AuthToken': authToken}})
getAdminSession(adminToken: string): Observable<LoginData | ServerError> {
const authToken = JSON.stringify({at: adminToken});
.get<LoginData>(this.serverUrl + 'session', {headers: {'AuthToken': authToken}})
.pipe(catchError(ErrorHandler.handle));
return this.http
.get<SysConfig>(this.serverUrl + `system/config`)
.pipe(catchError(() => of(null)))
.pipe(map((sysConfig: SysConfig): KeyValuePair => {
console.log(sysConfig.version); // TODO check for system version mismatch https://github.com/iqb-berlin/testcenter-iqb-ng/issues/53
return sysConfig.customTexts;
}));
getBookletState(bookletName: string, code = ''): Observable<BookletStatus | ServerError> {
// TODO after https://github.com/iqb-berlin/testcenter-iqb-ng/issues/52 is resolved,
// this must be removed, we would have a personToken here
const params = new HttpParams().set('code', code);
return this.http
.get<BookletStatus>(this.serverUrl + `booklet/${bookletName}/state`, {params})
startBooklet(code: string, bookletName: string, bookletLabel: string): Observable<PersonTokenAndTestId | ServerError> {
.put<PersonTokenAndTestId>(this.serverUrl + `test`, {code, bookletName, bookletLabel})
addBookletLogClose(testId: number): Observable<boolean | ServerError> {
.put<boolean>(this.serverUrl + `test/${testId}/log`, {timestamp: Date.now(), entry: 'BOOKLETLOCKEDbyTESTEE'})
lockBooklet(testId: number): Observable<boolean | ServerError> {
.patch<boolean>(this.serverUrl + `test/${testId}/lock`, {})
.pipe(catchError(ErrorHandler.handle));