This repository was archived by the owner on Jan 30, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtoken_service.go
132 lines (123 loc) · 2.8 KB
/
token_service.go
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
131
132
package databricks
import (
"bytes"
"context"
"encoding/json"
"fmt"
"net/http"
)
// TokenService is a service for interacting with the DBFS.
type TokenService struct {
client Client
}
// Create and returns a token for a user. This call returns
// the error QUOTA_EXCEEDED if the user exceeds their token
// quota.
//
// This API is available to all users.
func (s *TokenService) Create(
ctx context.Context,
lifetimeSec uint,
) (string, *PublicTokenInfo, error) {
raw, err := json.Marshal(struct {
LifetimeSeconds uint
Comment string
}{
lifetimeSec,
"",
})
if err != nil {
return "", nil, err
}
req, err := http.NewRequest(
http.MethodPost,
s.client.url+"2.0/token/create",
bytes.NewBuffer(raw),
)
if err != nil {
return "", nil, err
}
req = req.WithContext(ctx)
res, err := s.client.client.Do(req)
if err != nil {
return "", nil, err
}
if res.StatusCode >= 300 || res.StatusCode <= 199 {
return "", nil, fmt.Errorf(
"Failed to return a 2XX response: %d", res.StatusCode)
}
defer res.Body.Close()
decoder := json.NewDecoder(res.Body)
createRes := struct {
TokenValue string
TokenInfo *PublicTokenInfo
}{}
err = decoder.Decode(&createRes)
return createRes.TokenValue, createRes.TokenInfo, nil
}
// List all the valid tokens for a user-workspace pair.
//
// This API is available to all users.
func (s *TokenService) List(
ctx context.Context,
) ([]PublicTokenInfo, error) {
req, err := http.NewRequest(
http.MethodGet,
s.client.url+"2.0/token/list",
nil,
)
if err != nil {
return []PublicTokenInfo{}, err
}
req = req.WithContext(ctx)
res, err := s.client.client.Do(req)
if err != nil {
return []PublicTokenInfo{}, err
}
if res.StatusCode >= 300 || res.StatusCode <= 199 {
return []PublicTokenInfo{}, fmt.Errorf(
"Failed to return a 2XX response: %d", res.StatusCode)
}
defer res.Body.Close()
decoder := json.NewDecoder(res.Body)
listRes := struct {
TokenInfos []PublicTokenInfo `json:"token_infos"`
}{[]PublicTokenInfo{}}
err = decoder.Decode(&listRes)
return listRes.TokenInfos, err
}
// Revoke revokes an access token. This call returns the error
// RESOURCE_DOES_NOT_EXIST if a token with the given ID is not valid.
//
// This API is available to all users.
func (s *TokenService) Revoke(
ctx context.Context,
tokens []PublicTokenInfo,
) error {
raw, err := json.Marshal(struct {
TokenInfos []PublicTokenInfo
}{
tokens,
})
if err != nil {
return err
}
req, err := http.NewRequest(
http.MethodPost,
s.client.url+"2.0/token/delete",
bytes.NewBuffer(raw),
)
if err != nil {
return err
}
req = req.WithContext(ctx)
res, err := s.client.client.Do(req)
if err != nil {
return err
}
if res.StatusCode >= 300 || res.StatusCode <= 199 {
return fmt.Errorf(
"Failed to return a 2XX response: %d", res.StatusCode)
}
return nil
}