[MeshCore] Outbound 2FA claim: WS dispatch + HTTP verify

Open
#361 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
30/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
python
Domain
api, backend

Research direction

Start with dispatch_node_command in Meshflow/common/feeder_ws.py, using the existing apply_mc_channel_config dispatch as the pattern, and read normalize_claim_key in Meshflow/nodes/claim_authorization.py alongside notify_node_claim_accepted in Meshflow/nodes/ws_notify.py. Done means the initiate route sends a send_mc_claim_dm command, the new verify route accepts a claim key and sets the claim as accepted, and openapi.yaml and node-claims-meshcore.md are updated. The bot side (meshflow-bot#120) is a stated blocker, so this is not startable end to end yet.

Written by the indexing model from the issue text.

Description

enhancement

Parent (UI user flow)

Part of meshflow-ui#291 — Claim MeshCore node / feeder onboarding epic.

Repo Issue
UI meshflow-ui#303
Bot meshflow-bot#120

Meshtastic inbound DM claim stays unchanged (node-claims-meshtastic.md).

Replaces the fragile inbound MeshCore flow in node-claims-meshcore.md. Basic MC claim shipped in meshflow-ui#292 (closed).

Problem

MeshCore DMs require the recipient in the radio contact list (usually populated via RF adverts). Users claiming from the web UI cannot reliably DM a feeder with the claim key. The API already knows the target node's mc_pubkey / prefix from telemetry; a feeder should DM the user with the code; the user types the code back in the UI.

Architecture

sequenceDiagram
  participant UI as meshflow-ui
  participant API as meshflow-api
  participant WS as ws/nodes (feeder)
  participant Bot as meshflow-bot (MC)
  participant Radio as MeshCore device

  UI->>API: POST observed-nodes/{id}/claim/ (existing)
  API->>API: Create NodeOwnerClaim + claim_key
  API->>WS: node_command send_mc_claim_dm
  WS->>Bot: command JSON
  Bot->>Radio: add contact + send DM(claim_key)
  Radio->>User: DM with claim key
  UI->>API: POST observed-nodes/{id}/claim/verify/ { claim_key }
  API->>API: Match pending claim, set accepted_at + claimed_by
  API->>UI: node_claim_accepted (HTTP + ws/claims/)

Scope (meshflow-api)

1. Initiate claim (POST …/claim/)
  • For protocol=MESHCORE only: after creating NodeOwnerClaim, resolve target identity (mc_pubkey, fallback mc_pubkey_prefix) from ObservedNode.
  • Select feeder ManagedNode (optional feeder_managed_node_id from UI; else eligible connected MC feeder).
  • Dispatch via dispatch_node_command (apply_mc_channel_config pattern).
2. WS command send_mc_claim_dm
{
  "type": "send_mc_claim_dm",
  "target_mc_pubkey": "<64-hex or null>",
  "target_mc_pubkey_prefix": "<12-hex or null>",
  "message": "<claim_key>"
}
3. Verify claim (POST …/claim/verify/)
4. Docs + tests

Depends on

  • Bot #120 — MC send + WS (blocker today).
  • UI #303.
Dominant language
Python
Stars
1
Forks
0
Avg merge
1d 20h
Merged PRs (30d)
5

Getting set up

  • Ships a Dockerfile or Docker Compose file
  • Has a pull request template
  • No contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from pskillen/meshflow-api

All issues in pskillen/meshflow-api

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.