This commit is contained in:
34
.drone.yml
Normal file
34
.drone.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: default
|
||||
|
||||
steps:
|
||||
- name: build-and-push
|
||||
image: plugins/docker
|
||||
settings:
|
||||
repo: registry.your-gitea.com/your-org/mail-autoconfig
|
||||
tags: latest
|
||||
username:
|
||||
from_secret: GITEA_USERNAME
|
||||
password:
|
||||
from_secret: GITEA_TOKEN
|
||||
|
||||
- name: deploy-to-portainer
|
||||
image: curlimages/curl:7.85.0
|
||||
environment:
|
||||
PORTAINER_URL: https://portainer.mail.mifi.holdings
|
||||
PORTAINER_API_KEY:
|
||||
from_secret: PORTAINER_API_KEY
|
||||
ENDPOINT_ID:
|
||||
from_secret: PORTAINER_ENDPOINT_ID # e.g. "1"
|
||||
STACK_ID:
|
||||
from_secret: PORTAINER_STACK_ID # the ID of your mailconfig stack
|
||||
commands:
|
||||
- >
|
||||
curl -s -X POST "$PORTAINER_URL/api/stacks/$STACK_ID/file?endpointId=$ENDPOINT_ID&method=string"
|
||||
-H "Authorization: Bearer $PORTAINER_API_KEY"
|
||||
-F "file=@docker-compose.yml"
|
||||
|
||||
trigger:
|
||||
branch:
|
||||
- main
|
||||
1
.vscode/settings.json
vendored
Normal file
1
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
9
Dockerfile
Normal file
9
Dockerfile
Normal file
@@ -0,0 +1,9 @@
|
||||
FROM python:3.11-slim
|
||||
|
||||
WORKDIR /app
|
||||
COPY app.py templates/ ./
|
||||
|
||||
RUN pip install --no-cache Flask Jinja2 gunicorn
|
||||
|
||||
# expose port 80
|
||||
CMD ["gunicorn", "-b", "0.0.0.0:80", "app:app"]
|
||||
20
app.py
Normal file
20
app.py
Normal file
@@ -0,0 +1,20 @@
|
||||
from flask import Flask, request, Response
|
||||
import jinja2
|
||||
|
||||
app = Flask(__name__)
|
||||
env = jinja2.Environment(
|
||||
loader=jinja2.FileSystemLoader('templates'),
|
||||
autoescape=jinja2.select_autoescape(['xml'])
|
||||
)
|
||||
|
||||
@app.route('/mail/config-v1.1.xml')
|
||||
def thunderbird_config():
|
||||
domain = request.host.split('.', 1)[1]
|
||||
xml = env.get_template('config-v1.1.xml.j2').render(DOMAIN=domain)
|
||||
return Response(xml, mimetype='application/xml')
|
||||
|
||||
@app.route('/Autodiscover/Autodiscover.xml', methods=['POST','GET'])
|
||||
def outlook_autodiscover():
|
||||
domain = request.host.split('.', 1)[1]
|
||||
xml = env.get_template('Autodiscover.xml.j2').render(DOMAIN=domain)
|
||||
return Response(xml, mimetype='text/xml')
|
||||
17
docker-compose.yml
Normal file
17
docker-compose.yml
Normal file
@@ -0,0 +1,17 @@
|
||||
version: "3.7"
|
||||
|
||||
services:
|
||||
mail-autoconfig:
|
||||
image: git.mifi.dev/mifi-holdings/mail-autoconfig:latest
|
||||
networks:
|
||||
- traefik
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.mailconfig.rule=HostRegexp(`{sub:autoconfig|autodiscover}.{domain:.+}`)"
|
||||
- "traefik.http.routers.mailconfig.entrypoints=websecure"
|
||||
- "traefik.http.routers.mailconfig.tls.certresolver=letsencrypt"
|
||||
- "traefik.http.services.mailconfig.loadbalancer.server.port=80"
|
||||
|
||||
networks:
|
||||
traefik:
|
||||
external: true
|
||||
29
templates/Autodiscover.xml.j2
Normal file
29
templates/Autodiscover.xml.j2
Normal file
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
|
||||
<Response>
|
||||
<Account>
|
||||
<AccountType>imap</AccountType>
|
||||
<Action>settings</Action>
|
||||
<Protocol>
|
||||
<Type>IMAP</Type>
|
||||
<Server>mail.mifi.holdings</Server>
|
||||
<Port>993</Port>
|
||||
<DomainRequired>off</DomainRequired>
|
||||
<SSL>on</SSL>
|
||||
<SPA>off</SPA>
|
||||
<AuthRequired>on</AuthRequired>
|
||||
<LoginName>%EMAILADDRESS%</LoginName>
|
||||
</Protocol>
|
||||
<Protocol>
|
||||
<Type>SMTP</Type>
|
||||
<Server>mail.mifi.holdings</Server>
|
||||
<Port>587</Port>
|
||||
<DomainRequired>off</DomainRequired>
|
||||
<SSL>on</SSL>
|
||||
<SPA>off</SPA>
|
||||
<AuthRequired>on</AuthRequired>
|
||||
<LoginName>%EMAILADDRESS%</LoginName>
|
||||
</Protocol>
|
||||
</Account>
|
||||
</Response>
|
||||
</Autodiscover>
|
||||
20
templates/config-v1.1.xml.j2
Normal file
20
templates/config-v1.1.xml.j2
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<clientConfig version="1.1">
|
||||
<emailProvider id="{{ DOMAIN }}">
|
||||
<domain>{{ DOMAIN }}</domain>
|
||||
<incomingServer type="imap">
|
||||
<hostname>mail.mifi.holdings</hostname>
|
||||
<port>993</port>
|
||||
<socketType>SSL</socketType>
|
||||
<authentication>password-cleartext</authentication>
|
||||
<username>%EMAILLOCALPART%</username>
|
||||
</incomingServer>
|
||||
<outgoingServer type="smtp">
|
||||
<hostname>mail.mifi.holdings</hostname>
|
||||
<port>587</port>
|
||||
<socketType>STARTTLS</socketType>
|
||||
<authentication>password-cleartext</authentication>
|
||||
<username>%EMAILLOCALPART%</username>
|
||||
</outgoingServer>
|
||||
</emailProvider>
|
||||
</clientConfig>
|
||||
Reference in New Issue
Block a user