@harbor/ui
Version:
Harbor shared UI components based on Clarity and Angular6
174 lines (173 loc) • 15.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { throwError as observableThrowError } from "rxjs";
import { Injectable, Inject } from "@angular/core";
import { Http } from "@angular/http";
import { map, catchError } from "rxjs/operators";
import { SERVICE_CONFIG } from "../service.config";
import { HTTP_JSON_OPTIONS, HTTP_GET_OPTIONS, buildHttpRequestOptions } from "../utils";
import { RequestQueryParams } from "./RequestQueryParams";
/**
* Define the service methods to handle the Prject related things.
*
* *
* @abstract
* class ProjectService
* @abstract
*/
export class ProjectService {
}
if (false) {
/**
* Get Infomations of a specific Project.
*
* @abstract
* ** deprecated param {string|number} [projectId]
* returns {(Observable<Project> | Promise<Project> | Project)}
*
* \@memberOf ProjectService
* @abstract
* @param {?} projectId
* @return {?}
*/
ProjectService.prototype.getProject = function (projectId) { };
/**
* Update the specified project.
*
* @abstract
* ** deprecated param {(number | string)} projectId
* ** deprecated param {ProjectPolicy} projectPolicy
* returns {(Observable<any> | Promise<any> | any)}
*
* \@memberOf EndpointService
* @abstract
* @param {?} projectId
* @param {?} projectPolicy
* @return {?}
*/
ProjectService.prototype.updateProjectPolicy = function (projectId, projectPolicy) { };
/**
* Get all projects
*
* @abstract
* ** deprecated param {string} name
* ** deprecated param {number} isPublic
* ** deprecated param {number} page
* ** deprecated param {number} pageSize
* returns {(Observable<any> | Promise<any> | any)}
*
* \@memberOf EndpointService
* @abstract
* @param {?} name
* @param {?} isPublic
* @param {?=} page
* @param {?=} pageSize
* @return {?}
*/
ProjectService.prototype.listProjects = function (name, isPublic, page, pageSize) { };
}
/**
* Implement default service for project.
*
* *
* class ProjectDefaultService
* extends {ProjectService}
*/
export class ProjectDefaultService extends ProjectService {
/**
* @param {?} http
* @param {?} config
*/
constructor(http, config) {
super();
this.http = http;
this.config = config;
}
/**
* @param {?} projectId
* @return {?}
*/
getProject(projectId) {
if (!projectId) {
return Promise.reject("Bad argument");
}
/** @type {?} */
let baseUrl = this.config.projectBaseEndpoint
? this.config.projectBaseEndpoint
: "/api/projects";
return this.http
.get(`${baseUrl}/${projectId}`, HTTP_GET_OPTIONS)
.pipe(map(response => response.json()))
.pipe(catchError(error => observableThrowError(error)));
}
/**
* @param {?} name
* @param {?} isPublic
* @param {?=} page
* @param {?=} pageSize
* @return {?}
*/
listProjects(name, isPublic, page, pageSize) {
/** @type {?} */
let baseUrl = this.config.projectBaseEndpoint
? this.config.projectBaseEndpoint
: "/api/projects";
/** @type {?} */
let params = new RequestQueryParams();
if (page && pageSize) {
params.set("page", page + "");
params.set("page_size", pageSize + "");
}
if (name && name.trim() !== "") {
params.set("name", name);
}
if (isPublic !== undefined) {
params.set("public", "" + isPublic);
}
// let options = new RequestOptions({ headers: this.getHeaders, search: params });
return this.http
.get(baseUrl, buildHttpRequestOptions(params))
.pipe(map(response => response.json()))
.pipe(catchError(error => observableThrowError(error)));
}
/**
* @param {?} projectId
* @param {?} projectPolicy
* @return {?}
*/
updateProjectPolicy(projectId, projectPolicy) {
/** @type {?} */
let baseUrl = this.config.projectBaseEndpoint
? this.config.projectBaseEndpoint
: "/api/projects";
return this.http
.put(`${baseUrl}/${projectId}`, {
metadata: {
public: projectPolicy.Public ? "true" : "false",
enable_content_trust: projectPolicy.ContentTrust ? "true" : "false",
prevent_vul: projectPolicy.PreventVulImg ? "true" : "false",
severity: projectPolicy.PreventVulImgSeverity,
auto_scan: projectPolicy.ScanImgOnPush ? "true" : "false"
}
}, HTTP_JSON_OPTIONS)
.pipe(map(response => response.status))
.pipe(catchError(error => observableThrowError(error)));
}
}
ProjectDefaultService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
ProjectDefaultService.ctorParameters = () => [
{ type: Http },
{ type: undefined, decorators: [{ type: Inject, args: [SERVICE_CONFIG,] }] }
];
if (false) {
/** @type {?} */
ProjectDefaultService.prototype.http;
/** @type {?} */
ProjectDefaultService.prototype.config;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhhcmJvci91aS8iLCJzb3VyY2VzIjpbInNyYy9zZXJ2aWNlL3Byb2plY3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUFDLFVBQVUsSUFBSSxvQkFBb0IsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQUksVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGNBQWMsRUFBa0IsTUFBTSxtQkFBbUIsQ0FBQztBQUduRSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDeEIsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7OztBQVMxRCxNQUFNO0NBK0NMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVRCxNQUFNLDRCQUE2QixTQUFRLGNBQWM7Ozs7O0lBQ3ZELFlBQ1UsTUFDd0IsTUFBc0I7UUFFdEQsS0FBSyxFQUFFLENBQUM7UUFIQSxTQUFJLEdBQUosSUFBSTtRQUNvQixXQUFNLEdBQU4sTUFBTSxDQUFnQjtLQUd2RDs7Ozs7SUFFTSxVQUFVLENBQ2YsU0FBMEI7UUFFMUIsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUN2Qzs7UUFDRCxJQUFJLE9BQU8sR0FBVyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQjtZQUNuRCxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFB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SyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Ozs7WUExRTdELFVBQVU7Ozs7WUE1RUYsSUFBSTs0Q0FnRlIsTUFBTSxTQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7dGhyb3dFcnJvciBhcyBvYnNlcnZhYmxlVGhyb3dFcnJvciwgIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEh0dHAgfSBmcm9tIFwiQGFuZ3VsYXIvaHR0cFwiO1xuaW1wb3J0IHsgbWFwICwgIGNhdGNoRXJyb3IgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHsgU0VSVklDRV9DT05GSUcsIElTZXJ2aWNlQ29uZmlnIH0gZnJvbSBcIi4uL3NlcnZpY2UuY29uZmlnXCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3QtcG9saWN5LWNvbmZpZy9wcm9qZWN0XCI7XG5pbXBvcnQgeyBQcm9qZWN0UG9saWN5IH0gZnJvbSBcIi4uL3Byb2plY3QtcG9saWN5LWNvbmZpZy9wcm9qZWN0LXBvbGljeS1jb25maWcuY29tcG9uZW50XCI7XG5pbXBvcnQge1xuICBIVFRQX0pTT05fT1BUSU9OUyxcbiAgSFRUUF9HRVRfT1BUSU9OUyxcbiAgYnVpbGRIdHRwUmVxdWVzdE9wdGlvbnNcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBSZXF1ZXN0UXVlcnlQYXJhbXMgfSBmcm9tIFwiLi9SZXF1ZXN0UXVlcnlQYXJhbXNcIjtcblxuLyoqXG4gKiBEZWZpbmUgdGhlIHNlcnZpY2UgbWV0aG9kcyB0byBoYW5kbGUgdGhlIFByamVjdCByZWxhdGVkIHRoaW5ncy5cbiAqXG4gKipcbiAqIEBhYnN0cmFjdFxuICogY2xhc3MgUHJvamVjdFNlcnZpY2VcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb2plY3RTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEdldCBJbmZvbWF0aW9ucyBvZiBhIHNwZWNpZmljIFByb2plY3QuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW3Byb2plY3RJZF1cbiAgICogcmV0dXJucyB7KE9ic2VydmFibGU8UHJvamVjdD4gfCBQcm9taXNlPFByb2plY3Q+IHwgUHJvamVjdCl9XG4gICAqXG4gICAqIEBtZW1iZXJPZiBQcm9qZWN0U2VydmljZVxuICAgKi9cbiAgYWJzdHJhY3QgZ2V0UHJvamVjdChcbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFByb2plY3Q+IHwgUHJvbWlzZTxQcm9qZWN0PiB8IFByb2plY3Q7XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgc3BlY2lmaWVkIHByb2plY3QuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7KG51bWJlciB8IHN0cmluZyl9IHByb2plY3RJZFxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7UHJvamVjdFBvbGljeX0gcHJvamVjdFBvbGljeVxuICAgKiByZXR1cm5zIHsoT2JzZXJ2YWJsZTxhbnk+IHwgUHJvbWlzZTxhbnk+IHwgYW55KX1cbiAgICpcbiAgICogQG1lbWJlck9mIEVuZHBvaW50U2VydmljZVxuICAgKi9cbiAgYWJzdHJhY3QgdXBkYXRlUHJvamVjdFBvbGljeShcbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZyxcbiAgICBwcm9qZWN0UG9saWN5OiBQcm9qZWN0UG9saWN5XG4gICk6IE9ic2VydmFibGU8YW55PiB8IFByb21pc2U8YW55PiB8IGFueTtcblxuICAvKipcbiAgICogR2V0IGFsbCBwcm9qZWN0c1xuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICogICoqIGRlcHJlY2F0ZWQgcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7bnVtYmVyfSBpc1B1YmxpY1xuICAgKiAgKiogZGVwcmVjYXRlZCBwYXJhbSB7bnVtYmVyfSBwYWdlXG4gICAqICAqKiBkZXByZWNhdGVkIHBhcmFtIHtudW1iZXJ9IHBhZ2VTaXplXG4gICAqIHJldHVybnMgeyhPYnNlcnZhYmxlPGFueT4gfCBQcm9taXNlPGFueT4gfCBhbnkpfVxuICAgKlxuICAgKiBAbWVtYmVyT2YgRW5kcG9pbnRTZXJ2aWNlXG4gICAqL1xuICBhYnN0cmFjdCBsaXN0UHJvamVjdHMoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGlzUHVibGljOiBudW1iZXIsXG4gICAgcGFnZT86IG51bWJlcixcbiAgICBwYWdlU2l6ZT86IG51bWJlclxuICApOiBPYnNlcnZhYmxlPFByb2plY3RbXT4gfCBQcm9taXNlPFByb2plY3RbXT4gfCBQcm9qZWN0W107XG59XG5cbi8qKlxuICogSW1wbGVtZW50IGRlZmF1bHQgc2VydmljZSBmb3IgcHJvamVjdC5cbiAqXG4gKipcbiAqIGNsYXNzIFByb2plY3REZWZhdWx0U2VydmljZVxuICogZXh0ZW5kcyB7UHJvamVjdFNlcnZpY2V9XG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQcm9qZWN0RGVmYXVsdFNlcnZpY2UgZXh0ZW5kcyBQcm9qZWN0U2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cCxcbiAgICBASW5qZWN0KFNFUlZJQ0VfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogSVNlcnZpY2VDb25maWdcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcm9qZWN0KFxuICAgIHByb2plY3RJZDogbnVtYmVyIHwgc3RyaW5nXG4gICk6IE9ic2VydmFibGU8UHJvamVjdD4gfCBQcm9taXNlPFByb2plY3Q+IHwgUHJvamVjdCB7XG4gICAgaWYgKCFwcm9qZWN0SWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIkJhZCBhcmd1bWVudFwiKTtcbiAgICB9XG4gICAgbGV0IGJhc2VVcmw6IHN0cmluZyA9IHRoaXMuY29uZmlnLnByb2plY3RCYXNlRW5kcG9pbnRcbiAgICAgID8gdGhpcy5jb25maWcucHJvamVjdEJhc2VFbmRwb2ludFxuICAgICAgOiBcIi9hcGkvcHJvamVjdHNcIjtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KGAke2Jhc2VVcmx9LyR7cHJvamVjdElkfWAsIEhUVFBfR0VUX09QVElPTlMpXG4gICAgICAucGlwZShtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gb2JzZXJ2YWJsZVRocm93RXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICBwdWJsaWMgbGlzdFByb2plY3RzKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBpc1B1YmxpYzogbnVtYmVyLFxuICAgIHBhZ2U/OiBudW1iZXIsXG4gICAgcGFnZVNpemU/OiBudW1iZXJcbiAgKTogT2JzZXJ2YWJsZTxQcm9qZWN0W10+IHwgUHJvbWlzZTxQcm9qZWN0W10+IHwgUHJvamVjdFtdIHtcbiAgICBsZXQgYmFzZVVybDogc3RyaW5nID0gdGhpcy5jb25maWcucHJvamVjdEJhc2VFbmRwb2ludFxuICAgICAgPyB0aGlzLmNvbmZpZy5wcm9qZWN0QmFzZUVuZHBvaW50XG4gICAgICA6IFwiL2FwaS9wcm9qZWN0c1wiO1xuICAgIGxldCBwYXJhbXMgPSBuZXcgUmVxdWVzdFF1ZXJ5UGFyYW1zKCk7XG4gICAgaWYgKHBhZ2UgJiYgcGFnZVNpemUpIHtcbiAgICAgIHBhcmFtcy5zZXQoXCJwYWdlXCIsIHBhZ2UgKyBcIlwiKTtcbiAgICAgIHBhcmFtcy5zZXQoXCJwYWdlX3NpemVcIiwgcGFnZVNpemUgKyBcIlwiKTtcbiAgICB9XG4gICAgaWYgKG5hbWUgJiYgbmFtZS50cmltKCkgIT09IFwiXCIpIHtcbiAgICAgIHBhcmFtcy5zZXQoXCJuYW1lXCIsIG5hbWUpO1xuICAgIH1cbiAgICBpZiAoaXNQdWJsaWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnNldChcInB1YmxpY1wiLCBcIlwiICsgaXNQdWJsaWMpO1xuICAgIH1cblxuICAgIC8vIGxldCBvcHRpb25zID0gbmV3IFJlcXVlc3RPcHRpb25zKHsgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzLCBzZWFyY2g6IHBhcmFtcyB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KGJhc2VVcmwsIGJ1aWxkSHR0cFJlcXVlc3RPcHRpb25zKHBhcmFtcykpXG4gICAgICAucGlwZShtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKSlcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyb3IgPT4gb2JzZXJ2YWJsZVRocm93RXJyb3IoZXJyb3IpKSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUHJvamVjdFBvbGljeShcbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IHN0cmluZyxcbiAgICBwcm9qZWN0UG9saWN5OiBQcm9qZWN0UG9saWN5XG4gICk6IGFueSB7XG4gICAgbGV0IGJhc2VVcmw6IHN0cmluZyA9IHRoaXMuY29uZmlnLnByb2plY3RCYXNlRW5kcG9pbnRcbiAgICAgID8gdGhpcy5jb25maWcucHJvamVjdEJhc2VFbmRwb2ludFxuICAgICAgOiBcIi9hcGkvcHJvamVjdHNcIjtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICBgJHtiYXNlVXJsfS8ke3Byb2plY3RJZH1gLFxuICAgICAgICB7XG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIHB1YmxpYzogcHJvamVjdFBvbGljeS5QdWJsaWMgPyBcInRydWVcIiA6IFwiZmFsc2VcIixcbiAgICAgICAgICAgIGVuYWJsZV9jb250ZW50X3RydXN0OiBwcm9qZWN0UG9saWN5LkNvbnRlbnRUcnVzdCA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgcHJldmVudF92dWw6IHByb2plY3RQb2xpY3kuUHJldmVudFZ1bEltZyA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiLFxuICAgICAgICAgICAgc2V2ZXJpdHk6IHByb2plY3RQb2xpY3kuUHJldmVudFZ1bEltZ1NldmVyaXR5LFxuICAgICAgICAgICAgYXV0b19zY2FuOiBwcm9qZWN0UG9saWN5LlNjYW5JbWdPblB1c2ggPyBcInRydWVcIiA6IFwiZmFsc2VcIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgSFRUUF9KU09OX09QVElPTlNcbiAgICAgIClcbiAgICAgIC5waXBlKG1hcChyZXNwb25zZSA9PiByZXNwb25zZS5zdGF0dXMpKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnJvciA9PiBvYnNlcnZhYmxlVGhyb3dFcnJvcihlcnJvcikpKTtcbiAgfVxufVxuIl19