github.com/decred/dcrlnd@v0.7.6/macaroons/context.go (about) 1 package macaroons 2 3 import ( 4 "context" 5 "fmt" 6 ) 7 8 var ( 9 // RootKeyIDContextKey is the key to get rootKeyID from context. 10 RootKeyIDContextKey = contextKey{"rootkeyid"} 11 12 // ErrContextRootKeyID is used when the supplied context doesn't have 13 // a root key ID. 14 ErrContextRootKeyID = fmt.Errorf("failed to read root key ID " + 15 "from context") 16 ) 17 18 // contextKey is the type we use to identify values in the context. 19 type contextKey struct { 20 Name string 21 } 22 23 // ContextWithRootKeyID passes the root key ID value to context. 24 func ContextWithRootKeyID(ctx context.Context, 25 value interface{}) context.Context { 26 27 return context.WithValue(ctx, RootKeyIDContextKey, value) 28 } 29 30 // RootKeyIDFromContext retrieves the root key ID from context using the key 31 // RootKeyIDContextKey. 32 func RootKeyIDFromContext(ctx context.Context) ([]byte, error) { 33 id, ok := ctx.Value(RootKeyIDContextKey).([]byte) 34 if !ok { 35 return nil, ErrContextRootKeyID 36 } 37 38 // Check that the id is not empty. 39 if len(id) == 0 { 40 return nil, ErrMissingRootKeyID 41 } 42 43 return id, nil 44 }