Rev 1 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.namespace enrol_lti\local\ltiadvantage\entity;/*** Class application_registration.** This class represents an LTI Advantage Application Registration.* Each registered application may contain one or more deployments of the Moodle tool.* This registration provides the security contract for all tool deployments belonging to the registration.** @package enrol_lti* @copyright 2021 Jake Dallimore <jrhdallimore@gmail.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class application_registration {/** @var int|null the if of this registration instance, or null if it hasn't been stored yet. */private $id;/** @var string the name of the application being registered. */private $name;/** @var \moodle_url the issuer identifying the platform, as provided by the platform. */private $platformid;/** @var string the client id as provided by the platform. */private $clientid;/** @var \moodle_url the authentication request URL, as provided by the platform. */private $authenticationrequesturl;/** @var \moodle_url the certificate URL, as provided by the platform. */private $jwksurl;/** @var \moodle_url the access token URL, as provided by the platform. */private $accesstokenurl;/** @var string a unique identifier used by the registration in the initiate_login_uri to act as registration identifier.*/private $uniqueid;/** @var int status of the registration, either incomplete (draft) or complete (all required data present). */private $status;/** @var int const representing the incomplete state */const REGISTRATION_STATUS_INCOMPLETE = 0;/** @var int const representing a complete state */const REGISTRATION_STATUS_COMPLETE = 1;/*** The application_registration constructor.** @param string $name the descriptor for this application registration.* @param string $uniqueid a unique identifier for the registration used in place of client_id in the login URI.* @param \moodle_url|null $platformid the URL of application* @param string|null $clientid unique id for the client on the application* @param \moodle_url|null $authenticationrequesturl URL to send OIDC Auth requests to.* @param \moodle_url|null $jwksurl URL to use to get public keys from the application.* @param \moodle_url|null $accesstokenurl URL to use to get an access token from the application, used in service calls.* @param int|null $id the id of the object instance, if being created from an existing store item.*/private function __construct(string $name, string $uniqueid, ?\moodle_url $platformid, ?string $clientid,?\moodle_url $authenticationrequesturl, ?\moodle_url $jwksurl, ?\moodle_url $accesstokenurl, ?int $id = null) {if (empty($name)) {throw new \coding_exception("Invalid 'name' arg. Cannot be an empty string.");}if (empty($uniqueid)) {throw new \coding_exception("Invalid 'uniqueid' arg. Cannot be an empty string.");}// Resolve the registration status.$iscomplete = (!is_null($platformid) && !is_null($clientid) && !is_null($authenticationrequesturl) &&!is_null($authenticationrequesturl) && !is_null($jwksurl) && !is_null($accesstokenurl));$this->status = $iscomplete ? self::REGISTRATION_STATUS_COMPLETE : self::REGISTRATION_STATUS_INCOMPLETE;$this->name = $name;$this->uniqueid = $uniqueid;$this->platformid = $platformid;$this->clientid = $clientid;$this->authenticationrequesturl = $authenticationrequesturl;$this->jwksurl = $jwksurl;$this->accesstokenurl = $accesstokenurl;$this->id = $id;}/*** Factory method to create a new instance of an application registration** @param string $name the descriptor for this application registration.* @param string $uniqueid a unique identifier for the registration used in place of client_id in the login URI.* @param \moodle_url $platformid the URL of application* @param string $clientid unique id for the client on the application* @param \moodle_url $authenticationrequesturl URL to send OIDC Auth requests to.* @param \moodle_url $jwksurl URL to use to get public keys from the application.* @param \moodle_url $accesstokenurl URL to use to get an access token from the application, used in service calls.* @param int|null $id the id of the object instance, if being created from an existing store item.* @return application_registration the application_registration instance.* @throws \coding_exception if an invalid clientid is provided.*/public static function create(string $name, string $uniqueid, \moodle_url $platformid, string $clientid,\moodle_url $authenticationrequesturl, \moodle_url $jwksurl, \moodle_url $accesstokenurl,?int $id = null): application_registration {if (empty($clientid)) {throw new \coding_exception("Invalid 'clientid' arg. Cannot be an empty string.");}return new self($name, $uniqueid, $platformid, $clientid, $authenticationrequesturl, $jwksurl, $accesstokenurl, $id);}/*** Factory method to create a draft application registration.** @param string $name the descriptor for the draft application registration.* @param string $uniqueid a unique identifier for the registration used in place of client_id in the login URI.* @param int|null $id the id of the object instance, if being created from an existing store item.* @return application_registration the application_registration instance.*/public static function create_draft(string $name, string $uniqueid, ?int $id = null): application_registration {return new self($name, $uniqueid, null, null, null, null, null, $id);}/*** Get the integer id of this object instance.** Will return null if the instance has not yet been stored.** @return null|int the id, if set, otherwise null.*/public function get_id(): ?int {return $this->id;}/*** Get the name of the application being registered.** @return string the name.*/public function get_name(): string {return $this->name;}/*** Sets the name of this registration.** @param string $name the new name to set.* @throws \coding_exception if the provided name is invalid.*/public function set_name(string $name): void {if (empty($name)) {throw new \coding_exception("Invalid 'name' arg. Cannot be an empty string.");}$this->name = $name;}/*** Return the local unique client id of the registration.** @return string the id.*/public function get_uniqueid(): string {return $this->uniqueid;}/*** Get the platform id.** @return \moodle_url|null the platformid/issuer URL.*/public function get_platformid(): ?\moodle_url {return $this->platformid;}/*** Sets the platformid/issuer for this registration.** @param \moodle_url $platformid the platform id / iss to set.*/public function set_platformid(\moodle_url $platformid): void {$this->platformid = $platformid;}/*** Get the client id.** @return string|null the client id.*/public function get_clientid(): ?string {return $this->clientid;}/*** Sets the client id for this registration.** @param string $clientid the client id* @throws \coding_exception if the client id is invalid.*/public function set_clientid(string $clientid): void {if (empty($clientid)) {throw new \coding_exception("Invalid 'clientid' arg. Cannot be an empty string.");}$this->clientid = $clientid;}/*** Get the authentication request URL.** @return \moodle_url|null the authentication request URL.*/public function get_authenticationrequesturl(): ?\moodle_url {return $this->authenticationrequesturl;}/*** Sets the authentication request URL for this registration.** @param \moodle_url $authenticationrequesturl the authentication request URL.*/public function set_authenticationrequesturl(\moodle_url $authenticationrequesturl): void {$this->authenticationrequesturl = $authenticationrequesturl;}/*** Get the JWKS URL.** @return \moodle_url|null the JWKS URL.*/public function get_jwksurl(): ?\moodle_url {return $this->jwksurl;}/*** Sets the JWKS URL for this registration.** @param \moodle_url $jwksurl the JWKS URL.*/public function set_jwksurl(\moodle_url $jwksurl): void {$this->jwksurl = $jwksurl;}/*** Get the access token URL.** @return \moodle_url|null the access token URL.*/public function get_accesstokenurl(): ?\moodle_url {return $this->accesstokenurl;}/*** Sets the access token URL for this registration.** @param \moodle_url $accesstokenurl the access token URL.*/public function set_accesstokenurl(\moodle_url $accesstokenurl): void {$this->accesstokenurl = $accesstokenurl;}/*** Add a tool deployment to this registration.** @param string $name human readable name for the deployment.* @param string $deploymentid the unique id of the tool deployment in the platform.* @return deployment the new deployment.* @throws \coding_exception if trying to add a deployment to an instance without an id assigned.*/public function add_tool_deployment(string $name, string $deploymentid): deployment {if (empty($this->get_id())) {throw new \coding_exception("Can't add deployment to a resource_link that hasn't first been saved.");}return deployment::create($this->get_id(),$deploymentid,$name);}/*** Check whether this registration is complete or not.*/public function is_complete(): bool {return $this->status == self::REGISTRATION_STATUS_COMPLETE;}/*** Attempt to progress this registration to the 'complete' state, provided required state exists.** @see REGISTRATION_STATUS_COMPLETE** @throws \coding_exception if the registration isn't in a state to be transitioned to complete.*/public function complete_registration(): void {// Check completeness of registration.if (is_null($this->platformid)) {throw new \coding_exception("Unable to complete registration. Platform ID is missing.");}if (is_null($this->clientid)) {throw new \coding_exception("Unable to complete registration. Client ID is missing.");}if (is_null($this->accesstokenurl)) {throw new \coding_exception("Unable to complete registration. Access token URL is missing.");}if (is_null($this->authenticationrequesturl)) {throw new \coding_exception("Unable to complete registration. Authentication request URL is missing.");}if (is_null($this->jwksurl)) {throw new \coding_exception("Unable to complete registration. JWKS URL is missing.");}$this->status = self::REGISTRATION_STATUS_COMPLETE;}}