Some code cleaning, changes to the xml generation
This commit is contained in:
parent
c9100e1102
commit
3e299aa7bf
2 changed files with 114 additions and 79 deletions
|
@ -20,7 +20,7 @@ require_once("include/datetime.php");
|
||||||
*/
|
*/
|
||||||
class diaspora {
|
class diaspora {
|
||||||
|
|
||||||
public static function fetch_relay() {
|
public static function relay_list() {
|
||||||
|
|
||||||
$serverdata = get_config("system", "relay_server");
|
$serverdata = get_config("system", "relay_server");
|
||||||
if ($serverdata == "")
|
if ($serverdata == "")
|
||||||
|
@ -277,13 +277,13 @@ class diaspora {
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (isset($parent_author_signature)) {
|
if (isset($parent_author_signature)) {
|
||||||
$key = self::get_key($msg["author"]);
|
$key = self::key($msg["author"]);
|
||||||
|
|
||||||
if (!rsa_verify($signed_data, $parent_author_signature, $key, "sha256"))
|
if (!rsa_verify($signed_data, $parent_author_signature, $key, "sha256"))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$key = self::get_key($fields->author);
|
$key = self::key($fields->author);
|
||||||
|
|
||||||
return rsa_verify($signed_data, $author_signature, $key, "sha256");
|
return rsa_verify($signed_data, $author_signature, $key, "sha256");
|
||||||
}
|
}
|
||||||
|
@ -295,10 +295,10 @@ class diaspora {
|
||||||
*
|
*
|
||||||
* @return string The public key
|
* @return string The public key
|
||||||
*/
|
*/
|
||||||
private function get_key($handle) {
|
private function key($handle) {
|
||||||
logger("Fetching diaspora key for: ".$handle);
|
logger("Fetching diaspora key for: ".$handle);
|
||||||
|
|
||||||
$r = self::get_person_by_handle($handle);
|
$r = self::person_by_handle($handle);
|
||||||
if($r)
|
if($r)
|
||||||
return $r["pubkey"];
|
return $r["pubkey"];
|
||||||
|
|
||||||
|
@ -312,7 +312,7 @@ class diaspora {
|
||||||
*
|
*
|
||||||
* @return array the queried data
|
* @return array the queried data
|
||||||
*/
|
*/
|
||||||
private function get_person_by_handle($handle) {
|
private function person_by_handle($handle) {
|
||||||
|
|
||||||
$r = q("SELECT * FROM `fcontact` WHERE `network` = '%s' AND `addr` = '%s' LIMIT 1",
|
$r = q("SELECT * FROM `fcontact` WHERE `network` = '%s' AND `addr` = '%s' LIMIT 1",
|
||||||
dbesc(NETWORK_DIASPORA),
|
dbesc(NETWORK_DIASPORA),
|
||||||
|
@ -407,7 +407,33 @@ class diaspora {
|
||||||
return $r;
|
return $r;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function get_contact_by_handle($uid, $handle) {
|
public static function handle_from_contact($contact_id) {
|
||||||
|
$handle = False;
|
||||||
|
|
||||||
|
logger("contact id is ".$contact_id, LOGGER_DEBUG);
|
||||||
|
|
||||||
|
$r = q("SELECT `network`, `addr`, `self`, `url`, `nick` FROM `contact` WHERE `id` = %d",
|
||||||
|
intval($contact_id)
|
||||||
|
);
|
||||||
|
if($r) {
|
||||||
|
$contact = $r[0];
|
||||||
|
|
||||||
|
logger("contact 'self' = ".$contact['self']." 'url' = ".$contact['url'], LOGGER_DEBUG);
|
||||||
|
|
||||||
|
if($contact['addr'] != "")
|
||||||
|
$handle = $contact['addr'];
|
||||||
|
elseif(($contact['network'] === NETWORK_DFRN) || ($contact['self'] == 1)) {
|
||||||
|
$baseurl_start = strpos($contact['url'],'://') + 3;
|
||||||
|
$baseurl_length = strpos($contact['url'],'/profile') - $baseurl_start; // allows installations in a subdirectory--not sure how Diaspora will handle
|
||||||
|
$baseurl = substr($contact['url'], $baseurl_start, $baseurl_length);
|
||||||
|
$handle = $contact['nick'].'@'.$baseurl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function contact_by_handle($uid, $handle) {
|
||||||
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `addr` = '%s' LIMIT 1",
|
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `addr` = '%s' LIMIT 1",
|
||||||
intval($uid),
|
intval($uid),
|
||||||
dbesc($handle)
|
dbesc($handle)
|
||||||
|
@ -459,8 +485,8 @@ class diaspora {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function get_allowed_contact_by_handle($importer, $handle, $is_comment = false) {
|
private function allowed_contact_by_handle($importer, $handle, $is_comment = false) {
|
||||||
$contact = self::get_contact_by_handle($importer["uid"], $handle);
|
$contact = self::contact_by_handle($importer["uid"], $handle);
|
||||||
if (!$contact) {
|
if (!$contact) {
|
||||||
logger("A Contact for handle ".$handle." and user ".$importer["uid"]." was not found");
|
logger("A Contact for handle ".$handle." and user ".$importer["uid"]." was not found");
|
||||||
return false;
|
return false;
|
||||||
|
@ -505,7 +531,7 @@ class diaspora {
|
||||||
|
|
||||||
logger("Trying to fetch item ".$guid." from ".$server, LOGGER_DEBUG);
|
logger("Trying to fetch item ".$guid." from ".$server, LOGGER_DEBUG);
|
||||||
|
|
||||||
$msg = self::fetch_message($guid, $server);
|
$msg = self::message($guid, $server);
|
||||||
|
|
||||||
if (!$msg)
|
if (!$msg)
|
||||||
return false;
|
return false;
|
||||||
|
@ -516,7 +542,7 @@ class diaspora {
|
||||||
return self::dispatch_public($msg);
|
return self::dispatch_public($msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function fetch_message($guid, $server, $level = 0) {
|
private function message($guid, $server, $level = 0) {
|
||||||
|
|
||||||
if ($level > 5)
|
if ($level > 5)
|
||||||
return false;
|
return false;
|
||||||
|
@ -534,10 +560,10 @@ class diaspora {
|
||||||
|
|
||||||
if ($source_xml->post->reshare) {
|
if ($source_xml->post->reshare) {
|
||||||
// Reshare of a reshare - old Diaspora version
|
// Reshare of a reshare - old Diaspora version
|
||||||
return self::fetch_message($source_xml->post->reshare->root_guid, $server, ++$level);
|
return self::message($source_xml->post->reshare->root_guid, $server, ++$level);
|
||||||
} elseif ($source_xml->getName() == "reshare") {
|
} elseif ($source_xml->getName() == "reshare") {
|
||||||
// Reshare of a reshare - new Diaspora version
|
// Reshare of a reshare - new Diaspora version
|
||||||
return self::fetch_message($source_xml->root_guid, $server, ++$level);
|
return self::message($source_xml->root_guid, $server, ++$level);
|
||||||
}
|
}
|
||||||
|
|
||||||
$author = "";
|
$author = "";
|
||||||
|
@ -554,12 +580,12 @@ class diaspora {
|
||||||
|
|
||||||
$msg = array("message" => $x, "author" => $author);
|
$msg = array("message" => $x, "author" => $author);
|
||||||
|
|
||||||
$msg["key"] = self::get_key($msg["author"]);
|
$msg["key"] = self::key($msg["author"]);
|
||||||
|
|
||||||
return $msg;
|
return $msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function fetch_parent_item($uid, $guid, $author, $contact) {
|
private function parent_item($uid, $guid, $author, $contact) {
|
||||||
$r = q("SELECT `id`, `body`, `wall`, `uri`, `private`, `origin`,
|
$r = q("SELECT `id`, `body`, `wall`, `uri`, `private`, `origin`,
|
||||||
`author-name`, `author-link`, `author-avatar`,
|
`author-name`, `author-link`, `author-avatar`,
|
||||||
`owner-name`, `owner-link`, `owner-avatar`
|
`owner-name`, `owner-link`, `owner-avatar`
|
||||||
|
@ -570,7 +596,7 @@ class diaspora {
|
||||||
$result = self::store_by_guid($guid, $contact["url"], $uid);
|
$result = self::store_by_guid($guid, $contact["url"], $uid);
|
||||||
|
|
||||||
if (!$result) {
|
if (!$result) {
|
||||||
$person = self::get_person_by_handle($author);
|
$person = self::person_by_handle($author);
|
||||||
$result = self::store_by_guid($guid, $person["url"], $uid);
|
$result = self::store_by_guid($guid, $person["url"], $uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -592,7 +618,7 @@ class diaspora {
|
||||||
return $r[0];
|
return $r[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
private function get_author_contact_by_url($contact, $person, $uid) {
|
private function author_contact_by_url($contact, $person, $uid) {
|
||||||
|
|
||||||
$r = q("SELECT `id`, `network` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d LIMIT 1",
|
$r = q("SELECT `id`, `network` FROM `contact` WHERE `nurl` = '%s' AND `uid` = %d LIMIT 1",
|
||||||
dbesc(normalise_link($person["url"])), intval($uid));
|
dbesc(normalise_link($person["url"])), intval($uid));
|
||||||
|
@ -636,7 +662,7 @@ class diaspora {
|
||||||
private function receive_account_deletion($importer, $data) {
|
private function receive_account_deletion($importer, $data) {
|
||||||
$author = notags(unxmlify($data->author));
|
$author = notags(unxmlify($data->author));
|
||||||
|
|
||||||
$contact = self::get_contact_by_handle($importer["uid"], $author);
|
$contact = self::contact_by_handle($importer["uid"], $author);
|
||||||
if (!$contact) {
|
if (!$contact) {
|
||||||
logger("cannot find contact for author: ".$author);
|
logger("cannot find contact for author: ".$author);
|
||||||
return false;
|
return false;
|
||||||
|
@ -653,25 +679,25 @@ class diaspora {
|
||||||
$text = unxmlify($data->text);
|
$text = unxmlify($data->text);
|
||||||
$author = notags(unxmlify($data->author));
|
$author = notags(unxmlify($data->author));
|
||||||
|
|
||||||
$contact = self::get_allowed_contact_by_handle($importer, $sender, true);
|
$contact = self::allowed_contact_by_handle($importer, $sender, true);
|
||||||
if (!$contact)
|
if (!$contact)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (self::message_exists($importer["uid"], $guid))
|
if (self::message_exists($importer["uid"], $guid))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$parent_item = self::fetch_parent_item($importer["uid"], $parent_guid, $author, $contact);
|
$parent_item = self::parent_item($importer["uid"], $parent_guid, $author, $contact);
|
||||||
if (!$parent_item)
|
if (!$parent_item)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$person = self::get_person_by_handle($author);
|
$person = self::person_by_handle($author);
|
||||||
if (!is_array($person)) {
|
if (!is_array($person)) {
|
||||||
logger("unable to find author details");
|
logger("unable to find author details");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch the contact id - if we know this contact
|
// Fetch the contact id - if we know this contact
|
||||||
$author_contact = self::get_author_contact_by_url($contact, $person, $importer["uid"]);
|
$author_contact = self::author_contact_by_url($contact, $person, $importer["uid"]);
|
||||||
|
|
||||||
$datarray = array();
|
$datarray = array();
|
||||||
|
|
||||||
|
@ -763,7 +789,7 @@ class diaspora {
|
||||||
$person = $contact;
|
$person = $contact;
|
||||||
$key = $msg["key"];
|
$key = $msg["key"];
|
||||||
} else {
|
} else {
|
||||||
$person = self::get_person_by_handle($msg_author);
|
$person = self::person_by_handle($msg_author);
|
||||||
|
|
||||||
if (is_array($person) && x($person, "pubkey"))
|
if (is_array($person) && x($person, "pubkey"))
|
||||||
$key = $person["pubkey"];
|
$key = $person["pubkey"];
|
||||||
|
@ -852,7 +878,7 @@ class diaspora {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$contact = self::get_allowed_contact_by_handle($importer, $msg["author"], true);
|
$contact = self::allowed_contact_by_handle($importer, $msg["author"], true);
|
||||||
if (!$contact)
|
if (!$contact)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -907,22 +933,17 @@ class diaspora {
|
||||||
|
|
||||||
private function construct_like_object($importer, $parent_item) {
|
private function construct_like_object($importer, $parent_item) {
|
||||||
$objtype = ACTIVITY_OBJ_NOTE;
|
$objtype = ACTIVITY_OBJ_NOTE;
|
||||||
$link = xmlify('<link rel="alternate" type="text/html" href="'.App::get_baseurl()."/display/".$importer["nickname"]."/".$parent_item["id"].'" />'."\n") ;
|
$link = '<link rel="alternate" type="text/html" href="'.App::get_baseurl()."/display/".$importer["nickname"]."/".$parent_item["id"].'" />';
|
||||||
$parent_body = $parent_item["body"];
|
$parent_body = $parent_item["body"];
|
||||||
|
|
||||||
$obj = <<< EOT
|
$xmldata = array("object" => array("type" => $objtype,
|
||||||
|
"local" => "1",
|
||||||
|
"id" => $parent_item["uri"],
|
||||||
|
"link" => $link,
|
||||||
|
"title" => "",
|
||||||
|
"content" => $parent_body));
|
||||||
|
|
||||||
<object>
|
return xml::from_array($xmldata, $xml, true);
|
||||||
<type>$objtype</type>
|
|
||||||
<local>1</local>
|
|
||||||
<id>{$parent_item["uri"]}</id>
|
|
||||||
<link>$link</link>
|
|
||||||
<title></title>
|
|
||||||
<content>$parent_body</content>
|
|
||||||
</object>
|
|
||||||
EOT;
|
|
||||||
|
|
||||||
return $obj;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function receive_like($importer, $sender, $data) {
|
private function receive_like($importer, $sender, $data) {
|
||||||
|
@ -937,25 +958,25 @@ EOT;
|
||||||
if (!in_array($parent_type, array("Post", "Comment")))
|
if (!in_array($parent_type, array("Post", "Comment")))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$contact = self::get_allowed_contact_by_handle($importer, $sender, true);
|
$contact = self::allowed_contact_by_handle($importer, $sender, true);
|
||||||
if (!$contact)
|
if (!$contact)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (self::message_exists($importer["uid"], $guid))
|
if (self::message_exists($importer["uid"], $guid))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$parent_item = self::fetch_parent_item($importer["uid"], $parent_guid, $author, $contact);
|
$parent_item = self::parent_item($importer["uid"], $parent_guid, $author, $contact);
|
||||||
if (!$parent_item)
|
if (!$parent_item)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$person = self::get_person_by_handle($author);
|
$person = self::person_by_handle($author);
|
||||||
if (!is_array($person)) {
|
if (!is_array($person)) {
|
||||||
logger("unable to find author details");
|
logger("unable to find author details");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch the contact id - if we know this contact
|
// Fetch the contact id - if we know this contact
|
||||||
$author_contact = self::get_author_contact_by_url($contact, $person, $importer["uid"]);
|
$author_contact = self::author_contact_by_url($contact, $person, $importer["uid"]);
|
||||||
|
|
||||||
// "positive" = "false" would be a Dislike - wich isn't currently supported by Diaspora
|
// "positive" = "false" would be a Dislike - wich isn't currently supported by Diaspora
|
||||||
// We would accept this anyhow.
|
// We would accept this anyhow.
|
||||||
|
@ -1019,7 +1040,7 @@ EOT;
|
||||||
$author = notags(unxmlify($data->author));
|
$author = notags(unxmlify($data->author));
|
||||||
$conversation_guid = notags(unxmlify($data->conversation_guid));
|
$conversation_guid = notags(unxmlify($data->conversation_guid));
|
||||||
|
|
||||||
$contact = self::get_allowed_contact_by_handle($importer, $author, true);
|
$contact = self::allowed_contact_by_handle($importer, $author, true);
|
||||||
if (!$contact)
|
if (!$contact)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1041,7 +1062,7 @@ EOT;
|
||||||
$body = diaspora2bb($text);
|
$body = diaspora2bb($text);
|
||||||
$message_uri = $author.":".$guid;
|
$message_uri = $author.":".$guid;
|
||||||
|
|
||||||
$person = self::get_person_by_handle($author);
|
$person = self::person_by_handle($author);
|
||||||
if (!$person) {
|
if (!$person) {
|
||||||
logger("unable to find author details");
|
logger("unable to find author details");
|
||||||
return false;
|
return false;
|
||||||
|
@ -1100,7 +1121,7 @@ EOT;
|
||||||
private function receive_profile($importer, $data) {
|
private function receive_profile($importer, $data) {
|
||||||
$author = notags(unxmlify($data->author));
|
$author = notags(unxmlify($data->author));
|
||||||
|
|
||||||
$contact = self::get_contact_by_handle($importer["uid"], $author);
|
$contact = self::contact_by_handle($importer["uid"], $author);
|
||||||
if (!$contact)
|
if (!$contact)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1254,7 +1275,7 @@ EOT;
|
||||||
if (!$author || !$recipient)
|
if (!$author || !$recipient)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
$contact = self::get_contact_by_handle($importer["uid"],$author);
|
$contact = self::contact_by_handle($importer["uid"],$author);
|
||||||
|
|
||||||
if($contact) {
|
if($contact) {
|
||||||
|
|
||||||
|
@ -1265,7 +1286,7 @@ EOT;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$ret = self::get_person_by_handle($author);
|
$ret = self::person_by_handle($author);
|
||||||
|
|
||||||
if (!$ret || ($ret["network"] != NETWORK_DIASPORA)) {
|
if (!$ret || ($ret["network"] != NETWORK_DIASPORA)) {
|
||||||
logger("Cannot resolve diaspora handle ".$author ." for ".$recipient);
|
logger("Cannot resolve diaspora handle ".$author ." for ".$recipient);
|
||||||
|
@ -1295,7 +1316,7 @@ EOT;
|
||||||
|
|
||||||
// find the contact record we just created
|
// find the contact record we just created
|
||||||
|
|
||||||
$contact_record = self::get_contact_by_handle($importer["uid"],$author);
|
$contact_record = self::contact_by_handle($importer["uid"],$author);
|
||||||
|
|
||||||
if (!$contact_record) {
|
if (!$contact_record) {
|
||||||
logger("unable to locate newly created contact record.");
|
logger("unable to locate newly created contact record.");
|
||||||
|
@ -1360,7 +1381,7 @@ EOT;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function get_original_item($guid, $orig_author, $author) {
|
private function original_item($guid, $orig_author, $author) {
|
||||||
|
|
||||||
// Do we already have this item?
|
// Do we already have this item?
|
||||||
$r = q("SELECT `body`, `tag`, `app`, `created`, `object-type`, `uri`, `guid`,
|
$r = q("SELECT `body`, `tag`, `app`, `created`, `object-type`, `uri`, `guid`,
|
||||||
|
@ -1424,14 +1445,14 @@ EOT;
|
||||||
$public = notags(unxmlify($data->public));
|
$public = notags(unxmlify($data->public));
|
||||||
$created_at = notags(unxmlify($data->created_at));
|
$created_at = notags(unxmlify($data->created_at));
|
||||||
|
|
||||||
$contact = self::get_allowed_contact_by_handle($importer, $author, false);
|
$contact = self::allowed_contact_by_handle($importer, $author, false);
|
||||||
if (!$contact)
|
if (!$contact)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (self::message_exists($importer["uid"], $guid))
|
if (self::message_exists($importer["uid"], $guid))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$original_item = self::get_original_item($root_guid, $root_author, $author);
|
$original_item = self::original_item($root_guid, $root_author, $author);
|
||||||
if (!$original_item)
|
if (!$original_item)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1482,7 +1503,7 @@ EOT;
|
||||||
$target_guid = notags(unxmlify($data->target_guid));
|
$target_guid = notags(unxmlify($data->target_guid));
|
||||||
$author = notags(unxmlify($data->author));
|
$author = notags(unxmlify($data->author));
|
||||||
|
|
||||||
$person = self::get_person_by_handle($author);
|
$person = self::person_by_handle($author);
|
||||||
if (!is_array($person)) {
|
if (!is_array($person)) {
|
||||||
logger("unable to find author detail for ".$author);
|
logger("unable to find author detail for ".$author);
|
||||||
return false;
|
return false;
|
||||||
|
@ -1533,7 +1554,7 @@ EOT;
|
||||||
private function receive_retraction($importer, $sender, $data) {
|
private function receive_retraction($importer, $sender, $data) {
|
||||||
$target_type = notags(unxmlify($data->target_type));
|
$target_type = notags(unxmlify($data->target_type));
|
||||||
|
|
||||||
$contact = self::get_contact_by_handle($importer["uid"], $sender);
|
$contact = self::contact_by_handle($importer["uid"], $sender);
|
||||||
if (!$contact) {
|
if (!$contact) {
|
||||||
logger("cannot find contact for sender: ".$sender." and user ".$importer["uid"]);
|
logger("cannot find contact for sender: ".$sender." and user ".$importer["uid"]);
|
||||||
return false;
|
return false;
|
||||||
|
@ -1575,7 +1596,7 @@ EOT;
|
||||||
// print_r($poll);
|
// print_r($poll);
|
||||||
// die("poll!\n");
|
// die("poll!\n");
|
||||||
//}
|
//}
|
||||||
$contact = self::get_allowed_contact_by_handle($importer, $author, false);
|
$contact = self::allowed_contact_by_handle($importer, $author, false);
|
||||||
if (!$contact)
|
if (!$contact)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1652,7 +1673,7 @@ EOT;
|
||||||
* Here come all the functions that are needed to transmit data with the Diaspora protocol *
|
* Here come all the functions that are needed to transmit data with the Diaspora protocol *
|
||||||
*******************************************************************************************/
|
*******************************************************************************************/
|
||||||
|
|
||||||
private function get_my_handle($me) {
|
private function my_handle($me) {
|
||||||
if ($contact["addr"] != "")
|
if ($contact["addr"] != "")
|
||||||
return $contact["addr"];
|
return $contact["addr"];
|
||||||
|
|
||||||
|
@ -1665,7 +1686,7 @@ EOT;
|
||||||
|
|
||||||
logger("Message: ".$msg, LOGGER_DATA);
|
logger("Message: ".$msg, LOGGER_DATA);
|
||||||
|
|
||||||
$handle = self::get_my_handle($user);
|
$handle = self::my_handle($user);
|
||||||
|
|
||||||
$b64url_data = base64url_encode($msg);
|
$b64url_data = base64url_encode($msg);
|
||||||
|
|
||||||
|
@ -1694,7 +1715,7 @@ $magic_env = <<< EOT
|
||||||
</me:env>
|
</me:env>
|
||||||
</diaspora>
|
</diaspora>
|
||||||
EOT;
|
EOT;
|
||||||
|
die($magic_env."\n");
|
||||||
logger("magic_env: ".$magic_env, LOGGER_DATA);
|
logger("magic_env: ".$magic_env, LOGGER_DATA);
|
||||||
return $magic_env;
|
return $magic_env;
|
||||||
}
|
}
|
||||||
|
@ -1720,7 +1741,7 @@ EOT;
|
||||||
$outer_iv = random_string(16);
|
$outer_iv = random_string(16);
|
||||||
$b_outer_iv = base64_encode($outer_iv);
|
$b_outer_iv = base64_encode($outer_iv);
|
||||||
|
|
||||||
$handle = self::get_my_handle($user);
|
$handle = self::my_handle($user);
|
||||||
|
|
||||||
$padded_data = pkcs5_pad($msg,16);
|
$padded_data = pkcs5_pad($msg,16);
|
||||||
$inner_encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $padded_data, MCRYPT_MODE_CBC, $inner_iv);
|
$inner_encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $inner_aes_key, $padded_data, MCRYPT_MODE_CBC, $inner_iv);
|
||||||
|
@ -1740,14 +1761,11 @@ EOT;
|
||||||
$signature = rsa_sign($signable_data,$prvkey);
|
$signature = rsa_sign($signable_data,$prvkey);
|
||||||
$sig = base64url_encode($signature);
|
$sig = base64url_encode($signature);
|
||||||
|
|
||||||
$decrypted_header = <<< EOT
|
$xmldata = array("decrypted_header" => array("iv" => $b_inner_iv,
|
||||||
<decrypted_header>
|
"aes_key" => $b_inner_aes_key,
|
||||||
<iv>$b_inner_iv</iv>
|
"author_id" => $handle));
|
||||||
<aes_key>$b_inner_aes_key</aes_key>
|
|
||||||
<author_id>$handle</author_id>
|
|
||||||
</decrypted_header>
|
|
||||||
EOT;
|
|
||||||
|
|
||||||
|
$decrypted_header = xml::from_array($xmldata, $xml, true);
|
||||||
$decrypted_header = pkcs5_pad($decrypted_header,16);
|
$decrypted_header = pkcs5_pad($decrypted_header,16);
|
||||||
|
|
||||||
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $outer_aes_key, $decrypted_header, MCRYPT_MODE_CBC, $outer_iv);
|
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $outer_aes_key, $decrypted_header, MCRYPT_MODE_CBC, $outer_iv);
|
||||||
|
@ -1765,6 +1783,15 @@ EOT;
|
||||||
"ciphertext" => base64_encode($ciphertext)));
|
"ciphertext" => base64_encode($ciphertext)));
|
||||||
$cipher_json = base64_encode($encrypted_header_json_object);
|
$cipher_json = base64_encode($encrypted_header_json_object);
|
||||||
|
|
||||||
|
$xml = nul;
|
||||||
|
$xmldata = array("diaspora" => array("encrypted_header" => $cipher_json,
|
||||||
|
"me:env" => array("me:encoding" => "base64url",
|
||||||
|
"me:alg" => "RSA-SHA256",
|
||||||
|
"me:data" => $data,
|
||||||
|
"me:sig" => $sig)));
|
||||||
|
$encrypted_header = xml::from_array($xmldata, $xml, true);
|
||||||
|
echo $encrypted_header."\n";
|
||||||
|
|
||||||
$encrypted_header = "<encrypted_header>".$cipher_json."</encrypted_header>";
|
$encrypted_header = "<encrypted_header>".$cipher_json."</encrypted_header>";
|
||||||
|
|
||||||
$magic_env = <<< EOT
|
$magic_env = <<< EOT
|
||||||
|
@ -1779,6 +1806,7 @@ $magic_env = <<< EOT
|
||||||
</me:env>
|
</me:env>
|
||||||
</diaspora>
|
</diaspora>
|
||||||
EOT;
|
EOT;
|
||||||
|
die($magic_env."\n");
|
||||||
|
|
||||||
logger("magic_env: ".$magic_env, LOGGER_DATA);
|
logger("magic_env: ".$magic_env, LOGGER_DATA);
|
||||||
return $magic_env;
|
return $magic_env;
|
||||||
|
@ -1796,7 +1824,7 @@ EOT;
|
||||||
return $slap;
|
return $slap;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function get_signature($owner, $message) {
|
private function signature($owner, $message) {
|
||||||
$sigmsg = $message;
|
$sigmsg = $message;
|
||||||
unset($sigmsg["author_signature"]);
|
unset($sigmsg["author_signature"]);
|
||||||
unset($sigmsg["parent_author_signature"]);
|
unset($sigmsg["parent_author_signature"]);
|
||||||
|
@ -1806,7 +1834,7 @@ EOT;
|
||||||
return base64_encode(rsa_sign($signed_text, $owner["uprvkey"], "sha256"));
|
return base64_encode(rsa_sign($signed_text, $owner["uprvkey"], "sha256"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private function transmit($owner, $contact, $slap, $public_batch, $queue_run=false, $guid = "") {
|
public static function transmit($owner, $contact, $slap, $public_batch, $queue_run=false, $guid = "") {
|
||||||
|
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
|
|
||||||
|
@ -1878,7 +1906,7 @@ die($slap);
|
||||||
|
|
||||||
public static function send_share($owner,$contact) {
|
public static function send_share($owner,$contact) {
|
||||||
|
|
||||||
$message = array("sender_handle" => self::get_my_handle($owner),
|
$message = array("sender_handle" => self::my_handle($owner),
|
||||||
"recipient_handle" => $contact["addr"]);
|
"recipient_handle" => $contact["addr"]);
|
||||||
|
|
||||||
return self::build_and_transmit($owner, $contact, "request", $message);
|
return self::build_and_transmit($owner, $contact, "request", $message);
|
||||||
|
@ -1887,7 +1915,7 @@ die($slap);
|
||||||
public static function send_unshare($owner,$contact) {
|
public static function send_unshare($owner,$contact) {
|
||||||
|
|
||||||
$message = array("post_guid" => $owner["guid"],
|
$message = array("post_guid" => $owner["guid"],
|
||||||
"diaspora_handle" => self::get_my_handle($owner),
|
"diaspora_handle" => self::my_handle($owner),
|
||||||
"type" => "Person");
|
"type" => "Person");
|
||||||
|
|
||||||
return self::build_and_transmit($owner, $contact, "retraction", $message);
|
return self::build_and_transmit($owner, $contact, "retraction", $message);
|
||||||
|
@ -1924,7 +1952,7 @@ die($slap);
|
||||||
dbesc($guid), NETWORK_DFRN, NETWORK_DIASPORA);
|
dbesc($guid), NETWORK_DFRN, NETWORK_DIASPORA);
|
||||||
if ($r) {
|
if ($r) {
|
||||||
$ret= array();
|
$ret= array();
|
||||||
$ret["root_handle"] = diaspora_handle_from_contact($r[0]["contact-id"]);
|
$ret["root_handle"] = self::handle_from_contact($r[0]["contact-id"]);
|
||||||
$ret["root_guid"] = $guid;
|
$ret["root_guid"] = $guid;
|
||||||
return($ret);
|
return($ret);
|
||||||
}
|
}
|
||||||
|
@ -1962,7 +1990,7 @@ die($slap);
|
||||||
|
|
||||||
public static function send_status($item, $owner, $contact, $public_batch = false) {
|
public static function send_status($item, $owner, $contact, $public_batch = false) {
|
||||||
|
|
||||||
$myaddr = self::get_my_handle($owner);
|
$myaddr = self::my_handle($owner);
|
||||||
|
|
||||||
$public = (($item["private"]) ? "false" : "true");
|
$public = (($item["private"]) ? "false" : "true");
|
||||||
|
|
||||||
|
@ -2029,7 +2057,7 @@ die($slap);
|
||||||
|
|
||||||
private function construct_like($item, $owner) {
|
private function construct_like($item, $owner) {
|
||||||
|
|
||||||
$myaddr = self::get_my_handle($owner);
|
$myaddr = self::my_handle($owner);
|
||||||
|
|
||||||
$p = q("SELECT `guid`, `uri`, `parent-uri` FROM `item` WHERE `uri` = '%s' LIMIT 1",
|
$p = q("SELECT `guid`, `uri`, `parent-uri` FROM `item` WHERE `uri` = '%s' LIMIT 1",
|
||||||
dbesc($item["thr-parent"]));
|
dbesc($item["thr-parent"]));
|
||||||
|
@ -2051,7 +2079,7 @@ die($slap);
|
||||||
|
|
||||||
private function construct_comment($item, $owner) {
|
private function construct_comment($item, $owner) {
|
||||||
|
|
||||||
$myaddr = self::get_my_handle($owner);
|
$myaddr = self::my_handle($owner);
|
||||||
|
|
||||||
$p = q("SELECT `guid` FROM `item` WHERE `parent` = %d AND `id` = %d LIMIT 1",
|
$p = q("SELECT `guid` FROM `item` WHERE `parent` = %d AND `id` = %d LIMIT 1",
|
||||||
intval($item["parent"]),
|
intval($item["parent"]),
|
||||||
|
@ -2085,7 +2113,7 @@ die($slap);
|
||||||
if (!$message)
|
if (!$message)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
$message["author_signature"] = self::get_signature($owner, $message);
|
$message["author_signature"] = self::signature($owner, $message);
|
||||||
|
|
||||||
return self::build_and_transmit($owner, $contact, $type, $message, $public_batch, $item["guid"]);
|
return self::build_and_transmit($owner, $contact, $type, $message, $public_batch, $item["guid"]);
|
||||||
}
|
}
|
||||||
|
@ -2115,7 +2143,8 @@ die($slap);
|
||||||
|
|
||||||
$orig_sign = $r[0];
|
$orig_sign = $r[0];
|
||||||
|
|
||||||
// Old way - can be removed for the master branch
|
// Old way - is used by the internal Friendica functions
|
||||||
|
/// @todo Change all signatur storing functions to the new format
|
||||||
if ($orig_sign['signed_text'] AND $orig_sign['signature'] AND $orig_sign['signer']) {
|
if ($orig_sign['signed_text'] AND $orig_sign['signature'] AND $orig_sign['signer']) {
|
||||||
|
|
||||||
// Split the signed text
|
// Split the signed text
|
||||||
|
@ -2163,14 +2192,14 @@ die($slap);
|
||||||
$signed_text = $message["target_guid"].';'.$message["target_type"];
|
$signed_text = $message["target_guid"].';'.$message["target_type"];
|
||||||
$message["parent_author_signature"] = base64_encode(rsa_sign($signed_text, $owner["uprvkey"], "sha256"));
|
$message["parent_author_signature"] = base64_encode(rsa_sign($signed_text, $owner["uprvkey"], "sha256"));
|
||||||
} else
|
} else
|
||||||
$message["parent_author_signature"] = self::get_signature($owner, $message);
|
$message["parent_author_signature"] = self::signature($owner, $message);
|
||||||
|
|
||||||
return self::build_and_transmit($owner, $contact, $type, $message, $public_batch, $item["guid"]);
|
return self::build_and_transmit($owner, $contact, $type, $message, $public_batch, $item["guid"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function send_retraction($item, $owner, $contact, $public_batch = false) {
|
public static function send_retraction($item, $owner, $contact, $public_batch = false) {
|
||||||
|
|
||||||
$myaddr = self::get_my_handle($owner);
|
$myaddr = self::my_handle($owner);
|
||||||
|
|
||||||
// Check whether the retraction is for a top-level post or whether it's a relayable
|
// Check whether the retraction is for a top-level post or whether it's a relayable
|
||||||
if ($item["uri"] !== $item["parent-uri"]) {
|
if ($item["uri"] !== $item["parent-uri"]) {
|
||||||
|
@ -2193,7 +2222,7 @@ die($slap);
|
||||||
|
|
||||||
public static function send_mail($item, $owner, $contact) {
|
public static function send_mail($item, $owner, $contact) {
|
||||||
|
|
||||||
$myaddr = self::get_my_handle($owner);
|
$myaddr = self::my_handle($owner);
|
||||||
|
|
||||||
$r = q("SELECT * FROM `conv` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
$r = q("SELECT * FROM `conv` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||||
intval($item["convid"]),
|
intval($item["convid"]),
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
class xml {
|
class xml {
|
||||||
function from_array($array, &$xml) {
|
function from_array($array, &$xml, $remove_header = false) {
|
||||||
|
|
||||||
if (!is_object($xml)) {
|
if (!is_object($xml)) {
|
||||||
foreach($array as $key => $value) {
|
foreach($array as $key => $value) {
|
||||||
|
@ -14,7 +14,13 @@ class xml {
|
||||||
$dom = dom_import_simplexml($root)->ownerDocument;
|
$dom = dom_import_simplexml($root)->ownerDocument;
|
||||||
$dom->formatOutput = true;
|
$dom->formatOutput = true;
|
||||||
$xml = $dom;
|
$xml = $dom;
|
||||||
return $dom->saveXML();
|
|
||||||
|
$xml_text = $dom->saveXML();
|
||||||
|
|
||||||
|
if ($remove_header)
|
||||||
|
$xml_text = trim(substr($xml_text, 21));
|
||||||
|
|
||||||
|
return $xml_text;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue