fix: qcloud bucket refer

This commit is contained in:
Qu Xuan
2021-03-15 15:45:45 +08:00
parent 756e1c1b26
commit 113e2ab874
7 changed files with 68 additions and 37 deletions
+5 -1
View File
@@ -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 {
+8 -4
View File
@@ -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 {
+7 -4
View File
@@ -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 {
+10 -4
View File
@@ -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
}
+13 -3
View File
@@ -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
+10 -3
View File
@@ -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 {
+15 -18
View File
@@ -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
}