a Django-based indieweb.org site
Find a file
2018-07-10 15:25:01 +10:00
entries Refactor the Micropub error responses into a non-view module, have them produce an immediately raise-able exception 2018-07-03 10:03:35 +10:00
home Use ResponseException for various places rather than needing to check the return value for responseness 2018-07-03 09:51:51 +10:00
lemonauth Refactor the Micropub error responses into a non-view module, have them produce an immediately raise-able exception 2018-07-03 10:03:35 +10:00
lemoncurry Stop pooling Postgres connections, because Django's pool isn't thread-safe and breaks under gevent 2018-07-10 15:25:01 +10:00
lemonshort Install mypy and make the minimum changes necessary for it to pass, albeit using --ignore-missing-imports 2018-05-29 09:37:28 +10:00
micropub Implement the Micropub source query internally rather than by simply parsing the visible content 2018-07-03 10:18:24 +10:00
users Add caching and smarter resizing to the Libravatar endpoint 2018-06-08 14:47:34 +10:00
webmention Add docstring to webmention:status endpoint 2018-05-04 13:50:50 +10:00
wellknowns Switch to a less bright theme-color since base0A didn't work so well 2018-06-28 11:23:56 +10:00
.gitignore Ignore the .env file, since I wanna use it 2018-07-03 16:07:15 +10:00
.gitlab-ci.yml Simplify the GitLab cache config, should be more reliable this way? 2018-06-04 09:39:32 +10:00
.gitmodules Load the Material colour scheme directly from the source YAML, rather than hardcoding it into Stylus format 2017-10-27 11:34:34 +11:00
.pre-commit-config.yaml Add pytest and mypy steps to the pre-commit hooks to avoid committing clearly broken code 2018-06-04 10:32:24 +10:00
.pyup.yml Configure pyup to look at my Pipfiles 2018-05-14 10:40:44 +10:00
.travis.yml Explicitly mark the environment variables as global 2018-05-28 11:53:46 +10:00
Forwardfile Add a Forwardfile for development 2017-10-30 13:31:27 +11:00
gunicorn.py Add Gunicorn config file so we can use server hooks 2018-07-05 11:09:35 +10:00
lemoncurry.paw Loosen the checks on IndieAuth parameters so that generic OAuth 2.0 clients like Paw.app can be used 2018-06-23 13:43:15 +10:00
lemoncurry.svg Add the lemoncurry logo - yes, it's just FA's lemon layered over a dark circle 2018-03-08 15:37:52 +11:00
LICENSE Extend the copyright range in the license to cover 2018 as well 2018-03-06 22:30:49 +11:00
manage.py Make development-specific settings file 2017-10-23 08:55:07 +11:00
package.json 1.10.0 2018-07-05 09:06:27 +10:00
Pipfile Switch to another relative-date-formatting library which supports tiny abbreviated formats 2018-06-28 12:57:09 +10:00
Pipfile.lock Run pipenv lock to downgrade PyYAML to 3.12, since 4.1 was removed from PyPI 2018-07-01 14:45:20 +10:00
pytest.ini Add support for tests that use django.test.Client and that require a database, and use this support to test some of the wellknowns.views modules 2018-02-06 16:12:36 +11:00
README.md Fix bad indent and a few actual errors in README.md 2018-06-12 12:16:18 +10:00
yarn.lock Bump npm library versions using yarn upgrade 2018-06-12 11:18:15 +10:00

lemoncurry (always all-lowercase) is a Django-based personal site designed to operate as part of the IndieWeb. It currently supports the following IndieWeb specifications natively.

  • All content is exposed using standard microformats2 markup, making it easy for other sites and applications across the IndieWeb to consume.
  • Additionally, the site owner's profiles are exposed using rel-me, enabling independent verification of their identity across various services. This permits IndieAuth.com to authenticate the site's owner using a social profile, such as a Twitter account. However, this functionality is not necessary because lemoncurry also fully implements…
  • IndieAuth, an protocol derived from OAuth 2.0 which enables the site's owner to authorise access to their domain directly from the lemoncurry site itself. Additionally, tokens for further access to the lemoncurry site may be requested and issued, including customisable token scope as in OAuth.
  • Micropub is partially supported - using a token obtained through IndieAuth, clients may post new content to the lemoncurry site using either the form-encoded or JSON request formats. There is currently no support for updating or deleting existing content through Micropub, although this is of course planned.
  • Webmention, used to enable rich commenting and social interaction between separate IndieWeb sites, is partially supported. lemoncurry will correctly send webmentions to all URLs mentioned in a published entry. However, it currently does not expose an endpoint for receiving webmentions.
  • WebSub is also partially supported. When content is posted through Micropub, WebSub is pinged as it should be - however, since only creating new content through Micropub is supported, updates do not currently cause a WebSub ping.

Requirements

lemoncurry uses the following tools:

  • Pipenv - developed with Pipenv 2018.5.18, but should work with most versions.
  • Yarn - again, developed with Yarn 1.7.0, but should work with most versions.

As well as the following services:

  • PostgreSQL - create a database named lemoncurry. Socket auth is recommended, so ensure the UNIX user you'll be running lemoncurry with has access to that database. Alternatively, set the POSTGRES_PASSWORD environment variable to use password auth.
  • Redis - lemoncurry expects to find Redis on port 6380, rather than the standard port of 6379. Sorry about that.

If you're running in production, I'd recommend Gunicorn, which is already part of lemoncurry's Pipfile. Ensure you run Gunicorn behind a secure reverse proxy, such as Nginx.

If you're running in development, the usual Django runserver command should be fine.

Installation

Clone the repo recursively - since it uses Git submodules - and then install both Python and Node dependencies.

$ git clone --recursive https://git.00dani.me/00dani/lemoncurry
$ cd lemoncurry
$ pipenv install --dev
$ yarn install

Once those steps complete, you should be able to perform the usual Django steps to get a development server up and running. (If you'd prefer, you can use pipenv shell to activate lemoncurry's virtualenv, rather than prefacing each command with pipenv run. I like being explicit.)

$ pipenv run ./manage.py migrate
$ pipenv run ./manage.py collectstatic
$ pipenv run ./manage.py runserver 3000