Ontica/Empiria.Land.Intranet

View on GitHub
src/app/data-services/_access-control.data.service.ts

Summary

Maintainability
F
6 days
Test Coverage
/**
 * @license
 * Copyright (c) La Vía Óntica SC, Ontica LLC and contributors. All rights reserved.
 *
 * See LICENSE.txt in the project root for complete license information.
 */

import { Injectable } from '@angular/core';

import { Assertion, EmpObservable, HttpService, Identifiable } from '@app/core';

import { Subject, SubjectFields, SubjectsQuery } from '@app/models';


@Injectable()
export class AccessControlDataService {

  constructor(private http: HttpService) { }


  getWorkareas(): EmpObservable<Identifiable[]> {
    const path = `v4/onepoint/security/management/subjects/workareas`;

    return this.http.get<Identifiable[]>(path);
  }


  getContexts(): EmpObservable<Identifiable[]> {
    const path = `v4/onepoint/security/management/contexts`;

    return this.http.get<Identifiable[]>(path);
  }


  getRolesByContext(contextUID: string): EmpObservable<Identifiable[]> {
    const path = `v4/onepoint/security/management/contexts/${contextUID}/roles`;

    return this.http.get<Identifiable[]>(path);
  }


  getFeaturesByContext(contextUID: string): EmpObservable<Identifiable[]> {
    const path = `v4/onepoint/security/management/contexts/${contextUID}/features`;

    return this.http.get<Identifiable[]>(path);
  }


  searchSubjects(query: SubjectsQuery): EmpObservable<Subject[]> {
    let path = `v4/onepoint/security/management/subjects/search`;

    return this.http.post<Subject[]>(path, query);
  }


  getSubjectContexts(subjectUID: string): EmpObservable<Identifiable[]> {
    Assertion.assertValue(subjectUID, 'subjectUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}/contexts`;

    return this.http.get<Identifiable[]>(path);
  }


  getSubjectRolesByContext(subjectUID: string, contextUID: string): EmpObservable<Identifiable[]> {
    Assertion.assertValue(subjectUID, 'subjectUID');
    Assertion.assertValue(contextUID, 'contextUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}/contexts/${contextUID}/roles`;

    return this.http.get<Identifiable[]>(path);
  }


  getSubjectFeaturesByContext(subjectUID: string, contextUID: string): EmpObservable<Identifiable[]> {
    Assertion.assertValue(subjectUID, 'subjectUID');
    Assertion.assertValue(contextUID, 'contextUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}/contexts/${contextUID}/features`;

    return this.http.get<Identifiable[]>(path);
  }


  createSubject(subjectFields: SubjectFields): EmpObservable<Subject> {
    Assertion.assertValue(subjectFields, 'subjectFields');

    const path = `v4/onepoint/security/management/subjects`;

    return this.http.post<Subject>(path, subjectFields);
  }


  updateSubject(subjectUID: string, subjectFields: SubjectFields): EmpObservable<Subject> {
    Assertion.assertValue(subjectUID, 'subjectUID');
    Assertion.assertValue(subjectFields, 'subjectFields');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}`;

    return this.http.put<Subject>(path, subjectFields);
  }


  deleteSubject(subjectUID: string): EmpObservable<void> {
    Assertion.assertValue(subjectUID, 'subjectUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}`;

    return this.http.delete<void>(path);
  }


  resetCredentialsToSubject(subjectUID: string): EmpObservable<any> {
    Assertion.assertValue(subjectUID, 'subjectUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}/reset-credentials`;

    return this.http.post<any>(path);
  }


  activateSubject(subjectUID: string): EmpObservable<Subject> {
    Assertion.assertValue(subjectUID, 'subjectUID');

    const path = `v4/onepoint/security/management/subjects/$${subjectUID}/activate`;

    return this.http.post<Subject>(path);
  }


  suspendSubject(subjectUID: string): EmpObservable<Subject> {
    Assertion.assertValue(subjectUID, 'subjectUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}/suspend`;

    return this.http.post<Subject>(path);
  }


  assignContextToSubject(subjectUID: string, contextUID: string): EmpObservable<Identifiable[]> {
    Assertion.assertValue(subjectUID, 'subjectUID');
    Assertion.assertValue(contextUID, 'contextUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}/contexts/${contextUID}`;

    return this.http.post<Identifiable[]>(path);
  }


  removeContextToSubject(subjectUID: string, contextUID: string): EmpObservable<Identifiable[]> {
    Assertion.assertValue(subjectUID, 'subjectUID');
    Assertion.assertValue(contextUID, 'contextUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}/contexts/${contextUID}`;

    return this.http.delete<Identifiable[]>(path);
  }


  assignRoleToSubject(subjectUID: string,
                      contextUID: string,
                      roleUID: string): EmpObservable<Identifiable[]> {
    Assertion.assertValue(subjectUID, 'subjectUID');
    Assertion.assertValue(contextUID, 'contextUID');
    Assertion.assertValue(roleUID, 'roleUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}` +
      `/contexts/${contextUID}/roles/${roleUID}`;

    return this.http.post<Identifiable[]>(path);
  }


  removeRoleToSubject(subjectUID: string,
                      contextUID: string,
                      roleUID: string): EmpObservable<Identifiable[]> {
    Assertion.assertValue(subjectUID, 'subjectUID');
    Assertion.assertValue(contextUID, 'contextUID');
    Assertion.assertValue(roleUID, 'roleUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}` +
      `/contexts/${contextUID}/roles/${roleUID}`;

    return this.http.delete<Identifiable[]>(path);
  }


  assignFeatureToSubject(subjectUID: string,
                         contextUID: string,
                         featureUID: string): EmpObservable<Identifiable[]> {
    Assertion.assertValue(subjectUID, 'subjectUID');
    Assertion.assertValue(contextUID, 'contextUID');
    Assertion.assertValue(featureUID, 'featureUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}` +
      `/contexts/${contextUID}/features/${featureUID}`;

    return this.http.post<Identifiable[]>(path);
  }


  removeFeatureToSubject(subjectUID: string,
                         contextUID: string,
                         featureUID: string): EmpObservable<Identifiable[]> {
    Assertion.assertValue(subjectUID, 'subjectUID');
    Assertion.assertValue(contextUID, 'contextUID');
    Assertion.assertValue(featureUID, 'featureUID');

    const path = `v4/onepoint/security/management/subjects/${subjectUID}` +
      `/contexts/${contextUID}/features/${featureUID}`

    return this.http.delete<Identifiable[]>(path);
  }

}