49 lines
1.5 KiB
Go
49 lines
1.5 KiB
Go
package client
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"github.com/spf13/viper"
|
|
"github.com/supabase/cli/internal/status"
|
|
"github.com/supabase/cli/internal/utils"
|
|
"github.com/supabase/cli/internal/utils/tenant"
|
|
"github.com/supabase/cli/pkg/fetcher"
|
|
"github.com/supabase/cli/pkg/storage"
|
|
)
|
|
|
|
func NewStorageAPI(ctx context.Context, projectRef string) (storage.StorageAPI, error) {
|
|
client := storage.StorageAPI{}
|
|
if len(projectRef) == 0 {
|
|
client.Fetcher = newLocalClient()
|
|
} else if viper.IsSet("AUTH_SERVICE_ROLE_KEY") {
|
|
// Special case for calling storage API without personal access token
|
|
client.Fetcher = newRemoteClient(projectRef, utils.Config.Auth.ServiceRoleKey)
|
|
} else if apiKey, err := tenant.GetApiKeys(ctx, projectRef); err == nil {
|
|
client.Fetcher = newRemoteClient(projectRef, apiKey.ServiceRole)
|
|
} else {
|
|
return client, err
|
|
}
|
|
return client, nil
|
|
}
|
|
|
|
func newLocalClient() *fetcher.Fetcher {
|
|
client := status.NewKongClient()
|
|
return fetcher.NewFetcher(
|
|
utils.Config.Api.ExternalUrl,
|
|
fetcher.WithHTTPClient(client),
|
|
fetcher.WithBearerToken(utils.Config.Auth.ServiceRoleKey),
|
|
fetcher.WithUserAgent("SupabaseCLI/"+utils.Version),
|
|
fetcher.WithExpectedStatus(http.StatusOK),
|
|
)
|
|
}
|
|
|
|
func newRemoteClient(projectRef, token string) *fetcher.Fetcher {
|
|
return fetcher.NewFetcher(
|
|
"https://"+utils.GetSupabaseHost(projectRef),
|
|
fetcher.WithBearerToken(token),
|
|
fetcher.WithUserAgent("SupabaseCLI/"+utils.Version),
|
|
fetcher.WithExpectedStatus(http.StatusOK),
|
|
)
|
|
}
|