Files
speedrun/cloud/google.go
Dawid Pogorzelski 91c6dbb2b7 Os login (#50)
Add OS Login support + change key storage format
2021-07-04 18:37:28 +02:00

56 lines
1.1 KiB
Go

package cloud
import (
"context"
"encoding/json"
"fmt"
"golang.org/x/oauth2/google"
"google.golang.org/api/compute/v1"
"google.golang.org/api/oslogin/v1"
)
type GCPClient struct {
gce *compute.Service
oslogin *oslogin.Service
client_email string
Project string
}
func NewGCPClient(project string) (*GCPClient, error) {
var err error
ctx := context.Background()
credentials, err := google.FindDefaultCredentials(ctx, compute.ComputeScope)
if err != nil {
err = fmt.Errorf("couldn't fetch default client credentials: %v", err)
return nil, err
}
var jsonCreds map[string]interface{}
err = json.Unmarshal(credentials.JSON, &jsonCreds)
if err != nil {
err = fmt.Errorf("couldn't decode default client credentials json: %v", err)
return nil, err
}
gce, err := compute.NewService(ctx)
if err != nil {
err = fmt.Errorf("couldn't initialize GCP client: %v", err)
return nil, err
}
osc, err := oslogin.NewService(ctx)
if err != nil {
return nil, err
}
c := &GCPClient{
gce: gce,
oslogin: osc,
client_email: jsonCreds["client_email"].(string),
Project: project,
}
return c, nil
}