mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-19 10:46:58 +08:00
fix: qcloud bucket refer
This commit is contained in:
@@ -452,11 +452,15 @@ func init() {
|
||||
DomainList []string
|
||||
// 是否允许空referer 访问
|
||||
AllowEmptyRefer bool `help:"all empty refer access"`
|
||||
Enabled bool
|
||||
RerererType string `help:"Referer type" choices:"Black-List|White-List"`
|
||||
}
|
||||
R(&BucketSetRefererOption{}, "bucket-set-referer", "Set bucket referer", func(s *mcclient.ClientSession, args *BucketSetRefererOption) error {
|
||||
conf := api.BucketRefererConf{
|
||||
WhiteList: args.DomainList,
|
||||
Enabled: args.Enabled,
|
||||
AllowEmptyRefer: args.AllowEmptyRefer,
|
||||
RefererType: args.RerererType,
|
||||
DomainList: args.DomainList,
|
||||
}
|
||||
result, err := modules.Buckets.PerformAction(s, args.ID, "set-referer", jsonutils.Marshal(conf))
|
||||
if err != nil {
|
||||
|
||||
@@ -320,12 +320,16 @@ func (input *BucketCORSRules) Validate() error {
|
||||
}
|
||||
|
||||
type BucketRefererConf struct {
|
||||
// 白名单域名列表
|
||||
WhiteList []string
|
||||
// 黑名单域名列表
|
||||
BlackList []string
|
||||
// Referer Type
|
||||
// enmu: Black-List, White-List
|
||||
RefererType string
|
||||
// 域名列表
|
||||
DomainList []string
|
||||
// 是否允许空referer 访问
|
||||
AllowEmptyRefer bool
|
||||
|
||||
// 是否开启
|
||||
Enabled bool `json:"enabled"`
|
||||
}
|
||||
|
||||
func (input *BucketRefererConf) Validate() error {
|
||||
|
||||
@@ -110,12 +110,15 @@ type SBucketCORSRule struct {
|
||||
}
|
||||
|
||||
type SBucketRefererConf struct {
|
||||
// 白名单域名列表
|
||||
WhiteList []string
|
||||
// 黑名单域名列表
|
||||
BlackList []string
|
||||
// 域名列表
|
||||
DomainList []string
|
||||
// 域名列表
|
||||
// enmu: Black-List, White-List
|
||||
RefererType string
|
||||
// 是否允许空referer 访问
|
||||
AllowEmptyRefer bool
|
||||
|
||||
Enabled bool
|
||||
}
|
||||
|
||||
type SBucketPolicyStatement struct {
|
||||
|
||||
@@ -1521,8 +1521,11 @@ func (bucket *SBucket) PerformSetReferer(
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "GetIBucket")
|
||||
}
|
||||
|
||||
conf := cloudprovider.SBucketRefererConf{
|
||||
WhiteList: input.WhiteList,
|
||||
Enabled: input.Enabled,
|
||||
DomainList: input.DomainList,
|
||||
RefererType: input.RefererType,
|
||||
AllowEmptyRefer: input.AllowEmptyRefer,
|
||||
}
|
||||
|
||||
@@ -1557,9 +1560,12 @@ func (bucket *SBucket) GetDetailsReferer(
|
||||
if err != nil {
|
||||
return conf, httperrors.NewInternalServerError("iBucket.GetRefer error %s", err)
|
||||
}
|
||||
conf.WhiteList = referConf.WhiteList
|
||||
conf.BlackList = referConf.BlackList
|
||||
conf.AllowEmptyRefer = referConf.AllowEmptyRefer
|
||||
conf.Enabled = referConf.Enabled
|
||||
if conf.Enabled {
|
||||
conf.DomainList = referConf.DomainList
|
||||
conf.RefererType = referConf.RefererType
|
||||
conf.AllowEmptyRefer = referConf.AllowEmptyRefer
|
||||
}
|
||||
|
||||
return conf, nil
|
||||
}
|
||||
|
||||
@@ -628,9 +628,17 @@ func (b *SBucket) SetReferer(conf cloudprovider.SBucketRefererConf) error {
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "GetOssClient")
|
||||
}
|
||||
err = osscli.SetBucketReferer(b.Name, conf.WhiteList, conf.AllowEmptyRefer)
|
||||
if !conf.Enabled {
|
||||
return errors.Wrapf(cloudprovider.ErrNotSupported, "Disable Refer")
|
||||
}
|
||||
|
||||
if conf.RefererType == "Black-List" {
|
||||
return errors.Wrapf(cloudprovider.ErrNotSupported, "Black List")
|
||||
}
|
||||
|
||||
err = osscli.SetBucketReferer(b.Name, conf.DomainList, conf.AllowEmptyRefer)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "osscli.SetBucketReferer(%s,%s,%t)", b.Name, conf.WhiteList, conf.AllowEmptyRefer)
|
||||
return errors.Wrapf(err, "osscli.SetBucketReferer(%s,%s,%t)", b.Name, conf.DomainList, conf.AllowEmptyRefer)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -646,7 +654,9 @@ func (b *SBucket) GetReferer() (cloudprovider.SBucketRefererConf, error) {
|
||||
return result, errors.Wrapf(err, "osscli.GetBucketReferer(%s)", b.Name)
|
||||
}
|
||||
result = cloudprovider.SBucketRefererConf{
|
||||
WhiteList: refererResult.RefererList,
|
||||
Enabled: true,
|
||||
RefererType: "White-List",
|
||||
DomainList: refererResult.RefererList,
|
||||
AllowEmptyRefer: refererResult.AllowEmptyReferer,
|
||||
}
|
||||
return result, nil
|
||||
|
||||
@@ -560,10 +560,12 @@ func S3Shell() {
|
||||
})
|
||||
|
||||
type BucketSetRefererOption struct {
|
||||
BUCKET string `help:"name of bucket to put object"`
|
||||
DomainList []string
|
||||
BUCKET string `help:"name of bucket to put object"`
|
||||
RefererType string `help:"referer type" choices:"Black-List|White-List" default:"Black-List"`
|
||||
DomainList []string
|
||||
// 是否允许空refer 访问
|
||||
AllowEmptyRefer bool `help:"all empty refer access"`
|
||||
Disable bool
|
||||
}
|
||||
shellutils.R(&BucketSetRefererOption{}, "bucket-set-referer", "Set bucket referer", func(cli cloudprovider.ICloudRegion, args *BucketSetRefererOption) error {
|
||||
bucket, err := cli.GetIBucketById(args.BUCKET)
|
||||
@@ -571,8 +573,13 @@ func S3Shell() {
|
||||
return err
|
||||
}
|
||||
conf := cloudprovider.SBucketRefererConf{
|
||||
WhiteList: args.DomainList,
|
||||
DomainList: args.DomainList,
|
||||
RefererType: args.RefererType,
|
||||
AllowEmptyRefer: args.AllowEmptyRefer,
|
||||
Enabled: true,
|
||||
}
|
||||
if args.Disable {
|
||||
conf.Enabled = false
|
||||
}
|
||||
err = bucket.SetReferer(conf)
|
||||
if err != nil {
|
||||
|
||||
@@ -694,20 +694,23 @@ func (b *SBucket) SetReferer(conf cloudprovider.SBucketRefererConf) error {
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "b.region.GetCosClient")
|
||||
}
|
||||
|
||||
if !conf.Enabled {
|
||||
_, err = coscli.Bucket.PutReferer(context.Background(), nil)
|
||||
return errors.Wrap(err, "Disable Refer")
|
||||
}
|
||||
|
||||
opts := cos.BucketPutRefererOptions{
|
||||
Status: "Enabled",
|
||||
RefererType: "White-List",
|
||||
EmptyReferConfiguration: "Deny",
|
||||
RefererType: conf.RefererType,
|
||||
DomainList: conf.DomainList,
|
||||
}
|
||||
|
||||
if conf.AllowEmptyRefer {
|
||||
opts.EmptyReferConfiguration = "Allow"
|
||||
}
|
||||
opts.DomainList = conf.WhiteList
|
||||
if len(opts.DomainList) == 0 {
|
||||
opts.Status = "Disabled"
|
||||
opts.DomainList = []string{"*"}
|
||||
}
|
||||
|
||||
_, err = coscli.Bucket.PutReferer(context.Background(), &opts)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "coscli.Bucket.PutReferer")
|
||||
@@ -720,23 +723,17 @@ func (b *SBucket) GetReferer() (cloudprovider.SBucketRefererConf, error) {
|
||||
if err != nil {
|
||||
return result, errors.Wrap(err, "b.region.GetCosClient")
|
||||
}
|
||||
|
||||
referResult, _, err := coscli.Bucket.GetReferer(context.Background())
|
||||
if err != nil {
|
||||
return result, errors.Wrap(err, " coscli.Bucket.GetReferer")
|
||||
}
|
||||
|
||||
if referResult.EmptyReferConfiguration == "Allow" {
|
||||
result.AllowEmptyRefer = true
|
||||
}
|
||||
if referResult.Status == "Disabled" {
|
||||
result.AllowEmptyRefer = true
|
||||
return result, nil
|
||||
}
|
||||
result.WhiteList = referResult.DomainList
|
||||
if referResult.RefererType == "Black-List" {
|
||||
result.WhiteList = nil
|
||||
result.BlackList = referResult.DomainList
|
||||
}
|
||||
result.AllowEmptyRefer = (referResult.EmptyReferConfiguration == "Allow")
|
||||
result.Enabled = (referResult.Status == "Enabled")
|
||||
result.RefererType = referResult.RefererType
|
||||
result.DomainList = referResult.DomainList
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user