You are here

public static function WebformSignature::isSignatureValid in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/Element/WebformSignature.php \Drupal\webform\Element\WebformSignature::isSignatureValid()

Determine that signature PNG is valid.

Parameters

string $value: Upload base64 png image.

Return value

bool TRUE if signature PNG is valid.

3 calls to WebformSignature::isSignatureValid()
WebformSignature::getImageUrl in src/Plugin/WebformElement/WebformSignature.php
Get a signature element's image URL.
WebformSignature::validateWebformSignature in src/Element/WebformSignature.php
Webform element validation handler for #type 'signature'.
webform_update_8192 in includes/webform.install.update.inc
Unsafe HMAC construction.

File

src/Element/WebformSignature.php, line 107

Class

WebformSignature
Provides a webform element for entering a signature.

Namespace

Drupal\webform\Element

Code

public static function isSignatureValid($value) {
  if (empty($value)) {
    return TRUE;
  }

  // Make sure the signature is a png.
  if (strpos($value, 'data:image/png;base64,') !== 0) {
    return FALSE;
  }

  // Make sure signature's image size can be read.

  /** @var \Drupal\Core\File\FileSystemInterface $file_system */
  $file_system = \Drupal::service('file_system');
  $temp_image = $file_system
    ->tempnam('temporary://', 'webform_signature_');
  $encoded_image = explode(',', $value)[1];
  $decoded_image = base64_decode($encoded_image);
  file_put_contents($temp_image, $decoded_image);
  $image_size = getimagesize($temp_image);
  if (!$image_size) {
    return FALSE;
  }

  // Make sure signature is not larger than a 500 kb.
  if (filesize($temp_image) > 500000) {
    return FALSE;
  }

  // Make sure the signature contains no colors.
  $image = imagecreatefrompng($temp_image);
  $number_of_colors = imagecolorstotal($image);
  imagedestroy($image);
  if ($number_of_colors > 0) {
    return FALSE;
  }
  return TRUE;
}