You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.7 KiB

  1. package auth
  2. import (
  3. "errors"
  4. "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/auth/credentials"
  5. "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/auth/signers"
  6. "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/requests"
  7. "golib.gaore.com/GaoreGo/gaore-common-sdk-go/sdk/responses"
  8. "net/http"
  9. )
  10. type Signer interface {
  11. GetName() string
  12. GetAccessKeyId() (string, error)
  13. GetAccessKeyFrom() (string, error)
  14. Sign(stringToSign, secretSuffix string) string
  15. }
  16. func NewSignerWithCredential(credential Credential, commonApi func(request *requests.CommonRequest, signer interface{}) (response *responses.CommonResponse, err error)) (signer Signer, err error) {
  17. switch instance := credential.(type) {
  18. case *credentials.AccessKeyCredential:
  19. signer = signers.NewAccessKeySigner(instance)
  20. case *credentials.BaseCredential:
  21. signer = signers.NewAccessKeySigner(instance.ToAccessKeyCredential())
  22. case *credentials.StdTokenCredential:
  23. signer = signers.NewStsTokenSigner(instance)
  24. case *credentials.AliAppcodeCredential:
  25. signer = signers.NewAliAppcodeSigner(instance)
  26. default:
  27. err = errors.New("UnsupportedCredentialErrorCode = SDK.UnsupportedCredential")
  28. }
  29. return
  30. }
  31. func Sign(request requests.AcsRequest, signer Signer) (err error) {
  32. switch signer.(type) {
  33. case *signers.AliAppcodeSigner:
  34. err = signRaliRequest(request, signer)
  35. return
  36. }
  37. //TODO 根据rpc和roa两种风格签名,自行选择
  38. switch request.GetStyle() {
  39. case requests.RPC:
  40. err = signRpcRequest(request, signer)
  41. case requests.ROA:
  42. err = signRoaRequest(request, signer)
  43. }
  44. return
  45. }
  46. func UnSign(request *http.Request, signer Signer) (err error) {
  47. //TODO 根据rpc和roa两种风格签名,自行选择
  48. err = unsignRpcRequest(request, signer)
  49. return
  50. }