BaryoDev / BaryoDev/barakoCMS

Forms: verify an email field with a one-time code before a submission is accepted

Open
#811 0 comments 0 reactions 0 assignees View on GitHub
enhancement module security
Dominant language
C#
Stars
6
Forks
7
Avg merge
4h 42m
Merged PRs (30d)
307

Description

Found by simulating a Claude Code build of Color Me Fun 2026 through the barako CLI (epic #801) on 14 September 2026; the event registration app for the Rotary Club of Koronadal is the acceptance test. Simulation page: https://claude.ai/code/artifact/05afda1a-6461-431d-aff0-50b30d3b0778

A registration cannot continue with an email address that has not proved it receives mail, because every confirmation is email only. One-time codes exist for signing in (`/api/auth/otp/*`), not for a field on a public form.

## Change

A form's email field can require verification: the visitor requests a code, it is sent through the configured email module, and the submission is accepted only with a matching unexpired code for that address. Codes are hashed, single use, expire, and are rate limited per address and per IP.

## Done when

- A submission with an unverified address is refused; with a verified one it is accepted and the entry records that the address was verified.
- Requesting codes repeatedly for one address is throttled.

## Where it lives

Module: `BarakoCMS.Forms`, using the core's one-time code service.

Contributor guide

Open the contributing guide

Research direction

Start in the BarakoCMS.Forms module and inspect the core one-time code service used by `/api/auth/otp/*`, along with the configured email module. Trace how public form submissions are accepted, then define the verification flow and its storage and throttling boundaries. Done means unverified submissions are refused, verified entries record that state, and repeated requests for one address are throttled.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
api, authentication, backend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.