oss/lib/bucket_referer.go (221 lines of code) (raw):

package lib import ( "encoding/xml" "fmt" "os" "strings" ) var specChineseBucketReferer = SpecText{ synopsisText: "设置、查询或者删除bucket的referer配置", paramText: "bucket_url referer [options]", syntaxText: ` ossutil referer --method put oss://bucket referer [options] ossutil referer --method get oss://bucket [local_file] ossutil referer --method delete oss://bucket `, detailHelpText: ` referer命令通过设置method选项值为put、get、delete,可以设置、查询或者删除bucket的referer配置 用法: 该命令有三种用法: 1) ossutil referer --method put oss://bucket referer [options] 这个命令将bucket的referer设置成后面的referer值 referer参数可以连续输入多个 2) ossutil referer --method get oss://bucket [local_xml_file] 这个命令查询bucket的referer配置 如果输入参数local_xml_file,referer配置将输出到该文件,否则输出到屏幕上 3) ossutil referer --method delete oss://bucket 这个命令删除bucket的referer配置 `, sampleText: ` 1) 设置bucket的referer配置 ossutil referer --method put oss://bucket www.test1.com www.test2.com 2) 设置bucket的referer配置,且不允许referer为空 ossutil referer --method put oss://bucket www.test1.com www.test2.com --disable-empty-referer 3) 查询bucket的referer配置,结果输出到标准输出 ossutil referer --method get oss://bucket 4) 查询bucket的referer配置,结果输出到本地文件 ossutil referer --method get oss://bucket local_xml_file 5) 删除bucket的referer配置 ossutil referer --method delete oss://bucket `, } var specEnglishBucketReferer = SpecText{ synopsisText: "Set、get or delete bucket referer configuration", paramText: "bucket_url referer [options]", syntaxText: ` ossutil referer --method put oss://bucket referer [options] ossutil referer --method get oss://bucket [local_file] ossutil referer --method delete oss://bucket `, detailHelpText: ` referer command can set、get and delete the referer configuration of the oss bucket by set method option value to put, get,delete Usage: There are three usages for this command: 1) ossutil referer --method put oss://bucket referer [options] This command sets the referer of the bucket to the following referer value. You can input many referer parameter. 2) ossutil referer --method get oss://bucket [local_xml_file] The command gets the referer configuration of bucket If you input parameter local_xml_file,the configuration will be output to local_xml_file If you don't input parameter local_xml_file,the configuration will be output to stdout 3) ossutil referer --method delete oss://bucket The command deletes the referer configuration of bucket `, sampleText: ` 1) put bucket referer ossutil referer --method put oss://bucket www.test1.com www.test2.com 2) put bucket referer, empty referer is forbidden ossutil referer --method put oss://bucket www.test1.com www.test2.com --disable-empty-referer 3) get referer configuration to stdout ossutil referer --method get oss://bucket 4) get referer configuration to local file ossutil referer --method get oss://bucket local_xml_file 5) delete referer configuration ossutil referer --method delete oss://bucket `, } type bucketReferOptionType struct { bucketName string disableEmptyRefer bool } type BucketRefererCommand struct { command Command brOption bucketReferOptionType } var bucketRefererCommand = BucketRefererCommand{ command: Command{ name: "referer", nameAlias: []string{"referer"}, minArgc: 1, maxArgc: MaxInt, specChinese: specChineseBucketReferer, specEnglish: specEnglishBucketReferer, group: GroupTypeNormalCommand, validOptionNames: []string{ OptionConfigFile, OptionEndpoint, OptionAccessKeyID, OptionAccessKeySecret, OptionSTSToken, OptionProxyHost, OptionProxyUser, OptionProxyPwd, OptionLogLevel, OptionDisableEmptyReferer, OptionMethod, OptionPassword, OptionMode, OptionECSRoleName, OptionTokenTimeout, OptionRamRoleArn, OptionRoleSessionName, OptionExternalId, OptionReadTimeout, OptionConnectTimeout, OptionSTSRegion, OptionSkipVerifyCert, OptionUserAgent, OptionSignVersion, OptionRegion, OptionCloudBoxID, OptionForcePathStyle, }, }, } // function for FormatHelper interface func (brc *BucketRefererCommand) formatHelpForWhole() string { return brc.command.formatHelpForWhole() } func (brc *BucketRefererCommand) formatIndependHelp() string { return brc.command.formatIndependHelp() } // Init simulate inheritance, and polymorphism func (brc *BucketRefererCommand) Init(args []string, options OptionMapType) error { return brc.command.Init(args, options, brc) } // RunCommand simulate inheritance, and polymorphism func (brc *BucketRefererCommand) RunCommand() error { strMethod, _ := GetString(OptionMethod, brc.command.options) if strMethod == "" { return fmt.Errorf("--method value is empty") } strMethod = strings.ToLower(strMethod) if strMethod != "put" && strMethod != "get" && strMethod != "delete" { return fmt.Errorf("--method value is not in the optional value:put|get|delete") } srcBucketUrL, err := GetCloudUrl(brc.command.args[0], "") if err != nil { return err } brc.brOption.bucketName = srcBucketUrL.bucket brc.brOption.disableEmptyRefer, _ = GetBool(OptionDisableEmptyReferer, brc.command.options) if strMethod == "put" { err = brc.PutBucketRefer() } else if strMethod == "get" { err = brc.GetBucketRefer() } else if strMethod == "delete" { err = brc.DeleteBucketRefer() } return err } func (brc *BucketRefererCommand) PutBucketRefer() error { if len(brc.command.args) < 2 { return fmt.Errorf("put bucket referer need at least 2 parameters,the refer is empty") } referers := brc.command.args[1:len(brc.command.args)] // put bucket refer client, err := brc.command.ossClient(brc.brOption.bucketName) if err != nil { return err } return client.SetBucketReferer(brc.brOption.bucketName, referers, !brc.brOption.disableEmptyRefer) } func (brc *BucketRefererCommand) confirm(str string) bool { var val string fmt.Printf(getClearStr(fmt.Sprintf("bucket referer: overwrite \"%s\"(y or N)? ", str))) if _, err := fmt.Scanln(&val); err != nil || (strings.ToLower(val) != "yes" && strings.ToLower(val) != "y") { return false } return true } func (brc *BucketRefererCommand) GetBucketRefer() error { client, err := brc.command.ossClient(brc.brOption.bucketName) if err != nil { return err } referRes, err := client.GetBucketReferer(brc.brOption.bucketName) if err != nil { return err } output, err := xml.MarshalIndent(referRes, " ", " ") if err != nil { return err } var outFile *os.File if len(brc.command.args) >= 2 { fileName := brc.command.args[1] _, err = os.Stat(fileName) if err == nil { bConitnue := brc.confirm(fileName) if !bConitnue { return nil } } outFile, err = os.OpenFile(fileName, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0660) if err != nil { return err } defer outFile.Close() } else { outFile = os.Stdout } outFile.Write([]byte(xml.Header)) outFile.Write(output) fmt.Printf("\n\n") return nil } func (brc *BucketRefererCommand) DeleteBucketRefer() error { referers := []string{} // put bucket refer client, err := brc.command.ossClient(brc.brOption.bucketName) if err != nil { return err } return client.SetBucketReferer(brc.brOption.bucketName, referers, true) }