mirror of
https://blitiri.com.ar/repos/chasquid
synced 2025-12-18 14:47:03 +00:00
chasquid: Run a localrpc server
This patch makes chasquid run a localrpc server, exporting two methods: alias resolve, and domaininfo clear. They will be used by chasquid-util in later patches.
This commit is contained in:
@@ -20,6 +20,7 @@ import (
|
|||||||
"blitiri.com.ar/go/chasquid/internal/courier"
|
"blitiri.com.ar/go/chasquid/internal/courier"
|
||||||
"blitiri.com.ar/go/chasquid/internal/domaininfo"
|
"blitiri.com.ar/go/chasquid/internal/domaininfo"
|
||||||
"blitiri.com.ar/go/chasquid/internal/dovecot"
|
"blitiri.com.ar/go/chasquid/internal/dovecot"
|
||||||
|
"blitiri.com.ar/go/chasquid/internal/localrpc"
|
||||||
"blitiri.com.ar/go/chasquid/internal/maillog"
|
"blitiri.com.ar/go/chasquid/internal/maillog"
|
||||||
"blitiri.com.ar/go/chasquid/internal/normalize"
|
"blitiri.com.ar/go/chasquid/internal/normalize"
|
||||||
"blitiri.com.ar/go/chasquid/internal/smtpsrv"
|
"blitiri.com.ar/go/chasquid/internal/smtpsrv"
|
||||||
@@ -172,6 +173,8 @@ func main() {
|
|||||||
log.Fatalf("No address to listen on")
|
log.Fatalf("No address to listen on")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
go localrpc.DefaultServer.ListenAndServe(conf.DataDir + "/localrpc-v1")
|
||||||
|
|
||||||
go signalHandler(dinfo, s)
|
go signalHandler(dinfo, s)
|
||||||
|
|
||||||
s.ListenAndServe()
|
s.ListenAndServe()
|
||||||
|
|||||||
@@ -4,8 +4,10 @@ package smtpsrv
|
|||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"flag"
|
"flag"
|
||||||
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/url"
|
||||||
"path"
|
"path"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -13,9 +15,11 @@ import (
|
|||||||
"blitiri.com.ar/go/chasquid/internal/auth"
|
"blitiri.com.ar/go/chasquid/internal/auth"
|
||||||
"blitiri.com.ar/go/chasquid/internal/courier"
|
"blitiri.com.ar/go/chasquid/internal/courier"
|
||||||
"blitiri.com.ar/go/chasquid/internal/domaininfo"
|
"blitiri.com.ar/go/chasquid/internal/domaininfo"
|
||||||
|
"blitiri.com.ar/go/chasquid/internal/localrpc"
|
||||||
"blitiri.com.ar/go/chasquid/internal/maillog"
|
"blitiri.com.ar/go/chasquid/internal/maillog"
|
||||||
"blitiri.com.ar/go/chasquid/internal/queue"
|
"blitiri.com.ar/go/chasquid/internal/queue"
|
||||||
"blitiri.com.ar/go/chasquid/internal/set"
|
"blitiri.com.ar/go/chasquid/internal/set"
|
||||||
|
"blitiri.com.ar/go/chasquid/internal/trace"
|
||||||
"blitiri.com.ar/go/chasquid/internal/userdb"
|
"blitiri.com.ar/go/chasquid/internal/userdb"
|
||||||
"blitiri.com.ar/go/log"
|
"blitiri.com.ar/go/log"
|
||||||
)
|
)
|
||||||
@@ -162,6 +166,29 @@ func (s *Server) InitQueue(path string, localC, remoteC courier.Courier) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) aliasResolveRPC(tr *trace.Trace, req url.Values) (url.Values, error) {
|
||||||
|
rcpts, err := s.aliasesR.Resolve(tr, req.Get("Address"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := url.Values{}
|
||||||
|
for _, rcpt := range rcpts {
|
||||||
|
v.Add(string(rcpt.Type), rcpt.Addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) dinfoClearRPC(tr *trace.Trace, req url.Values) (url.Values, error) {
|
||||||
|
domain := req.Get("Domain")
|
||||||
|
exists := s.dinfo.Clear(tr, domain)
|
||||||
|
if !exists {
|
||||||
|
return nil, fmt.Errorf("does not exist")
|
||||||
|
}
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
// periodicallyReload some of the server's information that can be changed
|
// periodicallyReload some of the server's information that can be changed
|
||||||
// without the server knowing, such as aliases and the user databases.
|
// without the server knowing, such as aliases and the user databases.
|
||||||
func (s *Server) periodicallyReload() {
|
func (s *Server) periodicallyReload() {
|
||||||
@@ -200,6 +227,9 @@ func (s *Server) ListenAndServe() {
|
|||||||
log.Fatalf("At least one valid certificate is needed")
|
log.Fatalf("At least one valid certificate is needed")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
localrpc.DefaultServer.Register("AliasResolve", s.aliasResolveRPC)
|
||||||
|
localrpc.DefaultServer.Register("DomaininfoClear", s.dinfoClearRPC)
|
||||||
|
|
||||||
go s.periodicallyReload()
|
go s.periodicallyReload()
|
||||||
|
|
||||||
for m, addrs := range s.addrs {
|
for m, addrs := range s.addrs {
|
||||||
|
|||||||
Reference in New Issue
Block a user