diff options
Diffstat (limited to 'Echo/includes/api/Push/ApiEchoPushSubscriptionsCreate.php')
-rw-r--r-- | Echo/includes/api/Push/ApiEchoPushSubscriptionsCreate.php | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/Echo/includes/api/Push/ApiEchoPushSubscriptionsCreate.php b/Echo/includes/api/Push/ApiEchoPushSubscriptionsCreate.php new file mode 100644 index 00000000..db8009ec --- /dev/null +++ b/Echo/includes/api/Push/ApiEchoPushSubscriptionsCreate.php @@ -0,0 +1,115 @@ +<?php + +namespace EchoPush\Api; + +use ApiBase; +use ApiMain; +use EchoPush\SubscriptionManager; +use EchoServices; +use Wikimedia\ParamValidator\ParamValidator; + +class ApiEchoPushSubscriptionsCreate extends ApiBase { + + /** + * Supported push notification providers: + * (1) fcm: Firebase Cloud Messaging + * (2) apns: Apple Push Notification Service + */ + private const PROVIDERS = [ 'fcm', 'apns' ]; + + /** @var ApiBase */ + private $parent; + + /** @var SubscriptionManager */ + private $subscriptionManager; + + /** + * Static entry point for initializing the module + * @param ApiBase $parent Parent module + * @param string $name Module name + * @return ApiEchoPushSubscriptionsCreate + */ + public static function factory( ApiBase $parent, string $name ): + ApiEchoPushSubscriptionsCreate { + $subscriptionManger = EchoServices::getInstance()->getPushSubscriptionManager(); + $module = new self( $parent->getMain(), $name, $subscriptionManger ); + $module->parent = $parent; + return $module; + } + + /** + * @param ApiMain $mainModule + * @param string $moduleName + * @param SubscriptionManager $subscriptionManager + */ + public function __construct( + ApiMain $mainModule, + string $moduleName, + SubscriptionManager $subscriptionManager + ) { + parent::__construct( $mainModule, $moduleName ); + $this->subscriptionManager = $subscriptionManager; + } + + /** + * Entry point for executing the module. + * @inheritDoc + */ + public function execute(): void { + $provider = $this->getParameter( 'provider' ); + $token = $this->getParameter( 'providertoken' ); + $success = $this->subscriptionManager->create( $this->getUser(), $provider, $token ); + if ( !$success ) { + $this->dieWithError( 'apierror-echo-push-token-exists' ); + } + } + + /** + * Get the parent module. + * @return ApiBase + */ + public function getParent(): ApiBase { + return $this->parent; + } + + /** @inheritDoc */ + protected function getAllowedParams(): array { + return [ + 'provider' => [ + ParamValidator::PARAM_TYPE => self::PROVIDERS, + ParamValidator::PARAM_REQUIRED => true, + ], + 'providertoken' => [ + ParamValidator::PARAM_TYPE => 'string', + ParamValidator::PARAM_REQUIRED => true, + ], + ]; + } + + /** @inheritDoc */ + protected function getExamplesMessages(): array { + return [ + "action=echopushsubscriptions&command=create&provider=fcm&providertoken=ABC123" => + "apihelp-echopushsubscriptions+create-example" + ]; + } + + // The parent module already enforces these but they make documentation nicer. + + /** @inheritDoc */ + public function isWriteMode(): bool { + return true; + } + + /** @inheritDoc */ + public function mustBePosted(): bool { + return true; + } + + /** @inheritDoc */ + public function isInternal(): bool { + // experimental! + return true; + } + +} |