github.com/lingyao2333/mo-zero@v1.4.1/zrpc/internal/auth/credential.go (about) 1 package auth 2 3 import ( 4 "context" 5 6 "google.golang.org/grpc/metadata" 7 ) 8 9 // A Credential is used to authenticate. 10 type Credential struct { 11 App string 12 Token string 13 } 14 15 // GetRequestMetadata gets the request metadata. 16 func (c *Credential) GetRequestMetadata(context.Context, ...string) (map[string]string, error) { 17 return map[string]string{ 18 appKey: c.App, 19 tokenKey: c.Token, 20 }, nil 21 } 22 23 // RequireTransportSecurity always returns false. 24 func (c *Credential) RequireTransportSecurity() bool { 25 return false 26 } 27 28 // ParseCredential parses credential from given ctx. 29 func ParseCredential(ctx context.Context) Credential { 30 var credential Credential 31 32 md, ok := metadata.FromIncomingContext(ctx) 33 if !ok { 34 return credential 35 } 36 37 apps, tokens := md[appKey], md[tokenKey] 38 if len(apps) == 0 || len(tokens) == 0 { 39 return credential 40 } 41 42 app, token := apps[0], tokens[0] 43 if len(app) == 0 || len(token) == 0 { 44 return credential 45 } 46 47 credential.App = app 48 credential.Token = token 49 50 return credential 51 }