{"id":23171728,"url":"https://github.com/burritosoftware/outline-authentik-connector","last_synced_at":"2025-08-18T07:32:14.022Z","repository":{"id":245388705,"uuid":"818031372","full_name":"burritosoftware/Outline-Authentik-Connector","owner":"burritosoftware","description":"Syncs groups between Authentik and Outline","archived":false,"fork":false,"pushed_at":"2024-08-29T21:36:40.000Z","size":49,"stargazers_count":7,"open_issues_count":5,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-17T00:42:02.821Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/burritosoftware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-21T00:38:42.000Z","updated_at":"2025-07-25T19:52:50.000Z","dependencies_parsed_at":"2024-06-21T23:21:47.813Z","dependency_job_id":"15bbe277-5d64-4259-add3-23a6b8ee1d90","html_url":"https://github.com/burritosoftware/Outline-Authentik-Connector","commit_stats":null,"previous_names":["burritosoftware/outline-authentik-connector"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/burritosoftware/Outline-Authentik-Connector","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/burritosoftware%2FOutline-Authentik-Connector","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/burritosoftware%2FOutline-Authentik-Connector/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/burritosoftware%2FOutline-Authentik-Connector/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/burritosoftware%2FOutline-Authentik-Connector/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/burritosoftware","download_url":"https://codeload.github.com/burritosoftware/Outline-Authentik-Connector/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/burritosoftware%2FOutline-Authentik-Connector/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270961687,"owners_count":24675914,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-18T02:00:08.743Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-18T04:19:22.542Z","updated_at":"2025-08-18T07:32:13.747Z","avatar_url":"https://github.com/burritosoftware.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Outline Authentik Connector\n![Icons](https://skillicons.dev/icons?i=py,fastapi,docker)\n\n[![WakaTime](https://wakatime.com/badge/github/burritosoftware/Outline-Authentik-Connector.svg)](https://wakatime.com/badge/github/burritosoftware/Outline-Authentik-Connector) [![Docker Pulls](https://img.shields.io/docker/pulls/burritosoftware/outline-authentik-connector?logo=docker\u0026logoColor=white)](https://hub.docker.com/r/burritosoftware/outline-authentik-connector)\n\nSyncs groups between Authentik and Outline. Users will be added/removed from Outline groups depending on what Authentik groups they're in, on each sign in.\n\nThis was inspired by [this similar connector for Outline and Keycloak](https://gist.github.com/Frando/aa561ca7e6c72ab64b5d17df911c0b1f)! I created this for internal use at [WiiLink](https://github.com/WiiLink24) and to learn FastAPI and Docker.\n\n## How It Works\nOutline groups that are named the same as Authentik groups will be linked together. Users who are in an Authentik group but not in a linked Outline group will be added to the Outline group. Conversely, if a user is not in a linked Authentik group, but is in an Outline group, they will be removed from that group.\n\nThis connector listens for `users.signin` webhook events from Outline. Once a user signs into Outline, this connector will check for matching groups, and add/remove the user to those groups accordingly.\n\n## Requirements\n- Outline API key\n- Authentik API key\n- Reverse proxy to apply HTTPS\n- Python 3.11.1 or higher (not required if using Docker)\n- Docker and Docker Compose (optional)\n\n## Outline Setup\n1. Login to your Outline instance. Click your profile in the bottom left, then go to **Preferences**.\n2. On the sidebar, click **API**. At the top right, select **New API Key...**, and give it a name like `Outline Authentik Connector`.\n3. Save the API key somewhere safe to fill in later.\n4. On the sidebar, click **Webhooks**. At the top right, select **New webhook...**, and give it a name like `Outline Authentik Connector`. Copy the signing secret and save it somewhere safe to fill in later.\n5.  Enter in the URL of a subdomain you plan to host the connector on, and **make sure it ends in `/sync`. This is important.** Then, tick the box for **users.signin**, and then scroll all the way down and click **Create**.\n\n## Authentik Setup\n1. Login to your Authentik instance, and access the **Admin interface**.\n2. On the sidebar, go to **Users**, and then **Create Service account**. Turn off **Create group** and **Expiring** unless you want to rotate the token manually after expiry. Give it a username and create the account.\n3. Find your newly created service account, go to **Permissions**, and under **Assigned global permissions**, search for and assign the permissions `Can view Group` and `Can view User`.\n4. Go back to **Overview** and select to **Impersonate**.\n5. Go to the settings gear in the top right, then go to **Tokens and App passwords**. Click the **Create Token** button.\n6. Set an identifier for the token, and optionally, a description.\n7. Click **Copy token** next to the token you made, and save it somewhere safe to fill in later.\n\nNow, choose whether to setup the connector [with Docker](#docker-setup) or [manually](#manual-setup).\n\n## Docker Setup\nThe connector can be deployed with Docker Compose for quick and easy setup.\n1. [Grab the `docker-compose.yml` file here](./docker-compose.yml), as well as [the `.env.example` file here](./.env.example).\n2. Change `.env.example` to `.env`, and fill it in with your Authentik and Outline configuration.\n3. Start the connector with `docker compose up -d`. By default, the connector will be exposed on port `8430`.\n4. Use a reverse proxy to proxy the connector to a subdomain with HTTPS.\n\n## Manual Setup\n1. Install requirements.\n```sh\npip3 install -r requirements.txt\n```\n2. Copy the environment configuration, and fill it in with your Authentik and Outline configuration.\n```sh\ncp .env.example .env\nnano .env\n```\n\n3. Start the connector.\n```sh\nfastapi run connect.py --port 8430\n```\n4. Use a reverse proxy to proxy the connector to a subdomain with HTTPS.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fburritosoftware%2Foutline-authentik-connector","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fburritosoftware%2Foutline-authentik-connector","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fburritosoftware%2Foutline-authentik-connector/lists"}