ops: register vote.cl8y.com property + CORS + portal redirect allowlist #12
Labels
No labels
agent:implement
agent:ready
api
bot
bug
ci
enhancement
ready
security
terra-classic
testing
ux
web
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/cl8y-ecosystem-legal#12
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Register CL8Y Voting (
vote.cl8y.com) as a dedicated Legal property and allow the production origin to call the API and return from the portal.Integrator: voting#7 (Coolify / Legal / live wallet leftovers after voting !19). The voting dApp already uses
@plasticdigits/cl8y-clickwrapwith defaultproperty=vote.cl8y.comand bothnetwork=TerraClassic(Keplr) andnetwork=EVM(MetaMask BSC 56). Without this ops change, connected wallets onhttps://vote.cl8y.comfail-closed (unsigned / CORS) even after a portal sign.Acceptances are per hostname. A signature on
cl8y.comordex.cl8y.comis not evidence forvote.cl8y.com. Do not reuse those properties.Related: #7 (wildcard CORS) does not cover this — add the exact origin. Same playbook as #8 (
ust1cmm.com).Confirm hostname with ops before the admin write. Proposed (already wired in voting):
vote.cl8y.com.Actions (Legal Coolify / hosts)
1. Register the property
From a
cl8y-ecosystem-legalcheckout (script prompts forADMIN_TOKENhidden; do not put the token in this issue or in PlasticDigits/voting):If that script is missing on the host,
GET /api/v1/terms/latest?property=vote.cl8y.comupserts the website row; still set a display name if the admin path supports it.2. Legal API env (
api.terms.cl8y.com)Add the exact origin to
CORS_ORIGINS(comma-separated, no trailing slash):Redeploy / restart the API so
build_corspicks it up.3. Legal portal env (
terms.cl8y.comweb build)Add the exact origin to
VITE_REDIRECT_URI_ALLOWLISTand rebuild the portal (Vite bakes this in):Do not enable
VITE_ALLOW_LOCALHOST_REDIRECTon production portal.4. Verify
On
https://vote.cl8y.com(after Coolify DNS):terra1…→ accept → portal/sign/terra-classic?property=vote.cl8y.com&redirect_uri=https%3A%2F%2Fvote.cl8y.com%2F…→ return →signed_latest: true.0x…on BSC 56 → accept → portal/sign/evm?property=vote.cl8y.com&…→ return →signed_latest: true.Pins
vote.cl8y.comCL8Y Votinghttps://vote.cl8y.comTerraClassicandEVMcl8y.com,dex.cl8y.com,www.vote.cl8y.com(unless that host is actually served)Out of scope
ADMIN_TOKENin the voting frontend.api.terms.cl8y.com/terms.cl8y.com). LeaveVITE_PLAYWRIGHT_E2Eunset on the voting production build. See voting#7.Production probe — 2026-08-26 (read-only)
No admin writes, Coolify edits, or live wallet QA from this session.
ADMIN_TOKENwas not used.Already true
GET https://api.terms.cl8y.com/health→{"status":"ok"}GET /api/v1/terms/latest?property=vote.cl8y.com):property=vote.cl8y.com,version_label=1.5, both sign URLs present:https://terms.cl8y.com/sign/terra-classic?property=vote.cl8y.comhttps://terms.cl8y.com/sign/evm?property=vote.cl8y.comregister-property.shto setCL8Y Voting.Still failing (blocks the voting dApp)
OPTIONS /api/v1/signatures/statuswithOrigin: https://vote.cl8y.comhas noAccess-Control-Allow-Origin. Contrast:ust1cmm.com,dex.cl8y.com,terms.cl8y.com,cl8y.comall echo their origin.#7wildcard CORS is not live; add the exact origin.https://terms.cl8y.com/assets/index-CwSFaYk-.js(last-modified 2026-08-18) includescl8y.com,www.cl8y.com,dex.cl8y.com,bridge.cl8y.com,yieldomega.com,ust1cmm.com.https://vote.cl8y.comis absent. Rebuild after appendingVITE_REDIRECT_URI_ALLOWLIST.VITE_ALLOW_LOCALHOST_REDIRECTis not baked astrue.Out of this issue but blocks end-to-end verify
vote.cl8y.comresolves to168.119.120.255but TLS is self-signed and HTTP is503 no available server(Coolify placeholder). Live Keplr/MetaMask QA waits on voting#7.Operator leftover (same playbook as #8)
Coolify:
api.terms.cl8y.com): appendhttps://vote.cl8y.comtoCORS_ORIGINS, restart.terms.cl8y.com): appendhttps://vote.cl8y.comtoVITE_REDIRECT_URI_ALLOWLIST, rebuild. Do not enableVITE_ALLOW_LOCALHOST_REDIRECT.Ops complete — verification 2026-08-26
Completed on Legal Coolify / hosts (no
ADMIN_TOKENrecorded here). Same playbook as #8.Steps done
./scripts/register-property.sh vote.cl8y.com "CL8Y Voting"(and--list).kind=website,identifier=vote.cl8y.com,display_name=CL8Y Votingcreated_at=2026-08-26T01:12:32.968450+00:00https://vote.cl8y.comtoCORS_ORIGINSonapi.terms.cl8y.com; API restarted.https://vote.cl8y.comtoVITE_REDIRECT_URI_ALLOWLIST; portal rebuilt.VITE_ALLOW_LOCALHOST_REDIRECTleft off in production.Automated verify (pass)
Property + Terra Classic and EVM sign URLs
propertyvote.cl8y.comversion_label1.5sign_urls.terra_classichttps://terms.cl8y.com/sign/terra-classic?property=vote.cl8y.comsign_urls.evmhttps://terms.cl8y.com/sign/evm?property=vote.cl8y.comcontent_sha256fe8f0029fb14fb8c1705f6c462d384153660ac98954502a406634f73822f6189CORS preflight (
OPTIONS /api/v1/signatures/status,Origin: https://vote.cl8y.com)Access-Control-Allow-Origin: https://vote.cl8y.comNegative check:
Origin: https://www.vote.cl8y.com→ noAccess-Control-Allow-Origin(expected; exact origin only).Portal allowlist (production bundle)
https://terms.cl8y.com/assets/index--hE9wWsL.jsincludeshttps://vote.cl8y.comalongside existing origins (cl8y.com,www.cl8y.com,dex.cl8y.com,bridge.cl8y.com,yieldomega.com,ust1cmm.com). NoVITE_ALLOW_LOCALHOST_REDIRECTstring in the bundle.Not run here
Live wallet round-trip on
https://vote.cl8y.com(newterra1…/0x…on BSC 56 → portal sign →signed_latest: true) still needs a voting Coolify host. DNS is up but the origin currently returns503 no available server. Tracked on voting#7. API + CORS + baked redirect origin are in place for that path.Closing: issue acceptance curls and portal bake-in succeeded.