oss/lib/request_payment.go (169 lines of code) (raw):
package lib
import (
"fmt"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
var specChineseRequestPayment = SpecText{
synopsisText: "设置、查询bucket的访问者付费配置",
paramText: "bucket_url [payment_parameter] [options]",
syntaxText: `
ossutil request-payment --method put oss://bucket payment_parameter
ossutil request-payment --method get oss://bucket
`,
detailHelpText: `
request-payment命令通过设置method选项值为put、get, 可以设置、查询bucket的访问者付费配置
选项--method为put时,参数只能为Requester, BucketOwner
用法:
该命令有三种用法:
1) ossutil request-payment --method put oss://bucket Requester
这个命令设置由bucket的访问者付费
2) ossutil request-payment --method put oss://bucket BucketOwner
这个命令设置由bucket的拥有者付费
3) ossutil request-payment --method get oss://bucket
这个命令查询bucket的付费配置
`,
sampleText: `
1) 设置由bucket的访问者付费
ossutil request-payment --method put oss://bucket Requester
2) 设置由bucket的拥有者付费
ossutil request-payment --method put oss://bucket BucketOwner
3) 查询bucket的付费配置
ossutil request-payment --method get oss://bucket
`,
}
var specEnglishRequestPayment = SpecText{
synopsisText: "Set, get bucket request payment configuration",
paramText: "bucket_url [payment_parameter] [options]",
syntaxText: `
ossutil request-payment --method put oss://bucket payment_parameter
ossutil request-payment --method get oss://bucket
`,
detailHelpText: `
request-payment command can set, get the bucket request payment configuration by set method option value to put, get
If the --method option value is put, the parameter can only be Requester, BucketOwner
Usage:
There are three usages for this command:
1) ossutil request-payment --method put oss://bucket Requester
This command sets that request is paid by the requester of the bucket
2) ossutil request-payment --method put oss://bucket BucketOwner
This command sets that request is paid by the owner of the bucket
3) ossutil request-payment --method get oss://bucket
This command query the bucket request payment configuration
`,
sampleText: `
1) setting request is paid by the requester of the bucket
ossutil request-payment --method put oss://bucket Requester
2) setting request is paid by the owner of the bucket
ossutil request-payment --method put oss://bucket BucketOwner
3) query the bucket request payment configuration
ossutil request-payment --method get oss://bucket
`,
}
type RequestPaymentCommand struct {
command Command
bucketName string
paymentResult oss.RequestPaymentConfiguration
}
var requestPaymentCommand = RequestPaymentCommand{
command: Command{
name: "request-payment",
nameAlias: []string{"request-payment"},
minArgc: 1,
maxArgc: 2,
specChinese: specChineseRequestPayment,
specEnglish: specEnglishRequestPayment,
group: GroupTypeNormalCommand,
validOptionNames: []string{
OptionConfigFile,
OptionEndpoint,
OptionAccessKeyID,
OptionAccessKeySecret,
OptionSTSToken,
OptionProxyHost,
OptionProxyUser,
OptionProxyPwd,
OptionMethod,
OptionLogLevel,
OptionPassword,
OptionMode,
OptionECSRoleName,
OptionTokenTimeout,
OptionRamRoleArn,
OptionRoleSessionName,
OptionExternalId,
OptionReadTimeout,
OptionConnectTimeout,
OptionSTSRegion,
OptionSkipVerifyCert,
OptionUserAgent,
OptionSignVersion,
OptionRegion,
OptionCloudBoxID,
OptionForcePathStyle,
},
},
}
// function for FormatHelper interface
func (reqpc *RequestPaymentCommand) formatHelpForWhole() string {
return reqpc.command.formatHelpForWhole()
}
func (reqpc *RequestPaymentCommand) formatIndependHelp() string {
return reqpc.command.formatIndependHelp()
}
// Init simulate inheritance, and polymorphism
func (reqpc *RequestPaymentCommand) Init(args []string, options OptionMapType) error {
return reqpc.command.Init(args, options, reqpc)
}
// RunCommand simulate inheritance, and polymorphism
func (reqpc *RequestPaymentCommand) RunCommand() error {
strMethod, _ := GetString(OptionMethod, reqpc.command.options)
if strMethod == "" {
return fmt.Errorf("--method value is empty")
}
strMethod = strings.ToLower(strMethod)
if strMethod != "put" && strMethod != "get" {
return fmt.Errorf("--method value is not in the optional value:put|get")
}
srcBucketUrL, err := GetCloudUrl(reqpc.command.args[0], "")
if err != nil {
return err
}
reqpc.bucketName = srcBucketUrL.bucket
if strMethod == "put" {
err = reqpc.PutRequestPayment()
} else if strMethod == "get" {
err = reqpc.GetRequestPayment()
}
return err
}
func (reqpc *RequestPaymentCommand) PutRequestPayment() error {
if len(reqpc.command.args) < 2 {
return fmt.Errorf("missing parameter,payment parameter is empty")
}
strPayment := strings.ToLower(reqpc.command.args[1])
if strPayment != strings.ToLower(string(oss.Requester)) &&
strPayment != strings.ToLower(string(oss.BucketOwner)) {
return fmt.Errorf("payment parameter must be %s or %s", string(oss.Requester), string(oss.BucketOwner))
}
// put bucket payment
client, err := reqpc.command.ossClient(reqpc.bucketName)
if err != nil {
return err
}
var paymentConfig oss.RequestPaymentConfiguration
if strPayment == strings.ToLower(string(oss.Requester)) {
paymentConfig.Payer = string(oss.Requester)
} else if strPayment == strings.ToLower(string(oss.BucketOwner)) {
paymentConfig.Payer = string(oss.BucketOwner)
}
return client.SetBucketRequestPayment(reqpc.bucketName, paymentConfig)
}
func (reqpc *RequestPaymentCommand) GetRequestPayment() error {
client, err := reqpc.command.ossClient(reqpc.bucketName)
if err != nil {
return err
}
reqpc.paymentResult, err = client.GetBucketRequestPayment(reqpc.bucketName)
if err != nil {
return err
}
fmt.Printf("\n%s\n", string(reqpc.paymentResult.Payer))
return nil
}