Merge pull request #7389 from MrPetovan/bug/7387-local_user-int

Ensure NULL isn't passed to Feature::isEnabled
This commit is contained in:
Philipp 2019-07-16 16:37:38 +02:00 committed by GitHub
commit 966043712f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 64 additions and 77 deletions

View file

@ -110,7 +110,7 @@ function cal_content(App $a)
$remote_contact = false; $remote_contact = false;
$contact_id = 0; $contact_id = 0;
$owner_uid = $a->data['user']['uid']; $owner_uid = intval($a->data['user']['uid']);
$nick = $a->data['user']['nickname']; $nick = $a->data['user']['nickname'];
if (!empty($_SESSION['remote']) && is_array($_SESSION['remote'])) { if (!empty($_SESSION['remote']) && is_array($_SESSION['remote'])) {
@ -290,14 +290,14 @@ function cal_content(App $a)
} }
if ($mode == 'export') { if ($mode == 'export') {
if (!intval($owner_uid)) { if (!$owner_uid) {
notice(L10n::t('User not found')); notice(L10n::t('User not found'));
return; return;
} }
// Test permissions // Test permissions
// Respect the export feature setting for all other /cal pages if it's not the own profile // Respect the export feature setting for all other /cal pages if it's not the own profile
if ((local_user() !== intval($owner_uid)) && !Feature::isEnabled($owner_uid, "export_calendar")) { if ((local_user() !== $owner_uid) && !Feature::isEnabled($owner_uid, "export_calendar")) {
notice(L10n::t('Permission denied.') . EOL); notice(L10n::t('Permission denied.') . EOL);
$a->internalRedirect('cal/' . $nick); $a->internalRedirect('cal/' . $nick);
} }
@ -314,7 +314,7 @@ function cal_content(App $a)
// If it the own calendar return to the events page // If it the own calendar return to the events page
// otherwise to the profile calendar page // otherwise to the profile calendar page
if (local_user() === intval($owner_uid)) { if (local_user() === $owner_uid) {
$return_path = "events"; $return_path = "events";
} else { } else {
$return_path = "cal/" . $nick; $return_path = "cal/" . $nick;

View file

@ -149,7 +149,7 @@ function photos_post(App $a)
$can_post = false; $can_post = false;
$visitor = 0; $visitor = 0;
$page_owner_uid = $a->data['user']['uid']; $page_owner_uid = intval($a->data['user']['uid']);
$community_page = $a->data['user']['page-flags'] == User::PAGE_FLAGS_COMMUNITY; $community_page = $a->data['user']['page-flags'] == User::PAGE_FLAGS_COMMUNITY;
if (local_user() && (local_user() == $page_owner_uid)) { if (local_user() && (local_user() == $page_owner_uid)) {

View file

@ -20,7 +20,7 @@ class Feature
* @return boolean * @return boolean
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/ */
public static function isEnabled($uid, $feature) public static function isEnabled(int $uid, $feature)
{ {
$x = Config::get('feature_lock', $feature, false); $x = Config::get('feature_lock', $feature, false);

View file

@ -297,11 +297,13 @@ class Widget
{ {
$a = \get_app(); $a = \get_app();
if (!Feature::isEnabled($a->profile['profile_uid'], 'categories')) { $uid = intval($a->profile['profile_uid']);
if (!Feature::isEnabled($uid, 'categories')) {
return ''; return '';
} }
$saved = PConfig::get($a->profile['profile_uid'], 'system', 'filetags'); $saved = PConfig::get($uid, 'system', 'filetags');
if (!strlen($saved)) { if (!strlen($saved)) {
return; return;
} }
@ -420,17 +422,19 @@ class Widget
{ {
$a = \get_app(); $a = \get_app();
if (!$a->profile['profile_uid'] || !$a->profile['url']) { $uid = intval($a->profile['profile_uid']);
if (!$uid || !$a->profile['url']) {
return ''; return '';
} }
if (Feature::isEnabled($a->profile['profile_uid'], 'tagadelic')) { if (Feature::isEnabled($uid, 'tagadelic')) {
$owner_id = Contact::getIdForURL($a->profile['url'], 0, true); $owner_id = Contact::getIdForURL($a->profile['url'], 0, true);
if (!$owner_id) { if (!$owner_id) {
return ''; return '';
} }
return Widget\TagCloud::getHTML($a->profile['profile_uid'], $limit, $owner_id, 'wall'); return Widget\TagCloud::getHTML($uid, $limit, $owner_id, 'wall');
} }
return ''; return '';

View file

@ -30,7 +30,7 @@ class CalendarExport
return; return;
} }
$owner_uid = $a->data['user']['uid']; $owner_uid = intval($a->data['user']['uid']);
// The permission testing is a little bit tricky because we have to respect many cases. // The permission testing is a little bit tricky because we have to respect many cases.

View file

@ -32,10 +32,10 @@ class JitPConfiguration extends PConfiguration
* {@inheritDoc} * {@inheritDoc}
* *
*/ */
public function load($uid, string $cat = 'config') public function load(int $uid, string $cat = 'config')
{ {
// If not connected or no uid, do nothing // If not connected or no uid, do nothing
if (!is_int($uid) || !$this->configModel->isConnected()) { if (!$uid || !$this->configModel->isConnected()) {
return; return;
} }
@ -54,9 +54,9 @@ class JitPConfiguration extends PConfiguration
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function get($uid, string $cat, string $key, $default_value = null, bool $refresh = false) public function get(int $uid, string $cat, string $key, $default_value = null, bool $refresh = false)
{ {
if (!is_int($uid)) { if (!$uid) {
return $default_value; return $default_value;
} }
@ -84,9 +84,9 @@ class JitPConfiguration extends PConfiguration
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function set($uid, string $cat, string $key, $value) public function set(int $uid, string $cat, string $key, $value)
{ {
if (!is_int($uid)) { if (!$uid) {
return false; return false;
} }
@ -108,9 +108,9 @@ class JitPConfiguration extends PConfiguration
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function delete($uid, string $cat, string $key) public function delete(int $uid, string $cat, string $key)
{ {
if (!is_int($uid)) { if (!$uid) {
return false; return false;
} }

View file

@ -46,16 +46,16 @@ abstract class PConfiguration
/** /**
* Loads all configuration values of a user's config family into a cached storage. * Loads all configuration values of a user's config family into a cached storage.
* *
* All configuration values of the given user are stored with the $uid in * All configuration values of the given user are stored with the $uid in the cache
* the cache ( @param int $uid The user_id
* *
* @param int $uid The user_id
* @param string $cat The category of the configuration value * @param string $cat The category of the configuration value
* *
* @return void * @return void
* @see PConfigCache ) * @see PConfigCache )
* *
*/ */
abstract public function load($uid, string $cat = 'config'); abstract public function load(int $uid, string $cat = 'config');
/** /**
* Get a particular user's config variable given the category name * Get a particular user's config variable given the category name
@ -73,7 +73,7 @@ abstract class PConfiguration
* *
* @return mixed Stored value or null if it does not exist * @return mixed Stored value or null if it does not exist
*/ */
abstract public function get($uid, string $cat, string $key, $default_value = null, bool $refresh = false); abstract public function get(int $uid, string $cat, string $key, $default_value = null, bool $refresh = false);
/** /**
* Sets a configuration value for a user * Sets a configuration value for a user
@ -90,7 +90,7 @@ abstract class PConfiguration
* *
* @return bool Operation success * @return bool Operation success
*/ */
abstract public function set($uid, string $cat, string $key, $value); abstract public function set(int $uid, string $cat, string $key, $value);
/** /**
* Deletes the given key from the users's configuration. * Deletes the given key from the users's configuration.
@ -105,5 +105,5 @@ abstract class PConfiguration
* *
* @return bool * @return bool
*/ */
abstract public function delete($uid, string $cat, string $key); abstract public function delete(int $uid, string $cat, string $key);
} }

View file

@ -31,10 +31,10 @@ class PreloadPConfiguration extends PConfiguration
* This loads all config values everytime load is called * This loads all config values everytime load is called
* *
*/ */
public function load($uid, string $cat = 'config') public function load(int $uid, string $cat = 'config')
{ {
// Don't load the whole configuration twice or with invalid uid // Don't load the whole configuration twice or with invalid uid
if (!is_int($uid) || !empty($this->config_loaded[$uid])) { if (!$uid || !empty($this->config_loaded[$uid])) {
return; return;
} }
@ -53,9 +53,9 @@ class PreloadPConfiguration extends PConfiguration
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function get($uid, string $cat, string $key, $default_value = null, bool $refresh = false) public function get(int $uid, string $cat, string $key, $default_value = null, bool $refresh = false)
{ {
if (!is_int($uid)) { if (!$uid) {
return $default_value; return $default_value;
} }
@ -79,9 +79,9 @@ class PreloadPConfiguration extends PConfiguration
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function set($uid, string $cat, string $key, $value) public function set(int $uid, string $cat, string $key, $value)
{ {
if (!is_int($uid)) { if (!$uid) {
return false; return false;
} }
@ -105,9 +105,9 @@ class PreloadPConfiguration extends PConfiguration
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function delete($uid, string $cat, string $key) public function delete(int $uid, string $cat, string $key)
{ {
if (!is_int($uid)) { if (!$uid) {
return false; return false;
} }

View file

@ -35,12 +35,12 @@ class PConfig
/** /**
* @brief Loads all configuration values of a user's config family into a cached storage. * @brief Loads all configuration values of a user's config family into a cached storage.
* *
* @param string $uid The user_id * @param int $uid The user_id
* @param string $cat The category of the configuration value * @param string $cat The category of the configuration value
* *
* @return void * @return void
*/ */
public static function load($uid, $cat) public static function load(int $uid, string $cat)
{ {
self::$config->load($uid, $cat); self::$config->load($uid, $cat);
} }
@ -49,7 +49,7 @@ class PConfig
* @brief Get a particular user's config variable given the category name * @brief Get a particular user's config variable given the category name
* ($cat) and a key. * ($cat) and a key.
* *
* @param string $uid The user_id * @param int $uid The user_id
* @param string $cat The category of the configuration value * @param string $cat The category of the configuration value
* @param string $key The configuration key to query * @param string $key The configuration key to query
* @param mixed $default_value optional, The value to return if key is not set (default: null) * @param mixed $default_value optional, The value to return if key is not set (default: null)
@ -57,7 +57,7 @@ class PConfig
* *
* @return mixed Stored value or null if it does not exist * @return mixed Stored value or null if it does not exist
*/ */
public static function get($uid, $cat, $key, $default_value = null, $refresh = false) public static function get(int $uid, string $cat, string $key, $default_value = null, bool $refresh = false)
{ {
return self::$config->get($uid, $cat, $key, $default_value, $refresh); return self::$config->get($uid, $cat, $key, $default_value, $refresh);
} }
@ -65,14 +65,14 @@ class PConfig
/** /**
* @brief Sets a configuration value for a user * @brief Sets a configuration value for a user
* *
* @param string $uid The user_id * @param int $uid The user_id
* @param string $cat The category of the configuration value * @param string $cat The category of the configuration value
* @param string $key The configuration key to set * @param string $key The configuration key to set
* @param mixed $value The value to store * @param mixed $value The value to store
* *
* @return bool Operation success * @return bool Operation success
*/ */
public static function set($uid, $cat, $key, $value) public static function set(int $uid, string $cat, string $key, $value)
{ {
return self::$config->set($uid, $cat, $key, $value); return self::$config->set($uid, $cat, $key, $value);
} }
@ -80,13 +80,13 @@ class PConfig
/** /**
* @brief Deletes the given key from the users's configuration. * @brief Deletes the given key from the users's configuration.
* *
* @param string $uid The user_id * @param int $uid The user_id
* @param string $cat The category of the configuration value * @param string $cat The category of the configuration value
* @param string $key The configuration key to delete * @param string $key The configuration key to delete
* *
* @return bool * @return bool
*/ */
public static function delete($uid, $cat, $key) public static function delete(int $uid, string $cat, string $key)
{ {
return self::$config->delete($uid, $cat, $key); return self::$config->delete($uid, $cat, $key);
} }

View file

@ -717,7 +717,7 @@ class Profile
public static function getAdvanced(App $a) public static function getAdvanced(App $a)
{ {
$uid = $a->profile['uid']; $uid = intval($a->profile['uid']);
if ($a->profile['name']) { if ($a->profile['name']) {
$tpl = Renderer::getMarkupTemplate('profile_advanced.tpl'); $tpl = Renderer::getMarkupTemplate('profile_advanced.tpl');

View file

@ -116,15 +116,6 @@ class JitPConfigurationTest extends PConfigurationTest
parent::testGetWithRefresh($uid, $data); parent::testGetWithRefresh($uid, $data);
} }
public function testGetWrongWithoutDB()
{
$this->configModel->shouldReceive('isConnected')
->andReturn(false)
->times(3);
parent::testGetWrongWithoutDB();
}
/** /**
* @dataProvider dataTests * @dataProvider dataTests
*/ */
@ -145,7 +136,7 @@ class JitPConfigurationTest extends PConfigurationTest
// mocking one get without result // mocking one get without result
$this->configModel->shouldReceive('get') $this->configModel->shouldReceive('get')
->with(0, 'test', 'it') ->with(42, 'test', 'it')
->andReturn(null) ->andReturn(null)
->once(); ->once();

View file

@ -365,22 +365,24 @@ abstract class PConfigurationTest extends MockedTest
*/ */
public function testDeleteWithDB() public function testDeleteWithDB()
{ {
$this->configCache->load(0, ['test' => ['it' => 'now', 'quarter' => 'true']]); $uid = 42;
$this->configCache->load($uid, ['test' => ['it' => 'now', 'quarter' => 'true']]);
$this->configModel->shouldReceive('delete') $this->configModel->shouldReceive('delete')
->with(0, 'test', 'it') ->with($uid, 'test', 'it')
->andReturn(false) ->andReturn(false)
->once(); ->once();
$this->configModel->shouldReceive('delete') $this->configModel->shouldReceive('delete')
->with(0, 'test', 'second') ->with($uid, 'test', 'second')
->andReturn(true) ->andReturn(true)
->once(); ->once();
$this->configModel->shouldReceive('delete') $this->configModel->shouldReceive('delete')
->with(0, 'test', 'third') ->with($uid, 'test', 'third')
->andReturn(false) ->andReturn(false)
->once(); ->once();
$this->configModel->shouldReceive('delete') $this->configModel->shouldReceive('delete')
->with(0, 'test', 'quarter') ->with($uid, 'test', 'quarter')
->andReturn(true) ->andReturn(true)
->once(); ->once();
@ -388,19 +390,19 @@ abstract class PConfigurationTest extends MockedTest
$this->assertInstanceOf(PConfigCache::class, $this->testedConfig->getCache()); $this->assertInstanceOf(PConfigCache::class, $this->testedConfig->getCache());
// directly set the value to the cache // directly set the value to the cache
$this->testedConfig->getCache()->set(0, 'test', 'it', 'now'); $this->testedConfig->getCache()->set($uid, 'test', 'it', 'now');
$this->assertEquals('now', $this->testedConfig->get(0, 'test', 'it')); $this->assertEquals('now', $this->testedConfig->get($uid, 'test', 'it'));
$this->assertEquals('now', $this->testedConfig->getCache()->get(0, 'test', 'it')); $this->assertEquals('now', $this->testedConfig->getCache()->get($uid, 'test', 'it'));
// delete from cache only // delete from cache only
$this->assertTrue($this->testedConfig->delete(0, 'test', 'it')); $this->assertTrue($this->testedConfig->delete($uid, 'test', 'it'));
// delete from db only // delete from db only
$this->assertTrue($this->testedConfig->delete(0, 'test', 'second')); $this->assertTrue($this->testedConfig->delete($uid, 'test', 'second'));
// no delete // no delete
$this->assertFalse($this->testedConfig->delete(0, 'test', 'third')); $this->assertFalse($this->testedConfig->delete($uid, 'test', 'third'));
// delete both // delete both
$this->assertTrue($this->testedConfig->delete(0, 'test', 'quarter')); $this->assertTrue($this->testedConfig->delete($uid, 'test', 'quarter'));
$this->assertEmpty($this->testedConfig->getCache()->getAll()); $this->assertEmpty($this->testedConfig->getCache()->getAll());
} }
@ -460,7 +462,7 @@ abstract class PConfigurationTest extends MockedTest
public function testInvalidUid() public function testInvalidUid()
{ {
// bad UID! // bad UID!
$uid = null; $uid = 0;
$this->testedConfig = $this->getInstance(); $this->testedConfig = $this->getInstance();

View file

@ -108,16 +108,6 @@ class PreloadPConfigurationTest extends PConfigurationTest
parent::testGetWithRefresh($uid, $data); parent::testGetWithRefresh($uid, $data);
} }
public function testGetWrongWithoutDB()
{
$this->configModel->shouldReceive('isConnected')
->andReturn(false)
->times(3);
parent::testGetWrongWithoutDB();
}
/** /**
* @dataProvider dataTests * @dataProvider dataTests
*/ */
@ -138,7 +128,7 @@ class PreloadPConfigurationTest extends PConfigurationTest
// constructor loading // constructor loading
$this->configModel->shouldReceive('load') $this->configModel->shouldReceive('load')
->with(0) ->with(42)
->andReturn(['config' => []]) ->andReturn(['config' => []])
->once(); ->once();