mirror of
https://github.com/bitwarden/server
synced 2026-02-24 00:23:05 +00:00
Bring our QA Setup data files into the Seeder as presets (#7046)
* Importing test fixtures from test repo into the Seeder * Needed to ensure that we assigned permission to collections; not just made them.
This commit is contained in:
@@ -13,13 +13,12 @@ Hand-crafted JSON fixtures for Bitwarden Seeder test data.
|
||||
```
|
||||
Seeds/
|
||||
├── fixtures/ Your seed data goes here
|
||||
│ ├── ciphers/ Vault items (logins, cards, identities, notes)
|
||||
│ ├── ciphers/ Vault items
|
||||
│ ├── organizations/ Organization definitions
|
||||
│ ├── rosters/ Users, groups, collections, permissions
|
||||
│ └── presets/ Complete seeding scenarios
|
||||
├── schemas/ JSON Schema validation (auto-checked by editors)
|
||||
├── templates/ Starter files - copy these
|
||||
│ └── CONTRIBUTING.md Detailed guide for contributors
|
||||
└── README.md This file
|
||||
```
|
||||
|
||||
@@ -27,8 +26,6 @@ Seeds/
|
||||
|
||||
### Ciphers
|
||||
|
||||
Vault items - logins, cards, identities, secure notes.
|
||||
|
||||
| Type | Required Object | Description |
|
||||
| ------------ | --------------- | -------------------------- |
|
||||
| `login` | `login` | Website credentials + URIs |
|
||||
@@ -89,9 +86,39 @@ dotnet build util/Seeder/Seeder.csproj
|
||||
| User refs | firstName.lastName | `jane.doe` |
|
||||
| Org domains | Realistic or .test | `acme.com`, `test.local` |
|
||||
|
||||
## QA Test Fixture Migration Matrix
|
||||
|
||||
These Seeds consolidate test data previously found across the `bitwarden/test` repo.
|
||||
The table below maps existing QA fixtures to their Seeder equivalents.
|
||||
|
||||
| QA Source (`test/Bitwarden.Web.Tests/TestData/SetupData/`) | Used By | Seeder Preset | Org Fixture | Roster Fixture | Cipher Fixture |
|
||||
| ---------------------------------------------------------- | --------------------------------- | ----------------------------------- | --------------------------- | ------------------------ | ------------------------ |
|
||||
| `CollectionPermissionsOrg.json` | Web, Extension | `collection-permissions-enterprise` | `qa-collection-permissions` | `collection-permissions` | `collection-permissions` |
|
||||
| `EnterpriseOrg.json` | Web, Extension, Android, iOS, CLI | `enterprise-basic` | `qa-enterprise` | `enterprise-basic` | `enterprise-basic` |
|
||||
| `SsoOrg.json` | Web | `sso-enterprise` | `qa-sso-org` | `sso-basic` | `sso-vault` |
|
||||
| `TDEOrg.json` | Web, Extension, Android, iOS | `tde-enterprise` | `qa-tde-org` | `tde-basic` | `tde-vault` |
|
||||
| _(Confluence: Policy Org guide)_ | QA manual setup | `policy-enterprise` | `qa-policy-org` | `policy-org` | — |
|
||||
|
||||
### Not Yet Migrated
|
||||
|
||||
| QA Source | Used By | Status |
|
||||
| --------------------- | ---------------------------- | --------------------------------------------------------------------- |
|
||||
| `FreeAccount.json` | All 7 platforms | Planned — `free-personal-vault` preset (separate PR due to file size) |
|
||||
| `FamiliesOrg.json` | Web, Extension | Planned — `families-basic` preset |
|
||||
| `PremiumAccount.json` | Web, Extension, Android, iOS | Planned — `premium-personal-vault` preset |
|
||||
| `SecretsManager.json` | Web | Planned — `secrets-manager-enterprise` preset |
|
||||
| `FreeOrg.json` | Web | Planned — `free-org-basic` preset |
|
||||
|
||||
### Additional Sources
|
||||
|
||||
| Source | Location | Status |
|
||||
| ---------------------------------- | ------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
|
||||
| `bw_importer.py` | `github.com/bitwarden/qa-tools` | Superseded by generation-based presets (`"ciphers": {"count": N}`) |
|
||||
| `mass_org_manager.py` | `github.com/bitwarden/qa-tools` | Superseded by roster fixtures with groups/members/collections |
|
||||
| Admin Console Testing Setup guides | Confluence QA space | Codified as `collection-permissions-enterprise`, `policy-enterprise`, `sso-enterprise`, `tde-enterprise` presets |
|
||||
|
||||
## Security
|
||||
|
||||
- Test password: See `UserSeeder.DefaultPassword` constant
|
||||
- Use fictional names/addresses
|
||||
- Never commit real passwords or PII
|
||||
- Never seed production databases
|
||||
|
||||
155
util/Seeder/Seeds/fixtures/ciphers/collection-permissions.json
Normal file
155
util/Seeder/Seeds/fixtures/ciphers/collection-permissions.json
Normal file
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"$schema": "../../schemas/cipher.schema.json",
|
||||
"items": [
|
||||
{
|
||||
"type": "login",
|
||||
"name": "View-And-Manage-Login",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123",
|
||||
"uris": [
|
||||
{ "uri": "bitwarden.com" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "View-Items-Login-Delete",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123",
|
||||
"uris": [
|
||||
{ "uri": "bitwarden.com" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Edit-Items-Login-Delete",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123",
|
||||
"uris": [
|
||||
{ "uri": "bitwarden.com" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Edit-Items-Hidden-Passwords-Login-Delete",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123",
|
||||
"uris": [
|
||||
{ "uri": "bitwarden.com" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "View-Items-Hidden-Passwords-Login-Delete",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123",
|
||||
"uris": [
|
||||
{ "uri": "bitwarden.com" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Manage-Login",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123",
|
||||
"uris": [
|
||||
{ "uri": "bitwarden.com" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Edit-Items-Hidden-Passwords-Login",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123",
|
||||
"uris": [
|
||||
{ "uri": "bitwarden.com" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Edit-Items-Login",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123",
|
||||
"uris": [
|
||||
{ "uri": "bitwarden.com" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "View-Items-Login",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123",
|
||||
"uris": [
|
||||
{ "uri": "bitwarden.com" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "View-Items-Hidden-Passwords-Login",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123",
|
||||
"uris": [
|
||||
{ "uri": "bitwarden.com" }
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
179
util/Seeder/Seeds/fixtures/ciphers/enterprise-basic.json
Normal file
179
util/Seeder/Seeds/fixtures/ciphers/enterprise-basic.json
Normal file
@@ -0,0 +1,179 @@
|
||||
{
|
||||
"$schema": "../../schemas/cipher.schema.json",
|
||||
"items": [
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-997761-2",
|
||||
"login": {
|
||||
"username": "test",
|
||||
"password": "123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1793363",
|
||||
"login": {
|
||||
"username": "test",
|
||||
"password": "123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1867254-1",
|
||||
"reprompt": 1,
|
||||
"login": {
|
||||
"username": "1867254 Username"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-997761-1",
|
||||
"login": {
|
||||
"username": "test",
|
||||
"password": "123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-19620",
|
||||
"login": {
|
||||
"username": "19620 Username"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1793362",
|
||||
"login": {
|
||||
"username": "test",
|
||||
"password": "123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "secureNote",
|
||||
"name": "test item"
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-317432",
|
||||
"login": {
|
||||
"username": "test",
|
||||
"password": "123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1867254-2",
|
||||
"login": {
|
||||
"username": "1867254 Username"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-842054",
|
||||
"login": {
|
||||
"username": "User-842054",
|
||||
"password": "Password-842054"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1892038",
|
||||
"login": {}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1892039",
|
||||
"login": {}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1892047-No-Access",
|
||||
"login": {}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1892047-View",
|
||||
"login": {}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1892047-Manage",
|
||||
"login": {}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-2532597",
|
||||
"login": {}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1793366",
|
||||
"login": {}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-3925830",
|
||||
"login": {}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-3925831",
|
||||
"login": {}
|
||||
},
|
||||
{
|
||||
"type": "card",
|
||||
"name": "Cipher-ClientEventLog-Card",
|
||||
"card": {
|
||||
"cardholderName": "QA Testing",
|
||||
"brand": "Visa",
|
||||
"number": "4242424242424242",
|
||||
"expMonth": "1",
|
||||
"expYear": "2111",
|
||||
"code": "123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-ClientEventLog-Login",
|
||||
"fields": [
|
||||
{ "name": "Hidden-Field", "value": "hiddenfield", "type": "hidden" }
|
||||
],
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-5172094",
|
||||
"login": {
|
||||
"username": "username",
|
||||
"password": "password",
|
||||
"totp": "testing123"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-3392572",
|
||||
"login": {
|
||||
"username": "Cipher-3392572",
|
||||
"password": "abc",
|
||||
"uris": [
|
||||
{ "uri": "https://coinbase.com" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-3171087",
|
||||
"login": {
|
||||
"username": "Cipher-3171087",
|
||||
"password": "abc",
|
||||
"uris": [
|
||||
{ "uri": "webtests.dev" }
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
13
util/Seeder/Seeds/fixtures/ciphers/sso-vault.json
Normal file
13
util/Seeder/Seeds/fixtures/ciphers/sso-vault.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"$schema": "../../schemas/cipher.schema.json",
|
||||
"items": [
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-20606",
|
||||
"login": {
|
||||
"username": "Cipher-20606",
|
||||
"password": "password"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
60
util/Seeder/Seeds/fixtures/ciphers/tde-vault.json
Normal file
60
util/Seeder/Seeds/fixtures/ciphers/tde-vault.json
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"$schema": "../../schemas/cipher.schema.json",
|
||||
"items": [
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1867257",
|
||||
"login": {
|
||||
"username": "1867257 Username"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1867257-2",
|
||||
"reprompt": 1,
|
||||
"login": {
|
||||
"username": "1867257-2 Username"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1867259",
|
||||
"login": {
|
||||
"username": "1867259 Username"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1867259-2",
|
||||
"reprompt": 1,
|
||||
"login": {
|
||||
"username": "1867259-2 Username"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1867261",
|
||||
"reprompt": 1,
|
||||
"login": {
|
||||
"username": "1867261 Username"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-1867262",
|
||||
"reprompt": 1,
|
||||
"login": {
|
||||
"username": "1867262 Username"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Cipher-19503",
|
||||
"reprompt": 1,
|
||||
"login": {
|
||||
"username": "19503 Username",
|
||||
"password": "19503 Password"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"$schema": "../../schemas/organization.schema.json",
|
||||
"name": "Collection Permissions QA Org",
|
||||
"domain": "qa-collperms.test"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"$schema": "../../schemas/organization.schema.json",
|
||||
"name": "Enterprise QA Org",
|
||||
"domain": "qa-enterprise.test"
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"$schema": "../../schemas/organization.schema.json",
|
||||
"name": "Policy Testing Org",
|
||||
"domain": "qa-policy.test"
|
||||
}
|
||||
5
util/Seeder/Seeds/fixtures/organizations/qa-sso-org.json
Normal file
5
util/Seeder/Seeds/fixtures/organizations/qa-sso-org.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"$schema": "../../schemas/organization.schema.json",
|
||||
"name": "SSO QA Org",
|
||||
"domain": "qa-sso.test"
|
||||
}
|
||||
5
util/Seeder/Seeds/fixtures/organizations/qa-tde-org.json
Normal file
5
util/Seeder/Seeds/fixtures/organizations/qa-tde-org.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"$schema": "../../schemas/organization.schema.json",
|
||||
"name": "TDE QA Org",
|
||||
"domain": "qa-tde.test"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../../schemas/preset.schema.json",
|
||||
"organization": {
|
||||
"fixture": "qa-collection-permissions",
|
||||
"planType": "enterprise-annually",
|
||||
"seats": 10
|
||||
},
|
||||
"roster": {
|
||||
"fixture": "collection-permissions"
|
||||
},
|
||||
"ciphers": {
|
||||
"fixture": "collection-permissions"
|
||||
}
|
||||
}
|
||||
14
util/Seeder/Seeds/fixtures/presets/enterprise-basic.json
Normal file
14
util/Seeder/Seeds/fixtures/presets/enterprise-basic.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../../schemas/preset.schema.json",
|
||||
"organization": {
|
||||
"fixture": "qa-enterprise",
|
||||
"planType": "enterprise-annually",
|
||||
"seats": 10
|
||||
},
|
||||
"roster": {
|
||||
"fixture": "enterprise-basic"
|
||||
},
|
||||
"ciphers": {
|
||||
"fixture": "enterprise-basic"
|
||||
}
|
||||
}
|
||||
14
util/Seeder/Seeds/fixtures/presets/policy-enterprise.json
Normal file
14
util/Seeder/Seeds/fixtures/presets/policy-enterprise.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "../../schemas/preset.schema.json",
|
||||
"organization": {
|
||||
"fixture": "qa-policy-org",
|
||||
"planType": "enterprise-annually"
|
||||
},
|
||||
"roster": {
|
||||
"fixture": "policy-org"
|
||||
},
|
||||
"policies": {
|
||||
"enableAll": true,
|
||||
"except": ["requireSso", "require2fa"]
|
||||
}
|
||||
}
|
||||
22
util/Seeder/Seeds/fixtures/presets/sso-enterprise.json
Normal file
22
util/Seeder/Seeds/fixtures/presets/sso-enterprise.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"$schema": "../../schemas/preset.schema.json",
|
||||
"organization": {
|
||||
"fixture": "qa-sso-org",
|
||||
"planType": "enterprise-annually",
|
||||
"seats": 10
|
||||
},
|
||||
"roster": {
|
||||
"fixture": "sso-basic"
|
||||
},
|
||||
"ciphers": {
|
||||
"fixture": "sso-vault"
|
||||
},
|
||||
"policies": {
|
||||
"enable": ["requireSso"]
|
||||
},
|
||||
"sso": {
|
||||
"identifier": "qa-sso-org",
|
||||
"encryptionType": "masterPassword",
|
||||
"provider": "oidc"
|
||||
}
|
||||
}
|
||||
22
util/Seeder/Seeds/fixtures/presets/tde-enterprise.json
Normal file
22
util/Seeder/Seeds/fixtures/presets/tde-enterprise.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"$schema": "../../schemas/preset.schema.json",
|
||||
"organization": {
|
||||
"fixture": "qa-tde-org",
|
||||
"planType": "enterprise-annually",
|
||||
"seats": 10
|
||||
},
|
||||
"roster": {
|
||||
"fixture": "tde-basic"
|
||||
},
|
||||
"ciphers": {
|
||||
"fixture": "tde-vault"
|
||||
},
|
||||
"policies": {
|
||||
"enable": ["requireSso"]
|
||||
},
|
||||
"sso": {
|
||||
"identifier": "qa-tde-org",
|
||||
"encryptionType": "trustedDevices",
|
||||
"provider": "oidc"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"$schema": "../../schemas/roster.schema.json",
|
||||
"users": [
|
||||
{ "firstName": "CollPerms", "lastName": "Owner", "role": "owner" },
|
||||
{ "firstName": "CollPerms", "lastName": "Admin", "role": "admin" },
|
||||
{ "firstName": "CollPerms", "lastName": "User", "role": "user" },
|
||||
{ "firstName": "CollPerms", "lastName": "Custom", "role": "custom" }
|
||||
],
|
||||
"collections": [
|
||||
{
|
||||
"name": "View-Items-Collection",
|
||||
"externalId": "view",
|
||||
"users": [
|
||||
{ "user": "collperms.admin", "readOnly": true },
|
||||
{ "user": "collperms.user", "readOnly": true },
|
||||
{ "user": "collperms.custom", "readOnly": true }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "View-Items-Hidden-Passwords-Collection",
|
||||
"externalId": "viewhidden",
|
||||
"users": [
|
||||
{ "user": "collperms.admin", "readOnly": true, "hidePasswords": true },
|
||||
{ "user": "collperms.user", "readOnly": true, "hidePasswords": true },
|
||||
{ "user": "collperms.custom", "readOnly": true, "hidePasswords": true }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Edit-Items-Collection",
|
||||
"externalId": "edit",
|
||||
"users": [
|
||||
{ "user": "collperms.admin" },
|
||||
{ "user": "collperms.user" },
|
||||
{ "user": "collperms.custom" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Edit-Items-Hidden-Passwords-Collection",
|
||||
"externalId": "edithidden",
|
||||
"users": [
|
||||
{ "user": "collperms.admin", "hidePasswords": true },
|
||||
{ "user": "collperms.user", "hidePasswords": true },
|
||||
{ "user": "collperms.custom", "hidePasswords": true }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Manage-Collection",
|
||||
"externalId": "manage",
|
||||
"users": [
|
||||
{ "user": "collperms.admin", "manage": true },
|
||||
{ "user": "collperms.user", "manage": true },
|
||||
{ "user": "collperms.custom", "manage": true }
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Collection-21891",
|
||||
"externalId": "manage",
|
||||
"users": [
|
||||
{ "user": "collperms.admin", "manage": true },
|
||||
{ "user": "collperms.user", "manage": true },
|
||||
{ "user": "collperms.custom", "manage": true }
|
||||
]
|
||||
},
|
||||
{ "name": "Collection-19712" },
|
||||
{ "name": "Collection-19713" },
|
||||
{ "name": "Collection-19714" },
|
||||
{ "name": "Collection-19716-1" },
|
||||
{ "name": "Collection-19716-2" },
|
||||
{
|
||||
"name": "Collection-842048-not-assigned",
|
||||
"externalId": "Collection-842048-not-assigned"
|
||||
},
|
||||
{
|
||||
"name": "Collection-842048-assigned",
|
||||
"externalId": "Collection-842048-assigned"
|
||||
}
|
||||
]
|
||||
}
|
||||
64
util/Seeder/Seeds/fixtures/rosters/enterprise-basic.json
Normal file
64
util/Seeder/Seeds/fixtures/rosters/enterprise-basic.json
Normal file
@@ -0,0 +1,64 @@
|
||||
{
|
||||
"$schema": "../../schemas/roster.schema.json",
|
||||
"users": [
|
||||
{ "firstName": "Enterprise", "lastName": "Owner", "role": "owner" },
|
||||
{ "firstName": "Enterprise", "lastName": "Admin", "role": "admin" },
|
||||
{ "firstName": "Enterprise", "lastName": "User", "role": "user" },
|
||||
{ "firstName": "Enterprise", "lastName": "Custom", "role": "custom" },
|
||||
{ "firstName": "Enterprise", "lastName": "Custom-Two", "role": "custom" }
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"name": "All Members",
|
||||
"members": [
|
||||
"enterprise.owner",
|
||||
"enterprise.admin",
|
||||
"enterprise.user",
|
||||
"enterprise.custom",
|
||||
"enterprise.custom-two"
|
||||
]
|
||||
}
|
||||
],
|
||||
"collections": [
|
||||
{
|
||||
"name": "Default collection",
|
||||
"groups": [{ "group": "All Members" }],
|
||||
"users": [{ "user": "enterprise.owner", "manage": true }]
|
||||
},
|
||||
{ "name": "Collection-20360", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-20356", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-1793363", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-21895", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-20319", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-317432", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-997761-2", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-1793362", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-20308", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-21896", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-20359", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-20358", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-19619", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-19711", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-21891", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-997761-1", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-1867254", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-383003", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-19620", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-19933", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-20306", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-20294", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-842054", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-1892038", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-1892039", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-1892047-No-Access" },
|
||||
{ "name": "Collection-1892047-View", "groups": [{ "group": "All Members", "readOnly": true }] },
|
||||
{ "name": "Collection-1892047-Manage", "groups": [{ "group": "All Members", "manage": true }] },
|
||||
{ "name": "Collection-2532597", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-1793366", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-3925894", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-4204903", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-5172094", "externalId": "Collection-5172094", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-3392572", "groups": [{ "group": "All Members" }] },
|
||||
{ "name": "Collection-3171087", "groups": [{ "group": "All Members" }] }
|
||||
]
|
||||
}
|
||||
9
util/Seeder/Seeds/fixtures/rosters/policy-org.json
Normal file
9
util/Seeder/Seeds/fixtures/rosters/policy-org.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"$schema": "../../schemas/roster.schema.json",
|
||||
"users": [
|
||||
{ "firstName": "Policy", "lastName": "Owner", "role": "owner" },
|
||||
{ "firstName": "Policy", "lastName": "Admin", "role": "admin" },
|
||||
{ "firstName": "Policy", "lastName": "Custom", "role": "custom" },
|
||||
{ "firstName": "Policy", "lastName": "User", "role": "user" }
|
||||
]
|
||||
}
|
||||
8
util/Seeder/Seeds/fixtures/rosters/sso-basic.json
Normal file
8
util/Seeder/Seeds/fixtures/rosters/sso-basic.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"$schema": "../../schemas/roster.schema.json",
|
||||
"users": [
|
||||
{ "firstName": "Sso", "lastName": "Owner", "role": "owner" },
|
||||
{ "firstName": "Sso", "lastName": "User", "role": "user" },
|
||||
{ "firstName": "Sso", "lastName": "Provisioning", "role": "user" }
|
||||
]
|
||||
}
|
||||
16
util/Seeder/Seeds/fixtures/rosters/tde-basic.json
Normal file
16
util/Seeder/Seeds/fixtures/rosters/tde-basic.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"$schema": "../../schemas/roster.schema.json",
|
||||
"users": [
|
||||
{ "firstName": "Tde", "lastName": "Owner", "role": "owner" },
|
||||
{ "firstName": "Tde", "lastName": "Mp-Non-Trusted", "role": "user" },
|
||||
{ "firstName": "Tde", "lastName": "No-Mp-Non-Trusted", "role": "user" }
|
||||
],
|
||||
"collections": [
|
||||
{
|
||||
"name": "Default collection",
|
||||
"users": [
|
||||
{ "user": "tde.no-mp-non-trusted", "manage": true }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -26,11 +26,10 @@
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["login", "card", "identity", "secureNote"]
|
||||
"enum": ["login", "card", "identity", "secureNote", "sshKey"]
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
"type": "string"
|
||||
},
|
||||
"notes": {
|
||||
"type": "string"
|
||||
@@ -44,11 +43,31 @@
|
||||
"identity": {
|
||||
"$ref": "#/$defs/identity"
|
||||
},
|
||||
"sshKey": {
|
||||
"$ref": "#/$defs/sshKey"
|
||||
},
|
||||
"reprompt": {
|
||||
"type": "integer",
|
||||
"enum": [0, 1],
|
||||
"default": 0,
|
||||
"description": "Master password re-prompt. 0=None, 1=Password."
|
||||
},
|
||||
"favorite": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "Whether the item is marked as a favorite."
|
||||
},
|
||||
"fields": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/field"
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/passwordHistory"
|
||||
}
|
||||
}
|
||||
},
|
||||
"allOf": [
|
||||
@@ -63,6 +82,10 @@
|
||||
{
|
||||
"if": { "properties": { "type": { "const": "identity" } } },
|
||||
"then": { "required": ["identity"] }
|
||||
},
|
||||
{
|
||||
"if": { "properties": { "type": { "const": "sshKey" } } },
|
||||
"then": { "required": ["sshKey"] }
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -73,11 +96,19 @@
|
||||
"username": { "type": "string" },
|
||||
"password": { "type": "string" },
|
||||
"totp": { "type": "string" },
|
||||
"passwordRevisionDate": { "type": "string", "description": "ISO date when the password was last changed." },
|
||||
"autofillOnPageLoad": { "type": "boolean", "description": "Auto-populate credential on page load." },
|
||||
"uris": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/loginUri"
|
||||
}
|
||||
},
|
||||
"fido2Credentials": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/$defs/fido2Credential"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -142,8 +173,47 @@
|
||||
"type": "string",
|
||||
"enum": ["text", "hidden", "boolean", "linked"],
|
||||
"default": "text"
|
||||
},
|
||||
"linkedId": {
|
||||
"type": "integer",
|
||||
"description": "Links to cipher property. Only valid when type='linked'. Login: Username=100, Password=101. Card: CardholderName=300, ExpMonth=301, ExpYear=302, Code=303, Brand=304, Number=305. Identity: Title=400 through FullName=418."
|
||||
}
|
||||
}
|
||||
},
|
||||
"sshKey": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"privateKey": { "type": "string" },
|
||||
"publicKey": { "type": "string" },
|
||||
"keyFingerprint": { "type": "string" }
|
||||
}
|
||||
},
|
||||
"passwordHistory": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"password": { "type": "string" },
|
||||
"lastUsedDate": { "type": "string", "description": "ISO date when password was last used." }
|
||||
}
|
||||
},
|
||||
"fido2Credential": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"credentialId": { "type": "string" },
|
||||
"keyType": { "type": "string", "default": "public-key" },
|
||||
"keyAlgorithm": { "type": "string", "default": "ECDSA" },
|
||||
"keyCurve": { "type": "string", "default": "P-256" },
|
||||
"keyValue": { "type": "string" },
|
||||
"rpId": { "type": "string" },
|
||||
"rpName": { "type": "string" },
|
||||
"userHandle": { "type": "string" },
|
||||
"userName": { "type": "string" },
|
||||
"userDisplayName": { "type": "string" },
|
||||
"counter": { "type": "integer" },
|
||||
"discoverable": { "type": "boolean", "default": false }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,6 +133,49 @@
|
||||
}
|
||||
},
|
||||
"required": ["countPerUser"]
|
||||
},
|
||||
"policies": {
|
||||
"type": "object",
|
||||
"description": "Organization policy configuration.",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"enableAll": {
|
||||
"type": "boolean",
|
||||
"default": false,
|
||||
"description": "When true, enables all policy types."
|
||||
},
|
||||
"except": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Policy types to exclude when enableAll is true."
|
||||
},
|
||||
"enable": {
|
||||
"type": "array",
|
||||
"items": { "type": "string" },
|
||||
"description": "Specific policy types to enable (alternative to enableAll)."
|
||||
}
|
||||
}
|
||||
},
|
||||
"sso": {
|
||||
"type": "object",
|
||||
"description": "Single Sign-On configuration for the organization.",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"identifier": {
|
||||
"type": "string",
|
||||
"description": "SSO organization identifier used in login flows."
|
||||
},
|
||||
"encryptionType": {
|
||||
"type": "string",
|
||||
"enum": ["masterPassword", "trustedDevices"],
|
||||
"description": "How member keys are protected. 'masterPassword' = standard SSO, 'trustedDevices' = TDE (no master password)."
|
||||
},
|
||||
"provider": {
|
||||
"type": "string",
|
||||
"enum": ["oidc", "saml"],
|
||||
"description": "Identity provider protocol."
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,6 +51,16 @@
|
||||
"default": "user",
|
||||
"description": "Organization role."
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": ["confirmed", "invited", "accepted", "revoked"],
|
||||
"default": "confirmed",
|
||||
"description": "Organization membership status."
|
||||
},
|
||||
"email": {
|
||||
"type": "string",
|
||||
"description": "Override derived email (firstName.lastName@domain). Use for non-standard email patterns."
|
||||
},
|
||||
"branch": {
|
||||
"type": "string",
|
||||
"description": "Branch office for grouping."
|
||||
@@ -71,6 +81,10 @@
|
||||
"minLength": 1,
|
||||
"description": "Group display name (not encrypted)."
|
||||
},
|
||||
"externalId": {
|
||||
"type": "string",
|
||||
"description": "External identifier for directory sync / API test compatibility."
|
||||
},
|
||||
"members": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
@@ -90,6 +104,10 @@
|
||||
"minLength": 1,
|
||||
"description": "Collection name. Use '/' for visual hierarchy (e.g., 'Departments/Sales')."
|
||||
},
|
||||
"externalId": {
|
||||
"type": "string",
|
||||
"description": "External identifier for directory sync / API test compatibility."
|
||||
},
|
||||
"groups": {
|
||||
"type": "array",
|
||||
"description": "Group permission assignments.",
|
||||
|
||||
@@ -4,16 +4,37 @@
|
||||
{
|
||||
"type": "login",
|
||||
"name": "Example Login",
|
||||
"favorite": true,
|
||||
"reprompt": 0,
|
||||
"login": {
|
||||
"username": "user@example.com",
|
||||
"password": "ChangeMe123!",
|
||||
"totp": "otpauth://totp/Example:user?secret=JBSWY3DPEHPK3PXP",
|
||||
"uris": [
|
||||
{
|
||||
"uri": "https://example.com/login",
|
||||
"match": "domain"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"fields": [
|
||||
{
|
||||
"name": "Recovery Code",
|
||||
"value": "ABC-123-XYZ",
|
||||
"type": "hidden"
|
||||
},
|
||||
{
|
||||
"name": "Linked Username",
|
||||
"type": "linked",
|
||||
"linkedId": 100
|
||||
}
|
||||
],
|
||||
"passwordHistory": [
|
||||
{
|
||||
"password": "OldPassword1!",
|
||||
"lastUsedDate": "2024-01-15T00:00:00.000Z"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "card",
|
||||
@@ -45,6 +66,16 @@
|
||||
"type": "secureNote",
|
||||
"name": "Example Secure Note",
|
||||
"notes": "This is a secure note with sensitive information."
|
||||
},
|
||||
{
|
||||
"type": "sshKey",
|
||||
"name": "Example SSH Key",
|
||||
"reprompt": 1,
|
||||
"sshKey": {
|
||||
"privateKey": "-----BEGIN OPENSSH PRIVATE KEY-----\n...\n-----END OPENSSH PRIVATE KEY-----\n",
|
||||
"publicKey": "ssh-ed25519 AAAAC3...",
|
||||
"keyFingerprint": "SHA256:..."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -3,12 +3,17 @@
|
||||
"organization": {
|
||||
"name": "Acme Corporation",
|
||||
"domain": "acme.example.com",
|
||||
"seats": 50
|
||||
"seats": 50,
|
||||
"planType": "enterprise-annually"
|
||||
},
|
||||
"roster": {
|
||||
"fixture": "my-roster-fixture"
|
||||
},
|
||||
"ciphers": {
|
||||
"fixture": "my-cipher-fixture"
|
||||
},
|
||||
"policies": {
|
||||
"enableAll": true,
|
||||
"except": ["requireSso"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,9 +14,17 @@
|
||||
"lastName": "User",
|
||||
"title": "Developer",
|
||||
"role": "user",
|
||||
"status": "confirmed",
|
||||
"branch": "Headquarters",
|
||||
"department": "Engineering"
|
||||
},
|
||||
{
|
||||
"firstName": "Dave",
|
||||
"lastName": "Invited",
|
||||
"role": "user",
|
||||
"status": "invited",
|
||||
"email": "dave.custom-email@external.com"
|
||||
},
|
||||
{
|
||||
"firstName": "Carol",
|
||||
"lastName": "Manager",
|
||||
@@ -36,6 +44,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Engineering Team",
|
||||
"externalId": "eng-team-001",
|
||||
"members": [
|
||||
"bob.user",
|
||||
"carol.manager"
|
||||
@@ -64,6 +73,7 @@
|
||||
},
|
||||
{
|
||||
"name": "Engineering/Development",
|
||||
"externalId": "eng-dev-collection",
|
||||
"groups": [
|
||||
{
|
||||
"group": "Engineering Team",
|
||||
|
||||
Reference in New Issue
Block a user