From be643d32527f97c164c54995a4abc237abd61098 Mon Sep 17 00:00:00 2001 From: Jimmy Date: Sun, 13 Mar 2022 03:38:51 +1300 Subject: [PATCH] Inital commit --- main.go | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 main.go diff --git a/main.go b/main.go new file mode 100644 index 0000000..0b92aa0 --- /dev/null +++ b/main.go @@ -0,0 +1,59 @@ +// sessions.go +package main + +import ( + "fmt" + "net/http" + + "github.com/gorilla/sessions" +) + +var ( + // key must be 16, 24 or 32 bytes long (AES-128, AES-192 or AES-256) + key = []byte("super-secret-key") + store = sessions.NewCookieStore(key) + //store := gormstore.New(gorm.Open(...), []byte("secret")) + +) + +func secret(w http.ResponseWriter, r *http.Request) { + session, _ := store.Get(r, "cookie-name") + + // Check if user is authenticated + if auth, ok := session.Values["authenticated"].(bool); !ok || !auth { + http.Error(w, "Forbidden", http.StatusForbidden) + return + } + + // Print secret message + fmt.Fprintln(w, "The cake is a lie!") + fmt.Println(session.Values) +} + +func login(w http.ResponseWriter, r *http.Request) { + session, _ := store.Get(r, "cookie-name") + + // Authentication goes here + // ... + + // Set user as authenticated + session.Values["user"] = "test" + session.Values["authenticated"] = true + session.Save(r, w) +} + +func logout(w http.ResponseWriter, r *http.Request) { + session, _ := store.Get(r, "cookie-name") + + // Revoke users authentication + session.Values["authenticated"] = false + session.Save(r, w) +} + +func main() { + http.HandleFunc("/secret", secret) + http.HandleFunc("/login", login) + http.HandleFunc("/logout", logout) + + http.ListenAndServe(":8080", nil) +}