{"id":39876568,"url":"https://github.com/emfcamp/freescout-docker","last_synced_at":"2026-01-18T14:25:17.621Z","repository":{"id":193548894,"uuid":"689016480","full_name":"emfcamp/freescout-docker","owner":"emfcamp","description":"Docker configuration for Freescout","archived":false,"fork":false,"pushed_at":"2025-02-05T01:42:38.000Z","size":80,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-02-05T02:37:42.762Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emfcamp.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":"2023-09-08T15:43:11.000Z","updated_at":"2025-02-05T01:41:07.000Z","dependencies_parsed_at":"2023-09-08T17:42:03.491Z","dependency_job_id":"7101f88a-8e85-446e-95ed-d51559790b13","html_url":"https://github.com/emfcamp/freescout-docker","commit_stats":null,"previous_names":["emfcamp/freescout-docker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/emfcamp/freescout-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emfcamp%2Ffreescout-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emfcamp%2Ffreescout-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emfcamp%2Ffreescout-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emfcamp%2Ffreescout-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emfcamp","download_url":"https://codeload.github.com/emfcamp/freescout-docker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emfcamp%2Ffreescout-docker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28537556,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T13:04:05.990Z","status":"ssl_error","status_checked_at":"2026-01-18T13:01:44.092Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2026-01-18T14:25:17.009Z","updated_at":"2026-01-18T14:25:17.614Z","avatar_url":"https://github.com/emfcamp.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EMF Freescout Config\n\nThis repository contains the configuration for [EMF](https://emfcamp.org)'s\n[Freescout](https://freescout.net) setup, which runs in Docker containers, and\nmakes use of Nginx as a reverse proxy, and [UFFD](https://git.cccv.de/uffd/uffd)\nfor authentication.\n\nWe use [Vouch](https://github.com/vouch/vouch-proxy/) in conjunction with Nginx's\n`auth_request` support to force user's to perform authentication against an OIDC\nprovider (in our case [UFFD](https://git.cccv.de/uffd/uffd)) before they can\naccess Freescout. Nginx will pass the logged in user's username in the `X_AUTH_USER`\nFastCGI variable to Freescout if the user is authenticated.\n\nFreescout regularly queries the UFFD LDAP directory and creates user accounts\nfor anyone with access, setting access to appropriate mailboxes based on group\nmemberships.\n\nThere's also an IMAP \u0026 SMTP server somewhere which provides Freescout with\naccess to the actual emails that are being handled. That's provided by [waves\narms vaguely] something. We'll work that bit out if we get that far.\n\nHere's a pretty picture of how all that fits together:\n\n![Diagram](./doc/diagram.png)\n\n## Deployment\n\n1. Create a service and OAuth client for Freescout in UFFD. The redirect URI is\n  `http://example.org/vouch/auth` and logout URI is `GET http://example.org/vouch/logout`.\n2. Update the values in `.env` (or set environment variables via some other method)\n   to match your actual setup.\n3. `docker compose up` to start the neccessary services.\n4. You should now be able to access the Freescout instance. After OAuth you'll\n   be presented with a log in screen. Use the default username and password from\n   `.env` to log in.\n5. Follow the steps in Freescout Setup below.\n\n## Development\n\n`docker compose -f docker-compose.yml -f docker-compose.dev.yml up` will bring\nup a stack consisting of the Freescout setup, plus UFFD configured with some\ntest users. `testadmin / adminpassword` will log you in as an administrator,\n`testuser / userpassword` as a standard user.\n\nThen create a service and OAuth client, with redirect URI `http://localhost:8136/vouch/auth`\nand logout URI `GET http://localhost:8136/vouch/logout`. The client ID and secret should\nmatch your `.env` file, or you can leave them empty and afterwards update `.env` and restart.\n\nAlso add an LDAP service and API client with username and password matching `UFFD_LDAP_USER`\nand `UFFD_LDAP_PASSWORD`. Give it access to `users` and `checkpassword`.\n\n## Freescout Setup\n\nThis all assumes you're running with the default settings from `.env.example`. Change them\nif you're not.\n\n1. Log in as admin@example.org with the password `freescout`.\n2. Activate the LDAP module.\n3. Go to LDAP settings\n   1. LDAP Host: `uffd-ldap`\n   2. Port: `389`\n   3. Bind DN: `ou=system,dc=example,dc=org`\n   4. Bind Username: `service`\n   5. Bind Password: `$UFFD_LDAP_BIND_PASSWORD` from the .env file\n   6. Set the filter to `ou=users,dc=example,dc=org(objectclass=person)`.\n   7. Save the settings, or the following step will fail.\n   8. Click \"Connect \u0026 Fetch Attributes\"\n   9. Map `mail` to Email, `cn` to First Name, and `sn` to everything else (this is a nasty\n      hack taking advantage of UFFD not setting a surname field to allow optional fields to\n      be ignored).\n   10. Toggle Automatic Import on\n   11. Toggle Automatic Permission Sync on\n   12. Toggle LDAP Authentication on\n   13. Set $_SERVER key to `X_AUTH_USER`\n   14. Set Locate users by to `mail`\n4. Go to Manage -\u003e Users, and grant your own user the Administrator role.\n\nIf you delete all your cookies and log back in you should now be dropped straight\nin as your authenticated user.\n\n## Configuring Mailbox Access\n\nMailbox access can either be manually configured by an admin (not a good idea)\nor automatically synchronised via LDAP. To configure via LDAP you need to feed\nFreescout a query to find all the relevant users, which will typically look\nsomething like `(\u0026(memberOf=cn=group-name,ou=groups,dc=example,dc=org))`.\n\nAny LDAP query that returns a list of users will work.\n\n## Snags\n\n* Nginx is configured to redirect Freescout's logout page to Vouch, so that your\n  OAuth token is revoked. This works in most cases, but if you then log in again\n  as a different user the cookie left behind by Freescout will still think your\n  the user you initially logged in as. Delete all your cookies if you need to\n  change users.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femfcamp%2Ffreescout-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femfcamp%2Ffreescout-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femfcamp%2Ffreescout-docker/lists"}