Ejemplo n.º 1
0
function diaspost_queue_hook(&$a, &$b)
{
    $hostname = $a->get_hostname();
    $qi = q("SELECT * FROM `queue` WHERE `network` = '%s'", dbesc(NETWORK_DIASPORA2));
    if (!count($qi)) {
        return;
    }
    require_once 'include/queue_fn.php';
    foreach ($qi as $x) {
        if ($x['network'] !== NETWORK_DIASPORA2) {
            continue;
        }
        logger('diaspost_queue: run');
        $r = q("SELECT `user`.* FROM `user` LEFT JOIN `contact` on `contact`.`uid` = `user`.`uid`\n\t\t\tWHERE `contact`.`self` = 1 AND `contact`.`id` = %d LIMIT 1", intval($x['cid']));
        if (!count($r)) {
            continue;
        }
        $userdata = $r[0];
        $diaspost_username = get_pconfig($userdata['uid'], 'diaspost', 'diaspost_username');
        $diaspost_password = z_unobscure(get_pconfig($userdata['uid'], 'diaspost', 'diaspost_password'));
        $diaspost_url = get_pconfig($userdata['uid'], 'diaspost', 'diaspost_url');
        $success = false;
        if ($diaspost_url && $diaspost_username && $diaspost_password) {
            require_once "addon/diaspost/diasphp.php";
            logger('diaspost_queue: able to post for user ' . $diaspost_username);
            $z = unserialize($x['content']);
            $post = $z['post'];
            logger('diaspost_queue: post: ' . $post, LOGGER_DATA);
            try {
                logger('diaspost_queue: prepare', LOGGER_DEBUG);
                $conn = new Diasphp($diaspost_url);
                logger('diaspost_queue: try to log in ' . $diaspost_username, LOGGER_DEBUG);
                $conn->login($diaspost_username, $diaspost_password);
                logger('diaspost_queue: try to send ' . $body, LOGGER_DEBUG);
                $conn->post($post, $hostname);
                logger('diaspost_queue: send ' . $userdata['uid'] . ' success', LOGGER_DEBUG);
                $success = true;
                remove_queue_item($x['id']);
            } catch (Exception $e) {
                logger("diaspost_queue: Send " . $userdata['uid'] . " failed: " . $e->getMessage(), LOGGER_DEBUG);
            }
        } else {
            logger('diaspost_queue: send ' . $userdata['uid'] . ' missing username or password', LOGGER_DEBUG);
        }
        if (!$success) {
            logger('diaspost_queue: delayed');
            update_queue_item($x['id']);
        }
    }
}
Ejemplo n.º 2
0
function gnusoc_queue_deliver(&$a, &$b)
{
    $outq = $b['outq'];
    if ($outq['outq_driver'] !== 'slap') {
        return;
    }
    $b['handled'] = true;
    $headers = array('Content-type: application/magic-envelope+xml', 'Content-length: ' . strlen($outq['outq_msg']));
    $counter = 0;
    $result = z_post_url($outq['outq_posturl'], $outq['outq_msg'], $counter, array('headers' => $headers, 'novalidate' => true));
    if ($result['success'] && $result['return_code'] < 300) {
        logger('slap_deliver: queue post success to ' . $outq['outq_posturl'], LOGGER_DEBUG);
        if ($b['base']) {
            q("update site set site_update = '%s', site_dead = 0 where site_url = '%s' ", dbesc(datetime_convert()), dbesc($b['base']));
        }
        q("update dreport set dreport_result = '%s', dreport_time = '%s' where dreport_queue = '%s' limit 1", dbesc('accepted for delivery'), dbesc(datetime_convert()), dbesc($outq['outq_hash']));
        remove_queue_item($outq['outq_hash']);
    } else {
        logger('slap_deliver: queue post returned ' . $result['return_code'] . ' from ' . $outq['outq_posturl'], LOGGER_DEBUG);
        update_queue_item($outq['outq_hash']);
    }
    return;
}
Ejemplo n.º 3
0
function push_queue_deliver(&$a, &$b)
{
    $outq = $b['outq'];
    if ($outq['outq_driver'] !== 'push') {
        return;
    }
    $b['handled'] = true;
    $m = json_decode($outq['outq_msg'], true);
    if ($m) {
        $headers = array("Content-type: application/atom+xml", sprintf("Link: <%s>;rel=hub,<%s>;rel=self", z_root() . '/pubsubhubbub', $m['topic']), "X-Hub-Signature: sha1=" . $m['sig']);
        $counter = 0;
        $result = z_post_url($outq['outq_posturl'], $m['body'], $counter, array('headers' => $headers, 'novalidate' => true));
        if ($result['success'] && $result['return_code'] < 300) {
            logger('push_deliver: queue post success to ' . $outq['outq_posturl'], LOGGER_DEBUG);
            if ($b['base']) {
                q("update site set site_update = '%s', site_dead = 0 where site_url = '%s' ", dbesc(datetime_convert()), dbesc($b['base']));
            }
            q("update dreport set dreport_result = '%s', dreport_time = '%s' where dreport_queue = '%s' limit 1", dbesc('accepted for delivery'), dbesc(datetime_convert()), dbesc($outq['outq_hash']));
            q("update push_subscriber set last_update = '%s' where callback_url = '%s' and topic = '%s'", dbesc(datetime_convert()), dbesc($outq['outq_posturl']), dbesc($m['topic']));
            remove_queue_item($outq['outq_hash']);
        } else {
            logger('push_deliver: queue post returned ' . $result['return_code'] . ' from ' . $outq['outq_posturl'], LOGGER_DEBUG);
            update_queue_item($outq['outq_hash']);
        }
        return;
    }
}
Ejemplo n.º 4
0
function statusnet_queue_deliver(&$a, &$b)
{
    $outq = $b['outq'];
    if ($outq['outq_driver'] !== 'statusnet') {
        return;
    }
    $ckey = get_pconfig($outq['outq_channel'], 'statusnet', 'consumerkey');
    $csecret = get_pconfig($outq['outq_channel'], 'statusnet', 'consumersecret');
    $otoken = get_pconfig($outq['outq_channel'], 'statusnet', 'oauthtoken');
    $osecret = get_pconfig($outq['outq_channel'], 'statusnet', 'oauthsecret');
    if ($ckey && $csecret && $otoken && $osecret) {
        $dent = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret);
        if ($outq['outq_msg']) {
            $result = $dent->post('statuses/update', array('status' => $outq['outq_msg']));
            if ($result->error) {
                logger('Send to GNU social failed: "' . $result->error . '"');
                update_queue_item($outq['outq_hash']);
            } else {
                logger('statusnet_post send, result: ' . print_r($result, true) . "\nmessage: " . $outq['outq_msg'], LOGGER_DEBUG);
                remove_queue_item($outq['outq_hash']);
            }
        }
    }
    $b['handled'] = true;
}
Ejemplo n.º 5
0
function queue_deliver($outq, $immediate = false)
{
    $base = null;
    $h = parse_url($outq['outq_posturl']);
    if ($h) {
        $base = $h['scheme'] . '://' . $h['host'] . ($h['port'] ? ':' . $h['port'] : '');
    }
    if ($base && $base !== z_root() && $immediate) {
        $y = q("select site_update, site_dead from site where site_url = '%s' ", dbesc($base));
        if ($y) {
            if (intval($y[0]['site_dead'])) {
                remove_queue_by_posturl($outq['outq_posturl']);
                logger('dead site ignored ' . $base);
                return;
            }
            if ($y[0]['site_update'] < datetime_convert('UTC', 'UTC', 'now - 1 month')) {
                update_queue_item($outq['outq_hash'], 10);
                logger('immediate delivery deferred for site ' . $base);
                return;
            }
        } else {
            // zot sites should all have a site record, unless they've been dead for as long as
            // your site has existed. Since we don't know for sure what these sites are,
            // call them unknown
            q("insert into site (site_url, site_update, site_dead, site_type) values ('%s','%s',0,%d) ", dbesc($base), dbesc(datetime_convert()), intval($outq['outq_driver'] === 'post' ? SITE_TYPE_NOTZOT : SITE_TYPE_UNKNOWN));
        }
    }
    $arr = array('outq' => $outq, 'base' => $base, 'handled' => false, 'immediate' => $immediate);
    call_hooks('queue_deliver', $arr);
    if ($arr['handled']) {
        return;
    }
    // "post" queue driver - used for diaspora and friendica-over-diaspora communications.
    if ($outq['outq_driver'] === 'post') {
        $result = z_post_url($outq['outq_posturl'], $outq['outq_msg']);
        if ($result['success'] && $result['return_code'] < 300) {
            logger('deliver: queue post success to ' . $outq['outq_posturl'], LOGGER_DEBUG);
            if ($base) {
                q("update site set site_update = '%s', site_dead = 0 where site_url = '%s' ", dbesc(datetime_convert()), dbesc($base));
            }
            q("update dreport set dreport_result = '%s', dreport_time = '%s' where dreport_queue = '%s' limit 1", dbesc('accepted for delivery'), dbesc(datetime_convert()), dbesc($outq['outq_hash']));
            remove_queue_item($outq['outq_hash']);
            // server is responding - see if anything else is going to this destination and is piled up
            // and try to send some more. We're relying on the fact that delivery_loop() results in an
            // immediate delivery otherwise we could get into a queue loop.
            if (!$immediate) {
                $x = q("select outq_hash from outq where outq_posturl = '%s' and outq_delivered = 0", dbesc($outq['outq_posturl']));
                $piled_up = array();
                if ($x) {
                    foreach ($x as $xx) {
                        $piled_up[] = $xx['outq_hash'];
                    }
                }
                if ($piled_up) {
                    delivery_loop($piled_up);
                }
            }
        } else {
            logger('deliver: queue post returned ' . $result['return_code'] . ' from ' . $outq['outq_posturl'], LOGGER_DEBUG);
            update_queue_item($outq['outq_posturl']);
        }
        return;
    }
    // normal zot delivery
    logger('deliver: dest: ' . $outq['outq_posturl'], LOGGER_DEBUG);
    $result = zot_zot($outq['outq_posturl'], $outq['outq_notify']);
    if ($result['success']) {
        logger('deliver: remote zot delivery succeeded to ' . $outq['outq_posturl']);
        zot_process_response($outq['outq_posturl'], $result, $outq);
    } else {
        logger('deliver: remote zot delivery failed to ' . $outq['outq_posturl']);
        logger('deliver: remote zot delivery fail data: ' . print_r($result, true), LOGGER_DATA);
        update_queue_item($outq['outq_hash'], 10);
    }
    return;
}