30 lines
17 KiB
HTML
30 lines
17 KiB
HTML
<!DOCTYPE html PUBLIC ""
|
||
"">
|
||
<html><head><meta charset="UTF-8" /><title>dog-and-duck.quack.quack documentation</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">Dog-and-duck</span> <span class="project-version">0.1.0-SNAPSHOT</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Using_ActivityPub.html"><div class="inner"><span>Using ActivityPub</span></div></a></li><li class="depth-1 "><a href="Validation_Faults.html"><div class="inner"><span>Validation Faults in ActivityPub documents</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>clj-activitypub</span></div></div></li><li class="depth-2 branch"><a href="clj-activitypub.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>internal</span></div></div></li><li class="depth-3 branch"><a href="clj-activitypub.internal.crypto.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>crypto</span></div></a></li><li class="depth-3 branch"><a href="clj-activitypub.internal.http-util.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>http-util</span></div></a></li><li class="depth-3"><a href="clj-activitypub.internal.thread-cache.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>thread-cache</span></div></a></li><li class="depth-2"><a href="clj-activitypub.webfinger.html"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>webfinger</span></div></a></li><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>dog-and-duck</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.quack.fault-messages.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>fault-messages</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.quack.picky.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>picky</span></div></a></li><li class="depth-3 current"><a href="dog-and-duck.quack.quack.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>quack</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>scratch</span></div></div></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.core.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>core</span></div></a></li><li class="depth-3 branch"><a href="dog-and-duck.scratch.parser.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>parser</span></div></a></li><li class="depth-3"><a href="dog-and-duck.scratch.scratch.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>scratch</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -114px;"><span class="top" style="height: 123px;"></span><span class="bottom"></span></span><span>utils</span></div></div></li><li class="depth-3"><a href="dog-and-duck.utils.process.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>process</span></div></a></li></ul></div><div class="sidebar secondary"><h3><a href="#top"><span class="inner">Public Vars</span></a></h3><ul><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-activity.3F"><div class="inner"><span>activity?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-actor-or-uri.3F"><div class="inner"><span>actor-or-uri?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-actor-type.3F"><div class="inner"><span>actor-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-actor-types"><div class="inner"><span>actor-types</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-actor.3F"><div class="inner"><span>actor?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-collection-page.3F"><div class="inner"><span>collection-page?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-collection.3F"><div class="inner"><span>collection?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-link-or-uri.3F"><div class="inner"><span>link-or-uri?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-link.3F"><div class="inner"><span>link?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-object.3F"><div class="inner"><span>object?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-ordered-collection-page.3F"><div class="inner"><span>ordered-collection-page?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-ordered-collection.3F"><div class="inner"><span>ordered-collection?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-persistent-object.3F"><div class="inner"><span>persistent-object?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-unordered-collection.3F"><div class="inner"><span>unordered-collection?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-verb-type.3F"><div class="inner"><span>verb-type?</span></div></a></li><li class="depth-1"><a href="dog-and-duck.quack.quack.html#var-verb-types"><div class="inner"><span>verb-types</span></div></a></li></ul></div><div class="namespace-docs" id="content"><h1 class="anchor" id="top">dog-and-duck.quack.quack</h1><div class="doc"><div class="markdown"><p>Validator for ActivityPub objects: if it walks like a duck, and it quacks like a duck…</p>
|
||
<p>**NOTE THAT the ActivityPub spec <a href="https://www.w3.org/TR/activitypub/#obj">says</a></p>
|
||
<blockquote>
|
||
<p>Servers SHOULD validate the content they receive to avoid content spoofing attacks</p>
|
||
</blockquote>
|
||
<p>but in practice ActivityPub content collected in the wild bears only a hazy relationship to the spec, so this is difficult. I suspect that I may have to implement a <code>*strict*</code> dynamic variable, so that users can toggle some checks off.</p></div></div><div class="public anchor" id="var-activity.3F"><h3>activity?</h3><div class="usage"><code>(activity? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like an activity, else false.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L143">view source</a></div></div><div class="public anchor" id="var-actor-or-uri.3F"><h3>actor-or-uri?</h3><div class="usage"><code>(actor-or-uri? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> if <code>x</code> is either a URI or an actor.</p>
|
||
<p><strong>TODO</strong>: I need to decide about whether to reify referenced objects before validation or after. After reification, every reference to an actor <em>must be</em> to an actor object, but before, may only be to a URI pointing to one.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L130">view source</a></div></div><div class="public anchor" id="var-actor-type.3F"><h3>actor-type?</h3><h4 class="type">macro</h4><div class="usage"><code>(actor-type? x)</code></div><div class="doc"><div class="markdown"><p>Return <code>true</code> iff the <code>x</code> is a recognised actor type, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L84">view source</a></div></div><div class="public anchor" id="var-actor-types"><h3>actor-types</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The set of types we will accept as actors.</p>
|
||
<p>There’s an <a href="https://www.w3.org/TR/activitystreams-vocabulary/#actor-types">explicit set of allowed actor types</a>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L73">view source</a></div></div><div class="public anchor" id="var-actor.3F"><h3>actor?</h3><div class="usage"><code>(actor? x)</code></div><div class="doc"><div class="markdown"><p>Returns <code>true</code> if <code>x</code> quacks like an actor, else false.</p>
|
||
<p><strong>NOTE THAT</strong> <a href="https://www.w3.org/TR/activitypub/#actor-objects">Section 4.1 of the spec</a> says explicitly that</p>
|
||
<blockquote>
|
||
<p>Actor objects MUST have, in addition to the properties mandated by 3.1 Object Identifiers, the following properties:</p>
|
||
<p>inbox A reference to an [ActivityStreams] OrderedCollection comprised of all the messages received by the actor; see 5.2 Inbox. outbox An [ActivityStreams] OrderedCollection comprised of all the messages produced by the actor; see 5.1 Outbox. </p>
|
||
</blockquote>
|
||
<p>However, none of the provided examples in the <a href="">activitystreams-test-documents repository</a> does in fact have these properties</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L107">view source</a></div></div><div class="public anchor" id="var-collection-page.3F"><h3>collection-page?</h3><div class="usage"><code>(collection-page? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a page in a paged collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L217">view source</a></div></div><div class="public anchor" id="var-collection.3F"><h3>collection?</h3><div class="usage"><code>(collection? x object-type)</code><code>(collection? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a collection of type <code>object-type</code>, else <code>false</code>.</p>
|
||
<p>With one argument, will recognise plain collections and ordered collections, but (currently) not collection pages.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L175">view source</a></div></div><div class="public anchor" id="var-link-or-uri.3F"><h3>link-or-uri?</h3><div class="usage"><code>(link-or-uri? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> is either a URI or a link, else false.</p>
|
||
<p>There are several points in the specification where e.g. the <code>:image</code> property (if present) may be either a link or a URI.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L164">view source</a></div></div><div class="public anchor" id="var-link.3F"><h3>link?</h3><div class="usage"><code>(link? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a link, else false.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L156">view source</a></div></div><div class="public anchor" id="var-object.3F"><h3>object?</h3><div class="usage"><code>(object? x)</code><code>(object? x severity)</code></div><div class="doc"><div class="markdown"><p>Returns <code>true</code> iff <code>x</code> is recognisably an ActivityStreams object.</p>
|
||
<p><strong>NOTE THAT</strong> The ActivityStreams spec <a href="https://www.w3.org/TR/activitystreams-core/#object">says</a>:</p>
|
||
<blockquote>
|
||
<p>All properties are optional (including the id and type)</p>
|
||
</blockquote>
|
||
<p>But we are <em>just not having that</em>, because otherwise we’re flying blind. We <em>shall</em> reject objects lacking at least <code>:type</code>. Missing <code>:id</code> keys are tolerable because they represent transient objects, which we expect to handle.</p>
|
||
<p><strong>NOTE THAT</strong> The ActivityPub spec <a href="https://www.w3.org/TR/activitypub/#obj">says</a></p>
|
||
<blockquote>
|
||
<p>Implementers SHOULD include the ActivityPub context in their object definitions</p>
|
||
</blockquote>
|
||
<p>but in samples found in the wild they typically don’t.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L37">view source</a></div></div><div class="public anchor" id="var-ordered-collection-page.3F"><h3>ordered-collection-page?</h3><div class="usage"><code>(ordered-collection-page? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like a page in an ordered paged collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L222">view source</a></div></div><div class="public anchor" id="var-ordered-collection.3F"><h3>ordered-collection?</h3><div class="usage"><code>(ordered-collection? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like an ordered collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L212">view source</a></div></div><div class="public anchor" id="var-persistent-object.3F"><h3>persistent-object?</h3><div class="usage"><code>(persistent-object? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> is a persistent object.</p>
|
||
<p>Transient objects in ActivityPub are not required to have an <code>id</code> key, but persistent ones must have a key, and it must be an IRI (but normally a URI).</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L61">view source</a></div></div><div class="public anchor" id="var-unordered-collection.3F"><h3>unordered-collection?</h3><div class="usage"><code>(unordered-collection? x)</code></div><div class="doc"><div class="markdown"><p><code>true</code> iff <code>x</code> quacks like an unordered collection, else <code>false</code>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L207">view source</a></div></div><div class="public anchor" id="var-verb-type.3F"><h3>verb-type?</h3><h4 class="type">macro</h4><div class="usage"><code>(verb-type? x)</code></div><div class="doc"><div class="markdown"><p><strong>TODO</strong>: write docs</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L101">view source</a></div></div><div class="public anchor" id="var-verb-types"><h3>verb-types</h3><div class="usage"></div><div class="doc"><div class="markdown"><p>The set of types we will accept as verbs.</p>
|
||
<p>There’s an <a href="https://www.w3.org/TR/activitystreams-vocabulary/#activity-types">explicit set of allowed verb types</a>.</p></div></div><div class="src-link"><a href="https://github.com/simon-brooke/dog-and-duck/blob/master/src/dog_and_duck/quack/quack.clj#L91">view source</a></div></div></div></body></html> |