Include generated documentation in repo for now
This commit is contained in:
parent
8bcd11200e
commit
7ee72b80db
18 changed files with 2720 additions and 30 deletions
|
@ -1,29 +0,0 @@
|
||||||
require 'fileutils'
|
|
||||||
|
|
||||||
class LanguagePack::Custom < LanguagePack::Rack
|
|
||||||
def self.use?
|
|
||||||
true
|
|
||||||
end
|
|
||||||
|
|
||||||
def name
|
|
||||||
"Nanoc"
|
|
||||||
end
|
|
||||||
|
|
||||||
# hack to hook into ruby pack
|
|
||||||
def run_assets_precompile_rake_task
|
|
||||||
require 'benchmark'
|
|
||||||
topic "Compiling nanoc site"
|
|
||||||
|
|
||||||
cache_clear 'output' if ENV['CLEAR_CACHE']
|
|
||||||
|
|
||||||
puts "Found cached output directory." if cache_load 'output'
|
|
||||||
time = Benchmark.realtime { pipe("env PATH=$PATH:vendor/pygments:bin bundle exec nanoc compile") }
|
|
||||||
|
|
||||||
if $?.success?
|
|
||||||
cache_store 'output'
|
|
||||||
puts "Nanoc compilation completed (#{"%.2f" % time}s)"
|
|
||||||
else
|
|
||||||
exit $?.to_i
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,2 @@
|
||||||
tmp
|
tmp
|
||||||
output
|
|
||||||
crash.log
|
crash.log
|
||||||
|
|
1
output/assets/css/bootstrap-cb0b9b6b1fd.css
vendored
Normal file
1
output/assets/css/bootstrap-cb0b9b6b1fd.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
output/assets/css/bootstrap-responsive-cb034fa29d4.css
vendored
Normal file
1
output/assets/css/bootstrap-responsive-cb034fa29d4.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
output/assets/css/style-cba5092b759.css
Normal file
1
output/assets/css/style-cba5092b759.css
Normal file
|
@ -0,0 +1 @@
|
||||||
|
.hll{background-color:#ffc}.c{color:#408080;font-style:italic}.k{color:#008000;font-weight:700}.o{color:#666}.cm{color:#408080;font-style:italic}.cp{color:#BC7A00}.c1{color:#408080;font-style:italic}.cs{color:#408080;font-style:italic}.gd{color:#A00000}.ge{font-style:italic}.gr{color:red}.gh{color:#000080;font-weight:700}.gi{color:#00A000}.go{color:#808080}.gp{color:#000080;font-weight:700}.gs{font-weight:700}.gu{color:#800080;font-weight:700}.gt{color:#0040D0}.kc{color:#008000;font-weight:700}.kd{color:#008000;font-weight:700}.kn{color:#008000;font-weight:700}.kp{color:#008000}.kr{color:#008000;font-weight:700}.kt{color:#B00040}.m{color:#666}.s{color:#BA2121}.na{color:#7D9029}.nb{color:#008000}.nc{color:#00F;font-weight:700}.no{color:#800}.nd{color:#A2F}.ni{color:#999;font-weight:700}.ne{color:#D2413A;font-weight:700}.nf{color:#00F}.nl{color:#A0A000}.nn{color:#00F;font-weight:700}.nt{color:#008000;font-weight:700}.nv{color:#19177C}.ow{color:#A2F;font-weight:700}.w{color:#bbb}.mf{color:#666}.mh{color:#666}.mi{color:#666}.mo{color:#666}.sb{color:#BA2121}.sc{color:#BA2121}.sd{color:#BA2121;font-style:italic}.s2{color:#BA2121}.se{color:#B62;font-weight:700}.sh{color:#BA2121}.si{color:#B68;font-weight:700}.sx{color:#008000}.sr{color:#B68}.s1{color:#BA2121}.ss{color:#19177C}.bp{color:#008000}.vc{color:#19177C}.vg{color:#19177C}.vi{color:#19177C}.il{color:#666}h1,h2,h3,h4,h5,h6{font-weight:200}article{margin-bottom:30px}article date{display:block;margin-bottom:10px;margin-top:10px}footer{text-align:center;margin-top:20px;padding-top:10px;padding-bottom:10px;border-top:1px grey solid}.doc{margin-top:10px}.alert h4{font-weight:700}
|
189
output/blog.html
Normal file
189
output/blog.html
Normal file
|
@ -0,0 +1,189 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head><meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<title>Tent - the decentralized social web</title>
|
||||||
|
<link href="/assets/css/bootstrap-cb0b9b6b1fd.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/bootstrap-responsive-cb034fa29d4.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/style-cba5092b759.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/blog.xml" rel="alternate" title="Atom feed" type="application/atom+xml" />
|
||||||
|
<script type="text/javascript">var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-34258323-1']);
|
||||||
|
_gaq.push(['_setSiteSpeedSampleRate', 50]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();</script></head>
|
||||||
|
<body><div class="navbar navbar-static-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<a class="brand" href="/">Tent</a>
|
||||||
|
<ul class="nav"><li class="active"><a href="/blog">Blog</a></li><li ><a href="/docs">Docs</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</div><div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span8 offset2"><article>
|
||||||
|
<date datetime="2012-08-22T14:05:00-04:00" pubdate="pubdate" title="2012-08-22 14:05 EDT">August 22, 2012</date>
|
||||||
|
<h1><a href="/blog/introducing-tent">Introducing Tent</a></h1><p>Tent is a new protocol for open, distributed social networking.</p>
|
||||||
|
|
||||||
|
<p><em>What we believe</em> – <a href="/blog/the-tent-manifesto">The Tent Manifesto</a></p>
|
||||||
|
|
||||||
|
<h3>What makes Tent different?</h3>
|
||||||
|
|
||||||
|
<p>Tent is decentralized, not federated or centralized. Any Tent server can connect
|
||||||
|
to any other Tent server. All features are available to any server as
|
||||||
|
first-class citizens. Anyone can host their own Tent server. Tent servers can
|
||||||
|
also be run as Tor hidden services to create a social darknet for at-risk
|
||||||
|
organizers and activists. Anyone can write applications that connect to Tent in
|
||||||
|
order to display or create user content.</p>
|
||||||
|
|
||||||
|
<p>Relationships are between users, independent of their service providers, so
|
||||||
|
users take their data and relationships with them when they change Tent service
|
||||||
|
providers. Every user decides which other users can follow them and what
|
||||||
|
information will be shared with each of their followers.</p>
|
||||||
|
|
||||||
|
<h3>You are your memories and relationships</h3>
|
||||||
|
|
||||||
|
<p>We use social networks to advertise our identities, communicate with friends,
|
||||||
|
families, co-workers, customers, and brands. The content we create in the form
|
||||||
|
of messages, uploaded media, and social graphs is not only valuable, it has come
|
||||||
|
to define each of us. This information, our relationships and our data needs to
|
||||||
|
be under our own control. When a user leaves a social service provider for any
|
||||||
|
reason, that user should be able to take their relationships, not just a copy of
|
||||||
|
their data, with them. Tent lets them.</p>
|
||||||
|
|
||||||
|
<h3>Planning for the Future</h3>
|
||||||
|
|
||||||
|
<p>Tent supports extensible formats for post types and profile information. As
|
||||||
|
developers' needs change they are free to create new open formats for data
|
||||||
|
exchange. Tent is built on HTTPS, JSON and OAuth, each of which handles hundreds
|
||||||
|
of millions of transactions online each day. We designed Tent to grow and adapt
|
||||||
|
with its users.</p>
|
||||||
|
|
||||||
|
<h3>The Tent Ecosystem</h3>
|
||||||
|
|
||||||
|
<p>Tent is not specifying the economics of an ecosystem. There will be many options
|
||||||
|
for users, from free to paid to self hosted, from ad-supported to
|
||||||
|
advertising-free, with providers that serve different market segments and
|
||||||
|
types of users. Since anyone can set up a Tent server or become a service
|
||||||
|
provider, niche needs should quickly be met, based on demand.</p>
|
||||||
|
|
||||||
|
<p>There are many spectrums of need:</p>
|
||||||
|
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>technically experienced</td>
|
||||||
|
<td>inexperienced</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>rich</td>
|
||||||
|
<td>poor</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ad tolerant</td>
|
||||||
|
<td>ad intolerant</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>verified</td>
|
||||||
|
<td>pseudonyms</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>public</td>
|
||||||
|
<td>private</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>centralized</td>
|
||||||
|
<td>distributed</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2>Next steps</h2>
|
||||||
|
|
||||||
|
<p>The first Tent server implementation will be available as an open source
|
||||||
|
repository very soon. A hosted version for users unwilling or unable to host
|
||||||
|
their own will follow quickly.</p>
|
||||||
|
|
||||||
|
<p>In the meantime, we encourage anyone with feedback or suggestions on the protocol or who is developing apps or services supporting Tent to add your services to the list in the GitHub repository via pull request. The
|
||||||
|
same goes for post-types and profile info-types: a community site will launch
|
||||||
|
soon, for now, use pull requests or reach out directly: <a href="mailto:info@tent.io">info@tent.io</a></p>
|
||||||
|
|
||||||
|
<p>Read more about Tent in the <a href="http://tent.io">FAQ</a> and <a href="/docs/">developer documentation</a>.</p>
|
||||||
|
</article><article>
|
||||||
|
<date datetime="2012-08-22T14:00:00-04:00" pubdate="pubdate" title="2012-08-22 14:00 EDT">August 22, 2012</date>
|
||||||
|
<h1><a href="/blog/the-tent-manifesto">The Tent Manifesto</a></h1><h3>Every user has the right to freedom of expression.</h3>
|
||||||
|
|
||||||
|
<p>Free speech is a necessary feature of all open societies. Speech can not be free
|
||||||
|
if communication is centralized or intermediated. Users must be able to say
|
||||||
|
anything to anyone they want on their own terms.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to control their own data.</h3>
|
||||||
|
|
||||||
|
<p>This includes who can access the data they create and how that data is later
|
||||||
|
used.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to choose and change their social services providers.</h3>
|
||||||
|
|
||||||
|
<p>This includes the right to negotiate reasonable terms of service collectively or
|
||||||
|
individually.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to host their own social services.</h3>
|
||||||
|
|
||||||
|
<p>All social service providers must be treated equally, regardless of the number
|
||||||
|
of user accounts hosted.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to communicate with any other user, regardless of their service provider.</h3>
|
||||||
|
|
||||||
|
<p>No service provider shall interfere with the communications of any group or pair of users, or exclude any users on the basis of their service provider.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to take their data and relationships with them.</h3>
|
||||||
|
|
||||||
|
<p>User relationships, like content, belong to the user. When changing service
|
||||||
|
providers, users have a right to transfer their relationships and data, and for
|
||||||
|
those relationships and data to be forgotten by the former provider.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to choose their own name.</h3>
|
||||||
|
|
||||||
|
<p>Pesudonyms, multiple accounts, and anonymity are an integral part of
|
||||||
|
communications and must not be restricted.</p>
|
||||||
|
|
||||||
|
<h3>Different users have different needs.</h3>
|
||||||
|
|
||||||
|
<p>No single company, product, or platform can solve them all equally. The only
|
||||||
|
ecosystems capable of serving these needs are protocol-based and decentralized.
|
||||||
|
No user's needs need be served poorly for others' needs to be served.</p>
|
||||||
|
|
||||||
|
<h3>Communication must be decentralized.</h3>
|
||||||
|
|
||||||
|
<p>Only decentralized systems provide protection from outside control.
|
||||||
|
Decentralized systems limit the consequences of a single element failing.
|
||||||
|
Centralized systems by nature limit what can be shared and by whom. In
|
||||||
|
distributed systems, users have the power.</p>
|
||||||
|
|
||||||
|
<h3>Communication protocols must be standardized.</h3>
|
||||||
|
|
||||||
|
<p>All communication from spoken language to digital packets requires a basic set
|
||||||
|
of shared ideas. Global communication systems require a greater degree of detail
|
||||||
|
to be interoperable. These standards must be available to and extensible by the
|
||||||
|
community of users in order to adapt to changing needs.</p>
|
||||||
|
|
||||||
|
<h3>The internet is capable of more.</h3>
|
||||||
|
|
||||||
|
<p>Closed and fragmented systems have stifled growth and change. An open social web
|
||||||
|
will create a new generation of tools, services, and content impossible in
|
||||||
|
today's systems.</p>
|
||||||
|
|
||||||
|
<h3>Conversations change the world.</h3>
|
||||||
|
|
||||||
|
<p>Every revolution, whether political, scientific, or ideological began as
|
||||||
|
a conversation. The rules, conventions, and ethics of communication can be
|
||||||
|
determined only by those participating. Conversation is too important to trust
|
||||||
|
to any third party.</p>
|
||||||
|
|
||||||
|
<p>We're <a href="/blog/introducing-tent">introducing Tent</a>, an open protocol for distributed social networks.
|
||||||
|
Everyone controls what happens to their content.</p>
|
||||||
|
</article></div>
|
||||||
|
</div>
|
||||||
|
</div><footer>© 2012 Apollic Software, LLC</footer></body>
|
||||||
|
</html>
|
186
output/blog.xml
Normal file
186
output/blog.xml
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
|
<id>http://tent.io/</id>
|
||||||
|
<title>Tent</title>
|
||||||
|
<updated>2012-08-22T18:05:00Z</updated>
|
||||||
|
<link rel="alternate" href="http://tent.io/"/>
|
||||||
|
<link rel="self" href="http://tent.io/blog.xml"/>
|
||||||
|
<author>
|
||||||
|
<name>Tent</name>
|
||||||
|
<uri>http://tent.io</uri>
|
||||||
|
</author>
|
||||||
|
<entry>
|
||||||
|
<id>tag:tent.io,2012-08-22:/blog/introducing-tent.html</id>
|
||||||
|
<title type="html">Introducing Tent</title>
|
||||||
|
<published>2012-08-22T18:05:00Z</published>
|
||||||
|
<updated>2012-08-22T18:05:00Z</updated>
|
||||||
|
<link rel="alternate" href="http://tent.io/blog/introducing-tent?utm_source=feed"/>
|
||||||
|
<content type="html"><p>Tent is a new protocol for open, distributed social networking.</p>
|
||||||
|
|
||||||
|
<p><em>What we believe</em> &ndash; <a href="/blog/the-tent-manifesto">The Tent Manifesto</a></p>
|
||||||
|
|
||||||
|
<h3>What makes Tent different?</h3>
|
||||||
|
|
||||||
|
<p>Tent is decentralized, not federated or centralized. Any Tent server can connect
|
||||||
|
to any other Tent server. All features are available to any server as
|
||||||
|
first-class citizens. Anyone can host their own Tent server. Tent servers can
|
||||||
|
also be run as Tor hidden services to create a social darknet for at-risk
|
||||||
|
organizers and activists. Anyone can write applications that connect to Tent in
|
||||||
|
order to display or create user content.</p>
|
||||||
|
|
||||||
|
<p>Relationships are between users, independent of their service providers, so
|
||||||
|
users take their data and relationships with them when they change Tent service
|
||||||
|
providers. Every user decides which other users can follow them and what
|
||||||
|
information will be shared with each of their followers.</p>
|
||||||
|
|
||||||
|
<h3>You are your memories and relationships</h3>
|
||||||
|
|
||||||
|
<p>We use social networks to advertise our identities, communicate with friends,
|
||||||
|
families, co-workers, customers, and brands. The content we create in the form
|
||||||
|
of messages, uploaded media, and social graphs is not only valuable, it has come
|
||||||
|
to define each of us. This information, our relationships and our data needs to
|
||||||
|
be under our own control. When a user leaves a social service provider for any
|
||||||
|
reason, that user should be able to take their relationships, not just a copy of
|
||||||
|
their data, with them. Tent lets them.</p>
|
||||||
|
|
||||||
|
<h3>Planning for the Future</h3>
|
||||||
|
|
||||||
|
<p>Tent supports extensible formats for post types and profile information. As
|
||||||
|
developers&#39; needs change they are free to create new open formats for data
|
||||||
|
exchange. Tent is built on HTTPS, JSON and OAuth, each of which handles hundreds
|
||||||
|
of millions of transactions online each day. We designed Tent to grow and adapt
|
||||||
|
with its users.</p>
|
||||||
|
|
||||||
|
<h3>The Tent Ecosystem</h3>
|
||||||
|
|
||||||
|
<p>Tent is not specifying the economics of an ecosystem. There will be many options
|
||||||
|
for users, from free to paid to self hosted, from ad-supported to
|
||||||
|
advertising-free, with providers that serve different market segments and
|
||||||
|
types of users. Since anyone can set up a Tent server or become a service
|
||||||
|
provider, niche needs should quickly be met, based on demand.</p>
|
||||||
|
|
||||||
|
<p>There are many spectrums of need:</p>
|
||||||
|
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>technically experienced</td>
|
||||||
|
<td>inexperienced</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>rich</td>
|
||||||
|
<td>poor</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ad tolerant</td>
|
||||||
|
<td>ad intolerant</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>verified</td>
|
||||||
|
<td>pseudonyms</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>public</td>
|
||||||
|
<td>private</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>centralized</td>
|
||||||
|
<td>distributed</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2>Next steps</h2>
|
||||||
|
|
||||||
|
<p>The first Tent server implementation will be available as an open source
|
||||||
|
repository very soon. A hosted version for users unwilling or unable to host
|
||||||
|
their own will follow quickly.</p>
|
||||||
|
|
||||||
|
<p>In the meantime, we encourage anyone with feedback or suggestions on the protocol or who is developing apps or services supporting Tent to add your services to the list in the GitHub repository via pull request. The
|
||||||
|
same goes for post-types and profile info-types: a community site will launch
|
||||||
|
soon, for now, use pull requests or reach out directly: <a href="mailto:info@tent.io">info@tent.io</a></p>
|
||||||
|
|
||||||
|
<p>Read more about Tent in the <a href="http://tent.io">FAQ</a> and <a href="/docs/">developer documentation</a>.</p>
|
||||||
|
</content>
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
<id>tag:tent.io,2012-08-22:/blog/the-tent-manifesto.html</id>
|
||||||
|
<title type="html">The Tent Manifesto</title>
|
||||||
|
<published>2012-08-22T18:00:00Z</published>
|
||||||
|
<updated>2012-08-22T18:00:00Z</updated>
|
||||||
|
<link rel="alternate" href="http://tent.io/blog/the-tent-manifesto?utm_source=feed"/>
|
||||||
|
<content type="html"><h3>Every user has the right to freedom of expression.</h3>
|
||||||
|
|
||||||
|
<p>Free speech is a necessary feature of all open societies. Speech can not be free
|
||||||
|
if communication is centralized or intermediated. Users must be able to say
|
||||||
|
anything to anyone they want on their own terms.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to control their own data.</h3>
|
||||||
|
|
||||||
|
<p>This includes who can access the data they create and how that data is later
|
||||||
|
used.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to choose and change their social services providers.</h3>
|
||||||
|
|
||||||
|
<p>This includes the right to negotiate reasonable terms of service collectively or
|
||||||
|
individually.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to host their own social services.</h3>
|
||||||
|
|
||||||
|
<p>All social service providers must be treated equally, regardless of the number
|
||||||
|
of user accounts hosted.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to communicate with any other user, regardless of their service provider.</h3>
|
||||||
|
|
||||||
|
<p>No service provider shall interfere with the communications of any group or pair of users, or exclude any users on the basis of their service provider.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to take their data and relationships with them.</h3>
|
||||||
|
|
||||||
|
<p>User relationships, like content, belong to the user. When changing service
|
||||||
|
providers, users have a right to transfer their relationships and data, and for
|
||||||
|
those relationships and data to be forgotten by the former provider.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to choose their own name.</h3>
|
||||||
|
|
||||||
|
<p>Pesudonyms, multiple accounts, and anonymity are an integral part of
|
||||||
|
communications and must not be restricted.</p>
|
||||||
|
|
||||||
|
<h3>Different users have different needs.</h3>
|
||||||
|
|
||||||
|
<p>No single company, product, or platform can solve them all equally. The only
|
||||||
|
ecosystems capable of serving these needs are protocol-based and decentralized.
|
||||||
|
No user&#39;s needs need be served poorly for others&#39; needs to be served.</p>
|
||||||
|
|
||||||
|
<h3>Communication must be decentralized.</h3>
|
||||||
|
|
||||||
|
<p>Only decentralized systems provide protection from outside control.
|
||||||
|
Decentralized systems limit the consequences of a single element failing.
|
||||||
|
Centralized systems by nature limit what can be shared and by whom. In
|
||||||
|
distributed systems, users have the power.</p>
|
||||||
|
|
||||||
|
<h3>Communication protocols must be standardized.</h3>
|
||||||
|
|
||||||
|
<p>All communication from spoken language to digital packets requires a basic set
|
||||||
|
of shared ideas. Global communication systems require a greater degree of detail
|
||||||
|
to be interoperable. These standards must be available to and extensible by the
|
||||||
|
community of users in order to adapt to changing needs.</p>
|
||||||
|
|
||||||
|
<h3>The internet is capable of more.</h3>
|
||||||
|
|
||||||
|
<p>Closed and fragmented systems have stifled growth and change. An open social web
|
||||||
|
will create a new generation of tools, services, and content impossible in
|
||||||
|
today&#39;s systems.</p>
|
||||||
|
|
||||||
|
<h3>Conversations change the world.</h3>
|
||||||
|
|
||||||
|
<p>Every revolution, whether political, scientific, or ideological began as
|
||||||
|
a conversation. The rules, conventions, and ethics of communication can be
|
||||||
|
determined only by those participating. Conversation is too important to trust
|
||||||
|
to any third party.</p>
|
||||||
|
|
||||||
|
<p>We&#39;re <a href="/blog/introducing-tent">introducing Tent</a>, an open protocol for distributed social networks.
|
||||||
|
Everyone controls what happens to their content.</p>
|
||||||
|
</content>
|
||||||
|
</entry>
|
||||||
|
</feed>
|
||||||
|
|
116
output/blog/introducing-tent.html
Normal file
116
output/blog/introducing-tent.html
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head><meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<title>Introducing Tent · Tent - the decentralized social web</title>
|
||||||
|
<link href="/assets/css/bootstrap-cb0b9b6b1fd.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/bootstrap-responsive-cb034fa29d4.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/style-cba5092b759.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/blog.xml" rel="alternate" title="Atom feed" type="application/atom+xml" />
|
||||||
|
<script type="text/javascript">var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-34258323-1']);
|
||||||
|
_gaq.push(['_setSiteSpeedSampleRate', 50]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();</script></head>
|
||||||
|
<body><div class="navbar navbar-static-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<a class="brand" href="/">Tent</a>
|
||||||
|
<ul class="nav"><li class="active"><a href="/blog">Blog</a></li><li ><a href="/docs">Docs</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</div><div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span8 offset2"><article>
|
||||||
|
<date datetime="2012-08-22T14:05:00-04:00" pubdate="pubdate" title="2012-08-22 14:05 EDT">August 22, 2012</date>
|
||||||
|
<h1><a href="/blog/introducing-tent">Introducing Tent</a></h1><p>Tent is a new protocol for open, distributed social networking.</p>
|
||||||
|
|
||||||
|
<p><em>What we believe</em> – <a href="/blog/the-tent-manifesto">The Tent Manifesto</a></p>
|
||||||
|
|
||||||
|
<h3>What makes Tent different?</h3>
|
||||||
|
|
||||||
|
<p>Tent is decentralized, not federated or centralized. Any Tent server can connect
|
||||||
|
to any other Tent server. All features are available to any server as
|
||||||
|
first-class citizens. Anyone can host their own Tent server. Tent servers can
|
||||||
|
also be run as Tor hidden services to create a social darknet for at-risk
|
||||||
|
organizers and activists. Anyone can write applications that connect to Tent in
|
||||||
|
order to display or create user content.</p>
|
||||||
|
|
||||||
|
<p>Relationships are between users, independent of their service providers, so
|
||||||
|
users take their data and relationships with them when they change Tent service
|
||||||
|
providers. Every user decides which other users can follow them and what
|
||||||
|
information will be shared with each of their followers.</p>
|
||||||
|
|
||||||
|
<h3>You are your memories and relationships</h3>
|
||||||
|
|
||||||
|
<p>We use social networks to advertise our identities, communicate with friends,
|
||||||
|
families, co-workers, customers, and brands. The content we create in the form
|
||||||
|
of messages, uploaded media, and social graphs is not only valuable, it has come
|
||||||
|
to define each of us. This information, our relationships and our data needs to
|
||||||
|
be under our own control. When a user leaves a social service provider for any
|
||||||
|
reason, that user should be able to take their relationships, not just a copy of
|
||||||
|
their data, with them. Tent lets them.</p>
|
||||||
|
|
||||||
|
<h3>Planning for the Future</h3>
|
||||||
|
|
||||||
|
<p>Tent supports extensible formats for post types and profile information. As
|
||||||
|
developers' needs change they are free to create new open formats for data
|
||||||
|
exchange. Tent is built on HTTPS, JSON and OAuth, each of which handles hundreds
|
||||||
|
of millions of transactions online each day. We designed Tent to grow and adapt
|
||||||
|
with its users.</p>
|
||||||
|
|
||||||
|
<h3>The Tent Ecosystem</h3>
|
||||||
|
|
||||||
|
<p>Tent is not specifying the economics of an ecosystem. There will be many options
|
||||||
|
for users, from free to paid to self hosted, from ad-supported to
|
||||||
|
advertising-free, with providers that serve different market segments and
|
||||||
|
types of users. Since anyone can set up a Tent server or become a service
|
||||||
|
provider, niche needs should quickly be met, based on demand.</p>
|
||||||
|
|
||||||
|
<p>There are many spectrums of need:</p>
|
||||||
|
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>technically experienced</td>
|
||||||
|
<td>inexperienced</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>rich</td>
|
||||||
|
<td>poor</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>ad tolerant</td>
|
||||||
|
<td>ad intolerant</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>verified</td>
|
||||||
|
<td>pseudonyms</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>public</td>
|
||||||
|
<td>private</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>centralized</td>
|
||||||
|
<td>distributed</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2>Next steps</h2>
|
||||||
|
|
||||||
|
<p>The first Tent server implementation will be available as an open source
|
||||||
|
repository very soon. A hosted version for users unwilling or unable to host
|
||||||
|
their own will follow quickly.</p>
|
||||||
|
|
||||||
|
<p>In the meantime, we encourage anyone with feedback or suggestions on the protocol or who is developing apps or services supporting Tent to add your services to the list in the GitHub repository via pull request. The
|
||||||
|
same goes for post-types and profile info-types: a community site will launch
|
||||||
|
soon, for now, use pull requests or reach out directly: <a href="mailto:info@tent.io">info@tent.io</a></p>
|
||||||
|
|
||||||
|
<p>Read more about Tent in the <a href="http://tent.io">FAQ</a> and <a href="/docs/">developer documentation</a>.</p>
|
||||||
|
</article></div>
|
||||||
|
</div>
|
||||||
|
</div><footer>© 2012 Apollic Software, LLC</footer></body>
|
||||||
|
</html>
|
101
output/blog/the-tent-manifesto.html
Normal file
101
output/blog/the-tent-manifesto.html
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head><meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<title>The Tent Manifesto · Tent - the decentralized social web</title>
|
||||||
|
<link href="/assets/css/bootstrap-cb0b9b6b1fd.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/bootstrap-responsive-cb034fa29d4.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/style-cba5092b759.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/blog.xml" rel="alternate" title="Atom feed" type="application/atom+xml" />
|
||||||
|
<script type="text/javascript">var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-34258323-1']);
|
||||||
|
_gaq.push(['_setSiteSpeedSampleRate', 50]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();</script></head>
|
||||||
|
<body><div class="navbar navbar-static-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<a class="brand" href="/">Tent</a>
|
||||||
|
<ul class="nav"><li class="active"><a href="/blog">Blog</a></li><li ><a href="/docs">Docs</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</div><div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span8 offset2"><article>
|
||||||
|
<date datetime="2012-08-22T14:00:00-04:00" pubdate="pubdate" title="2012-08-22 14:00 EDT">August 22, 2012</date>
|
||||||
|
<h1><a href="/blog/the-tent-manifesto">The Tent Manifesto</a></h1><h3>Every user has the right to freedom of expression.</h3>
|
||||||
|
|
||||||
|
<p>Free speech is a necessary feature of all open societies. Speech can not be free
|
||||||
|
if communication is centralized or intermediated. Users must be able to say
|
||||||
|
anything to anyone they want on their own terms.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to control their own data.</h3>
|
||||||
|
|
||||||
|
<p>This includes who can access the data they create and how that data is later
|
||||||
|
used.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to choose and change their social services providers.</h3>
|
||||||
|
|
||||||
|
<p>This includes the right to negotiate reasonable terms of service collectively or
|
||||||
|
individually.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to host their own social services.</h3>
|
||||||
|
|
||||||
|
<p>All social service providers must be treated equally, regardless of the number
|
||||||
|
of user accounts hosted.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to communicate with any other user, regardless of their service provider.</h3>
|
||||||
|
|
||||||
|
<p>No service provider shall interfere with the communications of any group or pair of users, or exclude any users on the basis of their service provider.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to take their data and relationships with them.</h3>
|
||||||
|
|
||||||
|
<p>User relationships, like content, belong to the user. When changing service
|
||||||
|
providers, users have a right to transfer their relationships and data, and for
|
||||||
|
those relationships and data to be forgotten by the former provider.</p>
|
||||||
|
|
||||||
|
<h3>Every user has the right to choose their own name.</h3>
|
||||||
|
|
||||||
|
<p>Pesudonyms, multiple accounts, and anonymity are an integral part of
|
||||||
|
communications and must not be restricted.</p>
|
||||||
|
|
||||||
|
<h3>Different users have different needs.</h3>
|
||||||
|
|
||||||
|
<p>No single company, product, or platform can solve them all equally. The only
|
||||||
|
ecosystems capable of serving these needs are protocol-based and decentralized.
|
||||||
|
No user's needs need be served poorly for others' needs to be served.</p>
|
||||||
|
|
||||||
|
<h3>Communication must be decentralized.</h3>
|
||||||
|
|
||||||
|
<p>Only decentralized systems provide protection from outside control.
|
||||||
|
Decentralized systems limit the consequences of a single element failing.
|
||||||
|
Centralized systems by nature limit what can be shared and by whom. In
|
||||||
|
distributed systems, users have the power.</p>
|
||||||
|
|
||||||
|
<h3>Communication protocols must be standardized.</h3>
|
||||||
|
|
||||||
|
<p>All communication from spoken language to digital packets requires a basic set
|
||||||
|
of shared ideas. Global communication systems require a greater degree of detail
|
||||||
|
to be interoperable. These standards must be available to and extensible by the
|
||||||
|
community of users in order to adapt to changing needs.</p>
|
||||||
|
|
||||||
|
<h3>The internet is capable of more.</h3>
|
||||||
|
|
||||||
|
<p>Closed and fragmented systems have stifled growth and change. An open social web
|
||||||
|
will create a new generation of tools, services, and content impossible in
|
||||||
|
today's systems.</p>
|
||||||
|
|
||||||
|
<h3>Conversations change the world.</h3>
|
||||||
|
|
||||||
|
<p>Every revolution, whether political, scientific, or ideological began as
|
||||||
|
a conversation. The rules, conventions, and ethics of communication can be
|
||||||
|
determined only by those participating. Conversation is too important to trust
|
||||||
|
to any third party.</p>
|
||||||
|
|
||||||
|
<p>We're <a href="/blog/introducing-tent">introducing Tent</a>, an open protocol for distributed social networks.
|
||||||
|
Everyone controls what happens to their content.</p>
|
||||||
|
</article></div>
|
||||||
|
</div>
|
||||||
|
</div><footer>© 2012 Apollic Software, LLC</footer></body>
|
||||||
|
</html>
|
117
output/docs.html
Normal file
117
output/docs.html
Normal file
|
@ -0,0 +1,117 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head><meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<title>Protocol Introduction · Tent - the decentralized social web</title>
|
||||||
|
<link href="/assets/css/bootstrap-cb0b9b6b1fd.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/bootstrap-responsive-cb034fa29d4.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/style-cba5092b759.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/blog.xml" rel="alternate" title="Atom feed" type="application/atom+xml" />
|
||||||
|
<script type="text/javascript">var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-34258323-1']);
|
||||||
|
_gaq.push(['_setSiteSpeedSampleRate', 50]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();</script></head>
|
||||||
|
<body><div class="navbar navbar-static-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<a class="brand" href="/">Tent</a>
|
||||||
|
<ul class="nav"><li ><a href="/blog">Blog</a></li><li class="active"><a href="/docs">Docs</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</div><div class="container doc">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span2">
|
||||||
|
<ul class="nav nav-list well">
|
||||||
|
<li class="nav-header">Tent</li>
|
||||||
|
<li><li class="active"><a href="/docs">Protocol Introduction</a></li></li>
|
||||||
|
<li><li ><a href="/docs/server-protocol">Server Protocol</a></li></li>
|
||||||
|
<li><li ><a href="/docs/app-auth">App Authentication</a></li></li>
|
||||||
|
<li><li ><a href="/docs/app-server">Server API for Apps</a></li></li>
|
||||||
|
<li class="nav-header">Types</li>
|
||||||
|
<li><li ><a href="/docs/post-types">Post Types</a></li></li>
|
||||||
|
<li><li ><a href="/docs/info-types">Profile Info Types</a></li></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="span8">
|
||||||
|
<div class="alert alert-block">
|
||||||
|
<h4>Alpha Documentation </h4>
|
||||||
|
<p>These docs are very rough, incorrect, and incomplete. They will be modified heavily over the next few weeks.</p>
|
||||||
|
<p>Please contribute by making Pull Requests and Issues on the <a href="https://github.com/tent/tent.io">GitHub repository</a>.</p>
|
||||||
|
</div><h2>The Tent Protocol</h2>
|
||||||
|
|
||||||
|
<p>Tent is a protocol for distributed social networking. It allows you to control
|
||||||
|
your data, who has access to it, and what can be done with it.</p>
|
||||||
|
|
||||||
|
<h3>API Overview</h3>
|
||||||
|
|
||||||
|
<p>Tent uses <a href="http://en.wikipedia.org/wiki/JSON">JSON</a> over HTTP.</p>
|
||||||
|
|
||||||
|
<p>Requests are authenticated with <a href="http://en.wikipedia.org/wiki/Hash-based_message_authentication_code">HMAC</a>
|
||||||
|
signatures, and apps use <a href="http://en.wikipedia.org/wiki/OAuth">OAuth 2</a> to access
|
||||||
|
content on behalf of users.</p>
|
||||||
|
|
||||||
|
<h3>Users</h3>
|
||||||
|
|
||||||
|
<p>Tent users are called entities and are defined by a URI.</p>
|
||||||
|
|
||||||
|
<p><strong>Example:</strong> John Smith's entity might be <code>https://johnsmith.me/</code>, implying a <a href="http://en.wikipedia.org/wiki/HEAD_%28HTTP%29#Request_methods">HEAD
|
||||||
|
request</a> to
|
||||||
|
<code>https://johnsmith.me/</code> would respond with a <code>Link</code> header pointing to
|
||||||
|
a Tent profile (e.g. <code>https://tent.johnsmith.me/profile</code>)</p>
|
||||||
|
|
||||||
|
<h3>Profiles</h3>
|
||||||
|
|
||||||
|
<p>Every Tent entity has a profile JSON file describing it. The most basic profile
|
||||||
|
has a single object containing the Tent version, the entity name (e.g.
|
||||||
|
johnsmith.me), an array of supported licences, and an array of servers
|
||||||
|
containing canonical API roots.</p>
|
||||||
|
|
||||||
|
<p>You may have multiple versions of the same info type in your profile (e.g. you
|
||||||
|
might need to support multiple versions of Tent.)</p>
|
||||||
|
|
||||||
|
<h3>Servers</h3>
|
||||||
|
|
||||||
|
<p>Tent servers are the protocol core. A server handles these responsibilities:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Persisting data</li>
|
||||||
|
<li>Notifying other servers about new data</li>
|
||||||
|
<li>Ensuring content is only pushed to recipients accepting associated licences</li>
|
||||||
|
<li>Managing a list of servers (entities) it is following</li>
|
||||||
|
<li>Managing a list of servers (entities) that are following it</li>
|
||||||
|
<li>Authorizing apps to access data</li>
|
||||||
|
<li>Notifying apps about new or modified data they have access to</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>Apps</h3>
|
||||||
|
|
||||||
|
<p>Tent apps are typically where content is created and consumed.</p>
|
||||||
|
|
||||||
|
<p>For example:</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>ian-hanson.me (Ian) posts a status update (post) from a micro blogging app authenticated with his server.</li>
|
||||||
|
<li>The app publishes the post to his server.</li>
|
||||||
|
<li>His server sends a notification to every server following him or mentioned in the post with permission to see the post.</li>
|
||||||
|
<li>If anna-collins.me (Anna) is following Ian, her server will receive a notification from Ian’s server containing the post.</li>
|
||||||
|
<li>If Anna has an app setup for consuming status updates, her server will send it a notification with Ian’s post.</li>
|
||||||
|
<li>Anna can now read Ian’s post from the status app.</li>
|
||||||
|
<li>If Anna decides to reply, her response will follow a path inverse to Ian’s post.</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<h3>Posts</h3>
|
||||||
|
|
||||||
|
<p>Tent posts can be used to describe anything. The term used to describe a piece
|
||||||
|
of content is <strong>post</strong>. Posts each have a post type which describes its data.</p>
|
||||||
|
|
||||||
|
<h3>Notifications</h3>
|
||||||
|
|
||||||
|
<p>Tent notifications are used when a server needs to let another server or app
|
||||||
|
know about new content updates. Notifications are JSON POST requests containing
|
||||||
|
posts.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><footer>© 2012 Apollic Software, LLC</footer></body>
|
||||||
|
</html>
|
539
output/docs/app-auth.html
Normal file
539
output/docs/app-auth.html
Normal file
|
@ -0,0 +1,539 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head><meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<title>App Authentication · Tent - the decentralized social web</title>
|
||||||
|
<link href="/assets/css/bootstrap-cb0b9b6b1fd.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/bootstrap-responsive-cb034fa29d4.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/style-cba5092b759.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/blog.xml" rel="alternate" title="Atom feed" type="application/atom+xml" />
|
||||||
|
<script type="text/javascript">var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-34258323-1']);
|
||||||
|
_gaq.push(['_setSiteSpeedSampleRate', 50]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();</script></head>
|
||||||
|
<body><div class="navbar navbar-static-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<a class="brand" href="/">Tent</a>
|
||||||
|
<ul class="nav"><li ><a href="/blog">Blog</a></li><li class="active"><a href="/docs">Docs</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</div><div class="container doc">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span2">
|
||||||
|
<ul class="nav nav-list well">
|
||||||
|
<li class="nav-header">Tent</li>
|
||||||
|
<li><li ><a href="/docs">Protocol Introduction</a></li></li>
|
||||||
|
<li><li ><a href="/docs/server-protocol">Server Protocol</a></li></li>
|
||||||
|
<li><li class="active"><a href="/docs/app-auth">App Authentication</a></li></li>
|
||||||
|
<li><li ><a href="/docs/app-server">Server API for Apps</a></li></li>
|
||||||
|
<li class="nav-header">Types</li>
|
||||||
|
<li><li ><a href="/docs/post-types">Post Types</a></li></li>
|
||||||
|
<li><li ><a href="/docs/info-types">Profile Info Types</a></li></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="span8">
|
||||||
|
<div class="alert alert-block">
|
||||||
|
<h4>Alpha Documentation </h4>
|
||||||
|
<p>These docs are very rough, incorrect, and incomplete. They will be modified heavily over the next few weeks.</p>
|
||||||
|
<p>Please contribute by making Pull Requests and Issues on the <a href="https://github.com/tent/tent.io">GitHub repository</a>.</p>
|
||||||
|
</div><h2>App Authentication</h2>
|
||||||
|
|
||||||
|
<p>Tent uses <a href="http://tools.ietf.org/html/draft-ietf-oauth-v2-31">OAuth 2</a> for app
|
||||||
|
authentication. Because of the distributed nature of Tent, it is necessary for
|
||||||
|
apps to register with the Tent entity before doing the authentication flow.</p>
|
||||||
|
|
||||||
|
<p>After the authentication flow, requests are authenticated using the credentials
|
||||||
|
with <a href="http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01">MAC Access
|
||||||
|
Authentication</a>.</p>
|
||||||
|
|
||||||
|
<h3>App Registration</h3>
|
||||||
|
|
||||||
|
<p>Before authenticating a user, the application must be registered with the
|
||||||
|
specified Tent entity. The first step is to perform discovery on the provided
|
||||||
|
entity url.</p>
|
||||||
|
<div class="highlight"><pre>HEAD / HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: text/html
|
||||||
|
Link: </profile>; rel="https://tent.io/rels/profile"
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>The next step is to register the application with the server. Registration
|
||||||
|
specifies some details about the app, as well as the exact <code>redirect_uris</code> that
|
||||||
|
will be used during the OAuth flow. The response <code>id</code>, <code>secret</code>, and
|
||||||
|
<code>mac_algorithm</code> are used to authenticate future requests to the Tent server.
|
||||||
|
The <code>id</code> is used as the <code>client_id</code> in all OAuth requests.</p>
|
||||||
|
<div class="highlight"><pre>POST /apps HTTP/1.1
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"FooApp"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"description"</span><span class="p">:</span> <span class="s2">"Does amazing foos with your data"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://example.com"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"icon"</span><span class="p">:</span> <span class="s2">"http://example.com/icon.png"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"redirect_uris"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://app.example.com/tent/callback"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"scopes"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"write_profile"</span><span class="p">:</span> <span class="s2">"Uses an app profile section to describe foos"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"read_followings"</span><span class="p">:</span> <span class="s2">"Calculates foos based on your followings"</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Content-Length: 459
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"FooApp"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"description"</span><span class="p">:</span> <span class="s2">"Does amazing foos with your data"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://example.com"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"icon"</span><span class="p">:</span> <span class="s2">"http://example.com/icon.png"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"redirect_uris"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://app.example.com/tent/callback"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"scopes"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"write_profile"</span><span class="p">:</span> <span class="s2">"Uses an app profile section to describe foos"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"read_followings"</span><span class="p">:</span> <span class="s2">"Calculates foos based on your followings"</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"p0cq4m"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"mac_key_id"</span><span class="p">:</span> <span class="s2">"a:f665629b"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"mac_key"</span><span class="p">:</span> <span class="s2">"6cda8195d50bb55fb17d22de3f7575de"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"mac_algorithm"</span><span class="p">:</span> <span class="s2">"hmac-sha-256"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"authorizations"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h4>App JSON Schema</h4>
|
||||||
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead >
|
||||||
|
<tr>
|
||||||
|
<th>Property</th>
|
||||||
|
<th>Required</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td><code>id</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The unique identifier of the app.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>name</code></td>
|
||||||
|
<td>Required</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The short display name for the app.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>description</code></td>
|
||||||
|
<td>Required</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The short display description of the app.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>url</code></td>
|
||||||
|
<td>Required</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The URL for the home page of the app.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>icon</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The URL to the icon for the app.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>redirect_uris</code></td>
|
||||||
|
<td>Required</td>
|
||||||
|
<td>Array</td>
|
||||||
|
<td>The exact (including parameters) uris that will be used as OAuth <code>redirect_uri</code>.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>scopes</code></td>
|
||||||
|
<td>Required</td>
|
||||||
|
<td>Object</td>
|
||||||
|
<td>All of the scopes that the application will use, and the reason why each is required.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>mac_algorithm</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The MAC algorithm to use when authenticating the app.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>mac_key_id</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The MAC key identifier to use when authenticating the app.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>mac_key</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The MAC key to use when authenticating the app.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3>Authentication Flow</h3>
|
||||||
|
|
||||||
|
<h4>Auth Request</h4>
|
||||||
|
|
||||||
|
<p>The app requests the user's Tent identifier, and performs discovery on it to
|
||||||
|
find the Tent API root. The app then builds an auth request and redirects the
|
||||||
|
user-agent to it:</p>
|
||||||
|
<div class="highlight"><pre>/oauth/authorize?client_id=p0cq4m
|
||||||
|
&redirect_uri=http://app.example.com/tent/callback
|
||||||
|
&scope=read_posts,read_profile
|
||||||
|
&state=87351cc2f6737bfc8ba
|
||||||
|
&tent_profile_info_types=https://tent.io/types/info/music/v0.1.0
|
||||||
|
&tent_post_types=https://tent.io/types/posts/status/v0.1.0,https://tent.io/types/posts/photo/v0.1.0
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h5>Parameters</h5>
|
||||||
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead >
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Required</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td><code>client_id</code></td>
|
||||||
|
<td>Required</td>
|
||||||
|
<td>The <code>id</code> obtained by registering with the Tent server</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>redirect_uri</code></td>
|
||||||
|
<td>Required</td>
|
||||||
|
<td>The URI to redirect to after authentication is complete. It must <strong>exactly</strong> match a URI (including parameters) provided during app registration in <code>redirect_uris</code>.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>state</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>This parameter will be added to the <code>redirect_uri</code> and should always be set to a random string that is stored in the session, and then verified to prevent cross-site request forgery attacks.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>scope</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>A comma-separated list of scopes that the app is requesting access to.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>tent_profile_info_types</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>A comma-separated list of profile info type urls that the app is requesting access to. Set to <code>all</code> to request full access to the profile.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>tent_post_types</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>A comma-separated list of type urls that the app is requesting access to. Set to <code>all</code> to request access to all posts.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>tent_notification_url</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>The URI to send post notifications to.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h5>Scopes</h5>
|
||||||
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead >
|
||||||
|
<tr>
|
||||||
|
<th>Scope</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td><code>read_profile</code></td>
|
||||||
|
<td>Read profile sections listed in the <code>profile_info</code> parameter</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>write_profile</code></td>
|
||||||
|
<td>Read and write profile sections listed in the <code>profile_info</code> parameter</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>read_followers</code></td>
|
||||||
|
<td>Read follower list</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>write_followers</code></td>
|
||||||
|
<td>Read follower list and block followers</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>read_followings</code></td>
|
||||||
|
<td>Read followings list</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>write_followings</code></td>
|
||||||
|
<td>Read followings list and follow new entities</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>read_posts</code></td>
|
||||||
|
<td>Read posts with types listed in the <code>post_types</code> parameter</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>write_posts</code></td>
|
||||||
|
<td>Read and publish posts with types listed in the <code>post_types</code> parameter</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h4>Redirect</h4>
|
||||||
|
|
||||||
|
<p>After the user has authorized the application, the Tent server will redirect the
|
||||||
|
User-Agent back to the specified <code>redirect_uri</code> with a <code>code</code> that can be used
|
||||||
|
to retrieve authentication details from the server.</p>
|
||||||
|
|
||||||
|
<p>The <code>state</code> parameter should be matched against the <code>state</code> parameter sent in
|
||||||
|
the initial request to prevent request forgery.</p>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 302 Found
|
||||||
|
Location: http://app.example.com/tent/callback?code=9a27c37c0adb08351b1e7aac4ec12dc6&state=87351cc2f6737bfc8ba
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h4>Access Token</h4>
|
||||||
|
|
||||||
|
<p>The <code>code</code> must be traded for permanent authentication details that can be used
|
||||||
|
to access the Tent server on behalf of the user.</p>
|
||||||
|
|
||||||
|
<h5>POST /apps/:id/authorizations</h5>
|
||||||
|
|
||||||
|
<p>The request must be signed with a MAC using the secret obtained during app
|
||||||
|
registration. Currently only the <code>mac</code> <code>token_type</code> is supported.</p>
|
||||||
|
<div class="highlight"><pre>POST /apps/p0cq4m/authorizations HTTP/1.1
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="a:f665629b", ts="1346984266", nonce="1f400b", mac="9kvPu8d7eM0kT/19XjHC39FiOWJZyYHAqbD5cTjAAkc="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"code"</span><span class="p">:</span> <span class="s2">"9a27c37c0adb08351b1e7aac4ec12dc6"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"token_type"</span><span class="p">:</span> <span class="s2">"mac"</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Content-Length: 124
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"access_token"</span><span class="p">:</span> <span class="s2">"u:083dc7a9"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"mac_key"</span><span class="p">:</span> <span class="s2">"b67e42ad66e10538785d6d1bca024a17"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"mac_algorithm"</span><span class="p">:</span> <span class="s2">"hmac-sha-256"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"token_type"</span><span class="p">:</span> <span class="s2">"mac"</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h5>Response Parameters</h5>
|
||||||
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead >
|
||||||
|
<tr>
|
||||||
|
<th>Name</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td><code>access_token</code></td>
|
||||||
|
<td>Used as the MAC key identifier.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>mac_key</code></td>
|
||||||
|
<td>Used as the MAC key for requests.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>mac_algorithm</code></td>
|
||||||
|
<td>The MAC algorithm to be used.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>token_type</code></td>
|
||||||
|
<td>Specifies the token type. Currently always <code>mac</code></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3>Request Authentication</h3>
|
||||||
|
|
||||||
|
<p>Tent uses <a href="http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01">HTTP MAC Access
|
||||||
|
Authentication</a> to
|
||||||
|
authenticate app requests. Requests to modify the app's registration details
|
||||||
|
must be authorized using the provided <code>id</code> and <code>secret</code> as the
|
||||||
|
MAC key identifier and MAC key respectively.</p>
|
||||||
|
|
||||||
|
<p>Requests to the Tent server on behalf of an authenticated user must be
|
||||||
|
authorized using the credentials retrieved at the end of the auth flow.
|
||||||
|
The <code>access_token</code> and <code>mac_key</code> are the MAC key identifier and MAC key
|
||||||
|
respectively.</p>
|
||||||
|
|
||||||
|
<h3>App Registration Modification</h3>
|
||||||
|
|
||||||
|
<p>The request must be authenticated with a MAC generated using the secret from the
|
||||||
|
initial registration.</p>
|
||||||
|
|
||||||
|
<h4>GET /apps/:id</h4>
|
||||||
|
<div class="highlight"><pre>GET /apps/p0cq4m HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="a:f665629b", ts="1346984266", nonce="173d55", mac="lXyfBqkxNmZZ83f5brd1dlgm6V0ZQjkSCSwjnR5U6Fo="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Last-Modified: Fri, 07 Sep 2012 02:17:46 GMT
|
||||||
|
Content-Length: 853
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"FooApp"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"description"</span><span class="p">:</span> <span class="s2">"Does amazing foos with your data"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://example.com"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"icon"</span><span class="p">:</span> <span class="s2">"http://example.com/icon.png"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"redirect_uris"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://app.example.com/tent/callback"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"scopes"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"write_profile"</span><span class="p">:</span> <span class="s2">"Uses an app profile section to describe foos"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"read_followings"</span><span class="p">:</span> <span class="s2">"Calculates foos based on your followings"</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"p0cq4m"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"authorizations"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="p">{</span>
|
||||||
|
<span class="nt">"post_types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.io/types/post/status/v0.1.0"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"https://tent.io/types/post/photo/v0.1.0"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"profile_info_types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.io/types/info/basic/v0.1.0"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"scopes"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"read_posts"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_posts"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"import_posts"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_profile"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_profile"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_followers"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_followers"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_followings"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_followings"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_groups"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_groups"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_permissions"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_permissions"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_apps"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_apps"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"follow_ui"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_secrets"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_secrets"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"notification_url"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"ha4g6i"</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h4>PUT /apps/:id</h4>
|
||||||
|
<div class="highlight"><pre>PUT /apps/p0cq4m HTTP/1.1
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="a:f665629b", ts="1346984266", nonce="722389", mac="X0okwuXuknoB+FjbVS02LzIvL4dmYDHlnkSjwmmpBMg="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"FooApp"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"description"</span><span class="p">:</span> <span class="s2">"Does amazing foos with your data"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://example.com"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"icon"</span><span class="p">:</span> <span class="s2">"http://example.com/icon.png"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"redirect_uris"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://app.example.com/tent/callback"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"scopes"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"write_profile"</span><span class="p">:</span> <span class="s2">"Uses an app profile section to describe foos"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"read_followings"</span><span class="p">:</span> <span class="s2">"Calculates foos based on your followings"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"write_following"</span><span class="p">:</span> <span class="s2">"Follow new users when you click"</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Content-Length: 905
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"FooApp"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"description"</span><span class="p">:</span> <span class="s2">"Does amazing foos with your data"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://example.com"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"icon"</span><span class="p">:</span> <span class="s2">"http://example.com/icon.png"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"redirect_uris"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://app.example.com/tent/callback"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"scopes"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"write_profile"</span><span class="p">:</span> <span class="s2">"Uses an app profile section to describe foos"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"read_followings"</span><span class="p">:</span> <span class="s2">"Calculates foos based on your followings"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"write_following"</span><span class="p">:</span> <span class="s2">"Follow new users when you click"</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"p0cq4m"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"authorizations"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="p">{</span>
|
||||||
|
<span class="nt">"post_types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.io/types/post/status/v0.1.0"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"https://tent.io/types/post/photo/v0.1.0"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"profile_info_types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.io/types/info/basic/v0.1.0"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"scopes"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"read_posts"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_posts"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"import_posts"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_profile"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_profile"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_followers"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_followers"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_followings"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_followings"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_groups"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_groups"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_permissions"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_permissions"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_apps"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_apps"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"follow_ui"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"read_secrets"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"write_secrets"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"notification_url"</span><span class="p">:</span> <span class="kc">null</span><span class="p">,</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"ha4g6i"</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><footer>© 2012 Apollic Software, LLC</footer></body>
|
||||||
|
</html>
|
591
output/docs/app-server.html
Normal file
591
output/docs/app-server.html
Normal file
|
@ -0,0 +1,591 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head><meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<title>Server API for Apps · Tent - the decentralized social web</title>
|
||||||
|
<link href="/assets/css/bootstrap-cb0b9b6b1fd.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/bootstrap-responsive-cb034fa29d4.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/style-cba5092b759.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/blog.xml" rel="alternate" title="Atom feed" type="application/atom+xml" />
|
||||||
|
<script type="text/javascript">var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-34258323-1']);
|
||||||
|
_gaq.push(['_setSiteSpeedSampleRate', 50]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();</script></head>
|
||||||
|
<body><div class="navbar navbar-static-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<a class="brand" href="/">Tent</a>
|
||||||
|
<ul class="nav"><li ><a href="/blog">Blog</a></li><li class="active"><a href="/docs">Docs</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</div><div class="container doc">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span2">
|
||||||
|
<ul class="nav nav-list well">
|
||||||
|
<li class="nav-header">Tent</li>
|
||||||
|
<li><li ><a href="/docs">Protocol Introduction</a></li></li>
|
||||||
|
<li><li ><a href="/docs/server-protocol">Server Protocol</a></li></li>
|
||||||
|
<li><li ><a href="/docs/app-auth">App Authentication</a></li></li>
|
||||||
|
<li><li class="active"><a href="/docs/app-server">Server API for Apps</a></li></li>
|
||||||
|
<li class="nav-header">Types</li>
|
||||||
|
<li><li ><a href="/docs/post-types">Post Types</a></li></li>
|
||||||
|
<li><li ><a href="/docs/info-types">Profile Info Types</a></li></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="span8">
|
||||||
|
<div class="alert alert-block">
|
||||||
|
<h4>Alpha Documentation </h4>
|
||||||
|
<p>These docs are very rough, incorrect, and incomplete. They will be modified heavily over the next few weeks.</p>
|
||||||
|
<p>Please contribute by making Pull Requests and Issues on the <a href="https://github.com/tent/tent.io">GitHub repository</a>.</p>
|
||||||
|
</div><h2>Server API for Apps</h2>
|
||||||
|
|
||||||
|
<h3>GET /profile</h3>
|
||||||
|
<div class="highlight"><pre>GET /profile HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Content-Length: 420
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"https://tent.io/types/info/core/v0.1.0"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"servers"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.example.org"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"http://eqt5g4fuenphqinx.onion/"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"https://tent.io/types/info/basic/v0.1.0"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"The Tentity"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"avatar_url"</span><span class="p">:</span> <span class="s2">"http://example.org/avatar.jpg"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"birthdate"</span><span class="p">:</span> <span class="s2">"2012-08-23"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="s2">"The Internet"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"gender"</span><span class="p">:</span> <span class="s2">"Unknown"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"bio"</span><span class="p">:</span> <span class="s2">"Et repudiandae et itaque."</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>PUT /profile/:type</h3>
|
||||||
|
<div class="highlight"><pre>PUT /profile/https%3A%2F%2Ftent.io%2Ftypes%2Finfo%2Fbasic%2Fv0.1.0 HTTP/1.1
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="u:083dc7a9", ts="1346984266", nonce="53958a", mac="tyDhHq7ys5JWbXRbunucJt10Hr1GpJxQWZRfGWm9Abs="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"The Tentity"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"avatar_url"</span><span class="p">:</span> <span class="s2">"http://example.org/avatar.jpg"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"birthdate"</span><span class="p">:</span> <span class="s2">"2012-08-23"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="s2">"The Internet"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"gender"</span><span class="p">:</span> <span class="s2">"Unknown"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"bio"</span><span class="p">:</span> <span class="s2">"Exercitationem perferendis voluptatem ad dolorem velit dolores cumque vero."</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Content-Length: 470
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"https://tent.io/types/info/core/v0.1.0"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"servers"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.example.org"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"http://eqt5g4fuenphqinx.onion/"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"https://tent.io/types/info/basic/v0.1.0"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"The Tentity"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"avatar_url"</span><span class="p">:</span> <span class="s2">"http://example.org/avatar.jpg"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"birthdate"</span><span class="p">:</span> <span class="s2">"2012-08-23"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="s2">"The Internet"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"gender"</span><span class="p">:</span> <span class="s2">"Unknown"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"bio"</span><span class="p">:</span> <span class="s2">"Exercitationem perferendis voluptatem ad dolorem velit dolores cumque vero."</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>POST /followings</h3>
|
||||||
|
<div class="highlight"><pre>POST /followings HTTP/1.1
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="u:083dc7a9", ts="1346984266", nonce="9aa86d", mac="Phkn5uHbA4vZxUFxTRDYV+XdqyH/fd6VG8DR41aIKn4="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Content-Length: 211
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"remote_id"</span><span class="p">:</span> <span class="s2">"eazohw"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entities"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">false</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"icb7x0"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"created_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"updated_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"profile"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>GET /followings</h3>
|
||||||
|
<div class="highlight"><pre>GET /followings HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="u:083dc7a9", ts="1346984266", nonce="5fb6eb", mac="rT3N3hbziQMelFZrq3dzLoyBJhvPd5NUiJ4wPumY30A="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Last-Modified: Fri, 07 Sep 2012 02:17:46 GMT
|
||||||
|
Cache-Control: private
|
||||||
|
Content-Length: 213
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">[</span>
|
||||||
|
<span class="p">{</span>
|
||||||
|
<span class="nt">"remote_id"</span><span class="p">:</span> <span class="s2">"eazohw"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entities"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">false</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"icb7x0"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"created_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"updated_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"profile"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>GET /followings/:id</h3>
|
||||||
|
<div class="highlight"><pre>GET /followings HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="u:083dc7a9", ts="1346984266", nonce="5fb6eb", mac="rT3N3hbziQMelFZrq3dzLoyBJhvPd5NUiJ4wPumY30A="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Last-Modified: Fri, 07 Sep 2012 02:17:46 GMT
|
||||||
|
Cache-Control: private
|
||||||
|
Content-Length: 213
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">[</span>
|
||||||
|
<span class="p">{</span>
|
||||||
|
<span class="nt">"remote_id"</span><span class="p">:</span> <span class="s2">"eazohw"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entities"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">false</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"icb7x0"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"created_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"updated_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"profile"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>DELETE /followings/:id</h3>
|
||||||
|
<div class="highlight"><pre>DELETE /followings/icb7x0 HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="u:083dc7a9", ts="1346984266", nonce="681e1c", mac="4fOAdx3lv4Yz/xwDRWnui5RXvUbgjbLLajG1jCXMZeQ="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: text/html
|
||||||
|
Content-Length: 0
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>GET /followers</h3>
|
||||||
|
<div class="highlight"><pre>GET /followers HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="u:083dc7a9", ts="1346984266", nonce="867d51", mac="s72ysBXjISmuyTEsL0XMymcBgL67kxLHetvdpn5no/s="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Last-Modified: Fri, 07 Sep 2012 02:17:46 GMT
|
||||||
|
Cache-Control: private
|
||||||
|
Content-Length: 1432
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">[</span>
|
||||||
|
<span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entities"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">false</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"7m3dto"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"created_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"updated_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"profile"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"https://tent.io/types/info/core/v0.1.0"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"servers"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.example.org"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"http://eqt5g4fuenphqinx.onion/"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"https://tent.io/types/info/basic/v0.1.0"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"The Tentity"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"avatar_url"</span><span class="p">:</span> <span class="s2">"http://example.org/avatar.jpg"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"birthdate"</span><span class="p">:</span> <span class="s2">"2012-08-23"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="s2">"The Internet"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"gender"</span><span class="p">:</span> <span class="s2">"Unknown"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"bio"</span><span class="p">:</span> <span class="s2">"Et repudiandae et itaque."</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.io/types/post/essay/v0.1.0#full"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entities"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">false</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"eazohw"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"created_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"updated_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"profile"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"https://tent.io/types/info/core/v0.1.0"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"servers"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.example.org"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"http://eqt5g4fuenphqinx.onion/"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"https://tent.io/types/info/basic/v0.1.0"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"The Tentity"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"avatar_url"</span><span class="p">:</span> <span class="s2">"http://example.org/avatar.jpg"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"birthdate"</span><span class="p">:</span> <span class="s2">"2012-08-23"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="s2">"The Internet"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"gender"</span><span class="p">:</span> <span class="s2">"Unknown"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"bio"</span><span class="p">:</span> <span class="s2">"Exercitationem perferendis voluptatem ad dolorem velit dolores cumque vero."</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"all"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>GET /followers/:id</h3>
|
||||||
|
<div class="highlight"><pre>GET /followers/7m3dto HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="s:16e9933f", ts="1346984266", nonce="3824e1", mac="aRnrSo+80AHRru2FJE1Sj6GfCsmpKcyv7w5FZONAtOM="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Last-Modified: Fri, 07 Sep 2012 02:17:46 GMT
|
||||||
|
Cache-Control: private
|
||||||
|
Content-Length: 152
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">false</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"7m3dto"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"all"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>DELETE /followers/:id</h3>
|
||||||
|
<div class="highlight"><pre>DELETE /followers/eazohw HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="s:16e9933f", ts="1346984266", nonce="fa20ba", mac="SkbEBnIsBUvZ9jLce6cXfry7dqNN9OELnnF1UvwkHys="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 403 Forbidden
|
||||||
|
Content-Type: text/html
|
||||||
|
Content-Length: 12
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>Unauthorized
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h4>POST /posts</h4>
|
||||||
|
<div class="highlight"><pre>POST /posts HTTP/1.1
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="u:083dc7a9", ts="1346984266", nonce="25d6b6", mac="En8hMilWUOdUKaaKBbGduhsSKU/a/01NmlPd/knxf4w="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"https://tent.io/types/post/status/v0.1.0"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"published_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">true</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"content"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"text"</span><span class="p">:</span> <span class="s2">"Just landed."</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"Point"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"coordinates"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="mi">50</span><span class="err">.</span><span class="mi">923878</span><span class="p">,</span>
|
||||||
|
<span class="mi">4</span><span class="err">.</span><span class="mi">028605</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Content-Length: 471
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"https://tent.io/types/post/status/v0.1.0"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"content"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"text"</span><span class="p">:</span> <span class="s2">"Just landed."</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"Point"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"coordinates"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="mi">50</span><span class="err">.</span><span class="mi">923878</span><span class="p">,</span>
|
||||||
|
<span class="mi">4</span><span class="err">.</span><span class="mi">028605</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"published_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entities"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">true</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"xk3mlq"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"updated_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"received_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"app"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://example.com"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"FooApp"</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"attachments"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"known_entity"</span><span class="p">:</span> <span class="kc">null</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>GET /posts</h3>
|
||||||
|
<div class="highlight"><pre>GET /posts HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="u:083dc7a9", ts="1346984266", nonce="c45f60", mac="gGFV+/u8vMxq0Inp40dlzyN40k9Y1YNriznzv7QKKOA="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Last-Modified: Fri, 07 Sep 2012 02:17:46 GMT
|
||||||
|
Cache-Control: private
|
||||||
|
Content-Length: 473
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">[</span>
|
||||||
|
<span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"https://tent.io/types/post/status/v0.1.0"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"content"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"text"</span><span class="p">:</span> <span class="s2">"Just landed."</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"Point"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"coordinates"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="mi">50</span><span class="err">.</span><span class="mi">923878</span><span class="p">,</span>
|
||||||
|
<span class="mi">4</span><span class="err">.</span><span class="mi">028605</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"published_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entities"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">true</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"xk3mlq"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"updated_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"received_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"app"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://example.com"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"FooApp"</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"attachments"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"known_entity"</span><span class="p">:</span> <span class="kc">null</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>GET /posts/:id</h3>
|
||||||
|
<div class="highlight"><pre>GET /posts/xk3mlq HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="u:083dc7a9", ts="1346984266", nonce="026f07", mac="mvVK92nXEX8XQor+x4nH46OcvtopAX8YHJwiiylH8r0="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Last-Modified: Fri, 07 Sep 2012 02:17:46 GMT
|
||||||
|
Cache-Control: public
|
||||||
|
Content-Length: 471
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"https://tent.io/types/post/status/v0.1.0"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"content"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"text"</span><span class="p">:</span> <span class="s2">"Just landed."</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"Point"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"coordinates"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="mi">50</span><span class="err">.</span><span class="mi">923878</span><span class="p">,</span>
|
||||||
|
<span class="mi">4</span><span class="err">.</span><span class="mi">028605</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"published_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"groups"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"entities"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">true</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"xk3mlq"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"updated_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"received_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"app"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://example.com"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"FooApp"</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"attachments"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"known_entity"</span><span class="p">:</span> <span class="kc">null</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><footer>© 2012 Apollic Software, LLC</footer></body>
|
||||||
|
</html>
|
132
output/docs/info-types.html
Normal file
132
output/docs/info-types.html
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head><meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<title>Profile Info Types · Tent - the decentralized social web</title>
|
||||||
|
<link href="/assets/css/bootstrap-cb0b9b6b1fd.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/bootstrap-responsive-cb034fa29d4.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/style-cba5092b759.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/blog.xml" rel="alternate" title="Atom feed" type="application/atom+xml" />
|
||||||
|
<script type="text/javascript">var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-34258323-1']);
|
||||||
|
_gaq.push(['_setSiteSpeedSampleRate', 50]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();</script></head>
|
||||||
|
<body><div class="navbar navbar-static-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<a class="brand" href="/">Tent</a>
|
||||||
|
<ul class="nav"><li ><a href="/blog">Blog</a></li><li class="active"><a href="/docs">Docs</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</div><div class="container doc">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span2">
|
||||||
|
<ul class="nav nav-list well">
|
||||||
|
<li class="nav-header">Tent</li>
|
||||||
|
<li><li ><a href="/docs">Protocol Introduction</a></li></li>
|
||||||
|
<li><li ><a href="/docs/server-protocol">Server Protocol</a></li></li>
|
||||||
|
<li><li ><a href="/docs/app-auth">App Authentication</a></li></li>
|
||||||
|
<li><li ><a href="/docs/app-server">Server API for Apps</a></li></li>
|
||||||
|
<li class="nav-header">Types</li>
|
||||||
|
<li><li ><a href="/docs/post-types">Post Types</a></li></li>
|
||||||
|
<li><li class="active"><a href="/docs/info-types">Profile Info Types</a></li></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="span8">
|
||||||
|
<div class="alert alert-block">
|
||||||
|
<h4>Alpha Documentation </h4>
|
||||||
|
<p>These docs are very rough, incorrect, and incomplete. They will be modified heavily over the next few weeks.</p>
|
||||||
|
<p>Please contribute by making Pull Requests and Issues on the <a href="https://github.com/tent/tent.io">GitHub repository</a>.</p>
|
||||||
|
</div><h2>Profile Info Types</h2>
|
||||||
|
|
||||||
|
<h3>Core</h3>
|
||||||
|
|
||||||
|
<p><code>https://tent.io/types/info/core/v0.1.0</code></p>
|
||||||
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead >
|
||||||
|
<tr>
|
||||||
|
<th>Property</th>
|
||||||
|
<th>Required</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td><code>entity</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The canonical entity identitifier.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>licenses</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>Array</td>
|
||||||
|
<td>The licenses the entity publishes content under.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>servers</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>Array</td>
|
||||||
|
<td>The canonical API roots that can be used to interact with the entity.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3>Basic</h3>
|
||||||
|
|
||||||
|
<p><code>https://tent.io/types/info/basic/v0.1.0</code></p>
|
||||||
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead >
|
||||||
|
<tr>
|
||||||
|
<th>Property</th>
|
||||||
|
<th>Required</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td><code>name</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>Name to be displayed publicly.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>avatar_url</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>URL to avatar to be displayed publicly.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>birthdate</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>Date of birth in one of these formats: <code>YYYY-MM-DD</code>, <code>YYYY-MM</code>, <code>MM-DD</code></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>location</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>Location to be displayed publicly.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>gender</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>Gender to be displayed publicly.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>bio</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>Biography/self-description to be displayed publicly.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><footer>© 2012 Apollic Software, LLC</footer></body>
|
||||||
|
</html>
|
194
output/docs/post-types.html
Normal file
194
output/docs/post-types.html
Normal file
|
@ -0,0 +1,194 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head><meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<title>Post Types · Tent - the decentralized social web</title>
|
||||||
|
<link href="/assets/css/bootstrap-cb0b9b6b1fd.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/bootstrap-responsive-cb034fa29d4.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/style-cba5092b759.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/blog.xml" rel="alternate" title="Atom feed" type="application/atom+xml" />
|
||||||
|
<script type="text/javascript">var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-34258323-1']);
|
||||||
|
_gaq.push(['_setSiteSpeedSampleRate', 50]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();</script></head>
|
||||||
|
<body><div class="navbar navbar-static-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<a class="brand" href="/">Tent</a>
|
||||||
|
<ul class="nav"><li ><a href="/blog">Blog</a></li><li class="active"><a href="/docs">Docs</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</div><div class="container doc">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span2">
|
||||||
|
<ul class="nav nav-list well">
|
||||||
|
<li class="nav-header">Tent</li>
|
||||||
|
<li><li ><a href="/docs">Protocol Introduction</a></li></li>
|
||||||
|
<li><li ><a href="/docs/server-protocol">Server Protocol</a></li></li>
|
||||||
|
<li><li ><a href="/docs/app-auth">App Authentication</a></li></li>
|
||||||
|
<li><li ><a href="/docs/app-server">Server API for Apps</a></li></li>
|
||||||
|
<li class="nav-header">Types</li>
|
||||||
|
<li><li class="active"><a href="/docs/post-types">Post Types</a></li></li>
|
||||||
|
<li><li ><a href="/docs/info-types">Profile Info Types</a></li></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="span8">
|
||||||
|
<div class="alert alert-block">
|
||||||
|
<h4>Alpha Documentation </h4>
|
||||||
|
<p>These docs are very rough, incorrect, and incomplete. They will be modified heavily over the next few weeks.</p>
|
||||||
|
<p>Please contribute by making Pull Requests and Issues on the <a href="https://github.com/tent/tent.io">GitHub repository</a>.</p>
|
||||||
|
</div><h2>Post Types</h2>
|
||||||
|
|
||||||
|
<h3>Status</h3>
|
||||||
|
|
||||||
|
<p><code>https://tent.io/types/post/status/v0.1.0</code></p>
|
||||||
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead >
|
||||||
|
<tr>
|
||||||
|
<th>Property</th>
|
||||||
|
<th>Required</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td><code>text</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The status text.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>location</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>Object</td>
|
||||||
|
<td>The GeoJSON Point from which the post originated.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3>Essay</h3>
|
||||||
|
|
||||||
|
<p><code>https://tent.io/types/post/essay/v0.1.0</code></p>
|
||||||
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead >
|
||||||
|
<tr>
|
||||||
|
<th>Property</th>
|
||||||
|
<th>Required</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td><code>title</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The title of the post.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>excerpt</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>An excerpt of the post in HTML format to be displayed when the whole post is not available.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>body</code></td>
|
||||||
|
<td>Required</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The body of the post in HTML format. Renderers may sanitize some HTML.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>tags</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>Array</td>
|
||||||
|
<td>Tags that describe the post.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3>Photo</h3>
|
||||||
|
|
||||||
|
<p><code>https://tent.io/types/post/album/v0.1.0</code></p>
|
||||||
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead >
|
||||||
|
<tr>
|
||||||
|
<th>Property</th>
|
||||||
|
<th>Required</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td><code>caption</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>A caption that describes the photo.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>albums</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>Array</td>
|
||||||
|
<td>A list of the Post IDs of albums that this photo belongs to.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>tags</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>Array</td>
|
||||||
|
<td>A list of tags that describe this photo.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>exif</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>Object</td>
|
||||||
|
<td>The EXIF data that describes the photo.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3>Album</h3>
|
||||||
|
|
||||||
|
<p><code>https://tent.io/types/post/album/v0.1.0</code></p>
|
||||||
|
<table class="table table-striped table-bordered">
|
||||||
|
<thead >
|
||||||
|
<tr>
|
||||||
|
<th>Property</th>
|
||||||
|
<th>Required</th>
|
||||||
|
<th>Type</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody >
|
||||||
|
<tr>
|
||||||
|
<td><code>title</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The title of the album.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>description</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The description of the album.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>photos</code></td>
|
||||||
|
<td>Required</td>
|
||||||
|
<td>Array</td>
|
||||||
|
<td>The list of Post IDs of photos that the album contains.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><code>cover</code></td>
|
||||||
|
<td>Optional</td>
|
||||||
|
<td>String</td>
|
||||||
|
<td>The Post ID of a photo that should be used as the cover/display image for the album.</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><footer>© 2012 Apollic Software, LLC</footer></body>
|
||||||
|
</html>
|
319
output/docs/server-protocol.html
Normal file
319
output/docs/server-protocol.html
Normal file
|
@ -0,0 +1,319 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head><meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<title>Tent - the decentralized social web</title>
|
||||||
|
<link href="/assets/css/bootstrap-cb0b9b6b1fd.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/bootstrap-responsive-cb034fa29d4.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/style-cba5092b759.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/blog.xml" rel="alternate" title="Atom feed" type="application/atom+xml" />
|
||||||
|
<script type="text/javascript">var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-34258323-1']);
|
||||||
|
_gaq.push(['_setSiteSpeedSampleRate', 50]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();</script></head>
|
||||||
|
<body><div class="navbar navbar-static-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<a class="brand" href="/">Tent</a>
|
||||||
|
<ul class="nav"><li ><a href="/blog">Blog</a></li><li class="active"><a href="/docs">Docs</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</div><div class="container doc">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span2">
|
||||||
|
<ul class="nav nav-list well">
|
||||||
|
<li class="nav-header">Tent</li>
|
||||||
|
<li><li ><a href="/docs">Protocol Introduction</a></li></li>
|
||||||
|
<li><li class="active"><a href="/docs/server-protocol">Server Protocol</a></li></li>
|
||||||
|
<li><li ><a href="/docs/app-auth">App Authentication</a></li></li>
|
||||||
|
<li><li ><a href="/docs/app-server">Server API for Apps</a></li></li>
|
||||||
|
<li class="nav-header">Types</li>
|
||||||
|
<li><li ><a href="/docs/post-types">Post Types</a></li></li>
|
||||||
|
<li><li ><a href="/docs/info-types">Profile Info Types</a></li></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="span8">
|
||||||
|
<div class="alert alert-block">
|
||||||
|
<h4>Alpha Documentation </h4>
|
||||||
|
<p>These docs are very rough, incorrect, and incomplete. They will be modified heavily over the next few weeks.</p>
|
||||||
|
<p>Please contribute by making Pull Requests and Issues on the <a href="https://github.com/tent/tent.io">GitHub repository</a>.</p>
|
||||||
|
</div><h2>Tent Server-Server Communication Protocol</h2>
|
||||||
|
|
||||||
|
<p>This document describes the protocol that Tent servers use to communicate with
|
||||||
|
each other.</p>
|
||||||
|
|
||||||
|
<h3>Server Discovery</h3>
|
||||||
|
|
||||||
|
<p>Server discovery is done through HTTP <code>Link</code> headers as well as HTML <code>link</code>
|
||||||
|
tags. Multiple links may be presented, and should be tried by the client in
|
||||||
|
order.</p>
|
||||||
|
|
||||||
|
<h4>HTTP <code>Link</code> Header</h4>
|
||||||
|
|
||||||
|
<p>The HTTP header allows discovery of Tent servers by just doing a HEAD request
|
||||||
|
instead of getting the page and parsing it for the <code>link</code> tag. It should be
|
||||||
|
added to all responses associated with the Tent entity.</p>
|
||||||
|
<div class="highlight"><pre>Link: <https://tent.titanous.com/profile>; rel="https://tent.io/rels/profile"
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h4>HTML <code>link</code> tag</h4>
|
||||||
|
|
||||||
|
<p>The <code>link</code> tag should be placed in the <code>head</code> tag of all HTML pages associated
|
||||||
|
with the Tent entity.</p>
|
||||||
|
<div class="highlight"><pre><span class="nt"><link</span> <span class="na">href=</span><span class="s">"https://tent.titanous.com/profile"</span> <span class="na">rel=</span><span class="s">"https://tent.io/rels/profile"</span> <span class="nt">/></span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>Follow an entity</h3>
|
||||||
|
|
||||||
|
<p>A follow request is required in order to receive notifications about posts
|
||||||
|
published by an entity.</p>
|
||||||
|
|
||||||
|
<h3>POST /followers</h3>
|
||||||
|
<div class="highlight"><pre>POST /followers HTTP/1.1
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"all"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Content-Length: 254
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">false</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"7m3dto"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"mac_key_id"</span><span class="p">:</span> <span class="s2">"s:16e9933f"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"mac_key"</span><span class="p">:</span> <span class="s2">"fd45af54f59b930e5e6eab4bf1e6a0f3"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"mac_algorithm"</span><span class="p">:</span> <span class="s2">"hmac-sha-256"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"all"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Authentication</h2>
|
||||||
|
|
||||||
|
<p>All requests should be made using SSL.</p>
|
||||||
|
|
||||||
|
<p>Authentication is required to access resources that are not marked as public.</p>
|
||||||
|
|
||||||
|
<p>Tent uses <a href="http://tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-01">MAC Access
|
||||||
|
Authentication</a>
|
||||||
|
for all requests.</p>
|
||||||
|
|
||||||
|
<p>All requests must be signed using MAC, and all notifications from the server
|
||||||
|
are signed as well.</p>
|
||||||
|
|
||||||
|
<h2>Get Current Following</h2>
|
||||||
|
|
||||||
|
<h3>GET /followers/:id</h3>
|
||||||
|
<div class="highlight"><pre>GET /followers/7m3dto HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="s:16e9933f", ts="1346984266", nonce="3824e1", mac="aRnrSo+80AHRru2FJE1Sj6GfCsmpKcyv7w5FZONAtOM="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Last-Modified: Fri, 07 Sep 2012 02:17:46 GMT
|
||||||
|
Cache-Control: private
|
||||||
|
Content-Length: 152
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">false</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"7m3dto"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"all"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Edit Following</h2>
|
||||||
|
|
||||||
|
<h3>PUT /followers/:id</h3>
|
||||||
|
<div class="highlight"><pre>PUT /followers/7m3dto HTTP/1.1
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="s:16e9933f", ts="1346984266", nonce="6e4ff8", mac="MAr2L6Z1ZcAe4tv5XGmafCUH8w/OrkUFpJKhK8dtoBs="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.io/types/post/essay/v0.1.0#full"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Content-Length: 193
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">false</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"7m3dto"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"types"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"https://tent.io/types/post/essay/v0.1.0#full"</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Stop Following</h2>
|
||||||
|
|
||||||
|
<h3>DELETE /followers/:id</h3>
|
||||||
|
<div class="highlight"><pre>DELETE /followers/eazohw HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="s:16e9933f", ts="1346984266", nonce="fa20ba", mac="SkbEBnIsBUvZ9jLce6cXfry7dqNN9OELnnF1UvwkHys="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 403 Forbidden
|
||||||
|
Content-Type: text/html
|
||||||
|
Content-Length: 12
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>Unauthorized
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Fetch Posts</h2>
|
||||||
|
|
||||||
|
<h3>GET /posts</h3>
|
||||||
|
<div class="highlight"><pre>GET /posts HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="s:16e9933f", ts="1346984266", nonce="11a3ee", mac="30RvjuvuDkTitC+iubWLvMfqyr2JegqtrKaSE+cEN78="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Last-Modified: Fri, 07 Sep 2012 02:17:46 GMT
|
||||||
|
Cache-Control: private
|
||||||
|
Content-Length: 378
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">[</span>
|
||||||
|
<span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"https://tent.io/types/post/status/v0.1.0"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"content"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"text"</span><span class="p">:</span> <span class="s2">"Just landed."</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"Point"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"coordinates"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="mi">50</span><span class="err">.</span><span class="mi">923878</span><span class="p">,</span>
|
||||||
|
<span class="mi">4</span><span class="err">.</span><span class="mi">028605</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"published_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">true</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"xk3mlq"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"app"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://example.com"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"FooApp"</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"attachments"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h3>GET /posts/:id</h3>
|
||||||
|
<div class="highlight"><pre>GET /posts/xk3mlq HTTP/1.1
|
||||||
|
Accept: application/vnd.tent.v0+json
|
||||||
|
Authorization: MAC id="s:16e9933f", ts="1346984266", nonce="e9d768", mac="gaw/GTjat0ANZmdoo+X4NHpAk+SuJNLj+rSGdcD0JbE="
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre>HTTP/1.1 200 OK
|
||||||
|
Content-Type: application/vnd.tent.v0+json
|
||||||
|
Last-Modified: Fri, 07 Sep 2012 02:17:46 GMT
|
||||||
|
Cache-Control: public
|
||||||
|
Content-Length: 376
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="highlight"><pre><span class="p">{</span>
|
||||||
|
<span class="nt">"entity"</span><span class="p">:</span> <span class="s2">"https://example.org"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"https://tent.io/types/post/status/v0.1.0"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"licenses"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="s2">"http://creativecommons.org/licenses/by/3.0/"</span>
|
||||||
|
<span class="p">],</span>
|
||||||
|
<span class="nt">"content"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"text"</span><span class="p">:</span> <span class="s2">"Just landed."</span><span class="p">,</span>
|
||||||
|
<span class="nt">"location"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"type"</span><span class="p">:</span> <span class="s2">"Point"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"coordinates"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
<span class="mi">50</span><span class="err">.</span><span class="mi">923878</span><span class="p">,</span>
|
||||||
|
<span class="mi">4</span><span class="err">.</span><span class="mi">028605</span>
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"published_at"</span><span class="p">:</span> <span class="mi">1346984266</span><span class="p">,</span>
|
||||||
|
<span class="nt">"permissions"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"public"</span><span class="p">:</span> <span class="kc">true</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"id"</span><span class="p">:</span> <span class="s2">"xk3mlq"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"app"</span><span class="p">:</span> <span class="p">{</span>
|
||||||
|
<span class="nt">"url"</span><span class="p">:</span> <span class="s2">"http://example.com"</span><span class="p">,</span>
|
||||||
|
<span class="nt">"name"</span><span class="p">:</span> <span class="s2">"FooApp"</span>
|
||||||
|
<span class="p">},</span>
|
||||||
|
<span class="nt">"attachments"</span><span class="p">:</span> <span class="p">[</span>
|
||||||
|
|
||||||
|
<span class="p">]</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Notifications</h2>
|
||||||
|
|
||||||
|
<p>Notifications of new content are sent as POST requests to <code>/posts</code> and
|
||||||
|
authenticated using the negotiated credentials.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div><footer>© 2012 Apollic Software, LLC</footer></body>
|
||||||
|
</html>
|
187
output/index.html
Normal file
187
output/index.html
Normal file
|
@ -0,0 +1,187 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head><meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
||||||
|
<title>Tent - the decentralized social web</title>
|
||||||
|
<link href="/assets/css/bootstrap-cb0b9b6b1fd.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/bootstrap-responsive-cb034fa29d4.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/assets/css/style-cba5092b759.css" media="screen" rel="stylesheet" type="text/css" />
|
||||||
|
<link href="/blog.xml" rel="alternate" title="Atom feed" type="application/atom+xml" />
|
||||||
|
<script type="text/javascript">var _gaq = _gaq || [];
|
||||||
|
_gaq.push(['_setAccount', 'UA-34258323-1']);
|
||||||
|
_gaq.push(['_setSiteSpeedSampleRate', 50]);
|
||||||
|
_gaq.push(['_trackPageview']);
|
||||||
|
(function() {
|
||||||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||||
|
})();</script></head>
|
||||||
|
<body><div class="navbar navbar-static-top">
|
||||||
|
<div class="navbar-inner">
|
||||||
|
<a class="brand" href="/">Tent</a>
|
||||||
|
<ul class="nav"><li ><a href="/blog">Blog</a></li><li ><a href="/docs">Docs</a></li></ul>
|
||||||
|
</div>
|
||||||
|
</div><div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="span8 offset2"><div id="faq"><h3>What is Tent?</h3>
|
||||||
|
|
||||||
|
<p>Tent is a protocol for open, decentralized social networking. Tent users share content with
|
||||||
|
apps and each other. Anyone can run a Tent server, or write an app or alternative server implementation
|
||||||
|
that uses the Tent protocol. Users can take their content and relationships with
|
||||||
|
them when they change or move servers. Tent supports extensible data types so developers can create new kinds of interaction.</p>
|
||||||
|
|
||||||
|
<p>Tent is for sharing with others and seeing what others have shared with you. You can ask to follow other users and other users can follow you. Because you control your own Tent server, it is also a good place to store things you do not
|
||||||
|
want to share with others, a sort of personal data vault. It can also be used as a secure site login replacement so you don't need passwords when accessing other sites on the web.</p>
|
||||||
|
|
||||||
|
<h3>Why is Tent decentralized?</h3>
|
||||||
|
|
||||||
|
<p>Decentralized services are resilient. If one part breaks or is turned off the other parts continue to operate normally. The Internet is decentralized. That's why the whole Internet doesn't shut down when one site or server is having problems. Important systems should be decentralized. The Internet itself, and the most important services on it, like the World Wide Web and email, are all decentralized systems based on open protocols. So is Tent. Most existing social sites could be reimplemented using Tent.</p>
|
||||||
|
|
||||||
|
<p>Decentralized services put users in control. Companies and products do not last forever. If a company changes its terms, shuts down, is acquired, discontinues a product, no problem – users can take their data and services with them and set up somewhere else – on their own server or at another service provider. Decentralized, protocol-based systems offer users a choice of providers and developers the opportunity to innovate, since developers deal directly with users, not a platform or company.</p>
|
||||||
|
|
||||||
|
<p>Distributed services using protocols have another big advantage: users on a network separated from the regular internet can still use them. Some countries and Internet Service Providers block access to services, users, and content that clash with the adminstration's politics. Totalitarian regimes have blocked centralized social networks, but distributed services inside the country, like that nation's web often continue to operate. Tent servers can be accessed over a wireless mesh network and run as a Tor hidden service, unlike centralized social networks. </p>
|
||||||
|
|
||||||
|
<p>The social web is too important to leave in the hands of any one company or government. The services on which the world depends need to be decentralized. Using Tent, the world can depend on social.</p>
|
||||||
|
|
||||||
|
<h3>What does Tent do?</h3>
|
||||||
|
|
||||||
|
<p>Tent servers maintain relationships between users and manage apps. Users create and view content on apps. When a users creates new content, their Tent server sends it to the followers they chose. It also listens for and stores new messages and content from the people and organizations that user follows. Every user on Tent also has a profile that stores basic information about the user. Tent also lets users control which apps can access their data and what can be done with it.</p>
|
||||||
|
|
||||||
|
<h3>How can I use Tent?</h3>
|
||||||
|
|
||||||
|
<p>First you need a Tent server. A Tent server sends new content to your followers
|
||||||
|
and listens for new content from people you follow. It stores all this content
|
||||||
|
safely so it's available for you to view later. You view and create content with
|
||||||
|
apps. Apps connect to your server to post new content you've created and ask for
|
||||||
|
content from people you follow. You can limit apps so they can't see all your
|
||||||
|
content. If you have private photos or messages, you might want only a few apps
|
||||||
|
to see them.</p>
|
||||||
|
|
||||||
|
<p>Soon you will be able to download and run Tent server on your own hardware or get started with
|
||||||
|
a hosted provider who runs the server for you. You could also write your own
|
||||||
|
server and apps from scratch using the <a href="/docs">developer documentation</a>.</p>
|
||||||
|
|
||||||
|
<h3>Can I switch Tent servers?</h3>
|
||||||
|
|
||||||
|
<p>Absolutely! And you can take your relationships – your followers with you. If
|
||||||
|
a service provider changes its terms, shuts down, is acquired, discontinues
|
||||||
|
a product, no problem – you can take your data and relationships with you and
|
||||||
|
set up somewhere else – on your own server or at another provider.</p>
|
||||||
|
|
||||||
|
<h3>Can I get my data out of Tent?</h3>
|
||||||
|
|
||||||
|
<p>Of course! There are two simple ways: with an app or another Tent server. Just
|
||||||
|
authorize a Tent app or a new Tent server to view the content and it will
|
||||||
|
transfer over automatically.</p>
|
||||||
|
|
||||||
|
<h3>What can Tent users do that they could not on other social networks?</h3>
|
||||||
|
|
||||||
|
<p>Tent users can take their relationships–the users they follow and the users who follow
|
||||||
|
them–and their content with them. Tent also lets them control their data, decide who
|
||||||
|
can see it, and how they can use it. Tent is distributed and an open protocol,
|
||||||
|
so if they don't like an app or service they can change
|
||||||
|
providers or write their own.</p>
|
||||||
|
|
||||||
|
<p>They do not have to tell anyone about their Tent servers. They can also run a Tent
|
||||||
|
server as a <a href="https://www.torproject.org/docs/tor-hidden-service.html.en">Tor hidden service</a>, making it even harder for anyone to silence their voices online or track them down. Tent respects pseudonyms, handles, and everyone's
|
||||||
|
right to anonymity. Since users control their own Tent servers, they also choose their
|
||||||
|
name, which can be anything they want.</p>
|
||||||
|
|
||||||
|
<p>Even more features are coming in the next version of Tent.</p>
|
||||||
|
|
||||||
|
<h3>What is wrong with other social services?</h3>
|
||||||
|
|
||||||
|
<p>Centralized Social Service Providers limit what you can share and who
|
||||||
|
you can share with. They only allow users to interact with other users on the same network.
|
||||||
|
Because their products are centralized and maintained by a company, users are left in the cold when the company changes its products or shuts down. There's nothing wrong with a company offering users social services. But users shouldn't be limited by those companies. Imagine if you could only email other customers of your Internet Service Provider.
|
||||||
|
Unfortunately Centralized Social Service Providers have done just that. You can only communicate directly with other users of their closed network.</p>
|
||||||
|
|
||||||
|
<p>If you don't like a bank you can withdraw your money and deposit it somewhere else, including your own home. You could even start a new bank where you and your friends felt safe. You can still pay your bills and maintain your financial
|
||||||
|
relationships, just tell them about your new account. We aren't talking about money. Your data is far more valuable– your family and friends' photos, locations, and private communications. You should be able to store them somewhere you trust, move them when you want, control who can and can't see them.</p>
|
||||||
|
|
||||||
|
<h3>What about the federated social web?</h3>
|
||||||
|
|
||||||
|
<p>Federated services add a few capabilities to Centralized Social Service
|
||||||
|
Providers' products. Generally users can broadcast a stream of public events to
|
||||||
|
other services in the Federation. Because private messages (and many other
|
||||||
|
important features) are beyond the scope of most federation protocols, users can
|
||||||
|
not send private messages to users of other Social Service Providers. Since
|
||||||
|
these features are not standardized, Social Service Providers must implement
|
||||||
|
proprietary features. This locks users into a specific Social Service Provider,
|
||||||
|
and causes fragmentation which prevents interoperability. Diaspora* and OStatus
|
||||||
|
were the first steps in moving away from Centralized Social Service Providers, but
|
||||||
|
stopped short of actual decentralization. Any long-term solution will require
|
||||||
|
a fully distributed architecture in its core design.</p>
|
||||||
|
|
||||||
|
<h3>Does Tent have ads?</h3>
|
||||||
|
|
||||||
|
<p>Tent is a protocol like email or the World Wide Web. Anyone can run their own
|
||||||
|
Tent server (which would be ad-free) or host a Tent server for others. Just like
|
||||||
|
email, some providers show ads to make money so they can host your Tent server
|
||||||
|
for free. Others charge users directly and don't need ads. It's your choice.</p>
|
||||||
|
|
||||||
|
<h3>Does Tent cost money?</h3>
|
||||||
|
|
||||||
|
<p>Tent is a set of protocols like email or the world wide web. Tent itself is and
|
||||||
|
will always be free. Anyone can run or implement a Tent service or write a new
|
||||||
|
app that works with Tent. Just like email, some providers are free and others
|
||||||
|
cost money. Don't like any of the existing providers? Start your own.</p>
|
||||||
|
|
||||||
|
<h3>What is a protocol?</h3>
|
||||||
|
|
||||||
|
<p>A protocol defines how to do something in a standard way. Our daily lives are
|
||||||
|
filled with protocols. If you want to enter someone's home, knock or ring the
|
||||||
|
doorbell first. If you attach a stamp to a letter and address it properly, the
|
||||||
|
post office will mail it for you. You don't have to have a conversation with the
|
||||||
|
letter carrier each time. Computers need protocols to handle information properly. Tent tells computers how to handle social information – what to share with a specific group of followers or apps, and what to keep private. It also helps you tell another user that you want to know when they post new information, like a status or photo.</p>
|
||||||
|
|
||||||
|
<h3>Why doesn't Tent use my favorite protocol?</h3>
|
||||||
|
|
||||||
|
<p>The architects of Tent investigated existing protocols for the distributed
|
||||||
|
social web. Each of them lacked several critical features necessary for modern users.</p>
|
||||||
|
|
||||||
|
<h3>Can I donate to Tent?</h3>
|
||||||
|
|
||||||
|
<p>Tent needs <em>you</em>, not your money. There are several ways you can help:</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li><strong>Start your own Tent server.</strong> The most important thing you can do is switch to
|
||||||
|
using Tent. Very soon you will be able to download the source code for Tent server and host your own.
|
||||||
|
There will also be a hosted service at Tent.is soon.</li>
|
||||||
|
<li><strong>Tell your friends.</strong> The next generation of the social web won't be of much
|
||||||
|
use if people don't use it for their social networks. Tell your friends to
|
||||||
|
get a Tent server and proudly display your Tent address throughout your
|
||||||
|
world–on your business card, email signatures, and other social services.</li>
|
||||||
|
<li><strong>Suggest a feature or change in Tent.</strong> Tent is still under development. If you
|
||||||
|
see something wrong or confusing or think we left something out, please tell
|
||||||
|
us by emailing <a href="mailto:comment@tent.io">comment@tent.io</a> or creating an issue on our <a href="https://github.com/tent/tent.io">github repository</a>.</li>
|
||||||
|
<li><strong>Build for Tent.</strong> Please integrate Tent support into your existing and new
|
||||||
|
services. The Tent ecosystem needs apps as much as users. Tent gives
|
||||||
|
developers much more freedom than Centralized Social Service Providers have
|
||||||
|
allowed before. We can't wait to see what the community comes up with. Client
|
||||||
|
libraries are coming soon.</li>
|
||||||
|
<li><strong>Ask others to build for Tent</strong> Request Tent support in your favorite social apps. Developers will only support new protocols if they know their users are interested and will use the new features. Tell them you want support for Tent.</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<h3>Is there a Tent app for my favorite activity?</h3>
|
||||||
|
|
||||||
|
<p>If there isn't you should write one!</p>
|
||||||
|
|
||||||
|
<h3>Where did Tent come from?</h3>
|
||||||
|
|
||||||
|
<p>Tent began after a conversation between Jonathan Rudenberg, Daniel Siders, Jesse
|
||||||
|
Stuart, and Lucas Wojciechowski. It was inspired by Hypertext, Xanadu, SMTP, the
|
||||||
|
World Wide Web, and distributed peer-to-peer services.</p>
|
||||||
|
|
||||||
|
<h3>How is Tent licensed?</h3>
|
||||||
|
|
||||||
|
<p>Tent will be completely free and open and treated as a standard. To prevent fragmentation before launch, the original authors currently retain copyright. This is a temporary situation which will be remedied immediately after a governance model is chosen. We decided it would be best to share what we could as soon as possible, releasing early and often. We are entirely committed to free and open software and protocols with open governance models leading to a ratified standard. Tent will be released under an open license in the immediate future.</p>
|
||||||
|
</div>
|
||||||
|
<div id="mailchimp-signup">
|
||||||
|
<h3>For updates on Tent, sign up here:</h3>
|
||||||
|
<form action="http://tent.us4.list-manage.com/subscribe/post?u=f318e535ee890f27bfd3ec2d8&id=05ba32ffe8" class="form-inline" method="post">
|
||||||
|
<label for="mc-email">Email Address: <input class="required email" id="mc-email" name="EMAIL" type="email" /></label><input class="btn btn-primary" name="subscribe" type="submit" value="Subscribe" />
|
||||||
|
</form>
|
||||||
|
</div></div>
|
||||||
|
</div>
|
||||||
|
</div><footer>© 2012 Apollic Software, LLC</footer></body>
|
||||||
|
</html>
|
3
output/robots.txt
Normal file
3
output/robots.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
User-agent: *
|
||||||
|
Allow: *
|
||||||
|
Sitemap: http://tent.io/sitemap.xml
|
43
output/sitemap.xml
Normal file
43
output/sitemap.xml
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
|
<url>
|
||||||
|
<loc>http://tent.io/blog/introducing-tent</loc>
|
||||||
|
<lastmod>2012-08-23</lastmod>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://tent.io/blog/the-tent-manifesto</loc>
|
||||||
|
<lastmod>2012-08-23</lastmod>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://tent.io/blog</loc>
|
||||||
|
<lastmod>2012-08-22</lastmod>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://tent.io/docs/app-auth</loc>
|
||||||
|
<lastmod>2012-09-06</lastmod>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://tent.io/docs/app-server</loc>
|
||||||
|
<lastmod>2012-09-06</lastmod>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://tent.io/docs</loc>
|
||||||
|
<lastmod>2012-09-06</lastmod>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://tent.io/docs/info-types</loc>
|
||||||
|
<lastmod>2012-09-06</lastmod>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://tent.io/docs/post-types</loc>
|
||||||
|
<lastmod>2012-09-06</lastmod>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://tent.io/docs/server-protocol</loc>
|
||||||
|
<lastmod>2012-09-06</lastmod>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>http://tent.io</loc>
|
||||||
|
<lastmod>2012-08-22</lastmod>
|
||||||
|
</url>
|
||||||
|
</urlset>
|
Loading…
Add table
Add a link
Reference in a new issue