diff --git a/Makefile b/Makefile index bfcdc62..401873f 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,4 @@ -all: mail web - -mail: - go build -o "./bin/$@_server" "./cmd/mail_server" - -web: +all: templ generate - go build -o "./bin/$@_server" "./cmd/web_server" + go build -o ./bin/server ./cmd/server + diff --git a/cmd/server/main.go b/cmd/server/main.go new file mode 100644 index 0000000..d47bbd8 --- /dev/null +++ b/cmd/server/main.go @@ -0,0 +1,34 @@ +package main + +import ( + "database/sql" + "github.com/GRFreire/nthmail/pkg/mail_server" + "github.com/GRFreire/nthmail/pkg/web_server" + "log" + "sync" + + _ "github.com/mattn/go-sqlite3" +) + +func main() { + db, err := sql.Open("sqlite3", "./db.db") + if err != nil { + log.Fatal(err) + } + defer db.Close() + + var wg sync.WaitGroup + wg.Add(1) + go func(db *sql.DB) { + defer wg.Done() + mail_server.Start(db) + }(db) + + wg.Add(1) + go func(db *sql.DB) { + defer wg.Done() + web_server.Start(db) + }(db) + + wg.Wait() +} diff --git a/cmd/mail_server/main.go b/pkg/mail_server/main.go similarity index 91% rename from cmd/mail_server/main.go rename to pkg/mail_server/main.go index 13ead34..a0af9bf 100644 --- a/cmd/mail_server/main.go +++ b/pkg/mail_server/main.go @@ -1,7 +1,8 @@ -package main +package mail_server import ( "database/sql" + "errors" "fmt" "io" "log" @@ -52,6 +53,7 @@ func (session *Session) Rcpt(to string, opts *smtp.RcptOptions) error { } func (session *Session) Data(reader io.Reader) error { + defer session.tx.Rollback() if bytes, err := io.ReadAll(reader); err != nil { return err } else { @@ -85,13 +87,7 @@ func (session *Session) Logout() error { return nil } -func main() { - db, err := sql.Open("sqlite3", "./db.db") - if err != nil { - log.Fatal(err) - } - defer db.Close() - +func Start(db *sql.DB) error { backend := &Backend{ db: db, } @@ -104,11 +100,12 @@ func main() { } var port int + var err error port_str, exists := os.LookupEnv("MAIL_SERVER_PORT") if exists { port, err = strconv.Atoi(port_str) if err != nil { - log.Fatal("env:MAIL_SERVER_PORT is not a number") + return errors.New("env:MAIL_SERVER_PORT is not a number") } } else { port = 1025 @@ -124,6 +121,8 @@ func main() { log.Println("Starting server at", server.Addr) if err := server.ListenAndServe(); err != nil { - log.Fatal(err) + return err } + + return nil } diff --git a/cmd/web_server/header.templ b/pkg/web_server/header.templ similarity index 90% rename from cmd/web_server/header.templ rename to pkg/web_server/header.templ index cca29cd..14ea7fa 100644 --- a/cmd/web_server/header.templ +++ b/pkg/web_server/header.templ @@ -1,4 +1,4 @@ -package main +package web_server templ header(rcpt_addr string) {