| | |
| | | if ($this->smime_driver) |
| | | return; |
| | | |
| | | // NOT IMPLEMENTED! |
| | | return; |
| | | |
| | | $driver = 'enigma_driver_' . $this->rc->config->get('enigma_smime_driver', 'phpssl'); |
| | | $username = $this->rc->user->get_username(); |
| | | |
| | |
| | | |
| | | fclose($fh); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Handler for PGP/MIME signed message. |
| | | * Verifies signature. |
| | |
| | | */ |
| | | private function parse_pgp_signed(&$p) |
| | | { |
| | | $this->load_pgp_driver(); |
| | | $struct = $p['structure']; |
| | | |
| | | // Verify signature |
| | | if ($this->rc->action == 'show' || $this->rc->action == 'preview') { |
| | | $this->load_pgp_driver(); |
| | | $struct = $p['structure']; |
| | | |
| | | $msg_part = $struct->parts[0]; |
| | | $sig_part = $struct->parts[1]; |
| | | |
| | | |
| | | // Get bodies |
| | | $this->set_part_body($msg_part, $p['object']->uid); |
| | | $this->set_part_body($sig_part, $p['object']->uid); |
| | |
| | | */ |
| | | private function parse_smime_signed(&$p) |
| | | { |
| | | $this->load_smime_driver(); |
| | | // Verify signature |
| | | if ($this->rc->action == 'show' || $this->rc->action == 'preview') { |
| | | $this->load_smime_driver(); |
| | | |
| | | $struct = $p['structure']; |
| | | $msg_part = $struct->parts[0]; |
| | | |
| | | // Verify |
| | | $sig = $this->smime_driver->verify($struct, $p['object']); |
| | | |
| | | // Store signature data for display |
| | | $this->signatures[$struct->mime_id] = $sig; |
| | | |
| | | // Message can be multipart (assign signature to each subpart) |
| | | if (!empty($msg_part->parts)) { |
| | | foreach ($msg_part->parts as $part) |
| | | $this->signed_parts[$part->mime_id] = $struct->mime_id; |
| | | } |
| | | else { |
| | | $this->signed_parts[$msg_part->mime_id] = $struct->mime_id; |
| | | } |
| | | |
| | | // Remove signature file from attachments list |
| | | unset($struct->parts[1]); |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | $this->load_pgp_driver(); |
| | | $part = $p['structure']; |
| | | |
| | | |
| | | // Get body |
| | | $this->set_part_body($part, $p['object']->uid); |
| | | |
| | | // Decrypt |
| | | // Decrypt |
| | | $result = $this->pgp_decrypt($part->body); |
| | | |
| | | |
| | | // Store decryption status |
| | | $this->decryptions[$part->mime_id] = $result; |
| | | |
| | | |
| | | // Parse decrypted message |
| | | if ($result === true) { |
| | | // @TODO |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Handler for PGP/MIME encrypted message. |
| | | * |
| | |
| | | */ |
| | | private function parse_smime_encrypted(&$p) |
| | | { |
| | | $this->load_smime_driver(); |
| | | // $this->load_smime_driver(); |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | // @TODO: Handle big bodies using (temp) files |
| | | // @TODO: caching of verification result |
| | | |
| | | $sig = $this->pgp_driver->verify($msg_body, $sig_body); |
| | | $sig = $this->pgp_driver->verify($msg_body, $sig_body); |
| | | |
| | | if (($sig instanceof enigma_error) && $sig->getCode() != enigma_error::E_KEYNOTFOUND) |
| | | rcube::raise_error(array( |
| | | if (($sig instanceof enigma_error) && $sig->getCode() != enigma_error::E_KEYNOTFOUND) |
| | | rcube::raise_error(array( |
| | | 'code' => 600, 'type' => 'php', |
| | | 'file' => __FILE__, 'line' => __LINE__, |
| | | 'message' => "Enigma plugin: " . $error->getMessage() |
| | | 'message' => "Enigma plugin: " . $sig->getMessage() |
| | | ), true, false); |
| | | |
| | | //print_r($sig); |
| | | return $sig; |
| | | } |
| | | |
| | |
| | | { |
| | | // @TODO: Handle big bodies using (temp) files |
| | | // @TODO: caching of verification result |
| | | |
| | | $key = ''; $pass = ''; // @TODO |
| | | $result = $this->pgp_driver->decrypt($msg_body, $key, $pass); |
| | | |
| | | //print_r($result); |
| | | |
| | | if ($result instanceof enigma_error) { |
| | | $err_code = $result->getCode(); |
| | |
| | | { |
| | | $this->load_pgp_driver(); |
| | | $result = $this->pgp_driver->list_keys($pattern); |
| | | |
| | | |
| | | if ($result instanceof enigma_error) { |
| | | rcube::raise_error(array( |
| | | 'code' => 600, 'type' => 'php', |
| | |
| | | 'message' => "Enigma plugin: " . $result->getMessage() |
| | | ), true, false); |
| | | } |
| | | |
| | | |
| | | return $result; |
| | | } |
| | | |
| | |
| | | $uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_POST); |
| | | $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_POST); |
| | | $mime_id = rcube_utils::get_input_value('_part', rcube_utils::INPUT_POST); |
| | | $storage = $this->rc->get_storage(); |
| | | |
| | | if ($uid && $mime_id) { |
| | | $part = $this->rc->storage->get_message_part($uid, $mime_id); |
| | | $storage->set_folder($mbox); |
| | | $part = $storage->get_message_part($uid, $mime_id); |
| | | } |
| | | |
| | | if ($part && is_array($result = $this->import_key($part))) { |
| | |
| | | $part->body = $this->rc->storage->get_message_part( |
| | | $uid, $part->mime_id, $part); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Adds CSS style file to the page header. |
| | | */ |
| | | private function add_css() |
| | | { |
| | | $skin = $this->rc->config->get('skin'); |
| | | if (!file_exists($this->home . "/skins/$skin/enigma.css")) |
| | | $skin = 'default'; |
| | | |
| | | $this->include_stylesheet("skins/$skin/enigma.css"); |
| | | } |
| | | } |