@@ -411,6 +411,7 @@ def update(
411411 serializer = self .get_serializer (adapter , data = request .data , partial = True )
412412 serializer .is_valid (raise_exception = True )
413413
414+ # Validate URLs for security if metadata is being updated
414415 # Validate URLs for security if metadata is being updated
415416 if AdapterKeys .ADAPTER_METADATA_B in serializer .validated_data :
416417 adapter_id = (
@@ -420,27 +421,30 @@ def update(
420421 adapter_metadata_b = serializer .validated_data .get (
421422 AdapterKeys .ADAPTER_METADATA_B
422423 )
423-
424- if not adapter_id or not adapter_metadata_b :
425- raise ValidationError ("Missing adapter metadata for validation." )
426-
427- # Decrypt metadata to get configuration
428- try :
429- fernet = Fernet (settings .ENCRYPTION_KEY .encode ("utf-8" ))
430- decrypted_json = fernet .decrypt (adapter_metadata_b )
431- decrypted_metadata = json .loads (decrypted_json .decode ("utf-8" ))
432- except Exception as e : # InvalidToken/JSONDecodeError/TypeError/etc.
433- raise ValidationError ("Invalid adapter metadata." ) from e
434-
435- # Validate URLs for this adapter configuration
436- try :
437- _ = AdapterProcessor .validate_adapter_urls (adapter_id , decrypted_metadata )
438- except Exception as e :
439- # Format error message similar to test adapter API
440- adapter_name = decrypted_metadata .get (AdapterKeys .ADAPTER_NAME , "adapter" )
441- error_detail = f"Error testing '{ adapter_name } '. { e !s} "
442- raise ValidationError (error_detail ) from e
443-
424+ if not adapter_id or not adapter_metadata_b :
425+ raise ValidationError ("Missing adapter metadata for validation." )
426+ # Decrypt metadata to get configuration
427+ try :
428+ fernet = Fernet (settings .ENCRYPTION_KEY .encode ("utf-8" ))
429+ decrypted_json = fernet .decrypt (adapter_metadata_b )
430+ decrypted_metadata = json .loads (decrypted_json .decode ("utf-8" ))
431+ if not isinstance (decrypted_metadata , dict ):
432+ raise ValidationError (
433+ "Invalid adapter metadata format: expected JSON object."
434+ )
435+ except Exception as e : # InvalidToken/JSONDecodeError/TypeError/etc.
436+ raise ValidationError ("Invalid adapter metadata." ) from e
437+ # Validate URLs for this adapter configuration
438+ try :
439+ AdapterProcessor .validate_adapter_urls (adapter_id , decrypted_metadata )
440+ except Exception as e :
441+ adapter_name = (
442+ decrypted_metadata .get (AdapterKeys .ADAPTER_NAME , "adapter" )
443+ if isinstance (decrypted_metadata , dict )
444+ else "adapter"
445+ )
446+ error_detail = f"Error testing '{ adapter_name } '. { e !s} "
447+ raise ValidationError (error_detail ) from e
444448 if use_platform_unstract_key :
445449 logger .error ("Processing adapter with platform key" )
446450 serializer = self .get_serializer (adapter , data = request .data , partial = True )
0 commit comments