Logging in Point API clients.

This commit is contained in:
Alexey Skobkin 2017-01-09 04:42:06 +03:00
parent 1df09fa68d
commit 7d0440db92
4 changed files with 47 additions and 7 deletions

View file

@ -18,7 +18,9 @@ services:
# Abstract API client with common dependency # Abstract API client with common dependency
app.point.abstract_api: app.point.abstract_api:
abstract: true abstract: true
arguments: ['@app.http.point_client'] arguments:
- '@app.http.point_client'
- '@logger'
app.point.api_user: app.point.api_user:
class: Skobkin\Bundle\PointToolsBundle\Service\UserApi class: Skobkin\Bundle\PointToolsBundle\Service\UserApi

View file

@ -4,6 +4,7 @@ namespace Skobkin\Bundle\PointToolsBundle\Service;
use GuzzleHttp\ClientInterface; use GuzzleHttp\ClientInterface;
use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ResponseInterface;
use Psr\Log\LoggerInterface;
/** /**
* @todo Refactor DTO deserialization * @todo Refactor DTO deserialization
@ -15,6 +16,11 @@ class AbstractApi
*/ */
protected $client; protected $client;
/**
* @var LoggerInterface
*/
protected $logger;
/** /**
* @var string Authentication token for API * @var string Authentication token for API
*/ */
@ -26,9 +32,10 @@ class AbstractApi
protected $csRfToken; protected $csRfToken;
public function __construct(ClientInterface $httpClient) public function __construct(ClientInterface $httpClient, LoggerInterface $logger)
{ {
$this->client = $httpClient; $this->client = $httpClient;
$this->logger = $logger;
} }
/** /**
@ -39,6 +46,8 @@ class AbstractApi
*/ */
public function sendGetRequest(string $path, array $parameters = []): ResponseInterface public function sendGetRequest(string $path, array $parameters = []): ResponseInterface
{ {
$this->logger->debug('Sending GET request', ['path' => $path, 'parameters' => $parameters]);
return $this->client->request('GET', $path, ['query' => $parameters]); return $this->client->request('GET', $path, ['query' => $parameters]);
} }
@ -50,6 +59,8 @@ class AbstractApi
*/ */
public function sendPostRequest(string $path, array $parameters = []): ResponseInterface public function sendPostRequest(string $path, array $parameters = []): ResponseInterface
{ {
$this->logger->debug('Sending POST request', ['path' => $path, 'parameters' => $parameters]);
return $request = $this->client->request('POST', $path, ['form_params' => $parameters]); return $request = $this->client->request('POST', $path, ['form_params' => $parameters]);
} }

View file

@ -3,6 +3,7 @@
namespace Skobkin\Bundle\PointToolsBundle\Service; namespace Skobkin\Bundle\PointToolsBundle\Service;
use GuzzleHttp\ClientInterface; use GuzzleHttp\ClientInterface;
use Psr\Log\LoggerInterface;
use Skobkin\Bundle\PointToolsBundle\Service\Factory\Blogs\PostFactory; use Skobkin\Bundle\PointToolsBundle\Service\Factory\Blogs\PostFactory;
/** /**
@ -16,9 +17,9 @@ class PostApi extends AbstractApi
private $postFactory; private $postFactory;
public function __construct(ClientInterface $httpClient, PostFactory $postFactory) public function __construct(ClientInterface $httpClient, LoggerInterface $logger, PostFactory $postFactory)
{ {
parent::__construct($httpClient); parent::__construct($httpClient, $logger);
$this->postFactory = $postFactory; $this->postFactory = $postFactory;
} }

View file

@ -7,6 +7,7 @@ use Doctrine\ORM\EntityRepository;
use GuzzleHttp\ClientInterface; use GuzzleHttp\ClientInterface;
use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\RequestException;
use JMS\Serializer\Serializer; use JMS\Serializer\Serializer;
use Psr\Log\LoggerInterface;
use Skobkin\Bundle\PointToolsBundle\DTO\Api\Auth; use Skobkin\Bundle\PointToolsBundle\DTO\Api\Auth;
use Skobkin\Bundle\PointToolsBundle\Entity\User; use Skobkin\Bundle\PointToolsBundle\Entity\User;
use Skobkin\Bundle\PointToolsBundle\Service\Exceptions\ApiException; use Skobkin\Bundle\PointToolsBundle\Service\Exceptions\ApiException;
@ -43,10 +44,9 @@ class UserApi extends AbstractApi
*/ */
private $serializer; private $serializer;
public function __construct(ClientInterface $httpClient, LoggerInterface $logger, EntityManager $entityManager, Serializer $serializer)
public function __construct(ClientInterface $httpClient, EntityManager $entityManager, Serializer $serializer)
{ {
parent::__construct($httpClient); parent::__construct($httpClient, $logger);
$this->em = $entityManager; $this->em = $entityManager;
$this->serializer = $serializer; $this->serializer = $serializer;
@ -55,9 +55,13 @@ class UserApi extends AbstractApi
public function isAuthDataValid(string $login, string $password): bool public function isAuthDataValid(string $login, string $password): bool
{ {
$this->logger->info('Checking user auth data via point.im API');
$auth = $this->authenticate($login, $password); $auth = $this->authenticate($login, $password);
if (null === $auth->getError() && null !== $auth->getToken()) { if (null === $auth->getError() && null !== $auth->getToken()) {
$this->logger->debug('Authentication successfull. Logging out.');
$this->logout($auth); $this->logout($auth);
return true; return true;
@ -68,6 +72,8 @@ class UserApi extends AbstractApi
public function authenticate(string $login, string $password): Auth public function authenticate(string $login, string $password): Auth
{ {
$this->logger->debug('Trying to authenticate user via Point.im API', ['login' => $login]);
try { try {
$authData = $this->getPostRequestData( $authData = $this->getPostRequestData(
'/api/login', '/api/login',
@ -89,6 +95,8 @@ class UserApi extends AbstractApi
public function logout(Auth $auth): bool public function logout(Auth $auth): bool
{ {
$this->logger->debug('Trying to log user out via Point.im API');
try { try {
$this->getPostRequestData('/api/logout', ['csrf_token' => $auth->getCsRfToken()]); $this->getPostRequestData('/api/logout', ['csrf_token' => $auth->getCsRfToken()]);
@ -117,6 +125,8 @@ class UserApi extends AbstractApi
*/ */
public function getUserSubscribersByLogin(string $login): array public function getUserSubscribersByLogin(string $login): array
{ {
$this->logger->debug('Trying to get user subscribers by login', ['login' => $login]);
try { try {
$usersList = $this->getGetRequestData('/api/user/'.urlencode($login).'/subscribers', [], true); $usersList = $this->getGetRequestData('/api/user/'.urlencode($login).'/subscribers', [], true);
} catch (RequestException $e) { } catch (RequestException $e) {
@ -143,6 +153,8 @@ class UserApi extends AbstractApi
*/ */
public function getUserSubscribersById(int $id): array public function getUserSubscribersById(int $id): array
{ {
$this->logger->debug('Trying to get user subscribers by id', ['id' => $id]);
try { try {
$usersList = $this->getGetRequestData('/api/user/id/'.(int) $id.'/subscribers', [], true); $usersList = $this->getGetRequestData('/api/user/id/'.(int) $id.'/subscribers', [], true);
} catch (RequestException $e) { } catch (RequestException $e) {
@ -169,6 +181,8 @@ class UserApi extends AbstractApi
*/ */
public function getUserSubscriptionsByLogin(string $login): array public function getUserSubscriptionsByLogin(string $login): array
{ {
$this->logger->debug('Trying to get user subscriptions by login', ['login' => $login]);
try { try {
$usersList = $this->getGetRequestData('/api/user/'.urlencode($login).'/subscriptions', [], true); $usersList = $this->getGetRequestData('/api/user/'.urlencode($login).'/subscriptions', [], true);
} catch (RequestException $e) { } catch (RequestException $e) {
@ -195,6 +209,8 @@ class UserApi extends AbstractApi
*/ */
public function getUserSubscriptionsById(int $id): array public function getUserSubscriptionsById(int $id): array
{ {
$this->logger->debug('Trying to get user subscriptions by id', ['id' => $id]);
try { try {
$usersList = $this->getGetRequestData('/api/user/id/'.(int) $id.'/subscriptions', [], true); $usersList = $this->getGetRequestData('/api/user/id/'.(int) $id.'/subscriptions', [], true);
} catch (RequestException $e) { } catch (RequestException $e) {
@ -220,6 +236,8 @@ class UserApi extends AbstractApi
*/ */
public function getUserByLogin(string $login): User public function getUserByLogin(string $login): User
{ {
$this->logger->debug('Trying to get user by login', ['login' => $login]);
try { try {
$userInfo = $this->getGetRequestData('/api/user/login/'.urlencode($login), [], true); $userInfo = $this->getGetRequestData('/api/user/login/'.urlencode($login), [], true);
} catch (RequestException $e) { } catch (RequestException $e) {
@ -245,6 +263,8 @@ class UserApi extends AbstractApi
*/ */
public function getUserById(int $id): User public function getUserById(int $id): User
{ {
$this->logger->debug('Trying to get user by id', ['id' => $id]);
try { try {
$userInfo = $this->getGetRequestData('/api/user/id/'.$id, [], true); $userInfo = $this->getGetRequestData('/api/user/id/'.$id, [], true);
} catch (RequestException $e) { } catch (RequestException $e) {
@ -270,6 +290,8 @@ class UserApi extends AbstractApi
*/ */
public function getUserFromUserInfo(array $userInfo): User public function getUserFromUserInfo(array $userInfo): User
{ {
$this->logger->debug('Trying to create user from array', ['array' => $userInfo]);
// @todo Refactor to UserFactory->createFromArray() // @todo Refactor to UserFactory->createFromArray()
if (array_key_exists('id', $userInfo) && array_key_exists('login', $userInfo) && array_key_exists('name', $userInfo) && is_numeric($userInfo['id'])) { if (array_key_exists('id', $userInfo) && array_key_exists('login', $userInfo) && array_key_exists('name', $userInfo) && is_numeric($userInfo['id'])) {
/** @var User $user */ /** @var User $user */
@ -294,6 +316,8 @@ class UserApi extends AbstractApi
/** /**
* Get array of User objects from API response containing user list * Get array of User objects from API response containing user list
* *
* @todo refactor
*
* @param array $users * @param array $users
* *
* @return User[] * @return User[]
@ -303,6 +327,8 @@ class UserApi extends AbstractApi
*/ */
private function getUsersFromList(array $users = []): array private function getUsersFromList(array $users = []): array
{ {
$this->logger->debug('Trying to create multiple users from array', ['array' => $users]);
/** @var User[] $resultUsers */ /** @var User[] $resultUsers */
$resultUsers = []; $resultUsers = [];