diff --git a/app/mail-config.go b/app/mail-config.go deleted file mode 100644 index 26a4d31..0000000 --- a/app/mail-config.go +++ /dev/null @@ -1,49 +0,0 @@ -package app - -import ( - "fmt" - "net/smtp" - "os" - "strconv" -) - -type MailConfig struct { - SMTPHost string - SMTPPort int - SMTPSenderName string - AuthEmail string - AuthPassword string -} - -func Mail() *MailConfig { - port, err := strconv.Atoi(os.Getenv("SMTP_PORT")) - if err != nil { - fmt.Println("error parsing to int", err.Error()) - } - - return &MailConfig{ - SMTPHost: os.Getenv("SMTP_HOST"), - SMTPPort: port, - SMTPSenderName: os.Getenv("SMTP_SENDER"), - AuthEmail: os.Getenv("AUTH_EMAIL"), - AuthPassword: os.Getenv("AUTH_PASSWORD"), - } -} - -func SendEmail(to []string, cc []string, name, subject, message, htmlString string) error { - sender := "From: " + Mail().SMTPSenderName + "\n" - subjectt := "Subject: " + subject + "\n" - mime := "MIME-version: 1.0;\nContent-Type: text/html; charset=\"UTF-8\";\n\n" - body := htmlString - messages := []byte(sender + subjectt + mime + body) - - auth := smtp.PlainAuth("", Mail().AuthEmail, Mail().AuthPassword, Mail().SMTPHost) - smtpAddr := fmt.Sprintf("%s:%d", Mail().SMTPHost, Mail().SMTPPort) - - err := smtp.SendMail(smtpAddr, auth, Mail().AuthEmail, append(to, cc...), messages) - if err != nil { - return err - } - - return nil -} diff --git a/config/mail-config.go b/config/mail-config.go new file mode 100644 index 0000000..ac8f18f --- /dev/null +++ b/config/mail-config.go @@ -0,0 +1,30 @@ +package config + +import ( + "fmt" + "os" + "strconv" +) + +type MailConfig struct { + SMTPHost string + SMTPPort int + SMTPSenderName string + AuthEmail string + AuthPassword string +} + +func Mail() *MailConfig { + port, err := strconv.Atoi(os.Getenv("SMTP_PORT")) + if err != nil { + fmt.Println("error parsing to int", err.Error()) + } + + return &MailConfig{ + SMTPHost: os.Getenv("SMTP_HOST"), + SMTPPort: port, + SMTPSenderName: os.Getenv("SMTP_SENDER"), + AuthEmail: os.Getenv("AUTH_EMAIL"), + AuthPassword: os.Getenv("AUTH_PASSWORD"), + } +} diff --git a/helper/helper.go b/helper/helper.go index 706b70b..43f9567 100644 --- a/helper/helper.go +++ b/helper/helper.go @@ -2,9 +2,11 @@ package helper import ( "bytes" + "email-notification/config" "fmt" "html/template" "log" + "net/smtp" "time" "github.com/google/uuid" @@ -65,3 +67,21 @@ func FormatSince(t time.Time) string { return "baru saja" } + +func SendEmail(to []string, cc []string, name, subject, message, htmlString string) error { + sender := "From: " + config.Mail().SMTPSenderName + "\n" + subjectt := "Subject: " + subject + "\n" + mime := "MIME-version: 1.0;\nContent-Type: text/html; charset=\"UTF-8\";\n\n" + body := htmlString + messages := []byte(sender + subjectt + mime + body) + + auth := smtp.PlainAuth("", config.Mail().AuthEmail, config.Mail().AuthPassword, config.Mail().SMTPHost) + smtpAddr := fmt.Sprintf("%s:%d", config.Mail().SMTPHost, config.Mail().SMTPPort) + + err := smtp.SendMail(smtpAddr, auth, config.Mail().AuthEmail, append(to, cc...), messages) + if err != nil { + return err + } + + return nil +} diff --git a/main.go b/main.go index cecc894..3cbef61 100644 --- a/main.go +++ b/main.go @@ -3,7 +3,6 @@ package main import ( "context" "email-notification/config" - "email-notification/middleware" "email-notification/route" "log" "net/http" @@ -19,10 +18,6 @@ func main() { log.Fatal("Error loading .env file") } - http.Handle("/", middleware.ResponseTimeMiddleware(func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("Welcome!")) - })) - db := config.NewDatabase().WithContext(context.Background()) route.Route(db) diff --git a/route/route.go b/route/route.go index 180493c..c7627c2 100644 --- a/route/route.go +++ b/route/route.go @@ -1,7 +1,6 @@ package route import ( - "email-notification/app" "email-notification/helper" "email-notification/middleware" "email-notification/model" @@ -16,6 +15,10 @@ import ( func Route(db *gorm.DB) { http.HandleFunc("/birthday-notification", middleware.ResponseTimeMiddleware(func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + } + sessionID := helper.GenerateSessionID() module := "BIRTHDAY NOTIFICATION" log.Printf("%+v %+v request %+v", sessionID, module, nil) @@ -48,7 +51,7 @@ func Route(db *gorm.DB) { go func(v model.Birthday) { log.Printf("%+v %+v SENDING EMAIL TO %+v", sessionID, module, v.Email) - err := app.SendEmail(sendTo, sendTo, "", subject, "", htmlString) + err := helper.SendEmail(sendTo, sendTo, "", subject, "", htmlString) if err != nil { log.Printf("%+v %+v response %+v", sessionID, module, err.Error()) } else { @@ -62,6 +65,10 @@ func Route(db *gorm.DB) { })) http.HandleFunc("/workanniversary-notification", middleware.ResponseTimeMiddleware(func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + } + sessionID := helper.GenerateSessionID() module := "WORKANNIVERSARY NOTIFICATION" log.Printf("%+v %+v request %+v", sessionID, module, nil) @@ -99,7 +106,7 @@ func Route(db *gorm.DB) { go func(v model.Workanniversary) { log.Printf("%+v %+v SENDING EMAIL TO %+v", sessionID, module, v.Email) - err := app.SendEmail(sendTo, sendTo, "", subject, "", htmlString) + err := helper.SendEmail(sendTo, sendTo, "", subject, "", htmlString) if err != nil { log.Printf("%+v %+v response %+v", sessionID, module, err.Error()) } else { @@ -112,7 +119,15 @@ func Route(db *gorm.DB) { w.Write([]byte("success")) })) - http.HandleFunc("/test", middleware.ResponseTimeMiddleware(func(w http.ResponseWriter, r *http.Request) { - w.Write([]byte("success")) + http.HandleFunc("*", middleware.ResponseTimeMiddleware(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(404) + w.Write([]byte("what are you looking for!?")) + })) + + http.Handle("/", middleware.ResponseTimeMiddleware(func(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) + } + w.Write([]byte("Welcome!")) })) }