Class is MA-assigned at approval, not self-declared; drop the sharing dropdown
This commit is contained in:
+20
-25
@@ -449,15 +449,21 @@ pub fn registry_applications(dir: &Path) -> Result<()> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Approves a pending application: creates the member stub (class from the application),
|
||||
/// issues a 24h invite, and prints the credential block to hand to the member.
|
||||
pub fn registry_approve(dir: &Path, id: &str, registry_url: Option<&str>) -> Result<()> {
|
||||
/// Approves a pending application: creates the member stub, mints its account
|
||||
/// credential (member token), and prints the credential block to hand over.
|
||||
/// `--class enrichment` is for derived corpora (metadata-only, §6); default is source.
|
||||
pub fn registry_approve(
|
||||
dir: &Path,
|
||||
id: &str,
|
||||
registry_url: Option<&str>,
|
||||
class: Option<&str>,
|
||||
) -> Result<()> {
|
||||
let (_, signed) = open_registry(dir)?;
|
||||
if signed.doc.members.iter().any(|member| member.id == id) {
|
||||
return Err(anyhow!("member {id} already listed"));
|
||||
}
|
||||
let application = registry::approve_application(dir, id)?;
|
||||
let class = if application.class == CLASS_ENRICHMENT {
|
||||
let _application = registry::approve_application(dir, id)?;
|
||||
let class = if class == Some(CLASS_ENRICHMENT) {
|
||||
CLASS_ENRICHMENT
|
||||
} else {
|
||||
CLASS_SOURCE
|
||||
@@ -610,8 +616,6 @@ struct SignupRequest {
|
||||
#[serde(default)]
|
||||
domain: String,
|
||||
#[serde(default)]
|
||||
class: Option<String>,
|
||||
#[serde(default)]
|
||||
payment: String,
|
||||
#[serde(default)]
|
||||
privacy_link: String,
|
||||
@@ -694,11 +698,6 @@ async fn registry_signup(
|
||||
)
|
||||
.into_response();
|
||||
}
|
||||
let class = if request.class.as_deref() == Some(CLASS_ENRICHMENT) {
|
||||
CLASS_ENRICHMENT
|
||||
} else {
|
||||
CLASS_SOURCE
|
||||
};
|
||||
let application = registry::Application {
|
||||
id: id.clone(),
|
||||
org: request.org.clone(),
|
||||
@@ -706,7 +705,7 @@ async fn registry_signup(
|
||||
email: request.email.clone(),
|
||||
address: request.address.clone(),
|
||||
domain: request.domain.clone(),
|
||||
class: class.to_string(),
|
||||
class: CLASS_SOURCE.to_string(),
|
||||
payment: request.payment.clone(),
|
||||
privacy_link: request.privacy_link.clone(),
|
||||
status: "pending".to_string(),
|
||||
@@ -858,8 +857,9 @@ scores on the wire, no in-protocol payment.</p>
|
||||
|
||||
<h2>1. Register with the membership authority</h2>
|
||||
<div class="card">
|
||||
<p class="muted">This form requests membership from the membership authority (MA). The MA reviews
|
||||
your organization details and issues a credential block
|
||||
<p class="muted">This form requests membership from the membership authority (MA). Membership has no
|
||||
roles or tiers: every member may broadcast queries and every member may answer them. The MA
|
||||
reviews your organization details and issues a credential block
|
||||
(<code>id=... token=... registry=... ma_key=...</code>); the onboarding wizard in step 4 then
|
||||
binds your node's keys to the identifier. The public registry publishes only your identifier,
|
||||
class, keys, and the federation's relays. The organization details below are kept privately by
|
||||
@@ -878,11 +878,6 @@ the MA for the membership contract — never published, never on the wire.</p>
|
||||
<input name="address" placeholder="street, city, country"></label>
|
||||
<label>Organization domain (optional)<br>
|
||||
<input name="domain" placeholder="example.org"></label>
|
||||
<label>What you will share<br>
|
||||
<select name="member_class">
|
||||
<option value="source">Source member — content I own or host</option>
|
||||
<option value="enrichment">Enrichment member — derived corpora (metadata-only)</option>
|
||||
</select></label>
|
||||
<label>Payment details (billing / payout — e.g. IBAN or payment handle)<br>
|
||||
<input name="payment" placeholder="kept private; the protocol itself carries no payment"></label>
|
||||
<label>Your privacy statement URL (optional)<br>
|
||||
@@ -897,10 +892,10 @@ the MA for the membership contract — never published, never on the wire.</p>
|
||||
<h2>2. Download</h2>
|
||||
<div class="card">
|
||||
<p>Static Linux x86_64 binaries (musl — no runtime dependencies):</p>
|
||||
<pre class="cmd">curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.4/frxd-linux-amd64
|
||||
curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.4/frxd-linux-amd64.sha256
|
||||
curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.4/frx-linux-amd64
|
||||
curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.4/frx-linux-amd64.sha256</pre>
|
||||
<pre class="cmd">curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.5/frxd-linux-amd64
|
||||
curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.5/frxd-linux-amd64.sha256
|
||||
curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.5/frx-linux-amd64
|
||||
curl -LO https://git.federatedsearch.org/frx/frxd/releases/download/v0.1.5/frx-linux-amd64.sha256</pre>
|
||||
<p class="muted">All releases: <a href="https://git.federatedsearch.org/frx/frxd/releases">git.federatedsearch.org/frx/frxd/releases</a>.
|
||||
Source and spec (<code>rfc.txt</code>): <a href="https://git.federatedsearch.org/frx/frxd">git.federatedsearch.org/frx/frxd</a>.</p>
|
||||
</div>
|
||||
@@ -965,7 +960,7 @@ f.onsubmit = async (e) => {
|
||||
body: JSON.stringify({
|
||||
label: f.label.value,
|
||||
org: f.org.value, representative: f.representative.value, email: f.email.value,
|
||||
address: f.address.value, domain: f.domain.value, class: f.member_class.value,
|
||||
address: f.address.value, domain: f.domain.value,
|
||||
payment: f.payment.value, privacy_link: f.privacy_link.value,
|
||||
attestation: f.attestation.checked, privacy_ack: f.privacy_ack.checked
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user