@@ -119,10 +119,9 @@ func TestGatewayHandler_HandleGatewayMessage(t *testing.T) {
119119 {
120120 name : "failure - invalid request params" ,
121121 setupMocks : func (ss * vaulttypesmocks.SecretsService , gc * connector_mocks.GatewayConnector , ra * vaultcapmocks.RequestAuthorizer ) {
122- ra .EXPECT ().AuthorizeRequest (mock .Anything , mock .Anything ).Return (true , "0xabc" , nil )
123122 gc .On ("SendToGateway" , mock .Anything , "gateway-1" , mock .MatchedBy (func (resp * jsonrpc.Response [json.RawMessage ]) bool {
124123 return resp .Error != nil &&
125- resp .Error .Code == api .ToJSONRPCErrorCode (api .UserMessageParseError )
124+ resp .Error .Code == api .ToJSONRPCErrorCode (api .FatalError )
126125 })).Return (nil )
127126 },
128127 request : & jsonrpc.Request [json.RawMessage ]{
@@ -204,6 +203,54 @@ func TestGatewayHandler_HandleGatewayMessage(t *testing.T) {
204203 },
205204 expectedError : false ,
206205 },
206+ {
207+ name : "success - strips owner prefix from forwarded request before authorization" ,
208+ setupMocks : func (ss * vaulttypesmocks.SecretsService , gc * connector_mocks.GatewayConnector , ra * vaultcapmocks.RequestAuthorizer ) {
209+ ra .EXPECT ().AuthorizeRequest (mock .Anything , mock .MatchedBy (func (req jsonrpc.Request [json.RawMessage ]) bool {
210+ if req .Method != vaulttypes .MethodSecretsCreate || req .ID != "1" || req .Params == nil {
211+ return false
212+ }
213+
214+ var parsed vaultcommon.CreateSecretsRequest
215+ if err := json .Unmarshal (* req .Params , & parsed ); err != nil {
216+ return false
217+ }
218+
219+ return parsed .RequestId == "1" &&
220+ len (parsed .EncryptedSecrets ) == 1 &&
221+ parsed .EncryptedSecrets [0 ].Id != nil &&
222+ parsed .EncryptedSecrets [0 ].Id .Owner == "0xAbC"
223+ })).Return (true , "0xabc" , nil )
224+ ss .EXPECT ().CreateSecrets (mock .Anything , mock .MatchedBy (func (req * vaultcommon.CreateSecretsRequest ) bool {
225+ return req .RequestId == "0xabc" + vaulttypes .RequestIDSeparator + "1"
226+ })).Return (& vaulttypes.Response {ID : "test-secret" }, nil )
227+
228+ gc .On ("SendToGateway" , mock .Anything , "gateway-1" , mock .MatchedBy (func (resp * jsonrpc.Response [json.RawMessage ]) bool {
229+ return resp .Error == nil
230+ })).Return (nil )
231+ },
232+ request : & jsonrpc.Request [json.RawMessage ]{
233+ Method : vaulttypes .MethodSecretsCreate ,
234+ ID : "0xAbC" + vaulttypes .RequestIDSeparator + "1" ,
235+ Params : func () * json.RawMessage {
236+ params , _ := json .Marshal (vaultcommon.CreateSecretsRequest {
237+ RequestId : "0xAbC" + vaulttypes .RequestIDSeparator + "1" ,
238+ EncryptedSecrets : []* vaultcommon.EncryptedSecret {
239+ {
240+ Id : & vaultcommon.SecretIdentifier {
241+ Key : "test-secret" ,
242+ Owner : "0xAbC" ,
243+ },
244+ EncryptedValue : "encrypted-value" ,
245+ },
246+ },
247+ })
248+ raw := json .RawMessage (params )
249+ return & raw
250+ }(),
251+ },
252+ expectedError : false ,
253+ },
207254 {
208255 name : "failure - owner mismatch against authorized owner" ,
209256 setupMocks : func (ss * vaulttypesmocks.SecretsService , gc * connector_mocks.GatewayConnector , ra * vaultcapmocks.RequestAuthorizer ) {
0 commit comments