Description
Data model
The current data model and data flow, reads the generated.yaml
from the DSOMM web server (either the public dsomm.owasp.org. or a private one).
The file contains a list of activity info (all dimensions, subdimensions, activity description, , as well as each team's progress of implementations and evidence.
The generated.yaml
if either copied from DSOMM-data or generated from an internal process in the organisation.
A user can update the team's progress in the Circular Heatmap. Then (more or less) a copy of the generated.yaml
is stored in the browser's localStorage.
Drawbacks
The current model is storing activity description data in localStorage. And mixes "slowly changing information" with "live data" (i.e. activity + team status).
The current load process is duplicated in the matrix, activity description, circular heatmap, dependency graph, and mapping component. This leads to unnecessary load time, and complex maintenance.
Suggestion
1) Create a central load service
I suggest we create a new service that loads the yaml files, and merging this with progress data stored in localStorage.
This service will handle the race conditions, and let the other components just consume the already loaded data.
Benefit: Cleaner architecture, easier debugging, speed improvements and increased robustness when navigating in DSOMM.
2) Split the Activity info and Team's progress
I suggest we split the current generated.yaml
file into:
- activity info
- team progress
(I'm completely open to name suggestions.)
-
The Activity Info contains the (fairly) static information contained in today's activity object.
-
The Team Progress contains team name,
teamsImplemented
andteamsEvidence
. The Team Progress have a yaml file on the server, where any centralized progress may be updated. -
The Team Progress will be stored in localStorage if any progress is changed in the browser. It will be merged with any updates from the server file when loading.
-
The Team Progress may be exported, as today, to update the server file.
This approach will also allow a user to change teams' names even for a public site such as dsomm.owasp.org.
Mermaid diagram
Here is a draft of the suggestion.
graph LR
DsommAct(activities.yaml)
DataAct --> DsommAct
subgraph "GitHub DSOMM-data"
DataMeta(meta.yaml)
Build.yaml --> DataAct
Deploy.yaml --> DataAct
PathManagement.yaml --> DataAct
Other("... .yaml") --> DataAct
end
DataMeta --> DsommMeta
DataAct(activities.yaml)
DsommCustAct(custom-activities.yml)
subgraph DSOMM Web server
DsommMeta(meta.yaml)
DsommAct
DsommCustAct
end
DsommMeta --> BrowserTeams("Teams")
DsommAct --> BrowserAct("Activities")
DsommCustAct --> BrowserCustAct(custom-activities.yml)
subgraph Browser
BrowserTeams -.-> BrowserProgress
BrowserAct -.-> BrowserProgress
BrowserCustAct-.-> BrowserProgress
BrowserProgress("TeamProgress")
end
subgraph Browser localStorage
BrowserTeams <--> LocalTeams("Teams")
BrowserProgress <--> LocalProgress("TeamProgress")
end
(Mermaid is great. But has some limits. The following draft sketch should have a TeamProgress in the DSOMM Webserver, but then the drawing went bonkers, so I left it out.)
Comments?
@wurstbrot and @0x41head: Any comments on this?
I see that @yashchauhan4579 created a PR #379 just now, to upgrade Angular, aiming for Angular 19, down the line. (👍 🙌 🏆 )
They published that while I was writing this. I think it would be unwise to run these two initiatives in parallel. Even if they have different focus, there will be clashes. Nevertheless, I think it is still worthwhile discussing this idea, and planning the future.