import topologyConstants from '../../topologyConstants' import AuthRequestProxy = require("../../portalAuthorization/AuthRequestProxy"); import { IClusterClientResponse } from "../../typings/IClusterClient"; import { ClusterClientProvider, ForkingClusterClientProvider } from "../../providers"; import { IAuthProvider } from "../../typings/IAuthProvider"; export interface AuthorizatorErrorResponse { errorStatus: string; errorMessages: string[]; } export class Authorizator { private _http: AuthRequestProxy; private _httpNotIdempotent: AuthRequestProxy; constructor({ clusterConfig, authProvider } : { clusterConfig: any, authProvider: IAuthProvider }) { const forkingClusterClientProvider = new ForkingClusterClientProvider({ clusterConfig }); const clusterClientProvider = new ClusterClientProvider({ clusterConfig }); const clusterClient = clusterClientProvider.createClusterClient(topologyConstants.authorizator); const forkingClusterClient = forkingClusterClientProvider.createClusterClient(topologyConstants.authorizator); this._http = new AuthRequestProxy({ clusterClient: forkingClusterClient, authProvider }); this._httpNotIdempotent = new AuthRequestProxy({ clusterClient, authProvider }); } async setPermissions(subject: string, object: string, accessLevel: 'ReadWrite' | 'Read') { return this._http.send({ method: 'PUT', url: `${topologyConstants.authorizatorVersion}/${object}/permissions/${subject}`, params: { accessLevel } }); } async deletePermissions(subject: string, object: string) { return this._httpNotIdempotent.send({ method: 'DELETE', url: `${topologyConstants.authorizatorVersion}/${object}/permissions/${subject}` }); } }