%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/live/driver/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/live/driver/Push.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\live\driver; use Firebase\JWT\JWT; use Yii; use yii\helpers\Json; use yii\helpers\Url; use yii\base\InvalidConfigException; use yii\redis\Connection; use yii\di\Instance; use humhub\modules\user\models\User; use humhub\modules\live\components\LiveEvent; use humhub\modules\live\assets\LivePushAsset; use humhub\modules\live\live\LegitimationChanged; /** * Database driver for live events * * @since 1.3 * @author Luke */ class Push extends BaseDriver { /** * @var string the used Redis push channel */ public $pushChannel = 'push'; /** * @var string the URL to the push service */ public $pushServiceUrl = ''; /** * @var string the JWT secret key */ public $jwtKey = ''; /** * @var Connection|string|array the Redis [[Connection]] object or the application component ID of the Redis [[Connection]]. * This can also be an array that is used to create a redis [[Connection]] instance in case you do not want do configure * redis connection as an application component. * After the Cache object is created, if you want to change this property, you should only assign it * with a Redis [[Connection]] object. */ public $redis = 'redis'; /** * Initializes the live push component. * This method will initialize the [[redis]] property to make sure it refers to a valid redis connection. * * @throws \yii\base\InvalidConfigException if [[redis]] is invalid. */ public function init() { parent::init(); Yii::$app->view->registerAssetBundle(LivePushAsset::class); $this->redis = Instance::ensure($this->redis, Connection::class); if (empty($this->jwtKey)) { throw new InvalidConfigException('Push driver JWT key is not specified.'); } } /** * @inheritdoc */ public function send(LiveEvent $liveEvent) { $this->redis->publish($this->pushChannel, Json::encode($liveEvent->getData())); } /** * @inheritdoc */ public function getJsConfig() { return [ 'type' => 'humhub.modules.live.push.PushClient', 'options' => [ 'url' => $this->pushServiceUrl, 'jwt' => $this->generateJwtAuthorization(), ] ]; } /** * Generates an JWT authorization of the current user including * the contentContainer id legitmation. * * @return string the JWT string * @throws \Throwable */ public function generateJwtAuthorization() { if (Yii::$app->user->isGuest) { return ''; } $user = Yii::$app->user->getIdentity(); $token = [ 'iss' => Url::to(['/'], true), 'sub' => Yii::$app->user->id, 'legitmation' => Yii::$app->getModule('live')->getLegitimateContentContainerIds($user) ]; return JWT::encode($token, $this->jwtKey); } /** * @inheritdoc */ public function onContentContainerLegitimationChanged(User $user, $legitimation = []) { $this->send(new LegitimationChanged(['contentContainerId' => $user->contentcontainer_id, 'userId' => $user->id, 'legitimation' => $legitimation])); } }