-
Notifications
You must be signed in to change notification settings - Fork 5
/
main.go
85 lines (71 loc) · 1.99 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
package main
import (
"errors"
"flag"
"net/http"
"net/url"
"os"
"code.cloudfoundry.org/lager"
"github.com/BurntSushi/toml"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/sqlite"
"github.com/pivotal-cf/brokerapi"
)
var strUser = flag.String("user", os.Getenv("BROKER_USER"), "User name")
var strPass = flag.String("pass", os.Getenv("BROKER_PASSWORD"), "Password")
type tomlConfig struct {
DB database `toml:"database"`
}
type database struct {
Provider string
Args string
}
func init() {
flag.Parse()
// Set up username and password
// flag.StringVar(strUser, "user", "user", "User name")
// flag.StringVar(strPass, "pass", "pass", "Password")
}
func main() {
logger := lager.NewLogger("aws-account-broker")
logger.RegisterSink(lager.NewWriterSink(os.Stdout, lager.DEBUG))
logger.RegisterSink(lager.NewWriterSink(os.Stderr, lager.ERROR))
logger.Info("Starting AWS account broker")
var config tomlConfig
if _, err := toml.DecodeFile("config.toml", &config); err != nil {
logger.Fatal("Problem reading config", err)
return
}
baseEmail, found := os.LookupEnv("BASE_EMAIL")
if !found {
logger.Fatal("startup", errors.New("BASE_EMAIL not set"))
}
databaseURL, found := os.LookupEnv("DATABASE_URL")
if found {
u, err := url.Parse(databaseURL)
if err != nil {
logger.Fatal("Failed to parse DATABASE_URL", err)
}
config.DB.Provider = u.Scheme
config.DB.Args = u.Path
}
db, err := gorm.Open(config.DB.Provider, config.DB.Args)
if err != nil {
logger.Fatal("Failed to connect database", err)
}
defer db.Close()
broker, err := newAWSAccountBroker(baseEmail, logger, db)
if err != nil {
logger.Fatal("Problem starting broker", err)
}
creds := brokerapi.BrokerCredentials{
Username: *strUser,
Password: *strPass,
}
brokerAPI := brokerapi.New(broker, logger, creds)
http.Handle("/", brokerAPI)
port := os.Getenv("PORT")
origin := ":" + port
logger.Info("Broker listening at " + origin)
logger.Fatal("http-listen", http.ListenAndServe(origin, nil))
}