Reverse Proxy sits in front of a single upstream URL and forwards every request to it, while locally answering a per-property verification file so you (or CodeStuff) can confirm you control the domain without the upstream needing to know anything about it.

🧭 What It Does

  • Transparent forwarding — every request (method, headers, body) is passed straight through to your configured upstream URL.
  • Automatic verification files — a <propertyName>-<time>.xml file is generated per property and served locally.
  • Self-expiring tokens — each verification file expires 15 minutes after it's generated, so stale proofs can't linger.
  • Multi-property support — configure several properties in one instance and choose which one is actively listening.
  • Zero external dependencies — a single closed-source JAR, no database, no extra services to run.

🔒 Closed Source

This project is closed source. The Reverse Proxy JAR is distributed as a compiled binary through the Releases page. Source code is not published, and redistribution or reverse engineering of the binary outside the terms provided at download is not permitted.

Requirements

  • Java 21 or newer on the host machine.
  • A domain or subdomain pointed at the host running the proxy, if you intend to verify ownership.

📦 Get the JAR

Download the latest codestuff-reverseproxy-x.x.x.jar from the Releases page and place it in a folder of your choice on the host.

🚀 First Run

From that folder, run the JAR with no flags:

java -jar codestuff-reverseproxy-1.0.0.jar

On the very first run there's no configuration.json yet, so the proxy opens a small local web console instead of forwarding traffic. Visit it in your browser to create your first property.

🗂️ configuration.json

Generated automatically on first run — you normally never need to hand-edit it.

{
  "listenPort": "8080",
  "bindAddress": "0.0.0.0",
  "properties": {
    "<propertyName>": {
      "url": "<url>",
      "verification": "<propertyName>-<time>.xml"
    }
  }
}

📋 Fields

FieldDescription
listenPortPort the proxy binds to.
bindAddressNetwork interface to bind to — 0.0.0.0 listens on all interfaces.
propertiesA map of property name → upstream URL and verification filename.

▶️ Default (Forwarding) Mode

java -jar codestuff-reverseproxy-1.0.0.jar
Configured propertiesBehavior
None yetOpens the setup console so you can create your first property.
Exactly oneStarts forwarding to it immediately — no console needed.
MultipleOpens a select console so you can choose which property to listen for.

🎯 Pinning a Property

When you have multiple properties, skip the select console by pinning one directly at startup:

java -jar codestuff-reverseproxy-1.0.0.jar --property "my-site"

The proxy starts forwarding for my-site immediately, and exits with an error if no property by that name exists.

🛠️ Admin Mode

java -jar codestuff-reverseproxy-1.0.0.jar --properties

Opens the admin dashboard instead of forwarding traffic. Use this to add, edit, delete, or regenerate verification for any property. See Admin Dashboard below.

🔑 How It Works

Every property gets a verification filename in the form <propertyName>-<time>.xml. The timestamp is embedded directly in the filename, so its expiry can be recalculated at any time without extra state. Requesting GET /<verification-filename> on the proxy returns a small XML document confirming the property name, URL, and validity.

⏱️ Expiry

Verification files expire 15 minutes after they're generated. Once expired, requesting the file returns HTTP 410 Gone instead of 200. Regenerate a fresh one from the admin dashboard whenever you need to re-verify.

📊 Overview

Launching with --properties opens a dashboard listing every configured property, its upstream URL, and its verification status.

🧰 Available Actions

ActionDescription
AddCreate a new property with a name and upstream URL.
EditUpdate a property's upstream URL. Its verification file stays the same.
DeleteRemove a property from configuration.json entirely.
RegenerateIssue a fresh verification file with a new 15-minute expiry.

General

Is the source code available?

No. Reverse Proxy is closed source and distributed as a compiled JAR only, via the Releases page.

Can I run multiple properties on one instance?

Yes — configure as many as you like from the admin dashboard, then choose which one is actively forwarding with --property "<name>".

What happens if I forget the --property flag?

If exactly one property is configured, the proxy just uses it. If there are several, a small web console opens so you can pick one interactively.