Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
e48ec9f
Merge branch 'v4-base'
vbakke Sep 21, 2025
a363b28
Linting
vbakke Sep 21, 2025
d138f65
Removed obsolete files
vbakke Sep 21, 2025
7788142
Install: Remove empty lines
vbakke Sep 21, 2025
a7fee25
Support deployments to URL subfolders
vbakke Sep 23, 2025
63999ef
Dependency: Smaller panel, in center
vbakke Sep 24, 2025
7945999
Dependency: Include dependents, as well as dependsOn
vbakke Sep 24, 2025
6fc3242
Dependency: Add boxes based on text width
vbakke Sep 24, 2025
eef6df4
Dependency: Improve layout
vbakke Sep 24, 2025
9934322
Linting
vbakke Sep 24, 2025
3548fd2
Fixed unit test
vbakke Sep 24, 2025
91c17ba
Merge pull request #1 from vbakke/v4-feat/dependancy-graph
vbakke Sep 24, 2025
49b558e
Activities: Updated to v4 level 1 review
Sep 22, 2025
391fa0a
Dependency: Fixed nfOnChange
vbakke Sep 25, 2025
1eef470
Linting
vbakke Sep 26, 2025
f4d77d9
Renamed variables
vbakke Sep 27, 2025
8b75cef
Remove unused variable
vbakke Sep 27, 2025
f4e232c
Removed experimental code
vbakke Sep 28, 2025
5e617ba
Updated url links
vbakke Sep 28, 2025
e8d7bb2
Dependency: Support dark mode
vbakke Sep 28, 2025
a416f31
Dependency: Swap uuids with activity names
vbakke Sep 28, 2025
cd6b6b6
Dependency: Added unit test for substituting dependsOn uuid
vbakke Sep 28, 2025
f0447d0
Dependency: Make node clickable, for navigation
vbakke Sep 28, 2025
c4b8d66
Updated roadmap
vbakke Sep 29, 2025
5f68031
Settings: First commit
vbakke Oct 3, 2025
720eef8
Settings: Added max level
vbakke Oct 3, 2025
7f48666
Settings: Using max level
vbakke Oct 3, 2025
2cdb129
Settings: Uses dateformat and fixes maxLevel
vbakke Oct 4, 2025
a8f0571
Refactor ProgressDefinition into an object, not just a value
vbakke Oct 4, 2025
2a63d79
Settings: Added Progress Definitions
vbakke Oct 5, 2025
4908251
Fixed: Dependency graph no longer hijacks other svgs
vbakke Oct 8, 2025
f1eb441
Heatmap: Outer rim: Slight increase font size
vbakke Oct 8, 2025
4c9de9b
Merge branch 'v4-dev' into v4-feat/settings
vbakke Oct 8, 2025
6e75fe3
Settings: Progress definition: UI improvements
vbakke Oct 9, 2025
ef2ea56
Settings: Progress definition: Cancel edit mode
vbakke Oct 9, 2025
4cfdb48
Settings: Progress definition: Accept changes
vbakke Oct 9, 2025
4eb0495
Heatmap: Include activity uuid in URL
vbakke Oct 11, 2025
017bb46
Heatmap: Improved angular navigation
vbakke Oct 11, 2025
1bfb201
Heatmap: Tearing down route.fragment on destroy
vbakke Oct 11, 2025
bac6070
Merge pull request #2 from vbakke/v4-feat/dep-nav-in-heatmap
vbakke Oct 11, 2025
b8e6099
Matrix: Update icons
vbakke Oct 11, 2025
5d097a2
Matrix: Removed left-over text
vbakke Oct 11, 2025
e2a5e26
Activity: Consolidated activity view in one component
vbakke Oct 15, 2025
0db6699
Merge branch 'v4-feat/dim-icons' into v4-feat/activity-info
vbakke Oct 15, 2025
23e4a5c
Activity: Add error handling
vbakke Oct 16, 2025
23c9846
Activity: Improved styling (draft)
vbakke Oct 16, 2025
4110ef6
Activity: Improved Mapping
vbakke Oct 16, 2025
58fff88
Activity: Improve layout
vbakke Oct 16, 2025
b216066
Revert unnecessary complexity
vbakke Oct 18, 2025
795c729
General tidy. Include Level and uuid as subheader
vbakke Oct 18, 2025
dcaff0a
Merge branch 'v4-feat/activity-info' into v4-dev
vbakke Oct 18, 2025
0435704
Trimmed css
vbakke Oct 18, 2025
de384f9
Optimized CSS a little
vbakke Oct 18, 2025
07ea6a1
Fixed unit test
vbakke Oct 18, 2025
01a9d66
Mapping: Add link to activity
vbakke Oct 19, 2025
43b8362
Menu: Reorderd items
vbakke Oct 19, 2025
1aab4c8
Updated ToDo.md
vbakke Oct 19, 2025
a2e6922
Teams: Default: Can Edit
vbakke Oct 21, 2025
1a89e3a
Activity: Display Tags and Implemented by
vbakke Oct 21, 2025
9c8d8bf
Heatmap: Fixed font size rendring on Firefox
vbakke Oct 26, 2025
270b5b6
Merge branch 'v4-dev' of https://github.com/vbakke/DevSecOps-Maturity…
vbakke Oct 26, 2025
c180f11
Heatmap: Fixed recoloring with a pinch()
vbakke Oct 26, 2025
75b7a70
Updated ToDo
vbakke Nov 1, 2025
fe40b82
Merge branch 'v4-dev' into v4-feat/settings
vbakke Nov 1, 2025
be9eb62
Settings: Storing changed progress stages
vbakke Nov 1, 2025
22e58aa
Settings: Minor update
vbakke Nov 1, 2025
8a4ca3b
Merge branch 'v4-feat/settings' into v4-dev
vbakke Nov 1, 2025
06ae2e8
Settings: Fixed date format bug
vbakke Nov 1, 2025
afd60f8
Adjustments before demo
vbakke Nov 1, 2025
a854582
Heatmap: Display level and subdimension as title on hover
vbakke Nov 1, 2025
7d3c793
Teams: Add Dimension column
vbakke Nov 1, 2025
b43c39c
Teams: Fixed: Local storage issues on Firefox
vbakke Nov 2, 2025
dc2def1
Teams: Fixed: Deleting team killed the group memberships
vbakke Nov 2, 2025
b0f7b78
Heatmap: Added debug statements for coloring the heatmap
vbakke Nov 8, 2025
8c1c219
Heatmap: Adjusted condition for debug logging of color
vbakke Nov 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .eslintrc.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
{
"root": true,
"ignorePatterns": [
"projects/**/*"
"projects/**/*",
"*.css"
],
"overrides": [
{
Expand Down
2 changes: 1 addition & 1 deletion .prettierrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@
"arrowParens": "avoid",
"trailingComma": "es5",
"bracketSameLine": true,
"printWidth": 80,
"printWidth": 100,
"endOfLine": "auto"
}
151 changes: 151 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
# Install DSOMM
The DSOMM application is frontend only. Data is only stored in server side YAML files, and in the localStorage im the user's browser.

The application can be deployed in many ways. using a number of Docker, Amazon AWS and a standalone Angular service.

## Get the Activities

The _DSOMM activities_ are maintained in a separate GitHub repository. For the latest version, get it from:
- https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data


## Docker
1. Install [Docker](https://www.docker.com)
1. Download and run DSOMM: \
`docker pull wurstbrot/dsomm:latest` \
`docker run --rm -p 8080:8080 wurstbrot/dsomm:latest`
1. Open DSOMM on http://localhost:8080
- If you are using docker-machine instead of the native docker installation on Windows or macOs: open <http://192.168.99.100:8080> instead
If you want to override the default `generated.yaml` you can mount this file when starting the docker command.

`docker run --rm --volume $PWD/generated.yaml:/srv/assets/YAML/generated/generated.yaml -p 8080:8080 wurstbrot/dsomm`

**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%`.)


## Amazon EC2 Instance

1. In the _EC2_ sidenav select _Instances_ and click _Launch Instance_
2. In _Step 1: Choose an Amazon Machine Image (AMI)_ choose an _Amazon
Linux AMI_ or _Amazon Linux 2 AMI_
3. In _Step 3: Configure Instance Details_ unfold _Advanced Details_ and
copy the script below into _User Data_
4. In _Step 6: Configure Security Group_ add a _Rule_ that opens port 80
for HTTP
5. Launch your instance
6. Browse to your instance's public DNS

```bash
#!/bin/bash
service docker start
docker run -d -p 80:8080 wurstbrot/dsomm:latest
```


## Any web server - Angular build
Since DSOMM is a frontend only application, any web server can host DSOMM.
- Clone the DSOMM repo

- **NB!** The DSOMM activities are maintained separately. Download the `generated.yaml` and put it in the required folder
```
git clone https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel.git
cd DevSecOps-MaturityModel
npm install
curl https://raw.githubusercontent.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/main/src/assets/YAML/generated/generated.yaml -o src/assets/YAML/generated/generated.yaml
ng build
```
The files that were created in the subfolder `dist`

If your DSOMM application is having a subfolder in the URL (e.g. https://server.local/our-dsomm), you need to build the Angular application to prepare for this. In that case build the application by using `ng build --base-href /our-dsomm/`.


## Teams and Groups
To customize these teams, you can create your own [meta.yaml](src/assets/meta.yaml) file with your unique team definitions.

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.

Here are a couple of examples to illustrate this, in breakers the DSOMM word:
- Multiple applications (teams) can belong to a single overarching team (application).
- Multiple teams (teams) can belong to a larger department (group).

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).
Here is an example to start docker with customized meta.yaml:
```
# Customized meta.yaml
cp src/assets/YAML/meta.yaml .
docker run -v $(pwd)/meta.yaml:/srv/assets/YAML/meta.yaml -p 8080:8080 wurstbrot/dsomm

# Customized meta.yaml and generated.yaml
cp src/assets/YAML/meta.yaml .
cp $(pwd)/src/assets/YAML/generated/generated.yaml .
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
```

In the corresponding [dimension YAMLs](https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/tree/main/src/assets/YAML/default), use:
```
[...]
teamsImplemented:
Default: false
B: true
C: true
teamsEvidence:
B: All team members completed OWASP Secure Coding Dojo training on 2025-01-11.
C: |
The pentest report from 2025 has been split into Jira tasks under
[TODO-123](https://jira.example.com/issues/TODO-123).

_2025-04-01:_ All fixes of **critical** findings are deployed to production.
```
The `|` is yaml syntax to indicate that the evidence spans multiple lines. Markdown
syntax can be used. The evidence is currently visible on the activity from the Matrix page.

# Back link

- [OWASP DevSecOps maturity model page](https://dsomm.owasp.org/)
- [OWASP DevSecOps project page](https://owasp.org/www-project-devsecops-maturity-model/)
- [OWASP](https://owasp.org)

# Your help is needed to perform

* Adding a manual on how to use DSOMM
* Integration of Incident Response
* DevSecOps Toolchain Categorization
* App Sec Maturity Models Mapping
* CAMS Categorization
* Adding assessment questions

# Multi-language support
Multi-language support is not currently planned.

# Sponsors

[![Timo Pagel IT-Consulting](https://raw.githubusercontent.com/DefectDojo/Documentation/master/doc/img/timo-pagel-logo.png)](https://pagel.pro)

[![Apprio Inc](https://github.com/wurstbrot/DevSecOps-MaturityModel/raw/master-old/assets/images/Apiiro_black_logo.png)](https://apiiro.com/)

[![Heroku (hosting)](https://github.com/wurstbrot/DevSecOps-MaturityModel/raw/master/src/assets/images/sponsors/heroku.png)](https://www.heroku.com/open-source-credit-program)

# Donations

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.

# License

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.

The intellectual property (content in the _data_ folder) is licensed under Attribution-ShareAlike.
An example attribution by changing the content:
> This work is based on the [OWASP DevSecOps Maturity Model](https://dsomm.owasp.org/).

The OWASP DevSecOps Maturity Model and any contributions are Copyright © by Timo Pagel 2017-2025.


For customized DSOMM, take a look at https://github.com/wurstbrot/DevSecOps-MaturityModel-custom.

You can download your current state from the circular heatmap and mount it again via

```bash
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)
docker run -p 8080:8080 -v /tmp/generated.yaml:/srv/assets/YAML/generated/generated.yaml wurstbrot/dsomm:latest
```

59 changes: 59 additions & 0 deletions Issue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# Changing team names has no effect

## Expected outcome
* Updating the teams names and groups in `meta.yaml` should be visible in the browser after a refresh

## Actual outcome

## Steps to reproduce
1) Clone the repo \
`git clone https://github.com/devsecopsmaturitymodel/DevSecOps-MaturityModel.git`

2) Install dependencies \
`cd DevSecOps-MaturityModel` \
`npm install`

3) Download the default teams setup \
`curl https://raw.githubusercontent.com/devsecopsmaturitymodel/DevSecOps-MaturityModel-data/main/src/assets/YAML/generated/generated.yaml -o src/assets/YAML/generated/generated.yaml`

4) Start the web server \
`ng server` (or maybe `npx ng server`)

5) Open *incognito mode* os a web browser and visit \
http://localhost:4200/circular-heatmap

6) Verify that the teams are 'Default', 'B' and 'C'

7) Fill in data for some of the teams
- Click on a sector in the circle (e.g. *Build* Level 1)
- Expand *Defined build process*
- Tick all three teams
- Click on another sector in the circle (e.g. *Deployment* Level 1)
- Expand *Defined deployment process*
- Tick 'Default' and 'B' only

8) Download `generated.yaml`

### Change names of teams
9) Open `src\assets\YAML\meta.yaml`
10) Edit team names in 'meta'
- Rename `Default` to `A` in `teams` and `teamGroups`
- Add `D` on `teams` and `teamGroups.GroupA`
- Add `GroupD: ['C', 'D']` under `teamGroups`
11) Update team names in 'generated'
- Rename all `Default:` to `A:` in the downloaded `generated.yaml`
- Add `D: true` on line 130 for *Defined build process*

12) Replace `src/assets/YAML/generated/generated.yaml` with the newly modified version

### Verify data in your browser
13) Refresh your browser
* The team filters are showing the new names
* But expanding the activity cards only show `B` and `C`







4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ syntax can be used. The evidence is currently visible on the activity from the M

# Back link

- [OWASP DevSecOps maturity model page](https://dsomm.timo-pagel.de/)
- [OWASP DevSecOps maturity model page](https://dsomm.owasp.org/)
- [OWASP DevSecOps project page](https://owasp.org/www-project-devsecops-maturity-model/)
- [OWASP](https://owasp.org)

Expand Down Expand Up @@ -195,6 +195,6 @@ This program is free software: you can redistribute it and/or modify it under th

The intellectual property (content in the _data_ folder) is licensed under Attribution-ShareAlike.
An example attribution by changing the content:
> This work is based on the [OWASP DevSecOps Maturity Model](https://dsomm.timo-pagel.de).
> This work is based on the [OWASP DevSecOps Maturity Model](https://dsomm.owasp.org/).

The OWASP DevSecOps Maturity Model and any contributions are Copyright © by Timo Pagel 2017-2022.
40 changes: 40 additions & 0 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# File issue:
- UI not responsive to screen size
- Changing team names has no effect
- Default installation (no generated.yaml) does not work
- Filter illogical / not working as expected


# ToDo
- App: Alert when generated.yaml is not found
- App: Filter radio buttons: Default, no selections: meaning all selected
- App: Make radio button, and use Ctrl-Click to multiple (hold click on mobile)
- App: Fix bug, that greys out all sectors on startup
- App: Onboarding: Define teams, Setup generated.yaml (is 'generated.yaml' a good name?)

- Heatmap: TeamGroup filter: No selection means all selected
- Heatmap: TeamGroup filter: Fix removing last filter
- Heatmap: Add Reset data under settings
- Heatmap: Highlight selected sector
<use id="cursor" href="#segment-Build-Level-2" fill="red" stroke-width="5" stroke="red"></use>
- Heatmap: Alter current bright yellow hover

- Heatmap modal: Default: Close some tabs
- Heatmap modal: Store opened/closed tabs in local storage

- Mapping: Add "Sort by:"
- Mapping: Fix: Sort by ISO 2017 is DESC (and 12.2)

- Matrix: Make radio button, and use Ctrl-Click to multiple (hold click on mobile)

# Doing
- Heatmap: Fix color calculations, to base on TeamVisible
- Heatmap: Allow non-standard team names and groups

# Done
- Heatmap: Make heatmap the start page
- Heatmap: Center labels on sectors
- Heatmap: Fix calculations of heatmap dimension
- Heatmap: Toggle filters' visibility
- Heatmap: (Re)move Reset button
- Heatmap: Fix responsive layout
2 changes: 1 addition & 1 deletion angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
{
"type": "anyComponentStyle",
"maximumWarning": "2kb",
"maximumError": "4kb"
"maximumError": "6kb"
}
],
"fileReplacements": [
Expand Down
Loading