Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

69 строки
1.9 KiB

  1. package auth
  2. import (
  3. "bytes"
  4. "fmt"
  5. "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
  6. "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/utils"
  7. "net/url"
  8. "strings"
  9. "time"
  10. )
  11. func signRpcRequest(request requests.AcsRequest, signer Signer) (err error) {
  12. err = completeRpcSignParams(request, signer)
  13. if err != nil {
  14. return
  15. }
  16. if _, isContainsSign := request.GetQueryParams()["sign"]; isContainsSign {
  17. delete(request.GetQueryParams(), "sign")
  18. }
  19. stringToSign := buildRpcStringToSign(request)
  20. request.SetStringToSign(stringToSign)
  21. signature := signer.Sign(stringToSign, "&")
  22. request.GetQueryParams()["sign"] = signature
  23. return
  24. }
  25. func completeRpcSignParams(request requests.AcsRequest, signer Signer) (err error) {
  26. var accessKeyFrom string
  27. if accessKeyFrom, err = signer.GetAccessKeyFrom(); err != nil {
  28. return
  29. }
  30. queryParams := request.GetQueryParams()
  31. queryParams["access_time"] = fmt.Sprintf("%d", time.Now().Unix())
  32. queryParams["access_key"], err = signer.GetAccessKeyId()
  33. queryParams["access_from"] = accessKeyFrom
  34. if err != nil {
  35. return
  36. }
  37. request.GetHeaders()["Content-type"] = requests.Form
  38. request.GetHeaders()["Gr-Sdk-From"] = accessKeyFrom
  39. formString := utils.GetUrlFormedMap(request.GetFormParams())
  40. request.SetContent(bytes.NewBufferString(formString).Bytes())
  41. return
  42. }
  43. func buildRpcStringToSign(request requests.AcsRequest) (stringToSign string) {
  44. signParams := make(map[string]string)
  45. for key, value := range request.GetQueryParams() {
  46. signParams[key] = value
  47. }
  48. for key, value := range request.GetFormParams() {
  49. signParams[key] = value
  50. }
  51. stringToSign = utils.GetUrlFormedMap(signParams)
  52. stringToSign = strings.Replace(stringToSign, "+", "%20", -1)
  53. stringToSign = strings.Replace(stringToSign, "*", "%2A", -1)
  54. stringToSign = strings.Replace(stringToSign, "%7E", "~", -1)
  55. stringToSign = url.QueryEscape(stringToSign)
  56. stringToSign = request.GetMethod() + "&%2F&" + stringToSign
  57. return
  58. }