# odevmo/security-scanner-odoo architecture

> Architecture diagram of the GitHub repository odevmo/security-scanner-odoo, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-08-05). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/odevmo/security-scanner-odoo
- Repository: https://github.com/odevmo/security-scanner-odoo

## Overview

#### Purpose and Runtime
This is an Odoo addon that records and runs security-posture diagnostics against the current Odoo deployment. It runs inside the Odoo Python server and uses Odoo ORM/configuration APIs rather than a separate scanner service. Module metadata and dependency/loading behavior originate in `security_scanner_suite/__manifest__.py`.

#### Module Entry and Installation Surface
Odoo discovers the addon through `security_scanner_suite/__manifest__.py`, then imports model registrations through `security_scanner_suite/__init__.py` and `security_scanner_suite/models/__init__.py`. XML data, views, and access controls are loaded by the module manifest:
- `security_scanner_suite/data/security_scan_sequence.xml`
- `security_scanner_suite/views/security_scan_views.xml`
- `security_scanner_suite/security/ir.model.access.csv`

#### Scan Record Domain Model
The core component is the scan model in `security_scanner_suite/models/security_scan.py`. It represents an individual scan, including its generated identity, state/progress, and HTML-formatted findings. A scan is persisted as an Odoo record, enabling administrators to create, rerun, and review historical scan outputs through standard ORM-backed storage.

#### Scan Execution and Checks
The scan action implemented in `security_scanner_suite/models/security_scan.py` is the principal control-flow entry point. It evaluates server and Odoo security settings, including master password presence, HTTPS/proxy behavior, logging configuration, database filtering/listing controls, and access-rule coverage for non-core models. Findings are aggregated into a human-readable HTML result field and the record state is updated after execution.

#### Odoo Configuration and Metadata Boundary
Checks cross from addon business logic into Odoo runtime configuration and model metadata. The scanner reads deployment-level configuration, so results depend on the active Odoo server process and its configured options. Access-rule verification also queries Odoo model/access-control metadata, distinguishing framework/core models from custom or non-core models. This boundary is concentrated in `security_scanner_suite/models/security_scan.py`.

#### UI and Operator Workflow
Administrators use the Security Scan menu, list/form views, and a form action to create and run scans. The view layer renders scan state and formatted HTML findings:
- `security_scanner_suite/views/security_scan_views.xml`
- `security_scanner_suite/models/security_scan.py`

The expected flow is: operator creates a scan record → invokes “Run Scan” → model action evaluates configuration and access metadata → persisted results are displayed in the scan form.

#### Identity, Authorization, and Sequencing
Odoo ACLs govern who can access scan records through `security_scanner_suite/security/ir.model.access.csv`. Automatic scan naming/traceability is provided by the Odoo sequence declaration in `security_scanner_suite/data/security_scan_sequence.xml`. These components rely on Odoo’s built-in authentication, authorization, database, and menu/action infrastructure; no external API, worker, scheduler, or standalone frontend is indicated.

Main entry points: [`security_scanner_suite/models/security_scan.py`](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/models/security_scan.py) (Security Scan Model), [`security_scanner_suite/__manifest__.py`](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/__manifest__.py) (Module Manifest), [`security_scanner_suite/views/security_scan_views.xml`](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/views/security_scan_views.xml) (Scan Views & Action), [`security_scanner_suite/__init__.py`](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/__init__.py) (Model Registration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_addon["Security Scanner Addon"]
  node_manifest["Module Manifest<br/>Odoo manifest<br/>[__manifest__.py]"]
  node_registration["Model Registration<br/>Python imports<br/>[__init__.py]"]
  node_model_registration["Models Package<br/>Python imports<br/>[__init__.py]"]
  node_scan_model["Security Scan Model<br/>Odoo ORM model<br/>[security_scan.py]"]
  node_views["Scan Views &amp; Action<br/>Odoo XML views"]
  node_sequence["Scan Sequence<br/>Odoo XML data"]
  node_acl["Scan Record ACLs<br/>Odoo access rules"]
end

subgraph group_odoo["Odoo Runtime"]
  node_orm_storage[("Odoo Database<br/>ORM-backed storage")]
  node_runtime_config["Server Configuration<br/>Odoo runtime config"]
  node_model_metadata["Model &amp; Access Metadata<br/>Odoo metadata"]
  node_odoo_ui["Odoo Web Client<br/>Odoo UI"]
end

node_operator(("Administrator<br/>user"))

node_manifest -->|"loads"| node_registration
node_registration -->|"imports"| node_model_registration
node_model_registration -->|"registers"| node_scan_model
node_manifest -->|"loads"| node_views
node_manifest -->|"loads"| node_sequence
node_manifest -->|"loads"| node_acl
node_operator -->|"uses"| node_odoo_ui
node_odoo_ui -->|"renders"| node_views
node_views -->|"creates and runs"| node_scan_model
node_acl -->|"authorizes access"| node_scan_model
node_sequence -->|"names records"| node_scan_model
node_scan_model -->|"evaluates"| node_runtime_config
node_scan_model -->|"checks access coverage"| node_model_metadata
node_scan_model -->|"persists results"| node_orm_storage
node_orm_storage -->|"loads history"| node_scan_model
node_scan_model -->|"returns state and HTML findings"| node_views

click node_manifest "https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/__manifest__.py"
click node_registration "https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/__init__.py"
click node_model_registration "https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/models/__init__.py"
click node_scan_model "https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/models/security_scan.py"
click node_views "https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/views/security_scan_views.xml"
click node_sequence "https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/data/security_scan_sequence.xml"
click node_acl "https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/security/ir.model.access.csv"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_manifest,node_registration,node_model_registration,node_scan_model,node_views,node_sequence,node_acl toneBlue
class node_orm_storage,node_runtime_config,node_model_metadata,node_odoo_ui toneAmber
class node_operator toneNeutral
```

## Components

### Security Scanner Addon

- [Module Manifest](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/__manifest__.py): Odoo manifest · Declares dependencies and loaded addon resources. · `security_scanner_suite/__manifest__.py`
- [Model Registration](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/__init__.py): Python imports · `security_scanner_suite/__init__.py`
- [Models Package](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/models/__init__.py): Python imports · `security_scanner_suite/models/__init__.py`
- [Security Scan Model](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/models/security_scan.py): Odoo ORM model · Persists scan state, progress, identity, and HTML findings; runs diagnostics. · `security_scanner_suite/models/security_scan.py`
- [Scan Views & Action](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/views/security_scan_views.xml): Odoo XML views · Provides menu, list/form views, and the Run Scan action. · `security_scanner_suite/views/security_scan_views.xml`
- [Scan Sequence](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/data/security_scan_sequence.xml): Odoo XML data · Generates scan names for traceability. · `security_scanner_suite/data/security_scan_sequence.xml`
- [Scan Record ACLs](https://github.com/odevmo/security-scanner-odoo/blob/main/security_scanner_suite/security/ir.model.access.csv): Odoo access rules · Controls access to security scan records. · `security_scanner_suite/security/ir.model.access.csv`

### Odoo Runtime

- **Odoo Database**: ORM-backed storage · Stores scan records and completed findings history.
- **Server Configuration**: Odoo runtime config · Active deployment options evaluated by security checks.
- **Model & Access Metadata**: Odoo metadata · Provides model and access-rule data for coverage checks.
- **Odoo Web Client**: Odoo UI · Renders addon views and dispatches form actions.

### Other components

- **Administrator**: user

## Connections

- Module Manifest → Model Registration: loads
- Model Registration → Models Package: imports
- Models Package → Security Scan Model: registers
- Module Manifest → Scan Views & Action: loads
- Module Manifest → Scan Sequence: loads
- Module Manifest → Scan Record ACLs: loads
- Administrator → Odoo Web Client: uses
- Odoo Web Client → Scan Views & Action: renders
- Scan Views & Action → Security Scan Model: creates and runs
- Scan Record ACLs → Security Scan Model: authorizes access
- Scan Sequence → Security Scan Model: names records
- Security Scan Model → Server Configuration: evaluates
- Security Scan Model → Model & Access Metadata: checks access coverage
- Security Scan Model → Odoo Database: persists results
- Odoo Database → Security Scan Model: loads history
- Security Scan Model → Scan Views & Action: returns state and HTML findings
