]> source.dussan.org Git - archiva.git/blob
52a55e6b25d0f9eac182617488f983edc9a0f1a0
[archiva.git] /
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements.  See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership.  The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License.  You may obtain a copy of the License at
9  *
10  *   http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied.  See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  */
19 import {Injectable} from '@angular/core';
20 import {HttpClient, HttpErrorResponse, HttpResponse} from "@angular/common/http";
21 import {environment} from "../../environments/environment";
22 import {Observable} from "rxjs";
23 import {ErrorMessage} from "../model/error-message";
24 import {TranslateService} from "@ngx-translate/core";
25 import {ErrorResult} from "../model/error-result";
26
27 @Injectable({
28     providedIn: 'root'
29 })
30 export class ArchivaRequestService {
31
32     // Stores the access token locally
33     accessToken: string;
34
35     constructor(private http: HttpClient, private translator: TranslateService) {
36     }
37
38     /**
39      * Executes a rest call to the archiva / redback REST services.
40      * @param type the type of the call (get, post, update)
41      * @param module the module (archiva, redback)
42      * @param service the REST service to call
43      * @param input the input data, if this is a POST or UPDATE request
44      */
45     executeRestCall<R>(type: string, module: string, service: string, input: object): Observable<R> {
46         let httpArgs = this.getHttpOptions(type, module, service, input);
47         httpArgs['options']['observe'] = 'body';
48         httpArgs['options']['responseType'] = 'json';
49
50         let lType = type.toLowerCase();
51         if (lType == "get") {
52             return this.http.get<R>(httpArgs.url, httpArgs.options);
53         } else if (lType == "head" ) {
54             return this.http.head<R>(httpArgs.url, httpArgs.options);
55         } else if (lType == "post") {
56             return this.http.post<R>(httpArgs.url, input, httpArgs.options);
57         } else if (lType == "delete") {
58             return this.http.delete<R>(httpArgs.url, httpArgs.options);
59         } else if (lType == "put") {
60             return this.http.put<R>(httpArgs.url, input, httpArgs.options);
61         }
62     }
63
64     private getHttpOptions(type: string, module: string, service: string, input: object) {
65         let modulePath = environment.application.servicePaths[module];
66         let url = environment.application.baseUrl + environment.application.restPath + "/" + modulePath + "/" + service;
67         let token = this.getToken();
68         let headers = null;
69         if (token != null) {
70             headers = {
71                 "Authorization": "Bearer " + token
72             }
73         } else {
74             headers = {};
75         }
76         let options = {'headers': headers}
77         if (type.toLowerCase()=='get') {
78             let params = {}
79             if (input!=null) {
80                 params = input;
81             }
82             options['params'] = params;
83         }
84         return {'url':url, 'options':options}
85     }
86
87     executeResponseCall<R>(type: string, module: string, service:string, input:object) : Observable<HttpResponse<R>> {
88         let httpArgs = this.getHttpOptions(type, module, service, input);
89         httpArgs['options']['observe'] = 'response';
90         httpArgs['options']['responseType'] = 'json';
91         let lType = type.toLowerCase();
92         if (lType == "get") {
93             return this.http.get<HttpResponse<R>>(httpArgs.url, httpArgs.options);
94         } else if (lType=='head') {
95             return this.http.head<HttpResponse<R>>(httpArgs.url, httpArgs.options);
96         } else if (lType == 'post') {
97             return this.http.post<HttpResponse<R>>(httpArgs.url, input, httpArgs.options);
98         } else if (lType=='delete') {
99             return this.http.delete<HttpResponse<R>>(httpArgs.url, httpArgs.options);
100         } else if (lType=='put') {
101             return this.http.put<HttpResponse<R>>(httpArgs.url, input, httpArgs.options);
102         }
103     }
104
105     public resetToken() {
106         this.accessToken = null;
107     }
108
109     private getToken(): string {
110         if (this.accessToken != null) {
111             return this.accessToken;
112         } else {
113             let token = localStorage.getItem("access_token");
114             if (token != null && token != "") {
115                 this.accessToken = token;
116                 return token;
117             } else {
118                 return null;
119             }
120         }
121     }
122
123     /**
124      * Translates a given error message to the current set language.
125      * @param errorMsg the errorMsg as returned by a REST call
126      */
127     public translateError(errorMsg: ErrorMessage): string {
128         if (errorMsg.error_key != null && errorMsg.error_key != '') {
129             let parms = {};
130             if (errorMsg.args != null && errorMsg.args.length > 0) {
131                 for (let i = 0; i < errorMsg.args.length; i++) {
132                     parms['arg' + i] = errorMsg.args[i];
133                 }
134             }
135             return this.translator.instant('api.' + errorMsg.error_key, parms);
136         }
137     }
138
139     public getTranslatedErrorResult(httpError : HttpErrorResponse) : ErrorResult {
140         let errorResult = httpError.error as ErrorResult;
141         errorResult.status = httpError.status;
142         if (errorResult.error_messages!=null) {
143             for (let message of errorResult.error_messages) {
144                 if (message.message==null || message.message=='') {
145                     message.message = this.translateError(message);
146                 }
147             }
148         }
149         return errorResult;
150     }
151 }