mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 17:11:49 +00:00
Instead of needing to pass a value in, we can supply the type we want and return a new value of that type.
48 lines
1.2 KiB
Go
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
|
|
}
|