mirror of
https://github.com/bitwarden/web
synced 2025-12-06 00:03:28 +00:00
Fix glob processing in npm. Ban single param parens (#818)
This commit is contained in:
@@ -24,8 +24,8 @@
|
|||||||
"dist:selfhost": "npm run build:selfhost:prod && gulp postdist",
|
"dist:selfhost": "npm run build:selfhost:prod && gulp postdist",
|
||||||
"deploy": "npm run dist && gh-pages -d build",
|
"deploy": "npm run dist && gh-pages -d build",
|
||||||
"deploy:dev": "npm run dist && gh-pages -d build -r git@github.com:kspearrin/bitwarden-web-dev.git",
|
"deploy:dev": "npm run dist && gh-pages -d build -r git@github.com:kspearrin/bitwarden-web-dev.git",
|
||||||
"lint": "tslint src/**/*.ts || true",
|
"lint": "tslint 'src/**/*.ts' || true",
|
||||||
"lint:fix": "tslint src/**/*.ts --fix"
|
"lint:fix": "tslint 'src/**/*.ts' --fix"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@angular/compiler-cli": "^9.1.12",
|
"@angular/compiler-cli": "^9.1.12",
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export class AcceptEmergencyComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
let fired = false;
|
let fired = false;
|
||||||
this.route.queryParams.subscribe(async (qParams) => {
|
this.route.queryParams.subscribe(async qParams => {
|
||||||
if (fired) {
|
if (fired) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ export class AcceptOrganizationComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
let fired = false;
|
let fired = false;
|
||||||
this.route.queryParams.subscribe(async (qParams) => {
|
this.route.queryParams.subscribe(async qParams => {
|
||||||
if (fired) {
|
if (fired) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ export class LoginComponent extends BaseLoginComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
const queryParamsSub = this.route.queryParams.subscribe(async (qParams) => {
|
const queryParamsSub = this.route.queryParams.subscribe(async qParams => {
|
||||||
if (qParams.email != null && qParams.email.indexOf('@') > -1) {
|
if (qParams.email != null && qParams.email.indexOf('@') > -1) {
|
||||||
this.email = qParams.email;
|
this.email = qParams.email;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ export class RegisterComponent extends BaseRegisterComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
const queryParamsSub = this.route.queryParams.subscribe((qParams) => {
|
const queryParamsSub = this.route.queryParams.subscribe(qParams => {
|
||||||
this.referenceData = new ReferenceEventRequest();
|
this.referenceData = new ReferenceEventRequest();
|
||||||
if (qParams.email != null && qParams.email.indexOf('@') > -1) {
|
if (qParams.email != null && qParams.email.indexOf('@') > -1) {
|
||||||
this.email = qParams.email;
|
this.email = qParams.email;
|
||||||
@@ -96,8 +96,8 @@ export class RegisterComponent extends BaseRegisterComponent {
|
|||||||
const policies = await this.apiService.getPoliciesByToken(invite.organizationId, invite.token,
|
const policies = await this.apiService.getPoliciesByToken(invite.organizationId, invite.token,
|
||||||
invite.email, invite.organizationUserId);
|
invite.email, invite.organizationUserId);
|
||||||
if (policies.data != null) {
|
if (policies.data != null) {
|
||||||
const policiesData = policies.data.map((p) => new PolicyData(p));
|
const policiesData = policies.data.map(p => new PolicyData(p));
|
||||||
this.policies = policiesData.map((p) => new Policy(p));
|
this.policies = policiesData.map(p => new Policy(p));
|
||||||
}
|
}
|
||||||
} catch { }
|
} catch { }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export class SsoComponent extends BaseSsoComponent {
|
|||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
const queryParamsSub = this.route.queryParams.subscribe(async (qParams) => {
|
const queryParamsSub = this.route.queryParams.subscribe(async qParams => {
|
||||||
if (qParams.identifier != null) {
|
if (qParams.identifier != null) {
|
||||||
this.identifier = qParams.identifier;
|
this.identifier = qParams.identifier;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export class VerifyEmailTokenComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
let fired = false;
|
let fired = false;
|
||||||
this.route.queryParams.subscribe(async (qParams) => {
|
this.route.queryParams.subscribe(async qParams => {
|
||||||
if (fired) {
|
if (fired) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ export class VerifyRecoverDeleteComponent implements OnInit {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
let fired = false;
|
let fired = false;
|
||||||
this.route.queryParams.subscribe(async (qParams) => {
|
this.route.queryParams.subscribe(async qParams => {
|
||||||
if (fired) {
|
if (fired) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ export class AppComponent implements OnDestroy, OnInit {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.router.events.subscribe((event) => {
|
this.router.events.subscribe(event => {
|
||||||
if (event instanceof NavigationEnd) {
|
if (event instanceof NavigationEnd) {
|
||||||
const modals = Array.from(document.querySelectorAll('.modal'));
|
const modals = Array.from(document.querySelectorAll('.modal'));
|
||||||
for (const modal of modals) {
|
for (const modal of modals) {
|
||||||
|
|||||||
@@ -115,10 +115,10 @@ import { DeleteAccountComponent } from './settings/delete-account.component';
|
|||||||
import { DomainRulesComponent } from './settings/domain-rules.component';
|
import { DomainRulesComponent } from './settings/domain-rules.component';
|
||||||
import { EmergencyAccessAddEditComponent } from './settings/emergency-access-add-edit.component';
|
import { EmergencyAccessAddEditComponent } from './settings/emergency-access-add-edit.component';
|
||||||
import { EmergencyAccessAttachmentsComponent } from './settings/emergency-access-attachments.component';
|
import { EmergencyAccessAttachmentsComponent } from './settings/emergency-access-attachments.component';
|
||||||
import { EmergencyAccessComponent } from './settings/emergency-access.component';
|
|
||||||
import { EmergencyAccessConfirmComponent } from './settings/emergency-access-confirm.component';
|
import { EmergencyAccessConfirmComponent } from './settings/emergency-access-confirm.component';
|
||||||
import { EmergencyAccessTakeoverComponent } from './settings/emergency-access-takeover.component';
|
import { EmergencyAccessTakeoverComponent } from './settings/emergency-access-takeover.component';
|
||||||
import { EmergencyAccessViewComponent } from './settings/emergency-access-view.component';
|
import { EmergencyAccessViewComponent } from './settings/emergency-access-view.component';
|
||||||
|
import { EmergencyAccessComponent } from './settings/emergency-access.component';
|
||||||
import { EmergencyAddEditComponent } from './settings/emergency-add-edit.component';
|
import { EmergencyAddEditComponent } from './settings/emergency-add-edit.component';
|
||||||
import { LinkSsoComponent } from './settings/link-sso.component';
|
import { LinkSsoComponent } from './settings/link-sso.component';
|
||||||
import { OptionsComponent } from './settings/options.component';
|
import { OptionsComponent } from './settings/options.component';
|
||||||
@@ -191,8 +191,8 @@ import { SearchCiphersPipe } from 'jslib/angular/pipes/search-ciphers.pipe';
|
|||||||
import { SearchPipe } from 'jslib/angular/pipes/search.pipe';
|
import { SearchPipe } from 'jslib/angular/pipes/search.pipe';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
registerLocaleData,
|
|
||||||
DatePipe,
|
DatePipe,
|
||||||
|
registerLocaleData,
|
||||||
} from '@angular/common';
|
} from '@angular/common';
|
||||||
import localeCa from '@angular/common/locales/ca';
|
import localeCa from '@angular/common/locales/ca';
|
||||||
import localeCs from '@angular/common/locales/cs';
|
import localeCs from '@angular/common/locales/cs';
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ export class OrganizationLayoutComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
document.body.classList.remove('layout_frontend');
|
document.body.classList.remove('layout_frontend');
|
||||||
this.route.params.subscribe(async (params) => {
|
this.route.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
await this.load();
|
await this.load();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ export class CollectionAddEditComponent implements OnInit {
|
|||||||
this.editMode = this.loading = this.collectionId != null;
|
this.editMode = this.loading = this.collectionId != null;
|
||||||
if (this.accessGroups) {
|
if (this.accessGroups) {
|
||||||
const groupsResponse = await this.apiService.getGroups(this.organizationId);
|
const groupsResponse = await this.apiService.getGroups(this.organizationId);
|
||||||
this.groups = groupsResponse.data.map((r) => r).sort(Utils.getSortFunction(this.i18nService, 'name'));
|
this.groups = groupsResponse.data.map(r => r).sort(Utils.getSortFunction(this.i18nService, 'name'));
|
||||||
}
|
}
|
||||||
this.orgKey = await this.cryptoService.getOrgKey(this.organizationId);
|
this.orgKey = await this.cryptoService.getOrgKey(this.organizationId);
|
||||||
|
|
||||||
@@ -68,8 +68,8 @@ export class CollectionAddEditComponent implements OnInit {
|
|||||||
this.name = await this.cryptoService.decryptToUtf8(new CipherString(collection.name), this.orgKey);
|
this.name = await this.cryptoService.decryptToUtf8(new CipherString(collection.name), this.orgKey);
|
||||||
this.externalId = collection.externalId;
|
this.externalId = collection.externalId;
|
||||||
if (collection.groups != null && this.groups.length > 0) {
|
if (collection.groups != null && this.groups.length > 0) {
|
||||||
collection.groups.forEach((s) => {
|
collection.groups.forEach(s => {
|
||||||
const group = this.groups.filter((g) => !g.accessAll && g.id === s.id);
|
const group = this.groups.filter(g => !g.accessAll && g.id === s.id);
|
||||||
if (group != null && group.length > 0) {
|
if (group != null && group.length > 0) {
|
||||||
(group[0] as any).checked = true;
|
(group[0] as any).checked = true;
|
||||||
(group[0] as any).readOnly = s.readOnly;
|
(group[0] as any).readOnly = s.readOnly;
|
||||||
@@ -82,7 +82,7 @@ export class CollectionAddEditComponent implements OnInit {
|
|||||||
this.title = this.i18nService.t('addCollection');
|
this.title = this.i18nService.t('addCollection');
|
||||||
}
|
}
|
||||||
|
|
||||||
this.groups.forEach((g) => {
|
this.groups.forEach(g => {
|
||||||
if (g.accessAll) {
|
if (g.accessAll) {
|
||||||
(g as any).checked = true;
|
(g as any).checked = true;
|
||||||
}
|
}
|
||||||
@@ -103,7 +103,7 @@ export class CollectionAddEditComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
selectAll(select: boolean) {
|
selectAll(select: boolean) {
|
||||||
this.groups.forEach((g) => this.check(g, select));
|
this.groups.forEach(g => this.check(g, select));
|
||||||
}
|
}
|
||||||
|
|
||||||
async submit() {
|
async submit() {
|
||||||
@@ -114,8 +114,8 @@ export class CollectionAddEditComponent implements OnInit {
|
|||||||
const request = new CollectionRequest();
|
const request = new CollectionRequest();
|
||||||
request.name = (await this.cryptoService.encrypt(this.name, this.orgKey)).encryptedString;
|
request.name = (await this.cryptoService.encrypt(this.name, this.orgKey)).encryptedString;
|
||||||
request.externalId = this.externalId;
|
request.externalId = this.externalId;
|
||||||
request.groups = this.groups.filter((g) => (g as any).checked && !g.accessAll)
|
request.groups = this.groups.filter(g => (g as any).checked && !g.accessAll)
|
||||||
.map((g) => new SelectionReadOnlyRequest(g.id, !!(g as any).readOnly, !!(g as any).hidePasswords));
|
.map(g => new SelectionReadOnlyRequest(g.id, !!(g as any).readOnly, !!(g as any).hidePasswords));
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (this.editMode) {
|
if (this.editMode) {
|
||||||
|
|||||||
@@ -57,10 +57,10 @@ export class CollectionsComponent implements OnInit {
|
|||||||
private userService: UserService, private searchService: SearchService) { }
|
private userService: UserService, private searchService: SearchService) { }
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
await this.load();
|
await this.load();
|
||||||
const queryParamsSub = this.route.queryParams.subscribe(async (qParams) => {
|
const queryParamsSub = this.route.queryParams.subscribe(async qParams => {
|
||||||
this.searchText = qParams.search;
|
this.searchText = qParams.search;
|
||||||
if (queryParamsSub != null) {
|
if (queryParamsSub != null) {
|
||||||
queryParamsSub.unsubscribe();
|
queryParamsSub.unsubscribe();
|
||||||
@@ -77,7 +77,7 @@ export class CollectionsComponent implements OnInit {
|
|||||||
} else {
|
} else {
|
||||||
response = await this.apiService.getUserCollections();
|
response = await this.apiService.getUserCollections();
|
||||||
}
|
}
|
||||||
const collections = response.data.filter((c) => c.organizationId === this.organizationId).map((r) =>
|
const collections = response.data.filter(c => c.organizationId === this.organizationId).map(r =>
|
||||||
new Collection(new CollectionData(r as CollectionDetailsResponse)));
|
new Collection(new CollectionData(r as CollectionDetailsResponse)));
|
||||||
this.collections = await this.collectionService.decryptMany(collections);
|
this.collections = await this.collectionService.decryptMany(collections);
|
||||||
this.resetPaging();
|
this.resetPaging();
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ export class EntityEventsComponent implements OnInit {
|
|||||||
async load() {
|
async load() {
|
||||||
if (this.showUser) {
|
if (this.showUser) {
|
||||||
const response = await this.apiService.getOrganizationUsers(this.organizationId);
|
const response = await this.apiService.getOrganizationUsers(this.organizationId);
|
||||||
response.data.forEach((u) => {
|
response.data.forEach(u => {
|
||||||
const name = u.name == null || u.name.trim() === '' ? u.email : u.name;
|
const name = u.name == null || u.name.trim() === '' ? u.email : u.name;
|
||||||
this.orgUsersIdMap.set(u.id, { name: name, email: u.email });
|
this.orgUsersIdMap.set(u.id, { name: name, email: u.email });
|
||||||
this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });
|
this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });
|
||||||
@@ -94,7 +94,7 @@ export class EntityEventsComponent implements OnInit {
|
|||||||
} catch { }
|
} catch { }
|
||||||
|
|
||||||
this.continuationToken = response.continuationToken;
|
this.continuationToken = response.continuationToken;
|
||||||
const events = response.data.map((r) => {
|
const events = response.data.map(r => {
|
||||||
const userId = r.actingUserId == null ? r.userId : r.actingUserId;
|
const userId = r.actingUserId == null ? r.userId : r.actingUserId;
|
||||||
const eventInfo = this.eventService.getEventInfo(r);
|
const eventInfo = this.eventService.getEventInfo(r);
|
||||||
const user = this.showUser && userId != null && this.orgUsersUserIdMap.has(userId) ?
|
const user = this.showUser && userId != null && this.orgUsersUserIdMap.has(userId) ?
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export class EntityUsersComponent implements OnInit {
|
|||||||
|
|
||||||
get users() {
|
get users() {
|
||||||
if (this.showSelected) {
|
if (this.showSelected) {
|
||||||
return this.allUsers.filter((u) => (u as any).checked);
|
return this.allUsers.filter(u => (u as any).checked);
|
||||||
} else {
|
} else {
|
||||||
return this.allUsers;
|
return this.allUsers;
|
||||||
}
|
}
|
||||||
@@ -59,12 +59,12 @@ export class EntityUsersComponent implements OnInit {
|
|||||||
|
|
||||||
async loadUsers() {
|
async loadUsers() {
|
||||||
const users = await this.apiService.getOrganizationUsers(this.organizationId);
|
const users = await this.apiService.getOrganizationUsers(this.organizationId);
|
||||||
this.allUsers = users.data.map((r) => r).sort(Utils.getSortFunction(this.i18nService, 'email'));
|
this.allUsers = users.data.map(r => r).sort(Utils.getSortFunction(this.i18nService, 'email'));
|
||||||
if (this.entity === 'group') {
|
if (this.entity === 'group') {
|
||||||
const response = await this.apiService.getGroupUsers(this.organizationId, this.entityId);
|
const response = await this.apiService.getGroupUsers(this.organizationId, this.entityId);
|
||||||
if (response != null && users.data.length > 0) {
|
if (response != null && users.data.length > 0) {
|
||||||
response.forEach((s) => {
|
response.forEach(s => {
|
||||||
const user = users.data.filter((u) => u.id === s);
|
const user = users.data.filter(u => u.id === s);
|
||||||
if (user != null && user.length > 0) {
|
if (user != null && user.length > 0) {
|
||||||
(user[0] as any).checked = true;
|
(user[0] as any).checked = true;
|
||||||
}
|
}
|
||||||
@@ -73,8 +73,8 @@ export class EntityUsersComponent implements OnInit {
|
|||||||
} else if (this.entity === 'collection') {
|
} else if (this.entity === 'collection') {
|
||||||
const response = await this.apiService.getCollectionUsers(this.organizationId, this.entityId);
|
const response = await this.apiService.getCollectionUsers(this.organizationId, this.entityId);
|
||||||
if (response != null && users.data.length > 0) {
|
if (response != null && users.data.length > 0) {
|
||||||
response.forEach((s) => {
|
response.forEach(s => {
|
||||||
const user = users.data.filter((u) => !u.accessAll && u.id === s.id);
|
const user = users.data.filter(u => !u.accessAll && u.id === s.id);
|
||||||
if (user != null && user.length > 0) {
|
if (user != null && user.length > 0) {
|
||||||
(user[0] as any).checked = true;
|
(user[0] as any).checked = true;
|
||||||
(user[0] as any).readOnly = s.readOnly;
|
(user[0] as any).readOnly = s.readOnly;
|
||||||
@@ -84,7 +84,7 @@ export class EntityUsersComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.allUsers.forEach((u) => {
|
this.allUsers.forEach(u => {
|
||||||
if (this.entity === 'collection' && u.accessAll) {
|
if (this.entity === 'collection' && u.accessAll) {
|
||||||
(u as any).checked = true;
|
(u as any).checked = true;
|
||||||
}
|
}
|
||||||
@@ -121,11 +121,11 @@ export class EntityUsersComponent implements OnInit {
|
|||||||
async submit() {
|
async submit() {
|
||||||
try {
|
try {
|
||||||
if (this.entity === 'group') {
|
if (this.entity === 'group') {
|
||||||
const selections = this.users.filter((u) => (u as any).checked).map((u) => u.id);
|
const selections = this.users.filter(u => (u as any).checked).map(u => u.id);
|
||||||
this.formPromise = this.apiService.putGroupUsers(this.organizationId, this.entityId, selections);
|
this.formPromise = this.apiService.putGroupUsers(this.organizationId, this.entityId, selections);
|
||||||
} else {
|
} else {
|
||||||
const selections = this.users.filter((u) => (u as any).checked && !u.accessAll)
|
const selections = this.users.filter(u => (u as any).checked && !u.accessAll)
|
||||||
.map((u) => new SelectionReadOnlyRequest(u.id, !!(u as any).readOnly, !!(u as any).hidePasswords));
|
.map(u => new SelectionReadOnlyRequest(u.id, !!(u as any).readOnly, !!(u as any).hidePasswords));
|
||||||
this.formPromise = this.apiService.putCollectionUsers(this.organizationId, this.entityId, selections);
|
this.formPromise = this.apiService.putCollectionUsers(this.organizationId, this.entityId, selections);
|
||||||
}
|
}
|
||||||
await this.formPromise;
|
await this.formPromise;
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export class EventsComponent implements OnInit {
|
|||||||
private router: Router) { }
|
private router: Router) { }
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
const organization = await this.userService.getOrganization(this.organizationId);
|
const organization = await this.userService.getOrganization(this.organizationId);
|
||||||
if (organization == null || !organization.useEvents) {
|
if (organization == null || !organization.useEvents) {
|
||||||
@@ -55,7 +55,7 @@ export class EventsComponent implements OnInit {
|
|||||||
|
|
||||||
async load() {
|
async load() {
|
||||||
const response = await this.apiService.getOrganizationUsers(this.organizationId);
|
const response = await this.apiService.getOrganizationUsers(this.organizationId);
|
||||||
response.data.forEach((u) => {
|
response.data.forEach(u => {
|
||||||
const name = u.name == null || u.name.trim() === '' ? u.email : u.name;
|
const name = u.name == null || u.name.trim() === '' ? u.email : u.name;
|
||||||
this.orgUsersIdMap.set(u.id, { name: name, email: u.email });
|
this.orgUsersIdMap.set(u.id, { name: name, email: u.email });
|
||||||
this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });
|
this.orgUsersUserIdMap.set(u.userId, { name: name, email: u.email });
|
||||||
@@ -92,7 +92,7 @@ export class EventsComponent implements OnInit {
|
|||||||
} catch { }
|
} catch { }
|
||||||
|
|
||||||
this.continuationToken = response.continuationToken;
|
this.continuationToken = response.continuationToken;
|
||||||
const events = response.data.map((r) => {
|
const events = response.data.map(r => {
|
||||||
const userId = r.actingUserId == null ? r.userId : r.actingUserId;
|
const userId = r.actingUserId == null ? r.userId : r.actingUserId;
|
||||||
const eventInfo = this.eventService.getEventInfo(r);
|
const eventInfo = this.eventService.getEventInfo(r);
|
||||||
const user = userId != null && this.orgUsersUserIdMap.has(userId) ?
|
const user = userId != null && this.orgUsersUserIdMap.has(userId) ?
|
||||||
|
|||||||
@@ -58,8 +58,8 @@ export class GroupAddEditComponent implements OnInit {
|
|||||||
this.name = group.name;
|
this.name = group.name;
|
||||||
this.externalId = group.externalId;
|
this.externalId = group.externalId;
|
||||||
if (group.collections != null && this.collections != null) {
|
if (group.collections != null && this.collections != null) {
|
||||||
group.collections.forEach((s) => {
|
group.collections.forEach(s => {
|
||||||
const collection = this.collections.filter((c) => c.id === s.id);
|
const collection = this.collections.filter(c => c.id === s.id);
|
||||||
if (collection != null && collection.length > 0) {
|
if (collection != null && collection.length > 0) {
|
||||||
(collection[0] as any).checked = true;
|
(collection[0] as any).checked = true;
|
||||||
collection[0].readOnly = s.readOnly;
|
collection[0].readOnly = s.readOnly;
|
||||||
@@ -77,7 +77,7 @@ export class GroupAddEditComponent implements OnInit {
|
|||||||
|
|
||||||
async loadCollections() {
|
async loadCollections() {
|
||||||
const response = await this.apiService.getCollections(this.organizationId);
|
const response = await this.apiService.getCollections(this.organizationId);
|
||||||
const collections = response.data.map((r) =>
|
const collections = response.data.map(r =>
|
||||||
new Collection(new CollectionData(r as CollectionDetailsResponse)));
|
new Collection(new CollectionData(r as CollectionDetailsResponse)));
|
||||||
this.collections = await this.collectionService.decryptMany(collections);
|
this.collections = await this.collectionService.decryptMany(collections);
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ export class GroupAddEditComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
selectAll(select: boolean) {
|
selectAll(select: boolean) {
|
||||||
this.collections.forEach((c) => this.check(c, select));
|
this.collections.forEach(c => this.check(c, select));
|
||||||
}
|
}
|
||||||
|
|
||||||
async submit() {
|
async submit() {
|
||||||
@@ -99,8 +99,8 @@ export class GroupAddEditComponent implements OnInit {
|
|||||||
request.externalId = this.externalId;
|
request.externalId = this.externalId;
|
||||||
request.accessAll = this.access === 'all';
|
request.accessAll = this.access === 'all';
|
||||||
if (!request.accessAll) {
|
if (!request.accessAll) {
|
||||||
request.collections = this.collections.filter((c) => (c as any).checked)
|
request.collections = this.collections.filter(c => (c as any).checked)
|
||||||
.map((c) => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));
|
.map(c => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ export class GroupsComponent implements OnInit {
|
|||||||
private router: Router, private searchService: SearchService) { }
|
private router: Router, private searchService: SearchService) { }
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
const organization = await this.userService.getOrganization(this.organizationId);
|
const organization = await this.userService.getOrganization(this.organizationId);
|
||||||
if (organization == null || !organization.useGroups) {
|
if (organization == null || !organization.useGroups) {
|
||||||
@@ -62,7 +62,7 @@ export class GroupsComponent implements OnInit {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await this.load();
|
await this.load();
|
||||||
const queryParamsSub = this.route.queryParams.subscribe(async (qParams) => {
|
const queryParamsSub = this.route.queryParams.subscribe(async qParams => {
|
||||||
this.searchText = qParams.search;
|
this.searchText = qParams.search;
|
||||||
if (queryParamsSub != null) {
|
if (queryParamsSub != null) {
|
||||||
queryParamsSub.unsubscribe();
|
queryParamsSub.unsubscribe();
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export class ManageComponent implements OnInit {
|
|||||||
constructor(private route: ActivatedRoute, private userService: UserService) { }
|
constructor(private route: ActivatedRoute, private userService: UserService) { }
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.route.parent.params.subscribe(async (params) => {
|
this.route.parent.params.subscribe(async params => {
|
||||||
this.organization = await this.userService.getOrganization(params.organizationId);
|
this.organization = await this.userService.getOrganization(params.organizationId);
|
||||||
this.accessPolicies = this.organization.usePolicies;
|
this.accessPolicies = this.organization.usePolicies;
|
||||||
this.accessEvents = this.organization.useEvents;
|
this.accessEvents = this.organization.useEvents;
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ export class PeopleComponent implements OnInit {
|
|||||||
private storageService: StorageService, private searchService: SearchService) { }
|
private storageService: StorageService, private searchService: SearchService) { }
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
const organization = await this.userService.getOrganization(this.organizationId);
|
const organization = await this.userService.getOrganization(this.organizationId);
|
||||||
if (!organization.canManageUsers) {
|
if (!organization.canManageUsers) {
|
||||||
@@ -87,10 +87,10 @@ export class PeopleComponent implements OnInit {
|
|||||||
this.accessGroups = organization.useGroups;
|
this.accessGroups = organization.useGroups;
|
||||||
await this.load();
|
await this.load();
|
||||||
|
|
||||||
const queryParamsSub = this.route.queryParams.subscribe(async (qParams) => {
|
const queryParamsSub = this.route.queryParams.subscribe(async qParams => {
|
||||||
this.searchText = qParams.search;
|
this.searchText = qParams.search;
|
||||||
if (qParams.viewEvents != null) {
|
if (qParams.viewEvents != null) {
|
||||||
const user = this.users.filter((u) => u.id === qParams.viewEvents);
|
const user = this.users.filter(u => u.id === qParams.viewEvents);
|
||||||
if (user.length > 0 && user[0].status === OrganizationUserStatusType.Confirmed) {
|
if (user.length > 0 && user[0].status === OrganizationUserStatusType.Confirmed) {
|
||||||
this.events(user[0]);
|
this.events(user[0]);
|
||||||
}
|
}
|
||||||
@@ -107,7 +107,7 @@ export class PeopleComponent implements OnInit {
|
|||||||
this.statusMap.clear();
|
this.statusMap.clear();
|
||||||
this.allUsers = response.data != null && response.data.length > 0 ? response.data : [];
|
this.allUsers = response.data != null && response.data.length > 0 ? response.data : [];
|
||||||
this.allUsers.sort(Utils.getSortFunction(this.i18nService, 'email'));
|
this.allUsers.sort(Utils.getSortFunction(this.i18nService, 'email'));
|
||||||
this.allUsers.forEach((u) => {
|
this.allUsers.forEach(u => {
|
||||||
if (!this.statusMap.has(u.status)) {
|
if (!this.statusMap.has(u.status)) {
|
||||||
this.statusMap.set(u.status, [u]);
|
this.statusMap.set(u.status, [u]);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import {
|
|||||||
|
|
||||||
import { PolicyType } from 'jslib/enums/policyType';
|
import { PolicyType } from 'jslib/enums/policyType';
|
||||||
|
|
||||||
import { ApiService } from 'jslib/abstractions/api.service';
|
|
||||||
import { EnvironmentService } from 'jslib/abstractions';
|
import { EnvironmentService } from 'jslib/abstractions';
|
||||||
|
import { ApiService } from 'jslib/abstractions/api.service';
|
||||||
import { I18nService } from 'jslib/abstractions/i18n.service';
|
import { I18nService } from 'jslib/abstractions/i18n.service';
|
||||||
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
|
import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
|
||||||
import { UserService } from 'jslib/abstractions/user.service';
|
import { UserService } from 'jslib/abstractions/user.service';
|
||||||
@@ -51,7 +51,7 @@ export class PoliciesComponent implements OnInit {
|
|||||||
private router: Router, private environmentService: EnvironmentService) { }
|
private router: Router, private environmentService: EnvironmentService) { }
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
const organization = await this.userService.getOrganization(this.organizationId);
|
const organization = await this.userService.getOrganization(this.organizationId);
|
||||||
if (organization == null || !organization.usePolicies) {
|
if (organization == null || !organization.usePolicies) {
|
||||||
@@ -106,7 +106,7 @@ export class PoliciesComponent implements OnInit {
|
|||||||
await this.load();
|
await this.load();
|
||||||
|
|
||||||
// Handle policies component launch from Event message
|
// Handle policies component launch from Event message
|
||||||
const queryParamsSub = this.route.queryParams.subscribe(async (qParams) => {
|
const queryParamsSub = this.route.queryParams.subscribe(async qParams => {
|
||||||
if (qParams.policyId != null) {
|
if (qParams.policyId != null) {
|
||||||
const policyIdFromEvents: string = qParams.policyId;
|
const policyIdFromEvents: string = qParams.policyId;
|
||||||
for (const orgPolicy of this.orgPolicies) {
|
for (const orgPolicy of this.orgPolicies) {
|
||||||
@@ -140,10 +140,10 @@ export class PoliciesComponent implements OnInit {
|
|||||||
async load() {
|
async load() {
|
||||||
const response = await this.apiService.getPolicies(this.organizationId);
|
const response = await this.apiService.getPolicies(this.organizationId);
|
||||||
this.orgPolicies = response.data != null && response.data.length > 0 ? response.data : [];
|
this.orgPolicies = response.data != null && response.data.length > 0 ? response.data : [];
|
||||||
this.orgPolicies.forEach((op) => {
|
this.orgPolicies.forEach(op => {
|
||||||
this.policiesEnabledMap.set(op.type, op.enabled);
|
this.policiesEnabledMap.set(op.type, op.enabled);
|
||||||
});
|
});
|
||||||
this.policies.forEach((p) => {
|
this.policies.forEach(p => {
|
||||||
p.enabled = this.policiesEnabledMap.has(p.type) && this.policiesEnabledMap.get(p.type);
|
p.enabled = this.policiesEnabledMap.has(p.type) && this.policiesEnabledMap.get(p.type);
|
||||||
});
|
});
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
|
|||||||
@@ -72,8 +72,8 @@ export class UserAddEditComponent implements OnInit {
|
|||||||
this.permissions = user.permissions;
|
this.permissions = user.permissions;
|
||||||
}
|
}
|
||||||
if (user.collections != null && this.collections != null) {
|
if (user.collections != null && this.collections != null) {
|
||||||
user.collections.forEach((s) => {
|
user.collections.forEach(s => {
|
||||||
const collection = this.collections.filter((c) => c.id === s.id);
|
const collection = this.collections.filter(c => c.id === s.id);
|
||||||
if (collection != null && collection.length > 0) {
|
if (collection != null && collection.length > 0) {
|
||||||
(collection[0] as any).checked = true;
|
(collection[0] as any).checked = true;
|
||||||
collection[0].readOnly = s.readOnly;
|
collection[0].readOnly = s.readOnly;
|
||||||
@@ -91,7 +91,7 @@ export class UserAddEditComponent implements OnInit {
|
|||||||
|
|
||||||
async loadCollections() {
|
async loadCollections() {
|
||||||
const response = await this.apiService.getCollections(this.organizationId);
|
const response = await this.apiService.getCollections(this.organizationId);
|
||||||
const collections = response.data.map((r) =>
|
const collections = response.data.map(r =>
|
||||||
new Collection(new CollectionData(r as CollectionDetailsResponse)));
|
new Collection(new CollectionData(r as CollectionDetailsResponse)));
|
||||||
this.collections = await this.collectionService.decryptMany(collections);
|
this.collections = await this.collectionService.decryptMany(collections);
|
||||||
}
|
}
|
||||||
@@ -104,7 +104,7 @@ export class UserAddEditComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
selectAll(select: boolean) {
|
selectAll(select: boolean) {
|
||||||
this.collections.forEach((c) => this.check(c, select));
|
this.collections.forEach(c => this.check(c, select));
|
||||||
}
|
}
|
||||||
|
|
||||||
setRequestPermissions(p: PermissionsApi, clearPermissions: boolean) {
|
setRequestPermissions(p: PermissionsApi, clearPermissions: boolean) {
|
||||||
@@ -144,8 +144,8 @@ export class UserAddEditComponent implements OnInit {
|
|||||||
async submit() {
|
async submit() {
|
||||||
let collections: SelectionReadOnlyRequest[] = null;
|
let collections: SelectionReadOnlyRequest[] = null;
|
||||||
if (this.access !== 'all') {
|
if (this.access !== 'all') {
|
||||||
collections = this.collections.filter((c) => (c as any).checked)
|
collections = this.collections.filter(c => (c as any).checked)
|
||||||
.map((c) => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));
|
.map(c => new SelectionReadOnlyRequest(c.id, !!c.readOnly, !!c.hidePasswords));
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export class UserGroupsComponent implements OnInit {
|
|||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
const groupsResponse = await this.apiService.getGroups(this.organizationId);
|
const groupsResponse = await this.apiService.getGroups(this.organizationId);
|
||||||
const groups = groupsResponse.data.map((r) => r);
|
const groups = groupsResponse.data.map(r => r);
|
||||||
groups.sort(Utils.getSortFunction(this.i18nService, 'name'));
|
groups.sort(Utils.getSortFunction(this.i18nService, 'name'));
|
||||||
this.groups = groups;
|
this.groups = groups;
|
||||||
|
|
||||||
@@ -44,8 +44,8 @@ export class UserGroupsComponent implements OnInit {
|
|||||||
const userGroups = await this.apiService.getOrganizationUserGroups(
|
const userGroups = await this.apiService.getOrganizationUserGroups(
|
||||||
this.organizationId, this.organizationUserId);
|
this.organizationId, this.organizationUserId);
|
||||||
if (userGroups != null && this.groups != null) {
|
if (userGroups != null && this.groups != null) {
|
||||||
userGroups.forEach((ug) => {
|
userGroups.forEach(ug => {
|
||||||
const group = this.groups.filter((g) => g.id === ug);
|
const group = this.groups.filter(g => g.id === ug);
|
||||||
if (group != null && group.length > 0) {
|
if (group != null && group.length > 0) {
|
||||||
(group[0] as any).checked = true;
|
(group[0] as any).checked = true;
|
||||||
}
|
}
|
||||||
@@ -64,12 +64,12 @@ export class UserGroupsComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
selectAll(select: boolean) {
|
selectAll(select: boolean) {
|
||||||
this.groups.forEach((g) => this.check(g, select));
|
this.groups.forEach(g => this.check(g, select));
|
||||||
}
|
}
|
||||||
|
|
||||||
async submit() {
|
async submit() {
|
||||||
const request = new OrganizationUserUpdateGroupsRequest();
|
const request = new OrganizationUserUpdateGroupsRequest();
|
||||||
request.groupIds = this.groups.filter((g) => (g as any).checked).map((g) => g.id);
|
request.groupIds = this.groups.filter(g => (g as any).checked).map(g => g.id);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.formPromise = this.apiService.putOrganizationUserGroups(this.organizationId, this.organizationUserId,
|
this.formPromise = this.apiService.putOrganizationUserGroups(this.organizationId, this.organizationUserId,
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ export class AccountComponent {
|
|||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.selfHosted = this.platformUtilsService.isSelfHost();
|
this.selfHosted = this.platformUtilsService.isSelfHost();
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
try {
|
try {
|
||||||
this.org = await this.apiService.getOrganization(this.organizationId);
|
this.org = await this.apiService.getOrganization(this.organizationId);
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export class OrganizationBillingComponent extends UserBillingComponent implement
|
|||||||
}
|
}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
await this.load();
|
await this.load();
|
||||||
this.firstLoaded = true;
|
this.firstLoaded = true;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export class OrganizationSubscriptionComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
await this.load();
|
await this.load();
|
||||||
this.firstLoaded = true;
|
this.firstLoaded = true;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export class SettingsComponent {
|
|||||||
private platformUtilsService: PlatformUtilsService) { }
|
private platformUtilsService: PlatformUtilsService) { }
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.route.parent.params.subscribe(async (params) => {
|
this.route.parent.params.subscribe(async params => {
|
||||||
this.selfHosted = await this.platformUtilsService.isSelfHost();
|
this.selfHosted = await this.platformUtilsService.isSelfHost();
|
||||||
const organization = await this.userService.getOrganization(params.organizationId);
|
const organization = await this.userService.getOrganization(params.organizationId);
|
||||||
this.access2fa = organization.use2fa;
|
this.access2fa = organization.use2fa;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export class TwoFactorSetupComponent extends BaseTwoFactorSetupComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
await super.ngOnInit();
|
await super.ngOnInit();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ export class ExportComponent extends BaseExportComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ import {
|
|||||||
ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent,
|
ExposedPasswordsReportComponent as BaseExposedPasswordsReportComponent,
|
||||||
} from '../../tools/exposed-passwords-report.component';
|
} from '../../tools/exposed-passwords-report.component';
|
||||||
|
|
||||||
import { CipherView } from 'jslib/models/view/cipherView';
|
|
||||||
import { Cipher } from 'jslib/models/domain/cipher';
|
import { Cipher } from 'jslib/models/domain/cipher';
|
||||||
|
import { CipherView } from 'jslib/models/view/cipherView';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-exposed-passwords-report',
|
selector: 'app-exposed-passwords-report',
|
||||||
@@ -30,7 +30,7 @@ export class ExposedPasswordsReportComponent extends BaseExposedPasswordsReportC
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organization = await this.userService.getOrganization(params.organizationId);
|
this.organization = await this.userService.getOrganization(params.organizationId);
|
||||||
this.manageableCiphers = await this.cipherService.getAll();
|
this.manageableCiphers = await this.cipherService.getAll();
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ export class ImportComponent extends BaseImportComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
this.successNavigate = ['organizations', this.organizationId, 'vault'];
|
this.successNavigate = ['organizations', this.organizationId, 'vault'];
|
||||||
super.ngOnInit();
|
super.ngOnInit();
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export class InactiveTwoFactorReportComponent extends BaseInactiveTwoFactorRepor
|
|||||||
}
|
}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organization = await this.userService.getOrganization(params.organizationId);
|
this.organization = await this.userService.getOrganization(params.organizationId);
|
||||||
await super.ngOnInit();
|
await super.ngOnInit();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ export class ReusedPasswordsReportComponent extends BaseReusedPasswordsReportCom
|
|||||||
}
|
}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organization = await this.userService.getOrganization(params.organizationId);
|
this.organization = await this.userService.getOrganization(params.organizationId);
|
||||||
this.manageableCiphers = await this.cipherService.getAll();
|
this.manageableCiphers = await this.cipherService.getAll();
|
||||||
await super.ngOnInit();
|
await super.ngOnInit();
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export class ToolsComponent {
|
|||||||
private messagingService: MessagingService) { }
|
private messagingService: MessagingService) { }
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.route.parent.params.subscribe(async (params) => {
|
this.route.parent.params.subscribe(async params => {
|
||||||
this.organization = await this.userService.getOrganization(params.organizationId);
|
this.organization = await this.userService.getOrganization(params.organizationId);
|
||||||
// TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now
|
// TODO: Maybe we want to just make sure they are not on a free plan? Just compare useTotp for now
|
||||||
// since all paid plans include useTotp
|
// since all paid plans include useTotp
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ export class UnsecuredWebsitesReportComponent extends BaseUnsecuredWebsitesRepor
|
|||||||
}
|
}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organization = await this.userService.getOrganization(params.organizationId);
|
this.organization = await this.userService.getOrganization(params.organizationId);
|
||||||
await super.ngOnInit();
|
await super.ngOnInit();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ export class WeakPasswordsReportComponent extends BaseWeakPasswordsReportCompone
|
|||||||
}
|
}
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organization = await this.userService.getOrganization(params.organizationId);
|
this.organization = await this.userService.getOrganization(params.organizationId);
|
||||||
this.manageableCiphers = await this.cipherService.getAll();
|
this.manageableCiphers = await this.cipherService.getAll();
|
||||||
await super.ngOnInit();
|
await super.ngOnInit();
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ export class CiphersComponent extends BaseCiphersComponent {
|
|||||||
let filteredCiphers = this.allCiphers;
|
let filteredCiphers = this.allCiphers;
|
||||||
|
|
||||||
if (this.searchText == null || this.searchText.trim().length < 2) {
|
if (this.searchText == null || this.searchText.trim().length < 2) {
|
||||||
this.ciphers = filteredCiphers.filter((c) => {
|
this.ciphers = filteredCiphers.filter(c => {
|
||||||
if (c.isDeleted !== this.deleted) {
|
if (c.isDeleted !== this.deleted) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export class GroupingsComponent extends BaseGroupingsComponent {
|
|||||||
|
|
||||||
const collections = await this.apiService.getCollections(this.organization.id);
|
const collections = await this.apiService.getCollections(this.organization.id);
|
||||||
if (collections != null && collections.data != null && collections.data.length) {
|
if (collections != null && collections.data != null && collections.data.length) {
|
||||||
const collectionDomains = collections.data.map((r) =>
|
const collectionDomains = collections.data.map(r =>
|
||||||
new Collection(new CollectionData(r as CollectionDetailsResponse)));
|
new Collection(new CollectionData(r as CollectionDetailsResponse)));
|
||||||
this.collections = await this.collectionService.decryptMany(collectionDomains);
|
this.collections = await this.collectionService.decryptMany(collectionDomains);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -62,12 +62,12 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
private broadcasterService: BroadcasterService, private ngZone: NgZone) { }
|
private broadcasterService: BroadcasterService, private ngZone: NgZone) { }
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const queryParams = this.route.parent.params.subscribe(async (params) => {
|
const queryParams = this.route.parent.params.subscribe(async params => {
|
||||||
this.organization = await this.userService.getOrganization(params.organizationId);
|
this.organization = await this.userService.getOrganization(params.organizationId);
|
||||||
this.groupingsComponent.organization = this.organization;
|
this.groupingsComponent.organization = this.organization;
|
||||||
this.ciphersComponent.organization = this.organization;
|
this.ciphersComponent.organization = this.organization;
|
||||||
|
|
||||||
const queryParamsSub = this.route.queryParams.subscribe(async (qParams) => {
|
const queryParamsSub = this.route.queryParams.subscribe(async qParams => {
|
||||||
this.ciphersComponent.searchText = this.groupingsComponent.searchText = qParams.search;
|
this.ciphersComponent.searchText = this.groupingsComponent.searchText = qParams.search;
|
||||||
if (!this.organization.canManageAllCollections) {
|
if (!this.organization.canManageAllCollections) {
|
||||||
await this.syncService.fullSync(false);
|
await this.syncService.fullSync(false);
|
||||||
@@ -110,7 +110,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (qParams.viewEvents != null) {
|
if (qParams.viewEvents != null) {
|
||||||
const cipher = this.ciphersComponent.ciphers.filter((c) => c.id === qParams.viewEvents);
|
const cipher = this.ciphersComponent.ciphers.filter(c => c.id === qParams.viewEvents);
|
||||||
if (cipher.length > 0) {
|
if (cipher.length > 0) {
|
||||||
this.viewEvents(cipher[0]);
|
this.viewEvents(cipher[0]);
|
||||||
}
|
}
|
||||||
@@ -235,7 +235,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
|
|
||||||
if (this.organization.canManageAllCollections) {
|
if (this.organization.canManageAllCollections) {
|
||||||
childComponent.collectionIds = cipher.collectionIds;
|
childComponent.collectionIds = cipher.collectionIds;
|
||||||
childComponent.collections = this.groupingsComponent.collections.filter((c) => !c.readOnly);
|
childComponent.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);
|
||||||
}
|
}
|
||||||
childComponent.organization = this.organization;
|
childComponent.organization = this.organization;
|
||||||
childComponent.cipherId = cipher.id;
|
childComponent.cipherId = cipher.id;
|
||||||
@@ -254,7 +254,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
component.organizationId = this.organization.id;
|
component.organizationId = this.organization.id;
|
||||||
component.type = this.type;
|
component.type = this.type;
|
||||||
if (this.organization.canManageAllCollections) {
|
if (this.organization.canManageAllCollections) {
|
||||||
component.collections = this.groupingsComponent.collections.filter((c) => !c.readOnly);
|
component.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);
|
||||||
}
|
}
|
||||||
if (this.collectionId != null) {
|
if (this.collectionId != null) {
|
||||||
component.collectionIds = [this.collectionId];
|
component.collectionIds = [this.collectionId];
|
||||||
@@ -297,7 +297,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
component.cloneMode = true;
|
component.cloneMode = true;
|
||||||
component.organizationId = this.organization.id;
|
component.organizationId = this.organization.id;
|
||||||
if (this.organization.canManageAllCollections) {
|
if (this.organization.canManageAllCollections) {
|
||||||
component.collections = this.groupingsComponent.collections.filter((c) => !c.readOnly);
|
component.collections = this.groupingsComponent.collections.filter(c => !c.readOnly);
|
||||||
}
|
}
|
||||||
// Regardless of Admin state, the collection Ids need to passed manually as they are not assigned value
|
// Regardless of Admin state, the collection Ids need to passed manually as they are not assigned value
|
||||||
// in the add-edit componenet
|
// in the add-edit componenet
|
||||||
|
|||||||
@@ -13,8 +13,8 @@ import { PlatformUtilsService } from 'jslib/abstractions/platformUtils.service';
|
|||||||
|
|
||||||
import { Utils } from 'jslib/misc/utils';
|
import { Utils } from 'jslib/misc/utils';
|
||||||
|
|
||||||
import { SymmetricCryptoKey } from 'jslib/models/domain/symmetricCryptoKey';
|
|
||||||
import { SendAccess } from 'jslib/models/domain/sendAccess';
|
import { SendAccess } from 'jslib/models/domain/sendAccess';
|
||||||
|
import { SymmetricCryptoKey } from 'jslib/models/domain/symmetricCryptoKey';
|
||||||
|
|
||||||
import { SendAccessView } from 'jslib/models/view/sendAccessView';
|
import { SendAccessView } from 'jslib/models/view/sendAccessView';
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ export class AccessComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.route.params.subscribe(async (params) => {
|
this.route.params.subscribe(async params => {
|
||||||
this.id = params.sendId;
|
this.id = params.sendId;
|
||||||
this.key = params.key;
|
this.key = params.key;
|
||||||
if (this.key == null || this.id == null) {
|
if (this.key == null || this.id == null) {
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import {
|
|||||||
|
|
||||||
import { SendView } from 'jslib/models/view/sendView';
|
import { SendView } from 'jslib/models/view/sendView';
|
||||||
|
|
||||||
import { AddEditComponent } from './add-edit.component';
|
|
||||||
import { SendComponent as BaseSendComponent } from 'jslib/angular/components/send/send.component';
|
import { SendComponent as BaseSendComponent } from 'jslib/angular/components/send/send.component';
|
||||||
|
import { AddEditComponent } from './add-edit.component';
|
||||||
|
|
||||||
import { ModalComponent } from '../modal.component';
|
import { ModalComponent } from '../modal.component';
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ export class RouterService {
|
|||||||
constructor(private router: Router, private activatedRoute: ActivatedRoute,
|
constructor(private router: Router, private activatedRoute: ActivatedRoute,
|
||||||
private titleService: Title, i18nService: I18nService) {
|
private titleService: Title, i18nService: I18nService) {
|
||||||
this.currentUrl = this.router.url;
|
this.currentUrl = this.router.url;
|
||||||
router.events.subscribe((event) => {
|
router.events.subscribe(event => {
|
||||||
if (event instanceof NavigationEnd) {
|
if (event instanceof NavigationEnd) {
|
||||||
this.previousUrl = this.currentUrl;
|
this.previousUrl = this.currentUrl;
|
||||||
this.currentUrl = event.url;
|
this.currentUrl = event.url;
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ export class AdjustPaymentComponent {
|
|||||||
async submit() {
|
async submit() {
|
||||||
try {
|
try {
|
||||||
const request = new PaymentRequest();
|
const request = new PaymentRequest();
|
||||||
this.formPromise = this.paymentComponent.createPaymentToken().then((result) => {
|
this.formPromise = this.paymentComponent.createPaymentToken().then(result => {
|
||||||
request.paymentToken = result[0];
|
request.paymentToken = result[0];
|
||||||
request.paymentMethodType = result[1];
|
request.paymentMethodType = result[1];
|
||||||
request.postalCode = this.taxInfoComponent.taxInfo.postalCode;
|
request.postalCode = this.taxInfoComponent.taxInfo.postalCode;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ export class CreateOrganizationComponent implements OnInit {
|
|||||||
constructor(private route: ActivatedRoute) { }
|
constructor(private route: ActivatedRoute) { }
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
const queryParamsSub = this.route.queryParams.subscribe(async (qParams) => {
|
const queryParamsSub = this.route.queryParams.subscribe(async qParams => {
|
||||||
if (qParams.plan === 'families') {
|
if (qParams.plan === 'families') {
|
||||||
this.orgPlansComponent.plan = PlanType.FamiliesAnnually;
|
this.orgPlansComponent.plan = PlanType.FamiliesAnnually;
|
||||||
this.orgPlansComponent.product = ProductType.Families;
|
this.orgPlansComponent.product = ProductType.Families;
|
||||||
|
|||||||
@@ -28,10 +28,10 @@ export class DomainRulesComponent implements OnInit {
|
|||||||
const response = await this.apiService.getSettingsDomains();
|
const response = await this.apiService.getSettingsDomains();
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
if (response.equivalentDomains != null) {
|
if (response.equivalentDomains != null) {
|
||||||
this.custom = response.equivalentDomains.map((d) => d.join(', '));
|
this.custom = response.equivalentDomains.map(d => d.join(', '));
|
||||||
}
|
}
|
||||||
if (response.globalEquivalentDomains != null) {
|
if (response.globalEquivalentDomains != null) {
|
||||||
this.global = response.globalEquivalentDomains.map((d) => {
|
this.global = response.globalEquivalentDomains.map(d => {
|
||||||
return {
|
return {
|
||||||
domains: d.domains.join(', '),
|
domains: d.domains.join(', '),
|
||||||
excluded: d.excluded,
|
excluded: d.excluded,
|
||||||
@@ -60,13 +60,13 @@ export class DomainRulesComponent implements OnInit {
|
|||||||
|
|
||||||
async submit() {
|
async submit() {
|
||||||
const request = new UpdateDomainsRequest();
|
const request = new UpdateDomainsRequest();
|
||||||
request.excludedGlobalEquivalentDomains = this.global.filter((d) => d.excluded)
|
request.excludedGlobalEquivalentDomains = this.global.filter(d => d.excluded)
|
||||||
.map((d) => d.key);
|
.map(d => d.key);
|
||||||
if (request.excludedGlobalEquivalentDomains.length === 0) {
|
if (request.excludedGlobalEquivalentDomains.length === 0) {
|
||||||
request.excludedGlobalEquivalentDomains = null;
|
request.excludedGlobalEquivalentDomains = null;
|
||||||
}
|
}
|
||||||
request.equivalentDomains = this.custom.filter((d) => d != null && d.trim() !== '')
|
request.equivalentDomains = this.custom.filter(d => d != null && d.trim() !== '')
|
||||||
.map((d) => d.split(',').map((d2) => d2.trim()));
|
.map(d => d.split(',').map(d2 => d2.trim()));
|
||||||
if (request.equivalentDomains.length === 0) {
|
if (request.equivalentDomains.length === 0) {
|
||||||
request.equivalentDomains = null;
|
request.equivalentDomains = null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export class EmergencyAccessViewComponent implements OnInit {
|
|||||||
private route: ActivatedRoute, private apiService: ApiService) { }
|
private route: ActivatedRoute, private apiService: ApiService) { }
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.route.params.subscribe((qParams) => {
|
this.route.params.subscribe(qParams => {
|
||||||
if (qParams.id == null) {
|
if (qParams.id == null) {
|
||||||
return this.router.navigate(['settings/emergency-access']);
|
return this.router.navigate(['settings/emergency-access']);
|
||||||
}
|
}
|
||||||
@@ -98,10 +98,10 @@ export class EmergencyAccessViewComponent implements OnInit {
|
|||||||
const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);
|
const oldEncKey = new SymmetricCryptoKey(oldKeyBuffer);
|
||||||
|
|
||||||
const promises: any[] = [];
|
const promises: any[] = [];
|
||||||
ciphers.forEach((cipherResponse) => {
|
ciphers.forEach(cipherResponse => {
|
||||||
const cipherData = new CipherData(cipherResponse);
|
const cipherData = new CipherData(cipherResponse);
|
||||||
const cipher = new Cipher(cipherData);
|
const cipher = new Cipher(cipherData);
|
||||||
promises.push(cipher.decrypt(oldEncKey).then((c) => decCiphers.push(c)));
|
promises.push(cipher.decrypt(oldEncKey).then(c => decCiphers.push(c)));
|
||||||
});
|
});
|
||||||
|
|
||||||
await Promise.all(promises);
|
await Promise.all(promises);
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export class OptionsComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const localeOptions: any[] = [];
|
const localeOptions: any[] = [];
|
||||||
i18nService.supportedTranslationLocales.forEach((locale) => {
|
i18nService.supportedTranslationLocales.forEach(locale => {
|
||||||
let name = locale;
|
let name = locale;
|
||||||
if (i18nService.localeNames.has(locale)) {
|
if (i18nService.localeNames.has(locale)) {
|
||||||
name += (' - ' + i18nService.localeNames.get(locale));
|
name += (' - ' + i18nService.localeNames.get(locale));
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ export class OrganizationPlansComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get selectedPlan() {
|
get selectedPlan() {
|
||||||
return this.plans.find((plan) => plan.type === this.plan);
|
return this.plans.find(plan => plan.type === this.plan);
|
||||||
}
|
}
|
||||||
|
|
||||||
get selectedPlanInterval() {
|
get selectedPlanInterval() {
|
||||||
@@ -96,18 +96,18 @@ export class OrganizationPlansComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get selectableProducts() {
|
get selectableProducts() {
|
||||||
let validPlans = this.plans.filter((plan) => plan.type !== PlanType.Custom);
|
let validPlans = this.plans.filter(plan => plan.type !== PlanType.Custom);
|
||||||
|
|
||||||
if (this.ownedBusiness) {
|
if (this.ownedBusiness) {
|
||||||
validPlans = validPlans.filter((plan) => plan.canBeUsedByBusiness);
|
validPlans = validPlans.filter(plan => plan.canBeUsedByBusiness);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.showFree) {
|
if (!this.showFree) {
|
||||||
validPlans = validPlans.filter((plan) => plan.product !== ProductType.Free);
|
validPlans = validPlans.filter(plan => plan.product !== ProductType.Free);
|
||||||
}
|
}
|
||||||
|
|
||||||
validPlans = validPlans
|
validPlans = validPlans
|
||||||
.filter((plan) => !plan.legacyYear
|
.filter(plan => !plan.legacyYear
|
||||||
&& !plan.disabled
|
&& !plan.disabled
|
||||||
&& (plan.isAnnual || plan.product === this.productTypes.Free));
|
&& (plan.isAnnual || plan.product === this.productTypes.Free));
|
||||||
|
|
||||||
@@ -115,7 +115,7 @@ export class OrganizationPlansComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get selectablePlans() {
|
get selectablePlans() {
|
||||||
return this.plans.filter((plan) => !plan.legacyYear && !plan.disabled && plan.product === this.product);
|
return this.plans.filter(plan => !plan.legacyYear && !plan.disabled && plan.product === this.product);
|
||||||
}
|
}
|
||||||
|
|
||||||
additionalStoragePriceMonthly(selectedPlan: PlanResponse) {
|
additionalStoragePriceMonthly(selectedPlan: PlanResponse) {
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ export class PaymentComponent implements OnInit {
|
|||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
window.document.head.removeChild(this.stripeScript);
|
window.document.head.removeChild(this.stripeScript);
|
||||||
window.setTimeout(() => {
|
window.setTimeout(() => {
|
||||||
Array.from(window.document.querySelectorAll('iframe')).forEach((el) => {
|
Array.from(window.document.querySelectorAll('iframe')).forEach(el => {
|
||||||
if (el.src != null && el.src.indexOf('stripe') > -1) {
|
if (el.src != null && el.src.indexOf('stripe') > -1) {
|
||||||
try {
|
try {
|
||||||
window.document.body.removeChild(el);
|
window.document.body.removeChild(el);
|
||||||
@@ -103,7 +103,7 @@ export class PaymentComponent implements OnInit {
|
|||||||
if (!this.hidePaypal) {
|
if (!this.hidePaypal) {
|
||||||
window.document.head.removeChild(this.btScript);
|
window.document.head.removeChild(this.btScript);
|
||||||
window.setTimeout(() => {
|
window.setTimeout(() => {
|
||||||
Array.from(window.document.head.querySelectorAll('script')).forEach((el) => {
|
Array.from(window.document.head.querySelectorAll('script')).forEach(el => {
|
||||||
if (el.src != null && el.src.indexOf('paypal') > -1) {
|
if (el.src != null && el.src.indexOf('paypal') > -1) {
|
||||||
try {
|
try {
|
||||||
window.document.head.removeChild(el);
|
window.document.head.removeChild(el);
|
||||||
@@ -165,7 +165,7 @@ export class PaymentComponent implements OnInit {
|
|||||||
});
|
});
|
||||||
} else if (this.method === PaymentMethodType.Card || this.method === PaymentMethodType.BankAccount) {
|
} else if (this.method === PaymentMethodType.Card || this.method === PaymentMethodType.BankAccount) {
|
||||||
if (this.method === PaymentMethodType.Card) {
|
if (this.method === PaymentMethodType.Card) {
|
||||||
this.apiService.postSetupPayment().then((clientSecret) =>
|
this.apiService.postSetupPayment().then(clientSecret =>
|
||||||
this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement))
|
this.stripe.handleCardSetup(clientSecret, this.stripeCardNumberElement))
|
||||||
.then((result: any) => {
|
.then((result: any) => {
|
||||||
if (result.error) {
|
if (result.error) {
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ export class PremiumComponent implements OnInit {
|
|||||||
return this.finalizePremium();
|
return this.finalizePremium();
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.formPromise = this.paymentComponent.createPaymentToken().then((result) => {
|
this.formPromise = this.paymentComponent.createPaymentToken().then(result => {
|
||||||
const fd = new FormData();
|
const fd = new FormData();
|
||||||
fd.append('paymentMethodType', result[1].toString());
|
fd.append('paymentMethodType', result[1].toString());
|
||||||
if (result[0] != null) {
|
if (result[0] != null) {
|
||||||
@@ -88,7 +88,7 @@ export class PremiumComponent implements OnInit {
|
|||||||
fd.append('country', this.taxInfoComponent.taxInfo.country);
|
fd.append('country', this.taxInfoComponent.taxInfo.country);
|
||||||
fd.append('postalCode', this.taxInfoComponent.taxInfo.postalCode);
|
fd.append('postalCode', this.taxInfoComponent.taxInfo.postalCode);
|
||||||
return this.apiService.postPremium(fd);
|
return this.apiService.postPremium(fd);
|
||||||
}).then((paymentResponse) => {
|
}).then(paymentResponse => {
|
||||||
if (!paymentResponse.success && paymentResponse.paymentIntentClientSecret != null) {
|
if (!paymentResponse.success && paymentResponse.paymentIntentClientSecret != null) {
|
||||||
return this.paymentComponent.handleStripeCardPayment(paymentResponse.paymentIntentClientSecret,
|
return this.paymentComponent.handleStripeCardPayment(paymentResponse.paymentIntentClientSecret,
|
||||||
() => this.finalizePremium());
|
() => this.finalizePremium());
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ export class TaxInfoComponent {
|
|||||||
constructor(private apiService: ApiService, private route: ActivatedRoute) { }
|
constructor(private apiService: ApiService, private route: ActivatedRoute) { }
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.route.parent.parent.params.subscribe(async (params) => {
|
this.route.parent.parent.params.subscribe(async params => {
|
||||||
this.organizationId = params.organizationId;
|
this.organizationId = params.organizationId;
|
||||||
if (this.organizationId) {
|
if (this.organizationId) {
|
||||||
try {
|
try {
|
||||||
@@ -118,7 +118,7 @@ export class TaxInfoComponent {
|
|||||||
|
|
||||||
submitTaxInfo(): Promise<any> {
|
submitTaxInfo(): Promise<any> {
|
||||||
if (!this.hasChanged()) {
|
if (!this.hasChanged()) {
|
||||||
return new Promise((resolve) => { resolve(); });
|
return new Promise(resolve => { resolve(); });
|
||||||
}
|
}
|
||||||
const request = this.getTaxInfoRequest();
|
const request = this.getTaxInfoRequest();
|
||||||
return this.organizationId ? this.apiService.putOrganizationTaxInfo(this.organizationId,
|
return this.organizationId ? this.apiService.putOrganizationTaxInfo(this.organizationId,
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ export class TwoFactorSetupComponent implements OnInit {
|
|||||||
async load() {
|
async load() {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
const providerList = await this.getTwoFactorProviders();
|
const providerList = await this.getTwoFactorProviders();
|
||||||
providerList.data.forEach((p) => {
|
providerList.data.forEach(p => {
|
||||||
this.providers.forEach((p2) => {
|
this.providers.forEach(p2 => {
|
||||||
if (p.type === p2.type) {
|
if (p.type === p2.type) {
|
||||||
p2.enabled = p.enabled;
|
p2.enabled = p.enabled;
|
||||||
}
|
}
|
||||||
@@ -166,7 +166,7 @@ export class TwoFactorSetupComponent implements OnInit {
|
|||||||
if (!enabled && this.modal != null) {
|
if (!enabled && this.modal != null) {
|
||||||
this.modal.close();
|
this.modal.close();
|
||||||
}
|
}
|
||||||
this.providers.forEach((p) => {
|
this.providers.forEach(p => {
|
||||||
if (p.type === type) {
|
if (p.type === type) {
|
||||||
p.enabled = enabled;
|
p.enabled = enabled;
|
||||||
}
|
}
|
||||||
@@ -175,9 +175,9 @@ export class TwoFactorSetupComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async evaluatePolicies() {
|
private async evaluatePolicies() {
|
||||||
if (this.organizationId == null && this.providers.filter((p) => p.enabled).length === 1) {
|
if (this.organizationId == null && this.providers.filter(p => p.enabled).length === 1) {
|
||||||
const policies = await this.policyService.getAll(PolicyType.TwoFactorAuthentication);
|
const policies = await this.policyService.getAll(PolicyType.TwoFactorAuthentication);
|
||||||
this.showPolicyWarning = policies != null && policies.some((p) => p.enabled);
|
this.showPolicyWarning = policies != null && policies.some(p => p.enabled);
|
||||||
} else {
|
} else {
|
||||||
this.showPolicyWarning = false;
|
this.showPolicyWarning = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -156,7 +156,7 @@ export class TwoFactorU2fComponent extends TwoFactorBaseComponent implements OnI
|
|||||||
this.keysConfiguredCount = 0;
|
this.keysConfiguredCount = 0;
|
||||||
for (let i = 1; i <= 5; i++) {
|
for (let i = 1; i <= 5; i++) {
|
||||||
if (response.keys != null) {
|
if (response.keys != null) {
|
||||||
const key = response.keys.filter((k) => k.id === i);
|
const key = response.keys.filter(k => k.id === i);
|
||||||
if (key.length > 0) {
|
if (key.length > 0) {
|
||||||
this.keysConfiguredCount++;
|
this.keysConfiguredCount++;
|
||||||
this.keys.push({
|
this.keys.push({
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ export class UpdateKeyComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.formPromise = this.makeRequest().then((request) => {
|
this.formPromise = this.makeRequest().then(request => {
|
||||||
return this.apiService.postAccountKey(request);
|
return this.apiService.postAccountKey(request);
|
||||||
});
|
});
|
||||||
await this.formPromise;
|
await this.formPromise;
|
||||||
|
|||||||
@@ -42,11 +42,11 @@ export class ExposedPasswordsReportComponent extends CipherReportComponent imple
|
|||||||
const allCiphers = await this.getAllCiphers();
|
const allCiphers = await this.getAllCiphers();
|
||||||
const exposedPasswordCiphers: CipherView[] = [];
|
const exposedPasswordCiphers: CipherView[] = [];
|
||||||
const promises: Promise<void>[] = [];
|
const promises: Promise<void>[] = [];
|
||||||
allCiphers.forEach((c) => {
|
allCiphers.forEach(c => {
|
||||||
if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {
|
if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const promise = this.auditService.passwordLeaked(c.login.password).then((exposedCount) => {
|
const promise = this.auditService.passwordLeaked(c.login.password).then(exposedCount => {
|
||||||
if (exposedCount > 0) {
|
if (exposedCount > 0) {
|
||||||
exposedPasswordCiphers.push(c);
|
exposedPasswordCiphers.push(c);
|
||||||
this.exposedPasswordMap.set(c.id, exposedCount);
|
this.exposedPasswordMap.set(c.id, exposedCount);
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ export class ImportComponent implements OnInit {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const results = this.featuredImportOptions.concat(this.importOptions).filter((o) => o.id === this.format);
|
const results = this.featuredImportOptions.concat(this.importOptions).filter(o => o.id === this.format);
|
||||||
if (results.length > 0) {
|
if (results.length > 0) {
|
||||||
return this.i18nService.t('instructionsFor', results[0].name);
|
return this.i18nService.t('instructionsFor', results[0].name);
|
||||||
}
|
}
|
||||||
@@ -126,7 +126,7 @@ export class ImportComponent implements OnInit {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const reader = new FileReader();
|
const reader = new FileReader();
|
||||||
reader.readAsText(file, 'utf-8');
|
reader.readAsText(file, 'utf-8');
|
||||||
reader.onload = (evt) => {
|
reader.onload = evt => {
|
||||||
if (this.format === 'lastpasscsv' && file.type === 'text/html') {
|
if (this.format === 'lastpasscsv' && file.type === 'text/html') {
|
||||||
const parser = new DOMParser();
|
const parser = new DOMParser();
|
||||||
const doc = parser.parseFromString((evt.target as any).result, 'text/html');
|
const doc = parser.parseFromString((evt.target as any).result, 'text/html');
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ export class InactiveTwoFactorReportComponent extends CipherReportComponent impl
|
|||||||
const inactive2faCiphers: CipherView[] = [];
|
const inactive2faCiphers: CipherView[] = [];
|
||||||
const promises: Promise<void>[] = [];
|
const promises: Promise<void>[] = [];
|
||||||
const docs = new Map<string, string>();
|
const docs = new Map<string, string>();
|
||||||
allCiphers.forEach((c) => {
|
allCiphers.forEach(c => {
|
||||||
if (c.type !== CipherType.Login || (c.login.totp != null && c.login.totp !== '') || !c.login.hasUris ||
|
if (c.type !== CipherType.Login || (c.login.totp != null && c.login.totp !== '') || !c.login.hasUris ||
|
||||||
c.isDeleted) {
|
c.isDeleted) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ export class ReusedPasswordsReportComponent extends CipherReportComponent implem
|
|||||||
const allCiphers = await this.getAllCiphers();
|
const allCiphers = await this.getAllCiphers();
|
||||||
const ciphersWithPasswords: CipherView[] = [];
|
const ciphersWithPasswords: CipherView[] = [];
|
||||||
this.passwordUseMap = new Map<string, number>();
|
this.passwordUseMap = new Map<string, number>();
|
||||||
allCiphers.forEach((c) => {
|
allCiphers.forEach(c => {
|
||||||
if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {
|
if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -47,7 +47,7 @@ export class ReusedPasswordsReportComponent extends CipherReportComponent implem
|
|||||||
this.passwordUseMap.set(c.login.password, 1);
|
this.passwordUseMap.set(c.login.password, 1);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const reusedPasswordCiphers = ciphersWithPasswords.filter((c) =>
|
const reusedPasswordCiphers = ciphersWithPasswords.filter(c =>
|
||||||
this.passwordUseMap.has(c.login.password) && this.passwordUseMap.get(c.login.password) > 1);
|
this.passwordUseMap.has(c.login.password) && this.passwordUseMap.get(c.login.password) > 1);
|
||||||
this.ciphers = reusedPasswordCiphers;
|
this.ciphers = reusedPasswordCiphers;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,11 +32,11 @@ export class UnsecuredWebsitesReportComponent extends CipherReportComponent impl
|
|||||||
|
|
||||||
async setCiphers() {
|
async setCiphers() {
|
||||||
const allCiphers = await this.getAllCiphers();
|
const allCiphers = await this.getAllCiphers();
|
||||||
const unsecuredCiphers = allCiphers.filter((c) => {
|
const unsecuredCiphers = allCiphers.filter(c => {
|
||||||
if (c.type !== CipherType.Login || !c.login.hasUris || c.isDeleted) {
|
if (c.type !== CipherType.Login || !c.login.hasUris || c.isDeleted) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return c.login.uris.some((u) => u.uri != null && u.uri.indexOf('http://') === 0);
|
return c.login.uris.some(u => u.uri != null && u.uri.indexOf('http://') === 0);
|
||||||
});
|
});
|
||||||
this.ciphers = unsecuredCiphers;
|
this.ciphers = unsecuredCiphers;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export class WeakPasswordsReportComponent extends CipherReportComponent implemen
|
|||||||
async setCiphers() {
|
async setCiphers() {
|
||||||
const allCiphers = await this.getAllCiphers();
|
const allCiphers = await this.getAllCiphers();
|
||||||
const weakPasswordCiphers: CipherView[] = [];
|
const weakPasswordCiphers: CipherView[] = [];
|
||||||
allCiphers.forEach((c) => {
|
allCiphers.forEach(c => {
|
||||||
if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {
|
if (c.type !== CipherType.Login || c.login.password == null || c.login.password === '' || c.isDeleted) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -52,10 +52,10 @@ export class WeakPasswordsReportComponent extends CipherReportComponent implemen
|
|||||||
if (atPosition > -1) {
|
if (atPosition > -1) {
|
||||||
userInput = userInput.concat(
|
userInput = userInput.concat(
|
||||||
c.login.username.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/))
|
c.login.username.substr(0, atPosition).trim().toLowerCase().split(/[^A-Za-z0-9]/))
|
||||||
.filter((i) => i.length >= 3);
|
.filter(i => i.length >= 3);
|
||||||
} else {
|
} else {
|
||||||
userInput = c.login.username.trim().toLowerCase().split(/[^A-Za-z0-9]/)
|
userInput = c.login.username.trim().toLowerCase().split(/[^A-Za-z0-9]/)
|
||||||
.filter((i) => i.length >= 3);
|
.filter(i => i.length >= 3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const result = this.passwordGenerationService.passwordStrength(c.login.password,
|
const result = this.passwordGenerationService.passwordStrength(c.login.password,
|
||||||
|
|||||||
@@ -41,10 +41,10 @@ export class BulkShareComponent implements OnInit {
|
|||||||
private collectionService: CollectionService, private userService: UserService) { }
|
private collectionService: CollectionService, private userService: UserService) { }
|
||||||
|
|
||||||
async ngOnInit() {
|
async ngOnInit() {
|
||||||
this.shareableCiphers = this.ciphers.filter((c) => !c.hasOldAttachments && c.organizationId == null);
|
this.shareableCiphers = this.ciphers.filter(c => !c.hasOldAttachments && c.organizationId == null);
|
||||||
this.nonShareableCount = this.ciphers.length - this.shareableCiphers.length;
|
this.nonShareableCount = this.ciphers.length - this.shareableCiphers.length;
|
||||||
const allCollections = await this.collectionService.getAllDecrypted();
|
const allCollections = await this.collectionService.getAllDecrypted();
|
||||||
this.writeableCollections = allCollections.filter((c) => !c.readOnly);
|
this.writeableCollections = allCollections.filter(c => !c.readOnly);
|
||||||
this.organizations = await this.userService.getAllOrganizations();
|
this.organizations = await this.userService.getAllOrganizations();
|
||||||
if (this.organizationId == null && this.organizations.length > 0) {
|
if (this.organizationId == null && this.organizations.length > 0) {
|
||||||
this.organizationId = this.organizations[0].id;
|
this.organizationId = this.organizations[0].id;
|
||||||
@@ -61,12 +61,12 @@ export class BulkShareComponent implements OnInit {
|
|||||||
if (this.organizationId == null || this.writeableCollections.length === 0) {
|
if (this.organizationId == null || this.writeableCollections.length === 0) {
|
||||||
this.collections = [];
|
this.collections = [];
|
||||||
} else {
|
} else {
|
||||||
this.collections = this.writeableCollections.filter((c) => c.organizationId === this.organizationId);
|
this.collections = this.writeableCollections.filter(c => c.organizationId === this.organizationId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async submit() {
|
async submit() {
|
||||||
const checkedCollectionIds = this.collections.filter((c) => (c as any).checked).map((c) => c.id);
|
const checkedCollectionIds = this.collections.filter(c => (c as any).checked).map(c => c.id);
|
||||||
try {
|
try {
|
||||||
this.formPromise = this.cipherService.shareManyWithServer(this.shareableCiphers, this.organizationId,
|
this.formPromise = this.cipherService.shareManyWithServer(this.shareableCiphers, this.organizationId,
|
||||||
checkedCollectionIds);
|
checkedCollectionIds);
|
||||||
@@ -83,7 +83,7 @@ export class BulkShareComponent implements OnInit {
|
|||||||
|
|
||||||
selectAll(select: boolean) {
|
selectAll(select: boolean) {
|
||||||
const collections = select ? this.collections : this.writeableCollections;
|
const collections = select ? this.collections : this.writeableCollections;
|
||||||
collections.forEach((c) => this.check(c, select));
|
collections.forEach(c => this.check(c, select));
|
||||||
}
|
}
|
||||||
|
|
||||||
get canSave() {
|
get canSave() {
|
||||||
|
|||||||
@@ -163,11 +163,11 @@ export class CiphersComponent extends BaseCiphersComponent implements OnDestroy
|
|||||||
if (this.ciphers == null) {
|
if (this.ciphers == null) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
return this.ciphers.filter((c) => !!(c as any).checked);
|
return this.ciphers.filter(c => !!(c as any).checked);
|
||||||
}
|
}
|
||||||
|
|
||||||
getSelectedIds(): string[] {
|
getSelectedIds(): string[] {
|
||||||
return this.getSelected().map((c) => c.id);
|
return this.getSelected().map(c => c.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
displayTotpCopyButton(cipher: CipherView) {
|
displayTotpCopyButton(cipher: CipherView) {
|
||||||
|
|||||||
@@ -31,6 +31,6 @@ export class CollectionsComponent extends BaseCollectionsComponent implements On
|
|||||||
}
|
}
|
||||||
|
|
||||||
selectAll(select: boolean) {
|
selectAll(select: boolean) {
|
||||||
this.collections.forEach((c) => this.check(c, select));
|
this.collections.forEach(c => this.check(c, select));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,6 @@ export class ShareComponent extends BaseShareComponent implements OnDestroy {
|
|||||||
|
|
||||||
selectAll(select: boolean) {
|
selectAll(select: boolean) {
|
||||||
const collections = select ? this.collections : this.writeableCollections;
|
const collections = select ? this.collections : this.writeableCollections;
|
||||||
collections.forEach((c) => this.check(c, select));
|
collections.forEach(c => this.check(c, select));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
this.showVerifyEmail = !(await this.tokenService.getEmailVerified());
|
this.showVerifyEmail = !(await this.tokenService.getEmailVerified());
|
||||||
this.showBrowserOutdated = window.navigator.userAgent.indexOf('MSIE') !== -1;
|
this.showBrowserOutdated = window.navigator.userAgent.indexOf('MSIE') !== -1;
|
||||||
|
|
||||||
const queryParamsSub = this.route.queryParams.subscribe(async (params) => {
|
const queryParamsSub = this.route.queryParams.subscribe(async params => {
|
||||||
await this.syncService.fullSync(false);
|
await this.syncService.fullSync(false);
|
||||||
|
|
||||||
this.showUpdateKey = !(await this.cryptoService.hasEncKey());
|
this.showUpdateKey = !(await this.cryptoService.hasEncKey());
|
||||||
@@ -158,7 +158,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
async filterFavorites() {
|
async filterFavorites() {
|
||||||
this.ciphersComponent.showAddNew = true;
|
this.ciphersComponent.showAddNew = true;
|
||||||
this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchFavorites');
|
this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchFavorites');
|
||||||
await this.ciphersComponent.reload((c) => c.favorite);
|
await this.ciphersComponent.reload(c => c.favorite);
|
||||||
this.clearFilters();
|
this.clearFilters();
|
||||||
this.favorites = true;
|
this.favorites = true;
|
||||||
this.go();
|
this.go();
|
||||||
@@ -177,7 +177,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
async filterCipherType(type: CipherType) {
|
async filterCipherType(type: CipherType) {
|
||||||
this.ciphersComponent.showAddNew = true;
|
this.ciphersComponent.showAddNew = true;
|
||||||
this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchType');
|
this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchType');
|
||||||
await this.ciphersComponent.reload((c) => c.type === type);
|
await this.ciphersComponent.reload(c => c.type === type);
|
||||||
this.clearFilters();
|
this.clearFilters();
|
||||||
this.type = type;
|
this.type = type;
|
||||||
this.go();
|
this.go();
|
||||||
@@ -187,7 +187,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
this.ciphersComponent.showAddNew = true;
|
this.ciphersComponent.showAddNew = true;
|
||||||
folderId = folderId === 'none' ? null : folderId;
|
folderId = folderId === 'none' ? null : folderId;
|
||||||
this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchFolder');
|
this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchFolder');
|
||||||
await this.ciphersComponent.reload((c) => c.folderId === folderId);
|
await this.ciphersComponent.reload(c => c.folderId === folderId);
|
||||||
this.clearFilters();
|
this.clearFilters();
|
||||||
this.folderId = folderId == null ? 'none' : folderId;
|
this.folderId = folderId == null ? 'none' : folderId;
|
||||||
this.go();
|
this.go();
|
||||||
@@ -196,7 +196,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
async filterCollection(collectionId: string) {
|
async filterCollection(collectionId: string) {
|
||||||
this.ciphersComponent.showAddNew = true;
|
this.ciphersComponent.showAddNew = true;
|
||||||
this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchCollection');
|
this.groupingsComponent.searchPlaceholder = this.i18nService.t('searchCollection');
|
||||||
await this.ciphersComponent.reload((c) => c.collectionIds != null &&
|
await this.ciphersComponent.reload(c => c.collectionIds != null &&
|
||||||
c.collectionIds.indexOf(collectionId) > -1);
|
c.collectionIds.indexOf(collectionId) > -1);
|
||||||
this.clearFilters();
|
this.clearFilters();
|
||||||
this.collectionId = collectionId;
|
this.collectionId = collectionId;
|
||||||
@@ -337,7 +337,7 @@ export class VaultComponent implements OnInit, OnDestroy {
|
|||||||
component.type = this.type;
|
component.type = this.type;
|
||||||
component.folderId = this.folderId === 'none' ? null : this.folderId;
|
component.folderId = this.folderId === 'none' ? null : this.folderId;
|
||||||
if (this.collectionId != null) {
|
if (this.collectionId != null) {
|
||||||
const collection = this.groupingsComponent.collections.filter((c) => c.id === this.collectionId);
|
const collection = this.groupingsComponent.collections.filter(c => c.id === this.collectionId);
|
||||||
if (collection.length > 0) {
|
if (collection.length > 0) {
|
||||||
component.organizationId = collection[0].organizationId;
|
component.organizationId = collection[0].organizationId;
|
||||||
component.collectionIds = [this.collectionId];
|
component.collectionIds = [this.collectionId];
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
// tslint:disable-next-line
|
// tslint:disable-next-line
|
||||||
require('./duo.scss');
|
require('./duo.scss');
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', (event) => {
|
document.addEventListener('DOMContentLoaded', event => {
|
||||||
const frameElement = document.createElement('iframe');
|
const frameElement = document.createElement('iframe');
|
||||||
frameElement.setAttribute('id', 'duo_iframe');
|
frameElement.setAttribute('id', 'duo_iframe');
|
||||||
setFrameHeight();
|
setFrameHeight();
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// tslint:disable-next-line
|
// tslint:disable-next-line
|
||||||
require('./sso.scss');
|
require('./sso.scss');
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', (event) => {
|
document.addEventListener('DOMContentLoaded', event => {
|
||||||
const code = getQsParam('code');
|
const code = getQsParam('code');
|
||||||
const state = getQsParam('state');
|
const state = getQsParam('state');
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,10 @@
|
|||||||
"singleline": "never"
|
"singleline": "never"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"arrow-parens": false
|
"ordered-imports": true,
|
||||||
|
"arrow-parens": [
|
||||||
|
true,
|
||||||
|
"ban-single-arg-parens"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user