Add cache to xiaomi cloud logins
This commit is contained in:
+19
-11
@@ -50,18 +50,26 @@ func Init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var tokens map[string]string
|
var tokens map[string]string
|
||||||
var tokensMu sync.Mutex
|
var clouds map[string]*xiaomi.Cloud
|
||||||
|
var cloudsMu sync.Mutex
|
||||||
|
|
||||||
func getCloud(userID string) (*xiaomi.Cloud, error) {
|
func getCloud(userID string) (*xiaomi.Cloud, error) {
|
||||||
tokensMu.Lock()
|
cloudsMu.Lock()
|
||||||
defer tokensMu.Unlock()
|
defer cloudsMu.Unlock()
|
||||||
|
|
||||||
token := tokens[userID]
|
if cloud := clouds[userID]; cloud != nil {
|
||||||
cloud := xiaomi.NewCloud(AppXiaomiHome)
|
return cloud, nil
|
||||||
if err := cloud.LoginWithToken(userID, token); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cloud := xiaomi.NewCloud(AppXiaomiHome)
|
||||||
|
if err := cloud.LoginWithToken(userID, tokens[userID]); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if clouds == nil {
|
||||||
|
clouds = map[string]*xiaomi.Cloud{userID: cloud}
|
||||||
|
} else {
|
||||||
|
clouds[userID] = cloud
|
||||||
|
}
|
||||||
return cloud, nil
|
return cloud, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -221,12 +229,12 @@ func apiDeviceList(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
user := query.Get("id")
|
user := query.Get("id")
|
||||||
if user == "" {
|
if user == "" {
|
||||||
tokensMu.Lock()
|
cloudsMu.Lock()
|
||||||
users := make([]string, 0, len(tokens))
|
users := make([]string, 0, len(tokens))
|
||||||
for s := range tokens {
|
for s := range tokens {
|
||||||
users = append(users, s)
|
users = append(users, s)
|
||||||
}
|
}
|
||||||
tokensMu.Unlock()
|
cloudsMu.Unlock()
|
||||||
|
|
||||||
api.ResponseJSON(w, users)
|
api.ResponseJSON(w, users)
|
||||||
return
|
return
|
||||||
@@ -308,13 +316,13 @@ func apiAuth(w http.ResponseWriter, r *http.Request) {
|
|||||||
userID, token := auth.UserToken()
|
userID, token := auth.UserToken()
|
||||||
auth = nil
|
auth = nil
|
||||||
|
|
||||||
tokensMu.Lock()
|
cloudsMu.Lock()
|
||||||
if tokens == nil {
|
if tokens == nil {
|
||||||
tokens = map[string]string{userID: token}
|
tokens = map[string]string{userID: token}
|
||||||
} else {
|
} else {
|
||||||
tokens[userID] = token
|
tokens[userID] = token
|
||||||
}
|
}
|
||||||
tokensMu.Unlock()
|
cloudsMu.Unlock()
|
||||||
|
|
||||||
err = app.PatchConfig([]string{"xiaomi", userID}, token)
|
err = app.PatchConfig([]string{"xiaomi", userID}, token)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user