github.com/anuvu/nomad@v0.8.7-atom1/api/acl.go (about)

     1  package api
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  )
     7  
     8  // ACLPolicies is used to query the ACL Policy endpoints.
     9  type ACLPolicies struct {
    10  	client *Client
    11  }
    12  
    13  // ACLPolicies returns a new handle on the ACL policies.
    14  func (c *Client) ACLPolicies() *ACLPolicies {
    15  	return &ACLPolicies{client: c}
    16  }
    17  
    18  // List is used to dump all of the policies.
    19  func (a *ACLPolicies) List(q *QueryOptions) ([]*ACLPolicyListStub, *QueryMeta, error) {
    20  	var resp []*ACLPolicyListStub
    21  	qm, err := a.client.query("/v1/acl/policies", &resp, q)
    22  	if err != nil {
    23  		return nil, nil, err
    24  	}
    25  	return resp, qm, nil
    26  }
    27  
    28  // Upsert is used to create or update a policy
    29  func (a *ACLPolicies) Upsert(policy *ACLPolicy, q *WriteOptions) (*WriteMeta, error) {
    30  	if policy == nil || policy.Name == "" {
    31  		return nil, fmt.Errorf("missing policy name")
    32  	}
    33  	wm, err := a.client.write("/v1/acl/policy/"+policy.Name, policy, nil, q)
    34  	if err != nil {
    35  		return nil, err
    36  	}
    37  	return wm, nil
    38  }
    39  
    40  // Delete is used to delete a policy
    41  func (a *ACLPolicies) Delete(policyName string, q *WriteOptions) (*WriteMeta, error) {
    42  	if policyName == "" {
    43  		return nil, fmt.Errorf("missing policy name")
    44  	}
    45  	wm, err := a.client.delete("/v1/acl/policy/"+policyName, nil, q)
    46  	if err != nil {
    47  		return nil, err
    48  	}
    49  	return wm, nil
    50  }
    51  
    52  // Info is used to query a specific policy
    53  func (a *ACLPolicies) Info(policyName string, q *QueryOptions) (*ACLPolicy, *QueryMeta, error) {
    54  	if policyName == "" {
    55  		return nil, nil, fmt.Errorf("missing policy name")
    56  	}
    57  	var resp ACLPolicy
    58  	wm, err := a.client.query("/v1/acl/policy/"+policyName, &resp, q)
    59  	if err != nil {
    60  		return nil, nil, err
    61  	}
    62  	return &resp, wm, nil
    63  }
    64  
    65  // ACLTokens is used to query the ACL token endpoints.
    66  type ACLTokens struct {
    67  	client *Client
    68  }
    69  
    70  // ACLTokens returns a new handle on the ACL tokens.
    71  func (c *Client) ACLTokens() *ACLTokens {
    72  	return &ACLTokens{client: c}
    73  }
    74  
    75  // Bootstrap is used to get the initial bootstrap token
    76  func (a *ACLTokens) Bootstrap(q *WriteOptions) (*ACLToken, *WriteMeta, error) {
    77  	var resp ACLToken
    78  	wm, err := a.client.write("/v1/acl/bootstrap", nil, &resp, q)
    79  	if err != nil {
    80  		return nil, nil, err
    81  	}
    82  	return &resp, wm, nil
    83  }
    84  
    85  // List is used to dump all of the tokens.
    86  func (a *ACLTokens) List(q *QueryOptions) ([]*ACLTokenListStub, *QueryMeta, error) {
    87  	var resp []*ACLTokenListStub
    88  	qm, err := a.client.query("/v1/acl/tokens", &resp, q)
    89  	if err != nil {
    90  		return nil, nil, err
    91  	}
    92  	return resp, qm, nil
    93  }
    94  
    95  // Create is used to create a token
    96  func (a *ACLTokens) Create(token *ACLToken, q *WriteOptions) (*ACLToken, *WriteMeta, error) {
    97  	if token.AccessorID != "" {
    98  		return nil, nil, fmt.Errorf("cannot specify Accessor ID")
    99  	}
   100  	var resp ACLToken
   101  	wm, err := a.client.write("/v1/acl/token", token, &resp, q)
   102  	if err != nil {
   103  		return nil, nil, err
   104  	}
   105  	return &resp, wm, nil
   106  }
   107  
   108  // Update is used to update an existing token
   109  func (a *ACLTokens) Update(token *ACLToken, q *WriteOptions) (*ACLToken, *WriteMeta, error) {
   110  	if token.AccessorID == "" {
   111  		return nil, nil, fmt.Errorf("missing accessor ID")
   112  	}
   113  	var resp ACLToken
   114  	wm, err := a.client.write("/v1/acl/token/"+token.AccessorID,
   115  		token, &resp, q)
   116  	if err != nil {
   117  		return nil, nil, err
   118  	}
   119  	return &resp, wm, nil
   120  }
   121  
   122  // Delete is used to delete a token
   123  func (a *ACLTokens) Delete(accessorID string, q *WriteOptions) (*WriteMeta, error) {
   124  	if accessorID == "" {
   125  		return nil, fmt.Errorf("missing accessor ID")
   126  	}
   127  	wm, err := a.client.delete("/v1/acl/token/"+accessorID, nil, q)
   128  	if err != nil {
   129  		return nil, err
   130  	}
   131  	return wm, nil
   132  }
   133  
   134  // Info is used to query a token
   135  func (a *ACLTokens) Info(accessorID string, q *QueryOptions) (*ACLToken, *QueryMeta, error) {
   136  	if accessorID == "" {
   137  		return nil, nil, fmt.Errorf("missing accessor ID")
   138  	}
   139  	var resp ACLToken
   140  	wm, err := a.client.query("/v1/acl/token/"+accessorID, &resp, q)
   141  	if err != nil {
   142  		return nil, nil, err
   143  	}
   144  	return &resp, wm, nil
   145  }
   146  
   147  // Self is used to query our own token
   148  func (a *ACLTokens) Self(q *QueryOptions) (*ACLToken, *QueryMeta, error) {
   149  	var resp ACLToken
   150  	wm, err := a.client.query("/v1/acl/token/self", &resp, q)
   151  	if err != nil {
   152  		return nil, nil, err
   153  	}
   154  	return &resp, wm, nil
   155  }
   156  
   157  // ACLPolicyListStub is used to for listing ACL policies
   158  type ACLPolicyListStub struct {
   159  	Name        string
   160  	Description string
   161  	CreateIndex uint64
   162  	ModifyIndex uint64
   163  }
   164  
   165  // ACLPolicy is used to represent an ACL policy
   166  type ACLPolicy struct {
   167  	Name        string
   168  	Description string
   169  	Rules       string
   170  	CreateIndex uint64
   171  	ModifyIndex uint64
   172  }
   173  
   174  // ACLToken represents a client token which is used to Authenticate
   175  type ACLToken struct {
   176  	AccessorID  string
   177  	SecretID    string
   178  	Name        string
   179  	Type        string
   180  	Policies    []string
   181  	Global      bool
   182  	CreateTime  time.Time
   183  	CreateIndex uint64
   184  	ModifyIndex uint64
   185  }
   186  
   187  type ACLTokenListStub struct {
   188  	AccessorID  string
   189  	Name        string
   190  	Type        string
   191  	Policies    []string
   192  	Global      bool
   193  	CreateTime  time.Time
   194  	CreateIndex uint64
   195  	ModifyIndex uint64
   196  }