Spaces:
No application file
No application file
| namespace Mautic\ApiBundle\Entity\oAuth2; | |
| use Doctrine\Common\Collections\ArrayCollection; | |
| use Doctrine\ORM\Mapping as ORM; | |
| use FOS\OAuthServerBundle\Model\Client as BaseClient; | |
| use Mautic\CoreBundle\Doctrine\Mapping\ClassMetadataBuilder; | |
| use Mautic\UserBundle\Entity\Role; | |
| use Mautic\UserBundle\Entity\User; | |
| use OAuth2\OAuth2; | |
| use Symfony\Component\Validator\Constraints as Assert; | |
| use Symfony\Component\Validator\Mapping\ClassMetadata; | |
| class Client extends BaseClient | |
| { | |
| /** | |
| * @var int | |
| */ | |
| protected $id; | |
| /** | |
| * @var string | |
| */ | |
| protected $name; | |
| /** | |
| * @var ArrayCollection<int, \Mautic\UserBundle\Entity\User> | |
| */ | |
| protected $users; | |
| /** | |
| * @var ArrayCollection | |
| */ | |
| protected $authCodes; | |
| /** | |
| * @var string | |
| */ | |
| protected $randomId; | |
| /** | |
| * @var string | |
| */ | |
| protected $secret; | |
| /** | |
| * @var array | |
| */ | |
| protected $redirectUris = []; | |
| /** | |
| * @var array | |
| */ | |
| protected $allowedGrantTypes; | |
| /** | |
| * @var Role|null | |
| */ | |
| protected $role; | |
| public function __construct() | |
| { | |
| parent::__construct(); | |
| $this->allowedGrantTypes = [ | |
| OAuth2::GRANT_TYPE_AUTH_CODE, | |
| OAuth2::GRANT_TYPE_REFRESH_TOKEN, | |
| ]; | |
| $this->users = new ArrayCollection(); | |
| $this->authCodes = new ArrayCollection(); | |
| } | |
| public static function loadMetadata(ORM\ClassMetadata $metadata): void | |
| { | |
| $builder = new ClassMetadataBuilder($metadata); | |
| $builder->setTable('oauth2_clients') | |
| ->setCustomRepositoryClass(ClientRepository::class) | |
| ->addIndex(['random_id'], 'client_id_search'); | |
| $builder->addIdColumns('name', false); | |
| $builder->createManyToMany('users', User::class) | |
| ->setJoinTable('oauth2_user_client_xref') | |
| ->addInverseJoinColumn('user_id', 'id', false, false, 'CASCADE') | |
| ->addJoinColumn('client_id', 'id', false, false, 'CASCADE') | |
| ->fetchExtraLazy() | |
| ->build(); | |
| $builder->createField('randomId', 'string') | |
| ->columnName('random_id') | |
| ->build(); | |
| $builder->addField('secret', 'string'); | |
| $builder->createField('redirectUris', 'array') | |
| ->columnName('redirect_uris') | |
| ->build(); | |
| $builder->createField('allowedGrantTypes', 'array') | |
| ->columnName('allowed_grant_types') | |
| ->build(); | |
| $builder->createManyToOne('role', Role::class) | |
| ->addJoinColumn('role_id', 'id', true, false) | |
| ->cascadePersist() | |
| ->build(); | |
| } | |
| public static function loadValidatorMetadata(ClassMetadata $metadata): void | |
| { | |
| $metadata->addPropertyConstraint('name', new Assert\NotBlank( | |
| ['message' => 'mautic.core.name.required'] | |
| )); | |
| $metadata->addPropertyConstraint('redirectUris', new Assert\NotBlank( | |
| ['message' => 'mautic.api.client.redirecturis.notblank'] | |
| )); | |
| } | |
| /** | |
| * @var array | |
| */ | |
| protected $changes; | |
| protected function isChanged($prop, $val) | |
| { | |
| $getter = 'get'.ucfirst($prop); | |
| $current = $this->$getter(); | |
| if ($current != $val) { | |
| $this->changes[$prop] = [$current, $val]; | |
| } | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public function getChanges() | |
| { | |
| return $this->changes; | |
| } | |
| /** | |
| * @return int | |
| */ | |
| public function getId() | |
| { | |
| return $this->id; | |
| } | |
| /** | |
| * @param string $name | |
| * | |
| * @return Client | |
| */ | |
| public function setName($name) | |
| { | |
| $this->isChanged('name', $name); | |
| $this->name = $name; | |
| return $this; | |
| } | |
| /** | |
| * @return string | |
| */ | |
| public function getName() | |
| { | |
| return $this->name; | |
| } | |
| public function setRedirectUris(array $redirectUris): void | |
| { | |
| $this->isChanged('redirectUris', $redirectUris); | |
| $this->redirectUris = $redirectUris; | |
| } | |
| /** | |
| * @return Client | |
| */ | |
| public function addAuthCode(AuthCode $authCodes) | |
| { | |
| $this->authCodes[] = $authCodes; | |
| return $this; | |
| } | |
| public function removeAuthCode(AuthCode $authCodes): void | |
| { | |
| $this->authCodes->removeElement($authCodes); | |
| } | |
| /** | |
| * @return \Doctrine\Common\Collections\Collection | |
| */ | |
| public function getAuthCodes() | |
| { | |
| return $this->authCodes; | |
| } | |
| /** | |
| * Determines if a client attempting API access is already authorized by the user. | |
| * | |
| * @return bool | |
| */ | |
| public function isAuthorizedClient(User $user) | |
| { | |
| $users = $this->getUsers(); | |
| return $users->contains($user); | |
| } | |
| /** | |
| * @return Client | |
| */ | |
| public function addUser(User $users) | |
| { | |
| $this->users[] = $users; | |
| return $this; | |
| } | |
| public function removeUser(User $users): void | |
| { | |
| $this->users->removeElement($users); | |
| } | |
| /** | |
| * @return \Doctrine\Common\Collections\Collection | |
| */ | |
| public function getUsers() | |
| { | |
| return $this->users; | |
| } | |
| /** | |
| * Add Authorization Grant Type. | |
| */ | |
| public function addGrantType(string $grantType): Client | |
| { | |
| $this->allowedGrantTypes[] = $grantType; | |
| return $this; | |
| } | |
| public function getRole(): Role | |
| { | |
| return $this->role; | |
| } | |
| public function setRole(Role $role): void | |
| { | |
| $this->role = $role; | |
| } | |
| } | |