Code cleanup from static analysis.

This commit is contained in:
Buster "Silver Eagle" Neece 2019-01-30 23:25:55 -06:00
parent 91c334ffff
commit 4b8c157b6c
13 changed files with 102 additions and 83 deletions

View File

@ -4,7 +4,26 @@ parameters:
paths:
- src
fileExtensions:
- php
bootstrap: %rootDir%/../../../util/phpstan.php
universalObjectCratesClasses:
- Azura\Session\NamespaceInterface
- Azura\View
ignoreErrors:
# Caused by Symfony Validator (perhaps wrongly) returning the interface.
- '#Cannot cast Symfony\\Component\\Validator\\ConstraintViolationListInterface to string.#'
# Supervisor functions that do exist but aren't annotated properly in the connector lib.
- '#Call to an undefined method Supervisor\\Supervisor::reloadConfig().#'
- '#Call to an undefined method Supervisor\\Supervisor::tailProcessLog().#'
- '#Call to an undefined method Supervisor\\Supervisor::signalProcess().#'
# PHPDocs
- '#PHPDoc tag .*#'
includes:
- vendor/phpstan/phpstan-doctrine/extension.neon

View File

@ -50,7 +50,7 @@ class Acl
* Check if a specified User entity is allowed to perform an action (or array of actions).
*
* @param Entity\User|null $user
* @param $action
* @param string|array $action
* @param null $station_id
* @return bool
*/
@ -142,7 +142,7 @@ class Acl
* Wrapper around the 'userAllowed' function that throws a UI-friendly exception upon failure.
*
* @param Entity\User|null $user
* @param $action
* @param string|array $action
* @param null $station_id
* @throws Exception\NotLoggedIn
* @throws Exception\PermissionDenied
@ -199,8 +199,8 @@ class Acl
}
/**
* @param $permission_name
* @param $is_global
* @param string $permission_name
* @param bool $is_global
* @return bool
*/
public static function isValidPermission($permission_name, $is_global): bool

View File

@ -40,8 +40,8 @@ class ApiUtilities
/**
* Get the album art URL for a given unique StationMedia identifier.
*
* @param $station_id
* @param $media_unique_id
* @param int $station_id
* @param string $media_unique_id
* @param UriInterface|null $base_url
* @return UriInterface
*/

View File

@ -15,10 +15,10 @@ class Auth
protected $_user_repo;
/** @var User|null */
protected $_user = null;
protected $_user;
/** @var User|null */
protected $_masqueraded_user = null;
protected $_masqueraded_user;
public function __construct(Session $session, UserRepository $user_repo)
{
@ -31,24 +31,23 @@ class Auth
/**
* Authenticate a given username and password combination against the User repository.
*
* @param $username
* @param $password
* @return bool
* @param string $username
* @param string $password
* @return User|null
*/
public function authenticate($username, $password)
public function authenticate($username, $password): ?User
{
$user_auth = $this->_user_repo->authenticate($username, $password);
if ($user_auth instanceof User) {
$this->setUser($user_auth);
return true;
} else {
return false;
return $user_auth;
}
return null;
}
public function logout()
public function logout(): void
{
unset($this->_session->user_id);
unset($this->_session->masquerade_user_id);
@ -63,7 +62,7 @@ class Auth
*
* @return bool
*/
public function isLoggedIn()
public function isLoggedIn(): bool
{
if (APP_IS_COMMAND_LINE && !APP_TESTING_MODE) {
return false;
@ -78,33 +77,32 @@ class Auth
* Get the currently logged in user.
*
* @param bool $real_user_only
* @return bool|User|null|object
* @return User|null
* @throws \Azura\Exception
*/
public function getLoggedInUser($real_user_only = false)
public function getLoggedInUser($real_user_only = false): ?User
{
if ($this->isMasqueraded() && !$real_user_only) {
if (!$real_user_only && $this->isMasqueraded()) {
return $this->getMasquerade();
} else {
return $this->getUser();
}
return $this->getUser();
}
/**
* Get the authenticated user entity.
*
* @return bool|User|null
* @return User|null
* @throws \Azura\Exception
*/
public function getUser()
public function getUser(): ?User
{
if ($this->_user === null) {
$user_id = (int)$this->_session->user_id;
if ($user_id == 0) {
if (0 === $user_id) {
$this->_user = false;
return false;
return null;
}
$user = $this->_user_repo->find($user_id);
@ -119,25 +117,20 @@ class Auth
}
}
return $this->_user;
return ($this->_user instanceof User)
? $this->_user
: null;
}
/**
* Set the currently authenticated user.
*
* @param User $user
* @return bool
*/
public function setUser(User $user)
public function setUser(User $user): void
{
// Prevent any previous identity from being used.
// @session_regenerate_id(true);
$this->_session->user_id = $user->getId();
$this->_user = $user;
return true;
}
/**
@ -147,14 +140,18 @@ class Auth
/**
* Become a different user across the application.
*
* @param $user_info
* @param array $user_info
*/
public function masqueradeAsUser($user_info)
public function masqueradeAsUser($user_info): void
{
if (!($user_info instanceof User)) {
$user_info = $this->_user_repo->findOneBy($user_info);
}
if (!($user_info instanceof User)) {
throw new \Azura\Exception('Invalid user!');
}
$this->_session->masquerade_user_id = $user_info->getId();
$this->_masqueraded_user = $user_info;
}
@ -162,7 +159,7 @@ class Auth
/**
* Return to the regular authenticated account.
*/
public function endMasquerade()
public function endMasquerade(): void
{
unset($this->_session->masquerade_user_id);
$this->_masqueraded_user = null;
@ -173,7 +170,7 @@ class Auth
*
* @return User|null
*/
public function getMasquerade()
public function getMasquerade(): ?User
{
return $this->_masqueraded_user;
}
@ -183,11 +180,10 @@ class Auth
*
* @return bool
*/
public function isMasqueraded()
public function isMasqueraded(): bool
{
if (!$this->isLoggedIn()) {
$this->_masqueraded_user = false;
return false;
}
@ -196,7 +192,7 @@ class Auth
$this->_masqueraded_user = false;
} else {
$mask_user_id = (int)$this->_session->masquerade_user_id;
if ($mask_user_id != 0) {
if (0 !== $mask_user_id) {
$user = $this->_user_repo->find($mask_user_id);
} else {
$user = null;
@ -205,9 +201,7 @@ class Auth
if ($user instanceof User) {
$this->_masqueraded_user = $user;
} else {
unset($this->_session->user_id);
unset($this->_session->masquerade_user_id);
unset($this->_session->user_id, $this->_session->masquerade_user_id);
$this->_masqueraded_user = false;
}
}

View File

@ -55,25 +55,24 @@ class IndexController
public function syncAction(Request $request, Response $response, $type): ResponseInterface
{
$view = $request->getView();
$view->sidebar = null;
$handler = new TestHandler(Logger::DEBUG, false);
$this->logger->pushHandler($handler);
switch ($type) {
case "long":
case 'long':
$this->sync->syncLong(true);
break;
case "medium":
case 'medium':
$this->sync->syncMedium(true);
break;
case "short":
case 'short':
$this->sync->syncShort(true);
break;
case "nowplaying":
case 'nowplaying':
default:
$this->sync->syncNowplaying(true);
break;
@ -82,7 +81,8 @@ class IndexController
$this->logger->popHandler();
return $view->renderToResponse($response, 'system/log_view', [
'title' => __('Sync Task Output'),
'sidebar' => null,
'title' => __('Sync Task Output'),
'log_records' => $handler->getRecords(),
]);
}

View File

@ -7,6 +7,7 @@ use Doctrine\ORM\Query;
use Symfony\Component\Serializer\Normalizer\AbstractNormalizer;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Validator\ConstraintViolationList;
use Symfony\Component\Validator\Validator\ValidatorInterface;
abstract class AbstractCrudController
@ -39,7 +40,7 @@ abstract class AbstractCrudController
}
/**
* @param $record
* @param object $record
* @param Router $router
* @return mixed
*/
@ -71,7 +72,7 @@ abstract class AbstractCrudController
}
/**
* @param $object
* @param object $object
* @return mixed
*/
protected function _displayShortenedObject($object)
@ -84,8 +85,8 @@ abstract class AbstractCrudController
}
/**
* @param $data
* @param null $record
* @param array $data
* @param object|null $record
* @return object
* @throws \App\Exception\Validation
* @throws \Doctrine\ORM\ORMException
@ -101,8 +102,8 @@ abstract class AbstractCrudController
}
/**
* @param $data
* @param $record
* @param array $data
* @param object $record
* @return object
* @throws \App\Exception\Validation
* @throws \Doctrine\ORM\ORMException
@ -130,8 +131,8 @@ abstract class AbstractCrudController
}
/**
* @param $data
* @param $record
* @param array $data
* @param object $record
* @param array $context
*/
protected function _denormalizeToRecord($data, $record, array $context = []): void
@ -142,7 +143,7 @@ abstract class AbstractCrudController
}
/**
* @param $record
* @param object $record
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/

View File

@ -50,7 +50,7 @@ abstract class AbstractGenericCrudController extends AbstractCrudController
/**
* @param Request $request
* @param Response $response
* @param $record_id
* @param mixed $record_id
* @return ResponseInterface
*/
public function getAction(Request $request, Response $response, $record_id): ResponseInterface
@ -64,7 +64,7 @@ abstract class AbstractGenericCrudController extends AbstractCrudController
/**
* @param Request $request
* @param Response $response
* @param $record_id
* @param mixed $record_id
* @return ResponseInterface
*/
public function editAction(Request $request, Response $response, $record_id): ResponseInterface
@ -85,7 +85,7 @@ abstract class AbstractGenericCrudController extends AbstractCrudController
/**
* @param Request $request
* @param Response $response
* @param $record_id
* @param mixed $record_id
* @return ResponseInterface
*/
public function deleteAction(Request $request, Response $response, $record_id): ResponseInterface
@ -104,7 +104,7 @@ abstract class AbstractGenericCrudController extends AbstractCrudController
}
/**
* @param $record_id
* @param mixed $record_id
* @return object|null
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException

View File

@ -40,9 +40,11 @@ class SettingsController
$this->serializer = $serializer;
$this->validator = $validator;
$this->settings_repo = $this->em->getRepository(Entity\Settings::class);
/** @var Entity\Repository\SettingsRepository $settings_repo */
$settings_repo = $em->getRepository(Entity\Settings::class);
$all_settings = $this->settings_repo->fetchAll();
$this->settings_repo = $settings_repo;
$all_settings = $settings_repo->fetchAll();
$this->api_settings = $this->serializer->denormalize($all_settings, Entity\Api\Admin\Settings::class);
}

View File

@ -76,10 +76,9 @@ class AccountController
return $response->withRedirect($request->getUri()->getPath());
}
$login_success = $this->auth->authenticate($_POST['username'], $_POST['password']);
if ($login_success) {
$user = $this->auth->authenticate($_POST['username'], $_POST['password']);
if ($user instanceof User) {
// Regenerate session ID
$session->regenerate();
@ -87,8 +86,6 @@ class AccountController
$this->acl->reload();
// Persist user as database entity.
$user = $this->auth->getLoggedInUser();
$this->em->persist($user);
$this->em->flush();

View File

@ -87,8 +87,8 @@ class DashboardController
}
// Get administrator notifications.
$notification_event = $this->dispatcher->dispatch(GetNotifications::NAME, new GetNotifications($user));
$notification_event = new GetNotifications($user);
$this->dispatcher->dispatch(GetNotifications::NAME, $notification_event);
$notifications = $notification_event->getNotifications();

View File

@ -91,7 +91,7 @@ class EditController extends FilesControllerAbstract
// Detect rename.
if ($data['path'] !== $media->getPath()) {
$path_full = 'media://'.$data['path'];
$fs->rename($media->getFullPath(), $path_full);
$fs->rename($media->getPathUri(), $path_full);
}
if (!empty($custom_fields)) {

View File

@ -116,9 +116,13 @@ class OverviewController
// Compile the above data.
$song_totals = [];
/** @var Entity\Repository\SongRepository $song_repo */
$song_repo = $this->em->getRepository(Entity\Song::class);
foreach ($song_totals_raw as $total_type => $total_records) {
foreach ($total_records as $total_record) {
$song = $this->em->getRepository(Entity\Song::class)->findAsArray($total_record['song_id']);
$song = $song_repo->findAsArray($total_record['song_id']);
$total_record['song'] = $song;
$song_totals[$total_type][] = $total_record;
@ -128,7 +132,6 @@ class OverviewController
}
/* Song "Deltas" (Changes in Listener Count) */
$threshold = strtotime('-2 weeks');
// Get all songs played in timeline.

View File

@ -81,12 +81,15 @@ class NowPlaying extends AbstractTask implements EventSubscriberInterface
$this->event_dispatcher = $event_dispatcher;
$this->influx = $influx;
$this->history_repo = $this->em->getRepository(Entity\SongHistory::class);
$this->song_repo = $this->em->getRepository(Entity\Song::class);
$this->listener_repo = $this->em->getRepository(Entity\Listener::class);
$this->history_repo = $em->getRepository(Entity\SongHistory::class);
$this->song_repo = $em->getRepository(Entity\Song::class);
$this->listener_repo = $em->getRepository(Entity\Listener::class);
$this->settings_repo = $this->em->getRepository(Entity\Settings::class);
$this->analytics_level = $this->settings_repo->getSetting('analytics', Entity\Analytics::LEVEL_ALL);
/** @var Entity\Repository\SettingsRepository $settings_repo */
$settings_repo = $em->getRepository(Entity\Settings::class);
$this->settings_repo = $settings_repo;
$this->analytics_level = $settings_repo->getSetting('analytics', Entity\Analytics::LEVEL_ALL);
}
public static function getSubscribedEvents()