-
Notifications
You must be signed in to change notification settings - Fork 63
/
Copy pathapi.go
242 lines (230 loc) · 10.3 KB
/
api.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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
// THIS FILE IS GENERATED BY api-generator, DO NOT EDIT DIRECTLY!
// 审计日志查询
package query_log
import (
"encoding/json"
credentials "github.com/qiniu/go-sdk/v7/storagev2/credentials"
errors "github.com/qiniu/go-sdk/v7/storagev2/errors"
)
// 调用 API 所用的请求
type Request struct {
StartTime string // 检索日志的开始时间,日期格式按照 ISO8601 标准,并使用 UTC 时间
EndTime string // 检索日志的结束时间,日期格式按照 ISO8601 标准,并使用 UTC 时间
ServiceName string // 服务名称,参考 https://developer.qiniu.com/af/12434/audit-log-events
EventNames []string // 事件名称集合,参考 https://developer.qiniu.com/af/12434/audit-log-events
PrincipalId string // 请求者的 ID,参考 https://developer.qiniu.com/af/manual/12433/audit-log-object
AccessKeyId string // 请求身份所属的 AccessKey ID
Limit int64 // 允许返回的最大结果数目,取值范围:1~50,不传值默认为:20
NextMark string // 用于请求下一页检索的结果
Credentials credentials.CredentialsProvider // 鉴权参数,用于生成鉴权凭证,如果为空,则使用 HTTPClientOptions 中的 CredentialsProvider
}
// 获取 API 所用的响应
type Response struct {
NextMark string // 用于请求下一页检索的结果
AuditLogInfos LogInfos // 日志集合
}
// 请求者的身份信息
type UserIdentity struct {
AccountId string // 当前请求所属的七牛云账号 ID
PrincipalId string // 当前请求者的 ID,需结合 principal_type 来确认请求者身份
PrincipalType string // 请求者身份类型,仅支持 UNKNOWN 表示未知,ROOT_USER 表示七牛云账户 ID,IAM_USER 表示 IAM 子账户 ID,QINIU_ACCOUNT 表示当七牛云账号跨账号操作时,记录七牛云账号 ID
AccessKeyId string // 当前请求身份所属的 AccessKey ID
}
// 返回的请求者的身份信息
type UserIdentify = UserIdentity
type jsonUserIdentity struct {
AccountId string `json:"account_id"` // 当前请求所属的七牛云账号 ID
PrincipalId string `json:"principal_id"` // 当前请求者的 ID,需结合 principal_type 来确认请求者身份
PrincipalType string `json:"principal_type"` // 请求者身份类型,仅支持 UNKNOWN 表示未知,ROOT_USER 表示七牛云账户 ID,IAM_USER 表示 IAM 子账户 ID,QINIU_ACCOUNT 表示当七牛云账号跨账号操作时,记录七牛云账号 ID
AccessKeyId string `json:"access_key_id"` // 当前请求身份所属的 AccessKey ID
}
func (j *UserIdentity) MarshalJSON() ([]byte, error) {
if err := j.validate(); err != nil {
return nil, err
}
return json.Marshal(&jsonUserIdentity{AccountId: j.AccountId, PrincipalId: j.PrincipalId, PrincipalType: j.PrincipalType, AccessKeyId: j.AccessKeyId})
}
func (j *UserIdentity) UnmarshalJSON(data []byte) error {
var nj jsonUserIdentity
if err := json.Unmarshal(data, &nj); err != nil {
return err
}
j.AccountId = nj.AccountId
j.PrincipalId = nj.PrincipalId
j.PrincipalType = nj.PrincipalType
j.AccessKeyId = nj.AccessKeyId
return nil
}
func (j *UserIdentity) validate() error {
if j.AccountId == "" {
return errors.MissingRequiredFieldError{Name: "AccountId"}
}
if j.PrincipalId == "" {
return errors.MissingRequiredFieldError{Name: "PrincipalId"}
}
if j.PrincipalType == "" {
return errors.MissingRequiredFieldError{Name: "PrincipalType"}
}
if j.AccessKeyId == "" {
return errors.MissingRequiredFieldError{Name: "AccessKeyId"}
}
return nil
}
// 返回的操作的资源名称列表
type ResourceNames = []string
// 返回的审计日志
type LogInfo struct {
EventId string // 日志 ID
EventType string // 事件类型,仅支持 UNKNOWN 表示未知,CONSOLE 表示控制台事件,API 表示 API 事件
EventTime string // 事件发生时间(UTC 格式)
UserIdentity UserIdentify // 请求者的身份信息
EventRw string // 读写类型,仅支持 UNKNOWN 表示未知,READ 表示读,WRITE 表示写
ServiceName string // 服务名称
EventName string // 事件名称
SourceIp string // 源 IP 地址
UserAgent string // 客户端代理
ResourceNames ResourceNames // 操作的资源名称列表
RequestId string // 请求 ID
RequestUrl string // 请求 URL
RequestParams string // 请求的输入参数
ResponseData string // 请求的返回数据
ResponseCode int64 // 请求的返回码
ResponseMessage string // 请求的返回信息
AdditionalEventData string // 额外备注信息
}
type jsonLogInfo struct {
EventId string `json:"event_id"` // 日志 ID
EventType string `json:"event_type"` // 事件类型,仅支持 UNKNOWN 表示未知,CONSOLE 表示控制台事件,API 表示 API 事件
EventTime string `json:"event_time"` // 事件发生时间(UTC 格式)
UserIdentity UserIdentify `json:"user_identity"` // 请求者的身份信息
EventRw string `json:"event_rw"` // 读写类型,仅支持 UNKNOWN 表示未知,READ 表示读,WRITE 表示写
ServiceName string `json:"service_name"` // 服务名称
EventName string `json:"event_name"` // 事件名称
SourceIp string `json:"source_ip"` // 源 IP 地址
UserAgent string `json:"user_agent"` // 客户端代理
ResourceNames ResourceNames `json:"resource_names"` // 操作的资源名称列表
RequestId string `json:"request_id"` // 请求 ID
RequestUrl string `json:"request_url"` // 请求 URL
RequestParams string `json:"request_params"` // 请求的输入参数
ResponseData string `json:"response_data"` // 请求的返回数据
ResponseCode int64 `json:"response_code"` // 请求的返回码
ResponseMessage string `json:"response_message"` // 请求的返回信息
AdditionalEventData string `json:"additional_event_data"` // 额外备注信息
}
func (j *LogInfo) MarshalJSON() ([]byte, error) {
if err := j.validate(); err != nil {
return nil, err
}
return json.Marshal(&jsonLogInfo{EventId: j.EventId, EventType: j.EventType, EventTime: j.EventTime, UserIdentity: j.UserIdentity, EventRw: j.EventRw, ServiceName: j.ServiceName, EventName: j.EventName, SourceIp: j.SourceIp, UserAgent: j.UserAgent, ResourceNames: j.ResourceNames, RequestId: j.RequestId, RequestUrl: j.RequestUrl, RequestParams: j.RequestParams, ResponseData: j.ResponseData, ResponseCode: j.ResponseCode, ResponseMessage: j.ResponseMessage, AdditionalEventData: j.AdditionalEventData})
}
func (j *LogInfo) UnmarshalJSON(data []byte) error {
var nj jsonLogInfo
if err := json.Unmarshal(data, &nj); err != nil {
return err
}
j.EventId = nj.EventId
j.EventType = nj.EventType
j.EventTime = nj.EventTime
j.UserIdentity = nj.UserIdentity
j.EventRw = nj.EventRw
j.ServiceName = nj.ServiceName
j.EventName = nj.EventName
j.SourceIp = nj.SourceIp
j.UserAgent = nj.UserAgent
j.ResourceNames = nj.ResourceNames
j.RequestId = nj.RequestId
j.RequestUrl = nj.RequestUrl
j.RequestParams = nj.RequestParams
j.ResponseData = nj.ResponseData
j.ResponseCode = nj.ResponseCode
j.ResponseMessage = nj.ResponseMessage
j.AdditionalEventData = nj.AdditionalEventData
return nil
}
func (j *LogInfo) validate() error {
if j.EventId == "" {
return errors.MissingRequiredFieldError{Name: "EventId"}
}
if j.EventType == "" {
return errors.MissingRequiredFieldError{Name: "EventType"}
}
if j.EventTime == "" {
return errors.MissingRequiredFieldError{Name: "EventTime"}
}
if err := j.UserIdentity.validate(); err != nil {
return err
}
if j.EventRw == "" {
return errors.MissingRequiredFieldError{Name: "EventRw"}
}
if j.ServiceName == "" {
return errors.MissingRequiredFieldError{Name: "ServiceName"}
}
if j.EventName == "" {
return errors.MissingRequiredFieldError{Name: "EventName"}
}
if j.SourceIp == "" {
return errors.MissingRequiredFieldError{Name: "SourceIp"}
}
if j.UserAgent == "" {
return errors.MissingRequiredFieldError{Name: "UserAgent"}
}
if len(j.ResourceNames) == 0 {
return errors.MissingRequiredFieldError{Name: "ResourceNames"}
}
if j.RequestId == "" {
return errors.MissingRequiredFieldError{Name: "RequestId"}
}
if j.RequestUrl == "" {
return errors.MissingRequiredFieldError{Name: "RequestUrl"}
}
if j.RequestParams == "" {
return errors.MissingRequiredFieldError{Name: "RequestParams"}
}
if j.ResponseData == "" {
return errors.MissingRequiredFieldError{Name: "ResponseData"}
}
if j.ResponseCode == 0 {
return errors.MissingRequiredFieldError{Name: "ResponseCode"}
}
if j.ResponseMessage == "" {
return errors.MissingRequiredFieldError{Name: "ResponseMessage"}
}
if j.AdditionalEventData == "" {
return errors.MissingRequiredFieldError{Name: "AdditionalEventData"}
}
return nil
}
// 返回的审计日志列表
type LogInfos = []LogInfo
type QueryLogResp = Response
type jsonResponse struct {
NextMark string `json:"next_mark,omitempty"` // 用于请求下一页检索的结果
AuditLogInfos LogInfos `json:"audit_log_infos"` // 日志集合
}
func (j *Response) MarshalJSON() ([]byte, error) {
if err := j.validate(); err != nil {
return nil, err
}
return json.Marshal(&jsonResponse{NextMark: j.NextMark, AuditLogInfos: j.AuditLogInfos})
}
func (j *Response) UnmarshalJSON(data []byte) error {
var nj jsonResponse
if err := json.Unmarshal(data, &nj); err != nil {
return err
}
j.NextMark = nj.NextMark
j.AuditLogInfos = nj.AuditLogInfos
return nil
}
func (j *Response) validate() error {
if len(j.AuditLogInfos) == 0 {
return errors.MissingRequiredFieldError{Name: "AuditLogInfos"}
}
for _, value := range j.AuditLogInfos {
if err := value.validate(); err != nil {
return err
}
}
return nil
}