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
}