# dariocasciato/iot-access-controller architecture

> Architecture diagram of the GitHub repository dariocasciato/iot-access-controller, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dariocasciato/iot-access-controller
- Repository: https://github.com/dariocasciato/iot-access-controller

## Overview

This repository combines a web-based access-management service with ESP8266 access-point firmware. The main workflow is an RFID card read, a server-side authorization check against assigned rights, and feedback at the access point; the web interface manages users, devices, assignments, and logs. The tree and README identify several subsystems whose source was not sampled, so those are shown at their documented boundaries without guessing internal wiring. CSV data paths are referenced in sampled code, but the data files are not in the supplied tree.

Main entry points: [`access-manager/server.js`](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/server.js) (Express server), [`access-point-firmware/src/main.cpp`](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/main.cpp) (Device loop), [`access-manager/data`](https://github.com/dariocasciato/iot-access-controller/tree/main/access-manager/data) (CSV records), [`access-point-firmware/src/Access/Access.cpp`](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/Access/Access.cpp) (Access control)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web management"]
  node_webui["Management pages"]
  node_userui["User management UI<br/>[script.js]"]
  node_pointui["Access point UI<br/>[script.js]"]
  node_assignui["Assignment UI<br/>[script.js]"]
  node_logui["Log overview UI<br/>[script.js]"]
end

subgraph group_api["Server domain API"]
  node_server["Express server<br/>[server.js]"]
  node_users["User routes<br/>[users.js]"]
  node_points["Access point routes<br/>[accessPoints.js]"]
  node_assignments["Assignment routes<br/>[assignments.js]"]
  node_accessrequest["Authorization endpoint<br/>[accessRequest.js]"]
  node_logs["Access log routes<br/>[logs.js]"]
  node_records[("CSV records")]
end

subgraph group_device["Access-point firmware"]
  node_firmware["Device loop<br/>[main.cpp]"]
  node_state["Access state<br/>[state.cpp]"]
  node_rfid["RFID reader<br/>[RFID.cpp]"]
  node_access["Access control<br/>[Access.cpp]"]
  node_host["Host API<br/>[Host.cpp]"]
  node_wifi["Wi-Fi connectivity<br/>[espWiFi.cpp]"]
  node_apihandler["HTTP API client<br/>[APIHandler.cpp]"]
  node_signal["Decision feedback<br/>[Signal.cpp]"]
end

subgraph group_io["Device hardware and storage"]
  node_flash["Flash layout<br/>[Flash.cpp]"]
  node_idstorage["ID storage<br/>[IDStorage.cpp]"]
  node_rollstorage["Rolling storage<br/>[RollStorage.cpp]"]
  node_eeprom[("EEPROM")]
end

node_operator(("Operator"))
node_reader(("RFID card"))

node_operator -->|"uses"| node_webui
node_webui -->|"loads pages"| node_server
node_userui -->|"manages users"| node_server
node_pointui -->|"manages devices"| node_server
node_assignui -->|"assigns rights"| node_server
node_logui -->|"views logs"| node_server
node_server -->|"mounts routes"| node_users
node_server -->|"mounts routes"| node_points
node_server -->|"mounts routes"| node_assignments
node_server -->|"mounts routes"| node_accessrequest
node_server -->|"mounts routes"| node_logs
node_points -->|"reads/writes"| node_records
node_assignments -->|"reads/writes"| node_records
node_users -->|"reads/writes"| node_records
node_logs -->|"reads/writes"| node_records
node_accessrequest -->|"checks and logs"| node_records
node_reader -->|"presents card"| node_rfid
node_firmware -->|"drives state"| node_state
node_firmware -->|"refreshes reader"| node_rfid
node_firmware -->|"initializes Wi-Fi"| node_wifi
node_firmware -->|"initializes host"| node_host
node_firmware -->|"initializes flash"| node_flash
node_firmware -->|"signals connection"| node_signal
node_state -->|"handles access"| node_access
node_access -->|"requests validation"| node_apihandler
node_apihandler -->|"uses connection"| node_wifi
node_apihandler -->|"sends access request"| node_server
node_server -.->|"scans device API"| node_host
node_access -->|"signals decision"| node_signal
node_flash -->|"configures storage"| node_idstorage
node_flash -->|"configures storage"| node_rollstorage
node_idstorage -->|"reads/writes"| node_eeprom
node_rollstorage -->|"reads/writes"| node_eeprom

click node_webui "https://github.com/dariocasciato/iot-access-controller/tree/main/access-manager/public/pages"
click node_userui "https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/public/pages/UserCreation/script.js"
click node_pointui "https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/public/pages/AccessPointConfig/script.js"
click node_assignui "https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/public/pages/AccessAssignment/script.js"
click node_logui "https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/public/pages/LogOverview/script.js"
click node_server "https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/server.js"
click node_users "https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/Routes/users.js"
click node_points "https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/Routes/accessPoints.js"
click node_assignments "https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/Routes/assignments.js"
click node_accessrequest "https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/Routes/accessRequest.js"
click node_logs "https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/Routes/logs.js"
click node_records "https://github.com/dariocasciato/iot-access-controller/tree/main/access-manager/data"
click node_firmware "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/main.cpp"
click node_state "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/state.cpp"
click node_rfid "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/RFID/RFID.cpp"
click node_access "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/Access/Access.cpp"
click node_host "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/Host/Host.cpp"
click node_wifi "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/utils/Connectivity/ESPWiFi/espWiFi.cpp"
click node_apihandler "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/utils/Connectivity/APIHandler/APIHandler.cpp"
click node_signal "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/Signalization/Signal.cpp"
click node_flash "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/Flash/Flash.cpp"
click node_idstorage "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/utils/Storage/IDStorage.cpp"
click node_rollstorage "https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/utils/Storage/RollStorage.cpp"

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_webui,node_userui,node_pointui,node_assignui,node_logui toneBlue
class node_server,node_users,node_points,node_assignments,node_accessrequest,node_logs,node_records toneAmber
class node_firmware,node_state,node_rfid,node_access,node_host,node_wifi,node_apihandler,node_signal toneMint
class node_flash,node_idstorage,node_rollstorage,node_eeprom toneRose
class node_operator,node_reader toneIndigo
```

## Components

### Web management

- [Management pages](https://github.com/dariocasciato/iot-access-controller/tree/main/access-manager/public/pages): `access-manager/public/pages`
- [User management UI](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/public/pages/UserCreation/script.js): `access-manager/public/pages/UserCreation/script.js`
- [Access point UI](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/public/pages/AccessPointConfig/script.js): `access-manager/public/pages/AccessPointConfig/script.js`
- [Assignment UI](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/public/pages/AccessAssignment/script.js): `access-manager/public/pages/AccessAssignment/script.js`
- [Log overview UI](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/public/pages/LogOverview/script.js): `access-manager/public/pages/LogOverview/script.js`

### Server domain API

- [Express server](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/server.js): `access-manager/server.js`
- [User routes](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/Routes/users.js): `access-manager/Routes/users.js`
- [Access point routes](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/Routes/accessPoints.js): `access-manager/Routes/accessPoints.js`
- [Assignment routes](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/Routes/assignments.js): `access-manager/Routes/assignments.js`
- [Authorization endpoint](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/Routes/accessRequest.js): `access-manager/Routes/accessRequest.js`
- [Access log routes](https://github.com/dariocasciato/iot-access-controller/blob/main/access-manager/Routes/logs.js): `access-manager/Routes/logs.js`
- [CSV records](https://github.com/dariocasciato/iot-access-controller/tree/main/access-manager/data): `access-manager/data`

### Access-point firmware

- [Device loop](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/main.cpp): `access-point-firmware/src/main.cpp`
- [Access state](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/state.cpp): `access-point-firmware/src/state.cpp`
- [RFID reader](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/RFID/RFID.cpp): `access-point-firmware/src/RFID/RFID.cpp`
- [Access control](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/Access/Access.cpp): `access-point-firmware/src/Access/Access.cpp`
- [Host API](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/Host/Host.cpp): `access-point-firmware/src/Host/Host.cpp`
- [Wi-Fi connectivity](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/utils/Connectivity/ESPWiFi/espWiFi.cpp): `access-point-firmware/utils/Connectivity/ESPWiFi/espWiFi.cpp`
- [HTTP API client](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/utils/Connectivity/APIHandler/APIHandler.cpp): `access-point-firmware/utils/Connectivity/APIHandler/APIHandler.cpp`
- [Decision feedback](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/Signalization/Signal.cpp): `access-point-firmware/src/Signalization/Signal.cpp`

### Device hardware and storage

- [Flash layout](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/src/Flash/Flash.cpp): `access-point-firmware/src/Flash/Flash.cpp`
- [ID storage](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/utils/Storage/IDStorage.cpp): `access-point-firmware/utils/Storage/IDStorage.cpp`
- [Rolling storage](https://github.com/dariocasciato/iot-access-controller/blob/main/access-point-firmware/utils/Storage/RollStorage.cpp): `access-point-firmware/utils/Storage/RollStorage.cpp`
- **EEPROM**

### Other components

- **Operator**
- **RFID card**

## Connections

- Operator → Management pages: uses
- Management pages → Express server: loads pages
- User management UI → Express server: manages users
- Access point UI → Express server: manages devices
- Assignment UI → Express server: assigns rights
- Log overview UI → Express server: views logs
- Express server → User routes: mounts routes
- Express server → Access point routes: mounts routes
- Express server → Assignment routes: mounts routes
- Express server → Authorization endpoint: mounts routes
- Express server → Access log routes: mounts routes
- Access point routes → CSV records: reads/writes
- Assignment routes → CSV records: reads/writes
- User routes → CSV records: reads/writes
- Access log routes → CSV records: reads/writes
- Authorization endpoint → CSV records: checks and logs
- RFID card → RFID reader: presents card
- Device loop → Access state: drives state
- Device loop → RFID reader: refreshes reader
- Device loop → Wi-Fi connectivity: initializes Wi-Fi
- Device loop → Host API: initializes host
- Device loop → Flash layout: initializes flash
- Device loop → Decision feedback: signals connection
- Access state → Access control: handles access
- Access control → HTTP API client: requests validation
- HTTP API client → Wi-Fi connectivity: uses connection
- HTTP API client → Express server: sends access request
- Express server → Host API: scans device API
- Access control → Decision feedback: signals decision
- Flash layout → ID storage: configures storage
- Flash layout → Rolling storage: configures storage
- ID storage → EEPROM: reads/writes
- Rolling storage → EEPROM: reads/writes
