예제 #1
0
파일: zotfeed.php 프로젝트: Mauru/red
function zotfeed_init(&$a)
{
    $result = array('success' => false);
    $mindate = $_REQUEST['mindate'] ? datetime_convert('UTC', 'UTC', $_REQUEST['mindate']) : '';
    if (!$mindate) {
        $mindate = datetime_convert('UTC', 'UTC', 'now - 1 month');
    }
    if (get_config('system', 'block_public') && !get_account_id() && !remote_user()) {
        $result['message'] = 'Public access denied';
        json_return_and_die($result);
    }
    $observer = $a->get_observer();
    $channel_address = argc() > 1 ? argv(1) : '';
    if ($channel_address) {
        $r = q("select channel_id, channel_name from channel where channel_address = '%s' and not (channel_pageflags & %d) limit 1", dbesc(argv(1)), intval(PAGE_REMOVED));
    } else {
        $x = get_sys_channel();
        if ($x) {
            $r = array($x);
        }
    }
    if (!$r) {
        $result['message'] = 'Channel not found.';
        json_return_and_die($result);
    }
    logger('zotfeed request: ' . $r[0]['channel_name'], LOGGER_DEBUG);
    $result['messages'] = zot_feed($r[0]['channel_id'], $observer['xchan_hash'], $mindate);
    $result['success'] = true;
    json_return_and_die($result);
}
예제 #2
0
 function init()
 {
     $result = array('success' => false);
     $mindate = $_REQUEST['mindate'] ? datetime_convert('UTC', 'UTC', $_REQUEST['mindate']) : '';
     if (!$mindate) {
         $mindate = datetime_convert('UTC', 'UTC', 'now - 14 days');
     }
     if (observer_prohibited()) {
         $result['message'] = 'Public access denied';
         json_return_and_die($result);
     }
     $observer = \App::get_observer();
     $channel_address = argc() > 1 ? argv(1) : '';
     if ($channel_address) {
         $r = q("select channel_id, channel_name from channel where channel_address = '%s' and channel_removed = 0 limit 1", dbesc(argv(1)));
     } else {
         $x = get_sys_channel();
         if ($x) {
             $r = array($x);
         }
         $mindate = datetime_convert('UTC', 'UTC', 'now - 14 days');
     }
     if (!$r) {
         $result['message'] = 'Channel not found.';
         json_return_and_die($result);
     }
     logger('zotfeed request: ' . $r[0]['channel_name'], LOGGER_DEBUG);
     $result['messages'] = zot_feed($r[0]['channel_id'], $observer['xchan_hash'], array('mindate' => $mindate));
     $result['success'] = true;
     json_return_and_die($result);
 }
예제 #3
0
파일: zot.php 프로젝트: 23n/hubzilla
/**
 * @brief Process a message request.
 *
 * If a site receives a comment to a post but finds they have no parent to attach it with, they
 * may send a 'request' packet containing the message_id of the missing parent. This is the handler
 * for that packet. We will create a message_list array of the entire conversation starting with
 * the missing parent and invoke delivery to the sender of the packet.
 *
 * include/deliver.php (for local delivery) and mod/post.php (for web delivery) detect the existence of
 * this 'message_list' at the destination and split it into individual messages which are
 * processed/delivered in order.
 *
 * Called from mod/post.php
 *
 * @param array $data
 * @return array
 */
function zot_process_message_request($data)
{
    $ret = array('success' => false);
    if (!$data['message_id']) {
        $ret['message'] = 'no message_id';
        logger('no message_id');
        return $ret;
    }
    $sender = $data['sender'];
    $sender_hash = make_xchan_hash($sender['guid'], $sender['guid_sig']);
    /*
     * Find the local channel in charge of this post (the first and only recipient of the request packet)
     */
    $arr = $data['recipients'][0];
    $recip_hash = make_xchan_hash($arr['guid'], $arr['guid_sig']);
    $c = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_hash = '%s' limit 1", dbesc($recip_hash));
    if (!$c) {
        logger('recipient channel not found.');
        $ret['message'] .= 'recipient not found.' . EOL;
        return $ret;
    }
    /*
     * fetch the requested conversation
     */
    $messages = zot_feed($c[0]['channel_id'], $sender_hash, array('message_id' => $data['message_id']));
    if ($messages) {
        $env_recips = null;
        $r = q("select * from hubloc where hubloc_hash = '%s' and not hubloc_error and not hubloc_deleted \n\t\t\tgroup by hubloc_sitekey", dbesc($sender_hash));
        if (!$r) {
            logger('no hubs');
            return $ret;
        }
        $hubs = $r;
        $private = array_key_exists('flags', $messages[0]) && in_array('private', $messages[0]['flags']) ? true : false;
        if ($private) {
            $env_recips = array('guid' => $sender['guid'], 'guid_sig' => $sender['guid_sig'], 'hash' => $sender_hash);
        }
        $data_packet = json_encode(array('message_list' => $messages));
        foreach ($hubs as $hub) {
            $hash = random_string();
            /*
             * create a notify packet and drop the actual message packet in the queue for pickup
             */
            $n = zot_build_packet($c[0], 'notify', $env_recips, $private ? $hub['hubloc_sitekey'] : null, $hash, array('message_id' => $data['message_id']));
            q("insert into outq ( outq_hash, outq_account, outq_channel, outq_driver, outq_posturl, outq_async,\n\t\t\t\toutq_created, outq_updated, outq_notify, outq_msg )\n\t\t\t\tvalues ( '%s', %d, %d, '%s', '%s', %d, '%s', '%s', '%s', '%s' )", dbesc($hash), intval($c[0]['channel_account_id']), intval($c[0]['channel_id']), dbesc('zot'), dbesc($hub['hubloc_callback']), intval(1), dbesc(datetime_convert()), dbesc(datetime_convert()), dbesc($n), dbesc($data_packet));
            /*
             * invoke delivery to send out the notify packet
             */
            proc_run('php', 'include/deliver.php', $hash);
        }
    }
    $ret['success'] = true;
    return $ret;
}
예제 #4
0
/**
 * @brief Process a message request.
 *
 * If a site receives a comment to a post but finds they have no parent to attach it with, they
 * may send a 'request' packet containing the message_id of the missing parent. This is the handler
 * for that packet. We will create a message_list array of the entire conversation starting with
 * the missing parent and invoke delivery to the sender of the packet.
 *
 * include/deliver.php (for local delivery) and mod/post.php (for web delivery) detect the existence of
 * this 'message_list' at the destination and split it into individual messages which are
 * processed/delivered in order.
 *
 * Called from mod/post.php
 *
 * @param array $data
 * @return array
 */
function zot_reply_message_request($data)
{
    $ret = array('success' => false);
    if (!$data['message_id']) {
        $ret['message'] = 'no message_id';
        logger('no message_id');
        json_return_and_die($ret);
    }
    $sender = $data['sender'];
    $sender_hash = make_xchan_hash($sender['guid'], $sender['guid_sig']);
    /*
     * Find the local channel in charge of this post (the first and only recipient of the request packet)
     */
    $arr = $data['recipients'][0];
    $recip_hash = make_xchan_hash($arr['guid'], $arr['guid_sig']);
    $c = q("select * from channel left join xchan on channel_hash = xchan_hash where channel_hash = '%s' limit 1", dbesc($recip_hash));
    if (!$c) {
        logger('recipient channel not found.');
        $ret['message'] .= 'recipient not found.' . EOL;
        json_return_and_die($ret);
    }
    /*
     * fetch the requested conversation
     */
    $messages = zot_feed($c[0]['channel_id'], $sender_hash, array('message_id' => $data['message_id']));
    if ($messages) {
        $env_recips = null;
        $r = q("select * from hubloc where hubloc_hash = '%s' and hubloc_error = 0 and hubloc_deleted = 0 \n\t\t\tgroup by hubloc_sitekey", dbesc($sender_hash));
        if (!$r) {
            logger('no hubs');
            json_return_and_die($ret);
        }
        $hubs = $r;
        $private = array_key_exists('flags', $messages[0]) && in_array('private', $messages[0]['flags']) ? true : false;
        if ($private) {
            $env_recips = array('guid' => $sender['guid'], 'guid_sig' => $sender['guid_sig'], 'hash' => $sender_hash);
        }
        $data_packet = json_encode(array('message_list' => $messages));
        foreach ($hubs as $hub) {
            $hash = random_string();
            /*
             * create a notify packet and drop the actual message packet in the queue for pickup
             */
            $n = zot_build_packet($c[0], 'notify', $env_recips, $private ? $hub['hubloc_sitekey'] : null, $hash, array('message_id' => $data['message_id']));
            queue_insert(array('hash' => $hash, 'account_id' => $c[0]['channel_account_id'], 'channel_id' => $c[0]['channel_id'], 'posturl' => $hub['hubloc_callback'], 'notify' => $n, 'msg' => $data_packet));
            /*
             * invoke delivery to send out the notify packet
             */
            Zotlabs\Daemon\Master::Summon(array('Deliver', $hash));
        }
    }
    $ret['success'] = true;
    json_return_and_die($ret);
}