github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/lib/user/account.go (about) 1 // Package user - Content managed by Project Forge, see [projectforge.md] for details. 2 package user 3 4 import ( 5 "strings" 6 7 "github.com/kyleu/dbaudit/app/util" 8 ) 9 10 type Account struct { 11 Provider string `json:"provider"` 12 Email string `json:"email"` 13 Picture string `json:"picture"` 14 Token string `json:"-"` 15 } 16 17 func (a *Account) String() string { 18 ret := a.Provider + ":" + a.Email 19 if a.Token != "" { 20 msg := a.Token 21 if a.Picture != "" { 22 msg += "@@" + a.Picture 23 } 24 if enc, err := util.EncryptMessage(nil, msg, nil); err == nil { 25 ret += "|" + enc 26 } else { 27 ret += "|" + msg 28 } 29 } 30 return ret 31 } 32 33 func (a *Account) TitleString() string { 34 return a.Provider + ":" + a.Email 35 } 36 37 func (a *Account) Domain() string { 38 if a.Email == "" || !strings.Contains(a.Email, "@") { 39 return "" 40 } 41 _, r := util.StringSplitLast(a.Email, '@', true) 42 return r 43 } 44 45 func accountFromString(s string) *Account { 46 p, e := util.StringSplit(s, ':', true) 47 var t, pic string 48 if strings.Contains(e, "|") { 49 e, t = util.StringSplit(e, '|', true) 50 if decr, err := util.DecryptMessage(nil, t, nil); err == nil { 51 t = decr 52 if idx := strings.LastIndex(t, "@@"); idx > -1 { 53 pic = t[idx+2:] 54 t = t[:idx] 55 } 56 } 57 } 58 return &Account{Provider: p, Email: e, Picture: pic, Token: t} 59 }