From cad6e94368c108b3ef81d5f0770dd88b0fd96ac1 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 26 Jan 2018 14:49:03 +0100 Subject: [PATCH] Move database and sessions to services --- assets/templates/views/cert_list.gohtml | 25 ++++++++++++++++++++++++ main.go | 14 +++---------- services/db.go | 26 +++++++++++++++++++++++++ services/sessions.go | 21 ++++++++++++++++++++ settings/settings.go | 10 ++++++++++ views/templates.go | 5 +++-- 6 files changed, 88 insertions(+), 13 deletions(-) create mode 100644 assets/templates/views/cert_list.gohtml create mode 100644 services/db.go create mode 100644 services/sessions.go create mode 100644 settings/settings.go diff --git a/assets/templates/views/cert_list.gohtml b/assets/templates/views/cert_list.gohtml new file mode 100644 index 0000000..3cd0983 --- /dev/null +++ b/assets/templates/views/cert_list.gohtml @@ -0,0 +1,25 @@ +{{ define "meta" }} + Log in + +{{ end}} + +{{ define "content" }} +
+
+
+
+
+

Certificates

+ {{ if .Certificates }} + {{ range .Certificates }} +
  • {{ .User }}@{{ .Name }}
  • + {{ end }} + {{ else }} +

    You don't have certificates yet!

    + {{ end }} +
    +
    +
    +
    +
    +{{ end}} diff --git a/main.go b/main.go index 2d7fe42..63f8475 100644 --- a/main.go +++ b/main.go @@ -4,9 +4,8 @@ import ( "log" "net/http" - "github.com/jinzhu/gorm" + "git.klink.asia/paul/certman/services" - "git.klink.asia/paul/certman/models" "git.klink.asia/paul/certman/router" "git.klink.asia/paul/certman/views" @@ -17,20 +16,13 @@ import ( func main() { // Connect to the database - db, err := gorm.Open("sqlite3", "db.sqlite3") - if err != nil { - log.Fatalf("Could not open database: %s", err.Error()) - } - defer db.Close() - - // Migrate - db.AutoMigrate(models.User{}, models.ClientConf{}) + db := services.InitDB() // load and parse template files views.LoadTemplates() mux := router.HandleRoutes(db) - err = http.ListenAndServe(":8000", mux) + err := http.ListenAndServe(":8000", mux) log.Fatalf(err.Error()) } diff --git a/services/db.go b/services/db.go new file mode 100644 index 0000000..f88e28d --- /dev/null +++ b/services/db.go @@ -0,0 +1,26 @@ +package services + +import ( + "log" + + "git.klink.asia/paul/certman/models" + "git.klink.asia/paul/certman/settings" + "github.com/jinzhu/gorm" +) + +var DB *gorm.DB + +func InitDB() *gorm.DB { + dsn := settings.Get("DATABASE_URL", "db.sqlite3") + + // Establish connection + db, err := gorm.Open("sqlite3", dsn) + if err != nil { + log.Fatalf("Could not open database: %s", err.Error()) + } + + // Migrate models + db.AutoMigrate(models.User{}, models.ClientConf{}) + + return db +} diff --git a/services/sessions.go b/services/sessions.go new file mode 100644 index 0000000..2afbe0b --- /dev/null +++ b/services/sessions.go @@ -0,0 +1,21 @@ +package services + +import ( + "git.klink.asia/paul/certman/settings" + "github.com/gorilla/securecookie" + "github.com/gorilla/sessions" +) + +var Sessions sessions.Store + +func InitSession() { + store := sessions.NewCookieStore( + securecookie.GenerateRandomKey(32), // signing key + securecookie.GenerateRandomKey(32), // encryption key + ) + store.Options.HttpOnly = true + store.Options.MaxAge = 7 * 24 * 60 * 60 // 1 Week + store.Options.Secure = settings.Get("ENVIRONMENT", "") == "production" + + Sessions = store +} diff --git a/settings/settings.go b/settings/settings.go new file mode 100644 index 0000000..d8b00fd --- /dev/null +++ b/settings/settings.go @@ -0,0 +1,10 @@ +package settings + +import "os" + +func Get(key, defaultVal string) string { + if val := os.Getenv(key); val != "" { + return val + } + return defaultVal +} diff --git a/views/templates.go b/views/templates.go index da64dd4..a8c444e 100644 --- a/views/templates.go +++ b/views/templates.go @@ -21,8 +21,9 @@ func LoadTemplates() { "404": newTemplate("layouts/application.gohtml", "errors/404.gohtml"), "500": newTemplate("layouts/application.gohtml", "errors/500.gohtml"), - "debug": newTemplate("layouts/application.gohtml", "shared/header.gohtml", "shared/footer.gohtml", "views/debug.gohtml"), - "login": newTemplate("layouts/application.gohtml", "shared/header.gohtml", "shared/footer.gohtml", "views/login.gohtml"), + "debug": newTemplate("layouts/application.gohtml", "shared/header.gohtml", "shared/footer.gohtml", "views/debug.gohtml"), + "login": newTemplate("layouts/application.gohtml", "shared/header.gohtml", "shared/footer.gohtml", "views/login.gohtml"), + "cert_list": newTemplate("layouts/application.gohtml", "shared/header.gohtml", "shared/footer.gohtml", "views/cert_list.gohtml"), } return }