mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-23 23:22:57 -06:00
987b910828
* vendor: update gopkg.in/ns1/ns1-go.v2 * provider/ns1: Port the ns1 provider to Terraform core * docs/ns1: Document the ns1 provider * ns1: rename remaining nsone -> ns1 (#10805) * Ns1 provider (#11300) * provider/ns1: Flesh out support for meta structs. Following the structure outlined by @pashap. Using reflection to reduce copy/paste. Putting metas inside single-item lists. This is clunky, but I couldn't figure out how else to have a nested struct. Maybe the Terraform people know a better way? Inside the meta struct, all fields are always written to the state; I can't figure out how to omit fields that aren't used. This is not just verbose, it actually causes issues because you can't have both "up" and "up_feed" set). Also some minor other changes: - Add "terraform" import support to records and zones. - Create helper class StringEnum. * provider/ns1: Make fmt * provider/ns1: Remove stubbed out RecordRead (used for testing metadata change). * provider/ns1: Need to get interface that m contains from Ptr Value with Elem() * provider/ns1: Use empty string to indicate no feed given. * provider/ns1: Remove old record.regions fields. * provider/ns1: Removes redundant testAccCheckRecordState * provider/ns1: Moves account permissions logic to permissions.go * provider/ns1: Adds tests for team resource. * provider/ns1: Move remaining permissions logic to permissions.go * ns1/provider: Adds datasource.config * provider/ns1: Small clean up of datafeed resource tests * provider/ns1: removes testAccCheckZoneState in favor of explicit name check * provider/ns1: More renaming of nsone -> ns1 * provider/ns1: Comment out metadata for the moment. * Ns1 provider (#11347) * Fix the removal of empty containers from a flatmap Removal of empty nested containers from a flatmap would sometimes fail a sanity check when removed in the wrong order. This would only fail sometimes due to map iteration. There was also an off-by-one error in the prefix check which could match the incorrect keys. * provider/ns1: Adds ns1 go client through govendor. * provider/ns1: Removes unused debug line * docs/ns1: Adds docs around apikey/datasource/datafeed/team/user/record. * provider/ns1: Gets go vet green
144 lines
3.3 KiB
Go
144 lines
3.3 KiB
Go
package rest
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"gopkg.in/ns1/ns1-go.v2/rest/model/account"
|
|
)
|
|
|
|
// APIKeysService handles 'account/apikeys' endpoint.
|
|
type APIKeysService service
|
|
|
|
// List returns all api keys in the account.
|
|
//
|
|
// NS1 API docs: https://ns1.com/api/#apikeys-get
|
|
func (s *APIKeysService) List() ([]*account.APIKey, *http.Response, error) {
|
|
req, err := s.client.NewRequest("GET", "account/apikeys", nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
kl := []*account.APIKey{}
|
|
resp, err := s.client.Do(req, &kl)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return kl, resp, nil
|
|
}
|
|
|
|
// Get returns details of an api key, including permissions, for a single API Key.
|
|
// Note: do not use the API Key itself as the keyid in the URL — use the id of the key.
|
|
//
|
|
// NS1 API docs: https://ns1.com/api/#apikeys-id-get
|
|
func (s *APIKeysService) Get(keyID string) (*account.APIKey, *http.Response, error) {
|
|
path := fmt.Sprintf("account/apikeys/%s", keyID)
|
|
|
|
req, err := s.client.NewRequest("GET", path, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var a account.APIKey
|
|
resp, err := s.client.Do(req, &a)
|
|
if err != nil {
|
|
switch err.(type) {
|
|
case *Error:
|
|
if err.(*Error).Message == "unknown api key" {
|
|
return nil, resp, ErrKeyMissing
|
|
}
|
|
default:
|
|
return nil, resp, err
|
|
}
|
|
}
|
|
|
|
return &a, resp, nil
|
|
}
|
|
|
|
// Create takes a *APIKey and creates a new account apikey.
|
|
//
|
|
// NS1 API docs: https://ns1.com/api/#apikeys-put
|
|
func (s *APIKeysService) Create(a *account.APIKey) (*http.Response, error) {
|
|
req, err := s.client.NewRequest("PUT", "account/apikeys", &a)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Update account fields with data from api(ensure consistent)
|
|
resp, err := s.client.Do(req, &a)
|
|
if err != nil {
|
|
switch err.(type) {
|
|
case *Error:
|
|
if err.(*Error).Message == fmt.Sprintf("api key with name \"%s\" exists", a.Name) {
|
|
return resp, ErrKeyExists
|
|
}
|
|
default:
|
|
return resp, err
|
|
}
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// Update changes the name or access rights for an API Key.
|
|
//
|
|
// NS1 API docs: https://ns1.com/api/#apikeys-id-post
|
|
func (s *APIKeysService) Update(a *account.APIKey) (*http.Response, error) {
|
|
path := fmt.Sprintf("account/apikeys/%s", a.ID)
|
|
|
|
req, err := s.client.NewRequest("POST", path, &a)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// Update apikey fields with data from api(ensure consistent)
|
|
resp, err := s.client.Do(req, &a)
|
|
if err != nil {
|
|
switch err.(type) {
|
|
case *Error:
|
|
if err.(*Error).Message == "unknown api key" {
|
|
return resp, ErrKeyMissing
|
|
}
|
|
default:
|
|
return resp, err
|
|
}
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
// Delete deletes an apikey.
|
|
//
|
|
// NS1 API docs: https://ns1.com/api/#apikeys-id-delete
|
|
func (s *APIKeysService) Delete(keyID string) (*http.Response, error) {
|
|
path := fmt.Sprintf("account/apikeys/%s", keyID)
|
|
|
|
req, err := s.client.NewRequest("DELETE", path, nil)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp, err := s.client.Do(req, nil)
|
|
if err != nil {
|
|
switch err.(type) {
|
|
case *Error:
|
|
if err.(*Error).Message == "unknown api key" {
|
|
return resp, ErrKeyMissing
|
|
}
|
|
default:
|
|
return resp, err
|
|
}
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
var (
|
|
// ErrKeyExists bundles PUT create error.
|
|
ErrKeyExists = errors.New("Key already exists.")
|
|
// ErrKeyMissing bundles GET/POST/DELETE error.
|
|
ErrKeyMissing = errors.New("Key does not exist.")
|
|
)
|