From 3242be4009b6bcf516901fcddef44ad37302f832 Mon Sep 17 00:00:00 2001 From: JigSaw Date: Thu, 4 Jan 2024 21:31:16 +0100 Subject: [PATCH] feat(store): add email-oauth2-proxy (#1970) --- README.md | 1 + apps/email-oauth2-proxy/config.json | 21 +++++++++++++++++ apps/email-oauth2-proxy/docker-compose.yml | 21 +++++++++++++++++ .../metadata/description.md | 22 ++++++++++++++++++ apps/email-oauth2-proxy/metadata/logo.jpg | Bin 0 -> 30856 bytes 5 files changed, 65 insertions(+) create mode 100644 apps/email-oauth2-proxy/config.json create mode 100644 apps/email-oauth2-proxy/docker-compose.yml create mode 100644 apps/email-oauth2-proxy/metadata/description.md create mode 100644 apps/email-oauth2-proxy/metadata/logo.jpg diff --git a/README.md b/README.md index 24d642ff..31bc7ee2 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ This is the official repository for the Tipi App Store. It contains all the apps - [Dozzle](https://github.com/amir20/dozzle) - Dozzle is a small web based app to monitor Docker logs - [Draw.io](https://github.com/jgraph/drawio) - draw.io is a JavaScript, client-side editor for general diagramming and whiteboarding. - [Duplicati](https://github.com/linuxserver/docker-duplicati) - Store securely encrypted backups in the cloud! +- [Email OAuth 2.0 Proxy](https://github.com/simonrob/email-oauth2-proxy) - Transparently add OAuth 2.0 support to IMAP/POP/SMTP client applications, scripts or any other email use-cases that don't support this authentication method. - [Emulatorjs](https://github.com/EmulatorJS/EmulatorJS) - Self-hosted Javascript emulation for various system. - [Excalidraw](https://github.com/excalidraw/excalidraw) - Online whiteboard collaboration made easy - [Filebrowser](https://github.com/filebrowser/filebrowser) - Web File Browser diff --git a/apps/email-oauth2-proxy/config.json b/apps/email-oauth2-proxy/config.json new file mode 100644 index 00000000..303e1a34 --- /dev/null +++ b/apps/email-oauth2-proxy/config.json @@ -0,0 +1,21 @@ +{ + "$schema": "../schema.json", + "name": "Email OAuth2 Proxy", + "available": true, + "exposable": false, + "no_gui": true, + "port": 1999, + "id": "email-oauth2-proxy", + "tipi_version": 1, + "version": "2024.01.04", + "categories": [ + "utilities", + "security" + ], + "description": "Transparently add OAuth 2.0 support to IMAP/POP/SMTP client applications, scripts or any other email use-cases that don't support this authentication method.", + "short_desc": "OAuth Proxy for IMAP/POP/SMTP.", + "author": "simonrob", + "source": "https://github.com/simonrob/email-oauth2-proxy", + "form_fields": [], + "supported_architectures": ["arm64", "amd64"] +} \ No newline at end of file diff --git a/apps/email-oauth2-proxy/docker-compose.yml b/apps/email-oauth2-proxy/docker-compose.yml new file mode 100644 index 00000000..94ceae44 --- /dev/null +++ b/apps/email-oauth2-proxy/docker-compose.yml @@ -0,0 +1,21 @@ +version: "3.9" + +services: + email-oauth2-proxy: + container_name: email-oauth2-proxy + image: ghcr.io/blacktirion/email-oauth2-proxy-docker:2024.01.04 + ports: + - ${APP_PORT}:80 + restart: unless-stopped + volumes: + - ${APP_DATA_DIR}/data/config:/config:rw + environment: + - DEBUG=true + - CACHE_STORE=/config/credstore.config + - LOGFILE=true + - LOCAL_SERVER_AUTH=true + networks: + - tipi_main_network + labels: + # Main + traefik.enable: false \ No newline at end of file diff --git a/apps/email-oauth2-proxy/metadata/description.md b/apps/email-oauth2-proxy/metadata/description.md new file mode 100644 index 00000000..941e0d3e --- /dev/null +++ b/apps/email-oauth2-proxy/metadata/description.md @@ -0,0 +1,22 @@ +# Email OAuth 2.0 Proxy +Transparently add OAuth 2.0 support to IMAP/POP/SMTP client applications, scripts or any other email use-cases that don't support this authentication method. + + +## Motivation and capabilities +Email services that support IMAP, POP and/or SMTP access are increasingly requiring the use of OAuth 2.0 to authenticate connections, but not all clients support this method. +This tool creates a simple local proxy that intercepts the traditional IMAP/POP/SMTP authentication commands and transparently replaces them with the appropriate SASL (X)OAuth 2.0 commands and credentials. +Your email client can continue to use the `login` or `auth`/`authenticate` options, with no need to make it aware of OAuth's existence. +The proxy works in the background with a menu bar/taskbar helper or as a headless system service, and is compatible with macOS, Windows and Linux. + +### Example use-cases +- You need to use an Office 365 email account, but don't get on with Outlook. +The email client you like doesn't support OAuth 2.0, which became mandatory [in January 2023](https://techcommunity.microsoft.com/t5/exchange-team-blog/basic-authentication-deprecation-in-exchange-online-september/ba-p/3609437). +- You used to use Gmail via IMAP/POP/SMTP with your raw account credentials (i.e., your real password), but cannot do this now that Google has disabled this method, and don't want to use an [App Password](https://support.google.com/accounts/answer/185833) (or cannot enable this option). +- You have an account already set up in an email client, and you need to switch it to OAuth 2.0 authentication. +You can edit the server details, but the client forces you to delete and re-add the account to enable OAuth 2.0, and you don't want to do this. +- You have made your own script or application that sends or receives email, but it doesn't support OAuth 2.0, and you don't want to have to modify it to implement this. +- You work with multiple services or applications that use IMAP/POP/SMTP, and you don't want to have to set up OAuth 2.0 independently for each one. + +In all of these cases and more, this proxy can help. +Follow the instructions here to get started, and please [open an issue](https://github.com/simonrob/email-oauth2-proxy/issues) with any problems or suggestions. +For commercial support or feature requests, please also consider [sponsoring this project](https://github.com/sponsors/simonrob?frequency=one-time). \ No newline at end of file diff --git a/apps/email-oauth2-proxy/metadata/logo.jpg b/apps/email-oauth2-proxy/metadata/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d99ba94a2904e5764e1ef878e9be9f953cc264bb GIT binary patch literal 30856 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 mftr@O!vEP