-
Notifications
You must be signed in to change notification settings - Fork 1
/
apiscopeservice.go
161 lines (131 loc) · 4.31 KB
/
apiscopeservice.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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
package elvidapiclient
import (
"encoding/json"
"fmt"
"io/ioutil"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
)
func CreateOrUpdateApiScope(elvidAuthority string, accessTokenAD string, apiScopeInput *ApiScope) (*ApiScope, diag.Diagnostics) {
apiUrl := fmt.Sprintf("%s/api/ApiScope", elvidAuthority)
apiScopeAsJson, _ := json.Marshal(apiScopeInput)
var diags diag.Diagnostics
diags = append(diags, diag.Diagnostic{
Severity: diag.Warning, // Add a warning (debug info) that will only be shown if something errors
Summary: "Calling ApiScope POST in CreateOrUpdateApiScope",
Detail: "API url = " + apiUrl + ", Api scope JSON = " + string(apiScopeAsJson),
})
response, err := PostRequest(apiUrl, accessTokenAD, apiScopeAsJson)
if err != nil {
diags = append(diags, diag.Diagnostic{
Severity: diag.Error,
Summary: "ApiScope POST error in CreateOrUpdateApiScope",
Detail: err.Error(),
})
return nil, diags
}
if response.StatusCode != 200 {
diags = append(diags, diag.Diagnostic{
Severity: diag.Error,
Summary: "ApiScope POST returned http error code in CreateOrUpdateApiScope",
Detail: ElvidErrorResponse(response, apiUrl).Error(),
})
return nil, diags
}
data, _ := ioutil.ReadAll(response.Body)
defer response.Body.Close()
var apiScope ApiScope
err = json.Unmarshal(data, &apiScope)
if err != nil {
diags = append(diags, diag.Diagnostic{
Severity: diag.Error,
Summary: "Could not parse ApiScope POST response as JSON in CreateOrUpdateApiScope",
Detail: err.Error(),
})
return nil, diags
}
return &apiScope, nil
}
func ReadApiScope(elvidAuthority string, accessTokenAD string, name string) (*ApiScope, diag.Diagnostics) {
var diags diag.Diagnostics
if name == "" {
diags = append(diags, diag.Diagnostic{
Severity: diag.Error,
Summary: "No name provided in ReadApiScope",
Detail: "",
})
return nil, diags
}
apiUrl := fmt.Sprintf("%s/api/ApiScope/%s", elvidAuthority, name)
diags = append(diags, diag.Diagnostic{
Severity: diag.Warning, // Add a warning (debug info) that will only be shown if something errors
Summary: "Calling ApiScope GET in ReadApiScope",
Detail: "API url = " + apiUrl,
})
response, err := GetRequest(apiUrl, accessTokenAD)
if err != nil {
diags = append(diags, diag.Diagnostic{
Severity: diag.Error,
Summary: "Error from ApiScope GET in ReadApiScope",
Detail: err.Error(),
})
return nil, diags
}
if response.StatusCode == 404 {
return nil, nil
}
if response.StatusCode != 200 {
diags = append(diags, diag.Diagnostic{
Severity: diag.Error,
Summary: "ApiScope GET returned http error code in ReadApiScope",
Detail: ElvidErrorResponse(response, apiUrl).Error(),
})
return nil, diags
}
data, _ := ioutil.ReadAll(response.Body)
defer response.Body.Close()
var apiScope ApiScope
err = json.Unmarshal(data, &apiScope)
if err != nil {
diags = append(diags, diag.Diagnostic{
Severity: diag.Error,
Summary: "Could not parse ApiScope GET response as JSON in ReadApiScope",
Detail: err.Error(),
})
return nil, diags
}
return &apiScope, nil
}
func DeleteApiScope(elvidAuthority string, accessTokenAD string, apiScopeName string) diag.Diagnostics {
apiUrl := fmt.Sprintf("%s/api/ApiScope/%s", elvidAuthority, apiScopeName)
var diags diag.Diagnostics
diags = append(diags, diag.Diagnostic{
Severity: diag.Warning, // Add a warning (debug info) that will only be shown if something errors
Summary: "Calling ApiScope DELETE in DeleteApiScope",
Detail: "API url = " + apiUrl,
})
response, err := DeleteRequest(apiUrl, accessTokenAD)
if err != nil {
diags = append(diags, diag.Diagnostic{
Severity: diag.Error,
Summary: "Error from ApiScope DELETE in DeleteApiScope",
Detail: err.Error(),
})
return diags
}
if response.StatusCode != 200 {
diags = append(diags, diag.Diagnostic{
Severity: diag.Error,
Summary: "ApiScope DELETE returned http error code in DeleteApiScope",
Detail: ElvidErrorResponse(response, apiUrl).Error(),
})
return diags
}
return nil
}
type ApiScope struct {
Name string `json:"Name"`
Description string `json:"Description"`
UserClaims []string `json:"UserClaims"`
AllowMachineClients bool `json:"AllowMachineClients"`
AllowUserClients bool `json:"AllowUserClients"`
}