hlfw.ca

webbing

Download patch

ref: f69e3764fd85ccbb72ea675363d62b600a67ae41
parent: 8ab5d39abc4297d008d438dde3adddd21575df36
author: Halfwit <halfwit@MacBook-Pro.hitronhub.home>
date: Thu Dec 12 12:15:49 PST 2019

Finish moving everything around

--- a/router/forms.go
+++ b/router/forms.go
@@ -28,7 +28,7 @@
 	formlist[f.Path+".html"] = f
 }
 
-func parseform(p *Request, w http.ResponseWriter, r *http.Request) (*Form, []string) {
+func parseForm(p *Request, w http.ResponseWriter, r *http.Request) (*Form, []string) {
 	var errors []string
 	form, ok := formlist[p.path]
 	if !ok {
@@ -50,7 +50,7 @@
 }
 
 func postform(p *Request, us session.Session, w http.ResponseWriter, r *http.Request) {
-	form, errors := parseform(p, w, r)
+	form, errors := parseForm(p, w, r)
 	if len(errors) > 0 && errors[0] != "nil" {
 		// NOTE(halfwit) this stashes previous entries, but does not work
 		// on multipart forms (with file uploads)
--- a/router/handler.go
+++ b/router/handler.go
@@ -7,6 +7,7 @@
 	"github.com/olmaxmedical/olmax_go/db"
 	"github.com/olmaxmedical/olmax_go/email"
 	"github.com/olmaxmedical/olmax_go/session"
+	"golang.org/x/text/message"
 )
 
 // Handle specific endpoints
@@ -27,7 +28,7 @@
 		http.Redirect(w, r, "/index.html", 302)
 		return
 	}
-	user, status, us, role := getUser(d, w, r)
+	user, status, us, role := d.getUser(w, r)
 	p := &Request{
 		printer: userLang(r),
 		status:  status,
@@ -49,7 +50,7 @@
 // TODO: This will require actual client data from the database to populate the page
 func (d *handler) profile(w http.ResponseWriter, r *http.Request) {
 	w.Header().Add("Strict-Transport-Security", "max-age=63072000; includeSubDomains")
-	user, status, us, role := getUser(d, w, r)
+	user, status, us, role := d.getUser(w, r)
 	if status == "false" {
 		http.Redirect(w, r, "/login.html", 302)
 		return
@@ -75,7 +76,7 @@
 			return
 		}
 		p.path = "doctor/profile.html"
-		data, err = getdata(p, "doctor")
+		data, err = getData(p, "doctor")
 	case db.PatientAuth:
 		if role != db.PatientAuth {
 			http.Error(w, "Unauthorized", 401)
@@ -82,7 +83,7 @@
 			return
 		}
 		p.path = "patient/profile.html"
-		data, err = getdata(p, "patient")
+		data, err = getData(p, "patient")
 	default:
 		http.Error(w, "Forbidden", 403)
 		return
@@ -109,7 +110,7 @@
 		return
 	}
 	p := userLang(r)
-	user, _, us, _ := getUser(d, w, r)
+	user, _, us, _ := d.getUser(w, r)
 	token := email.NextResetToken(r.URL.Path[7:], user)
 	if token == "" {
 		us.Set("errors", [1]string{p.Sprint("Token expired")})
@@ -118,4 +119,29 @@
 	us.Set("token", token)
 	r.URL.Path = "/newpassword.html"
 	d.normal(w, r)
+}
+
+func (d *handler) getUser(w http.ResponseWriter, r *http.Request) (string, string, session.Session, db.Access) {
+	us := d.manager.Start(w, r)
+	user, ok1 := us.Get("username").(string)
+	status, ok2 := us.Get("login").(string)
+	role, ok3 := us.Get("role").(db.Access)
+	if !ok1 || !ok2 || status != "true" {
+		status = "false"
+	}
+	if !ok3 {
+		role = db.GuestAuth
+	}
+	if status == "true" {
+		us.Set("token", db.NewToken())
+	}
+	return user, status, us, role
+}
+
+// Some utility functions that are shared across pages and forms
+func userLang(r *http.Request) *message.Printer {
+	accept := r.Header.Get("Accept-Language")
+	lang := r.FormValue("lang")
+	tag := message.MatchLanguage(lang, accept)
+	return message.NewPrinter(tag)
 }
--- a/router/pages.go
+++ b/router/pages.go
@@ -82,7 +82,7 @@
 			path:    item.Path + ".html",
 			role:    db.PatientAuth | db.DoctorAuth | db.GuestAuth,
 		}
-		_, err = getdata(p, "")
+		_, err = getData(p, "")
 		if err != nil {
 			errs = append(errs, err)
 		}
@@ -95,11 +95,11 @@
 	var err error
 	switch db.UserRole(p.user) {
 	case db.DoctorAuth:
-		data, err = getdata(p, "doctor")
+		data, err = getData(p, "doctor")
 	case db.PatientAuth:
-		data, err = getdata(p, "patient")
+		data, err = getData(p, "patient")
 	default:
-		data, err = getdata(p, "guest")
+		data, err = getData(p, "guest")
 	}
 	if err != nil && err.Error() == "Unauthorized" {
 		p.Session().Set("redirect", p.path)
@@ -113,7 +113,7 @@
 	fmt.Fprintf(w, "%s", data)
 }
 
-func getdata(p *Request, in string) ([]byte, error) {
+func getData(p *Request, in string) ([]byte, error) {
 	cache, ok := pagecache[p.path]
 	if !ok {
 		return nil, fmt.Errorf("No such page: %s", p.path)
--- a/router/run.go
+++ b/router/run.go
@@ -4,9 +4,7 @@
 	"crypto/tls"
 	"net/http"
 
-	"github.com/olmaxmedical/olmax_go/db"
 	"github.com/olmaxmedical/olmax_go/session"
-	"golang.org/x/text/message"
 )
 
 // Route - All requests pass through here first
@@ -34,29 +32,4 @@
 		TLSNextProto: make(map[string]func(*http.Server, *tls.Conn, http.Handler), 0),
 	}
 	return srv.ListenAndServeTLS("cert.pem", "key.pem")
-}
-
-// Some utility functions that are shared across pages and forms
-func userLang(r *http.Request) *message.Printer {
-	accept := r.Header.Get("Accept-Language")
-	lang := r.FormValue("lang")
-	tag := message.MatchLanguage(lang, accept)
-	return message.NewPrinter(tag)
-}
-
-func getUser(d *handler, w http.ResponseWriter, r *http.Request) (string, string, session.Session, db.Access) {
-	us := d.manager.Start(w, r)
-	user, ok1 := us.Get("username").(string)
-	status, ok2 := us.Get("login").(string)
-	role, ok3 := us.Get("role").(db.Access)
-	if !ok1 || !ok2 || status != "true" {
-		status = "false"
-	}
-	if !ok3 {
-		role = db.GuestAuth
-	}
-	if status == "true" {
-		us.Set("token", db.NewToken())
-	}
-	return user, status, us, role
 }