all repos — quartzgun @ 483e59e2b26f5797f99336bbe325411cf0dcaf77

lightweight web framework in go

auth/auth.go (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package auth

import (
  "time"
  "net/http"
  "nilfm.cc/git/quartzgun/cookie"
)

type User struct {
  Name string
  Pass string
  Session string
  LoginTime time.Time
  LastSeen time.Time

  Data map[string]interface{}
}

type UserStore interface {
  InitiateSession(user string, password string) (string, error)
  ValidateUser(user string, sessionId string) (bool, error)
  EndSession(user string) error
  AddUser(user string, password string) error
  DeleteUser(user string) error
  ChangePassword(user string, oldPassword string, newPassword string) error
  SetData(user string, key string, value interface{}) error
  GetData(user string, key string) (interface{}, error)
}

func Login(user string, password string, userStore UserStore, w http.ResponseWriter, t int) error {
  session, loginErr := userStore.InitiateSession(user, password)
  if loginErr == nil {
    cookie.StoreToken("user", user, w, t)
    cookie.StoreToken("session", session, w, t)
    return nil
  }
  return loginErr
}

func Logout(user string, userStore UserStore, w http.ResponseWriter) error {
  logoutErr :=  userStore.EndSession(user)
  if logoutErr == nil {
    cookie.StoreToken("user", "", w, 0)
    cookie.StoreToken("session", "", w, 0)
    return nil
  }
  return logoutErr
}