Skip to content

Commit 9d4a29f

Browse files
committed
New data model.
Centralized data loader. New Teams page. Massive refactoring.
1 parent a2d3f19 commit 9d4a29f

File tree

126 files changed

+26424
-3749
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

126 files changed

+26424
-3749
lines changed

.eslintrc.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
{
22
"root": true,
33
"ignorePatterns": [
4-
"projects/**/*"
4+
"projects/**/*",
5+
"*.css"
56
],
67
"overrides": [
78
{

.prettierrc.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
"arrowParens": "avoid",
88
"trailingComma": "es5",
99
"bracketSameLine": true,
10-
"printWidth": 80,
10+
"printWidth": 100,
1111
"endOfLine": "auto"
1212
}

INSTALL.md

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
# Install DSOMM
2+
The DSOMM application is frontend only. Data is only stored in server side YAML files, and in the localStorage im the user's browser.
3+
4+
The application can be deployed in many ways. using a number of Docker, Amazon AWS and a standalone Angular service.
5+
6+
## Configuration
7+
8+
The DSOMM activities as maintained in a separate GitHub repository. For the latest version, check out
9+
10+
11+
# Docker
12+
1. Install [Docker](https://www.docker.com)
13+
1. Download and run DSOMM: \
14+
`docker pull wurstbrot/dsomm:latest` \
15+
`docker run --rm -p 8080:8080 wurstbrot/dsomm:latest`
16+
1. Open DSOMM on http://localhost:8080
17+
18+
If you want to override the default `generated.yaml` you can mount this file when starting the docker command.
19+
20+
`docker run --rm --volume $PWD/generated.yaml:/srv/assets/YAML/generated/generated.yaml -p 8080:8080 wurstbrot/dsomm`
21+
22+
**NB!** Note that the docker command requires an absolute path to the local file. (Hence, the use of the `$PWD` variable. On Windows, substitute `$PWD` with `%CD%`.)
23+
24+
25+
26+
# Amazon
27+
28+
29+
30+
31+
32+
33+
34+
35+
# Angular build - Any web server
36+
Since this is a frontend application any web server
37+
- Clone the DSOMM repo
38+
39+
- **NB!** The DSOMM activities are maintained separately. Download the `generated.yaml` and put it in the required folder
40+
```
41+
git clone https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel.git
42+
cd DevSecOps-MaturityModel
43+
npm install
44+
curl https://raw.githubusercontent.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/main/src/assets/YAML/generated/generated.yaml -o src/assets/YAML/generated/generated.yaml
45+
ng build
46+
```
47+
The files that were created in the subfolder `dist`
48+
49+
50+
51+
52+
53+
54+
55+
56+
57+
58+
59+
60+
61+
62+
63+
64+
# Assessment
65+
66+
In case you would like to perform a DevSecOps assessment, the following tools are available:
67+
68+
* Usage of the applicaton in a `container`.
69+
* Development of an export to [OWASP Maturity Models](https://github.com/OWASP/Maturity-Models) (recommended for assessments with a lot of teams)
70+
* Creation of your excel sheet (not recommended, you want to use DevOps, don't even try!)
71+
72+
## Container
73+
74+
1. Install [Docker](https://www.docker.com)
75+
2. Run `docker pull wurstbrot/dsomm:latest && docker run --rm -p 8080:8080 wurstbrot/dsomm:latest`
76+
3. Browse to <http://localhost:8080> (on macOS and Windows browse to <http://192.168.99.100:8080> if you are using docker-machine instead
77+
of the native docker installation)
78+
79+
For customized DSOMM, take a look at https://github.com/wurstbrot/DevSecOps-MaturityModel-custom.
80+
81+
You can download your current state from the circular heatmap and mount it again via
82+
83+
```bash
84+
wget https://raw.githubusercontent.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/main/src/assets/YAML/generated/generated.yaml # or go to /circular-heatmap and download edited yaml (bottom right)
85+
docker run -p 8080:8080 -v /tmp/generated.yaml:/srv/assets/YAML/generated/generated.yaml wurstbrot/dsomm:latest
86+
```
87+
88+
.
89+
90+
This approach also allows teams to perform self assessment with changes tracked in a repository.
91+
92+
## Amazon EC2 Instance
93+
94+
1. In the _EC2_ sidenav select _Instances_ and click _Launch Instance_
95+
2. In _Step 1: Choose an Amazon Machine Image (AMI)_ choose an _Amazon
96+
Linux AMI_ or _Amazon Linux 2 AMI_
97+
3. In _Step 3: Configure Instance Details_ unfold _Advanced Details_ and
98+
copy the script below into _User Data_
99+
4. In _Step 6: Configure Security Group_ add a _Rule_ that opens port 80
100+
for HTTP
101+
5. Launch your instance
102+
6. Browse to your instance's public DNS
103+
104+
```bash
105+
#!/bin/bash
106+
service docker start
107+
docker run -d -p 80:8080 wurstbrot/dsomm:latest
108+
```
109+
110+
## Activity Definitions
111+
The definition of the activities are in the [data-repository](https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data).
112+
113+
## Teams and Groups
114+
To customize these teams, you can create your own [meta.yaml](src/assets/meta.yaml) file with your unique team definitions.
115+
116+
Assessments within the framework can be based on either a team or a specific application, which can be referred to as the context. Depending on how you define the context or teams, you may want to group them together.
117+
118+
Here are a couple of examples to illustrate this, in breakers the DSOMM word:
119+
- Multiple applications (teams) can belong to a single overarching team (application).
120+
- Multiple teams (teams) can belong to a larger department (group).
121+
122+
Feel free to create your own [meta.yaml](src/assets/meta.yaml) file to tailor the framework to your specific needs and mount it in your environment (e.g. kubernetes or docker).
123+
Here is an example to start docker with customized meta.yaml:
124+
```
125+
# Customized meta.yaml
126+
cp src/assets/YAML/meta.yaml .
127+
docker run -v $(pwd)/meta.yaml:/srv/assets/YAML/meta.yaml -p 8080:8080 wurstbrot/dsomm
128+
129+
# Customized meta.yaml and generated.yaml
130+
cp src/assets/YAML/meta.yaml .
131+
cp $(pwd)/src/assets/YAML/generated/generated.yaml .
132+
docker run -v $(pwd)/meta.yaml:/srv/assets/YAML/meta.yaml -v $(pwd)/generated.yaml:/srv/assets/YAML/generated/generated.yaml -p 8080:8080 wurstbrot/dsomm
133+
```
134+
135+
In the corresponding [dimension YAMLs](https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/tree/main/src/assets/YAML/default), use:
136+
```
137+
[...]
138+
teamsImplemented:
139+
Default: false
140+
B: true
141+
C: true
142+
teamsEvidence:
143+
B: All team members completed OWASP Secure Coding Dojo training on 2025-01-11.
144+
C: |
145+
The pentest report from 2025 has been split into Jira tasks under
146+
[TODO-123](https://jira.example.com/issues/TODO-123).
147+
148+
_2025-04-01:_ All fixes of **critical** findings are deployed to production.
149+
```
150+
The `|` is yaml syntax to indicate that the evidence spans multiple lines. Markdown
151+
syntax can be used. The evidence is currently visible on the activity from the Matrix page.
152+
153+
# Back link
154+
155+
- [OWASP DevSecOps maturity model page](https://dsomm.timo-pagel.de/)
156+
- [OWASP DevSecOps project page](https://owasp.org/www-project-devsecops-maturity-model/)
157+
- [OWASP](https://owasp.org)
158+
159+
# Your help is needed to perform
160+
161+
* Adding a manual on how to use DSOMM
162+
* Integration of Incident Response
163+
* DevSecOps Toolchain Categorization
164+
* App Sec Maturity Models Mapping
165+
* CAMS Categorization
166+
* Adding assessment questions
167+
168+
# Multilanguage support
169+
Multilanguage support is not given currently and not planned.
170+
171+
# Sponsors
172+
173+
[![Timo Pagel IT-Consulting](https://raw.githubusercontent.com/DefectDojo/Documentation/master/doc/img/timo-pagel-logo.png)](https://pagel.pro)
174+
175+
[![Apprio Inc](https://github.com/wurstbrot/DevSecOps-MaturityModel/raw/master-old/assets/images/Apiiro_black_logo.png)](https://apiiro.com/)
176+
177+
[![Heroku (hosting)](https://github.com/wurstbrot/DevSecOps-MaturityModel/raw/master/src/assets/images/sponsors/heroku.png)](https://www.heroku.com/open-source-credit-program)
178+
179+
# Donations
180+
181+
If you are using the model or you are inspired by it, want to help but don't want to create pull requests? You can donate at the [OWASP Project Wiki Page](https://owasp.org/donate/?reponame=www-project-devsecops-maturity-model&title=OWASP+Devsecops+Maturity+Model). Donations might be used for the design of logos/images/design or travels.
182+
183+
# License
184+
185+
This program is free software: you can redistribute it and/or modify it under the terms of the [GPL 3](https://www.gnu.org/licenses/) license.
186+
187+
The intellectual property (content in the _data_ folder) is licensed under Attribution-ShareAlike.
188+
An example attribution by changing the content:
189+
> This work is based on the [OWASP DevSecOps Maturity Model](https://dsomm.timo-pagel.de).
190+
191+
The OWASP DevSecOps Maturity Model and any contributions are Copyright © by Timo Pagel 2017-2022.
192+
193+
194+
195+
196+
197+
198+
For customized DSOMM, take a look at https://github.com/wurstbrot/DevSecOps-MaturityModel-custom.
199+
200+
You can download your current state from the circular heatmap and mount it again via
201+
202+
```bash
203+
wget https://raw.githubusercontent.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/main/src/assets/YAML/generated/generated.yaml # or go to /circular-heatmap and download edited yaml (bottom right)
204+
docker run -p 8080:8080 -v /tmp/generated.yaml:/srv/assets/YAML/generated/generated.yaml wurstbrot/dsomm:latest
205+
```
206+

Issue.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# Changing team names has no effect
2+
3+
## Expected outcome
4+
* Updating the teams names and groups in `meta.yaml` should be visible in the browser after a refresh
5+
6+
## Actual outcome
7+
8+
## Steps to reproduce
9+
1) Clone the repo \
10+
`git clone https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel.git`
11+
12+
2) Install dependencies \
13+
`cd DevSecOps-MaturityModel` \
14+
`npm install`
15+
16+
3) Download the default teams setup \
17+
`curl https://raw.githubusercontent.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/main/src/assets/YAML/generated/generated.yaml -o src/assets/YAML/generated/generated.yaml`
18+
19+
4) Start the web server \
20+
`ng server` (or maybe `npx ng server`)
21+
22+
5) Open *incognito mode* os a web browser and visit \
23+
http://localhost:4200/circular-heatmap
24+
25+
6) Verify that the teams are 'Default', 'B' and 'C'
26+
27+
7) Fill in data for some of the teams
28+
- Click on a sector in the circle (e.g. *Build* Level 1)
29+
- Expand *Defined build process*
30+
- Tick all three teams
31+
- Click on another sector in the circle (e.g. *Deployment* Level 1)
32+
- Expand *Defined deployment process*
33+
- Tick 'Default' and 'B' only
34+
35+
8) Download `generated.yaml`
36+
37+
### Change names of teams
38+
9) Open `src\assets\YAML\meta.yaml`
39+
10) Edit team names in 'meta'
40+
- Rename `Default` to `A` in `teams` and `teamGroups`
41+
- Add `D` on `teams` and `teamGroups.GroupA`
42+
- Add `GroupD: ['C', 'D']` under `teamGroups`
43+
11) Update team names in 'generated'
44+
- Rename all `Default:` to `A:` in the downloaded `generated.yaml`
45+
- Add `D: true` on line 130 for *Defined build process*
46+
47+
12) Replace `src/assets/YAML/generated/generated.yaml` with the newly modified version
48+
49+
### Verify data in your browser
50+
13) Refresh your browser
51+
* The team filters are showing the new names
52+
* But expanding the activity cards only show `B` and `C`
53+
54+
55+
56+
57+
58+
59+

TODO.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# File issue:
2+
- UI not responsive to screen size
3+
- Changing team names has no effect
4+
- Default installation (no generated.yaml) does not work
5+
- Filter illogical / not working as expected
6+
7+
8+
# ToDo
9+
- App: Alert when generated.yaml is not found
10+
- App: Filter radio buttons: Default, no selections: meaning all selected
11+
- App: Make radio button, and use Ctrl-Click to multiple (hold click on mobile)
12+
- App: Fix bug, that greys out all sectors on startup
13+
- App: Onboarding: Define teams, Setup generated.yaml (is 'generated.yaml' a good name?)
14+
15+
- Heatmap: TeamGroup filter: No selection means all selected
16+
- Heatmap: TeamGroup filter: Fix removing last filter
17+
- Heatmap: Add Reset data under settings
18+
- Heatmap: Highlight selected sector
19+
<use id="cursor" href="#segment-Build-Level-2" fill="red" stroke-width="5" stroke="red"></use>
20+
- Heatmap: Alter current bright yellow hover
21+
22+
- Heatmap modal: Default: Close some tabs
23+
- Heatmap modal: Store opened/closed tabs in local storage
24+
25+
- Mapping: Add "Sort by:"
26+
- Mapping: Fix: Sort by ISO 2017 is DESC (and 12.2)
27+
28+
- Matrix: Make radio button, and use Ctrl-Click to multiple (hold click on mobile)
29+
30+
# Doing
31+
- Heatmap: Fix color calculations, to base on TeamVisible
32+
- Heatmap: Allow non-standard team names and groups
33+
34+
# Done
35+
- Heatmap: Make heatmap the start page
36+
- Heatmap: Center labels on sectors
37+
- Heatmap: Fix calculations of heatmap dimension
38+
- Heatmap: Toggle filters' visibility
39+
- Heatmap: (Re)move Reset button
40+
- Heatmap: Fix responsive layout

0 commit comments

Comments
 (0)