github.com/s7techlab/cckit@v0.10.5/extensions/encryption/middleware_after.go (about)

     1  package encryption
     2  
     3  import (
     4  	"github.com/s7techlab/cckit/router"
     5  )
     6  
     7  func encryptIfEncodeKeyExists(encryptionRequired bool) router.MiddlewareFunc {
     8  	return func(pre router.HandlerFunc, pos ...int) router.HandlerFunc {
     9  		return func(ctx router.Context) (interface{}, error) {
    10  			res, err := pre(ctx)
    11  
    12  			if err != nil || ctx.Handler().Type != router.MethodInvoke {
    13  				return res, err
    14  			}
    15  			if _, err = KeyFromTransient(ctx); err != nil {
    16  				if err == ErrKeyNotDefinedInTransientMap && !encryptionRequired {
    17  					return res, nil
    18  				}
    19  				return nil, err
    20  			}
    21  
    22  			return EncryptWithTransientKey(ctx, res)
    23  		}
    24  	}
    25  }
    26  
    27  // EncryptInvokeResponse returns middleware function for encrypt chaincode invocation response
    28  func EncryptInvokeResponse() router.MiddlewareFunc {
    29  	return encryptIfEncodeKeyExists(true)
    30  }
    31  
    32  // EncryptInvokeResponseIfKeyProvided returns middleware function for encrypt chaincode invocation response if
    33  // encryption key provided in transient map
    34  func EncryptInvokeResponseIfKeyProvided() router.MiddlewareFunc {
    35  	return encryptIfEncodeKeyExists(false)
    36  }