further cleanup
This commit is contained in:
parent
3ce71e12ff
commit
70aaca9876
@ -55,14 +55,11 @@ func TestStorageImplementation(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var s certmagic.Storage
|
var s certmagic.Storage
|
||||||
st, err := cfstore.NewStore(
|
st := cfstore.NewStore(
|
||||||
cfstore.ApiToken(apiToken),
|
cfstore.ApiToken(apiToken),
|
||||||
cfstore.AccountID(accountID),
|
cfstore.AccountID(accountID),
|
||||||
cfstore.Namespace(kvID),
|
cfstore.Namespace(kvID),
|
||||||
)
|
)
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Couldn't initialise cloudflare storage: %s\n", err.Error())
|
|
||||||
}
|
|
||||||
s = &storage{
|
s = &storage{
|
||||||
lock: memory.NewLock(),
|
lock: memory.NewLock(),
|
||||||
store: st,
|
store: st,
|
||||||
@ -195,14 +192,11 @@ func TestE2e(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
testLock := memory.NewLock()
|
testLock := memory.NewLock()
|
||||||
testStore, err := cfstore.NewStore(
|
testStore := cfstore.NewStore(
|
||||||
cfstore.ApiToken(apiToken),
|
cfstore.ApiToken(apiToken),
|
||||||
cfstore.AccountID(accountID),
|
cfstore.AccountID(accountID),
|
||||||
cfstore.Namespace(kvID),
|
cfstore.Namespace(kvID),
|
||||||
)
|
)
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err.Error())
|
|
||||||
}
|
|
||||||
testStorage := NewStorage(testLock, testStore)
|
testStorage := NewStorage(testLock, testStore)
|
||||||
|
|
||||||
conf := cloudflare.NewDefaultConfig()
|
conf := cloudflare.NewDefaultConfig()
|
||||||
|
@ -21,7 +21,9 @@ import (
|
|||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
const apiBaseURL = "https://api.cloudflare.com/client/v4/"
|
const (
|
||||||
|
apiBaseURL = "https://api.cloudflare.com/client/v4/"
|
||||||
|
)
|
||||||
|
|
||||||
type workersKV struct {
|
type workersKV struct {
|
||||||
options.Options
|
options.Options
|
||||||
@ -35,49 +37,6 @@ type workersKV struct {
|
|||||||
httpClient *http.Client
|
httpClient *http.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
// New returns a cloudflare Store implementation.
|
|
||||||
// Options expects CF_API_TOKEN to a cloudflare API token scoped to Workers KV,
|
|
||||||
// CF_ACCOUNT_ID to contain a string with your cloudflare account ID and
|
|
||||||
// KV_NAMESPACE_ID to contain the namespace UUID for your KV storage.
|
|
||||||
func NewStore(opts ...options.Option) (store.Store, error) {
|
|
||||||
// Validate Options
|
|
||||||
options := options.NewOptions(opts...)
|
|
||||||
|
|
||||||
var account, token, namespace string
|
|
||||||
|
|
||||||
apiToken, ok := options.Values().Get("CF_API_TOKEN")
|
|
||||||
if !ok {
|
|
||||||
log.Fatal("Store: No CF_API_TOKEN passed as an option")
|
|
||||||
}
|
|
||||||
if token, ok = apiToken.(string); !ok {
|
|
||||||
log.Fatal("Store: Option CF_API_TOKEN contains a non-string")
|
|
||||||
}
|
|
||||||
|
|
||||||
accountID, ok := options.Values().Get("CF_ACCOUNT_ID")
|
|
||||||
if !ok {
|
|
||||||
log.Fatal("Store: No CF_ACCOUNT_ID passed as an option")
|
|
||||||
}
|
|
||||||
if account, ok = accountID.(string); !ok {
|
|
||||||
log.Fatal("Store: Option CF_ACCOUNT_ID contains a non-string")
|
|
||||||
}
|
|
||||||
|
|
||||||
uuid, ok := options.Values().Get("KV_NAMESPACE_ID")
|
|
||||||
if !ok {
|
|
||||||
log.Fatal("Store: No KV_NAMESPACE_ID passed as an option")
|
|
||||||
}
|
|
||||||
if namespace, ok = uuid.(string); !ok {
|
|
||||||
log.Fatal("Store: Option KV_NAMESPACE_ID contains a non-string")
|
|
||||||
}
|
|
||||||
|
|
||||||
return &workersKV{
|
|
||||||
account: account,
|
|
||||||
namespace: namespace,
|
|
||||||
token: token,
|
|
||||||
Options: options,
|
|
||||||
httpClient: &http.Client{},
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// In the cloudflare workers KV implemention, List() doesn't guarantee
|
// In the cloudflare workers KV implemention, List() doesn't guarantee
|
||||||
// anything as the workers API is eventually consistent.
|
// anything as the workers API is eventually consistent.
|
||||||
func (w *workersKV) List() ([]*store.Record, error) {
|
func (w *workersKV) List() ([]*store.Record, error) {
|
||||||
@ -296,3 +255,46 @@ type apiMessage struct {
|
|||||||
Code int `json:"code"`
|
Code int `json:"code"`
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// New returns a cloudflare Store implementation.
|
||||||
|
// Options expects CF_API_TOKEN to a cloudflare API token scoped to Workers KV,
|
||||||
|
// CF_ACCOUNT_ID to contain a string with your cloudflare account ID and
|
||||||
|
// KV_NAMESPACE_ID to contain the namespace UUID for your KV storage.
|
||||||
|
func NewStore(opts ...options.Option) store.Store {
|
||||||
|
// Validate Options
|
||||||
|
options := options.NewOptions(opts...)
|
||||||
|
|
||||||
|
var account, token, namespace string
|
||||||
|
|
||||||
|
apiToken, ok := options.Values().Get("CF_API_TOKEN")
|
||||||
|
if !ok {
|
||||||
|
log.Fatal("Store: No CF_API_TOKEN passed as an option")
|
||||||
|
}
|
||||||
|
if token, ok = apiToken.(string); !ok {
|
||||||
|
log.Fatal("Store: Option CF_API_TOKEN contains a non-string")
|
||||||
|
}
|
||||||
|
|
||||||
|
accountID, ok := options.Values().Get("CF_ACCOUNT_ID")
|
||||||
|
if !ok {
|
||||||
|
log.Fatal("Store: No CF_ACCOUNT_ID passed as an option")
|
||||||
|
}
|
||||||
|
if account, ok = accountID.(string); !ok {
|
||||||
|
log.Fatal("Store: Option CF_ACCOUNT_ID contains a non-string")
|
||||||
|
}
|
||||||
|
|
||||||
|
uuid, ok := options.Values().Get("KV_NAMESPACE_ID")
|
||||||
|
if !ok {
|
||||||
|
log.Fatal("Store: No KV_NAMESPACE_ID passed as an option")
|
||||||
|
}
|
||||||
|
if namespace, ok = uuid.(string); !ok {
|
||||||
|
log.Fatal("Store: Option KV_NAMESPACE_ID contains a non-string")
|
||||||
|
}
|
||||||
|
|
||||||
|
return &workersKV{
|
||||||
|
account: account,
|
||||||
|
namespace: namespace,
|
||||||
|
token: token,
|
||||||
|
Options: options,
|
||||||
|
httpClient: &http.Client{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -20,16 +20,12 @@ func TestCloudflare(t *testing.T) {
|
|||||||
randomK := strconv.Itoa(rand.Int())
|
randomK := strconv.Itoa(rand.Int())
|
||||||
randomV := strconv.Itoa(rand.Int())
|
randomV := strconv.Itoa(rand.Int())
|
||||||
|
|
||||||
wkv, err := NewStore(
|
wkv := NewStore(
|
||||||
ApiToken(apiToken),
|
ApiToken(apiToken),
|
||||||
AccountID(accountID),
|
AccountID(accountID),
|
||||||
Namespace(kvID),
|
Namespace(kvID),
|
||||||
)
|
)
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
t.Fatal(err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
records, err := wkv.List()
|
records, err := wkv.List()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("List: %s\n", err.Error())
|
t.Fatalf("List: %s\n", err.Error())
|
||||||
|
Loading…
Reference in New Issue
Block a user