@@ -3,12 +3,13 @@ package client
33import (
44 "context"
55 "errors"
6+ "fmt"
67 "os"
78
89 "github.com/cloudflare/cloudflare-go"
9- "github.com/cloudquery/cq-provider- sdk/provider/diag "
10- "github.com/cloudquery/cq-provider- sdk/provider/schema "
11- "github.com/hashicorp/go-hclog "
10+ "github.com/cloudquery/plugin- sdk/schema "
11+ "github.com/cloudquery/plugin- sdk/specs "
12+ "github.com/rs/zerolog "
1213)
1314
1415type AccountZones map [string ]struct {
@@ -19,7 +20,7 @@ type AccountZones map[string]struct {
1920type Clients map [string ]Api
2021
2122type Client struct {
22- logger hclog .Logger
23+ logger zerolog .Logger
2324
2425 accountsZones AccountZones
2526 clients Clients
@@ -31,7 +32,7 @@ type Client struct {
3132
3233const MaxItemsPerPage = 200
3334
34- func New (logger hclog .Logger , clients Clients , clientApi Api , accountsZones AccountZones ) Client {
35+ func New (logger zerolog .Logger , clients Clients , clientApi Api , accountsZones AccountZones ) Client {
3536 return Client {
3637 logger : logger ,
3738 accountsZones : accountsZones ,
@@ -40,23 +41,23 @@ func New(logger hclog.Logger, clients Clients, clientApi Api, accountsZones Acco
4041 }
4142}
4243
43- func (c * Client ) Logger () hclog .Logger {
44- return c .logger
44+ func (c * Client ) Logger () * zerolog .Logger {
45+ return & c .logger
4546}
4647
47- func (c * Client ) withAccountId (accountId string ) * Client {
48+ func (c * Client ) withAccountID (accountId string ) * Client {
4849 return & Client {
49- logger : c .logger .With ("account_id" , obfuscateId ( accountId )),
50+ logger : c .logger .With (). Str ( "account_id" , accountId ). Logger ( ),
5051 accountsZones : c .accountsZones ,
5152 clients : c .clients ,
5253 ClientApi : c .clients [accountId ],
5354 AccountId : accountId ,
5455 }
5556}
5657
57- func (c * Client ) withZoneId (accountId , zoneId string ) * Client {
58+ func (c * Client ) withZoneID (accountId , zoneId string ) * Client {
5859 return & Client {
59- logger : c .logger .With ("account_id" , obfuscateId ( accountId ), "zone_id" , obfuscateId ( zoneId )),
60+ logger : c .logger .With (). Str ( "account_id" , accountId ). Str ( "zone_id" , zoneId ). Logger ( ),
6061 accountsZones : c .accountsZones ,
6162 clients : c .clients ,
6263 ClientApi : c .clients [accountId ],
@@ -65,31 +66,30 @@ func (c *Client) withZoneId(accountId, zoneId string) *Client {
6566 }
6667}
6768
68- func Configure (logger hclog.Logger , config interface {}) (schema.ClientMeta , diag.Diagnostics ) {
69- var diags diag.Diagnostics
70-
71- ctx := context .Background ()
72- providerConfig := config .(* Config )
73-
74- clientApi , err := getCloudflareClient (providerConfig )
69+ func Configure (ctx context.Context , logger zerolog.Logger , s specs.Source ) (schema.ClientMeta , error ) {
70+ cfSpec := & Spec {}
71+ if err := s .UnmarshalSpec (cfSpec ); err != nil {
72+ return nil , fmt .Errorf ("failed to unmarshal cloudflare spec: %w" , err )
73+ }
7574
75+ clientApi , err := getCloudflareClient (cfSpec )
7676 if err != nil {
77- return nil , diags . Add ( classifyError ( err , diag . INTERNAL , diag . WithSeverity ( diag . ERROR ))) // TODO remove diag
77+ return nil , err
7878 }
7979
8080 var accountsZones = make (AccountZones )
8181
8282 // Get available accounts
8383 accounts , _ , err := clientApi .Accounts (ctx , cloudflare.AccountsListParams {})
8484 if err != nil {
85- return nil , diags . Add ( classifyError ( err , diag . INTERNAL , diag . WithSeverity ( diag . ERROR ))) // TODO remove diag
85+ return nil , err
8686 }
8787
8888 for _ , account := range accounts {
8989 // Get available zones for each account
9090 zones , err := clientApi .ListZonesContext (ctx , cloudflare .WithZoneFilters ("" , account .ID , "" ))
9191 if err != nil {
92- // TODO log error and continue
92+ logger . Warn (). Err ( err ). Msg ( "ListZonesContext failed" )
9393 continue
9494 }
9595 var zoneIds []string
@@ -107,14 +107,14 @@ func Configure(logger hclog.Logger, config interface{}) (schema.ClientMeta, diag
107107 }
108108
109109 if len (accountsZones ) == 0 {
110- return nil , diags . Add ( classifyError ( errors .New ("no accounts found" ), diag . INTERNAL , diag . WithSeverity ( diag . ERROR ))) // TODO remove diag
110+ return nil , errors .New ("no accounts found" )
111111 }
112112
113113 clients := make (Clients )
114114 for _ , account := range accountsZones {
115- c , err := getCloudflareClient (providerConfig )
115+ c , err := getCloudflareClient (cfSpec )
116116 if err != nil {
117- return nil , diags . Add ( classifyError ( err , diag . INTERNAL , diag . WithSeverity ( diag . ERROR ))) // TODO remove diag
117+ return nil , err
118118 }
119119 c .AccountID = account .AccountId
120120 clients [account .AccountId ] = c
@@ -124,7 +124,7 @@ func Configure(logger hclog.Logger, config interface{}) (schema.ClientMeta, diag
124124 return & c , nil
125125}
126126
127- func getCloudflareClient (config * Config ) (* cloudflare.API , error ) {
127+ func getCloudflareClient (config * Spec ) (* cloudflare.API , error ) {
128128 // Try to get the API token from the environment
129129 token := config .Token
130130 if token == "" {
@@ -148,10 +148,6 @@ func getCloudflareClient(config *Config) (*cloudflare.API, error) {
148148 return nil , errors .New ("no API token or API key/email provided" )
149149}
150150
151- func obfuscateId (accountId string ) string {
152- return accountId [:4 ] + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
153- }
154-
155151func getApiTokenFromEnv () string {
156152 apiToken := os .Getenv ("CLOUDFLARE_API_TOKEN" )
157153 if apiToken == "" {
0 commit comments