diff options
author | zotlabs <mike@macgirvin.com> | 2019-03-12 15:17:25 -0700 |
---|---|---|
committer | zotlabs <mike@macgirvin.com> | 2019-03-12 15:17:25 -0700 |
commit | 72384ff2cb28afa74f93a15738fdbd95efe1443b (patch) | |
tree | 494a81b489b69dbd829674d062c6c732ed7e1b66 /Zotlabs/Module/Item.php | |
parent | 11116bdcb77eb9fc62db92fdf87cf2cc1d8e5708 (diff) | |
download | volse-hubzilla-72384ff2cb28afa74f93a15738fdbd95efe1443b.tar.gz volse-hubzilla-72384ff2cb28afa74f93a15738fdbd95efe1443b.tar.bz2 volse-hubzilla-72384ff2cb28afa74f93a15738fdbd95efe1443b.zip |
add owner permission checks to AS item fetch
Diffstat (limited to 'Zotlabs/Module/Item.php')
-rw-r--r-- | Zotlabs/Module/Item.php | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/Zotlabs/Module/Item.php b/Zotlabs/Module/Item.php index b247df0fd..980d7308d 100644 --- a/Zotlabs/Module/Item.php +++ b/Zotlabs/Module/Item.php @@ -62,9 +62,44 @@ class Item extends Controller { $sql_extra = item_permissions_sql(0); - $r = q("select * from item where mid = '%s' $item_normal $sql_extra limit 1", - dbesc(z_root() . '/item/' . $item_id) + $r = null; + + + // first see if we have this item owned by the current signer + + $x = q("select * from xchan where xchan_hash = '%s'", + dbesc($sigdata['portable_id']) ); + + if ($x) { + + // include xchans for all zot-like networks - these will have the same guid and public key + + $xchans = q("select xchan_hash from xchan where xchan_hash = '%s' OR ( xchan_guid = '%s' AND xchan_pubkey = '%s' ) ", + dbesc($sigdata['portable_id']), + dbesc($x[0]['xchan_guid']), + dbesc($x[0]['xchan_pubkey']) + ); + + if ($xchans) { + $hashes = ids_to_querystr($xchans,'xchan_hash',true); + $r = q("select * from item where mid = '%s' $item_normal and owner_xchan in ( " . protect_sprintf($hashes) . " ) ", + dbesc(z_root() . '/item/' . $item_id) + ); + } + } + + // then see if we can access it as a visitor + + if (! $r) { + + $r = q("select * from item where mid = '%s' $item_normal $sql_extra limit 1", + dbesc(z_root() . '/item/' . $item_id) + ); + } + + // fetch once more with no extra conditions to see what error condition applies + if(! $r) { |