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  }