Gregory Rudolph
3 years ago
3 changed files with 103 additions and 0 deletions
@ -0,0 +1,80 @@
@@ -0,0 +1,80 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"crypto/sha256" |
||||
"encoding/json" |
||||
) |
||||
|
||||
func (a *AuthToken) NewSHA256() string { |
||||
json, _ := json.Marshal(a) |
||||
hash := sha256.Sum256(json) |
||||
return string(hash[:]) |
||||
} |
||||
func NewSHA256(s string) string { |
||||
hash := sha256.Sum256([]byte(s)) |
||||
return string(hash[:]) |
||||
} |
||||
|
||||
func UpdateAuthToken(old *AuthToken, new *AuthToken) { |
||||
old.Retrieve() |
||||
old.Current = "false" |
||||
if new.Identifier == old.Identifier { |
||||
new.PreviousHash = old.NewSHA256() |
||||
new.Current = "true" |
||||
new.Insert() |
||||
old.Insert() |
||||
} |
||||
} |
||||
|
||||
func TryPassword(a *AuthToken, password string, ipAddr string) (bool, *User) { |
||||
a.Current = "true" |
||||
a.Retrieve() |
||||
b := a |
||||
if NewSHA256(password) == b.PasswordHash { |
||||
b.LastIP = ipAddr |
||||
UpdateAuthToken(a, b) |
||||
u := User{ |
||||
Identifier: b.Identifier, |
||||
Username: b.Username, |
||||
Email: b.Email, |
||||
} |
||||
err := u.Retrieve() |
||||
if err != nil { |
||||
return false, nil |
||||
} |
||||
return true, &u |
||||
} |
||||
return false, nil |
||||
|
||||
} |
||||
|
||||
func ChangePassword(a *AuthToken, password string, ipAddr string) (bool, *AuthToken) { |
||||
a.Current = "true" |
||||
a.Retrieve() |
||||
if a.Identifier == "" { |
||||
return false, nil |
||||
} |
||||
b := a |
||||
b.PasswordHash = NewSHA256(password) |
||||
b.LastIP = ipAddr |
||||
UpdateAuthToken(a, b) |
||||
return true, b |
||||
} |
||||
|
||||
func TryAuthToken(a *AuthToken) (bool, *User) { |
||||
a.Current = "true" |
||||
a.Retrieve() |
||||
if a.Identifier != "" { |
||||
u := User{ |
||||
Identifier: a.Identifier, |
||||
Username: a.Username, |
||||
Email: a.Email, |
||||
} |
||||
err := u.Retrieve() |
||||
if err != nil { |
||||
return false, nil |
||||
} |
||||
return true, &u |
||||
} |
||||
return false, nil |
||||
} |
Loading…
Reference in new issue