diff --git a/app/Http/Controllers/Apis/Protected/Main/OAuth2MembersApiController.php b/app/Http/Controllers/Apis/Protected/Main/OAuth2MembersApiController.php index 32ba5c6c..129bf927 100644 --- a/app/Http/Controllers/Apis/Protected/Main/OAuth2MembersApiController.php +++ b/app/Http/Controllers/Apis/Protected/Main/OAuth2MembersApiController.php @@ -11,6 +11,7 @@ * See the License for the specific language governing permissions and * limitations under the License. **/ +use App\Http\Utils\PagingConstants; use App\Services\Model\IMemberService; use models\exceptions\EntityNotFoundException; use models\exceptions\ValidationException; @@ -61,11 +62,10 @@ final class OAuth2MembersApiController extends OAuth2ProtectedController $values = Input::all(); - $rules = array - ( + $rules = [ 'page' => 'integer|min:1', - 'per_page' => 'required_with:page|integer|min:5|max:100', - ); + 'per_page' => sprintf('required_with:page|integer|min:%s|max:%s', PagingConstants::MinPageSize, PagingConstants::MaxPageSize), + ]; try { @@ -78,7 +78,7 @@ final class OAuth2MembersApiController extends OAuth2ProtectedController // default values $page = 1; - $per_page = 5; + $per_page = PagingConstants::DefaultPageSize;; if (Input::has('page')) { $page = intval(Input::get('page')); @@ -88,8 +88,8 @@ final class OAuth2MembersApiController extends OAuth2ProtectedController $filter = null; if (Input::has('filter')) { - $filter = FilterParser::parse(Input::get('filter'), array - ( + $filter = FilterParser::parse(Input::get('filter'), [ + 'irc' => ['=@', '=='], 'twitter' => ['=@', '=='], 'first_name' => ['=@', '=='], @@ -100,23 +100,35 @@ final class OAuth2MembersApiController extends OAuth2ProtectedController 'email_verified' => ['=='], 'active' => ['=='], 'github_user' => ['=@', '=='], - )); + ]); } + if(is_null($filter)) $filter = new Filter(); + + $filter->validate([ + 'irc' => 'sometimes|required|string', + 'twitter' => 'sometimes|required|string', + 'first_name' => 'sometimes|required|string', + 'last_name' => 'sometimes|required|string', + 'email' => 'sometimes|required|string', + 'group_slug' => 'sometimes|required|string', + 'group_id' => 'sometimes|required|integer', + 'email_verified' => 'sometimes|required|boolean', + 'active' => 'sometimes|required|boolean', + 'github_user' => 'sometimes|required|string', + ]); + $order = null; if (Input::has('order')) { - $order = OrderParser::parse(Input::get('order'), array - ( + $order = OrderParser::parse(Input::get('order'), [ 'first_name', 'last_name', 'id', - )); + ]); } - if(is_null($filter)) $filter = new Filter(); - $data = $this->repository->getAllByPage(new PagingInfo($page, $per_page), $filter, $order); $fields = Request::input('fields', ''); $fields = !empty($fields) ? explode(',', $fields) : []; diff --git a/app/Http/Middleware/OAuth2BearerAccessTokenRequestValidator.php b/app/Http/Middleware/OAuth2BearerAccessTokenRequestValidator.php index 97a52840..26615fdd 100644 --- a/app/Http/Middleware/OAuth2BearerAccessTokenRequestValidator.php +++ b/app/Http/Middleware/OAuth2BearerAccessTokenRequestValidator.php @@ -258,13 +258,16 @@ class OAuth2BearerAccessTokenRequestValidator */ protected function getHeaders() { - $headers = array(); + $headers = []; if (function_exists('getallheaders')) { foreach (getallheaders() as $name => $value) { $headers[strtolower($name)] = $value; } - } else { - // @codeCoverageIgnoreEnd + } + + if(count($headers) == 0 ) + { + foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $name = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5))))); diff --git a/app/Http/Utils/Filters/FilterElement.php b/app/Http/Utils/Filters/FilterElement.php index fccbe6dc..022703d4 100644 --- a/app/Http/Utils/Filters/FilterElement.php +++ b/app/Http/Utils/Filters/FilterElement.php @@ -61,7 +61,7 @@ class FilterElement extends AbstractFilterElement switch($this->operator) { case 'like': - return "%".$this->value."%"; + return empty($this->value) ? '' : "%".$this->value."%"; break; default: return $this->value; diff --git a/composer.lock b/composer.lock index 5c26c583..b4fc0347 100644 --- a/composer.lock +++ b/composer.lock @@ -1004,16 +1004,16 @@ }, { "name": "google/apiclient-services", - "version": "v0.57", + "version": "v0.58", "source": { "type": "git", "url": "https://github.com/google/google-api-php-client-services.git", - "reference": "fc1821419f0e9d060d83a2864e2a40874b91430d" + "reference": "e21760a34daea7bc29e2866b62f8c8db4e91228d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/fc1821419f0e9d060d83a2864e2a40874b91430d", - "reference": "fc1821419f0e9d060d83a2864e2a40874b91430d", + "url": "https://api.github.com/repos/google/google-api-php-client-services/zipball/e21760a34daea7bc29e2866b62f8c8db4e91228d", + "reference": "e21760a34daea7bc29e2866b62f8c8db4e91228d", "shasum": "" }, "require": { @@ -1037,7 +1037,7 @@ "keywords": [ "google" ], - "time": "2018-04-28T00:23:39+00:00" + "time": "2018-05-06T00:22:52+00:00" }, { "name": "google/auth", @@ -1770,12 +1770,12 @@ "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "464c6deffc2d0fd58d26e8a037a8697c1cd66c9e" + "reference": "c6560c72107e9a7ef6341f35fc87d42c7b71f972" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/464c6deffc2d0fd58d26e8a037a8697c1cd66c9e", - "reference": "464c6deffc2d0fd58d26e8a037a8697c1cd66c9e", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c6560c72107e9a7ef6341f35fc87d42c7b71f972", + "reference": "c6560c72107e9a7ef6341f35fc87d42c7b71f972", "shasum": "" }, "require": { @@ -1846,7 +1846,7 @@ "sftp", "storage" ], - "time": "2018-04-30T11:34:43+00:00" + "time": "2018-05-08T07:29:35+00:00" }, { "name": "league/oauth2-client", @@ -2471,31 +2471,30 @@ }, { "name": "psy/psysh", - "version": "dev-develop", + "version": "v0.8.18", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "3d025e023fb934e222dce67134956196858b1b24" + "reference": "5357b1cffc8fb375d6a9e3c86d5c82dd38a40834" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3d025e023fb934e222dce67134956196858b1b24", - "reference": "3d025e023fb934e222dce67134956196858b1b24", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/5357b1cffc8fb375d6a9e3c86d5c82dd38a40834", + "reference": "5357b1cffc8fb375d6a9e3c86d5c82dd38a40834", "shasum": "" }, "require": { "dnoegel/php-xdg-base-dir": "0.1", "jakub-onderka/php-console-highlighter": "0.3.*", - "nikic/php-parser": "~1.3|~2.0|~3.0|~4.0", - "php": ">=5.4.0", + "nikic/php-parser": "~1.3|~2.0|~3.0", + "php": ">=5.3.9", "symfony/console": "~2.3.10|^2.4.2|~3.0|~4.0", "symfony/var-dumper": "~2.7|~3.0|~4.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~1.11", "hoa/console": "~3.16|~1.14", "phpunit/phpunit": "^4.8.35|^5.4.3", - "symfony/finder": "~2.1|~3.0" + "symfony/finder": "~2.1|~3.0|~4.0" }, "suggest": { "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", @@ -2540,7 +2539,7 @@ "interactive", "shell" ], - "time": "2017-11-19T20:14:47+00:00" + "time": "2018-04-02T05:41:44+00:00" }, { "name": "ralouphie/getallheaders", @@ -4463,6 +4462,55 @@ ], "time": "2015-06-21T13:50:34+00:00" }, + { + "name": "phpunit/php-timer", + "version": "1.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "9513098641797ce5f459dbc1de5a54c29b0ec1fb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/9513098641797ce5f459dbc1de5a54c29b0ec1fb", + "reference": "9513098641797ce5f459dbc1de5a54c29b0ec1fb", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2018-01-06T05:27:16+00:00" + }, { "name": "phpunit/php-token-stream", "version": "1.4.x-dev", diff --git a/tests/OAuth2MembersApiTest.php b/tests/OAuth2MembersApiTest.php index 80acbf85..28ca6508 100644 --- a/tests/OAuth2MembersApiTest.php +++ b/tests/OAuth2MembersApiTest.php @@ -41,6 +41,30 @@ final class OAuth2MembersApiTest extends ProtectedApiTest $this->assertResponseStatus(200); } + public function testGetMembersEmpty() + { + + $params = [ + 'filter' => ['first_name=@', 'last_name=@'], + //AND FILTER + 'order' => '+first_name,-last_name' + ]; + + $headers = ["HTTP_Authorization" => " Bearer " . $this->access_token]; + $response = $this->action( + "GET", + "OAuth2MembersApiController@getAll", + $params, + [], + [], + [], + $headers + ); + + $content = $response->getContent(); + $this->assertResponseStatus(412); + } + public function testGetMembersByEmail() { $params = [ @@ -120,7 +144,7 @@ final class OAuth2MembersApiTest extends ProtectedApiTest 'expand' => 'groups, ccla_teams' ]; - $headers = array("HTTP_Authorization" => " Bearer " . $this->access_token); + $headers = ["HTTP_Authorization" => " Bearer " . $this->access_token]; $response = $this->action( "GET", "OAuth2MembersApiController@getAll",