| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 | 
							- <?php
 
- /**
 
-  * ElggPG -- Helpers library
 
-  *
 
-  * @package        Lorea
 
-  * @subpackage     ElggPG
 
-  *
 
-  * Copyright 2011-2013 Lorea Faeries <federation@lorea.org>
 
-  *
 
-  * This file is part of the ElggPG plugin for Elgg.
 
-  *
 
-  * ElggPG is free software: you can redistribute it and/or modify it
 
-  * under the terms of the GNU Affero General Public License as
 
-  * published by the Free Software Foundation, either version 3 of the
 
-  * License, or (at your option) any later version.
 
-  *
 
-  * ElggPG is distributed in the hope that it will be useful, but
 
-  * WITHOUT ANY WARRANTY; without even the implied warranty of
 
-  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 
-  * Affero General Public License for more details.
 
-  *
 
-  * You should have received a copy of the GNU Affero General Public
 
-  * License along with this program. If not, see
 
-  * <http://www.gnu.org/licenses/>.
 
-  */
 
- putenv("GNUPGHOME=" . elggpg_get_gpg_home());
 
- function elggpg_get_gpg_home() {
 
- 	// try to find location of settings from environment file,
 
- 	// which means the gpg directory goes at the same level.
 
- 	$elgg_config = getenv("elgg_config");
 
- 	if ($elgg_config && is_dir(dirname($elgg_config)."/gpg")) {
 
- 		return dirname($elgg_config)."/gpg";
 
- 	}
 
- 	// otherwise create a gpg folder at the data folder
 
- 	// and store the keys there
 
- 	$gpg_path = elgg_get_data_path() . "gpg/";
 
- 	if (!file_exists($gpg_path)) {
 
- 		mkdir($gpg_path);
 
- 	}
 
- 	return $gpg_path;
 
- }
 
- function elggpg_import_key($public_key, $user) {
 
- 	$gpg = new gnupg();
 
- 	$info = $gpg->import($public_key);
 
- 	$new_fp = $info['fingerprint'];
 
- 	$user_fp = current(elgg_get_metadata(array(
 
- 		'guid' => $user->guid,
 
- 		'metadata_name' => 'openpgp_publickey',
 
- 	)));
 
- 	$access_id = ACCESS_LOGGED_IN;
 
- 	if ($user_fp && $user_fp->value != $new_fp) {
 
- 		update_metadata($user_fp->id, $user_fp->name, $new_fp, 'text', $user->guid, $access_id);
 
- 		$info['imported'] = 1;
 
- 	} elseif (!$user_fp) {
 
- 		create_metadata($user->guid, "openpgp_publickey", $new_fp, 'text', $user->guid, $access_id);
 
- 		$info['imported'] = 1;
 
- 	}
 
- 	$info['key_id'] = elggpg_fp2keyid($new_fp);
 
- 	return $info;
 
- }
 
- function elggpg_fp2keyid($fp) {
 
- 	return substr($fp, count($fp)-17, 16);
 
- }
 
- function elggpg_import_report($info) {
 
- 	$yes = elgg_echo('option:yes');
 
- 	$no  = elgg_echo('option:no');
 
- 	$search  = "\\n";
 
- 	$replace = "<br />";
 
- 	return str_replace($search, $replace, elgg_echo("elggpg:import:report", array(
 
- 		$info['imported']        ? $yes : $no,
 
- 		$info['unchanged']       ? $yes : $no,
 
- 		$info['newuserids']      ? $yes : $no,
 
- 		$info['newsubkeys']      ? $yes : $no,
 
- 		$info['secretimported']  ? $yes : $no,
 
- 		$info['secretunchanged'] ? $yes : $no,
 
- 		$info['newsignatures']   ? $yes : $no,
 
- 		$info['skippedkeys']     ? $yes : $no,
 
- 	)));
 
- }
 
- function elggpg_export_key($user) {
 
- 	$gpg = new gnupg();
 
- 	return $gpg->export($user->openpgp_publickey);
 
- }
 
- function elggpg_haskey($user) {
 
- 	return $user->openpgp_publickey;
 
- }
 
- function elggpg_keyinfo($user) {
 
- 	$gnupg = new gnupg();
 
- 	$fingerprint = $user->openpgp_publickey;
 
- 	if (!$fingerprint) {
 
- 		return false;
 
- 	}
 
- 	try {
 
- 		$info = $gnupg->keyinfo($fingerprint);
 
- 	} catch (Exception $e) {
 
- 		return false;
 
- 	}
 
- 	$simple_info = array(
 
- 		'name'        => $info[0]['uids'][0]['name'],
 
- 		'comment'     => $info[0]['uids'][0]['comment'],
 
- 		'email'       => $info[0]['uids'][0]['email'],
 
- 		'fingerprint' => $info[0]['subkeys'][0]['fingerprint'],
 
- 		'subkeys'     => array(),
 
- 	);
 
- 	if (strlen($simple_info['fingerprint']) < 1) {
 
- 		return false;
 
- 	}
 
- 	foreach ($info[0]['subkeys'] as $subkey) {
 
- 		if ($subkey['can_encrypt']) {
 
- 			$type = 'encrypt';
 
- 		}
 
- 		if ($subkey['can_sign']) {
 
- 			$type .= 'sign';
 
- 		}
 
- 		$simple_info['subkeys'][] = array(
 
- 			'keyid'   => $subkey['keyid'],
 
- 			'type'    => $type,
 
- 			'created' => $subkey['timestamp'],
 
- 			'expires' => $subkey['expires'],
 
- 		);
 
- 	}
 
- 	return $simple_info;
 
- }
 
- function elggpg_delete_key($user) {
 
- 	if (!$user->openpgp_publickey) {
 
- 		return false;
 
- 	}
 
- 	$count = elgg_get_entities_from_metadata(array(
 
- 		'type' => 'user',
 
- 		'metadata_name' => 'openpgp_publickey',
 
- 		'metadata_value' => $user->openpgp_publickey,
 
- 		'count' => true,
 
- 	));
 
- 	if ($count > 1) {
 
- 		$user->openpgp_publickey = NULL;
 
- 		return true;
 
- 	}
 
- 	$gpg = new gnupg();
 
- 	$info = $gpg->deletekey($user->openpgp_publickey);
 
- 	$user->openpgp_publickey = NULL;
 
- 	return $info;
 
- }
 
- function elggpg_encrypt($body, $user, $force = true) {
 
- 	$already_encrypted = strpos($body, "-----BEGIN PGP MESSAGE-----") !== false;
 
- 	try {
 
- 		if (!$already_encrypted) {
 
- 			$gpg = new gnupg();
 
- 			$gpg->addencryptkey($user->openpgp_publickey);
 
- 			if ($encrbody = $gpg->encrypt($body)) {
 
- 				$body = $encrbody;
 
- 			} elseif ($force) {
 
- 				return false;
 
- 			}
 
- 		}
 
- 	} catch (Exception $e) {
 
- 		if ($force) {
 
- 			return false;
 
- 		}
 
- 	}
 
- 	return $body;
 
- }
 
 
  |