encrypt diaspora_meta since it may contain private message contents

This commit is contained in:
friendica 2014-09-10 19:02:00 -07:00
parent 6ab21b3d4f
commit de89bdc45f
3 changed files with 47 additions and 19 deletions

View File

@ -263,10 +263,19 @@ function bb2dmention_callback($match) {
function bb2diaspora_itembody($item) { function bb2diaspora_itembody($item) {
if($item['diaspora_meta']) { if($item['diaspora_meta']) {
$j = json_decode($item['diaspora_meta'],true); $diaspora_meta = json_decode($item['diaspora_meta'],true);
if($j && $j['body']) { if($diaspora_meta) {
logger('bb2diaspora_itembody: cached '); if(array_key_exists('iv',$diaspora_meta)) {
return $j['body']; $key = get_config('system','prvkey');
$meta = json_decode(crypto_unencapsulate($diaspora_meta,$key),true);
}
else {
$meta = $diaspora_meta;
}
if($meta) {
logger('bb2diaspora_itembody: cached ');
return $meta['body'];
}
} }
} }

View File

@ -1364,8 +1364,10 @@ function diaspora_comment($importer,$xml,$msg) {
$datarray['app'] = 'Diaspora'; $datarray['app'] = 'Diaspora';
if(! $parent_author_signature) { if(! $parent_author_signature) {
$datarray['diaspora_meta'] = array('signer' => $diaspora_handle, 'body' => $text, $key = get_config('system','pubkey');
'signed_text' => $signed_data, 'signature' => base64_encode($author_signature)); $x = array('signer' => $diaspora_handle, 'body' => $text,
'signed_text' => $signed_data, 'signature' => base64_encode($author_signature));
$datarray['diaspora_meta'] = json_encode(crypto_encapsulate(json_encode($x),$key));
} }
$result = item_store($datarray); $result = item_store($datarray);
@ -1934,8 +1936,10 @@ function diaspora_like($importer,$xml,$msg) {
$arr['object'] = $object; $arr['object'] = $object;
if(! $parent_author_signature) { if(! $parent_author_signature) {
$datarray['diaspora_meta'] = array('signer' => $diaspora_handle, 'body' => $text, $key = get_config('system','pubkey');
'signed_text' => $signed_data, 'signature' => base64_encode($author_signature)); $x = array('signer' => $diaspora_handle, 'body' => $text,
'signed_text' => $signed_data, 'signature' => base64_encode($author_signature));
$arr['diaspora_meta'] = json_encode(crypto_encapsulate(json_encode($x),$key));
} }
$x = item_store($arr); $x = item_store($arr);
@ -2430,13 +2434,19 @@ function diaspora_send_followup($item,$owner,$contact,$public_batch = false) {
} }
if($item['diaspora_meta'] && ! $like) { if($item['diaspora_meta'] && ! $like) {
$j = json_decode($item['diaspora_meta'],true); $diaspora_meta = json_decode($item['diaspora_meta'],true);
if($j) { if($diaspora_meta) {
$signed_text = $j['signed_text']; if(array_key_exists('iv',$diaspora_meta)) {
$text = $j['body']; $key = get_config('system','prvkey');
$signer = $j['signer']; $meta = json_decode(crypto_unencapsulate($diaspora_meta,$key),true);
$authorsig = $j['signature']; }
else
$meta = $diaspora_meta;
} }
$signed_text = $meta['signed_text'];
$authorsig = $meta['signature'];
$signer = $meta['signer'];
$text = $meta['body'];
} }
else { else {
$text = bb2diaspora_itembody($item); $text = bb2diaspora_itembody($item);
@ -2534,10 +2544,16 @@ function diaspora_send_relay($item,$owner,$contact,$public_batch = false) {
$diaspora_meta = (($item['diaspora_meta']) ? json_decode($item['diaspora_meta'],true) : ''); $diaspora_meta = (($item['diaspora_meta']) ? json_decode($item['diaspora_meta'],true) : '');
if($diaspora_meta) { if($diaspora_meta) {
$sender_signed_text = $diaspora_meta['signed_text']; if(array_key_exists('iv',$diaspora_meta)) {
$authorsig = $diaspora_meta['signature']; $key = get_config('system','prvkey');
$handle = $diaspora_meta['signer']; $meta = json_decode(crypto_unencapsulate($diaspora_meta,$key),true);
$text = $diaspora_meta['body']; }
else
$meta = $diaspora_meta;
$sender_signed_text = $meta['signed_text'];
$authorsig = $meta['signature'];
$handle = $meta['signer'];
$text = $meta['body'];
} }
else else
logger('diaspora_send_relay: original author signature not found'); logger('diaspora_send_relay: original author signature not found');

View File

@ -2394,8 +2394,11 @@ function store_diaspora_comment_sig($datarray, $channel, $parent_item, $post_id)
$x = array('signer' => $diaspora_handle, 'body' => $signed_body, 'signed_text' => $signed_text, 'signature' => base64_encode($authorsig)); $x = array('signer' => $diaspora_handle, 'body' => $signed_body, 'signed_text' => $signed_text, 'signature' => base64_encode($authorsig));
$key = get_config('system','pubkey');
$y = crypto_encapsulate(json_encode($x),$key);
$r = q("update item set diaspora_meta = '%s' where id = %d limit 1", $r = q("update item set diaspora_meta = '%s' where id = %d limit 1",
dbesc(json_encode($x)), dbesc(json_encode($y)),
intval($post_id) intval($post_id)
); );