sourcegraph/internal/extsvc/gitlab/user.go
Ryan Slade cb5774db8d
encryption: Simplify EncryptJSON (#44764)
Instead of needing to pass a value in, we can supply the type we want
and return a new value of that type.
2022-11-23 14:23:34 +00:00

48 lines
1.2 KiB
Go

package gitlab
import (
"context"
"encoding/json"
"golang.org/x/oauth2"
"github.com/sourcegraph/sourcegraph/internal/encryption"
"github.com/sourcegraph/sourcegraph/internal/extsvc"
)
// GetExternalAccountData returns the deserialized user and token from the external account data
// JSON blob in a typesafe way.
func GetExternalAccountData(ctx context.Context, data *extsvc.AccountData) (usr *User, tok *oauth2.Token, err error) {
if data.Data != nil {
usr, err = encryption.DecryptJSON[User](ctx, data.Data)
if err != nil {
return nil, nil, err
}
}
if data.AuthData != nil {
tok, err = encryption.DecryptJSON[oauth2.Token](ctx, data.AuthData)
if err != nil {
return nil, nil, err
}
}
return usr, tok, nil
}
// SetExternalAccountData sets the user and token into the external account data blob.
func SetExternalAccountData(data *extsvc.AccountData, user *User, token *oauth2.Token) error {
serializedUser, err := json.Marshal(user)
if err != nil {
return err
}
serializedToken, err := json.Marshal(token)
if err != nil {
return err
}
data.Data = extsvc.NewUnencryptedData(serializedUser)
data.AuthData = extsvc.NewUnencryptedData(serializedToken)
return nil
}