diff --git a/docs/admin_console/relationships.dsl b/docs/admin_console/relationships.dsl index e69de29bb2..daca986bb9 100644 --- a/docs/admin_console/relationships.dsl +++ b/docs/admin_console/relationships.dsl @@ -0,0 +1 @@ +server.scim -> server.database "Queries" diff --git a/docs/auth/relationships.dsl b/docs/auth/relationships.dsl index e69de29bb2..f39bf8261d 100644 --- a/docs/auth/relationships.dsl +++ b/docs/auth/relationships.dsl @@ -0,0 +1,2 @@ +server.identity -> server.database "Queries" +server.sso -> server.database "Queries" diff --git a/docs/bitwarden_system.json b/docs/bitwarden_system.json index 85f366a4c0..9c8060cb4e 100644 --- a/docs/bitwarden_system.json +++ b/docs/bitwarden_system.json @@ -4,7 +4,7 @@ "documentation" : { }, "id" : 1, "lastModifiedAgent" : "structurizr-ui", - "lastModifiedDate" : "2025-05-06T21:58:53Z", + "lastModifiedDate" : "2025-05-20T20:49:59Z", "model" : { "people" : [ { "description" : "An end user of the Bitwarden System", @@ -17,45 +17,45 @@ "relationships" : [ { "description" : "Uses", "destinationId" : "16", - "id" : "47", + "id" : "48", "sourceId" : "1", "tags" : "Relationship" }, { "description" : "Uses", "destinationId" : "15", - "id" : "48", - "linkedRelationshipId" : "47", + "id" : "49", + "linkedRelationshipId" : "48", "sourceId" : "1" }, { "description" : "Uses", "destinationId" : "17", - "id" : "49", - "sourceId" : "1", - "tags" : "Relationship" - }, { - "description" : "Uses", - "destinationId" : "18", "id" : "50", "sourceId" : "1", "tags" : "Relationship" }, { "description" : "Uses", - "destinationId" : "19", + "destinationId" : "18", "id" : "51", "sourceId" : "1", "tags" : "Relationship" }, { "description" : "Uses", - "destinationId" : "20", + "destinationId" : "19", "id" : "52", "sourceId" : "1", "tags" : "Relationship" }, { "description" : "Uses", - "destinationId" : "21", + "destinationId" : "20", "id" : "53", "sourceId" : "1", "tags" : "Relationship" + }, { + "description" : "Uses", + "destinationId" : "21", + "id" : "54", + "sourceId" : "1", + "tags" : "Relationship" } ], "tags" : "Element,Person" }, { @@ -69,14 +69,14 @@ "relationships" : [ { "description" : "Administers System", "destinationId" : "9", - "id" : "62", + "id" : "63", "sourceId" : "2", "tags" : "Relationship" }, { "description" : "Administers System", "destinationId" : "4", - "id" : "63", - "linkedRelationshipId" : "62", + "id" : "64", + "linkedRelationshipId" : "63", "sourceId" : "2" } ], "tags" : "Element,Person,Bitwarden Employee,Self-Host Admin" @@ -92,20 +92,20 @@ "relationships" : [ { "description" : "Inspects and supports", "destinationId" : "9", - "id" : "60", + "id" : "61", "sourceId" : "3", "tags" : "Relationship" }, { "description" : "Inspects and supports", "destinationId" : "4", - "id" : "61", - "linkedRelationshipId" : "60", + "id" : "62", + "linkedRelationshipId" : "61", "sourceId" : "3" } ], "tags" : "Element,Person,Bitwarden Employee" }, { "description" : "An administrator of an organization", - "id" : "24", + "id" : "25", "location" : "Unspecified", "name" : "Organization Admin", "properties" : { @@ -114,20 +114,20 @@ "relationships" : [ { "description" : "Administers Organizations", "destinationId" : "16", - "id" : "54", - "sourceId" : "24", + "id" : "55", + "sourceId" : "25", "tags" : "Relationship" }, { "description" : "Administers Organizations", "destinationId" : "15", - "id" : "55", - "linkedRelationshipId" : "54", - "sourceId" : "24" + "id" : "56", + "linkedRelationshipId" : "55", + "sourceId" : "25" } ], "tags" : "Element,Person,Admin" }, { "description" : "And employee of a managed service provider", - "id" : "25", + "id" : "26", "location" : "Unspecified", "name" : "MSP", "properties" : { @@ -136,27 +136,27 @@ "relationships" : [ { "description" : "Completes Provider registration with", "destinationId" : "9", - "id" : "56", - "sourceId" : "25", + "id" : "57", + "sourceId" : "26", "tags" : "Relationship" }, { "description" : "Completes Provider registration with", "destinationId" : "4", - "id" : "57", - "linkedRelationshipId" : "56", - "sourceId" : "25" + "id" : "58", + "linkedRelationshipId" : "57", + "sourceId" : "26" }, { "description" : "Administers Providers and Organizations", "destinationId" : "16", - "id" : "58", - "sourceId" : "25", + "id" : "59", + "sourceId" : "26", "tags" : "Relationship" }, { "description" : "Administers Providers and Organizations", "destinationId" : "15", - "id" : "59", - "linkedRelationshipId" : "58", - "sourceId" : "25" + "id" : "60", + "linkedRelationshipId" : "59", + "sourceId" : "26" } ], "tags" : "Element,Person,MSP" } ], @@ -174,14 +174,14 @@ }, "relationships" : [ { "description" : "Requests payments for customers", - "destinationId" : "31", - "id" : "85", + "destinationId" : "32", + "id" : "101", "sourceId" : "6", "tags" : "Relationship" }, { "description" : "Requests payments for customers", - "destinationId" : "32", - "id" : "88", + "destinationId" : "33", + "id" : "104", "sourceId" : "6", "tags" : "Relationship" } ], @@ -195,22 +195,46 @@ }, "relationships" : [ { "description" : "Validates JWTs with", - "destinationId" : "29", - "id" : "84", + "destinationId" : "30", + "id" : "85", "sourceId" : "5", "tags" : "Relationship", "url" : "https://bitwarden.com" }, { - "description" : "Requests payments for customers", - "destinationId" : "31", - "id" : "86", - "linkedRelationshipId" : "85", - "sourceId" : "5" + "description" : "Queries", + "destinationId" : "11", + "id" : "87", + "sourceId" : "5", + "tags" : "Relationship" + }, { + "description" : "Sends events to", + "destinationId" : "12", + "id" : "89", + "sourceId" : "5", + "tags" : "Relationship" + }, { + "description" : "Sends emails to", + "destinationId" : "13", + "id" : "91", + "sourceId" : "5", + "tags" : "Relationship" + }, { + "description" : "Sends notifications to", + "destinationId" : "14", + "id" : "92", + "sourceId" : "5", + "tags" : "Relationship" }, { "description" : "Requests payments for customers", "destinationId" : "32", - "id" : "89", - "linkedRelationshipId" : "88", + "id" : "102", + "linkedRelationshipId" : "101", + "sourceId" : "5" + }, { + "description" : "Requests payments for customers", + "destinationId" : "33", + "id" : "105", + "linkedRelationshipId" : "104", "sourceId" : "5" } ], "tags" : "Element,Container,API" @@ -221,6 +245,13 @@ "properties" : { "structurizr.dsl.identifier" : "server.events" }, + "relationships" : [ { + "description" : "Sends events to", + "destinationId" : "12", + "id" : "90", + "sourceId" : "7", + "tags" : "Relationship" + } ], "tags" : "Element,Container,Events" }, { "documentation" : { }, @@ -229,6 +260,13 @@ "properties" : { "structurizr.dsl.identifier" : "server.notifications" }, + "relationships" : [ { + "description" : "Sends notifications to", + "destinationId" : "14", + "id" : "93", + "sourceId" : "8", + "tags" : "Relationship" + } ], "tags" : "Element,Container" }, { "documentation" : { }, @@ -237,6 +275,13 @@ "properties" : { "structurizr.dsl.identifier" : "server.portal" }, + "relationships" : [ { + "description" : "Queries", + "destinationId" : "11", + "id" : "88", + "sourceId" : "9", + "tags" : "Relationship" + } ], "tags" : "Element,Container,Web" }, { "documentation" : { }, @@ -261,6 +306,13 @@ "properties" : { "structurizr.dsl.identifier" : "server.events_queue" }, + "relationships" : [ { + "description" : "Processes events from", + "destinationId" : "10", + "id" : "94", + "sourceId" : "12", + "tags" : "Relationship" + } ], "tags" : "Element,Container,Queue,Azure" }, { "documentation" : { }, @@ -269,6 +321,13 @@ "properties" : { "structurizr.dsl.identifier" : "server.mail_queue" }, + "relationships" : [ { + "description" : "Processes emails from", + "destinationId" : "9", + "id" : "95", + "sourceId" : "13", + "tags" : "Relationship" + } ], "tags" : "Element,Container,Queue,Azure" }, { "documentation" : { }, @@ -280,48 +339,69 @@ "tags" : "Element,Container,Queue,Azure" }, { "documentation" : { }, - "id" : "26", + "id" : "27", "name" : "SCIM", "properties" : { "structurizr.dsl.identifier" : "server.scim" }, + "relationships" : [ { + "description" : "Queries", + "destinationId" : "11", + "id" : "98", + "sourceId" : "27", + "tags" : "Relationship" + } ], "tags" : "Element,Container,SCIM" }, { "documentation" : { }, - "id" : "29", + "id" : "30", "name" : "Identity", "properties" : { "structurizr.dsl.identifier" : "server.identity" }, + "relationships" : [ { + "description" : "Queries", + "destinationId" : "11", + "id" : "99", + "sourceId" : "30", + "tags" : "Relationship" + } ], "tags" : "Element,Container,Auth" }, { "documentation" : { }, - "id" : "30", + "id" : "31", "name" : "SSO", "properties" : { "structurizr.dsl.identifier" : "server.sso" }, + "relationships" : [ { + "description" : "Queries", + "destinationId" : "11", + "id" : "100", + "sourceId" : "31", + "tags" : "Relationship" + } ], "tags" : "Element,Container,Auth" }, { "components" : [ { "description" : "IconsController", "documentation" : { }, - "id" : "34", + "id" : "35", "name" : "IconsController", "properties" : { "structurizr.dsl.identifier" : "server.icons.icons_controller" }, "relationships" : [ { "description" : "Requests icons from", - "destinationId" : "36", - "id" : "41", - "sourceId" : "34", + "destinationId" : "37", + "id" : "42", + "sourceId" : "35", "tags" : "Relationship" }, { "description" : "Caches icons in", - "destinationId" : "37", - "id" : "42", - "sourceId" : "34", + "destinationId" : "38", + "id" : "43", + "sourceId" : "35", "tags" : "Relationship" } ], "tags" : "Element,Component", @@ -329,7 +409,7 @@ }, { "description" : "Provides information about the deployed icon service. Allow for health checks.", "documentation" : { }, - "id" : "35", + "id" : "36", "name" : "InfoController", "properties" : { "structurizr.dsl.identifier" : "server.icons.info_controller" @@ -339,7 +419,7 @@ }, { "description" : "Resolves a single source for a website icon and downloads it.", "documentation" : { }, - "id" : "36", + "id" : "37", "name" : "IconDetermination", "perspectives" : [ { "description" : "Internal network exposure", @@ -351,16 +431,16 @@ }, "relationships" : [ { "description" : "Retrieves icons from", - "destinationId" : "43", - "id" : "44", - "sourceId" : "36", + "destinationId" : "44", + "id" : "45", + "sourceId" : "37", "tags" : "Relationship" } ], "tags" : "Element,Component" }, { "description" : "Caches icons for a given domain", "documentation" : { }, - "id" : "37", + "id" : "38", "name" : "IconCache", "properties" : { "structurizr.dsl.identifier" : "server.icons.icon_cache" @@ -369,17 +449,17 @@ "technology" : "C# MemoryCache" } ], "documentation" : { }, - "id" : "33", + "id" : "34", "name" : "Icons", "properties" : { "structurizr.dsl.identifier" : "server.icons" }, "relationships" : [ { "description" : "Retrieves icons from", - "destinationId" : "43", - "id" : "45", - "linkedRelationshipId" : "44", - "sourceId" : "33" + "destinationId" : "44", + "id" : "46", + "linkedRelationshipId" : "45", + "sourceId" : "34" } ], "tags" : "Element,Container" } ], @@ -393,21 +473,21 @@ }, "relationships" : [ { "description" : "Retrieves icons from", - "destinationId" : "43", - "id" : "46", - "linkedRelationshipId" : "44", - "sourceId" : "4" - }, { - "description" : "Requests payments for customers", - "destinationId" : "31", - "id" : "87", - "linkedRelationshipId" : "85", + "destinationId" : "44", + "id" : "47", + "linkedRelationshipId" : "45", "sourceId" : "4" }, { "description" : "Requests payments for customers", "destinationId" : "32", - "id" : "90", - "linkedRelationshipId" : "88", + "id" : "103", + "linkedRelationshipId" : "101", + "sourceId" : "4" + }, { + "description" : "Requests payments for customers", + "destinationId" : "33", + "id" : "106", + "linkedRelationshipId" : "104", "sourceId" : "4" } ], "tags" : "Element,Software System" @@ -422,19 +502,19 @@ "relationships" : [ { "description" : "Makes requests to", "destinationId" : "5", - "id" : "64", + "id" : "65", "sourceId" : "16", "tags" : "Relationship" }, { "description" : "Makes requests to", "destinationId" : "4", - "id" : "65", - "linkedRelationshipId" : "64", + "id" : "66", + "linkedRelationshipId" : "65", "sourceId" : "16" }, { "description" : "Authenticates with", - "destinationId" : "29", - "id" : "77", + "destinationId" : "30", + "id" : "78", "sourceId" : "16", "tags" : "Relationship" } ], @@ -449,19 +529,19 @@ "relationships" : [ { "description" : "Makes requests to", "destinationId" : "5", - "id" : "67", + "id" : "68", "sourceId" : "17", "tags" : "Relationship" }, { "description" : "Makes requests to", "destinationId" : "4", - "id" : "68", - "linkedRelationshipId" : "67", + "id" : "69", + "linkedRelationshipId" : "68", "sourceId" : "17" }, { "description" : "Authenticates With", - "destinationId" : "29", - "id" : "79", + "destinationId" : "30", + "id" : "80", "sourceId" : "17", "tags" : "Relationship" } ], @@ -476,19 +556,19 @@ "relationships" : [ { "description" : "Makes requests to", "destinationId" : "5", - "id" : "69", + "id" : "70", "sourceId" : "18", "tags" : "Relationship" }, { "description" : "Makes requests to", "destinationId" : "4", - "id" : "70", - "linkedRelationshipId" : "69", + "id" : "71", + "linkedRelationshipId" : "70", "sourceId" : "18" }, { "description" : "Authenticates With", - "destinationId" : "29", - "id" : "80", + "destinationId" : "30", + "id" : "81", "sourceId" : "18", "tags" : "Relationship" } ], @@ -503,19 +583,19 @@ "relationships" : [ { "description" : "Makes requests to", "destinationId" : "5", - "id" : "71", + "id" : "72", "sourceId" : "19", "tags" : "Relationship" }, { "description" : "Makes requests to", "destinationId" : "4", - "id" : "72", - "linkedRelationshipId" : "71", + "id" : "73", + "linkedRelationshipId" : "72", "sourceId" : "19" }, { "description" : "Authenticates With", - "destinationId" : "29", - "id" : "81", + "destinationId" : "30", + "id" : "82", "sourceId" : "19", "tags" : "Relationship" } ], @@ -530,19 +610,19 @@ "relationships" : [ { "description" : "Makes requests to", "destinationId" : "5", - "id" : "73", + "id" : "74", "sourceId" : "20", "tags" : "Relationship" }, { "description" : "Makes requests to", "destinationId" : "4", - "id" : "74", - "linkedRelationshipId" : "73", + "id" : "75", + "linkedRelationshipId" : "74", "sourceId" : "20" }, { "description" : "Authenticates With", - "destinationId" : "29", - "id" : "82", + "destinationId" : "30", + "id" : "83", "sourceId" : "20", "tags" : "Relationship" } ], @@ -557,19 +637,19 @@ "relationships" : [ { "description" : "Makes requests to", "destinationId" : "5", - "id" : "75", + "id" : "76", "sourceId" : "21", "tags" : "Relationship" }, { "description" : "Makes requests to", "destinationId" : "4", - "id" : "76", - "linkedRelationshipId" : "75", + "id" : "77", + "linkedRelationshipId" : "76", "sourceId" : "21" }, { "description" : "Authenticates With", - "destinationId" : "29", - "id" : "83", + "destinationId" : "30", + "id" : "84", "sourceId" : "21", "tags" : "Relationship" } ], @@ -585,34 +665,40 @@ }, "relationships" : [ { "description" : "Requests icons for cleartext urls from", - "destinationId" : "34", - "id" : "38", + "destinationId" : "35", + "id" : "39", "sourceId" : "15", "tags" : "Relationship" }, { "description" : "Requests icons for cleartext urls from", - "destinationId" : "33", - "id" : "39", - "linkedRelationshipId" : "38", + "destinationId" : "34", + "id" : "40", + "linkedRelationshipId" : "39", "sourceId" : "15" }, { "description" : "Requests icons for cleartext urls from", "destinationId" : "4", - "id" : "40", - "linkedRelationshipId" : "38", + "id" : "41", + "linkedRelationshipId" : "39", "sourceId" : "15" }, { "description" : "Makes requests to", "destinationId" : "5", - "id" : "66", - "linkedRelationshipId" : "64", + "id" : "67", + "linkedRelationshipId" : "65", "sourceId" : "15" }, { "description" : "Authenticates with", - "destinationId" : "29", - "id" : "78", - "linkedRelationshipId" : "77", + "destinationId" : "30", + "id" : "79", + "linkedRelationshipId" : "78", "sourceId" : "15" + }, { + "description" : "Posts local usage events to", + "destinationId" : "7", + "id" : "86", + "sourceId" : "15", + "tags" : "Relationship" } ], "tags" : "Element,Software System" }, { @@ -627,14 +713,14 @@ "relationships" : [ { "description" : "Syncs users and groups to Bitwarden", "destinationId" : "5", - "id" : "27", + "id" : "28", "sourceId" : "22", "tags" : "Relationship" }, { "description" : "Syncs users and groups to Bitwarden", "destinationId" : "4", - "id" : "28", - "linkedRelationshipId" : "27", + "id" : "29", + "linkedRelationshipId" : "28", "sourceId" : "22" } ], "tags" : "Element,Software System,Directory,LDAP,Self-Hosted" @@ -649,23 +735,46 @@ }, "relationships" : [ { "description" : "Validates JWTs with", - "destinationId" : "29", - "id" : "94", + "destinationId" : "30", + "id" : "110", "sourceId" : "23", "tags" : "Relationship" }, { "description" : "Validates JWTs with", "destinationId" : "4", - "id" : "95", - "linkedRelationshipId" : "94", + "id" : "111", + "linkedRelationshipId" : "110", "sourceId" : "23" } ], "tags" : "Element,Software System" + }, { + "description" : "Self-hosted instances of Bitwarden servers", + "documentation" : { }, + "id" : "24", + "location" : "Unspecified", + "name" : "Self-Hosted Instances", + "properties" : { + "structurizr.dsl.identifier" : "self_hosted_instances" + }, + "relationships" : [ { + "description" : "Sends push notification proxy requests to", + "destinationId" : "8", + "id" : "96", + "sourceId" : "24", + "tags" : "Relationship" + }, { + "description" : "Sends push notification proxy requests to", + "destinationId" : "4", + "id" : "97", + "linkedRelationshipId" : "96", + "sourceId" : "24" + } ], + "tags" : "Element,Software System,Self-Hosted,External" }, { "description" : "Handles credit cards and subscriptions.", "documentation" : { }, "group" : "Payment Systems", - "id" : "31", + "id" : "32", "location" : "Unspecified", "name" : "Stripe", "properties" : { @@ -674,28 +783,28 @@ "relationships" : [ { "description" : "Sends subscription events to", "destinationId" : "6", - "id" : "91", - "sourceId" : "31", + "id" : "107", + "sourceId" : "32", "tags" : "Relationship" }, { "description" : "Sends subscription events to", "destinationId" : "5", - "id" : "92", - "linkedRelationshipId" : "91", - "sourceId" : "31" + "id" : "108", + "linkedRelationshipId" : "107", + "sourceId" : "32" }, { "description" : "Sends subscription events to", "destinationId" : "4", - "id" : "93", - "linkedRelationshipId" : "91", - "sourceId" : "31" + "id" : "109", + "linkedRelationshipId" : "107", + "sourceId" : "32" } ], "tags" : "Element,Software System,External,Billing" }, { "description" : "Handles PayPal and cryptocurrency.", "documentation" : { }, "group" : "Payment Systems", - "id" : "32", + "id" : "33", "location" : "Unspecified", "name" : "Braintree", "properties" : { @@ -704,7 +813,7 @@ "tags" : "Element,Software System,External,Billing" }, { "documentation" : { }, - "id" : "43", + "id" : "44", "location" : "Unspecified", "name" : "External Websites", "properties" : { @@ -715,7 +824,7 @@ }, "name" : "Bitwarden", "properties" : { - "structurizr.dsl" : "d29ya3NwYWNlICJCaXR3YXJkZW4iICJHZW5lcmFsIEJpdHdhcmRlbiBTeXN0ZW0iIHsKCiAgIWlkZW50aWZpZXJzIGhpZXJhcmNoaWNhbAoKICBtb2RlbCB7CiAgICBwcm9wZXJ0aWVzIHsKICAgICAgInN0cnVjdHVyaXpyLmdyb3VwU2VwYXJhdG9yIiAiLyIKICAgIH0KCiAgICAjIEluY2x1ZGUgcm9vdCBsZXZlbCBtb2RlbHMKICAgICMgUGVyc29uIHR5cGVzCiAgICB1c2VyID0gcGVyc29uICJCaXR3YXJkZW4gVXNlciIgIkFuIGVuZCB1c2VyIG9mIHRoZSBCaXR3YXJkZW4gU3lzdGVtIgogICAgc3lzdGVtX2FkbWluID0gcGVyc29uICJTeXN0ZW0gQWRtaW4iICJFaXRoZXIgYSBCaXR3YXJkZW4gc2l0ZS1yZWxpYWJpbGl0eSBlbmdpbmVlciBvciBhZG1pbmlzdHJhdG9yIG9mIGEgc2VsZi1ob3N0ZWQgaW5zdGFuY2UiIHsKICAgICAgdGFncyAiQml0d2FyZGVuIEVtcGxveWVlIiAiU2VsZi1Ib3N0IEFkbWluIgogICAgfQogICAgCiAgICAKICAgIGJ3X2NvbnRyb2xsZWQgPSBncm91cCAiQml0d2FyZGVuIENvbnRyb2xsZWQiIHsKICAgICAgIyBCaXR3YXJkZW4gc3RhZmYKICAgICAgY3VzdG9tZXJfc3VjY2VzcyA9IHBlcnNvbiAiQ3VzdG9tZXIgU3VjY2VzcyIgIkEgY3VzdG9tZXIgc3VjY2VzcyBlbmdpbmVlci4gSW5zcGVjdHMgYml0d2FyZGVuIHN0YXRlIHRocm91Z2ggdGhlIGFkbWluIHBvcnRhbCBhbmQgaW50ZXJuYWwgdG9vbHMiIHsKICAgICAgICB0YWdzICJCaXR3YXJkZW4gRW1wbG95ZWUiCiAgICAgIH0KICAgICAgCiAgICAgICMgUm9vdCBzeXN0ZW1zCiAgICAgIHNlcnZlciA9IHNvZnR3YXJlU3lzdGVtICJCaXR3YXJkZW4gU2VydmVyIiB7CiAgICAgICAgYXBpID0gY29udGFpbmVyICJBUEkiIHsKICAgICAgICAgIGJpbGxpbmcgPSBjb21wb25lbnQgIkJpbGxpbmciIHsKICAgICAgICAgICAgdGFncyAiQmlsbGluZyIKICAgICAgICAgIH0KICAgICAgICAgIHRhZ3MgIkFQSSIKICAgICAgICB9CiAgICAgICAgZXZlbnRzID0gY29udGFpbmVyICJFdmVudHMiIHsKICAgICAgICAgIHRhZ3MgIkV2ZW50cyIKICAgICAgICB9CiAgICAgICAgbm90aWZpY2F0aW9ucyA9IGNvbnRhaW5lciAiTm90aWZpY2F0aW9ucyIKICAgICAgICBwb3J0YWwgPSBjb250YWluZXIgIkJpdHdhcmRlbiBQb3J0YWwiIHsKICAgICAgICAgIHRhZ3MgIldlYiIKICAgICAgICB9CiAgICAgICAgZXZlbnRzX3Byb2Nlc3NvciA9IGNvbnRhaW5lciAiRXZlbnRzIFByb2Nlc3NvciIgewogICAgICAgICAgdGFncyAiRXZlbnRzIgogICAgICAgIH0KICAgIAogICAgICAgICMgRGF0YSBzdG9yZXMKICAgICAgICBkYXRhYmFzZSA9IGNvbnRhaW5lciAiRGF0YWJhc2UiIHsKICAgICAgICAgIHRhZ3MgIkRhdGFiYXNlIgogICAgICAgIH0KICAgICAgICBldmVudHNfcXVldWUgPSBjb250YWluZXIgIkV2ZW50cyBRdWV1ZSIgewogICAgICAgICAgdGFncyAiUXVldWUiCiAgICAgICAgICB0YWdzICJBenVyZSIKICAgICAgICB9CiAgICAgICAgbWFpbF9xdWV1ZSA9IGNvbnRhaW5lciAiTWFpbCBRdWV1ZSIgewogICAgICAgICAgdGFncyAiUXVldWUiCiAgICAgICAgICB0YWdzICJBenVyZSIKICAgICAgICB9CiAgICAgICAgbm90aWZpY2F0aW9uc19xdWV1ZSA9IGNvbnRhaW5lciAiTm90aWZpY2F0aW9ucyBRdWV1ZSIgewogICAgICAgICAgdGFncyAiUXVldWUiCiAgICAgICAgICB0YWdzICJBenVyZSIKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xpZW50cyA9IHNvZnR3YXJlU3lzdGVtICJDbGllbnRzIiB7CiAgICAgICAgd2ViID0gY29udGFpbmVyICJXZWIgQXBwbGljYXRpb24iIHsKICAgICAgICAgIHRhZ3MgIldlYiIKICAgICAgICB9CiAgICAgICAgaW9zID0gY29udGFpbmVyICJpT1MgQXBwbGljYXRpb24iIHsKICAgICAgICAgIHRhZ3MgIk1vYmlsZSIKICAgICAgICB9CiAgICAgICAgYW5kcm9pZCA9IGNvbnRhaW5lciAiQW5kcm9pZCBBcHBsaWNhdGlvbiIgewogICAgICAgICAgdGFncyAiTW9iaWxlIgogICAgICAgIH0KICAgICAgICBicm93c2VyX2V4dGVuc2lvbiA9IGNvbnRhaW5lciAiQnJvd3NlciBFeHRlbnNpb24iIHsKICAgICAgICAgIHRhZ3MgIkJyb3dzZXIiCiAgICAgICAgfQogICAgICAgIGNsaSA9IGNvbnRhaW5lciAiQ0xJIiB7CiAgICAgICAgICB0YWdzICJDTEkiCiAgICAgICAgfQogICAgICAgIGRlc2t0b3AgPSBjb250YWluZXIgIkRlc2t0b3AgQXBwbGljYXRpb24iIHsKICAgICAgICAgIHRhZ3MgIkRlc2t0b3AiCiAgICAgICAgfQogICAgICB9CiAgICAgIGRpcmVjdG9yeV9jb25uZWN0b3IgPSBzb2Z0d2FyZVN5c3RlbSAiRGlyZWN0b3J5IENvbm5lY3RvciIgewogICAgICAgIHRhZ3MgIkRpcmVjdG9yeSIKICAgICAgICB0YWdzICJMREFQIgogICAgICAgIHRhZ3MgIlNlbGYtSG9zdGVkIgogICAgICB9CiAgICAgIGtleV9jb25uZWN0b3IgPSBzb2Z0d2FyZVN5c3RlbSAiS2V5IENvbm5lY3RvciIgCiAgICB9CgogICAgIyBJbmNsdWRlIHRlYW0gbGV2ZWwgbW9kZWxzCiAgICBhZG1pbiA9IHBlcnNvbiAiT3JnYW5pemF0aW9uIEFkbWluIiAiQW4gYWRtaW5pc3RyYXRvciBvZiBhbiBvcmdhbml6YXRpb24iIHsKICAgICAgdGFncyAiQWRtaW4iCiAgICB9CiAgICBwcm92aWRlciA9IHBlcnNvbiAiTVNQIiAiQW5kIGVtcGxveWVlIG9mIGEgbWFuYWdlZCBzZXJ2aWNlIHByb3ZpZGVyIiB7CiAgICAgIHRhZ3MgIk1TUCIKICAgIH0KICAgIAogICAgIWVsZW1lbnQgc2VydmVyIHsKICAgICAgc2NpbSA9IGNvbnRhaW5lciAiU0NJTSIgewogICAgICAgIHRhZ3MgIlNDSU0iCiAgICAgIH0KICAgIH0KICAgIAogICAgZGlyZWN0b3J5X2Nvbm5lY3RvciAtPiBzZXJ2ZXIuYXBpICJTeW5jcyB1c2VycyBhbmQgZ3JvdXBzIHRvIEJpdHdhcmRlbiIKICAgICFlbGVtZW50IHNlcnZlciB7CiAgICAgIGlkZW50aXR5ID0gY29udGFpbmVyICJJZGVudGl0eSIgewogICAgICAgIHRhZ3MgIkF1dGgiCiAgICAgIH0KICAgICAgc3NvID0gY29udGFpbmVyICJTU08iIHsKICAgICAgICB0YWdzICJBdXRoIgogICAgICB9CiAgICB9CiAgICAjIEV4dGVybmFsIHZlbmRvcnMKICAgIGdyb3VwICJQYXltZW50IFN5c3RlbXMiIHsKICAgICAgc3RyaXBlID0gc29mdHdhcmVTeXN0ZW0gIlN0cmlwZSIgewogICAgICAgIHRhZ3MgIkV4dGVybmFsIgogICAgICAgIHRhZ3MgIkJpbGxpbmciCiAgICAgICAgZGVzY3JpcHRpb24gIkhhbmRsZXMgY3JlZGl0IGNhcmRzIGFuZCBzdWJzY3JpcHRpb25zLiIKICAgICAgfQogICAgICBicmFpbnRyZWUgPSBzb2Z0d2FyZVN5c3RlbSAiQnJhaW50cmVlIiB7CiAgICAgICAgdGFncyAiRXh0ZXJuYWwiCiAgICAgICAgdGFncyAiQmlsbGluZyIKICAgICAgICBkZXNjcmlwdGlvbiAiSGFuZGxlcyBQYXlQYWwgYW5kIGNyeXB0b2N1cnJlbmN5LiIKICAgICAgfQogICAgfQogICAgCiAgICAhZWxlbWVudCBzZXJ2ZXIgewogICAgICBpY29ucyA9IGNvbnRhaW5lciAiSWNvbnMiIHsKICAgICAgICBpY29uc19jb250cm9sbGVyID0gY29tcG9uZW50ICJJY29uc0NvbnRyb2xsZXIiIHsKICAgICAgICAgIGRlc2NyaXB0aW9uICJJY29uc0NvbnRyb2xsZXIiCiAgICAgICAgICB0ZWNobm9sb2d5ICJDIyBBU1AuTkVUIENvcmUiCiAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgaW5mb19jb250cm9sbGVyID0gY29tcG9uZW50ICJJbmZvQ29udHJvbGxlciIgewogICAgICAgICAgZGVzY3JpcHRpb24gIlByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXBsb3llZCBpY29uIHNlcnZpY2UuIEFsbG93IGZvciBoZWFsdGggY2hlY2tzLiIKICAgICAgICAgIHRlY2hub2xvZ3kgIkMjIEFTUC5ORVQgQ29yZSIKICAgICAgICAgIHRhZ3MgIkluZm8iICJIZWFsdGhDaGVjayIKICAgICAgICB9CiAgICAgICAgaWNvbl9yZXRyaWV2YWwgPSBjb21wb25lbnQgIkljb25EZXRlcm1pbmF0aW9uIiB7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiUmVzb2x2ZXMgYSBzaW5nbGUgc291cmNlIGZvciBhIHdlYnNpdGUgaWNvbiBhbmQgZG93bmxvYWRzIGl0LiIKICAgICAgICAgIHBlcnNwZWN0aXZlcyB7CiAgICAgICAgICAgICJTZWN1cml0eSIgIkludGVybmFsIG5ldHdvcmsgZXhwb3N1cmUiIDUKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWNvbl9jYWNoZSA9IGNvbXBvbmVudCAiSWNvbkNhY2hlIiB7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2FjaGVzIGljb25zIGZvciBhIGdpdmVuIGRvbWFpbiIKICAgICAgICAgIHRhZ3MgIkNhY2hlIgogICAgICAgICAgdGVjaG5vbG9neSAiQyMgTWVtb3J5Q2FjaGUiCiAgICAgICAgfQogICAgCiAgICAgICAgY2xpZW50cyAtPiBpY29uc19jb250cm9sbGVyICJSZXF1ZXN0cyBpY29ucyBmb3IgY2xlYXJ0ZXh0IHVybHMgZnJvbSIKICAgICAgICBpY29uc19jb250cm9sbGVyIC0+IGljb25fcmV0cmlldmFsICJSZXF1ZXN0cyBpY29ucyBmcm9tIgogICAgICAgIGljb25zX2NvbnRyb2xsZXIgLT4gaWNvbl9jYWNoZSAiQ2FjaGVzIGljb25zIGluIgogICAgICB9CiAgICB9CiAgICAKICAgIGV4dGVybmFsX3dlYnNpdGVzID0gc29mdHdhcmVTeXN0ZW0gIkV4dGVybmFsIFdlYnNpdGVzIiB7CiAgICAgIHRhZ3MgIkV4dGVybmFsIgogICAgICB0YWdzICJJY29ucyIKICAgIH0KICAgIAogICAgc2VydmVyLmljb25zLmljb25fcmV0cmlldmFsIC0+IGV4dGVybmFsX3dlYnNpdGVzICJSZXRyaWV2ZXMgaWNvbnMgZnJvbSIKCiAgICAjIEluY2x1ZGUgcm9vdCBsZXZlbCByZWxhdGlvbnNoaXBzCiAgICAjIFVzZXIgUmVsYXRpb25zaGlwcwogICAgdXNlciAtPiBjbGllbnRzLndlYiAiVXNlcyIKICAgIHVzZXIgLT4gY2xpZW50cy5pb3MgIlVzZXMiCiAgICB1c2VyIC0+IGNsaWVudHMuYW5kcm9pZCAiVXNlcyIKICAgIHVzZXIgLT4gY2xpZW50cy5icm93c2VyX2V4dGVuc2lvbiAiVXNlcyIKICAgIHVzZXIgLT4gY2xpZW50cy5jbGkgIlVzZXMiCiAgICB1c2VyIC0+IGNsaWVudHMuZGVza3RvcCAiVXNlcyIKICAgIGFkbWluIC0+IGNsaWVudHMud2ViICJBZG1pbmlzdGVycyBPcmdhbml6YXRpb25zIgogICAgcHJvdmlkZXIgLT4gc2VydmVyLnBvcnRhbCAiQ29tcGxldGVzIFByb3ZpZGVyIHJlZ2lzdHJhdGlvbiB3aXRoIgogICAgcHJvdmlkZXIgLT4gY2xpZW50cy53ZWIgIkFkbWluaXN0ZXJzIFByb3ZpZGVycyBhbmQgT3JnYW5pemF0aW9ucyIKICAgIGN1c3RvbWVyX3N1Y2Nlc3MgLT4gc2VydmVyLnBvcnRhbCAiSW5zcGVjdHMgYW5kIHN1cHBvcnRzIgogICAgc3lzdGVtX2FkbWluIC0+IHNlcnZlci5wb3J0YWwgIkFkbWluaXN0ZXJzIFN5c3RlbSIKICAgIAogICAgIyBIaWdoLWxldmVsIENsaWVudCBSZWxhdGlvbnNoaXBzCiAgICBjbGllbnRzLndlYiAtPiBzZXJ2ZXIuYXBpICJNYWtlcyByZXF1ZXN0cyB0byIKICAgIGNsaWVudHMuaW9zIC0+IHNlcnZlci5hcGkgIk1ha2VzIHJlcXVlc3RzIHRvIgogICAgY2xpZW50cy5hbmRyb2lkIC0+IHNlcnZlci5hcGkgIk1ha2VzIHJlcXVlc3RzIHRvIgogICAgY2xpZW50cy5icm93c2VyX2V4dGVuc2lvbiAtPiBzZXJ2ZXIuYXBpICJNYWtlcyByZXF1ZXN0cyB0byIKICAgIGNsaWVudHMuY2xpIC0+IHNlcnZlci5hcGkgIk1ha2VzIHJlcXVlc3RzIHRvIgogICAgY2xpZW50cy5kZXNrdG9wIC0+IHNlcnZlci5hcGkgIk1ha2VzIHJlcXVlc3RzIHRvIgogICAgY2xpZW50cy53ZWIgLT4gc2VydmVyLmlkZW50aXR5ICJBdXRoZW50aWNhdGVzIHdpdGgiCiAgICBjbGllbnRzLmlvcyAtPiBzZXJ2ZXIuaWRlbnRpdHkgIkF1dGhlbnRpY2F0ZXMgV2l0aCIKICAgIGNsaWVudHMuYW5kcm9pZCAtPiBzZXJ2ZXIuaWRlbnRpdHkgIkF1dGhlbnRpY2F0ZXMgV2l0aCIKICAgIGNsaWVudHMuYnJvd3Nlcl9leHRlbnNpb24gLT4gc2VydmVyLmlkZW50aXR5ICJBdXRoZW50aWNhdGVzIFdpdGgiCiAgICBjbGllbnRzLmNsaSAtPiBzZXJ2ZXIuaWRlbnRpdHkgIkF1dGhlbnRpY2F0ZXMgV2l0aCIKICAgIGNsaWVudHMuZGVza3RvcCAtPiBzZXJ2ZXIuaWRlbnRpdHkgIkF1dGhlbnRpY2F0ZXMgV2l0aCIKICAgIHNlcnZlci5hcGkgLT4gc2VydmVyLmlkZW50aXR5ICJWYWxpZGF0ZXMgSldUcyB3aXRoIiB7CiAgICAgIHVybCAiaHR0cHM6Ly9iaXR3YXJkZW4uY29tIgogICAgfQoKCiAgICAjIEhpZ2gtbGV2ZWwgcHJvdmlkZXIgcmVsYXRpb25zaGlwcwogICAgc2VydmVyLmFwaS5iaWxsaW5nIC0+IHN0cmlwZSAiUmVxdWVzdHMgcGF5bWVudHMgZm9yIGN1c3RvbWVycyIKICAgIHNlcnZlci5hcGkuYmlsbGluZyAtPiBicmFpbnRyZWUgIlJlcXVlc3RzIHBheW1lbnRzIGZvciBjdXN0b21lcnMiCiAgICBzdHJpcGUgLT4gc2VydmVyLmFwaS5iaWxsaW5nICJTZW5kcyBzdWJzY3JpcHRpb24gZXZlbnRzIHRvIgogICAga2V5X2Nvbm5lY3RvciAtPiBzZXJ2ZXIuaWRlbnRpdHkgIlZhbGlkYXRlcyBKV1RzIHdpdGgiCiAgfQoKICB2aWV3cyB7CiAgICBzdHlsZXMgewogICAgICBlbGVtZW50ICJQZXJzb24iIHsKICAgICAgICBiYWNrZ3JvdW5kICMzMTA3ZDMKICAgICAgICBzaGFwZSBwZXJzb24KICAgICAgfQogICAgICBlbGVtZW50ICJNU1AiIHsKICAgICAgICBiYWNrZ3JvdW5kICMzMTA3ZDMKICAgICAgICBzaGFwZSBwZXJzb24KICAgICAgfQogICAgfQoKICAgIC8vIFRoaXMgaXMgbGFzdCB0byBvdmVycmlkZSB0ZWFtIHN0eWxlcyB3aXRoIGNvbW1vbiBzdHlsZXMKICAgIHN0eWxlcyB7CiAgICAgIHRoZW1lIGRlZmF1bHQKICAgICAgZWxlbWVudCAiRWxlbWVudCIgewogICAgICAgIGNvbG9yICMzYzNiM2IKICAgICAgfQogICAgICBlbGVtZW50ICJQZXJzb24iIHsKICAgICAgICBiYWNrZ3JvdW5kICNkMzQ0MDcKICAgICAgICBzaGFwZSBwZXJzb24KICAgICAgfQogICAgICBlbGVtZW50ICJDb250YWluZXIiIHsKICAgICAgICBiYWNrZ3JvdW5kICNmODg3MjgKICAgICAgfQogICAgICBlbGVtZW50ICJNU1AiIHsKICAgICAgICBiYWNrZ3JvdW5kICMzMTA3ZDMKICAgICAgfQogICAgICBlbGVtZW50ICJRdWV1ZSIgewogICAgICAgIHNoYXBlIHBpcGUKICAgICAgfQogICAgICBlbGVtZW50ICJNb2JpbGUiIHsKICAgICAgICBzaGFwZSBtb2JpbGVEZXZpY2VQb3J0cmFpdAogICAgICB9CiAgICAgIGVsZW1lbnQgIldlYiIgewogICAgICAgIHNoYXBlIHdlYkJyb3dzZXIKICAgICAgfQogICAgICBlbGVtZW50ICJEYXRhYmFzZSIgewogICAgICAgIHNoYXBlIGN5bGluZGVyCiAgICAgIH0KICAgICAgZWxlbWVudCAiRXh0ZXJuYWwiIHsKICAgICAgICBjb2xvciAjMDAwMDAwCiAgICAgICAgYmFja2dyb3VuZCAjYjViNWI1CiAgICAgIH0KICAgIH0KICB9Cn0=" + "structurizr.dsl" : "d29ya3NwYWNlICJCaXR3YXJkZW4iICJHZW5lcmFsIEJpdHdhcmRlbiBTeXN0ZW0iIHsKCiAgIWlkZW50aWZpZXJzIGhpZXJhcmNoaWNhbAoKICBtb2RlbCB7CiAgICBwcm9wZXJ0aWVzIHsKICAgICAgInN0cnVjdHVyaXpyLmdyb3VwU2VwYXJhdG9yIiAiLyIKICAgIH0KCiAgICAjIEluY2x1ZGUgc2hhcmVkIGxldmVsIG1vZGVscwogICAgIyBQZXJzb24gdHlwZXMKICAgIHVzZXIgPSBwZXJzb24gIkJpdHdhcmRlbiBVc2VyIiAiQW4gZW5kIHVzZXIgb2YgdGhlIEJpdHdhcmRlbiBTeXN0ZW0iCiAgICBzeXN0ZW1fYWRtaW4gPSBwZXJzb24gIlN5c3RlbSBBZG1pbiIgIkVpdGhlciBhIEJpdHdhcmRlbiBzaXRlLXJlbGlhYmlsaXR5IGVuZ2luZWVyIG9yIGFkbWluaXN0cmF0b3Igb2YgYSBzZWxmLWhvc3RlZCBpbnN0YW5jZSIgewogICAgICB0YWdzICJCaXR3YXJkZW4gRW1wbG95ZWUiICJTZWxmLUhvc3QgQWRtaW4iCiAgICB9CiAgICAKICAgIAogICAgYndfY29udHJvbGxlZCA9IGdyb3VwICJCaXR3YXJkZW4gQ29udHJvbGxlZCIgewogICAgICAjIEJpdHdhcmRlbiBzdGFmZgogICAgICBjdXN0b21lcl9zdWNjZXNzID0gcGVyc29uICJDdXN0b21lciBTdWNjZXNzIiAiQSBjdXN0b21lciBzdWNjZXNzIGVuZ2luZWVyLiBJbnNwZWN0cyBiaXR3YXJkZW4gc3RhdGUgdGhyb3VnaCB0aGUgYWRtaW4gcG9ydGFsIGFuZCBpbnRlcm5hbCB0b29scyIgewogICAgICAgIHRhZ3MgIkJpdHdhcmRlbiBFbXBsb3llZSIKICAgICAgfQogICAgICAKICAgICAgIyBSb290IHN5c3RlbXMKICAgICAgc2VydmVyID0gc29mdHdhcmVTeXN0ZW0gIkJpdHdhcmRlbiBTZXJ2ZXIiIHsKICAgICAgICBhcGkgPSBjb250YWluZXIgIkFQSSIgewogICAgICAgICAgYmlsbGluZyA9IGNvbXBvbmVudCAiQmlsbGluZyIgewogICAgICAgICAgICB0YWdzICJCaWxsaW5nIgogICAgICAgICAgfQogICAgICAgICAgdGFncyAiQVBJIgogICAgICAgIH0KICAgICAgICBldmVudHMgPSBjb250YWluZXIgIkV2ZW50cyIgewogICAgICAgICAgdGFncyAiRXZlbnRzIgogICAgICAgIH0KICAgICAgICBub3RpZmljYXRpb25zID0gY29udGFpbmVyICJOb3RpZmljYXRpb25zIgogICAgICAgIHBvcnRhbCA9IGNvbnRhaW5lciAiQml0d2FyZGVuIFBvcnRhbCIgewogICAgICAgICAgdGFncyAiV2ViIgogICAgICAgIH0KICAgICAgICBldmVudHNfcHJvY2Vzc29yID0gY29udGFpbmVyICJFdmVudHMgUHJvY2Vzc29yIiB7CiAgICAgICAgICB0YWdzICJFdmVudHMiCiAgICAgICAgfQogICAgCiAgICAgICAgIyBEYXRhIHN0b3JlcwogICAgICAgIGRhdGFiYXNlID0gY29udGFpbmVyICJEYXRhYmFzZSIgewogICAgICAgICAgdGFncyAiRGF0YWJhc2UiCiAgICAgICAgfQogICAgICAgIGV2ZW50c19xdWV1ZSA9IGNvbnRhaW5lciAiRXZlbnRzIFF1ZXVlIiB7CiAgICAgICAgICB0YWdzICJRdWV1ZSIKICAgICAgICAgIHRhZ3MgIkF6dXJlIgogICAgICAgIH0KICAgICAgICBtYWlsX3F1ZXVlID0gY29udGFpbmVyICJNYWlsIFF1ZXVlIiB7CiAgICAgICAgICB0YWdzICJRdWV1ZSIKICAgICAgICAgIHRhZ3MgIkF6dXJlIgogICAgICAgIH0KICAgICAgICBub3RpZmljYXRpb25zX3F1ZXVlID0gY29udGFpbmVyICJOb3RpZmljYXRpb25zIFF1ZXVlIiB7CiAgICAgICAgICB0YWdzICJRdWV1ZSIKICAgICAgICAgIHRhZ3MgIkF6dXJlIgogICAgICAgIH0KICAgICAgfQogICAgICBjbGllbnRzID0gc29mdHdhcmVTeXN0ZW0gIkNsaWVudHMiIHsKICAgICAgICB3ZWIgPSBjb250YWluZXIgIldlYiBBcHBsaWNhdGlvbiIgewogICAgICAgICAgdGFncyAiV2ViIgogICAgICAgIH0KICAgICAgICBpb3MgPSBjb250YWluZXIgImlPUyBBcHBsaWNhdGlvbiIgewogICAgICAgICAgdGFncyAiTW9iaWxlIgogICAgICAgIH0KICAgICAgICBhbmRyb2lkID0gY29udGFpbmVyICJBbmRyb2lkIEFwcGxpY2F0aW9uIiB7CiAgICAgICAgICB0YWdzICJNb2JpbGUiCiAgICAgICAgfQogICAgICAgIGJyb3dzZXJfZXh0ZW5zaW9uID0gY29udGFpbmVyICJCcm93c2VyIEV4dGVuc2lvbiIgewogICAgICAgICAgdGFncyAiQnJvd3NlciIKICAgICAgICB9CiAgICAgICAgY2xpID0gY29udGFpbmVyICJDTEkiIHsKICAgICAgICAgIHRhZ3MgIkNMSSIKICAgICAgICB9CiAgICAgICAgZGVza3RvcCA9IGNvbnRhaW5lciAiRGVza3RvcCBBcHBsaWNhdGlvbiIgewogICAgICAgICAgdGFncyAiRGVza3RvcCIKICAgICAgICB9CiAgICAgIH0KICAgICAgZGlyZWN0b3J5X2Nvbm5lY3RvciA9IHNvZnR3YXJlU3lzdGVtICJEaXJlY3RvcnkgQ29ubmVjdG9yIiB7CiAgICAgICAgdGFncyAiRGlyZWN0b3J5IgogICAgICAgIHRhZ3MgIkxEQVAiCiAgICAgICAgdGFncyAiU2VsZi1Ib3N0ZWQiCiAgICAgIH0KICAgICAga2V5X2Nvbm5lY3RvciA9IHNvZnR3YXJlU3lzdGVtICJLZXkgQ29ubmVjdG9yIiAKICAgIH0KICAgIAogICAgc2VsZl9ob3N0ZWRfaW5zdGFuY2VzID0gc29mdHdhcmVTeXN0ZW0gIlNlbGYtSG9zdGVkIEluc3RhbmNlcyIgewogICAgICB0YWdzICJTZWxmLUhvc3RlZCIKICAgICAgdGFncyAiRXh0ZXJuYWwiCiAgICAgIGRlc2NyaXB0aW9uICJTZWxmLWhvc3RlZCBpbnN0YW5jZXMgb2YgQml0d2FyZGVuIHNlcnZlcnMiCiAgICB9CgogICAgIyBJbmNsdWRlIHRlYW0gbGV2ZWwgbW9kZWxzCiAgICBhZG1pbiA9IHBlcnNvbiAiT3JnYW5pemF0aW9uIEFkbWluIiAiQW4gYWRtaW5pc3RyYXRvciBvZiBhbiBvcmdhbml6YXRpb24iIHsKICAgICAgdGFncyAiQWRtaW4iCiAgICB9CiAgICBwcm92aWRlciA9IHBlcnNvbiAiTVNQIiAiQW5kIGVtcGxveWVlIG9mIGEgbWFuYWdlZCBzZXJ2aWNlIHByb3ZpZGVyIiB7CiAgICAgIHRhZ3MgIk1TUCIKICAgIH0KICAgIAogICAgIWVsZW1lbnQgc2VydmVyIHsKICAgICAgc2NpbSA9IGNvbnRhaW5lciAiU0NJTSIgewogICAgICAgIHRhZ3MgIlNDSU0iCiAgICAgIH0KICAgIH0KICAgIAogICAgZGlyZWN0b3J5X2Nvbm5lY3RvciAtPiBzZXJ2ZXIuYXBpICJTeW5jcyB1c2VycyBhbmQgZ3JvdXBzIHRvIEJpdHdhcmRlbiIKICAgICFlbGVtZW50IHNlcnZlciB7CiAgICAgIGlkZW50aXR5ID0gY29udGFpbmVyICJJZGVudGl0eSIgewogICAgICAgIHRhZ3MgIkF1dGgiCiAgICAgIH0KICAgICAgc3NvID0gY29udGFpbmVyICJTU08iIHsKICAgICAgICB0YWdzICJBdXRoIgogICAgICB9CiAgICB9CiAgICAjIEV4dGVybmFsIHZlbmRvcnMKICAgIGdyb3VwICJQYXltZW50IFN5c3RlbXMiIHsKICAgICAgc3RyaXBlID0gc29mdHdhcmVTeXN0ZW0gIlN0cmlwZSIgewogICAgICAgIHRhZ3MgIkV4dGVybmFsIgogICAgICAgIHRhZ3MgIkJpbGxpbmciCiAgICAgICAgZGVzY3JpcHRpb24gIkhhbmRsZXMgY3JlZGl0IGNhcmRzIGFuZCBzdWJzY3JpcHRpb25zLiIKICAgICAgfQogICAgICBicmFpbnRyZWUgPSBzb2Z0d2FyZVN5c3RlbSAiQnJhaW50cmVlIiB7CiAgICAgICAgdGFncyAiRXh0ZXJuYWwiCiAgICAgICAgdGFncyAiQmlsbGluZyIKICAgICAgICBkZXNjcmlwdGlvbiAiSGFuZGxlcyBQYXlQYWwgYW5kIGNyeXB0b2N1cnJlbmN5LiIKICAgICAgfQogICAgfQogICAgCiAgICAhZWxlbWVudCBzZXJ2ZXIgewogICAgICBpY29ucyA9IGNvbnRhaW5lciAiSWNvbnMiIHsKICAgICAgICBpY29uc19jb250cm9sbGVyID0gY29tcG9uZW50ICJJY29uc0NvbnRyb2xsZXIiIHsKICAgICAgICAgIGRlc2NyaXB0aW9uICJJY29uc0NvbnRyb2xsZXIiCiAgICAgICAgICB0ZWNobm9sb2d5ICJDIyBBU1AuTkVUIENvcmUiCiAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgaW5mb19jb250cm9sbGVyID0gY29tcG9uZW50ICJJbmZvQ29udHJvbGxlciIgewogICAgICAgICAgZGVzY3JpcHRpb24gIlByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXBsb3llZCBpY29uIHNlcnZpY2UuIEFsbG93IGZvciBoZWFsdGggY2hlY2tzLiIKICAgICAgICAgIHRlY2hub2xvZ3kgIkMjIEFTUC5ORVQgQ29yZSIKICAgICAgICAgIHRhZ3MgIkluZm8iICJIZWFsdGhDaGVjayIKICAgICAgICB9CiAgICAgICAgaWNvbl9yZXRyaWV2YWwgPSBjb21wb25lbnQgIkljb25EZXRlcm1pbmF0aW9uIiB7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiUmVzb2x2ZXMgYSBzaW5nbGUgc291cmNlIGZvciBhIHdlYnNpdGUgaWNvbiBhbmQgZG93bmxvYWRzIGl0LiIKICAgICAgICAgIHBlcnNwZWN0aXZlcyB7CiAgICAgICAgICAgICJTZWN1cml0eSIgIkludGVybmFsIG5ldHdvcmsgZXhwb3N1cmUiIDUKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWNvbl9jYWNoZSA9IGNvbXBvbmVudCAiSWNvbkNhY2hlIiB7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2FjaGVzIGljb25zIGZvciBhIGdpdmVuIGRvbWFpbiIKICAgICAgICAgIHRhZ3MgIkNhY2hlIgogICAgICAgICAgdGVjaG5vbG9neSAiQyMgTWVtb3J5Q2FjaGUiCiAgICAgICAgfQogICAgCiAgICAgICAgY2xpZW50cyAtPiBpY29uc19jb250cm9sbGVyICJSZXF1ZXN0cyBpY29ucyBmb3IgY2xlYXJ0ZXh0IHVybHMgZnJvbSIKICAgICAgICBpY29uc19jb250cm9sbGVyIC0+IGljb25fcmV0cmlldmFsICJSZXF1ZXN0cyBpY29ucyBmcm9tIgogICAgICAgIGljb25zX2NvbnRyb2xsZXIgLT4gaWNvbl9jYWNoZSAiQ2FjaGVzIGljb25zIGluIgogICAgICB9CiAgICB9CiAgICAKICAgIGV4dGVybmFsX3dlYnNpdGVzID0gc29mdHdhcmVTeXN0ZW0gIkV4dGVybmFsIFdlYnNpdGVzIiB7CiAgICAgIHRhZ3MgIkV4dGVybmFsIgogICAgICB0YWdzICJJY29ucyIKICAgIH0KICAgIAogICAgc2VydmVyLmljb25zLmljb25fcmV0cmlldmFsIC0+IGV4dGVybmFsX3dlYnNpdGVzICJSZXRyaWV2ZXMgaWNvbnMgZnJvbSIKCiAgICAjIEluY2x1ZGUgc2hhcmVkIGxldmVsIHJlbGF0aW9uc2hpcHMKICAgICMgVXNlciBSZWxhdGlvbnNoaXBzCiAgICB1c2VyIC0+IGNsaWVudHMud2ViICJVc2VzIgogICAgdXNlciAtPiBjbGllbnRzLmlvcyAiVXNlcyIKICAgIHVzZXIgLT4gY2xpZW50cy5hbmRyb2lkICJVc2VzIgogICAgdXNlciAtPiBjbGllbnRzLmJyb3dzZXJfZXh0ZW5zaW9uICJVc2VzIgogICAgdXNlciAtPiBjbGllbnRzLmNsaSAiVXNlcyIKICAgIHVzZXIgLT4gY2xpZW50cy5kZXNrdG9wICJVc2VzIgogICAgYWRtaW4gLT4gY2xpZW50cy53ZWIgIkFkbWluaXN0ZXJzIE9yZ2FuaXphdGlvbnMiCiAgICBwcm92aWRlciAtPiBzZXJ2ZXIucG9ydGFsICJDb21wbGV0ZXMgUHJvdmlkZXIgcmVnaXN0cmF0aW9uIHdpdGgiCiAgICBwcm92aWRlciAtPiBjbGllbnRzLndlYiAiQWRtaW5pc3RlcnMgUHJvdmlkZXJzIGFuZCBPcmdhbml6YXRpb25zIgogICAgY3VzdG9tZXJfc3VjY2VzcyAtPiBzZXJ2ZXIucG9ydGFsICJJbnNwZWN0cyBhbmQgc3VwcG9ydHMiCiAgICBzeXN0ZW1fYWRtaW4gLT4gc2VydmVyLnBvcnRhbCAiQWRtaW5pc3RlcnMgU3lzdGVtIgogICAgCiAgICAjIEhpZ2gtbGV2ZWwgQ2xpZW50IFJlbGF0aW9uc2hpcHMKICAgIGNsaWVudHMud2ViIC0+IHNlcnZlci5hcGkgIk1ha2VzIHJlcXVlc3RzIHRvIgogICAgY2xpZW50cy5pb3MgLT4gc2VydmVyLmFwaSAiTWFrZXMgcmVxdWVzdHMgdG8iCiAgICBjbGllbnRzLmFuZHJvaWQgLT4gc2VydmVyLmFwaSAiTWFrZXMgcmVxdWVzdHMgdG8iCiAgICBjbGllbnRzLmJyb3dzZXJfZXh0ZW5zaW9uIC0+IHNlcnZlci5hcGkgIk1ha2VzIHJlcXVlc3RzIHRvIgogICAgY2xpZW50cy5jbGkgLT4gc2VydmVyLmFwaSAiTWFrZXMgcmVxdWVzdHMgdG8iCiAgICBjbGllbnRzLmRlc2t0b3AgLT4gc2VydmVyLmFwaSAiTWFrZXMgcmVxdWVzdHMgdG8iCiAgICBjbGllbnRzLndlYiAtPiBzZXJ2ZXIuaWRlbnRpdHkgIkF1dGhlbnRpY2F0ZXMgd2l0aCIKICAgIGNsaWVudHMuaW9zIC0+IHNlcnZlci5pZGVudGl0eSAiQXV0aGVudGljYXRlcyBXaXRoIgogICAgY2xpZW50cy5hbmRyb2lkIC0+IHNlcnZlci5pZGVudGl0eSAiQXV0aGVudGljYXRlcyBXaXRoIgogICAgY2xpZW50cy5icm93c2VyX2V4dGVuc2lvbiAtPiBzZXJ2ZXIuaWRlbnRpdHkgIkF1dGhlbnRpY2F0ZXMgV2l0aCIKICAgIGNsaWVudHMuY2xpIC0+IHNlcnZlci5pZGVudGl0eSAiQXV0aGVudGljYXRlcyBXaXRoIgogICAgY2xpZW50cy5kZXNrdG9wIC0+IHNlcnZlci5pZGVudGl0eSAiQXV0aGVudGljYXRlcyBXaXRoIgogICAgc2VydmVyLmFwaSAtPiBzZXJ2ZXIuaWRlbnRpdHkgIlZhbGlkYXRlcyBKV1RzIHdpdGgiIHsKICAgICAgdXJsICJodHRwczovL2JpdHdhcmRlbi5jb20iCiAgICB9CiAgICBjbGllbnRzIC0+IHNlcnZlci5ldmVudHMgIlBvc3RzIGxvY2FsIHVzYWdlIGV2ZW50cyB0byIKICAgIAogICAgIyBEYXRhYmFzZSBSZWxhdGlvbnNoaXBzCiAgICAKICAgIHNlcnZlci5hcGkgLT4gc2VydmVyLmRhdGFiYXNlICJRdWVyaWVzIgogICAgc2VydmVyLnBvcnRhbCAtPiBzZXJ2ZXIuZGF0YWJhc2UgIlF1ZXJpZXMiCiAgICAKICAgICMgcXVldWUgUmVsYXRpb25zaGlwcwogICAgc2VydmVyLmFwaSAtPiBzZXJ2ZXIuZXZlbnRzX3F1ZXVlICJTZW5kcyBldmVudHMgdG8iCiAgICBzZXJ2ZXIuZXZlbnRzIC0+IHNlcnZlci5ldmVudHNfcXVldWUgIlNlbmRzIGV2ZW50cyB0byIKICAgIHNlcnZlci5hcGkgLT4gc2VydmVyLm1haWxfcXVldWUgIlNlbmRzIGVtYWlscyB0byIKICAgIHNlcnZlci5hcGkgLT4gc2VydmVyLm5vdGlmaWNhdGlvbnNfcXVldWUgIlNlbmRzIG5vdGlmaWNhdGlvbnMgdG8iCiAgICBzZXJ2ZXIubm90aWZpY2F0aW9ucyAtPiBzZXJ2ZXIubm90aWZpY2F0aW9uc19xdWV1ZSAiU2VuZHMgbm90aWZpY2F0aW9ucyB0byIKICAgIHNlcnZlci5ldmVudHNfcXVldWUgLT4gc2VydmVyLmV2ZW50c19wcm9jZXNzb3IgIlByb2Nlc3NlcyBldmVudHMgZnJvbSIKICAgIHNlcnZlci5tYWlsX3F1ZXVlIC0+IHNlcnZlci5wb3J0YWwgIlByb2Nlc3NlcyBlbWFpbHMgZnJvbSIKICAgIAogICAgIyBzZWxmIGhvc3QgcGhvbmUgaG9tZQogICAgc2VsZl9ob3N0ZWRfaW5zdGFuY2VzIC0+IHNlcnZlci5ub3RpZmljYXRpb25zICJTZW5kcyBwdXNoIG5vdGlmaWNhdGlvbiBwcm94eSByZXF1ZXN0cyB0byIKCgogICAgc2VydmVyLnNjaW0gLT4gc2VydmVyLmRhdGFiYXNlICJRdWVyaWVzIgogICAgc2VydmVyLmlkZW50aXR5IC0+IHNlcnZlci5kYXRhYmFzZSAiUXVlcmllcyIKICAgIHNlcnZlci5zc28gLT4gc2VydmVyLmRhdGFiYXNlICJRdWVyaWVzIgogICAgIyBIaWdoLWxldmVsIHByb3ZpZGVyIHJlbGF0aW9uc2hpcHMKICAgIHNlcnZlci5hcGkuYmlsbGluZyAtPiBzdHJpcGUgIlJlcXVlc3RzIHBheW1lbnRzIGZvciBjdXN0b21lcnMiCiAgICBzZXJ2ZXIuYXBpLmJpbGxpbmcgLT4gYnJhaW50cmVlICJSZXF1ZXN0cyBwYXltZW50cyBmb3IgY3VzdG9tZXJzIgogICAgc3RyaXBlIC0+IHNlcnZlci5hcGkuYmlsbGluZyAiU2VuZHMgc3Vic2NyaXB0aW9uIGV2ZW50cyB0byIKICAgIGtleV9jb25uZWN0b3IgLT4gc2VydmVyLmlkZW50aXR5ICJWYWxpZGF0ZXMgSldUcyB3aXRoIgogIH0KCiAgdmlld3MgewogICAgc3R5bGVzIHsKICAgICAgZWxlbWVudCAiUGVyc29uIiB7CiAgICAgICAgYmFja2dyb3VuZCAjMzEwN2QzCiAgICAgICAgc2hhcGUgcGVyc29uCiAgICAgIH0KICAgICAgZWxlbWVudCAiTVNQIiB7CiAgICAgICAgYmFja2dyb3VuZCAjMzEwN2QzCiAgICAgICAgc2hhcGUgcGVyc29uCiAgICAgIH0KICAgIH0KICAgIGNvbXBvbmVudCBzZXJ2ZXIuaWNvbnMgImljb25zX3NlcnZpY2UiIHsKICAgICAgaW5jbHVkZSAqCiAgICAgIGF1dG9sYXlvdXQgdGIKICAgIH0KCiAgICBzeXN0ZW1MYW5kc2NhcGUgIkJpdHdhcmRlbiIgewogICAgICBpbmNsdWRlICoKICAgIH0KCiAgICBjb250YWluZXIgc2VydmVyICJCaXR3YXJkZW5fU2VydmVyIiB7CiAgICAgIGluY2x1ZGUgKgogICAgfQoKICAgIC8vIFRoaXMgaXMgbGFzdCB0byBvdmVycmlkZSB0ZWFtIHN0eWxlcyB3aXRoIGNvbW1vbiBzdHlsZXMKICAgIHN0eWxlcyB7CiAgICAgIHRoZW1lIGRlZmF1bHQKICAgICAgZWxlbWVudCAiRWxlbWVudCIgewogICAgICAgIGNvbG9yICMzYzNiM2IKICAgICAgfQogICAgICBlbGVtZW50ICJQZXJzb24iIHsKICAgICAgICBiYWNrZ3JvdW5kICNkMzQ0MDcKICAgICAgICBzaGFwZSBwZXJzb24KICAgICAgfQogICAgICBlbGVtZW50ICJDb250YWluZXIiIHsKICAgICAgICBiYWNrZ3JvdW5kICNmODg3MjgKICAgICAgfQogICAgICBlbGVtZW50ICJNU1AiIHsKICAgICAgICBiYWNrZ3JvdW5kICMzMTA3ZDMKICAgICAgfQogICAgICBlbGVtZW50ICJRdWV1ZSIgewogICAgICAgIHNoYXBlIHBpcGUKICAgICAgfQogICAgICBlbGVtZW50ICJNb2JpbGUiIHsKICAgICAgICBzaGFwZSBtb2JpbGVEZXZpY2VQb3J0cmFpdAogICAgICB9CiAgICAgIGVsZW1lbnQgIldlYiIgewogICAgICAgIHNoYXBlIHdlYkJyb3dzZXIKICAgICAgfQogICAgICBlbGVtZW50ICJEYXRhYmFzZSIgewogICAgICAgIHNoYXBlIGN5bGluZGVyCiAgICAgIH0KICAgICAgZWxlbWVudCAiRXh0ZXJuYWwiIHsKICAgICAgICBjb2xvciAjMDAwMDAwCiAgICAgICAgYmFja2dyb3VuZCAjYjViNWI1CiAgICAgIH0KICAgIH0KICB9Cn0=" }, "views" : { "componentViews" : [ { @@ -728,50 +837,11 @@ "rankSeparation" : 300, "vertices" : false }, - "containerId" : "5", - "elements" : [ { - "id" : "6", - "x" : 0, - "y" : 0 - }, { - "id" : "31", - "x" : 0, - "y" : 0 - }, { - "id" : "32", - "x" : 0, - "y" : 0 - } ], - "externalContainerBoundariesVisible" : false, - "generatedKey" : true, - "key" : "Component-001", - "order" : 4, - "relationships" : [ { - "id" : "85" - }, { - "id" : "88" - }, { - "id" : "91" - } ] - }, { - "automaticLayout" : { - "applied" : false, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false - }, - "containerId" : "33", + "containerId" : "34", "elements" : [ { "id" : "15", "x" : 0, "y" : 0 - }, { - "id" : "34", - "x" : 0, - "y" : 0 }, { "id" : "35", "x" : 0, @@ -785,27 +855,30 @@ "x" : 0, "y" : 0 }, { - "id" : "43", + "id" : "38", + "x" : 0, + "y" : 0 + }, { + "id" : "44", "x" : 0, "y" : 0 } ], "externalContainerBoundariesVisible" : false, - "generatedKey" : true, - "key" : "Component-002", - "order" : 5, + "key" : "icons_service", + "order" : 1, "relationships" : [ { - "id" : "38" - }, { - "id" : "41" + "id" : "39" }, { "id" : "42" }, { - "id" : "44" + "id" : "43" + }, { + "id" : "45" } ] } ], "configuration" : { "branding" : { }, - "lastSavedView" : "SystemLandscape-001", + "lastSavedView" : "Bitwarden_Server", "metadataSymbols" : "SquareBrackets", "styles" : { "elements" : [ { @@ -844,603 +917,362 @@ "themes" : [ "https://static.structurizr.com/themes/default/theme.json" ] }, "containerViews" : [ { - "automaticLayout" : { - "applied" : false, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false + "dimensions" : { + "height" : 4020, + "width" : 7258 }, "elements" : [ { "id" : "2", - "x" : 0, - "y" : 0 + "x" : 317, + "y" : 2108 }, { "id" : "3", - "x" : 0, - "y" : 0 + "x" : 6650, + "y" : 2108 }, { "id" : "5", - "x" : 0, - "y" : 0 + "x" : 2383, + "y" : 1508 }, { "id" : "7", - "x" : 0, - "y" : 0 + "x" : 1633, + "y" : 1508 }, { "id" : "8", - "x" : 0, - "y" : 0 + "x" : 3883, + "y" : 1508 }, { "id" : "9", - "x" : 0, - "y" : 0 + "x" : 3883, + "y" : 2808 }, { "id" : "10", - "x" : 0, - "y" : 0 + "x" : 1325, + "y" : 2808 }, { "id" : "11", - "x" : 0, - "y" : 0 + "x" : 2825, + "y" : 3408 }, { "id" : "12", - "x" : 0, - "y" : 0 + "x" : 1767, + "y" : 2158 }, { "id" : "13", - "x" : 0, - "y" : 0 + "x" : 3042, + "y" : 2158 }, { "id" : "14", - "x" : 0, - "y" : 0 + "x" : 3792, + "y" : 2158 }, { "id" : "15", - "x" : 0, - "y" : 0 + "x" : 1633, + "y" : 908 }, { "id" : "22", - "x" : 0, - "y" : 0 + "x" : 2383, + "y" : 908 }, { "id" : "23", + "x" : 358, + "y" : 1508 + }, { + "id" : "24", + "x" : 3883, + "y" : 908 + }, { + "id" : "26", + "x" : 3825, + "y" : 208 + }, { + "id" : "27", + "x" : 2825, + "y" : 2808 + }, { + "id" : "30", + "x" : 1017, + "y" : 2158 + }, { + "id" : "31", + "x" : 2075, + "y" : 2808 + }, { + "id" : "32", + "x" : 3133, + "y" : 908 + }, { + "id" : "33", + "x" : 4542, + "y" : 2158 + }, { + "id" : "34", + "x" : 3133, + "y" : 1508 + }, { + "id" : "44", + "x" : 5292, + "y" : 2158 + } ], + "externalSoftwareSystemBoundariesVisible" : false, + "key" : "Bitwarden_Server", + "order" : 3, + "paperSize" : "A1_Landscape", + "relationships" : [ { + "id" : "100" + }, { + "id" : "102", + "vertices" : [ { + "x" : 3076, + "y" : 1475 + } ] + }, { + "id" : "105", + "vertices" : [ { + "x" : 2983, + "y" : 1808 + }, { + "x" : 4512, + "y" : 2108 + } ] + }, { + "id" : "108", + "vertices" : [ { + "x" : 2889, + "y" : 1240 + } ] + }, { + "id" : "110" + }, { + "id" : "28" + }, { + "id" : "40", + "vertices" : [ { + "x" : 2233, + "y" : 1208 + }, { + "x" : 2983, + "y" : 1404 + } ] + }, { + "id" : "46", + "vertices" : [ { + "x" : 3733, + "y" : 1808 + }, { + "x" : 5142, + "y" : 2108 + } ] + }, { + "id" : "57", + "vertices" : [ { + "x" : 5892, + "y" : 2108 + }, { + "x" : 5892, + "y" : 2508 + } ] + }, { + "id" : "60", + "vertices" : [ { + "x" : 2233, + "y" : 908 + } ] + }, { + "id" : "61", + "vertices" : [ { + "x" : 6425, + "y" : 2508 + } ] + }, { + "id" : "63", + "vertices" : [ { + "x" : 837, + "y" : 2508 + }, { + "x" : 3425, + "y" : 2808 + } ] + }, { + "id" : "67" + }, { + "id" : "79", + "vertices" : [ { + "x" : 208, + "y" : 1404 + }, { + "x" : 208, + "y" : 1808 + }, { + "x" : 867, + "y" : 2108 + } ] + }, { + "id" : "85", + "vertices" : [ { + "x" : 1617, + "y" : 2108 + } ] + }, { + "id" : "86" + }, { + "id" : "87", + "vertices" : [ { + "x" : 2892, + "y" : 2508 + }, { + "x" : 3425, + "y" : 2808 + }, { + "x" : 3425, + "y" : 3108 + } ] + }, { + "id" : "88" + }, { + "id" : "89" + }, { + "id" : "90" + }, { + "id" : "91" + }, { + "id" : "92", + "vertices" : [ { + "x" : 3642, + "y" : 2108 + } ] + }, { + "id" : "93" + }, { + "id" : "94" + }, { + "id" : "95" + }, { + "id" : "96" + }, { + "id" : "98" + }, { + "id" : "99", + "vertices" : [ { + "x" : 1175, + "y" : 2808 + }, { + "x" : 1175, + "y" : 3108 + } ] + } ], + "softwareSystemId" : "4" + } ], + "systemLandscapeViews" : [ { + "dimensions" : { + "height" : 2820, + "width" : 4433 + }, + "elements" : [ { + "id" : "1", + "x" : 2425, + "y" : 208 + }, { + "id" : "2", + "x" : 208, + "y" : 908 + }, { + "id" : "3", + "x" : 908, + "y" : 908 + }, { + "id" : "4", + "x" : 1633, + "y" : 1608 + }, { + "id" : "15", + "x" : 3108, + "y" : 958 + }, { + "id" : "22", + "x" : 2358, + "y" : 958 + }, { + "id" : "23", + "x" : 1608, + "y" : 958 + }, { + "id" : "24", "x" : 0, "y" : 0 }, { "id" : "25", - "x" : 0, - "y" : 0 + "x" : 3125, + "y" : 208 }, { "id" : "26", - "x" : 0, - "y" : 0 - }, { - "id" : "29", - "x" : 0, - "y" : 0 - }, { - "id" : "30", - "x" : 0, - "y" : 0 - }, { - "id" : "31", - "x" : 0, - "y" : 0 + "x" : 3825, + "y" : 208 }, { "id" : "32", - "x" : 0, - "y" : 0 + "x" : 1633, + "y" : 2208 }, { "id" : "33", - "x" : 0, - "y" : 0 + "x" : 883, + "y" : 2208 }, { - "id" : "43", - "x" : 0, - "y" : 0 + "id" : "44", + "x" : 2383, + "y" : 2208 } ], - "externalSoftwareSystemBoundariesVisible" : false, - "generatedKey" : true, - "key" : "Container-001", - "order" : 3, + "enterpriseBoundaryVisible" : true, + "key" : "Bitwarden", + "order" : 2, + "paperSize" : "A3_Landscape", "relationships" : [ { - "id" : "27" + "id" : "103", + "vertices" : [ { + "x" : 1708, + "y" : 2058 + } ] }, { - "id" : "39" + "id" : "106" }, { - "id" : "45" + "id" : "109", + "vertices" : [ { + "x" : 2008, + "y" : 2058 + } ] + }, { + "id" : "111" + }, { + "id" : "29" + }, { + "id" : "41", + "vertices" : [ { + "x" : 2958, + "y" : 1308 + } ] + }, { + "id" : "47" + }, { + "id" : "49" }, { "id" : "56" }, { - "id" : "59" + "id" : "58", + "vertices" : [ { + "x" : 3708, + "y" : 1308 + } ] }, { "id" : "60" }, { "id" : "62" }, { - "id" : "66" - }, { - "id" : "78" - }, { - "id" : "84" - }, { - "id" : "86" - }, { - "id" : "89" - }, { - "id" : "92" - }, { - "id" : "94" - } ], - "softwareSystemId" : "4" - }, { - "automaticLayout" : { - "applied" : false, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false - }, - "elements" : [ { - "id" : "1", - "x" : 0, - "y" : 0 - }, { - "id" : "4", - "x" : 0, - "y" : 0 - }, { - "id" : "16", - "x" : 0, - "y" : 0 - }, { - "id" : "17", - "x" : 0, - "y" : 0 - }, { - "id" : "18", - "x" : 0, - "y" : 0 - }, { - "id" : "19", - "x" : 0, - "y" : 0 - }, { - "id" : "20", - "x" : 0, - "y" : 0 - }, { - "id" : "21", - "x" : 0, - "y" : 0 - }, { - "id" : "24", - "x" : 0, - "y" : 0 - }, { - "id" : "25", - "x" : 0, - "y" : 0 - } ], - "externalSoftwareSystemBoundariesVisible" : false, - "generatedKey" : true, - "key" : "Container-002", - "order" : 8, - "relationships" : [ { - "id" : "47" - }, { - "id" : "49" - }, { - "id" : "50" - }, { - "id" : "51" - }, { - "id" : "52" - }, { - "id" : "53" - }, { - "id" : "54" - }, { - "id" : "57" - }, { - "id" : "58" - }, { - "id" : "65" - }, { - "id" : "68" - }, { - "id" : "70" - }, { - "id" : "72" - }, { - "id" : "74" - }, { - "id" : "76" - } ], - "softwareSystemId" : "15" - } ], - "systemContextViews" : [ { - "automaticLayout" : { - "applied" : false, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false - }, - "elements" : [ { - "id" : "2", - "x" : 0, - "y" : 0 - }, { - "id" : "3", - "x" : 0, - "y" : 0 - }, { - "id" : "4", - "x" : 0, - "y" : 0 - }, { - "id" : "15", - "x" : 0, - "y" : 0 - }, { - "id" : "22", - "x" : 0, - "y" : 0 - }, { - "id" : "23", - "x" : 0, - "y" : 0 - }, { - "id" : "25", - "x" : 0, - "y" : 0 - }, { - "id" : "31", - "x" : 0, - "y" : 0 - }, { - "id" : "32", - "x" : 0, - "y" : 0 - }, { - "id" : "43", - "x" : 0, - "y" : 0 - } ], - "enterpriseBoundaryVisible" : true, - "generatedKey" : true, - "key" : "SystemContext-001", - "order" : 2, - "relationships" : [ { - "id" : "28" - }, { - "id" : "40" - }, { - "id" : "46" - }, { - "id" : "57" - }, { - "id" : "59" - }, { - "id" : "61" - }, { - "id" : "63" - }, { - "id" : "87" - }, { - "id" : "90" - }, { - "id" : "93" - }, { - "id" : "95" - } ], - "softwareSystemId" : "4" - }, { - "automaticLayout" : { - "applied" : false, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false - }, - "elements" : [ { - "id" : "4", - "x" : 0, - "y" : 0 - }, { - "id" : "32", - "x" : 0, - "y" : 0 - } ], - "enterpriseBoundaryVisible" : true, - "generatedKey" : true, - "key" : "SystemContext-002", - "order" : 6, - "relationships" : [ { - "id" : "90" - } ], - "softwareSystemId" : "32" - }, { - "automaticLayout" : { - "applied" : false, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false - }, - "elements" : [ { - "id" : "1", - "x" : 0, - "y" : 0 - }, { - "id" : "4", - "x" : 0, - "y" : 0 - }, { - "id" : "15", - "x" : 0, - "y" : 0 - }, { - "id" : "24", - "x" : 0, - "y" : 0 - }, { - "id" : "25", - "x" : 0, - "y" : 0 - } ], - "enterpriseBoundaryVisible" : true, - "generatedKey" : true, - "key" : "SystemContext-003", - "order" : 7, - "relationships" : [ { - "id" : "40" - }, { - "id" : "48" - }, { - "id" : "55" - }, { - "id" : "57" - }, { - "id" : "59" - } ], - "softwareSystemId" : "15" - }, { - "automaticLayout" : { - "applied" : false, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false - }, - "elements" : [ { - "id" : "4", - "x" : 0, - "y" : 0 - }, { - "id" : "22", - "x" : 0, - "y" : 0 - } ], - "enterpriseBoundaryVisible" : true, - "generatedKey" : true, - "key" : "SystemContext-004", - "order" : 9, - "relationships" : [ { - "id" : "28" - } ], - "softwareSystemId" : "22" - }, { - "automaticLayout" : { - "applied" : false, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false - }, - "elements" : [ { - "id" : "4", - "x" : 0, - "y" : 0 - }, { - "id" : "43", - "x" : 0, - "y" : 0 - } ], - "enterpriseBoundaryVisible" : true, - "generatedKey" : true, - "key" : "SystemContext-005", - "order" : 10, - "relationships" : [ { - "id" : "46" - } ], - "softwareSystemId" : "43" - }, { - "automaticLayout" : { - "applied" : false, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false - }, - "elements" : [ { - "id" : "4", - "x" : 0, - "y" : 0 - }, { - "id" : "23", - "x" : 0, - "y" : 0 - } ], - "enterpriseBoundaryVisible" : true, - "generatedKey" : true, - "key" : "SystemContext-006", - "order" : 11, - "relationships" : [ { - "id" : "95" - } ], - "softwareSystemId" : "23" - }, { - "automaticLayout" : { - "applied" : false, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false - }, - "elements" : [ { - "id" : "4", - "x" : 0, - "y" : 0 - }, { - "id" : "31", - "x" : 0, - "y" : 0 - } ], - "enterpriseBoundaryVisible" : true, - "generatedKey" : true, - "key" : "SystemContext-007", - "order" : 12, - "relationships" : [ { - "id" : "87" - }, { - "id" : "93" - } ], - "softwareSystemId" : "31" - } ], - "systemLandscapeViews" : [ { - "automaticLayout" : { - "applied" : true, - "edgeSeparation" : 0, - "implementation" : "Graphviz", - "nodeSeparation" : 300, - "rankDirection" : "TopBottom", - "rankSeparation" : 300, - "vertices" : false - }, - "dimensions" : { - "height" : 2774, - "width" : 4417 - }, - "elements" : [ { - "id" : "1", - "x" : 2417, - "y" : 165 - }, { - "id" : "2", - "x" : 200, - "y" : 865 - }, { - "id" : "3", - "x" : 900, - "y" : 865 - }, { - "id" : "4", - "x" : 1625, - "y" : 1565 - }, { - "id" : "15", - "x" : 3100, - "y" : 915 - }, { - "id" : "22", - "x" : 2350, - "y" : 915 - }, { - "id" : "23", - "x" : 1600, - "y" : 915 - }, { - "id" : "24", - "x" : 3117, - "y" : 165 - }, { - "id" : "25", - "x" : 3817, - "y" : 165 - }, { - "id" : "31", - "x" : 1625, - "y" : 2165 - }, { - "id" : "32", - "x" : 875, - "y" : 2165 - }, { - "id" : "43", - "x" : 2375, - "y" : 2165 - } ], - "enterpriseBoundaryVisible" : true, - "generatedKey" : true, - "key" : "SystemLandscape-001", - "order" : 1, - "relationships" : [ { - "id" : "28" - }, { - "id" : "40", + "id" : "64", "vertices" : [ { - "x" : 2950, - "y" : 1265 + "x" : 729, + "y" : 1308 } ] }, { - "id" : "46" - }, { - "id" : "48" - }, { - "id" : "55" - }, { - "id" : "57", - "vertices" : [ { - "x" : 3700, - "y" : 1265 - } ] - }, { - "id" : "59" - }, { - "id" : "61" - }, { - "id" : "63", - "vertices" : [ { - "x" : 721, - "y" : 1265 - } ] - }, { - "id" : "87", - "vertices" : [ { - "x" : 1700, - "y" : 2015 - } ] - }, { - "id" : "90" - }, { - "id" : "93", - "vertices" : [ { - "x" : 2000, - "y" : 2015 - } ] - }, { - "id" : "95" + "id" : "97" } ] } ] } diff --git a/docs/platform/views.dsl b/docs/platform/views.dsl index e69de29bb2..93ed08ccd8 100644 --- a/docs/platform/views.dsl +++ b/docs/platform/views.dsl @@ -0,0 +1,4 @@ +component server.icons "icons_service" { + include * + autolayout tb +} diff --git a/docs/shared.models.dsl b/docs/shared.models.dsl index 4a40fdc944..7fc2935919 100644 --- a/docs/shared.models.dsl +++ b/docs/shared.models.dsl @@ -74,3 +74,9 @@ bw_controlled = group "Bitwarden Controlled" { } key_connector = softwareSystem "Key Connector" } + +self_hosted_instances = softwareSystem "Self-Hosted Instances" { + tags "Self-Hosted" + tags "External" + description "Self-hosted instances of Bitwarden servers" +} diff --git a/docs/shared.relationships.dsl b/docs/shared.relationships.dsl index cedae2cc00..0d3eb7c4a2 100644 --- a/docs/shared.relationships.dsl +++ b/docs/shared.relationships.dsl @@ -27,3 +27,21 @@ clients.desktop -> server.identity "Authenticates With" server.api -> server.identity "Validates JWTs with" { url "https://bitwarden.com" } +clients -> server.events "Posts local usage events to" + +# Database Relationships + +server.api -> server.database "Queries" +server.portal -> server.database "Queries" + +# queue Relationships +server.api -> server.events_queue "Sends events to" +server.events -> server.events_queue "Sends events to" +server.api -> server.mail_queue "Sends emails to" +server.api -> server.notifications_queue "Sends notifications to" +server.notifications -> server.notifications_queue "Sends notifications to" +server.events_queue -> server.events_processor "Processes events from" +server.mail_queue -> server.portal "Processes emails from" + +# self host phone home +self_hosted_instances -> server.notifications "Sends push notification proxy requests to"