You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.5 KiB
80 lines
1.5 KiB
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 |
|
}
|
|
|