Add authentication

Amolith created

Change summary

login.go | 18 +++++++++++++++++-
root.go  | 18 +++++++++++++++---
2 files changed, 32 insertions(+), 4 deletions(-)

Detailed changes

login.go 🔗

@@ -1,6 +1,22 @@
 package main
 
-import "net/http"
+import (
+	"io"
+	"net/http"
+	"time"
+)
 
 func (m model) login(writer http.ResponseWriter, request *http.Request) {
+	if request.URL.Query().Get("access_token") == m.AccessToken {
+		expiration := time.Now().Add(365 * 24 * time.Hour)
+		cookie := http.Cookie{Name: "access_token", Value: m.AccessToken, Expires: expiration}
+		http.SetCookie(writer, &cookie)
+		http.Redirect(writer, request, "/", 301)
+	} else {
+		login, err := templates.ReadFile("templates/login.html")
+		if err != nil {
+			http.Error(writer, "500 Internal Server Error: "+err.Error(), 500)
+		}
+		io.WriteString(writer, string(login))
+	}
 }

root.go 🔗

@@ -7,9 +7,21 @@ import (
 )
 
 func (m model) root(writer http.ResponseWriter, request *http.Request) {
-	home, err := templates.ReadFile("templates/home_unauthenticated.html")
+	cookie, err := request.Cookie("access_token")
 	if err != nil {
-		log.Fatalln(err)
+		home, err := templates.ReadFile("templates/home_unauthenticated.html")
+		if err != nil {
+			log.Fatalln(err)
+		}
+		io.WriteString(writer, string(home))
+		return
+	}
+
+	if cookie.Value == m.AccessToken {
+		dash, err := templates.ReadFile("templates/home_authenticated.html")
+		if err != nil {
+			log.Fatalln(err)
+		}
+		io.WriteString(writer, string(dash))
 	}
-	io.WriteString(writer, string(home))
 }