mirror of
https://github.com/bitwarden/web
synced 2025-12-10 13:23:15 +00:00
Compare commits
10 Commits
feature/cm
...
license-do
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db22f5dc92 | ||
|
|
bb8e982767 | ||
|
|
caad11c571 | ||
|
|
b73449159d | ||
|
|
bf48434d0f | ||
|
|
b6d2d5bf71 | ||
|
|
dfd62c7c3a | ||
|
|
41d3bd8cf2 | ||
|
|
3292d119fe | ||
|
|
b8de92435b |
4
.github/workflows/version-bump.yml
vendored
4
.github/workflows/version-bump.yml
vendored
@@ -27,13 +27,13 @@ jobs:
|
|||||||
ref: version_bump_${{ github.event.inputs.version_number }}
|
ref: version_bump_${{ github.event.inputs.version_number }}
|
||||||
|
|
||||||
- name: Bump Version - package.json
|
- name: Bump Version - package.json
|
||||||
uses: bitwarden/gh-actions/version-bump@0c263b3963211ccaf5804313c3b3a0bcc52d4b19
|
uses: bitwarden/gh-actions/version-bump@03ad9a873c39cdc95dd8d77dbbda67f84db43945
|
||||||
with:
|
with:
|
||||||
version: ${{ github.event.inputs.version_number }}
|
version: ${{ github.event.inputs.version_number }}
|
||||||
file_path: "./package.json"
|
file_path: "./package.json"
|
||||||
|
|
||||||
- name: Bump Version - package-lock.json
|
- name: Bump Version - package-lock.json
|
||||||
uses: bitwarden/gh-actions/version-bump@0c263b3963211ccaf5804313c3b3a0bcc52d4b19
|
uses: bitwarden/gh-actions/version-bump@03ad9a873c39cdc95dd8d77dbbda67f84db43945
|
||||||
with:
|
with:
|
||||||
version: ${{ github.event.inputs.version_number }}
|
version: ${{ github.event.inputs.version_number }}
|
||||||
file_path: "./package-lock.json"
|
file_path: "./package-lock.json"
|
||||||
|
|||||||
2
jslib
2
jslib
Submodule jslib updated: e4cd0af2f9...54c6a4b3c3
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,11 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "bitwarden-web",
|
"name": "@bitwarden/web-vault",
|
||||||
"version": "2.25.1",
|
"version": "2.25.1",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "bitwarden-web",
|
"name": "@bitwarden/web-vault",
|
||||||
"version": "2.25.1",
|
"version": "2.25.1",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "bitwarden-web",
|
"name": "@bitwarden/web-vault",
|
||||||
"version": "2.25.1",
|
"version": "2.25.1",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"repository": "https://github.com/bitwarden/web",
|
"repository": "https://github.com/bitwarden/web",
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import { OrganizationService } from "jslib-common/abstractions/organization.serv
|
|||||||
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
|
import { PlatformUtilsService } from "jslib-common/abstractions/platformUtils.service";
|
||||||
|
|
||||||
import { PlanType } from "jslib-common/enums/planType";
|
import { PlanType } from "jslib-common/enums/planType";
|
||||||
|
import { StateService } from "jslib-common/abstractions/state.service";
|
||||||
|
import { ProductType } from "jslib-common/enums/productType";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: "app-org-subscription",
|
selector: "app-org-subscription",
|
||||||
@@ -27,6 +29,7 @@ export class OrganizationSubscriptionComponent implements OnInit {
|
|||||||
adjustStorageAdd = true;
|
adjustStorageAdd = true;
|
||||||
showAdjustStorage = false;
|
showAdjustStorage = false;
|
||||||
showUpdateLicense = false;
|
showUpdateLicense = false;
|
||||||
|
canDownloadLicense = false;
|
||||||
showDownloadLicense = false;
|
showDownloadLicense = false;
|
||||||
showChangePlan = false;
|
showChangePlan = false;
|
||||||
sub: OrganizationSubscriptionResponse;
|
sub: OrganizationSubscriptionResponse;
|
||||||
@@ -42,6 +45,7 @@ export class OrganizationSubscriptionComponent implements OnInit {
|
|||||||
private apiService: ApiService,
|
private apiService: ApiService,
|
||||||
private platformUtilsService: PlatformUtilsService,
|
private platformUtilsService: PlatformUtilsService,
|
||||||
private i18nService: I18nService,
|
private i18nService: I18nService,
|
||||||
|
private stateService: StateService,
|
||||||
private messagingService: MessagingService,
|
private messagingService: MessagingService,
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
private organizationService: OrganizationService,
|
private organizationService: OrganizationService,
|
||||||
@@ -66,6 +70,13 @@ export class OrganizationSubscriptionComponent implements OnInit {
|
|||||||
this.loading = true;
|
this.loading = true;
|
||||||
this.userOrg = await this.organizationService.get(this.organizationId);
|
this.userOrg = await this.organizationService.get(this.organizationId);
|
||||||
this.sub = await this.apiService.getOrganizationSubscription(this.organizationId);
|
this.sub = await this.apiService.getOrganizationSubscription(this.organizationId);
|
||||||
|
|
||||||
|
const orgs = await this.stateService.getOrganizations();
|
||||||
|
const isAllowedOrgType = Object.values(orgs).some(org => org.planProductType === (ProductType.Enterprise | ProductType.Families));
|
||||||
|
const canDownload = (this.sub.planType !== PlanType.Free && this.subscription == null) ||
|
||||||
|
(this.subscription != null && !this.subscription.cancelled);
|
||||||
|
this.canDownloadLicense = canDownload && isAllowedOrgType;
|
||||||
|
|
||||||
this.loading = false;
|
this.loading = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -211,7 +222,15 @@ export class OrganizationSubscriptionComponent implements OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get subscription() {
|
get subscription() {
|
||||||
return this.sub != null ? this.sub.subscription : null;
|
const now = new Date();
|
||||||
|
const fiveDays = now.setDate(now.getDate() + 5);
|
||||||
|
if(this.sub === null) return null;
|
||||||
|
if(this.sub.subscription == null) {
|
||||||
|
this.sub.subscription = ({ cancelled: true, cancelAtEndDate: (fiveDays as any)} as any);
|
||||||
|
this.sub.subscription.items = new Array({sponsoredSubscriptionItem: false} as any);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.sub.subscription;
|
||||||
}
|
}
|
||||||
|
|
||||||
get nextInvoice() {
|
get nextInvoice() {
|
||||||
@@ -257,13 +276,6 @@ export class OrganizationSubscriptionComponent implements OnInit {
|
|||||||
return this.sub.subscription?.items.some((i) => i.sponsoredSubscriptionItem);
|
return this.sub.subscription?.items.some((i) => i.sponsoredSubscriptionItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
get canDownloadLicense() {
|
|
||||||
return (
|
|
||||||
(this.sub.planType !== PlanType.Free && this.subscription == null) ||
|
|
||||||
(this.subscription != null && !this.subscription.cancelled)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
get subscriptionDesc() {
|
get subscriptionDesc() {
|
||||||
if (this.sub.planType === PlanType.Free) {
|
if (this.sub.planType === PlanType.Free) {
|
||||||
return this.i18nService.t("subscriptionFreePlan", this.sub.seats.toString());
|
return this.i18nService.t("subscriptionFreePlan", this.sub.seats.toString());
|
||||||
|
|||||||
@@ -52,6 +52,10 @@ import { VaultTimeoutService as VaultTimeoutServiceAbstraction } from "jslib-com
|
|||||||
|
|
||||||
import { ThemeType } from "jslib-common/enums/themeType";
|
import { ThemeType } from "jslib-common/enums/themeType";
|
||||||
|
|
||||||
|
import { AccountFactory } from "jslib-common/models/domain/account";
|
||||||
|
|
||||||
|
import { Account } from "../../models/account";
|
||||||
|
|
||||||
export function initFactory(
|
export function initFactory(
|
||||||
window: Window,
|
window: Window,
|
||||||
storageService: StorageServiceAbstraction,
|
storageService: StorageServiceAbstraction,
|
||||||
@@ -178,7 +182,19 @@ export function initFactory(
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
provide: StateServiceAbstraction,
|
provide: StateServiceAbstraction,
|
||||||
useClass: StateService,
|
useFactory: (
|
||||||
|
storageService: StorageServiceAbstraction,
|
||||||
|
secureStorageService: StorageServiceAbstraction,
|
||||||
|
logService: LogService,
|
||||||
|
stateMigrationService: StateMigrationServiceAbstraction
|
||||||
|
) =>
|
||||||
|
new StateService(
|
||||||
|
storageService,
|
||||||
|
secureStorageService,
|
||||||
|
logService,
|
||||||
|
stateMigrationService,
|
||||||
|
new AccountFactory(Account)
|
||||||
|
),
|
||||||
deps: [
|
deps: [
|
||||||
StorageServiceAbstraction,
|
StorageServiceAbstraction,
|
||||||
"SECURE_STORAGE",
|
"SECURE_STORAGE",
|
||||||
|
|||||||
@@ -587,6 +587,7 @@
|
|||||||
id="idEmail"
|
id="idEmail"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
type="text"
|
type="text"
|
||||||
|
inputmode="email"
|
||||||
name="Identity.Email"
|
name="Identity.Email"
|
||||||
[(ngModel)]="cipher.identity.email"
|
[(ngModel)]="cipher.identity.email"
|
||||||
appInputVerbatim
|
appInputVerbatim
|
||||||
@@ -599,6 +600,7 @@
|
|||||||
id="idPhone"
|
id="idPhone"
|
||||||
class="form-control"
|
class="form-control"
|
||||||
type="text"
|
type="text"
|
||||||
|
inputmode="tel"
|
||||||
name="Identity.Phone"
|
name="Identity.Phone"
|
||||||
[(ngModel)]="cipher.identity.phone"
|
[(ngModel)]="cipher.identity.phone"
|
||||||
[disabled]="cipher.isDeleted || viewOnly"
|
[disabled]="cipher.isDeleted || viewOnly"
|
||||||
|
|||||||
@@ -3445,7 +3445,7 @@
|
|||||||
"message": "Αποσύνδεση SSO"
|
"message": "Αποσύνδεση SSO"
|
||||||
},
|
},
|
||||||
"unlinkSsoConfirmation": {
|
"unlinkSsoConfirmation": {
|
||||||
"message": "Are you sure you want to unlink SSO for this organization?"
|
"message": "Είστε βέβαιοι ότι θέλετε να αποσυνδέσετε το SSO για αυτόν τον οργανισμό;"
|
||||||
},
|
},
|
||||||
"linkSso": {
|
"linkSso": {
|
||||||
"message": "Σύνδεσμος SSO"
|
"message": "Σύνδεσμος SSO"
|
||||||
|
|||||||
@@ -3164,7 +3164,7 @@
|
|||||||
"description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing."
|
"description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing."
|
||||||
},
|
},
|
||||||
"dontAskFingerprintAgain": {
|
"dontAskFingerprintAgain": {
|
||||||
"message": "Don't ask to verify fingerprint phrase again",
|
"message": "Never prompt to verify fingerprint phrases for invited users (Not recommended)",
|
||||||
"description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing."
|
"description": "A 'fingerprint phrase' is a unique word phrase (similar to a passphrase) that a user can use to authenticate their public key with another user, for the purposes of sharing."
|
||||||
},
|
},
|
||||||
"free": {
|
"free": {
|
||||||
|
|||||||
@@ -2078,7 +2078,7 @@
|
|||||||
"message": "Samodzielnie hostowane środowisko (opcjonalnie)"
|
"message": "Samodzielnie hostowane środowisko (opcjonalnie)"
|
||||||
},
|
},
|
||||||
"usersGetPremium": {
|
"usersGetPremium": {
|
||||||
"message": "Użytkownicy uzyskują dostęp do funkcji Premium"
|
"message": "Użytkownicy uzyskują dostęp do kont Premium"
|
||||||
},
|
},
|
||||||
"controlAccessWithGroups": {
|
"controlAccessWithGroups": {
|
||||||
"message": "Kontroluj dostęp z użyciem grup użytkowników"
|
"message": "Kontroluj dostęp z użyciem grup użytkowników"
|
||||||
@@ -4504,7 +4504,7 @@
|
|||||||
"message": "Plan Bitwarden Families zawiera"
|
"message": "Plan Bitwarden Families zawiera"
|
||||||
},
|
},
|
||||||
"sponsoredFamiliesPremiumAccess": {
|
"sponsoredFamiliesPremiumAccess": {
|
||||||
"message": "Dostęp premium dla maksymalnie 6 użytkowników"
|
"message": "Konto Premium dla maksymalnie 6 użytkowników"
|
||||||
},
|
},
|
||||||
"sponsoredFamiliesSharedCollections": {
|
"sponsoredFamiliesSharedCollections": {
|
||||||
"message": "Udostępnione kolekcje dla sekretów rodziny"
|
"message": "Udostępnione kolekcje dla sekretów rodziny"
|
||||||
@@ -4597,7 +4597,7 @@
|
|||||||
"message": "Utworzono sponsorowanie"
|
"message": "Utworzono sponsorowanie"
|
||||||
},
|
},
|
||||||
"revoke": {
|
"revoke": {
|
||||||
"message": "Odwołaj"
|
"message": "Unieważnij"
|
||||||
},
|
},
|
||||||
"emailSent": {
|
"emailSent": {
|
||||||
"message": "Wiadomość została wysłana"
|
"message": "Wiadomość została wysłana"
|
||||||
|
|||||||
@@ -1,13 +1,6 @@
|
|||||||
{
|
{
|
||||||
|
"extends": "./jslib/shared/tsconfig",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"moduleResolution": "node",
|
|
||||||
"noImplicitAny": true,
|
|
||||||
"emitDecoratorMetadata": true,
|
|
||||||
"experimentalDecorators": true,
|
|
||||||
"module": "commonjs",
|
|
||||||
"target": "es2015",
|
|
||||||
"lib": ["es5", "es6", "dom"],
|
|
||||||
"sourceMap": true,
|
|
||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"tldjs": ["jslib/common/src/misc/tldjs.noop"],
|
"tldjs": ["jslib/common/src/misc/tldjs.noop"],
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ const moduleRules = [
|
|||||||
test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
|
test: /.(ttf|otf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
|
||||||
exclude: /loading(|-white).svg/,
|
exclude: /loading(|-white).svg/,
|
||||||
generator: {
|
generator: {
|
||||||
filename: "fonts/[name].[ext]",
|
filename: "fonts/[name][ext]",
|
||||||
},
|
},
|
||||||
type: "asset/resource",
|
type: "asset/resource",
|
||||||
},
|
},
|
||||||
@@ -39,7 +39,7 @@ const moduleRules = [
|
|||||||
test: /\.(jpe?g|png|gif|svg|webp|avif)$/i,
|
test: /\.(jpe?g|png|gif|svg|webp|avif)$/i,
|
||||||
exclude: /.*(fontawesome-webfont)\.svg/,
|
exclude: /.*(fontawesome-webfont)\.svg/,
|
||||||
generator: {
|
generator: {
|
||||||
filename: "images/[name].[ext]",
|
filename: "images/[name][ext]",
|
||||||
},
|
},
|
||||||
type: "asset/resource",
|
type: "asset/resource",
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user