Server IP : 192.64.118.117 / Your IP : 18.116.67.217 Web Server : LiteSpeed System : Linux premium56.web-hosting.com 4.18.0-513.24.1.lve.1.el8.x86_64 #1 SMP Thu May 9 15:10:09 UTC 2024 x86_64 User : thecgapy ( 1160) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/thecgapy/mobilecreationz.com/wp-content/plugins/e-signature/models/ |
Upload File : |
<?php class WP_E_Signature extends WP_E_Model { private $table; public function __construct() { parent::__construct(); $this->table = $this->table_prefix . "signatures"; $this->joinTable = $this->table_prefix . "documents_signatures"; } public function esign_set_json($user_id, $csum_id, $owner_id = false) { $document = new WP_E_Document; // getting document id from csum id . $doc_id = $document->document_id_by_csum($csum_id); if ($owner_id) { $json = $this->getUserSignature($owner_id); } else { $json = $this->getDocumentSignature($user_id, $doc_id); } $file_name = ESIGN_PLUGIN_PATH . '/assets/temps/' . $user_id . '-' . $csum_id . '.txt'; if (!@file_put_contents($file_name, $json)) { $sigfile = @fopen($file_name, "w"); @fwrite($sigfile, $json); fclose($sigfile); } return false; } public function generate_signature_img($user_id, $doc_checksum) { require_once ( ESIGN_PLUGIN_PATH . '/lib/signature-to-image.php'); $data = ''; if (file_exists(ESIGN_PLUGIN_PATH . "/assets/temps/" . $user_id . '-' . $doc_checksum . '.txt')) { $json = @file_get_contents(ESIGN_PLUGIN_PATH . "/assets/temps/" . $user_id . '-' . $doc_checksum . '.txt'); $img = sigJsonToImage($json); ob_start(); // header('Content-type: image/jpeg'); imagepng($img); $data = ob_get_clean(); imagedestroy($img); } return $data; } public function get_local_file_img($url) { $file_url = parse_url($url); $path = $file_url['path']; $file = $_SERVER['DOCUMENT_ROOT'] . $path; $basename = basename($file); if ($basename == 'sigtoimage.php') { parse_str($file_url['query'], $get_array); $user_id = $get_array['uid']; $doc_id = $get_array['doc_id']; return $this->generate_signature_img($user_id, $doc_id); } return false; } public function esig_get_contents($url) { $data = false; $data = $this->get_local_file_img($url); if ($data) { return $data; } if (ini_get('allow_url_fopen')) { $data = @file_get_contents($url); } if (!$data) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); curl_close($ch); } return $data; } public function display_signature($user_id, $check_sum_id, $nonce, $owner_id = false) { $this->esign_set_json($user_id, $check_sum_id, $owner_id); if ($owner_id) { $user_id = $owner_id; } $image_url = (ESIGN_DIRECTORY_URI . 'lib/sigtoimage.php?uid=' . $user_id . '&doc_id=' . $check_sum_id . '&esig_verify=' . $nonce); $image_content = $this->esig_get_contents($image_url); // delete signature files $this->unlink_signature_files($user_id, $check_sum_id); return "data:image/png;base64," . base64_encode($image_content); } public function unlink_signature_files($user_id, $check_sum_id) { $file_name = ESIGN_PLUGIN_PATH . '/assets/temps/' . $user_id . '-' . $check_sum_id . '.txt'; if (file_exists($file_name)) { @unlink($file_name); } // needs to remove after one two release. $previous_file = ESIGN_PLUGIN_PATH . '/assets/' . $user_id . '-' . $check_sum_id . '.txt'; if (file_exists($previous_file)) { @unlink($previous_file); } } /** * Asserts whether or not a user has signed a particular document * * Note: This is an endpoint method when called by User::hasSignedDocument acting as a passtrhu method * * @param $user_id [Integer] * @param $document_id [Integer] * @return Boolean * @since 0.1.0 */ public function userHasSignedDocument($user_id, $document_id) { $result = $this->wpdb->get_var( $this->wpdb->prepare("SELECT count(*) FROM {$this->table} sigs INNER JOIN {$this->joinTable} docs_sigs ON sigs.signature_id = docs_sigs.signature_id WHERE docs_sigs.document_id = %d AND sigs.user_id = %d", $document_id, $user_id) ); if ($result > 0) { return true; } else { return false; } } public function GetSignatureDate($user_id, $document_id) { /* $signature_id = $this->wpdb->get_var( $this->wpdb->prepare("SELECT max(signature_id) FROM {$this->table} WHERE user_id = %d", $user_id) ); */ $signature_id = $this->GetSignatureId($user_id, $document_id); return $this->wpdb->get_var($this->wpdb->prepare("SELECT sign_date FROM {$this->joinTable} WHERE document_id=%d AND signature_id=%d", $document_id, $signature_id)); } public function GetSignatureId($user_id, $document_id) { $signature_details = $this->getDocumentSignatureData($user_id, $document_id); if ($signature_details) { return $signature_details->signature_id; } else { return FALSE; } } public function add($signatureJSON, $user_id, $signature_type = false) { $ip_address = esig_get_ip(); if (!$signature_type) { $signature_type = 'full'; } //$timestamp = time(); $newdoc = new WP_E_Document(); $date = $newdoc->esig_date(); $salt = hash('sha1', mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); // 40 chars $signature_hash = hash('sha256', $signatureJSON); $encrypted_signature = $this->encrypt($salt, $signatureJSON); // echo '<h1>'.$signatureJSON.'</h1>'; $data = array( "user_id" => $user_id, "signature_hash" => $signature_hash, "signature_salt" => $salt, "encrypted_signature" => $encrypted_signature, "signature_added" => $date ); $format = array('%d', '%s', '%s', '%s', '%s'); $this->wpdb->query( $this->wpdb->prepare( "INSERT INTO $this->table (user_id,signature_type,signature_hash,signature_salt, signature_data, signature_added) VALUES(%d,'%s','%s','%s','%s','%s')", $user_id, $signature_type, $signature_hash, $salt, $encrypted_signature, $date ) ); return $this->wpdb->insert_id; } public function save_font_type($document_id, $signer_id, $type) { WP_E_Sig()->meta->add($document_id, 'esig-signature-type-font' . $signer_id, $type); } public function get_font_type($document_id, $signer_id) { $font_type = WP_E_Sig()->meta->get($document_id, 'esig-signature-type-font' . $signer_id); if ($font_type) { return $font_type; } $font_type = WP_E_Sig()->setting->get_generic('esig-signature-type-font' . $signer_id); if ($font_type) { return $font_type; } return '1'; } public function join($document_id, $signature_id) { $newdoc = new WP_E_Document(); $data = array( "document_id" => $document_id, "signature_id" => $signature_id, "ip_address" => esig_get_ip(), "sign_date" => $newdoc->esig_date($document_id) ); if (!$this->hasJoined($document_id, $signature_id)) { $this->wpdb->insert($this->joinTable, $data); return $this->wpdb->insert_id; } return false; } public function encrypt($salt, $data) { $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_DEV_URANDOM); if (empty($iv)) { $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), mt_rand()); } return base64_encode($iv . mcrypt_encrypt(MCRYPT_RIJNDAEL_256, hash('sha256', $salt, true), $data, MCRYPT_MODE_CBC, $iv)); } public function decrypt($salt, $encrypted) { $data = base64_decode($encrypted); $iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC)); if (empty($iv)) { return false; } if (!defined('MCRYPT_MODE_CBC')) { return false; } return rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, hash('sha256', $salt, true), substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC)), MCRYPT_MODE_CBC, $iv ), "\0" ); } # TODO - DEPRECATE this function. Users can have more than one signature in the signatures table. Use this only for document owners public function getSignatureData($user_id) { return $this->wpdb->get_row( $this->wpdb->prepare( "SELECT * FROM " . $this->table . " WHERE user_id=%d ORDER BY signature_id DESC", $user_id ) ); } public function getSignatureData_by_type($user_id, $signature_type) { return $this->wpdb->get_row( $this->wpdb->prepare( "SELECT * FROM " . $this->table . " WHERE user_id=%d and signature_type=%s ORDER BY signature_id DESC", $user_id, $signature_type ) ); } public function getSig_by_type_signatureid($signature_id, $signature_type) { return $this->wpdb->get_row( $this->wpdb->prepare( "SELECT * FROM " . $this->table . " WHERE signature_id=%d and signature_type=%s ORDER BY signature_id DESC", $signature_id, $signature_type ) ); } /** * Given a document_id and user_id, returns that user's signatures for that document. * * @param $user_id [Integer] * @param $document_id [Integer] */ public function getDocumentSignature($user_id, $document_id) { $sig = $this->getDocumentSignatureData($user_id, $document_id); if (!empty($sig)) { //echo '<h1>,'.stripslashes($this->decrypt($sig->signature_salt, $sig->signature_data)).'</h1>'; return stripslashes($this->decrypt($sig->signature_salt, $sig->signature_data)); } } public function getDocumentSignatures($documentID) { return $this->wpdb->get_results( $this->wpdb->prepare( "SELECT * FROM " . $this->table . " s JOIN " . $this->joinTable . " j ON s.signature_id = j.signature_id AND document_id=%d", $documentID ) ); } public function getDocumentSignatureData($user_id, $document_id) { $result = $this->wpdb->get_row( $this->wpdb->prepare("SELECT * FROM {$this->table} sigs INNER JOIN {$this->joinTable} docs_sigs ON sigs.signature_id = docs_sigs.signature_id WHERE docs_sigs.document_id = %d AND sigs.user_id = %d ORDER BY docs_sigs.sign_date DESC", $document_id, $user_id) ); return $result; } public function getDocumentSignature_Type($user_id, $document_id) { $result = $this->wpdb->get_var( $this->wpdb->prepare("SELECT signature_type FROM {$this->table} sigs INNER JOIN {$this->joinTable} docs_sigs ON sigs.signature_id = docs_sigs.signature_id WHERE docs_sigs.document_id = %d AND sigs.user_id = %d ORDER BY docs_sigs.sign_date DESC", $document_id, $user_id) ); return $result; } // Gets the signature for a user. Should only be used for document owner. Signers can have more than one signature. For signers, use getDocumentSignature instead. public function getUserSignature($user_id) { $sig = $this->getSignatureData($user_id); if (!empty($sig)) { return stripslashes($this->decrypt($sig->signature_salt, $sig->signature_data)); } } public function getUserSignature_by_type($user_id, $signature_type) { $sig = $this->getSignatureData_by_type($user_id, $signature_type); if (!empty($sig)) { return stripslashes($this->decrypt($sig->signature_salt, $sig->signature_data)); } } public function getSignature_by_type_sigid($signature_id, $signature_type) { $sig = $this->getSig_by_type_signatureid($signature_id, $signature_type); if (!empty($sig)) { return stripslashes($this->decrypt($sig->signature_salt, $sig->signature_data)); } } // Given a row in the signature table, returns signature data for use in an input field. public function getSignature($sig) { return stripslashes($this->decrypt($sig->signature_salt, $sig->signature_data)); } // return signature by type public function getSignature_by_type($sig) { $signature_type = $sig->signature_type; if ($signature_type != 'typed') { return false; } return esc_html(stripslashes($this->decrypt($sig->signature_salt, $sig->signature_data))); } /** * Return a signature type * * @since 1.1.6 * @param Int ($id) * @return Array */ public function getSignature_type($user_id) { return $this->wpdb->get_var( $this->wpdb->prepare( "SELECT signature_type FROM " . $this->table . " WHERE user_id=%s ORDER BY signature_id DESC", $user_id ) ); } /** * Return a user id * * @since 1.1.6 * @param Int ($id) * @return Array */ public function getuserid_by_signature_id($signature_id) { return $this->wpdb->get_var( $this->wpdb->prepare( "SELECT user_id FROM " . $this->table . " WHERE signature_id=%s ORDER BY signature_id DESC", $signature_id ) ); } /** * Return a signature type * * @since 1.1.6 * @param Int ($id) * @return Array */ public function getSignature_type_signature_id($signature_id) { return $this->wpdb->get_var( $this->wpdb->prepare( "SELECT signature_type FROM " . $this->table . " WHERE signature_id=%s ORDER BY signature_id DESC", $signature_id ) ); } /** * Return a signature type * * @since 1.1.6 * @param Int ($id) * @return Array */ public function getuser_Signature_type($user_id, $document_id) { return $this->wpdb->get_var( $this->wpdb->prepare( "SELECT signature_type FROM " . $this->table . " WHERE user_id=%s ORDER BY signature_id DESC", $user_id ) ); } // Should only be used for document owner. Signers can have more than one signature. public function userHasSignature($user_id) { $count = $this->wpdb->get_var( $this->wpdb->prepare( "SELECT COUNT(*) FROM " . $this->table . " WHERE user_id=%d", $user_id ) ); if ($count > 0) return true; else return false; } public function documentHasSignature($document_id) { $count = $this->wpdb->get_var( $this->wpdb->prepare( "SELECT COUNT(*) FROM " . $this->joinTable . " WHERE document_id=%d", $document_id ) ); if ($count > 0) return true; else return false; } public function hasJoined($document_id, $signatureId) { $count = $this->wpdb->get_var( $this->wpdb->prepare( "SELECT COUNT(*) as cnt FROM " . $this->joinTable . " WHERE document_id=%d&signature_id=%d", $document_id, $signatureId ) ); if ($count > 0) return true; else return false; } }