more
This commit is contained in:
@@ -41,8 +41,6 @@ func CheckLogin(username string, password string, ip string) (bool, string) {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Println(user, username)
|
||||
|
||||
if user != username {
|
||||
return false, ""
|
||||
}
|
||||
@@ -56,11 +54,27 @@ func CheckLogin(username string, password string, ip string) (bool, string) {
|
||||
}
|
||||
|
||||
type LoginToken struct {
|
||||
Token string `json:"token"`
|
||||
ID string `json:"id"`
|
||||
TokenHash string `json:"token"`
|
||||
IP string `json:"ip"`
|
||||
End string `json:"end"`
|
||||
}
|
||||
|
||||
|
||||
type LoginTokenSimple struct {
|
||||
ID string `json:"id"`
|
||||
IP string `json:"ip"`
|
||||
End string `json:"end"`
|
||||
}
|
||||
|
||||
func (t LoginToken) Simplify() LoginTokenSimple {
|
||||
return LoginTokenSimple{
|
||||
ID: t.ID,
|
||||
IP: t.IP,
|
||||
End: t.End,
|
||||
}
|
||||
}
|
||||
|
||||
func (t LoginToken) MarshalBinary() ([]byte, error) {
|
||||
return json.Marshal(t)
|
||||
}
|
||||
@@ -70,21 +84,22 @@ func (t *LoginToken) UnmarshalBinary(data []byte) error {
|
||||
}
|
||||
|
||||
func createLoginToken(ip string) string {
|
||||
token := util.GeneratePassword(32)
|
||||
token := util.GenerateToken()
|
||||
|
||||
tokenHash, err := bcrypt.GenerateFromPassword([]byte(token), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
|
||||
tokenData := LoginToken{
|
||||
Token: string(tokenHash),
|
||||
IP: ip,
|
||||
End: token[len(token) - 4:],
|
||||
ID: util.GenerateID(),
|
||||
TokenHash: string(tokenHash),
|
||||
IP: ip,
|
||||
End: util.GetEnd(token),
|
||||
}
|
||||
|
||||
member := redis.Z{
|
||||
Score: float64(time.Now().Unix() + 4 * 60 * 60),
|
||||
Score: float64(time.Now().Unix() + 4 * 60 * 60),
|
||||
Member: tokenData,
|
||||
}
|
||||
|
||||
@@ -96,8 +111,7 @@ func createLoginToken(ip string) string {
|
||||
return token
|
||||
}
|
||||
|
||||
func CheckLoginToken(token string, ip string) bool {
|
||||
|
||||
func getLoginTokens() []LoginToken {
|
||||
expired, err := client.ZRangeByScore(ctx, "loginTokens", &redis.ZRangeBy{
|
||||
Min: "-inf",
|
||||
Max: fmt.Sprintf("%d", time.Now().Unix()),
|
||||
@@ -118,10 +132,28 @@ func CheckLoginToken(token string, ip string) bool {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
fmt.Printf("%v\n", current)
|
||||
return current
|
||||
}
|
||||
|
||||
func GetLoginTokensSimple() []LoginTokenSimple {
|
||||
simple := make([]LoginTokenSimple, 0)
|
||||
|
||||
for _, c := range getLoginTokens() {
|
||||
simple = append(simple, c.Simplify())
|
||||
}
|
||||
|
||||
return simple
|
||||
}
|
||||
|
||||
func ClearLoginTokens() {
|
||||
client.Del(ctx, "loginTokens")
|
||||
}
|
||||
|
||||
func CheckLoginToken(token string, ip string) bool {
|
||||
current := getLoginTokens()
|
||||
|
||||
for _, c := range current {
|
||||
err = bcrypt.CompareHashAndPassword([]byte(c.Token), []byte(token))
|
||||
err := bcrypt.CompareHashAndPassword([]byte(c.TokenHash), []byte(token))
|
||||
if err == nil && ip == c.IP {
|
||||
return true
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user