From f2a0514917c17c8290089cb5b1ac33eb5fb107c1 Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 25 Dec 2012 18:48:51 -0800 Subject: prevent connecting to yourself or connecting to the same channel multiple times --- include/follow.php | 55 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 15 deletions(-) (limited to 'include/follow.php') diff --git a/include/follow.php b/include/follow.php index 3d5785f89..eae4d24e1 100644 --- a/include/follow.php +++ b/include/follow.php @@ -42,8 +42,6 @@ function new_contact($uid,$url,$channel,$interactive = false) { } logger('follow: ' . $url . ' ' . print_r($j,true)); -// killme(); - if(! ($j->success && $j->guid)) { $result['message'] = t('Unable to communicate with requested channel.'); @@ -101,28 +99,55 @@ function new_contact($uid,$url,$channel,$interactive = false) { } } + if((local_user()) && $uid == local_user()) { + $aid = get_account_id(); + $hash = $a->observer['xchan_hash']; + } + else { + $r = q("select * from channel where uid = %d limit 1", + intval($uid) + ); + if(! $r) { + $result['message'] .= t('local account not found.'); + return $result; + } + $aid = $r[0]['channel_account_id']; + $hash = $r[0]['channel_hash']; + } + + if($hash == $xchan_hash) { + $result['message'] .= t('Cannot connect to yourself.'); + return $result; + } - $r = q("insert into abook ( abook_account, abook_channel, abook_xchan, abook_their_perms, abook_created, abook_updated ) - values( %d, %d, '%s', %d, '%s', '%s' ) ", - intval(get_account_id()), - intval(local_user()), + $r = q("select abook_xchan from abook_id where abook_xchan = '%s' and abook_channel = %d limit 1", dbesc($xchan_hash), - intval($their_perms), - dbesc(datetime_convert()), - dbesc(datetime_convert()) + intval($uid) ); + if($r) { + $x = q("update abook set abook_their_perms = %d where abook_id = %d limit 1", + intval($their_perms), + intval($r[0]['abook_id']) + ); + } + else { + $r = q("insert into abook ( abook_account, abook_channel, abook_xchan, abook_their_perms, abook_created, abook_updated ) + values( %d, %d, '%s', %d, '%s', '%s' ) ", + intval(get_account_id()), + intval(local_user()), + dbesc($xchan_hash), + intval($their_perms), + dbesc(datetime_convert()), + dbesc(datetime_convert()) + ); + } + if(! $r) logger('mod_follow: abook creation failed'); - - - - // Then send a ping/message to the other side - - /* $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `batch`, `notify`, `poll`, `poco`, `name`, `nick`, `photo`, `network`, `pubkey`, `rel`, `priority`, -- cgit v1.2.3