func (option *SignOption) init() { if option.initialized { return } option.headersToSignSpecified = len(option.HeadersToSign) > 0 if option.Timestamp == "" { option.Timestamp = util.TimeToUTCString(time.Now()) } if option.ExpirationPeriodInSeconds <= 0 { option.ExpirationPeriodInSeconds = ExpirationPeriodInSeconds } if option.Headers == nil { option.Headers = make(map[string]string, 3) } else { util.MapKeyToLower(option.Headers) } util.SliceToLower(option.HeadersToSign) if !util.Contains(option.HeadersToSign, "host", true) { option.HeadersToSign = append(option.HeadersToSign, "host") } if !option.headersToSignSpecified { option.HeadersToSign = append(option.HeadersToSign, "x-bce-date") option.Headers["x-bce-date"] = option.Timestamp } else if util.Contains(option.HeadersToSign, "date", true) { if !util.MapContains(option.Headers, generateHeaderValidCompareFunc("date")) { option.Headers["date"] = time.Now().Format(time.RFC1123) } else { option.Headers["date"] = util.TimeStringToRFC1123(util.GetMapValue(option.Headers, "date", true)) } } else { if !util.MapContains(option.Headers, generateHeaderValidCompareFunc("x-bce-date")) { option.Headers["x-bce-date"] = option.Timestamp } } option.initialized = true }
func (option *SignOption) AddHeader(key, value string) { if option.Headers == nil { option.Headers = make(map[string]string) option.Headers[key] = value } if !util.MapContains(option.Headers, generateHeaderValidCompareFunc(key)) { option.Headers[key] = value } }
func (req *Request) prepareHeaders(option *SignOption) { req.SetHeaders(option.Headers) if !util.MapContains(option.Headers, generateHeaderValidCompareFunc("host")) { option.Headers["host"] = req.URL.Host req.addHeader("Host", req.URL.Host) } host := req.Header.Get("Host") if host != req.URL.Host { req.setHeader("Host", req.URL.Host) } }