syntax
parent
83c6b0ca35
commit
42c9421ca3
159
id/syntax.html
159
id/syntax.html
|
@ -1,5 +1,5 @@
|
||||||
<article>
|
<article>
|
||||||
<h1>Fediverse ID (Fediverse)</h1>
|
<h1>Fediverse ID Syntax</h1>
|
||||||
<section>
|
<section>
|
||||||
<address class="h-card">
|
<address class="h-card">
|
||||||
by
|
by
|
||||||
|
@ -8,30 +8,137 @@
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<p>
|
<p>
|
||||||
The final say for what is and is not a valid <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link> are the many implementations of <ziba-link transform="lowercase">WebFinger</ziba-link> in-the-wild in all the different <ziba-link transform="lowercase">Fediverse software</ziba-link> out there.
|
Currently there is no canonical syntax for a <strong>Fediverse ID</strong>.
|
||||||
(Which could be different from each other.)
|
However, we can infer a syntax for the <strong>Fediverse ID</strong> given that it has to be used with <ziba-link dir=".." transform="lowercase">WebFinger</ziba-link>.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>De Facto </h2>
|
||||||
|
<p>
|
||||||
|
Currently, the syntax of a <strong>Fediverse ID</strong> is whatever each <ziba-link dir=".." name="software">Fediverse software</ziba-link> supports.
|
||||||
|
Which could be different from each other!
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Because, from a technical point-of-view, a <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link> is turned into an <ziba-link>acct URI</ziba-link> and then resolved with <ziba-link transform="lowercase">WebFinger</ziba-link>.
|
The final say for what is and is not a valid <strong>Fediverse ID</strong> are the many implementations of <ziba-link dir=".." transform="lowercase">WebFinger</ziba-link> in-the-wild for all the different <ziba-link dir=".." name="software">Fediverse software</ziba-link> out there.
|
||||||
|
Which again could be different from each other!
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Also, there currently is no canonical syntax for a <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link>.
|
The reason being because, from a technical point-of-view, a <strong>Fediverse ID</strong> is turned into an <ziba-link dir=".." transform="lowercase">acct URI</ziba-link> and then resolved with <ziba-link dir=".." transform="lowercase">WebFinger</ziba-link>.
|
||||||
Currently, the syntax of a <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link> is whatever each implementation supports.
|
|
||||||
(Which again could be different from each other.)
|
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
But, having said that, we can infer a <em>minimum syntax</em> for what should be considered a valid<ziba-link transform="lowerllamacase">Fediverse ID</ziba-link>.
|
But, having said that, we can infer a <em>minimum syntax</em> and a <em>maximum syntax</em> for what should be considered a valid<strong>Fediverse ID</strong>.
|
||||||
I.e., the syntax that any implmentation for <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link>s <em>should</em> support.
|
I.e., the syntax that any implmentation for <strong>Fediverse ID</strong>s <em>should</em> support.
|
||||||
But, to say it explicitly, an implemention for <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link>s <em>could</em> support more than just what is given by this syntax.
|
But, to say it explicitly, an implemention for <strong>Fediverse ID</strong>s <em>could</em> support more than just what is given by thes syntaxes.
|
||||||
</p>
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Maximal Fediverse ID Syntax</h2>
|
||||||
|
<p>
|
||||||
|
An <ziba-link dir=".." transform="lowercase">acct URI</ziba-link> has some constraints according to the IETF RFC-7565 (The 'acct' URI Scheme) specification.
|
||||||
|
But — software, such as <ziba-link dir=".." name="software">Fediverse software</ziba-link>, don't have to implement those constraints.
|
||||||
|
I.e., they can accept more than just what IETF RFC-7565 (The 'acct' URI Scheme) specifies.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Given that, here is a more <em>maximal</em> syntax for a <strong>Fediverse ID</strong>:
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
|
||||||
|
fediverseID = "@" [ actor ] "@" host
|
||||||
|
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
Where, given that ‘NOTATSIGN’ (i.e., <em>not at-sign</em>) is any Unicode character that isn't the U+0040 ("@") at-signs —
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
‘actor’ is defined as:
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
|
||||||
|
actor = NOTATSIGN *NOTATSIGN ; one or more characters that are not an at-sign ("@") (U+0040)
|
||||||
|
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
And ‘host’ is defined as:
|
||||||
|
</p>
|
||||||
|
<pre>
|
||||||
|
|
||||||
|
host = NOTATSIGN *NOTATSIGN ; one or more characters that are not an at-sign ("@") (U+0040)
|
||||||
|
|
||||||
|
</pre>
|
||||||
|
<p>
|
||||||
|
Note in this <em>maximal</em> <strong>Fediverse ID</strong> syntax ‘actor’ is optional.
|
||||||
|
But when ‘actor’ isn't included there still needs to be 2 U+0040 ("@") at-signs.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Here are some <strong>Fediverse ID</strong>s that fit this <em>maximal</em> <strong>Fediverse ID</strong> syntax:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li><code class="fediverseid">@joeblow@example.com</code></li>
|
||||||
|
<li><code class="fediverseid">@janedoe@something.example</code></li>
|
||||||
|
<li><code class="fediverseid">@reiver@mastodon.social</code></li>
|
||||||
|
<li><code class="fediverseid">@reiver@greatape.social</code></li>
|
||||||
|
<li><code class="fediverseid">@dariush@changelog.ca</code></li>
|
||||||
|
<li><code class="fediverseid">@malekeh@changelog.ca</code></li>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li><code class="fediverseid">@دورود@example.com</code></li>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li><code class="fediverseid">@@example.com</code></li>
|
||||||
|
<li><code class="fediverseid">@@something.example</code></li>
|
||||||
|
<li><code class="fediverseid">@@mastodon.social</code></li>
|
||||||
|
<li><code class="fediverseid">@@greatape.social</code></li>
|
||||||
|
<li><code class="fediverseid">@@changelog.ca</code></li>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li><code class="fediverseid">@🙂@example.com</code></li>
|
||||||
|
<li><code class="fediverseid">@:-)@something.example</code></li>
|
||||||
|
<li><code class="fediverseid">@(╯°□°)╯︵ ┻━┻@mastodon.social</code></li>
|
||||||
|
<li><code class="fediverseid">@😈❤️@greatape.social</code></li>
|
||||||
|
<li><code class="fediverseid">@@changelog.ca</code></li>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li><code class="fediverseid">@.@example.com</code></li>
|
||||||
|
<li><code class="fediverseid">@joe.blow@example.com</code></li>
|
||||||
|
<li><code class="fediverseid">@jane.doe@something.example</code></li>
|
||||||
|
<li><code class="fediverseid">@.reiver@mastodon.social</code></li>
|
||||||
|
<li><code class="fediverseid">@reiver.@greatape.social</code></li>
|
||||||
|
<li><code class="fediverseid">@d.a.r.i.u.sh@changelog.ca</code></li>
|
||||||
|
<li><code class="fediverseid">@.m.a.l.e.k.e.h.@changelog.ca</code></li>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li><code class="fediverseid">@joeblow+@example.com</code></li>
|
||||||
|
<li><code class="fediverseid">@janedoe+@something.example</code></li>
|
||||||
|
<li><code class="fediverseid">@reiver+@mastodon.social</code></li>
|
||||||
|
<li><code class="fediverseid">@reiver+@greatape.social</code></li>
|
||||||
|
<li><code class="fediverseid">@dariush+@changelog.ca</code></li>
|
||||||
|
<li><code class="fediverseid">@malekeh+@changelog.ca</code></li>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li><code class="fediverseid">@joeblow+tech@example.com</code></li>
|
||||||
|
<li><code class="fediverseid">@janedoe+psychology@something.example</code></li>
|
||||||
|
<li><code class="fediverseid">@reiver+fediverse@mastodon.social</code></li>
|
||||||
|
<li><code class="fediverseid">@reiver+allyourbases@greatape.social</code></li>
|
||||||
|
<li><code class="fediverseid">@dariush+one@changelog.ca</code></li>
|
||||||
|
<li><code class="fediverseid">@malekeh+two@changelog.ca</code></li>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li><code class="fediverseid">@joeblow/tech@example.com</code></li>
|
||||||
|
<li><code class="fediverseid">@janedoe/psychology@something.example</code></li>
|
||||||
|
<li><code class="fediverseid">@reiver/fediverse@mastodon.social</code></li>
|
||||||
|
<li><code class="fediverseid">@reiver/allyourbases@greatape.social</code></li>
|
||||||
|
<li><code class="fediverseid">@dariush/one@changelog.ca</code></li>
|
||||||
|
<li><code class="fediverseid">@malekeh/two@changelog.ca</code></li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h2>acct URI</h2>
|
<h2>acct URI</h2>
|
||||||
<p>
|
<p>
|
||||||
Part of the process of <strong>resolving</strong> a <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link> transfomrs a <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link> into an <ziba-link>acct URI</ziba-link>.
|
Part of the process of <strong>resolving</strong> a <strong>Fediverse ID</strong> transfomrs a <strong>Fediverse ID</strong> into an <ziba-link>acct URI</ziba-link>.
|
||||||
(And then using that <ziba-link>acct URI</ziba-link> version of the <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link> makes a request to <ziba-link transform="lowercase">WebFinger</ziba-link>.)
|
(And then using that <ziba-link>acct URI</ziba-link> version of the <strong>Fediverse ID</strong> makes a request to <ziba-link dir=".." transform="lowercase">WebFinger</ziba-link>.)
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
Here is an example of transforming a <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link> into an <ziba-link>acct URI</ziba-link>:
|
Here is an example of transforming a <strong>Fediverse ID</strong> into an <ziba-link>acct URI</ziba-link>:
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
|
|
||||||
|
@ -48,34 +155,51 @@
|
||||||
A client would then make a request to:
|
A client would then make a request to:
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
|
|
||||||
https://example.com/.well-known/host-meta
|
https://example.com/.well-known/host-meta
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
To discover what the (template) URL for <ziba-link transform="lowercase">WebFinger</ziba-link> is.
|
To discover what the (template) URL for <ziba-link dir=".." transform="lowercase">WebFinger</ziba-link> is.
|
||||||
And then, for example, if it is at:
|
And then, for example, if it is at:
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
|
|
||||||
https://example.com/.well-known/webfinger?resource={uri}
|
https://example.com/.well-known/webfinger?resource={uri}
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
Then make a request to:
|
Then make a request to:
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
|
|
||||||
https://example.com/.well-known/webfinger?resource=acct:joeblow@example.com
|
https://example.com/.well-known/webfinger?resource=acct:joeblow@example.com
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
|
<p>
|
||||||
|
This <ziba-link dir=".." transform="lowercase">WebFinger</ziba-link> implementation <em>could</em> accept whatever it wants.
|
||||||
|
It doesn't have to restrict itself to what is specified by the IETF RFC-7565 (The 'acct' URI Scheme) specification.
|
||||||
|
BUT —
|
||||||
|
</p>
|
||||||
</section>
|
</section>
|
||||||
<section>
|
<section>
|
||||||
<h2>Fediverse ID Syntax</h2>
|
<h2>Minimal Fediverse ID Syntax</h2>
|
||||||
<p>
|
<p>
|
||||||
Inferring from IETF RFC-7565 (The 'acct' URI Scheme) and referenced IEFC RFCs, the syntax of a <ziba-link transform="lowerllamacase">Fediverse ID</ziba-link> is:
|
Let us consider what a <em>minimal</em> <strong>Fediverse ID</strong> syntax would be if we constrained ourselves to what the IETF RFC-7565 (The 'acct' URI Scheme) specificaiton says.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Here is what we get:
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
|
|
||||||
fediverseID = "@" actor "@" host
|
fediverseID = "@" actor "@" host
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
Where “actor” is defined as:
|
Where “actor” is defined as:
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
|
|
||||||
actor = unreserved / sub-delims 0*( unreserved / pct-encoded / sub-delims )
|
actor = unreserved / sub-delims 0*( unreserved / pct-encoded / sub-delims )
|
||||||
|
|
||||||
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
|
||||||
|
@ -89,6 +213,7 @@ ALPHA = %x41-5A / %x61-7A ; A-Z / a-z
|
||||||
DIGIT = %x30-39 ; 0-9
|
DIGIT = %x30-39 ; 0-9
|
||||||
|
|
||||||
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
|
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<p>
|
<p>
|
||||||
(Again note that an implementation <em>could</em> support more characters for “actor” than what is given by this definition.)
|
(Again note that an implementation <em>could</em> support more characters for “actor” than what is given by this definition.)
|
||||||
|
@ -97,6 +222,7 @@ HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
|
||||||
And “host” is defined as
|
And “host” is defined as
|
||||||
</p>
|
</p>
|
||||||
<pre>
|
<pre>
|
||||||
|
|
||||||
host = IP-literal / IPv4address / reg-name
|
host = IP-literal / IPv4address / reg-name
|
||||||
|
|
||||||
IP-literal = "[" ( IPv6address / IPvFuture ) "]"
|
IP-literal = "[" ( IPv6address / IPvFuture ) "]"
|
||||||
|
@ -126,6 +252,7 @@ dec-octet = DIGIT ; 0-9
|
||||||
/ "25" %x30-35 ; 250-255
|
/ "25" %x30-35 ; 250-255
|
||||||
|
|
||||||
reg-name = *( unreserved / pct-encoded / sub-delims )
|
reg-name = *( unreserved / pct-encoded / sub-delims )
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
</section>
|
</section>
|
||||||
</article>
|
</article>
|
||||||
|
|
Loading…
Reference in New Issue