From 1bf4c23f193725a54a1e25a0073c2caaa095e872 Mon Sep 17 00:00:00 2001 From: Joakim Uddholm Date: Thu, 4 Jul 2024 12:16:14 +0200 Subject: [PATCH] feat: add tutorial box for trust boundary --- app/src/components/model/tutorial/Tutorial.js | 28 +++++++++++++++++- .../model/tutorial/img/trustboundary.png | Bin 0 -> 22077 bytes 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 app/src/components/model/tutorial/img/trustboundary.png diff --git a/app/src/components/model/tutorial/Tutorial.js b/app/src/components/model/tutorial/Tutorial.js index ca12ea29..7d947fe7 100644 --- a/app/src/components/model/tutorial/Tutorial.js +++ b/app/src/components/model/tutorial/Tutorial.js @@ -26,6 +26,7 @@ import creatingThreats from "./img/creatingthreats.gif"; import dataflowImg from "./img/dataflow.gif"; import datastoreImg from "./img/datastore.png"; import externalEntityImg from "./img/externalentity.png"; +import trustBoundaryImg from "./img/trustboundary.png"; import indicatorsImg from "./img/indicators.png"; import processImg from "./img/process.png"; import reviewRequestViewImg from "./img/reviewRequestView.png"; @@ -80,7 +81,7 @@ const General = () => ( potential threats and controls. - The diagram is built from three different types of components. Let's go + The diagram is built from four different types of components. Let's go through each and explain what they are! @@ -128,6 +129,21 @@ const ExternalEntityExplanation = () => ( ); +const TrustBoundaryExplanation = () => ( + <> + + Trust Boundaries are represented by a resizeable circular box, and are + used to indicate a boundary which multiple sub-components are inside. + + + Some concrete examples of trust boundaries could be: the AWS account that + contains parts of your service's infrastructure, the network boundary that + separates your internal network from the internet, or an EC2 which has + multiple processes running on it. + + +); + const CreateComponent = () => ( <> @@ -533,6 +549,16 @@ const steps = [ highlighted: [], position: "center", }, + { + title: "Trust Boundary", + body: TrustBoundaryExplanation, + media: { + image: trustBoundaryImg, + alt: "what the trust boundary component looks like in the diagram", + }, + highlighted: [], + position: "center", + }, { title: "Add component", body: CreateComponent, diff --git a/app/src/components/model/tutorial/img/trustboundary.png b/app/src/components/model/tutorial/img/trustboundary.png new file mode 100644 index 0000000000000000000000000000000000000000..a9ef7b0a7a809c001cdba24a6920968b06fe03da GIT binary patch literal 22077 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 P70Q}qci=wp*rk61=~B(D literal 0 HcmV?d00001