transmet/main.go

112 lines
2.2 KiB
Go
Raw Normal View History

2015-04-27 15:31:51 +00:00
package main
import (
2015-04-29 15:25:48 +00:00
"database/sql"
2015-04-27 15:31:51 +00:00
"encoding/json"
"fmt"
2015-04-29 15:25:48 +00:00
"github.com/gorilla/sessions"
_ "github.com/lib/pq"
2015-04-29 15:25:48 +00:00
"html/template"
"net/http"
"os"
"path/filepath"
"regexp"
2015-05-14 14:20:30 +00:00
"flag"
2015-04-27 15:31:51 +00:00
)
2015-05-18 02:25:32 +00:00
const (
VERSION = "0.1"
MAX_DB_CONNS = 10 // already excessive for personal app
)
2015-04-27 15:31:51 +00:00
type Config struct {
Sql struct {
Host string
Dbname string
Username string
Password string
}
2015-04-29 15:25:48 +00:00
Port string
2015-05-14 06:12:39 +00:00
Url string
2015-04-27 15:31:51 +00:00
}
2015-04-29 15:25:48 +00:00
const (
flash_err = "_flash_err"
flash_info = "_flash_info"
)
2015-04-27 15:31:51 +00:00
var (
2015-04-29 15:25:48 +00:00
config Config
db *sql.DB
store = sessions.NewCookieStore([]byte("key-store-auth-secret"))
templates = map[string]*template.Template{}
2015-04-27 15:31:51 +00:00
)
2015-05-14 14:20:30 +00:00
func loadConfig(env string) {
file, err := os.Open("config/" + env + ".json")
2015-04-27 15:31:51 +00:00
if err != nil {
2015-05-14 14:20:30 +00:00
fmt.Println("Error: cannot open config file: config/" + env + ".json")
2015-04-27 15:31:51 +00:00
os.Exit(-1)
}
decoder := json.NewDecoder(file)
2015-04-30 04:32:39 +00:00
err = decoder.Decode(&config)
if err != nil {
fmt.Println("Error: cannot decode config file: ", err)
os.Exit(-1)
}
2015-04-27 15:31:51 +00:00
}
func dbConnect() {
2015-04-29 15:25:48 +00:00
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)
}
2015-05-18 03:18:28 +00:00
db.SetMaxIdleConns(MAX_DB_CONNS)
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)
}
}
}
2015-04-27 15:31:51 +00:00
func main() {
fmt.Println("transmet ", VERSION)
2015-05-14 14:20:30 +00:00
envFlag := flag.String("env", "local", "load config/{env}.json")
flag.Parse()
2015-04-27 15:31:51 +00:00
fmt.Println("Loading...")
2015-05-14 14:20:30 +00:00
loadConfig(*envFlag)
2015-04-29 15:25:48 +00:00
dbConnect()
initTemplates()
init_route_handlers()
2015-05-01 15:20:02 +00:00
fmt.Println("Listening on", config.Port, "...")
2015-04-29 15:25:48 +00:00
err := http.ListenAndServe(":"+config.Port, nil)
if err != nil {
fmt.Println("Fatal Error: ", err)
}
db.Close()
2015-04-27 15:31:51 +00:00
}