function ajax_pingserver() { $server = new HubbubServer($_REQUEST['server'], true); $reload = '<script> setTimeout("reload_'.md5($_REQUEST['server']).'()", 2000); </script>'; if($server->isTrusted()) { ?><span class="green"> <?= htmlspecialchars($_REQUEST['url']) ?> </span><? } else if($server->isWaitingForKey()) { ?><?= htmlspecialchars($_REQUEST['url']) ?><div class="gray"> waiting for response... </div><?= $reload ?><? } else { $res = $server->msg_trust_sendkey1(); if($res['result'] == 'OK') { ?><?= htmlspecialchars($_REQUEST['url']) ?><div class="gray"> exchanging credentials... </div><?= $reload ?><? } else { ?><div class="red"> ✘ <a class="red" title="<?= htmlspecialchars(getDefault($res['reason'], 'no connection')) ?>"><?= htmlspecialchars($_REQUEST['url']) ?></a> </div><? } } }
function pollFeed($serverObj, $time) { $pollMsg = new HubbubMessage('feed_poll'); $pollMsg->author(HubbubServer::localEntity()); $pollMsg->data['last'] = $time; $pollMsg->sendToUrl($serverObj->ds['s_url']); return($pollMsg->responseData); }
/** * On-receive event handler * * Gets called when this server (A) receives a trust_sendkey1 message from another server (B). * Usually this means, server (B) wants to establish contact for the first time or it wants * to revoke its existing key. In both cases, the key can only be accepted when this server (A) * contacts server (B) to confirm the origin of the trust_sendkey1 message. * * @param array $data * @param object $msg * @return boolean */ function trust_sendkey1_receive(&$data, &$msg) { $data['mykey'] = trim($data['mykey']); $serverUrl = getDefault($data['author']['server']); if ($serverUrl == '') { $msg->fail('invalid server field in "author" array'); } if ($data['mykey'] == '') { $msg->fail('"mykey" field missing'); } else { // accept the new key (it's not confirmed yet) $server = new HubbubServer($serverUrl, true); $server->ds['s_newkey_out'] = $data['mykey']; $server->ds['s_key_in'] = getDefault($server->ds['s_key_in'], randomHashId()); DB_UpdateField('servers', $server->ds['s_key'], 's_key_in', $server->ds['s_key_in']); logError('notrace', 'received temp outbound key: ' . $data['mykey'] . ' /// ' . dumpArray($server->ds)); // now, get origin confirmation $confirmMsg = new HubbubMessage('trust_sendkey2'); $confirmMsg->author($server->localEntity()); $confirmMsg->owner($server->entity()); $confirmMsg->data['mykey'] = $server->ds['s_key_in']; $responseData = $confirmMsg->sendtourl($server->ds['s_url'], $server->ds['s_newkey_out']); if ($responseData['result'] == 'OK') { /* we need to reload, because the server record might have changed in the meantime */ $server = new HubbubServer($serverUrl, true); // okay, the remote server really sent the original message $server->ds['s_key_out'] = $server->ds['s_newkey_out']; $server->ds['s_status'] = 'OK'; DB_UpdateField('servers', $server->ds['s_key'], 's_key_out', $data['mykey']); $msg->ok(); } else { // this didn't work $server->ds['s_newkey_out'] = ''; $msg->fail('unsuccessful trust_sendkey2: ' . $responseData['reason']); } } return true; }
$results = array(); $url = HubbubEndpoint::urlUnify($_REQUEST['q']); $url_res = $this->model->loadUrl($url); $GLOBALS['group.options'] = array('<option value="0">Select...</option>'); foreach($this->model->getMyGroups() as $grp) $GLOBALS['group.options'][] = '<option value="'.$grp['lg_key'].'">'.$grp['lg_name'].'</option>'; if($url_res['result'] == 'OK') { if($url_res['url'] == '') $url_res['url'] = $url; else $url_res['url'] = HubbubEndpoint::urlUnify($url_res['url']); if(trim($url_res['server']) != '' && trim($url_res['user']) != '') { $server = new HubbubServer($url_res['server']); if(!$server->isTrusted()) $server->msg_trust_sendkey1(); $url_res['server_trusted'] = $server->isTrusted(); $results[] = $url_res; } } if(sizeof($results) == 0) { ?><div class="fail"> <?php echo l10n('friend.notfound'); ?> </div><? } else
tsection('Message Basic'); $p = new HubbubMessage('friend_request'); tlog($p->data['msgid'] != '', 'HubbubMessage::create(friend_request '.$p->data['msgid'].')', 'OK', 'msgid failure'); $p->author($ne1->ds); $p->owner($ne2->ds); $p->sanitizeDataset(); // to se if sanitizeDataset() corrupts entries $p->sanitizeDataset(); tlog($p->authorEntity->ds['_key'] > 0, 'HubbubMessage->authorEntity key', 'OK ('.$p->authorEntity->ds['_key'].')', 'no key assigned'); tlog($p->authorEntity->ds['user'] == $p->data['author']['user'], 'HubbubMessage->authorEntity username', 'OK', 'not assigned'); tlog($p->ownerEntity->ds['_key'] > 0, 'HubbubMessage->ownerEntity', 'OK ('.$p->ownerEntity->ds['_key'].')', 'no key assigned'); tlog($p->ownerEntity->ds['user'] == $p->data['owner']['user'], 'HubbubMessage->ownerEntity username', 'OK', 'not assigned'); tlog($p->data['owner']['server'] != '', 'HubbubMessage->ownerEntity server', 'OK', 'not assigned'); $toServer = new HubbubServer($p->ownerEntity->ds['server']); tlog($toServer->ds['s_key'] > 0, 'HubbubServer::new('.$p->ownerEntity->ds['server'].')', 'OK ('.$toServer->ds['s_key'].')', 'not loaded'); tlog($toServer->outboundKey() != '', 'HubbubServer->outboundKey()', 'OK ('.$toServer->outboundKey().')', 'not found'); tlog($toServer->inboundKey() != '', 'HubbubServer->inboundKey()', 'OK ('.$toServer->inboundKey().')', 'not found'); $p->signForServer($toServer); tlog($p->signature == md5($toServer->outboundKey().$p->payload), 'HubbubMessage::signForServer('.$p->ownerEntity->ds['server'].')', 'OK ('.$p->signature.')', 'invalid signature'); tlog($p->validateSignature(), 'HubbubMessage->validateSignature(valid)', 'OK', 'failure'); $p->signature = md5($p->signature); $GLOBALS['nolog'] = true; // disable logging, because we'll trigger an error here tlog(!$p->validateSignature(), 'HubbubMessage->validateSignature(invalid)', 'OK', 'failure'); $GLOBALS['nolog'] = false; $p->signForServer($toServer); $r = new HubbubMessage(); $r->receive($p->payload, $p->signature); tlog($r->validateSignature(), 'HubbubMessage->receive() signature', 'OK', 'failure ('.$p->expectedSignature.')');