Files
rainyun_api_go_sdk/apis/ros/bucket.go
T
XingfenD 51b7e2f319 feat: migrate all remaining modules from rainyun-go-sdk
- domain(24), product(8), rbm(10), rca(21), rgs(38), ros(19),
  ssl(5), user(10), workorder(11), public remaining 5
- split nested response structs into reusable named types
- rgs reuses rcs request/response types
- fix source bugs: malformed paths, resp vs &resp, missing bodies
- register all 11 services in sdk.New
2026-08-05 23:09:53 +08:00

197 lines
7.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package ros
import (
"fmt"
"github.com/XingfenD/rainyun_api_go_sdk/apis/common"
"github.com/XingfenD/rainyun_api_go_sdk/constant"
)
// 创建对象存储桶请求
type CreateRosBucketRequest struct {
BucketName string `json:"bucket_name"` // 存储桶名称
InstanceID int `json:"instance_id"` // 实例ID
}
// 创建对象存储桶响应
type CreateRosBucketResponse struct {
Code int `json:"code"`
Data RosBucket `json:"data"`
}
// 获取对象存储桶列表请求
type GetRosBucketListRequest struct {
Options common.StandQueryParameters `json:"options"`
}
// 获取对象存储桶列表响应
type GetRosBucketListResponse struct {
Code int `json:"code"`
Data RosBucketList `json:"data"`
}
// 对象存储桶列表
type RosBucketList struct {
TotalRecords int `json:"TotalRecords"`
Records []RosBucket `json:"Records"`
}
// 获取对象存储桶详情响应
type GetRosBucketDetailResponse struct {
Code int `json:"code"`
Data RosBucketDetail `json:"data"`
}
// 对象存储桶详情
type RosBucketDetail struct {
Data RosBucket `json:"Data"`
}
// 修改存储桶Proxy设置请求
// 一个请求只能设置一项设置,要设置的设置项需要放在 Setting 中,只需要写需要修改的设置项,其他不填
type ModifyRosBucketProxySettingsRequest struct {
DomainList []string `json:"domain_list,omitempty"` // 域名列表
GzipSettings RosGzipSettings `json:"gzip_settings,omitempty"`
IPRestrictSettings RosIPRestrictSettings `json:"ip_restrict_settings,omitempty"`
RefererRestrictSettings RosRefererRestrictSettings `json:"referer_restrict_settings,omitempty"`
Setting string `json:"setting"` // 必选项,要设置的选项(domain/ssl/waf/gzip/ip_restrict/referer_restrict)
SslSettings RosSslSettings `json:"ssl_settings,omitempty"`
WafSettings RosWafSettings `json:"waf_settings,omitempty"`
}
// Gzip设置
type RosGzipSettings struct {
CompressLevel int `json:"compress_level,omitempty"` // 压缩等级(1-5,默认为2)
FileTypes []string `json:"file_types,omitempty"` // 文件MIME类型,默认["*"]
IsEnable bool `json:"is_enable,omitempty"` // 是否启用GZIP压缩,默认启用
}
// IP访问限制设置
type RosIPRestrictSettings struct {
Blacklist []string `json:"blacklist,omitempty"` // 黑名单IP或CIDR范围列表,和白名单列表只能二选一不能共存
IsEnable bool `json:"is_enable,omitempty"` // 是否启用IP访问限制
Whitelist []string `json:"whitelist,omitempty"` // 白名单IP或CIDR范围列表,和黑名单列表只能二选一不能共存
}
// Referer防盗链设置
type RosRefererRestrictSettings struct {
Blacklist []string `json:"blacklist,omitempty"` // 黑名单域名列表,和白名单列表只能二选一不能共存
BypassMissing bool `json:"bypass_missing,omitempty"` // 是否允许Referer请求头不存在或者格式有误
IsEnable bool `json:"is_enable,omitempty"` // 是否启用Referer防盗链
Whitelist []string `json:"whitelist,omitempty"` // 白名单域名列表,和黑名单列表只能二选一不能共存
}
// SSL设置,SSL证书会自动匹配
type RosSslSettings struct {
IsEnable bool `json:"is_enable,omitempty"` // 是否启用SSL
IsForce bool `json:"is_force,omitempty"` // 是否强制使用SSL
}
// WAF防火墙设置
type RosWafSettings struct {
BlockTime int `json:"block_time,omitempty"` // 未通过JS验证时的封禁时间,秒
GlobalJsCheck bool `json:"global_js_check,omitempty"` // 是否启用全局JS检查,只有超过阈值才会生效
GlobalQPS int `json:"global_qps,omitempty"` // 全局访问速率限制,超过会被拒绝
IsEnable bool `json:"is_enable,omitempty"` // 是否启用WAF防火墙
PerIPJsCheck bool `json:"per_ip_js_check,omitempty"` // 是否启用单IP JS检查,只有超过阈值才会生效
PerIPQPS int `json:"per_ip_qps,omitempty"` // 单个IP访问速率限制,超过会被拒绝
}
// 获取对象存储桶列表
//
// ⚠️注意这个接口是拿不到AK和SK的,响应里面的AK和SK都是空的
func (s *RosService) GetRosBucketList(req *GetRosBucketListRequest) (*GetRosBucketListResponse, error) {
path := "/product/ros/bucket/"
var resp GetRosBucketListResponse
querys, err := common.MarshalQueryParams(req)
if err != nil {
return nil, err
}
err = s.client.Do(constant.HTTPMethod_GET, path, querys, nil, &resp)
return &resp, err
}
// 创建对象存储桶
//
// req: 创建参数(bucketName 存储桶名 >= 3 字符 <= 63 字符)
func (s *RosService) CreateRosBucket(req CreateRosBucketRequest) (*CreateRosBucketResponse, error) {
path := "/product/ros/bucket"
var resp CreateRosBucketResponse
err := s.client.Do(constant.HTTPMethod_POST, path, nil, req, &resp)
return &resp, err
}
// 获取对象存储桶详情
//
// bucketID: 存储桶ID
func (s *RosService) GetRosBucketDetail(bucketID int) (*GetRosBucketDetailResponse, error) {
path := fmt.Sprintf("/product/ros/bucket/%d", bucketID)
var resp GetRosBucketDetailResponse
err := s.client.Do(constant.HTTPMethod_GET, path, nil, nil, &resp)
return &resp, err
}
// 删除对象存储桶
//
// bucketID: 存储桶ID
func (s *RosService) DeleteRosBucket(bucketID int) (*common.BasicOperationResponse, error) {
path := fmt.Sprintf("/product/ros/bucket/%d", bucketID)
var resp common.BasicOperationResponse
err := s.client.Do(constant.HTTPMethod_DELETE, path, nil, nil, &resp)
return &resp, err
}
// 获取对象存储桶监控数据
//
// bucketID: 存储桶ID
//
// req: 开始时间/结束时间(timestamp)
func (s *RosService) GetRosBucketMonitorData(bucketID int, req *GetRosMonitorDataRequest) (*GetRosMonitorDataResponse, error) {
path := fmt.Sprintf("/product/ros/bucket/%d/monitor", bucketID)
var resp GetRosMonitorDataResponse
querys, err := common.MarshalQueryParams(req)
if err != nil {
return nil, err
}
err = s.client.Do(constant.HTTPMethod_GET, path, querys, nil, &resp)
return &resp, err
}
// 修改存储桶Proxy设置
//
// bucketID: 存储桶ID
func (s *RosService) ModifyRosBucketProxySettings(bucketID int, req *ModifyRosBucketProxySettingsRequest) (*common.BasicOperationResponse, error) {
path := fmt.Sprintf("/product/ros/bucket/%d/proxy", bucketID)
var resp common.BasicOperationResponse
err := s.client.Do(constant.HTTPMethod_PATCH, path, nil, req, &resp)
return &resp, err
}
// 对象存储桶重新生成密钥
//
// bucketID: 存储桶ID
func (s *RosService) ReGenerateRosBucketKeys(bucketID int) (*common.BasicOperationResponse, error) {
path := fmt.Sprintf("/product/ros/bucket/%d/regenerate-keys", bucketID)
var resp common.BasicOperationResponse
err := s.client.Do(constant.HTTPMethod_POST, path, nil, nil, &resp)
return &resp, err
}
// 开关对象存储桶匿名访问
//
// bucketID: 存储桶ID
func (s *RosService) SetRosBucketPublicAccess(bucketID int) (*common.BasicOperationResponse, error) {
path := fmt.Sprintf("/product/ros/bucket/%d/toggle-public-access", bucketID)
var resp common.BasicOperationResponse
err := s.client.Do(constant.HTTPMethod_POST, path, nil, nil, &resp)
return &resp, err
}