package main import ( "database/sql" "encoding/json" "fmt" "github.com/gorilla/sessions" _ "github.com/lib/pq" "html/template" "net/http" "os" "path/filepath" "regexp" ) const VERSION = "0.1" type Config struct { Sql struct { Host string Dbname string Username string Password string } Port string } const ( flash_err = "_flash_err" flash_info = "_flash_info" ) var ( config Config db *sql.DB store = sessions.NewCookieStore([]byte("key-store-auth-secret")) templates = map[string]*template.Template{} ) func loadConfig() { file, err := os.Open("config/local.json") if err != nil { fmt.Println("Error: cannot open config file") os.Exit(-1) } decoder := json.NewDecoder(file) err = decoder.Decode(&config) if err != nil { fmt.Println("Error: cannot decode config file: ", err) os.Exit(-1) } } func dbConnect() { var err error db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=require", config.Sql.Username, config.Sql.Password, config.Sql.Host, config.Sql.Dbname)) if err != nil { fmt.Println("DB ERROR: ", err) } err = db.Ping() if err != nil { fmt.Println("DB Error on Ping(): ", err) os.Exit(-1) } } func initTemplates() { files, _ := filepath.Glob("templates/pages/*.html") re := regexp.MustCompile("templates/pages/(.*).html") fmt.Println("Loading Templates:") for _, t := range files { name := re.FindStringSubmatch(t) fmt.Println(" ", name[1]) var err error templates[name[1]], err = template.ParseFiles("templates/layout.html", t) if err != nil { fmt.Println("Template load error: ", err) os.Exit(-1) } } } func main() { fmt.Println("transmet ", VERSION) fmt.Println("Loading...") loadConfig() dbConnect() initTemplates() init_route_handlers() fmt.Println("Listening on", config.Port, "...") err := http.ListenAndServe(":"+config.Port, nil) if err != nil { fmt.Println("Fatal Error: ", err) } db.Close() }