-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
123 lines (93 loc) · 3.65 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package main
import (
"flag"
"fmt"
"io/ioutil"
"os"
"net/http"
"github.com/gorilla/mux"
"github.com/urfave/negroni"
"gopkg.in/yaml.v2"
"database/sql"
_ "github.com/go-sql-driver/mysql"
"github.com/daffodil/go-postfixadmin/base"
"github.com/daffodil/go-postfixadmin/mailbox"
"github.com/daffodil/go-postfixadmin/postfixadmin"
"github.com/daffodil/go-postfixadmin/sendmail"
)
var config *base.Config
var Db *sql.DB
func App(config_file string) http.Handler {
// Create and load config.yaml
config = new(base.Config)
contents, e := ioutil.ReadFile(config_file)
if e != nil {
fmt.Printf("Config File Error: %v\n", e)
fmt.Printf("create one with -w \n")
os.Exit(1)
}
if err := yaml.Unmarshal(contents, &config); err != nil {
fmt.Println(err)
os.Exit(0)
}
// Create Database connection + ping
data_source := config.Db.User + ":" + config.Db.Password + "@" + config.Db.Server + "/" + config.Db.Database
fmt.Println("dsn=", data_source)
var err_db error
Db, err_db = sql.Open(config.Db.Engine, data_source)
if err_db != nil {
fmt.Printf("Db Login Failed: ", err_db, "=", config.Db.Engine, data_source)
os.Exit(1)
}
err_ping := Db.Ping()
if err_ping != nil {
fmt.Printf("Db Ping Failed: ", err_ping, "=", config.Db.Engine, data_source)
os.Exit(1)
}
fmt.Println("ere")
// Initialize modules
base.Initialize(config)
mailbox.Initialize(config)
postfixadmin.Initialize(config, Db)
sendmail.Initialize(config)
// Main router
router := mux.NewRouter().StrictSlash(false)
// base mapping
router.HandleFunc(base.V1_BASE, base.HandleAjaxInfo)
router.HandleFunc(base.V1_BASE + "/smtp/send_test", sendmail.HandleAjaxSendTest)
//========= Postfixadmin
pfaRouter := router.PathPrefix(base.V1_BASE + "/admin").Subrouter()
pfaRouter.HandleFunc("/domains", postfixadmin.HandleAjaxDomains)
pfaRouter.HandleFunc("/domain/{domain}", postfixadmin.HandleAjaxDomain)
pfaRouter.HandleFunc("/domain/{domain}/all", postfixadmin.HandleAjaxDomainAll)
pfaRouter.HandleFunc("/domain/{domain}/vacations", postfixadmin.HandleAjaxVacations)
pfaRouter.HandleFunc("/domain/{domain}/mailboxes", postfixadmin.HandleAjaxMailboxes)
pfaRouter.HandleFunc("/domain/{domain}/virtual", postfixadmin.HandleAjaxDomainVirtual)
pfaRouter.HandleFunc("/domain/{domain}/mailbox/{username}", postfixadmin.HandleAjaxMailbox)
pfaRouter.HandleFunc("/mailbox/{email}", postfixadmin.HandleAjaxMailbox)
pfaRouter.HandleFunc("/mailbox/{email}/vacation", postfixadmin.HandleAjaxVacation)
pfaRouter.HandleFunc("/mailbox/{email}/set_secret", postfixadmin.HandleAjaxSetMailboxPassword)
pfaRouter.HandleFunc("/mailbox/{email}/send_test", postfixadmin.HandleAjaxMailboxSendTest)
pfaRouter.HandleFunc("/alias/{email}", postfixadmin.HandleAjaxAlias)
pfaRouter.HandleFunc("/domain/{domain}/aliases", postfixadmin.HandleAjaxAliases)
pfaRouter.HandleFunc("/vacation/notifications", postfixadmin.HandleAjaxVacationNotifications)
pfaRouter.HandleFunc("/api/v1/admin/cron", base.HandleAjaxCron)
//========= Mailbox
mboxRouter := router.PathPrefix(base.V1_BASE + "/mailbox").Subrouter()
mboxRouter.HandleFunc("/mailbox/{address}/summary", mailbox.HandleAjaxSummary)
mboxRouter.HandleFunc("/mailbox/{address}/folders", mailbox.HandleAjaxFolders)
mboxRouter.HandleFunc("/mailbox/{address}/message/{folder}/{uid}", mailbox.AjaxMessageHandler)
// Setup middleware
neg := negroni.Classic()
neg.Use(negroni.HandlerFunc(base.AuthMiddleware))
neg.UseHandler(router)
return neg
}
func main(){
//defer Db.Close()
config_file := flag.String("config", "config.yaml", "Config file")
flag.Parse()
//neg := App(*config_file)
//neg.Run(config.HTTPListen)
http.ListenAndServe(config.HTTPListen, App(*config_file) )
}