Improvements
This commit is contained in:
parent
80f6650eaf
commit
18fcee5863
4 changed files with 67 additions and 43 deletions
|
@ -3,7 +3,7 @@
|
|||
namespace FederationLib\Interfaces;
|
||||
|
||||
use FederationLib\Objects\ClientRecord;
|
||||
use FederationLib\Objects\PeerRecord;
|
||||
use FederationLib\Objects\ParsedFederatedAddress;
|
||||
use FederationLib\Objects\Standard\PeerMetadata\TelegramUserMetadata;
|
||||
|
||||
interface PeerMetadataManagerInterface
|
||||
|
@ -31,8 +31,8 @@
|
|||
/**
|
||||
* Returns the metadata of the given federated address, this returns the full raw metadata
|
||||
*
|
||||
* @param PeerRecord|string $federated_address
|
||||
* @param ParsedFederatedAddress|string $federated_address
|
||||
* @return TelegramUserMetadata
|
||||
*/
|
||||
public function getMetadata(PeerRecord|string $federated_address): TelegramUserMetadata;
|
||||
public function getMetadata(ParsedFederatedAddress|string $federated_address): TelegramUserMetadata;
|
||||
}
|
|
@ -15,7 +15,7 @@
|
|||
use FederationLib\Interfaces\PeerMetadataManagerInterface;
|
||||
use FederationLib\Managers\RedisConnectionManager;
|
||||
use FederationLib\Objects\ClientRecord;
|
||||
use FederationLib\Objects\PeerRecord;
|
||||
use FederationLib\Objects\ParsedFederatedAddress;
|
||||
use FederationLib\Objects\Standard\PeerMetadata\TelegramUserMetadata;
|
||||
use LogLib\Log;
|
||||
|
||||
|
@ -182,24 +182,19 @@
|
|||
}
|
||||
|
||||
/**
|
||||
* @param PeerRecord|string $federated_address
|
||||
* @param ParsedFederatedAddress|string $federated_address
|
||||
* @return TelegramUserMetadata
|
||||
*@throws DatabaseException
|
||||
* @throws DatabaseException
|
||||
* @throws PeerMetadataNotFoundException
|
||||
*/
|
||||
public function getMetadata(PeerRecord|string $federated_address): TelegramUserMetadata
|
||||
public function getMetadata(ParsedFederatedAddress|string $federated_address): TelegramUserMetadata
|
||||
{
|
||||
if($federated_address instanceof PeerRecord)
|
||||
{
|
||||
$federated_address = $federated_address->getFederatedAddress();
|
||||
}
|
||||
|
||||
if(Configuration::isCacheSystemEnabled() && Configuration::getObjectCacheEnabled('peer_objects'))
|
||||
{
|
||||
try
|
||||
{
|
||||
$redis = RedisConnectionManager::getConnectionFromConfig('peer_objects');
|
||||
$key = sprintf('telegram_user_metadata:%s', $federated_address);
|
||||
$key = sprintf('telegram_user_metadata:%s', $federated_address->getAddress());
|
||||
|
||||
if($redis->exists($key))
|
||||
{
|
||||
|
@ -210,13 +205,13 @@
|
|||
$redis->expire($key, Configuration::getObjectCacheTTL('peer_objects'));
|
||||
}
|
||||
|
||||
Log::debug(Misc::FEDERATIONLIB, sprintf('Loaded peer metadata object %s from cache', $federated_address));
|
||||
Log::debug(Misc::FEDERATIONLIB, sprintf('Loaded peer metadata object %s from cache', $federated_address->getAddress()));
|
||||
return $telegram_user_metadata;
|
||||
}
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
Log::warning(Misc::FEDERATIONLIB, sprintf('Failed to load peer metadata object %s from cache: %s', $federated_address, $e->getMessage()));
|
||||
Log::warning(Misc::FEDERATIONLIB, sprintf('Failed to load peer metadata object %s from cache: %s', $federated_address->getAddress(), $e->getMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -234,7 +229,7 @@
|
|||
);
|
||||
$qb->from(DatabaseTables::PEERS_TELEGRAM_USER);
|
||||
$qb->where('federated_address = :federated_address');
|
||||
$qb->setParameter('federated_address', $federated_address);
|
||||
$qb->setParameter('federated_address', $federated_address->getAddress());
|
||||
$qb->setMaxResults(1);
|
||||
|
||||
try
|
||||
|
@ -243,7 +238,7 @@
|
|||
|
||||
if($result->rowCount() === 0)
|
||||
{
|
||||
throw new PeerMetadataNotFoundException(sprintf('PeerRecord metadata not found for federated address %s', $federated_address));
|
||||
throw new PeerMetadataNotFoundException(sprintf('PeerRecord metadata not found for federated address %s', $federated_address->getAddress()));
|
||||
}
|
||||
|
||||
$telegram_user_metadata = TelegramUserMetadata::fromArray($result->fetchAssociative(), true);
|
||||
|
@ -254,7 +249,7 @@
|
|||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
throw new DatabaseException(sprintf('Failed to get peer metadata for federated address %s', $federated_address), $e);
|
||||
throw new DatabaseException(sprintf('Failed to get peer metadata for federated address %s', $federated_address->getAddress()), $e);
|
||||
}
|
||||
|
||||
if(Configuration::isCacheSystemEnabled() && Configuration::getObjectCacheEnabled('peer_objects'))
|
||||
|
@ -271,11 +266,11 @@
|
|||
$redis->expire($key, Configuration::getObjectCacheTTL('peer_objects'));
|
||||
}
|
||||
|
||||
Log::debug(Misc::FEDERATIONLIB, sprintf('Cached peer metadata object %s', $federated_address));
|
||||
Log::debug(Misc::FEDERATIONLIB, sprintf('Cached peer metadata object %s', $federated_address->getAddress()));
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
Log::warning(Misc::FEDERATIONLIB, sprintf('Failed to cache peer metadata object %s: %s', $federated_address, $e->getMessage()));
|
||||
Log::warning(Misc::FEDERATIONLIB, sprintf('Failed to cache peer metadata object %s: %s', $federated_address->getAddress(), $e->getMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
<?php
|
||||
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
namespace FederationLib\Managers;
|
||||
|
||||
use Doctrine\DBAL\ParameterType;
|
||||
|
@ -230,24 +232,29 @@
|
|||
/**
|
||||
* Returns a peer record for the given federated address
|
||||
*
|
||||
* @param string $federated_address
|
||||
* @param string|ParsedFederatedAddress $federated_address
|
||||
* @return PeerRecord
|
||||
* @throws CacheConnectionException
|
||||
* @throws DatabaseException
|
||||
* @throws PeerNotFoundException
|
||||
* @throws RedisException
|
||||
*/
|
||||
public function getPeer(string $federated_address): PeerRecord
|
||||
public function getPeer(string|ParsedFederatedAddress $federated_address): PeerRecord
|
||||
{
|
||||
if(!($federated_address instanceof ParsedFederatedAddress))
|
||||
{
|
||||
$federated_address = new ParsedFederatedAddress($federated_address);
|
||||
}
|
||||
|
||||
if(Configuration::isCacheSystemEnabled() && Configuration::getObjectCacheEnabled('peer_objects'))
|
||||
{
|
||||
$redis = RedisConnectionManager::getConnectionFromConfig('peer_objects');
|
||||
|
||||
if($redis->exists($federated_address))
|
||||
if($redis->exists($federated_address->getAddress()))
|
||||
{
|
||||
$peer = PeerRecord::fromArray($redis->hGetAll($federated_address));
|
||||
Log::debug(Misc::FEDERATIONLIB, sprintf('Loaded client object %s from cache', $federated_address));
|
||||
return $peer;
|
||||
$peer_record = PeerRecord::fromArray($redis->hGetAll($federated_address->getAddress()));
|
||||
Log::debug(Misc::FEDERATIONLIB, sprintf('Loaded client object %s from cache', $federated_address->getAddress()));
|
||||
return $peer_record;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -263,7 +270,7 @@
|
|||
);
|
||||
$qb->from(DatabaseTables::PEERS);
|
||||
$qb->where('federated_address = :federated_address');
|
||||
$qb->setParameter('federated_address', $federated_address);
|
||||
$qb->setParameter('federated_address', $federated_address->getAddress());
|
||||
$qb->setMaxResults(1);
|
||||
|
||||
try
|
||||
|
@ -272,10 +279,10 @@
|
|||
|
||||
if($result->rowCount() === 0)
|
||||
{
|
||||
throw new PeerNotFoundException($federated_address);
|
||||
throw new PeerNotFoundException($federated_address->getAddress());
|
||||
}
|
||||
|
||||
$peer = PeerRecord::fromArray($result->fetchAssociative());
|
||||
$peer_record = PeerRecord::fromArray($result->fetchAssociative());
|
||||
}
|
||||
catch(PeerNotFoundException $e)
|
||||
{
|
||||
|
@ -295,42 +302,64 @@
|
|||
$redis = RedisConnectionManager::getConnectionFromConfig('peer_objects');
|
||||
}
|
||||
|
||||
$redis->hMSet($peer->getFederatedAddress(), $peer->toArray());
|
||||
$redis->hMSet($federated_address->getAddress(), $peer_record->toArray());
|
||||
|
||||
if(Configuration::getObjectCacheTtl('peer_objects') > 0)
|
||||
{
|
||||
$redis->expire($peer->getFederatedAddress(), Configuration::getObjectCacheTtl('peer_objects'));
|
||||
$redis->expire($federated_address->getAddress(), Configuration::getObjectCacheTtl('peer_objects'));
|
||||
}
|
||||
|
||||
Log::debug(Misc::FEDERATIONLIB, sprintf('Cached peer object %s', $peer->getFederatedAddress()));
|
||||
Log::debug(Misc::FEDERATIONLIB, sprintf('Cached peer object %s', $federated_address->getAddress()));
|
||||
}
|
||||
catch(Exception $e)
|
||||
{
|
||||
Log::warning(Misc::FEDERATIONLIB, sprintf('Failed to cache peer object %s', $peer->getFederatedAddress()), $e);
|
||||
Log::warning(Misc::FEDERATIONLIB, sprintf('Failed to cache peer object %s', $federated_address->getAddress()), $e);
|
||||
}
|
||||
}
|
||||
|
||||
return $peer;
|
||||
return $peer_record;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a peer record for the given client UUID
|
||||
*
|
||||
* @param ParsedFederatedAddress|string $federated_address
|
||||
* @return PeerMetadataInterface
|
||||
* @throws UnsupportedPeerType
|
||||
*/
|
||||
public function getPeerMetadata(ParsedFederatedAddress|string $federated_address): PeerMetadataInterface
|
||||
{
|
||||
if(!($federated_address instanceof ParsedFederatedAddress))
|
||||
{
|
||||
$federated_address = $federated_address->getAddress();
|
||||
}
|
||||
|
||||
if(!array_key_exists($federated_address->getPeerClass(), $this->metadata_managers))
|
||||
{
|
||||
throw new UnsupportedPeerType(sprintf('Peer type %s is not supported', $federated_address->getPeerClass()));
|
||||
}
|
||||
|
||||
return $this->metadata_managers[$federated_address->getPeerClass()]->getMetadata($federated_address);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the peer's last seen timestamp
|
||||
*
|
||||
* @param ClientRecord|string $client_uuid
|
||||
* @param PeerRecord|string $federated_address
|
||||
* @param ParsedFederatedAddress|string $federated_address
|
||||
* @return void
|
||||
* @throws DatabaseException
|
||||
*/
|
||||
public function updateLastSeen(ClientRecord|string $client_uuid, PeerRecord|string $federated_address): void
|
||||
public function updateLastSeen(ClientRecord|string $client_uuid, ParsedFederatedAddress|string $federated_address): void
|
||||
{
|
||||
if($client_uuid instanceof ClientRecord)
|
||||
{
|
||||
$client_uuid = $client_uuid->getUuid();
|
||||
}
|
||||
|
||||
if($federated_address instanceof PeerRecord)
|
||||
if($federated_address instanceof ParsedFederatedAddress)
|
||||
{
|
||||
$federated_address = $federated_address->getFederatedAddress();
|
||||
$federated_address = $federated_address->getAddress();
|
||||
}
|
||||
|
||||
$qb = Database::getConnection()->createQueryBuilder();
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
private $client;
|
||||
|
||||
/**
|
||||
* @var PeerRecord|null
|
||||
* @var ParsedFederatedAddress|null
|
||||
*/
|
||||
private $peer;
|
||||
|
||||
|
@ -27,9 +27,9 @@
|
|||
* ResolvedIdentity constructor.
|
||||
*
|
||||
* @param ClientRecord|null $client
|
||||
* @param PeerRecord|null $peer
|
||||
* @param ParsedFederatedAddress|null $peer
|
||||
*/
|
||||
public function __construct(?ClientRecord $client, ?PeerRecord $peer=null, bool $allow_root=false)
|
||||
public function __construct(?ClientRecord $client, ?ParsedFederatedAddress $peer=null, bool $allow_root=false)
|
||||
{
|
||||
$this->client = $client;
|
||||
$this->peer = $peer;
|
||||
|
@ -81,9 +81,9 @@
|
|||
}
|
||||
|
||||
/**
|
||||
* @return PeerRecord|null
|
||||
* @return ParsedFederatedAddress|null
|
||||
*/
|
||||
public function getPeer(): ?PeerRecord
|
||||
public function getPeer(): ?ParsedFederatedAddress
|
||||
{
|
||||
return $this->peer;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue