add some documentation and error handling

Amolith created

Change summary

config.go        |  6 ++++++
createHandler.go |  5 ++++-
deleteHandler.go |  6 +++++-
helperfuncs.go   | 21 +++++++++++++++------
login.go         |  6 +++++-
main.go          |  2 +-
readHandler.go   |  5 ++++-
root.go          | 20 ++++++++++++++++----
updateHandler.go |  6 +++++-
9 files changed, 61 insertions(+), 16 deletions(-)

Detailed changes

config.go 🔗

@@ -11,6 +11,9 @@ import (
 	yaml "gopkg.in/yaml.v2"
 )
 
+// parseConfig takes the path to a config file as its own argument, attempts to
+// parse it and write the values to the internal config struct, and exits with
+// an error if it fails.
 func (m *model) parseConfig(configFile *string) {
 	configBytes, err := os.ReadFile(*configFile)
 	if err != nil {
@@ -22,6 +25,9 @@ func (m *model) parseConfig(configFile *string) {
 		os.Exit(0)
 	}
 	err = yaml.Unmarshal(configBytes, m)
+	if err != nil {
+		log.Fatalln("Error parsing config file:", err)
+	}
 }
 
 // writeDefaultConfig takes a config file path as its argument and writes the

createHandler.go 🔗

@@ -43,5 +43,8 @@ func (m *model) createHandler(writer http.ResponseWriter, request *http.Request)
 
 	response := m.create(name, url)
 
-	writer.Write([]byte(response))
+	_, err := writer.Write([]byte(response))
+	if err != nil {
+		log.Println(err)
+	}
 }

deleteHandler.go 🔗

@@ -5,6 +5,7 @@
 package main
 
 import (
+	"log"
 	"net/http"
 	"strings"
 )
@@ -27,5 +28,8 @@ func (m *model) deleteHandler(writer http.ResponseWriter, request *http.Request)
 
 	response := m.delete(name)
 
-	writer.Write([]byte(response))
+	_, err := writer.Write([]byte(response))
+	if err != nil {
+		log.Println(err)
+	}
 }

helperfuncs.go 🔗

@@ -60,10 +60,7 @@ func (m model) nameExists(name string) bool {
 		}
 		return nil
 	})
-	if err == nil {
-		return true
-	}
-	return false
+	return err == nil
 }
 
 // unauthenticated serves the unauthenticated home page to the visitor
@@ -82,8 +79,14 @@ func (m model) authenticated() string {
 		log.Fatalln(err)
 	}
 	tmpl, err := template.New("authenticated").Parse(string(dash))
+	if err != nil {
+		log.Println(err)
+	}
 	page := new(strings.Builder)
-	tmpl.Execute(page, m.genTable())
+	err = tmpl.Execute(page, m.genTable())
+	if err != nil {
+		log.Println(err)
+	}
 	return page.String()
 }
 
@@ -100,7 +103,13 @@ func (m model) edit(name string, url string) string {
 		log.Fatalln(err)
 	}
 	tmpl, err := template.New("editPage").Parse(string(editPage))
+	if err != nil {
+		log.Println(err)
+	}
 	page := new(strings.Builder)
-	tmpl.Execute(page, fields)
+	err = tmpl.Execute(page, fields)
+	if err != nil {
+		log.Println(err)
+	}
 	return page.String()
 }

login.go 🔗

@@ -6,6 +6,7 @@ package main
 
 import (
 	"io"
+	"log"
 	"net/http"
 	"time"
 )
@@ -21,6 +22,9 @@ func (m model) login(writer http.ResponseWriter, request *http.Request) {
 		if err != nil {
 			http.Error(writer, "500 Internal Server Error: "+err.Error(), 500)
 		}
-		io.WriteString(writer, string(login))
+		_, err = io.WriteString(writer, string(login))
+		if err != nil {
+			log.Println(err)
+		}
 	}
 }

main.go 🔗

@@ -29,7 +29,7 @@ type model struct {
 func (m *model) init() {
 	flag.Parse()
 	log.Println("Reading config at", *flagConfig)
-	m.parseConfig(&*flagConfig)
+	m.parseConfig(flagConfig)
 	log.Println("Listening on", m.Listen)
 	if m.AccessToken == "CHANGEME" {
 		log.Fatalln("Access token *must* be changed.")

readHandler.go 🔗

@@ -50,5 +50,8 @@ func (m model) readHandler(writer http.ResponseWriter, request *http.Request) {
 	if err != nil {
 		log.Println(err)
 	}
-	writer.Write(json)
+	_, err = writer.Write(json)
+	if err != nil {
+		log.Println(err)
+	}
 }

root.go 🔗

@@ -33,14 +33,20 @@ func (m model) root(writer http.ResponseWriter, request *http.Request) {
 			return err
 		})
 		if err != nil {
-			io.WriteString(writer, string(err.Error()))
+			_, err = io.WriteString(writer, string(err.Error()))
+			if err != nil {
+				log.Println(err)
+			}
 		}
 		return
 	}
 
 	cookie, err := request.Cookie("access_token")
 	if err != nil || cookie.Value != m.AccessToken {
-		io.WriteString(writer, unauthenticated())
+		_, err = io.WriteString(writer, unauthenticated())
+		if err != nil {
+			log.Println(err)
+		}
 		return
 	}
 
@@ -48,7 +54,10 @@ func (m model) root(writer http.ResponseWriter, request *http.Request) {
 
 	action := query.Get("action")
 	if len(action) == 0 {
-		io.WriteString(writer, m.authenticated())
+		_, err = io.WriteString(writer, m.authenticated())
+		if err != nil {
+			log.Println(err)
+		}
 	}
 
 	destination := query.Get("url")
@@ -83,7 +92,10 @@ func (m model) root(writer http.ResponseWriter, request *http.Request) {
 	}
 
 	if action == "edit" {
-		io.WriteString(writer, m.edit(name, destination))
+		_, err = io.WriteString(writer, m.edit(name, destination))
+		if err != nil {
+			log.Println(err)
+		}
 	}
 
 	if action == "update" {

updateHandler.go 🔗

@@ -5,6 +5,7 @@
 package main
 
 import (
+	"log"
 	"net/http"
 	"strings"
 )
@@ -48,5 +49,8 @@ func (m *model) updateHandler(writer http.ResponseWriter, request *http.Request)
 
 	response := m.update(name, destination, oldName)
 
-	writer.Write([]byte(response))
+	_, err := writer.Write([]byte(response))
+	if err != nil {
+		log.Println(err)
+	}
 }