示例#1
0
	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><?
      }
    }
  }
示例#2
0
 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);
 }
示例#3
0
/**
 * 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;
}
示例#4
0
  $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
示例#5
0
  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.')');