-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapplication.go
124 lines (103 loc) · 3.14 KB
/
application.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
123
124
package main
import (
"flag"
"fmt"
"github.com/gorilla/mux"
"github.com/just1689/entity-sync/es"
"github.com/sirupsen/logrus"
"github.com/team142/snaily/api"
"github.com/team142/snaily/db"
"github.com/team142/snaily/email"
"github.com/team142/snaily/model"
"github.com/team142/snaily/sync"
"log"
"net/http"
"net/http/httputil"
"net/url"
"os"
"strings"
)
var addr = flag.String("address", ":8080", "")
var addrToProxy = flag.String("proxy", "http://localhost:4200", "The url of the angular app to reverse proxy")
var container = flag.Bool("container", false, "The url of the angular app to reverse proxy")
var DatabaseHost = flag.String("pghost", "localhost", "PG hostname")
var DatabaseUser = flag.String("pguser", "snaily", "PG username")
var DatabasePassword = flag.String("pgpassword", "snaily", "PG password")
var DatabaseDatabase = "madast"
var Port = flag.Uint64("pgport", 5000, "PG port")
var nsqAddr = flag.String("nsqd", "nsqd:4150", "The address of the nsq daemon")
func main() {
flag.Parse()
setMailClientConfig()
setDBDefaultConfig()
router := mux.NewRouter()
config := es.Config{
NSQAddr: *nsqAddr,
Mux: router,
}
entitySync := es.Setup(config)
sync.SetupSync(entitySync)
//Handles all API calls
router.PathPrefix("/api").HandlerFunc(api.HandleIncoming)
//Handles everything else
if *container {
//Serve from web folder
router.PathPrefix("/").HandlerFunc(staticFileServer)
} else {
//When running locally - reverse proxy to node js server
router.PathPrefix("/").HandlerFunc(buildHomeRouter())
}
//The server
http.Handle("/", router)
log.Fatal(http.ListenAndServe(*addr, nil))
}
func setMailClientConfig() {
email.GlobalMailConfig = model.OutgoingMailConfig{
SMTPHost: "smtp.migadu.com",
Port: 587,
Username: "[email protected]",
Password: os.Getenv("MAIL_PASSWORD"),
UseTLS: true,
}
}
func setDBDefaultConfig() {
db.DefaultConfig.User = *DatabaseUser
db.DefaultConfig.Password = *DatabasePassword
db.DefaultConfig.Host = *DatabaseHost
db.DefaultConfig.Port = uint16(*Port)
db.DefaultConfig.Database = DatabaseDatabase
logrus.Infoln(
db.DefaultConfig.User, "@",
db.DefaultConfig.Host, ":",
db.DefaultConfig.Port, "/",
db.DefaultConfig.Database,
)
}
func staticFileServer(w http.ResponseWriter, r *http.Request) {
name := fmt.Sprint("/snaily-web", r.URL.Path)
if name == "/snaily-web/" {
w.Header().Add("Cache-Control", "no-store")
name = "/snaily-web/index.html"
}
if f, err := os.Stat(name); err == nil && !f.IsDir() {
logrus.Println("For: ", r.URL.Path, ", Serving: ", name)
http.ServeFile(w, r, name)
return
}
if !strings.Contains(name, ".") {
logrus.Println("For: ", r.URL.Path, ", Serving: ", "/snaily-web/index.html")
w.Header().Add("Cache-Control", "no-store")
http.ServeFile(w, r, "/snaily-web/index.html")
return
}
logrus.Println("For: ", r.URL.Path, ", NOT FOUND")
http.NotFound(w, r)
}
func buildHomeRouter() func(w http.ResponseWriter, r *http.Request) {
u, _ := url.Parse(*addrToProxy)
rp := httputil.NewSingleHostReverseProxy(u)
return func(w http.ResponseWriter, r *http.Request) {
w.Header().Add("Cache-Control", "no-cache")
rp.ServeHTTP(w, r)
}
}