}
/**
- * Covert this exception into a response.
+ * Convert this exception into a response.
+ * We add a manual data conversion to UTF8 to ensure any binary data is presentable as a JSON string.
*/
public function render(): JsonResponse
{
- return response()->json($this->data);
+ $cleaned = mb_convert_encoding($this->data, 'UTF-8');
+
+ return response()->json($cleaned);
}
}
public function test_dump_user_details_option_works()
{
- config()->set(['services.ldap.dump_user_details' => true]);
+ config()->set(['services.ldap.dump_user_details' => true, 'services.ldap.thumbnail_attribute' => 'jpegphoto']);
$this->commonLdapMocks(1, 1, 1, 1, 1);
$this->mockLdap->shouldReceive('searchAndGetEntries')->times(1)
->andReturn(['count' => 1, 0 => [
'uid' => [$this->mockUser->name],
'cn' => [$this->mockUser->name],
+ // Test dumping binary data for avatar responses
+ 'jpegphoto' => base64_decode('/9j/4AAQSkZJRg=='),
'dn' => ['dc=test' . config('services.ldap.base_dn')],
]]);