dim/main.go

88 lines
2.2 KiB
Go

package main
import (
"database/sql"
"flag"
"log"
"net/http"
"strings"
_ "github.com/go-sql-driver/mysql"
_ "github.com/lib/pq"
"github.com/pelletier/go-toml"
)
var (
configPath = flag.String("config", "dim.conf", "path to the config file")
)
type (
Config struct {
Listen string `toml:"listen"`
DB struct {
Type string `toml:"type"`
Connection string `toml:"conn"`
} `toml:"db"`
Debug bool `toml:"debug_mode"`
}
)
func main() {
flag.Parse()
cfg := Config{}
raw, err := toml.LoadFile(*configPath)
if err != nil {
log.Fatalf("could not load config file '%s': %s", *configPath, err)
return
}
if err := raw.Unmarshal(&cfg); err != nil {
log.Fatalf("could not parse config file '%s': %s", *configPath, err)
return
}
if cfg.DB.Type != "mysql" && cfg.DB.Type != "postgres" {
log.Fatalf(
"unknown database type '%s' in config '%s'. Allowed is 'mysql' and 'postgres'",
cfg.DB.Type,
*configPath,
)
return
}
if strings.Trim(cfg.DB.Connection, " \t\n\r") == "" {
log.Fatalf("no database connection string in config '%s' set", *configPath)
return
}
db, err := sql.Open(cfg.DB.Type, cfg.DB.Connection)
if err != nil {
log.Fatalf("could not open database connection: %s", err)
return
}
s, err := NewServer(db, cfg.Debug)
if err != nil {
log.Fatalf("could not create server instance: %s", err)
return
}
s.Register("layer3domain_create", layer3DomainCreate)
s.Register("layer3domain_list", layer3DomainList)
s.Register("layer3domain_get_attr", layer3DomainGetAttr)
s.Register("layer3domain_set_attr", layer3DomainSetAttr)
s.Register("ipblock_create", containerCreate)
s.Register("ipblock_remove", containerDelete)
s.Register("ipblock_list", containerList)
s.Register("ipblock_set_attr", containerSetAttr)
s.Register("ipblock_get_attr", containerGetAttr)
s.Register("ippool_create", PoolCreate)
s.Register("ippool_delete", PoolDelete)
s.Register("ippool_list", PoolList)
s.Register("ippool_get_attr", PoolGetAttr)
s.Register("ippool_set_attr", PoolSetAttr)
s.Register("zone_create", zoneCreate)
s.Register("zone_list", zoneList)
http.HandleFunc("/dim", s.Handle)
log.Fatal(http.ListenAndServe(cfg.Listen, nil))
}