A modern, decentralized re-imagining of the Unix plan file. Running at https://dotplan.online.
Rudis Muiznieks b2a2956e0e | ||
---|---|---|
.gitignore | ||
README.md | ||
ctl | ||
schema.sql | ||
server.pl |
README.md
dotplan.online
The un-social network.
- User-provided content tied to an email address.
- Text only, limited to 4kb.
- No retweets, shares, @s, likes, or boosting of any kind.
- Authenticity optionally verified by clients using public PGP keys.
- Accessed via public APIs.
- Open source.
- Self-hostable, discovery via domain SRV records.
- Single giant Perl script because PERL IS AWESOME!
API
Authentication
POST /users/{email}
- request new account- request data:
{"password":"whatever"}
- email with validation token will be sent
- request data:
GET /users/{email}?token={token}
- validate new accountGET /token
- retrieve auth token- http basic auth
?expires={minutes}
sets an explicit expiration, default is 5 minutes from creation- response data:
{"token":"whatever"}
DELETE /token
- invalidate current auth token- http basic auth
GET /users/{email}/pwtoken
- get password change token- email with password change token will be sent
PUT /users/{email}
- update password- request data:
{"password":"whatever","pwtoken":"whatever"}
- token expires 600 seconds from creation
- request data:
Plans
PUT /plan/{email}
- update a plan- request data:
{"plan":"whatever","signature":"whatever","auth":"token"}
- omitting
plan
from the payload will delete the existing plan
- request data:
GET /plan/{email}
- retrieve a plantext/plain
by default - raw plan content?format=html
orAccept: text/html
- plan content with html entity encoding for special characters?format=json
orAccept: application/json
- response data:{"plan":"whatever","signature":"whatever"}
404
if no plan found301
redirect if plan is on a different provider
POST /verify/{email}
- verify PGP signature of a plan- request data:
{"pgpkey":"public key"}
- response data:
{"plan":"whatever","verified":true}
or{"verified":false}
404
if no plan found308
redirect if plan is on a different provider
- request data: