aboutsummaryrefslogtreecommitdiffstats
path: root/includes/Rest/Validator/ParamValidatorCallbacks.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/Rest/Validator/ParamValidatorCallbacks.php')
-rw-r--r--includes/Rest/Validator/ParamValidatorCallbacks.php82
1 files changed, 82 insertions, 0 deletions
diff --git a/includes/Rest/Validator/ParamValidatorCallbacks.php b/includes/Rest/Validator/ParamValidatorCallbacks.php
new file mode 100644
index 000000000000..6c54a504d796
--- /dev/null
+++ b/includes/Rest/Validator/ParamValidatorCallbacks.php
@@ -0,0 +1,82 @@
+<?php
+
+namespace MediaWiki\Rest\Validator;
+
+use InvalidArgumentException;
+use MediaWiki\Rest\RequestInterface;
+use Psr\Http\Message\UploadedFileInterface;
+use User;
+use Wikimedia\ParamValidator\Callbacks;
+use Wikimedia\ParamValidator\ValidationException;
+
+class ParamValidatorCallbacks implements Callbacks {
+
+ /** @var RequestInterface */
+ private $request;
+
+ /** @var User */
+ private $user;
+
+ public function __construct( RequestInterface $request, User $user ) {
+ $this->request = $request;
+ $this->user = $user;
+ }
+
+ /**
+ * Get the raw parameters from a source in the request
+ * @param string $source 'path', 'query', or 'post'
+ * @return array
+ */
+ private function getParamsFromSource( $source ) {
+ switch ( $source ) {
+ case 'path':
+ return $this->request->getPathParams();
+
+ case 'query':
+ return $this->request->getQueryParams();
+
+ case 'post':
+ return $this->request->getPostParams();
+
+ default:
+ throw new InvalidArgumentException( __METHOD__ . ": Invalid source '$source'" );
+ }
+ }
+
+ public function hasParam( $name, array $options ) {
+ $params = $this->getParamsFromSource( $options['source'] );
+ return isset( $params[$name] );
+ }
+
+ public function getValue( $name, $default, array $options ) {
+ $params = $this->getParamsFromSource( $options['source'] );
+ return $params[$name] ?? $default;
+ // @todo Should normalization to NFC UTF-8 be done here (much like in the
+ // action API and the rest of MW), or should it be left to handlers to
+ // do whatever normalization they need?
+ }
+
+ public function hasUpload( $name, array $options ) {
+ if ( $options['source'] !== 'post' ) {
+ return false;
+ }
+ return $this->getUploadedFile( $name, $options ) !== null;
+ }
+
+ public function getUploadedFile( $name, array $options ) {
+ if ( $options['source'] !== 'post' ) {
+ return null;
+ }
+ $upload = $this->request->getUploadedFiles()[$name] ?? null;
+ return $upload instanceof UploadedFileInterface ? $upload : null;
+ }
+
+ public function recordCondition( ValidationException $condition, array $options ) {
+ // @todo Figure out how to handle warnings
+ }
+
+ public function useHighLimits( array $options ) {
+ return $this->user->isAllowed( 'apihighlimits' );
+ }
+
+}