diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 6a4d436550..6150031ca6 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -24,6 +24,7 @@ import { EventsComponent as OrgEventsComponent } from './organizations/manage/ev import { GroupsComponent as OrgGroupsComponent } from './organizations/manage/groups.component'; import { ManageComponent as OrgManageComponent } from './organizations/manage/manage.component'; import { PeopleComponent as OrgPeopleComponent } from './organizations/manage/people.component'; +import { PoliciesComponent as OrgPoliciesComponent } from './organizations/manage/policies.component'; import { AccountComponent as OrgAccountComponent } from './organizations/settings/account.component'; import { OrganizationBillingComponent } from './organizations/settings/organization-billing.component'; @@ -264,6 +265,7 @@ const routes: Routes = [ { path: 'events', component: OrgEventsComponent, data: { titleId: 'eventLogs' } }, { path: 'groups', component: OrgGroupsComponent, data: { titleId: 'groups' } }, { path: 'people', component: OrgPeopleComponent, data: { titleId: 'people' } }, + { path: 'policies', component: OrgPoliciesComponent, data: { titleId: 'policies' } }, ], }, { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 678f0f0b40..71e6a20e32 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -51,6 +51,7 @@ import { GroupAddEditComponent as OrgGroupAddEditComponent } from './organizatio import { GroupsComponent as OrgGroupsComponent } from './organizations/manage/groups.component'; import { ManageComponent as OrgManageComponent } from './organizations/manage/manage.component'; import { PeopleComponent as OrgPeopleComponent } from './organizations/manage/people.component'; +import { PoliciesComponent as OrgPoliciesComponent } from './organizations/manage/policies.component'; import { UserAddEditComponent as OrgUserAddEditComponent } from './organizations/manage/user-add-edit.component'; import { UserConfirmComponent as OrgUserConfirmComponent } from './organizations/manage/user-confirm.component'; import { UserGroupsComponent as OrgUserGroupsComponent } from './organizations/manage/user-groups.component'; @@ -311,6 +312,7 @@ registerLocaleData(localeZhTw, 'zh-TW'); OrgManageCollectionsComponent, OrgManageComponent, OrgPeopleComponent, + OrgPoliciesComponent, OrgReusedPasswordsReportComponent, OrgRotateApiKeyComponent, OrgSettingComponent, diff --git a/src/app/organizations/manage/policies.component.html b/src/app/organizations/manage/policies.component.html new file mode 100644 index 0000000000..db45a0beb3 --- /dev/null +++ b/src/app/organizations/manage/policies.component.html @@ -0,0 +1,20 @@ + + + + {{'loading' | i18n}} + + + + + + + + +
+ {{p.name}} + + +
+ diff --git a/src/app/organizations/manage/policies.component.ts b/src/app/organizations/manage/policies.component.ts new file mode 100644 index 0000000000..5995a6f3e4 --- /dev/null +++ b/src/app/organizations/manage/policies.component.ts @@ -0,0 +1,96 @@ +import { + Component, + ComponentFactoryResolver, + OnInit, + ViewChild, + ViewContainerRef, +} from '@angular/core'; +import { + ActivatedRoute, + Router, +} from '@angular/router'; + +import { ToasterService } from 'angular2-toaster'; +import { Angulartics2 } from 'angulartics2'; + +import { ApiService } from 'jslib/abstractions/api.service'; +import { I18nService } from 'jslib/abstractions/i18n.service'; +import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service'; +import { UserService } from 'jslib/abstractions/user.service'; + +import { PolicyResponse } from 'jslib/models/response/policyResponse'; + +import { Utils } from 'jslib/misc/utils'; + +import { ModalComponent } from '../../modal.component'; +import { EntityUsersComponent } from './entity-users.component'; +import { GroupAddEditComponent } from './group-add-edit.component'; + +import { PolicyType } from 'jslib/enums/policyType'; + +@Component({ + selector: 'app-org-policies', + templateUrl: 'policies.component.html', +}) +export class PoliciesComponent implements OnInit { + @ViewChild('edit', { read: ViewContainerRef }) editModalRef: ViewContainerRef; + + loading = true; + organizationId: string; + policies: any[]; + + private modal: ModalComponent = null; + private orgPolicies: PolicyResponse[]; + private policiesEnabledMap: Map = new Map(); + + constructor(private apiService: ApiService, private route: ActivatedRoute, + private i18nService: I18nService, private componentFactoryResolver: ComponentFactoryResolver, + private analytics: Angulartics2, private toasterService: ToasterService, + private platformUtilsService: PlatformUtilsService, private userService: UserService, + private router: Router) { + this.policies = [ + { + name: 'Two-step Login', + description: 'vbxcvbxvcbxc', + type: PolicyType.TwoFactorAuthentication, + enabled: false, + }, + { + name: 'Master Password', + description: 'vbxcvb', + type: PolicyType.MasterPassword, + enabled: false, + }, + { + name: 'Password Generator', + description: 'rye5tbfgdbfghj', + type: PolicyType.PasswordGenerator, + enabled: false, + }, + ]; + } + + async ngOnInit() { + this.route.parent.parent.params.subscribe(async (params) => { + this.organizationId = params.organizationId; + const organization = await this.userService.getOrganization(this.organizationId); + if (organization == null || !organization.usePolicies) { + this.router.navigate(['/organizations', this.organizationId]); + return; + } + await this.load(); + }); + } + + async load() { + const response = await this.apiService.getPolicies(this.organizationId); + this.orgPolicies = response.data != null && response.data.length > 0 ? response.data : []; + this.orgPolicies.forEach((op) => { + this.policiesEnabledMap.set(op.type, op.enabled); + }); + this.policies.forEach((p) => { + p.enabled = this.policiesEnabledMap.has(p.type) && this.policiesEnabledMap.get(p.type); + }); + this.loading = false; + } +}