# bigboxer23/solar-moon-ftp architecture

> Architecture diagram of the GitHub repository bigboxer23/solar-moon-ftp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bigboxer23/solar-moon-ftp
- Repository: https://github.com/bigboxer23/solar-moon-ftp

## Overview

Solar Moon FTP is a local service that rebuilds vsftpd’s virtual-user configuration in response to SQS notifications. The listener invokes the configuration component, which obtains access keys through the customer component and repository, writes user credentials and directories, then runs configured database-update and permission commands. The README also describes customer CRUD and vsftpd service management, but the sampled implementation does not show those operations in detail. Edges reflect the excerpts or README; framework wiring and unsampled command behavior are not inferred.

Main entry points: [`src/main/java/com/bigboxer23/solar_moon/ftp/FTPConfigurationComponent.java`](https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPConfigurationComponent.java) (Configuration rebuild), [`src/main/java/com/bigboxer23/solar_moon/ftp/FTPSQSQueueListener.java`](https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPSQSQueueListener.java) (SQS listener), [`src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerComponent.java`](https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerComponent.java) (FTP customer access), [`src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerRepository.java`](https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerRepository.java) (Customer repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_intake["Update intake"]
  node_app["Spring Boot app"]
  node_listener["SQS listener"]
end

subgraph group_customers["Customer data"]
  node_customer["FTP customer access"]
  node_repository["Customer repository"]
  node_dynamodb[("Customer table")]
end

subgraph group_provisioning["FTP provisioning"]
  node_configuration["Configuration rebuild"]
  node_userfile["Virtual-user file"]
  node_directories["User directories"]
  node_commands["Configured commands"]
end

node_operator(("Service operator"))
node_sqs["AWS SQS"]
node_vsftpd["vsftpd service"]

node_operator -.->|"starts"| node_app
node_sqs -->|"delivers messages"| node_listener
node_listener -->|"polls and deletes"| node_sqs
node_listener -->|"triggers rebuild"| node_configuration
node_configuration -->|"requests access keys"| node_customer
node_customer -->|"gets repository"| node_repository
node_repository -->|"scans table"| node_dynamodb
node_configuration -->|"writes credentials"| node_userfile
node_configuration -->|"creates per-user"| node_directories
node_configuration -->|"runs configured"| node_commands
node_commands -.->|"updates configuration"| node_vsftpd

click node_app "https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/SolarMoonFTPApp.java"
click node_listener "https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPSQSQueueListener.java"
click node_customer "https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerComponent.java"
click node_repository "https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerRepository.java"
click node_configuration "https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPConfigurationComponent.java"

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_app,node_listener toneBlue
class node_customer,node_repository,node_dynamodb toneAmber
class node_configuration,node_userfile,node_directories,node_commands toneMint
class node_operator,node_sqs,node_vsftpd toneIndigo
```

## Components

### Update intake

- [Spring Boot app](https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/SolarMoonFTPApp.java): `src/main/java/com/bigboxer23/solar_moon/ftp/SolarMoonFTPApp.java`
- [SQS listener](https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPSQSQueueListener.java): `src/main/java/com/bigboxer23/solar_moon/ftp/FTPSQSQueueListener.java`

### Customer data

- [FTP customer access](https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerComponent.java): `src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerComponent.java`
- [Customer repository](https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerRepository.java): `src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerRepository.java`
- **Customer table**

### FTP provisioning

- [Configuration rebuild](https://github.com/bigboxer23/solar-moon-ftp/blob/master/src/main/java/com/bigboxer23/solar_moon/ftp/FTPConfigurationComponent.java): `src/main/java/com/bigboxer23/solar_moon/ftp/FTPConfigurationComponent.java`
- **Virtual-user file**
- **User directories**
- **Configured commands**

### Other components

- **Service operator**
- **AWS SQS**
- **vsftpd service**

## Connections

- Service operator → Spring Boot app: starts
- AWS SQS → SQS listener: delivers messages (evidence: `src/main/java/com/bigboxer23/solar_moon/ftp/FTPSQSQueueListener.java`)
- SQS listener → AWS SQS: polls and deletes (evidence: `src/main/java/com/bigboxer23/solar_moon/ftp/FTPSQSQueueListener.java`)
- SQS listener → Configuration rebuild: triggers rebuild (evidence: `src/main/java/com/bigboxer23/solar_moon/ftp/FTPSQSQueueListener.java`)
- Configuration rebuild → FTP customer access: requests access keys (evidence: `src/main/java/com/bigboxer23/solar_moon/ftp/FTPConfigurationComponent.java`)
- FTP customer access → Customer repository: gets repository (evidence: `src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerComponent.java`)
- Customer repository → Customer table: scans table (evidence: `src/main/java/com/bigboxer23/solar_moon/ftp/FTPCustomerRepository.java`)
- Configuration rebuild → Virtual-user file: writes credentials (evidence: `src/main/java/com/bigboxer23/solar_moon/ftp/FTPConfigurationComponent.java`)
- Configuration rebuild → User directories: creates per-user (evidence: `src/main/java/com/bigboxer23/solar_moon/ftp/FTPConfigurationComponent.java`)
- Configuration rebuild → Configured commands: runs configured (evidence: `src/main/java/com/bigboxer23/solar_moon/ftp/FTPConfigurationComponent.java`)
- Configured commands → vsftpd service: updates configuration
