-
Notifications
You must be signed in to change notification settings - Fork 105
Expand file tree
/
Copy pathadmin_setting_scim_token.go
More file actions
130 lines (111 loc) · 3.86 KB
/
admin_setting_scim_token.go
File metadata and controls
130 lines (111 loc) · 3.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright IBM Corp. 2018, 2026
// SPDX-License-Identifier: MPL-2.0
package tfe
import (
"context"
"fmt"
"net/url"
"time"
)
var _ AdminSCIMTokens = (*adminSCIMTokens)(nil)
// AdminSCIMTokens describes all the Admin SCIM token related methods that the Terraform
// Enterprise API supports
//
// TFE API docs: https://developer.hashicorp.com/terraform/enterprise/api-docs/admin/scim-tokens
type AdminSCIMTokens interface {
// List all Admin SCIM tokens.
List(ctx context.Context) (*AdminSCIMTokenList, error)
// Create an Admin SCIM token.
Create(ctx context.Context) (*AdminSCIMToken, error)
// Create an Admin SCIM token with options.
CreateWithOptions(ctx context.Context, options AdminSCIMTokenCreateOptions) (*AdminSCIMToken, error)
// Read an Admin SCIM token by its ID.
Read(ctx context.Context, scimTokenID string) (*AdminSCIMToken, error)
// Delete an Admin SCIM token.
Delete(ctx context.Context, scimTokenID string) error
}
// adminSCIMTokens implements AdminSCIMTokens
type adminSCIMTokens struct {
client *Client
}
// AdminSCIMTokenList represents a list of Admin SCIM tokens
type AdminSCIMTokenList struct {
Items []*AdminSCIMToken
}
// AdminSCIMToken represents a Terraform Enterprise Admin SCIM token.
type AdminSCIMToken struct {
ID string `jsonapi:"primary,authentication-tokens"`
CreatedAt time.Time `jsonapi:"attr,created-at,iso8601"`
LastUsedAt time.Time `jsonapi:"attr,last-used-at,iso8601"`
ExpiredAt time.Time `jsonapi:"attr,expired-at,iso8601"`
Description string `jsonapi:"attr,description"`
Token string `jsonapi:"attr,token,omitempty"`
}
// AdminSCIMTokenCreateOptions represents the options for creating an Admin SCIM token
type AdminSCIMTokenCreateOptions struct {
// Optional: An optional human-readable description of the token's purpose
// (for example, Okta SCIM Integration).
Description *string `jsonapi:"attr,description,omitempty"`
// Optional: Optional ISO-8601 timestamp for token expiration.
// Defaults to 365 days in the future. Must be between 29 and 365 days in the future.
ExpiredAt *time.Time `jsonapi:"attr,expired-at,iso8601,omitempty"`
}
// List all Admin SCIM tokens.
func (a *adminSCIMTokens) List(ctx context.Context) (*AdminSCIMTokenList, error) {
req, err := a.client.NewRequest("GET", "admin/scim-tokens", nil)
if err != nil {
return nil, err
}
scimTokens := &AdminSCIMTokenList{}
err = req.Do(ctx, scimTokens)
if err != nil {
return nil, err
}
return scimTokens, nil
}
// Create an Admin SCIM token.
func (a *adminSCIMTokens) Create(ctx context.Context) (*AdminSCIMToken, error) {
return a.CreateWithOptions(ctx, AdminSCIMTokenCreateOptions{})
}
// Create an Admin SCIM token with options.
func (a *adminSCIMTokens) CreateWithOptions(ctx context.Context, options AdminSCIMTokenCreateOptions) (*AdminSCIMToken, error) {
req, err := a.client.NewRequest("POST", "admin/scim-tokens", &options)
if err != nil {
return nil, err
}
scimToken := &AdminSCIMToken{}
err = req.Do(ctx, scimToken)
if err != nil {
return nil, err
}
return scimToken, nil
}
// Read an Admin SCIM token by its ID.
func (a *adminSCIMTokens) Read(ctx context.Context, scimTokenID string) (*AdminSCIMToken, error) {
if !validStringID(&scimTokenID) {
return nil, ErrInvalidTokenID
}
u := fmt.Sprintf("admin/scim-tokens/%s", url.PathEscape(scimTokenID))
req, err := a.client.NewRequest("GET", u, nil)
if err != nil {
return nil, err
}
scimToken := &AdminSCIMToken{}
err = req.Do(ctx, scimToken)
if err != nil {
return nil, err
}
return scimToken, nil
}
// Delete an Admin SCIM token.
func (a *adminSCIMTokens) Delete(ctx context.Context, scimTokenID string) error {
if !validStringID(&scimTokenID) {
return ErrInvalidTokenID
}
u := fmt.Sprintf(AuthenticationTokensPath, url.PathEscape(scimTokenID))
req, err := a.client.NewRequest("DELETE", u, nil)
if err != nil {
return err
}
return req.Do(ctx, nil)
}