WitNote / internal /profiles /identity.go
AUXteam's picture
Upload folder using huggingface_hub
6a7089a verified
package profiles
import (
"encoding/json"
"os"
"path/filepath"
)
func readChromeProfileIdentity(profileRoot string) (string, string, string, bool) {
chromeProfileName, lsEmail, lsName, lsHas := readLocalStateIdentity(filepath.Join(profileRoot, "Local State"))
prefsEmail, prefsName, prefsHas := readPreferencesIdentity(filepath.Join(profileRoot, "Default", "Preferences"))
email := prefsEmail
if email == "" {
email = lsEmail
}
accountName := prefsName
if accountName == "" {
accountName = lsName
}
hasAccount := prefsHas || lsHas || email != ""
return chromeProfileName, email, accountName, hasAccount
}
func readPreferencesIdentity(path string) (string, string, bool) {
var prefs struct {
AccountInfo []struct {
Email string `json:"email"`
FullName string `json:"full_name"`
GaiaName string `json:"gaia_name"`
GaiaID string `json:"gaia"`
} `json:"account_info"`
}
if !readJSON(path, &prefs) {
return "", "", false
}
for _, account := range prefs.AccountInfo {
email := account.Email
name := account.FullName
if name == "" {
name = account.GaiaName
}
if email != "" || account.GaiaID != "" || name != "" {
return email, name, true
}
}
return "", "", false
}
func readLocalStateIdentity(path string) (string, string, string, bool) {
var state struct {
Profile struct {
InfoCache map[string]struct {
Name string `json:"name"`
UserName string `json:"user_name"`
GaiaName string `json:"gaia_name"`
GaiaID string `json:"gaia_id"`
IsConsentedPrimaryAccount bool `json:"is_consented_primary_account"`
HasConsentedPrimaryAccount bool `json:"has_consented_primary_account"`
} `json:"info_cache"`
} `json:"profile"`
}
if !readJSON(path, &state) || len(state.Profile.InfoCache) == 0 {
return "", "", "", false
}
entry, ok := state.Profile.InfoCache["Default"]
if !ok {
for _, v := range state.Profile.InfoCache {
entry = v
break
}
}
profileName := entry.Name
email := entry.UserName
accountName := entry.GaiaName
hasAccount := email != "" || entry.GaiaID != "" || entry.IsConsentedPrimaryAccount || entry.HasConsentedPrimaryAccount
return profileName, email, accountName, hasAccount
}
func readJSON(path string, out any) bool {
data, err := os.ReadFile(path)
if err != nil {
return false
}
if err := json.Unmarshal(data, out); err != nil {
return false
}
return true
}
func readProfileMeta(profileDir string) ProfileMeta {
var meta ProfileMeta
readJSON(filepath.Join(profileDir, "profile.json"), &meta)
return meta
}
func writeProfileMeta(profileDir string, meta ProfileMeta) error {
data, err := json.MarshalIndent(meta, "", " ")
if err != nil {
return err
}
return os.WriteFile(filepath.Join(profileDir, "profile.json"), data, 0644)
}