auth: add SetData, GetData to UserStore interface, add Login/Logout wrappers
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAmHdI/wACgkQO3+8IhRO Y5jn1Q/5AQDxjOVFrqX+pBULQy0zbFN/kLIjOHtLcoFbAIb2onOLLFDwPGgldYCU Z3A2X2clSF6xHSHUHun0qvX3bOBYyt3iTlGTK7AGFJ5EC/c8/zuE724PFHIAwHt8 M5+9wQO+zLmMvG2DDktHiQM9dXSZV3xnDRgyz4zdolwnKDOTJhePom02oNnQylHl TXsUakCDmwbJC2dmrdwdLzqemBTZOd2AJNtPLJ5g103pLK/PyEy++pTsVoK2dxYf 0J8gliomCN3ICxu5J+ni+QcsKz/JisA5G96Pp+k8F9KlliW6/ho2JTityWIDQRNq agnbsGp0ig71Tiw3JkKa/UKjgWIpgcx5pQulA8hK6j00ezUq+M4AzifyqyxlN+r0 A83g+50eClp3TH/i5YybJJWPEHImLkjWQFuKAtYvaUJXQq/3K1yPOxjH7EZTtBHG PIwA/EnrF7fy9JAiytv/FFQ3Yz1KMrUiynkhtKgKxq2swY8hOFTFhfC2RToobq4N UpNH6gRTZ6bVX9I5t2eIVl1ZBrYuVbu4LSrif0u2sva3mAIrxvgNPKEK3hEwr0cr e4+HKLqNU+SdYl7f5JhKfU0JLDTc4YsoeSlUyIgMsmyL+CxdaPvO9Gnwk+uUchsJ NLv3fO9Ejtq0p77/XnQrcFYyE3r5sL9c7hq8DvRVnlnJHpMpVvY= =Z/T6 -----END PGP SIGNATURE-----
2 files changed,
43 insertions(+),
6 deletions(-)
M
auth/auth.go
→
auth/auth.go
@@ -2,6 +2,8 @@ package auth
import ( "time" + "net/http" + "nilfm.cc/git/quartzgun/cookie" ) type User struct {@@ -21,12 +23,26 @@ 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) (string, error) { - //ValidateUser (check user exists, hash and compare password) - //InitiateUserSession (generate token and assign it to the user) - //set username in cookie - //return token, nil - return "", nil +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 }
M
indentalUserDB/indentalUserDB.go
→
indentalUserDB/indentalUserDB.go
@@ -117,6 +117,27 @@ writeDB(self.Basis, self.Users)
return nil; } +func (self *IndentalUserDB) SetData(user string, key string, value interface{}) error { + if _, exists := self.Users[user]; !exists { + return errors.New("User not in DB") + } + + self.Users[user].Data[key] = value; + return nil; +} + +func (self *IndentalUserDB) GetData(user string, key string) (interface{}, error) { + if _, usrExists := self.Users[user]; !usrExists { + return nil, errors.New("User not in DB") + } + data, exists := self.Users[user].Data[key] + if !exists { + return nil, errors.New("No data key for user") + } + + return data, nil +} + const timeFmt = "2006-01-02T15:04Z" func readDB(filePath string) (map[string]*auth.User, error) {