57 lines
1.7 KiB
Go
57 lines
1.7 KiB
Go
package auth
|
||
|
||
import (
|
||
"errors"
|
||
"golib.gaore.com/GaoreGo/haiwai-common-sdk-go/sdk/auth/credentials"
|
||
"golib.gaore.com/GaoreGo/haiwai-common-sdk-go/sdk/auth/signers"
|
||
"golib.gaore.com/GaoreGo/haiwai-common-sdk-go/sdk/requests"
|
||
"golib.gaore.com/GaoreGo/haiwai-common-sdk-go/sdk/responses"
|
||
"net/http"
|
||
)
|
||
|
||
type Signer interface {
|
||
GetName() string
|
||
GetAccessKeyId() (string, error)
|
||
GetAccessKeyFrom() (string, error)
|
||
Sign(stringToSign, secretSuffix string) string
|
||
}
|
||
|
||
func NewSignerWithCredential(credential Credential, commonApi func(request *requests.CommonRequest, signer interface{}) (response *responses.CommonResponse, err error)) (signer Signer, err error) {
|
||
switch instance := credential.(type) {
|
||
case *credentials.AccessKeyCredential:
|
||
signer = signers.NewAccessKeySigner(instance)
|
||
case *credentials.BaseCredential:
|
||
signer = signers.NewAccessKeySigner(instance.ToAccessKeyCredential())
|
||
case *credentials.StdTokenCredential:
|
||
signer = signers.NewStsTokenSigner(instance)
|
||
case *credentials.AliAppcodeCredential:
|
||
signer = signers.NewAliAppcodeSigner(instance)
|
||
default:
|
||
err = errors.New("UnsupportedCredentialErrorCode = SDK.UnsupportedCredential")
|
||
}
|
||
return
|
||
}
|
||
|
||
func Sign(request requests.AcsRequest, signer Signer) (err error) {
|
||
switch signer.(type) {
|
||
case *signers.AliAppcodeSigner:
|
||
err = signRaliRequest(request, signer)
|
||
return
|
||
}
|
||
|
||
//TODO 根据rpc和roa两种风格签名,自行选择
|
||
switch request.GetStyle() {
|
||
case requests.RPC:
|
||
err = signRpcRequest(request, signer)
|
||
case requests.ROA:
|
||
err = signRoaRequest(request, signer)
|
||
}
|
||
return
|
||
}
|
||
|
||
func UnSign(request *http.Request, signer Signer) (err error) {
|
||
//TODO 根据rpc和roa两种风格签名,自行选择
|
||
err = unsignRpcRequest(request, signer)
|
||
return
|
||
}
|