Installer: maddy
diff --git a/apps/maddy/web/Makefile b/apps/maddy/web/Makefile
index 7c054fc..2054935 100644
--- a/apps/maddy/web/Makefile
+++ b/apps/maddy/web/Makefile
@@ -5,7 +5,7 @@
 	go build -o maddy-web *.go
 
 image: build
-	docker build --tag=giolekva/maddy-web:latest .
+	docker build --tag=giolekva/maddy-web:latest . --platform=linux/arm64
 
 push: image
 	docker push giolekva/maddy-web:latest
diff --git a/apps/maddy/web/main.go b/apps/maddy/web/main.go
index d4bced0..1e823a1 100644
--- a/apps/maddy/web/main.go
+++ b/apps/maddy/web/main.go
@@ -10,11 +10,13 @@
 	"io/ioutil"
 	"log"
 	"net/http"
+	"os"
 	"os/exec"
 )
 
 var port = flag.Int("port", 8080, "Port to listen on.")
 var maddyConfig = flag.String("maddy-config", "", "Path to the Maddy configuration file.")
+var exportDKIM = flag.String("export-dkim", "", "Path to the dkim dns configuration to expose.")
 
 //go:embed templates/*
 var tmpls embed.FS
@@ -108,6 +110,19 @@
 	http.Redirect(w, r, "/", http.StatusSeeOther)
 }
 
+func (h *MaddyHandler) handleDKIM(w http.ResponseWriter, r *http.Request) {
+	d, err := os.Open(*exportDKIM)
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+	defer d.Close()
+	if _, err := io.Copy(w, d); err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
+}
+
 func main() {
 	flag.Parse()
 	t, err := ParseTemplates(tmpls)
@@ -123,6 +138,9 @@
 	}
 	http.HandleFunc("/", handler.handleListAccounts)
 	http.HandleFunc("/create", handler.handleCreateAccount)
+	if *exportDKIM != "" {
+		http.HandleFunc("/dkim", handler.handleDKIM)
+	}
 	fmt.Printf("Starting HTTP server on port: %d\n", *port)
 	fmt.Printf("Maddy config: %s\n", *maddyConfig)
 	if cfg, err := ioutil.ReadFile(*maddyConfig); err != nil {