diff options
author | Mike Macgirvin <mike@macgirvin.com> | 2010-07-08 07:03:25 -0700 |
---|---|---|
committer | Mike Macgirvin <mike@macgirvin.com> | 2010-07-08 07:03:25 -0700 |
commit | 9a6a60a9c1c7f781790849173e309ac0664d7b35 (patch) | |
tree | b0597e8aeaa20d6ded493b2c053e3e976a53115a /include | |
parent | e98aaa3cbd2c14ab2f1b8534c8c63708086fe0f1 (diff) | |
download | volse-hubzilla-9a6a60a9c1c7f781790849173e309ac0664d7b35.tar.gz volse-hubzilla-9a6a60a9c1c7f781790849173e309ac0664d7b35.tar.bz2 volse-hubzilla-9a6a60a9c1c7f781790849173e309ac0664d7b35.zip |
mucho progress on notifier, email style dfrn url's
Diffstat (limited to 'include')
-rw-r--r-- | include/Scrape.php | 24 | ||||
-rw-r--r-- | include/main.js | 12 | ||||
-rw-r--r-- | include/notifier.php | 105 |
3 files changed, 115 insertions, 26 deletions
diff --git a/include/Scrape.php b/include/Scrape.php index cc5015165..b4a5dd849 100644 --- a/include/Scrape.php +++ b/include/Scrape.php @@ -76,5 +76,29 @@ function validate_dfrn($a) { return $errors; }} +if(! function_exists('scrape_meta')) { +function scrape_meta($url) { + $ret = array(); + $s = fetch_url($url); + + if(! $s) + return $ret; + + $dom = HTML5_Parser::parse($s); + + if(! $dom) + return $ret; + $items = $dom->getElementsByTagName('meta'); + + // get DFRN link elements + + foreach($items as $item) { + $x = $item->getAttribute('name'); + if(substr($x,0,5) == "dfrn-") + $ret[$x] = $item->getAttribute('content'); + } + + return $ret; +}} diff --git a/include/main.js b/include/main.js new file mode 100644 index 000000000..4fb92c774 --- /dev/null +++ b/include/main.js @@ -0,0 +1,12 @@ + + function openClose(theID) { + if(document.getElementById(theID).style.display == "block") { + document.getElementById(theID).style.display = "none" + } + else { + document.getElementById(theID).style.display = "block" + } + } + function openMenu(theID) { + document.getElementById(theID).style.display = "block" + } diff --git a/include/notifier.php b/include/notifier.php index d1f26cdc2..e67ef06e3 100644 --- a/include/notifier.php +++ b/include/notifier.php @@ -1,6 +1,5 @@ <?php -echo getcwd(); require_once("boot.php"); $a = new App; @@ -13,11 +12,19 @@ $db = new dba($db_host, $db_user, $db_pass, $db_data, $install); require_once("session.php"); require_once("datetime.php"); -if(($argc != 2) || (! intval($argv[1]))) +// FIXME - generalise for other content, probably create a notify queue in +// the db with type and recipient list + +if(($argc != 3) || (! intval($argv[2]))) exit; + $baseurl = trim(pack("H*" , $argv[1])); + + $item_id = $argv[2]; + $is_parent = false; - $item_id = $argv[1]; + + $recipients = array(); $r = q("SELECT `item`.*, `contact`.*,`item`.`id` AS `item_id` FROM `item` LEFT JOIN `contact` ON `item`.`contact-id` = `contact`.`id` WHERE `item`.`id` = %d LIMIT 1", @@ -28,6 +35,8 @@ if(($argc != 2) || (! intval($argv[1]))) $item = $r[0]; + $recipients[] = $item['contact-id']; + if($item['parent'] == $item['id']) { $is_parent = true; } @@ -39,7 +48,8 @@ if(($argc != 2) || (! intval($argv[1]))) $parent = $r[0]; } - $commenters = array(); + if(is_array($parent)) + $recipients[] = $parent['contact-id']; $r = q("SELECT `contact-id` FROM `item` WHERE `hash` = '%s' AND `id` != %d AND `id` != %d", dbesc($item['hash']), @@ -49,25 +59,27 @@ if(($argc != 2) || (! intval($argv[1]))) if(count($r)) { foreach($r as $rr) { if($rr['contact-id'] != $item['contact-id']) - $commenters[] = $rr['contact-id']; + $recipients[] = $rr['contact-id']; } } $tpl = file_get_contents('view/atomic.tpl'); - + + // FIXME should dump the entire conversation + $atom = replace_macros($tpl, array( - '$feed_id' => $a->get_baseurl(), - '$feed_title' => 'Wall Item', - '$feed_updated' => datetime_convert('UTC','UTC',$item['edited'] . '+00:00' ,'Y-m-d\Th:i:s\Z') , - '$name' => $item['name'], - '$profile_page' => $item['url'], - '$thumb' => $item['thumb'], - '$item_id' => $item['hash'] . '-' . $item['id'], - '$title' => '', - '$link' => $a->get_baseurl() . '/item/' . $item['id'], - '$updated' => datetime_convert('UTC','UTC',$item['edited'] . '+00:00' ,'Y-m-d\Th:i:s\Z'), - '$summary' => '', - '$content' => $item['body'] + '$feed_id' => xmlify($baseurl), + '$feed_title' => xmlify('Wall Item'), + '$feed_updated' => xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00' ,'Y-m-d\Th:i:s\Z')) , + '$name' => xmlify($item['name']), + '$profile_page' => xmlify($item['url']), + '$thumb' => xmlify($item['thumb']), + '$item_id' => xmlify($item['hash'] . '-' . $item['id']), + '$title' => xmlify(''), + '$link' => xmlify($baseurl . '/item/' . $item['id']), + '$updated' => xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00' ,'Y-m-d\Th:i:s\Z')), + '$summary' => xmlify(''), + '$content' => xmlify($item['body']) )); print_r($atom); @@ -75,19 +87,60 @@ print_r($atom); // expand list of recipients - // grab the contact records +dbg(3); - // foreach recipient - // if no dfrn-id continue + $recipients = array_unique($recipients); +print_r($recipients); + $recip_str = implode(', ', $recipients); - // fetch_url dfrn-notify + $r = q("SELECT * FROM `contact` WHERE `id` IN ( %s ) ", + dbesc($recip_str) + ); + if(! count($r)) + killme(); - // decrypt challenge + // delivery loop - // post result + foreach($r as $rr) { + if($rr['self']) + continue; - // continue + if(! strlen($rr['dfrn-id'])) + continue; + $url = $rr['notify'] . '?dfrn_id=' . $rr['dfrn-id']; +print_r($url); + $xml = fetch_url($url); +echo $xml; - killme(); +print_r($xml); + if(! $xml) + continue; + + $res = simplexml_load_string($xml); +print_r($res); +var_dump($res); + + if((intval($res->status) != 0) || (! strlen($res->challenge)) || ($res->dfrn_id != $rr['dfrn-id'])) + continue; + + $postvars = array(); + + $postvars['dfrn_id'] = $rr['dfrn-id']; + $challenge = hex2bin($res->challenge); +echo "dfrn-id:" . $res->dfrn_id . "\r\n"; +echo "challenge:" . $res->challenge . "\r\n"; +echo "pubkey:" . $rr['pubkey'] . "\r\n"; + + openssl_public_decrypt($challenge,$postvars['challenge'],$rr['pubkey']); + + $postvars['data'] = $atom; + +print_r($postvars); + $xml = fetch_url($url,$postvars); + + + } + + killme(); |