Skip to content

license-server: make multi-product (add klipa alongside PromptBar)#3

Merged
peterdsp merged 1 commit into
mainfrom
feat/multi-product-license-server
Jul 8, 2026
Merged

license-server: make multi-product (add klipa alongside PromptBar)#3
peterdsp merged 1 commit into
mainfrom
feat/multi-product-license-server

Conversation

@peterdsp

@peterdsp peterdsp commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Ko-fi allows one webhook URL per account, so this server has to serve every product sold on that account. Generalises app.py into a product registry - each product has its own Ed25519 signing key, license file extension, Ko-fi item match, and email copy. A license signed for one product can't validate another.

PromptBar behaviour is unchanged: same PROMPTBAR_* env vars, same signing key, archives <email>.promptbar at the same path, and /activate with no product field still defaults to PromptBar (so the shipped PromptBar app keeps working). klipa is registered only when KLIPA_PRIVATE_KEY is set.

env.example documents klipa's block and the HOME fix (gunicorn's control server needs a writable $HOME under systemd ProtectHome=read-only).

Validated on the Pi: /health lists both products, existing PromptBar admin license still activates unchanged, klipa issues + activates a signed license, both webhook item types route correctly, bad tokens rejected. Deployed and running.

Ko-fi allows one webhook URL per account, so the license server has to
serve every product sold on that account. Generalise it into a product
registry: each product has its own Ed25519 signing key, license file
extension, Ko-fi item match, and email copy. A license signed for one
product can't validate another.

PromptBar behaviour is unchanged - it reads the same PROMPTBAR_* env vars,
signs with the same key, archives <email>.promptbar at the same path, and
/activate with no product field still defaults to PromptBar (so the
shipped PromptBar app keeps working). klipa is registered only when
KLIPA_PRIVATE_KEY is set.

env.example documents the klipa block and the HOME fix (gunicorn's control
server needs a writable $HOME under systemd ProtectHome=read-only).
Copilot AI review requested due to automatic review settings July 8, 2026 09:25
@peterdsp peterdsp merged commit 0ef57d6 into main Jul 8, 2026
1 check passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@peterdsp peterdsp deleted the feat/multi-product-license-server branch July 8, 2026 09:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants