diff --git a/auth/auth.go b/auth/auth.go deleted file mode 100644 index 24b871b..0000000 --- a/auth/auth.go +++ /dev/null @@ -1,49 +0,0 @@ -package auth - -import ( - _ "embed" - "fmt" - "log" - "net/http" - - "git.bronku.xyz/bronku/cake-order-tracker/models" - "git.bronku.xyz/bronku/cake-order-tracker/store" -) - -type Authenticator struct { - sessions map[string]models.Token - s *store.Store -} - -func New(s *store.Store) *Authenticator { - var out Authenticator - var err error - out.s = s - out.sessions, err = s.GetSessions() - //fmt.Println(out.sessions) - if err != nil { - log.Fatal(err) - } - return &out -} - -func (a *Authenticator) ensureAuth(in http.Handler) http.Handler { - fmt.Println("ensureAuth called") - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - _, err := a.getSession(r) - if err != nil { - http.Redirect(w, r, "/login", http.StatusSeeOther) - return - } - in.ServeHTTP(w, r) - }) -} - -func (a *Authenticator) Middleware(in http.Handler) http.Handler { - handler := http.NewServeMux() - handler.HandleFunc("GET /login", getLogin) - handler.HandleFunc("POST /login", a.login) - handler.HandleFunc("GET /logout", a.logout) - handler.Handle("/", a.ensureAuth(in)) - return handler -} diff --git a/auth/credentials.go b/auth/credentials.go deleted file mode 100644 index 78b8441..0000000 --- a/auth/credentials.go +++ /dev/null @@ -1,19 +0,0 @@ -package auth - -import ( - "errors" - - "git.bronku.xyz/bronku/cake-order-tracker/crypto" -) - -func (a *Authenticator) verifyCredentials(login, password string) error { - user, ok := a.s.GetUser(login) - if !ok { - return errors.New("user with this login doesn't exist") - } - hash := crypto.PasswordHash(password, user.Salt) - if hash == user.Password { - return nil - } - return errors.New("wrong credentials") -} diff --git a/auth/get.go b/auth/get.go deleted file mode 100644 index 3d4646d..0000000 --- a/auth/get.go +++ /dev/null @@ -1,17 +0,0 @@ -package auth - -import ( - "fmt" - "net/http" - - _ "embed" -) - -//go:embed templates/login.html -var loginHTML string - -func getLogin(w http.ResponseWriter, _ *http.Request) { - w.Header().Set("content-type", "text/html") - fmt.Fprint(w, loginHTML) - return -} diff --git a/auth/session.go b/auth/session.go deleted file mode 100644 index 7fee517..0000000 --- a/auth/session.go +++ /dev/null @@ -1,75 +0,0 @@ -package auth - -import ( - "errors" - "fmt" - "net/http" - "time" - - "git.bronku.xyz/bronku/cake-order-tracker/models" -) - -func (a *Authenticator) getSession(r *http.Request) (models.Token, error) { - c, err := r.Cookie("token") - if err != nil { - return models.Token{}, err - } - session, ok := a.sessions[c.Value] - if !ok { - return models.Token{}, errors.New("session not found") - } - if time.Since(session.Expiration) > 0 { - delete(a.sessions, c.Value) - err := a.s.CleanSessions() - if err != nil { - fmt.Println("error cleaning the sessions", err) - } - return models.Token{}, errors.New("session expired") - } - return session, nil -} - -func (a *Authenticator) login(w http.ResponseWriter, r *http.Request) { - err := r.ParseForm() - if err != nil { - http.Redirect(w, r, "/login", http.StatusSeeOther) - return - } - login := r.PostFormValue("login") - password := r.PostFormValue("password") - if a.verifyCredentials(login, password) != nil { - http.Redirect(w, r, "/login", http.StatusSeeOther) - return - } - cookie, err := a.newSession(login) - if err != nil { - w.Header().Set("content-type", "text/html") - fmt.Fprint(w, "internal server error") - return - } - http.SetCookie(w, &cookie) - http.Redirect(w, r, "/", http.StatusFound) -} - -func (a *Authenticator) logout(w http.ResponseWriter, r *http.Request) { - var cookie http.Cookie - cookie.Name = "token" - cookie.Value = "nil" - cookie.HttpOnly = true - cookie.SameSite = http.SameSiteStrictMode - cookie.Path = "/" - http.SetCookie(w, &cookie) - http.Redirect(w, r, "/", http.StatusFound) - c, err := r.Cookie("token") - if err != nil { - return - } - _, ok := a.sessions[c.Value] - if !ok { - return - } - fmt.Println("removing session") - delete(a.sessions, c.Value) - err = a.s.RevokeSession(c.Value) - fmt.Println(err) -} diff --git a/auth/templates/login.html b/auth/templates/login.html deleted file mode 100644 index 0e0fb2d..0000000 --- a/auth/templates/login.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - Login — Zamówienia ciast - - - - - - - -
-
- cake -
-

Zaloguj się

-
- - - -
-
- - diff --git a/auth/token.go b/auth/token.go deleted file mode 100644 index 6972bd4..0000000 --- a/auth/token.go +++ /dev/null @@ -1,30 +0,0 @@ -package auth - -import ( - "net/http" - "time" - - "git.bronku.xyz/bronku/cake-order-tracker/crypto" - "git.bronku.xyz/bronku/cake-order-tracker/models" -) - -func (a *Authenticator) newSession(user string) (http.Cookie, error) { - key := crypto.GenerateKey() - var session models.Token - var cookie http.Cookie - session.User = user - session.Expiration = time.Now().Add(time.Hour * 24) - a.sessions[key] = session - err := a.s.AddSession(key, user, session.Expiration) - if err != nil { - return cookie, err - } - - cookie.Name = "token" - cookie.Value = key - cookie.HttpOnly = true - cookie.SameSite = http.SameSiteStrictMode - cookie.Path = "/" - //cookie.Secure = true - return cookie, nil -} diff --git a/main.go b/main.go index 401e523..ec5a151 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,9 @@ package main import ( - "fmt" "log" "net/http" - "git.bronku.xyz/bronku/cake-order-tracker/auth" "git.bronku.xyz/bronku/cake-order-tracker/logging" "git.bronku.xyz/bronku/cake-order-tracker/server" "git.bronku.xyz/bronku/cake-order-tracker/store" @@ -13,14 +11,10 @@ import ( func main() { s := store.OpenStore("./foo.db") - s.AddUser("admin", "secret") defer s.Close() h := server.New(s) defer h.Close() - var handler http.Handler = h - handler = logging.Middleware(handler) - handler = auth.New(s).Middleware(handler) - fmt.Println("starting server") - log.Fatal(http.ListenAndServe(":8080", handler)) + log.Println("starting server") + log.Fatal(http.ListenAndServe(":8080", logging.Middleware(h))) }