more expanding item flags
This commit is contained in:
		
							
								
								
									
										21
									
								
								boot.php
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								boot.php
									
									
									
									
									
								
							| @@ -531,27 +531,6 @@ define ( 'ITEM_BUILDBLOCK',      0x0100);	// Named thusly to make sure nobody co | ||||
| define ( 'ITEM_PDL',			 0x0200);	// Page Description Language - e.g. Comanche | ||||
| define ( 'ITEM_BUG',			 0x0400);	// Is a bug, can be used by the internal bug tracker | ||||
| define ( 'ITEM_PENDING_REMOVE',  0x0800);   // deleted, notification period has lapsed | ||||
|  | ||||
| /** | ||||
|  * Item Flags | ||||
|  */ | ||||
|  | ||||
| //define ( 'ITEM_ORIGIN',          0x0001); | ||||
| //define ( 'ITEM_UNSEEN',          0x0002); | ||||
| //define ( 'ITEM_STARRED',         0x0004); | ||||
| //define ( 'ITEM_UPLINK',          0x0008); | ||||
| //define ( 'ITEM_CONSENSUS',       0x0010);  // an item which may present agree/disagree/abstain options | ||||
| //define ( 'ITEM_WALL',            0x0020); | ||||
| //define ( 'ITEM_THREAD_TOP',      0x0040); | ||||
| //define ( 'ITEM_NOTSHOWN',        0x0080);  // technically visible but not normally shown (e.g. like/dislike) | ||||
| //define ( 'ITEM_NSFW',            0x0100); | ||||
| //define ( 'ITEM_RELAY',           0x0200);  // used only in the communication layers, not stored | ||||
| //define ( 'ITEM_MENTIONSME',      0x0400); | ||||
| //define ( 'ITEM_NOCOMMENT',       0x0800);  // commenting/followups are disabled | ||||
| define ( 'ITEM_OBSCURED',        0x1000);  // bit-mangled to protect from casual browsing by site admin | ||||
| define ( 'ITEM_VERIFIED',        0x2000);  // Signature verification was successful | ||||
| define ( 'ITEM_RETAINED',        0x4000);  // We looked at this item once to decide whether or not to expire it, and decided not to. | ||||
| define ( 'ITEM_RSS',             0x8000);  // Item comes from a feed. Use this to decide whether to link the title | ||||
| 										   // Don't make us evaluate this same item again. | ||||
|  | ||||
| define ( 'DBTYPE_MYSQL',    0 ); | ||||
|   | ||||
| @@ -304,7 +304,7 @@ function bb2diaspora_itembody($item,$force_update = false) { | ||||
|  | ||||
| 	$newitem = $item; | ||||
|  | ||||
| 	if(array_key_exists('item_flags',$item) && ($item['item_flags'] & ITEM_OBSCURED)) { | ||||
| 	if(array_key_exists('item_obscured',$item) && intval($item['item_obscured'])) { | ||||
| 		$key = get_config('system','prvkey'); | ||||
| 		$b = json_decode($item['body'],true); | ||||
| 		// if called from diaspora_process_outbound, this decoding has already been done. | ||||
|   | ||||
| @@ -357,21 +357,12 @@ function localize_item(&$item){ | ||||
| 		} | ||||
| 	} | ||||
| */ | ||||
| 	// add sparkle links to appropriate permalinks | ||||
|  | ||||
| //	$x = stristr($item['plink'],'/display/'); | ||||
| //	if($x) { | ||||
| //		$sparkle = false; | ||||
| //		$y = best_link_url($item,$sparkle,true); | ||||
| 	//	if($sparkle) | ||||
| //			$item['plink'] = $y . '?f=&url=' . $item['plink']; | ||||
| //	}  | ||||
|  | ||||
| 	// if item body was obscured and we changed it, re-obscure it | ||||
| 	// FIXME - we need a better filter than just the string 'data'; try and | ||||
| 	// match the fact that it's json encoded | ||||
|  | ||||
| 	if(($item['item_flags'] & ITEM_OBSCURED)  | ||||
| 	if(intval($item['item_obscured']) | ||||
| 		&& strlen($item['body']) && (! strpos($item['body'],'data'))) { | ||||
| 		$item['body']  = json_encode(crypto_encapsulate($item['body'],get_config('system','pubkey'))); | ||||
| 	} | ||||
| @@ -655,8 +646,8 @@ function conversation(&$a, $items, $mode, $update, $page_mode = 'traditional', $ | ||||
| 				$likebuttons = false; | ||||
| 				$shareable = false; | ||||
|  | ||||
| 				$verified = (($item['item_flags'] & ITEM_VERIFIED) ? t('Message signature validated') : ''); | ||||
| 				$forged = ((($item['sig']) && (! ($item['item_flags'] & ITEM_VERIFIED))) ? t('Message signature incorrect') : ''); | ||||
| 				$verified = (intval($item['item_verified']) ? t('Message signature validated') : ''); | ||||
| 				$forged = ((($item['sig']) && (! intval($item['item_verified']))) ? t('Message signature incorrect') : ''); | ||||
|  | ||||
|  | ||||
| 				$unverified = ''; | ||||
|   | ||||
| @@ -157,7 +157,7 @@ function diaspora_process_outbound($arr) { | ||||
|  | ||||
| 	$target_item = $arr['target_item']; | ||||
|  | ||||
| 	if($target_item && array_key_exists('item_flags',$target_item) && ($target_item['item_flags'] & ITEM_OBSCURED)) { | ||||
| 	if($target_item && array_key_exists('item_obscured',$target_item) && intval($target_item['item_obscured'])) { | ||||
| 		$key = get_config('system','prvkey'); | ||||
| 		if($target_item['title']) | ||||
| 			$target_item['title'] = crypto_unencapsulate(json_decode($target_item['title'],true),$key); | ||||
|   | ||||
| @@ -65,7 +65,7 @@ function notification($params) { | ||||
| 			localize_item($i); | ||||
| 			$title = $i['title']; | ||||
| 			$body = $i['body']; | ||||
| 			$private = (($i['item_private']) || ($i['item_flags'] & ITEM_OBSCURED)); | ||||
| 			$private = (($i['item_private']) || intval($i['item_obscured'])); | ||||
| 		} | ||||
| 		else { | ||||
| 			$title = $params['item']['title']; | ||||
|   | ||||
| @@ -396,13 +396,13 @@ function post_activity_item($arr) { | ||||
| 		if($channel) { | ||||
| 			if($channel['channel_hash'] === $arr['author_xchan']) { | ||||
| 				$arr['sig'] = base64url_encode(rsa_sign($arr['body'],$channel['channel_prvkey'])); | ||||
| 				$arr['item_flags'] = $arr['item_flags'] | ITEM_VERIFIED; | ||||
| 				$arr['item_verified'] = 1; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		logger('Encrypting local storage'); | ||||
| 		$key = get_config('system','pubkey'); | ||||
| 		$arr['item_flags'] = $arr['item_flags'] | ITEM_OBSCURED; | ||||
| 		$arr['item_obscured'] = 1; | ||||
| 		if($arr['title']) | ||||
| 			$arr['title'] = json_encode(crypto_encapsulate($arr['title'],$key)); | ||||
| 		if($arr['body']) | ||||
| @@ -870,7 +870,7 @@ function get_item_elements($x) { | ||||
| 			dbesc($arr['author_xchan']) | ||||
| 		); | ||||
| 		if($r && rsa_verify($x['body'],base64url_decode($arr['sig']),$r[0]['xchan_pubkey'])) | ||||
| 			$arr['item_flags'] |= ITEM_VERIFIED; | ||||
| 			$arr['item_verified'] = 1; | ||||
| 		else | ||||
| 			logger('get_item_elements: message verification failed.'); | ||||
| 	} | ||||
| @@ -883,7 +883,7 @@ function get_item_elements($x) { | ||||
|  | ||||
|  | ||||
| 	if(intval($arr['item_private'])) { | ||||
| 		$arr['item_flags'] = $arr['item_flags'] | ITEM_OBSCURED; | ||||
| 		$arr['item_obscured'] = 1; | ||||
| 		if($arr['title']) | ||||
| 			$arr['title'] = json_encode(crypto_encapsulate($arr['title'],$key)); | ||||
| 		if($arr['body']) | ||||
| @@ -1066,7 +1066,7 @@ function encode_item($item,$mirror = false) { | ||||
|  | ||||
| 	$key = get_config('system','prvkey'); | ||||
|  | ||||
| 	if(array_key_exists('item_flags',$item) && ($item['item_flags'] & ITEM_OBSCURED)) { | ||||
| 	if(array_key_exists('item_obscured',$item) && intval($item['item_obscured'])) { | ||||
| 		if($item['title']) | ||||
| 			$item['title'] = crypto_unencapsulate(json_decode_plus($item['title']),$key); | ||||
| 		if($item['body']) | ||||
| @@ -1475,7 +1475,7 @@ function get_atom_elements($feed,$item,&$author) { | ||||
| 	$res['title'] = unxmlify($item->get_title()); | ||||
| 	$res['body'] = unxmlify($item->get_content()); | ||||
| 	$res['plink'] = unxmlify($item->get_link(0)); | ||||
| 	$res['item_flags'] = ITEM_RSS; | ||||
| 	$res['item_rss'] = 1; | ||||
|  | ||||
|  | ||||
| 	// removing the content of the title if its identically to the body | ||||
| @@ -1956,7 +1956,7 @@ function item_store($arr,$allow_exec = false) { | ||||
| 	// only detect language if we have text content, and if the post is private but not yet | ||||
| 	// obscured, make it so. | ||||
|  | ||||
| 	if(! ($arr['item_flags'] & ITEM_OBSCURED)) { | ||||
| 	if((! array_key_exists('item_obscured',$arr)) || $arr['item_obscured'] == 0) { | ||||
|  | ||||
| 		$arr['lang'] = detect_language($arr['body']); | ||||
| 		// apply the input filter here - if it is obscured it has been filtered already | ||||
| @@ -1967,7 +1967,7 @@ function item_store($arr,$allow_exec = false) { | ||||
| 			$channel = get_app()->get_channel(); | ||||
| 			if($channel['channel_hash'] === $arr['author_xchan']) { | ||||
| 				$arr['sig'] = base64url_encode(rsa_sign($arr['body'],$channel['channel_prvkey'])); | ||||
| 				$arr['item_flags'] |= ITEM_VERIFIED; | ||||
| 				$arr['item_verified'] = 1; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| @@ -1985,7 +1985,7 @@ function item_store($arr,$allow_exec = false) { | ||||
| 		} | ||||
| 		if($arr['item_private']) { | ||||
| 			$key = get_config('system','pubkey'); | ||||
| 			$arr['item_flags'] = $arr['item_flags'] | ITEM_OBSCURED; | ||||
| 			$arr['item_obscured'] = 1; | ||||
| 			if($arr['title']) | ||||
| 				$arr['title'] = json_encode(crypto_encapsulate($arr['title'],$key)); | ||||
| 			if($arr['body']) | ||||
| @@ -2349,7 +2349,7 @@ function item_store_update($arr,$allow_exec = false) { | ||||
| 		return $ret; | ||||
| 	} | ||||
|  | ||||
|     if(! ($arr['item_flags'] & ITEM_OBSCURED)) { | ||||
|     if((! array_key_exists('item_obscured', $arr)) || $arr['item_obscured'] == 0) { | ||||
|  | ||||
| 		$arr['lang'] = detect_language($arr['body']); | ||||
|         // apply the input filter here - if it is obscured it has been filtered already | ||||
| @@ -2377,7 +2377,7 @@ function item_store_update($arr,$allow_exec = false) { | ||||
| 		} | ||||
| 		if($arr['item_private']) { | ||||
|             $key = get_config('system','pubkey'); | ||||
|             $arr['item_flags'] = $arr['item_flags'] | ITEM_OBSCURED; | ||||
|             $arr['item_obscured'] = 1; | ||||
|             if($arr['title']) | ||||
|                 $arr['title'] = json_encode(crypto_encapsulate($arr['title'],$key)); | ||||
|             if($arr['body']) | ||||
| @@ -2834,7 +2834,7 @@ function tag_deliver($uid,$item_id) { | ||||
|  | ||||
| 		$body = ''; | ||||
|  | ||||
| 		if($item['item_flags'] & ITEM_OBSCURED) { | ||||
| 		if(intval($item['item_obscured'])) { | ||||
| 			$key = get_config('system','prvkey'); | ||||
| 			if($item['body']) | ||||
| 				$body = crypto_unencapsulate(json_decode_plus($item['body']),$key); | ||||
| @@ -2981,7 +2981,7 @@ function tgroup_check($uid,$item) { | ||||
|  | ||||
| 	$body = $item['body']; | ||||
|  | ||||
| 	if(array_key_exists('item_flags',$item) && ($item['item_flags'] & ITEM_OBSCURED) && $body) { | ||||
| 	if(array_key_exists('item_obscured',$item) && intval($item['item_obscured']) && $body) { | ||||
| 		$key = get_config('system','prvkey'); | ||||
| 		$body = crypto_unencapsulate(json_decode($body,true),$key); | ||||
| 	} | ||||
| @@ -3025,6 +3025,7 @@ function start_delivery_chain($channel,$item,$item_id,$parent) { | ||||
| 	$item_origin = 1; | ||||
| 	$item_uplink = 0; | ||||
| 	$item_nocomment = 0; | ||||
| 	$item_obscured = 0; | ||||
|  | ||||
| 	$flag_bits = $item['item_flags']; | ||||
|  | ||||
| @@ -3048,30 +3049,31 @@ function start_delivery_chain($channel,$item,$item_id,$parent) { | ||||
| 	$body  = $item['body']; | ||||
|  | ||||
| 	if($private) { | ||||
| 		if(!($flag_bits & ITEM_OBSCURED)) { | ||||
| 		if(! intval($item['item_obscured'])) { | ||||
| 			$key = get_config('system','pubkey'); | ||||
| 			$flag_bits = $flag_bits|ITEM_OBSCURED; | ||||
| 			if($title) | ||||
| 				$title = json_encode(crypto_encapsulate($title,$key)); | ||||
| 			if($body) | ||||
| 				$body  = json_encode(crypto_encapsulate($body,$key)); | ||||
| 			$item_obscured = 1; | ||||
| 		} | ||||
| 	} | ||||
| 	else { | ||||
| 		if($flag_bits & ITEM_OBSCURED) { | ||||
| 		if(intval($item['item_obscured'])) { | ||||
| 			$key = get_config('system','prvkey'); | ||||
| 			$flag_bits = $flag_bits ^ ITEM_OBSCURED; | ||||
| 			if($title) | ||||
| 				$title = crypto_unencapsulate(json_decode($title,true),$key); | ||||
| 			if($body) | ||||
| 				$body = crypto_unencapsulate(json_decode($body,true),$key); | ||||
| 			$item_obscured = 0; | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	$r = q("update item set item_uplink = %d, item_nocomment = %d, item_flags = %d, owner_xchan = '%s', allow_cid = '%s', allow_gid = '%s',  | ||||
| 	$r = q("update item set item_uplink = %d, item_nocomment = %d, item_obscured = %d, item_flags = %d, owner_xchan = '%s', allow_cid = '%s', allow_gid = '%s',  | ||||
| 		deny_cid = '%s', deny_gid = '%s', item_private = %d, public_policy = '%s', comment_policy = '%s', title = '%s', body = '%s', item_wall = %d, item_origin = %d  where id = %d", | ||||
| 		intval($item_uplink), | ||||
| 		intval($item_nocomment), | ||||
| 		intval($item_obscured), | ||||
| 		intval($flag_bits), | ||||
| 		dbesc($channel['channel_hash']), | ||||
| 		dbesc($channel['channel_allow_cid']), | ||||
| @@ -3860,11 +3862,10 @@ function item_expire($uid,$days) { | ||||
| 		AND `created` < %s - INTERVAL %s  | ||||
| 		AND `id` = `parent`  | ||||
| 		$sql_extra | ||||
| 		AND NOT ( item_flags & %d )>0 | ||||
| 		AND item_retained = 0 | ||||
| 		AND (item_restrict = 0 ) ", | ||||
| 		intval($uid), | ||||
| 		db_utcnow(), db_quoteinterval(intval($days).' DAY'), | ||||
| 		intval(ITEM_RETAINED) | ||||
| 		db_utcnow(), db_quoteinterval(intval($days).' DAY') | ||||
| 	); | ||||
|  | ||||
| 	if(! $r) | ||||
| @@ -3901,8 +3902,7 @@ function item_expire($uid,$days) { | ||||
| } | ||||
|  | ||||
| function retain_item($id) { | ||||
| 	$r = q("update item set item_flags = (item_flags | %d ) where id = %d", | ||||
| 		intval(ITEM_RETAINED), | ||||
| 	$r = q("update item set item_retained = 1 where id = %d", | ||||
| 		intval($id) | ||||
| 	); | ||||
| } | ||||
|   | ||||
| @@ -1152,7 +1152,7 @@ function link_compare($a,$b) { | ||||
|  | ||||
|  | ||||
| function unobscure(&$item) { | ||||
| 	if(array_key_exists('item_flags',$item) && ($item['item_flags'] & ITEM_OBSCURED)) { | ||||
| 	if(array_key_exists('item_obscured',$item) && intval($item['item_obscured'])) { | ||||
| 		$key = get_config('system','prvkey'); | ||||
| 		if($item['title']) | ||||
| 			$item['title'] = crypto_unencapsulate(json_decode_plus($item['title']),$key); | ||||
|   | ||||
| @@ -55,7 +55,7 @@ function editpost_content(&$a) { | ||||
|  | ||||
|  | ||||
|  | ||||
| 	if($itm[0]['item_flags'] & ITEM_OBSCURED) { | ||||
| 	if(intval($itm[0]['item_obscured'])) { | ||||
| 		$key = get_config('system','prvkey'); | ||||
| 		if($itm[0]['title']) | ||||
| 			$itm[0]['title'] = crypto_unencapsulate(json_decode_plus($itm[0]['title']),$key); | ||||
|   | ||||
| @@ -95,7 +95,7 @@ function editwebpage_content(&$a) { | ||||
| 		intval($owner) | ||||
| 	); | ||||
|  | ||||
| 	if($itm[0]['item_flags'] & ITEM_OBSCURED) { | ||||
| 	if(intval($itm[0]['item_obscured'])) { | ||||
| 		$key = get_config('system','prvkey'); | ||||
| 		if($itm[0]['title']) | ||||
| 			$itm[0]['title'] = crypto_unencapsulate(json_decode_plus($itm[0]['title']),$key); | ||||
|   | ||||
| @@ -27,8 +27,7 @@ function filer_content(&$a) { | ||||
| 			intval(local_user()) | ||||
| 		); | ||||
| 		if($r) { | ||||
| 			$x = q("update item set item_flags = ( item_flags | %d ) where id = %d and uid = %d", | ||||
| 				intval(ITEM_RETAINED), | ||||
| 			$x = q("update item set item_retained = 1 where id = %d and uid = %d", | ||||
| 				intval($r[0]['parent']), | ||||
| 				intval(local_user()) | ||||
| 			); | ||||
|   | ||||
| @@ -330,11 +330,6 @@ function item_post(&$a) { | ||||
| 		$body              = $_REQUEST['body']; | ||||
| 		$item_flags        = $orig_post['item_flags']; | ||||
|  | ||||
| 		// force us to recalculate if we need to obscure this post | ||||
|  | ||||
| 		if($item_flags & ITEM_OBSCURED) | ||||
| 			$item_flags = ($item_flags ^ ITEM_OBSCURED); | ||||
|  | ||||
| 		$item_restrict     = $orig_post['item_restrict']; | ||||
| 		$postopts          = $orig_post['postopts']; | ||||
| 		$created           = $orig_post['created']; | ||||
| @@ -765,13 +760,13 @@ function item_post(&$a) { | ||||
| 		if($uid) { | ||||
| 			if($channel['channel_hash'] === $datarray['author_xchan']) { | ||||
| 				$datarray['sig'] = base64url_encode(rsa_sign($datarray['body'],$channel['channel_prvkey'])); | ||||
| 				$datarray['item_flags'] = $datarray['item_flags'] | ITEM_VERIFIED; | ||||
| 				$datarray['item_verified'] = 1; | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		logger('Encrypting local storage'); | ||||
| 		$key = get_config('system','pubkey'); | ||||
| 		$datarray['item_flags'] = $datarray['item_flags'] | ITEM_OBSCURED; | ||||
| 		$datarray['item_obscured'] = 1; | ||||
| 		if($datarray['title']) | ||||
| 			$datarray['title'] = json_encode(crypto_encapsulate($datarray['title'],$key)); | ||||
| 		if($datarray['body']) | ||||
|   | ||||
| @@ -21,14 +21,14 @@ function viewsrc_content(&$a) { | ||||
| 	} | ||||
|  | ||||
| 	if(local_user() && $item_id) { | ||||
| 		$r = q("select item_flags, body from item where item_restrict = 0 and uid in (%d , %d) and id = %d limit 1", | ||||
| 		$r = q("select id, item_flags, item_obscured, body from item where item_restrict = 0 and uid in (%d , %d) and id = %d limit 1", | ||||
| 			intval(local_user()), | ||||
| 			intval($sys['channel_id']), | ||||
| 			intval($item_id) | ||||
| 		); | ||||
|  | ||||
| 		if($r) { | ||||
| 			if($r[0]['item_flags'] & ITEM_OBSCURED)  | ||||
| 			if(intval($r[0]['item_obscured'])) | ||||
| 				$r[0]['body'] = crypto_unencapsulate(json_decode($r[0]['body'],true),get_config('system','prvkey'));  | ||||
| 			$o = (($json) ? json_encode($r[0]['body']) : str_replace("\n",'<br />',$r[0]['body'])); | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user