| <?php |
| /******************************************************************************* |
| * Copyright (c) 2014 Eclipse Foundation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Christopher Guindon (Eclipse Foundation) - Initial implementation |
| *******************************************************************************/ |
| |
| require_once("/home/data/httpd/eclipse-php-classes/system/captchacode.php"); |
| |
| class ReCaptchaMailHide { |
| |
| private $pubkey = ""; |
| |
| private $privkey = ""; |
| |
| function __construct() { |
| $this->pubkey = RECAPTCHA_MAILHIDE_PUBKEY; |
| $this->privkey = RECAPTCHA_MAILHIDE_PRIVKEY; |
| } |
| |
| /** |
| * Gets html to display an email address given a public an private key. |
| * to get a key, go to: |
| * |
| * http://www.google.com/recaptcha/mailhide/apikey |
| * |
| * @param string $email |
| * @return string |
| */ |
| public function get_mailhide_html($email) { |
| $emailparts = $this->_mailhide_email_parts($email); |
| $url = $this->get_mailhide_url($email); |
| |
| return htmlentities($emailparts[0]) . "<a href='" . htmlentities($url) . |
| "' onclick=\"window.open('" . htmlentities($url) . "', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;\" title=\"Reveal this e-mail address\">...</a>@" . htmlentities($emailparts[1]); |
| } |
| |
| /** |
| * Gets the reCAPTCHA Mailhide url for a given email |
| * |
| * @param string $email |
| * @return string url |
| */ |
| public function get_mailhide_url($email = "") { |
| if ($this->pubkey == '' || $this->pubkey == null || $this->privkey == "" || $this->privkey == null) { |
| die ("To use reCAPTCHA Mailhide, you have to sign up for a public and private key, " . |
| "you can do so at <a href='http://www.google.com/recaptcha/mailhide/apikey'>http://www.google.com/recaptcha/mailhide/apikey</a>"); |
| } |
| |
| $ky = pack('H*', $this->privkey); |
| $cryptmail = $this->_aes_encrypt($email, $ky); |
| |
| return "http://www.google.com/recaptcha/mailhide/d?k=" . $this->pubkey . "&c=" . $this->_mailhide_urlbase64($cryptmail); |
| } |
| |
| /** |
| * Prepare value for encryption. |
| * |
| * @param string $val |
| * @return string |
| */ |
| protected function _aes_pad($val = "") { |
| $block_size = 16; |
| $numpad = $block_size - (strlen ($val) % $block_size); |
| return str_pad($val, strlen ($val) + $numpad, chr($numpad)); |
| } |
| |
| /** |
| * Encrypt value with mcrypt_encrypt(). |
| * |
| * @param string $val |
| * @param string $ky |
| * |
| * @return string |
| */ |
| private function _aes_encrypt($val = "", $ky = "") { |
| if (!function_exists ("mcrypt_encrypt")) { |
| die ("To use reCAPTCHA Mailhide, you need to have the mcrypt php module installed."); |
| } |
| $mode = MCRYPT_MODE_CBC; |
| $enc = MCRYPT_RIJNDAEL_128; |
| $val = $this->_aes_pad($val); |
| |
| return mcrypt_encrypt($enc, $ky, $val, $mode, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"); |
| } |
| |
| /** |
| * base64_encode mcrypt_encrypt value. |
| * |
| * @param string $x |
| * |
| * @return string |
| */ |
| private function _mailhide_urlbase64($x = "") { |
| return strtr(base64_encode($x), '+/', '-_'); |
| } |
| |
| /** |
| * Gets the parts of the email to expose to the user. |
| * |
| * eg, given johndoe@example,com return ["john", "example.com"]. |
| * the email is then displayed as john...@example.com |
| * |
| * @param string $email |
| * |
| * @return array |
| */ |
| private function _mailhide_email_parts($email) { |
| $arr = preg_split("/@/", $email); |
| |
| if (strlen ($arr[0]) <= 4) { |
| $arr[0] = substr($arr[0], 0, 1); |
| } else if (strlen($arr[0]) <= 6) { |
| $arr[0] = substr($arr[0], 0, 3); |
| } else { |
| $arr[0] = substr($arr[0], 0, 4); |
| } |
| |
| return $arr; |
| } |
| } |