. * */ namespace Friendica\Core\Session\Model; use Friendica\Core\Session\Capability\IHandleSessions; use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Model\Contact; class UserSession implements IHandleUserSessions { /** @var IHandleSessions */ private $session; /** @var int|bool saves the public Contact ID for later usage */ protected $publicContactId = false; public function __construct(IHandleSessions $session) { $this->session = $session; } /** {@inheritDoc} */ public function getLocalUserId() { if (!empty($this->session->get('authenticated')) && !empty($this->session->get('uid'))) { return intval($this->session->get('uid')); } return false; } /** {@inheritDoc} */ public function getPublicContactId() { if (empty($this->publicContactId) && !empty($this->session->get('authenticated'))) { if (!empty($this->session->get('my_address'))) { // Local user $this->publicContactId = Contact::getIdForURL($this->session->get('my_address'), 0, false); } elseif (!empty($this->session->get('visitor_home'))) { // Remote user $this->publicContactId = Contact::getIdForURL($this->session->get('visitor_home'), 0, false); } } elseif (empty($this->session->get('authenticated'))) { $this->publicContactId = false; } return $this->publicContactId; } /** {@inheritDoc} */ public function getRemoteUserId() { if (empty($this->session->get('authenticated'))) { return false; } if (!empty($this->session->get('visitor_id'))) { return (int)$this->session->get('visitor_id'); } return false; } /** {@inheritDoc} */ public function getRemoteContactID(int $uid): int { if (!empty($this->session->get('remote')[$uid])) { $remote = $this->session->get('remote')[$uid]; } else { $remote = 0; } $local_user = !empty($this->session->get('authenticated')) ? $this->session->get('uid') : 0; if (empty($remote) && ($local_user != $uid) && !empty($my_address = $this->session->get('my_address'))) { $remote = Contact::getIdForURL($my_address, $uid, false); } return $remote; } /** {@inheritDoc} */ public function getUserIDForVisitorContactID(int $cid): int { if (empty($this->session->get('remote'))) { return false; } return array_search($cid, $this->session->get('remote')); } /** {@inheritDoc} */ public function isAuthenticated(): bool { return $this->session->get('authenticated', false); } /** {@inheritDoc} */ public function setVisitorsContacts() { $this->session->set('remote', Contact::getVisitorByUrl($this->session->get('my_url'))); } }