added some stuff

This commit is contained in:
JogmansonReal
2026-10-16 23:43:29 -07:00
parent 55175acdf6
commit 5c047bd19c
8 changed files with 470 additions and 1 deletions
+86
View File
@@ -0,0 +1,86 @@
# Server
ASP.NET Core 9 (`net9.0`) implementation of the RecNet API surface that archived
2023 Rec Room clients call. Root namespace `RadicadeServer`; one process serves both
the game API and the public web/share endpoints.
## Running
```bash
dotnet run --project Server
```
Development listens on `https://localhost:3030` and `http://127.0.0.1:3031` (see
`appsettings.Development.json`); Production defaults to `http://0.0.0.0:3030` for a
TLS-terminating proxy in front (see the repo-level `Caddyfile`).
`Program.cs` builds the host, loads configuration into `DBConfig`, then:
- fails fast in Production if `AdminApiKey`, `JwtKey` or `SteamApiKey` are blank;
- registers the EF Core `RecDBContext` (SQL Server, retry-on-failure, pending-model
warnings ignored);
- wires JWT bearer auth (signing key from `Radicade:JwtKey`; the `access_token` query
parameter is accepted on notify-hub paths for WebSocket clients) plus a token
version check that revokes sessions;
- configures ImageSharp (with a `cropSquare` command used by avatar images);
- applies migrations and idempotent schema fix-ups at startup;
- maps controllers and the `NotifyHub` SignalR hubs.
## Layout
| Folder | Contents |
| --- | --- |
| `Program.cs` | Host, DI, auth, middleware pipeline and startup schema work. |
| `DB/` | `DBConfig` (all runtime configuration + paths), `RecDBContext`, `Defaults`, factory and bootstrap helpers. |
| `Migrations/` | EF Core migrations. |
| `NameServer/` | `GET /`, `/ns`, `/nameserver` — the document that tells a client where every service lives. |
| `Auth/`, `AccountCreation/` | Login, token issuance, onboarding flows, platform identity proofing. |
| `Players/`, `PlayersBanned/`, `Relationships/`, `Messages/`, `Chat/`, `Notifications/` | Player records, presence, friends, direct messages, chat and notifications. |
| `Rooms/`, `Clubs/`, `Board/`, `PlayerEvents/`, `Inventions/`, `Keepsakes/`, `Studio/`, `Royale/` | User-generated and social content surfaces. |
| `Avatars/`, `CustomAvatarItems/`, `Images/`, `CDN/`, `Storage/`, `LoadingScreens/`, `Launcher/` | Cosmetics, image/video CDN routes, stored blobs, launcher manifest. |
| `Commerce/`, `Storefront/`, `Gift/`, `Promotions/`, `PlayerCheer/`, `ProgressionEvents/` | Economy: storefronts, purchases, gifts, promotions, progression rewards. |
| `Matchmaking/`, `Activities/`, `Leaderboards/`, `Compatibility/`, `Health/` | Session/matchmaking, activity feed, leaderboards, version compatibility checks, health endpoints. |
| `Moderation/`, `PlayerReporting/`, `PlayerWarnings/`, `PlayerReputation/`, `BanAppeal/` | Moderation and safety tooling. |
| `Config/` | Client configuration/split-test endpoints and player settings. |
| `Analytics/`, `BugReporting/` | Game log ingestion and bug reports. |
| `Admin/` | Admin panel API. Endpoints authenticate with `AdminApiKey`/`SupportApiKey` (see `AdminUtils`). |
| `Web/` | Public web/share API (`/web/...`). |
| `Discord/` | Discord webhook config (`webhooks.json` git-ignored, `webhooks.example.json` tracked). |
| `RecNet/`, `Radicade/` | Shared response/enum models and RecNet-shaped DTOs. |
| `RadicadeServer-Config/` | Catalogs served to clients (storefronts, avatars, equipment, keepsakes, level-up rewards, Steam whitelist). |
| `Middleware/`, `Extensions/`, `Utils/` | Cross-cutting plumbing and helpers. |
| `Tooling/` | Debug and test-case management endpoints. |
## Routing and multi-version support
Routes are declared with controller attributes and many endpoints deliberately expose
several paths for the same handler, because different 2023 builds call slightly
different URLs (for example `~/clubs/club/home/me`, `~/club/home/me` and
`~/api/clubs/v1/home/me`). Supported client versions are listed in
`DBConfig.SupportedGameVersions`, with **`20230831`** (September 2023) as the primary
target and `20230301`–`20231207` plus a couple of 2025 builds also accepted.
CORS is wide open (`AllowAllOrigins`), which is appropriate for a self-hosted server
serving the game client and local tooling.
## Data
`DBConfig.PublicData` defaults to `./RadicadeServer-Data/` and is split into:
- `CDN/Images`, `CDN/Videos`, `CDN/Storage`, `CDN/Custom` — served content and uploads;
- `Persistent/Logs` — rotating logs and generated `debugkey.txt`;
- `Persistent/DataProtection-Keys` — Data Protection key ring;
- `Persistent/localhost-rsa-aes-devcert.pfx` — the Development HTTPS certificate.
## Configuration
See the configuration table in the [root README](../README.md#configuration). The
checked-in `appsettings.*.json` files contain `USEYOURS` placeholders; override real
values with user secrets or environment variables (`Radicade__JwtKey`,
`ConnectionStrings__DefaultConnection`, …). Production startup validates the three
required secrets.
## Tests
Covered by [`ServerTests/`](../ServerTests) — see that README for how to run them and
which helpers they use.