You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 and teamsEvidence. 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
Loading
(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.)
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.
Data model
The current data model and data flow, reads the
generated.yamlfrom 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.yamlif 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.yamlis 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.yamlfile into:(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,
teamsImplementedandteamsEvidence. 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.