diff --git a/.php_cs b/.php_cs index ff96ac7..3518e7e 100644 --- a/.php_cs +++ b/.php_cs @@ -1,38 +1,132 @@ in(__DIR__); -$config = Symfony\CS\Config\Config::create() -->level(Symfony\CS\FixerInterface::PSR2_LEVEL) -->finder($finder) -->fixers( - [ - 'extra_empty_lines', - 'no_blank_lines_after_class_opening', - 'no_empty_lines_after_phpdocs', - 'operators_spaces', - 'duplicate_semicolon', - 'namespace_no_leading_whitespace', - 'phpdoc_indent', - 'phpdoc_no_empty_return', - 'phpdoc_no_package', - 'phpdoc_params', - 'phpdoc_separation', - 'phpdoc_to_comment', - 'phpdoc_trim', - 'phpdoc_var_without_name', - 'remove_leading_slash_use', - 'remove_lines_between_uses', - 'return', - 'single_array_no_trailing_comma', - 'single_quote', - 'spaces_before_semicolon', - 'spaces_cast', - 'standardize_not_equal', - 'ternary_spaces', - 'whitespacy_lines', - 'ordered_use', - 'short_array_syntax' - ] -); -return $config; +$header = <<<'EOF' +This file is part of the Ray.WebFormModule package. + +@license http://opensource.org/licenses/MIT MIT +EOF; + +return \PhpCsFixer\Config::create() + ->setRiskyAllowed(true) + ->setRules(array( + '@PSR2' => true, + 'header_comment' => ['header' => $header, 'commentType' => 'PHPDoc', 'separate' => 'none'], + 'array_syntax' => ['syntax' => 'short'], + 'binary_operator_spaces' => ['align_equals' => false, 'align_double_arrow' => false], + 'blank_line_after_opening_tag' => true, + 'blank_line_after_namespace' => false, + 'blank_line_before_return' => true, + 'cast_spaces' => true, +// 'class_keyword_remove' => true, + 'combine_consecutive_unsets' => true, + 'concat_space' => ['spacing' => 'one'], + 'declare_equal_normalize' => true, + 'declare_strict_types' => false, + 'dir_constant' => true, + 'ereg_to_preg' => true, + 'function_typehint_space' => true, + 'general_phpdoc_annotation_remove' => true, + 'hash_to_slash_comment' => true, + 'heredoc_to_nowdoc' => true, + 'include' => true, + 'indentation_type' => true, + 'is_null' => ['use_yoda_style' => false], + 'linebreak_after_opening_tag' => true, + 'lowercase_cast' => true, +// 'mb_str_functions' => true, + 'method_separation' => true, + 'modernize_types_casting' => true, + 'native_function_casing' => true, +// 'native_function_invocation' => true, + 'new_with_braces' => false, // + 'no_alias_functions' => true, + 'no_blank_lines_after_class_opening' => true, + 'no_blank_lines_after_phpdoc' => true, + 'no_blank_lines_before_namespace' => true, + 'no_empty_comment' => true, + 'no_empty_phpdoc' => true, + 'no_empty_statement' => true, + 'no_extra_consecutive_blank_lines' => ['break', 'continue', 'curly_brace_block', 'extra', 'parenthesis_brace_block', 'return', 'square_brace_block', 'throw', 'use', 'useTrait'], + 'no_leading_import_slash' => true, + 'no_leading_namespace_whitespace' => true, + 'no_mixed_echo_print' => ['use' => 'echo'], + 'no_multiline_whitespace_around_double_arrow' => true, + 'no_multiline_whitespace_before_semicolons' => true, + 'no_php4_constructor' => false, + 'no_short_bool_cast' => true, + 'no_short_echo_tag' => false, + 'no_singleline_whitespace_before_semicolons' => true, + 'no_spaces_around_offset' => true, + 'no_trailing_comma_in_list_call' => true, + 'no_trailing_comma_in_singleline_array' => true, + 'no_trailing_whitespace' => true, + 'no_trailing_whitespace_in_comment' => true, + 'no_unneeded_control_parentheses' => true, + 'no_unreachable_default_argument_value' => true, + 'no_unused_imports' => true, + 'no_useless_else' => true, + 'no_useless_return' => true, + 'no_whitespace_before_comma_in_array' => true, + 'no_whitespace_in_blank_line' => true, + 'normalize_index_brace' => true, + 'not_operator_with_space' => false, + 'not_operator_with_successor_space' => true, + 'object_operator_without_whitespace' => true, + 'ordered_class_elements' => true, + 'ordered_imports' => true, + 'php_unit_construct' => true, + 'php_unit_dedicate_assert' => true, + 'php_unit_fqcn_annotation' => true, + 'php_unit_strict' => true, +// 'phpdoc_add_missing_param_annotation' => true, + 'phpdoc_align' => true, + 'phpdoc_annotation_without_dot' => true, + 'phpdoc_indent' => true, + 'phpdoc_inline_tag' => true, + 'phpdoc_no_access' => true, + 'phpdoc_no_alias_tag' => ['property-read' => 'property', 'property-write' => 'property', 'type' => 'var'], + 'phpdoc_no_empty_return' => true, + 'phpdoc_no_package' => true, +// 'phpdoc_no_useless_inheritdoc' => true, + 'phpdoc_order' => true, + 'phpdoc_return_self_reference' => true, + 'phpdoc_scalar' => true, + 'phpdoc_separation' => true, + 'phpdoc_single_line_var_spacing' => true, +// 'phpdoc_summary' => true, + 'phpdoc_to_comment' => true, + 'phpdoc_trim' => true, + 'phpdoc_types' => true, + 'phpdoc_var_without_name' => true, + 'pow_to_exponentiation' => true, +// 'pre_increment' => true, + 'protected_to_private' => true, + 'psr0' => true, + 'psr4' => true, + 'random_api_migration' => true, + 'return_type_declaration' => ['space_before' => 'one'], + 'self_accessor' => true, + 'short_scalar_cast' => true, +// 'silenced_deprecation_error' => true, +// 'simplified_null_return' => true, +// 'single_blank_line_before_namespace' => true, + 'single_quote' => true, + 'space_after_semicolon' => true, + 'standardize_not_equals' => true, +// 'strict_comparison' => true, + 'ternary_operator_spaces' => true, + 'strict_param' => true, +// 'ternary_to_null_coalescing' => true, +// 'trailing_comma_in_multiline_array' => true, + 'trim_array_spaces' => true, + 'unary_operator_spaces' => true, + 'whitespace_after_comma_in_array' => true + )) + ->setFinder( + PhpCsFixer\Finder::create() + ->exclude('tests/Fake') + ->exclude('src-data') + ->exclude('src-deprecated') + ->in(__DIR__) + )->setLineEnding("\n") + ->setUsingCache(false); diff --git a/.travis.yml b/.travis.yml index 23cf9fe..9c343aa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,24 @@ language: php - +sudo: false php: - - 5.5 - 5.6 - - hhvm - 7 - -install: travis_retry composer install --no-interaction --prefer-source - + - 7.1 + - hhvm +cache: + directories: + - vendor + - $HOME/.composer/cache +env: + matrix: + - DEPENDENCIES="" + - DEPENDENCIES="--prefer-lowest --prefer-stable" +before_script: + - composer self-update + - composer update $DEPENDENCIES script: - - if [ "$TRAVIS_PHP_VERSION" == "hhvm" ]; then phpunit; fi - - if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then phpunit --coverage-text --coverage-clover=coverage.clover; fi + - ./vendor/bin/phpunit --coverage-clover=coverage.clover; + - if [ "$TRAVIS_PHP_VERSION" = "7.1" ]; then wget http://cs.sensiolabs.org/download/php-cs-fixer-v2.phar && php php-cs-fixer-v2.phar fix --config=.php_cs -v --dry-run --using-cache=no --path-mode=intersection `git diff --name-only --diff-filter=ACMRTUXB $TRAVIS_COMMIT_RANGE`; fi after_script: - - wget https://scrutinizer-ci.com/ocular.phar - - if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi + - if [ "$TRAVIS_PHP_VERSION" = "7.1" ]; then wget https://scrutinizer-ci.com/ocular.phar && php ocular.phar code-coverage:upload --format=php-clover coverage.clover; fi diff --git a/composer.json b/composer.json index b4f65fe..402e186 100644 --- a/composer.json +++ b/composer.json @@ -6,11 +6,14 @@ "Ray.Di module" ], "require": { - "ray/di": "^2.0", - "foa/filter-input-bundle": "^1.1@dev", - "aura/filter": "^2.0@dev", + "ray/di": "^2.5", + "aura/input": "^1.2", + "aura/filter": "^2.3", "aura/html": "^2.4", - "ray/aura-session-module": "~1.0" + "ray/aura-session-module": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.13" }, "license": "MIT", "autoload":{ @@ -20,8 +23,13 @@ }, "autoload-dev":{ "psr-4":{ - "Ray\\WebFormModule\\": "tests/", - "Ray\\WebFormModule\\": "tests/Fake" + "Ray\\WebFormModule\\": ["tests/", "tests/Fake"] } + }, + "scripts" :{ + "test": ["@cs", "phpunit"], + "coverage": ["php -dzend_extension=xdebug.so ./vendor/bin/phpunit --coverage-text --coverage-html=build/coverage"], + "cs": ["php-cs-fixer fix -v --dry-run", "phpcs --standard=./phpcs.xml src"], + "cs-fix": ["php-cs-fixer fix -v", "phpcbf src"] } } diff --git a/docs/demo/1.csrf/ContactForm.php b/docs/demo/1.csrf/ContactForm.php index f3fe1af..ce91165 100644 --- a/docs/demo/1.csrf/ContactForm.php +++ b/docs/demo/1.csrf/ContactForm.php @@ -1,5 +1,9 @@ form(); + // name + $form .= $this->helper->tag('div', ['class' => 'form-group']); + $form .= $this->helper->tag('label', ['for' => 'name']); + $form .= 'Name:'; + $form .= $this->helper->tag('/label') . PHP_EOL; + $form .= $this->input('name'); + $form .= $this->error('name'); + $form .= $this->helper->tag('/div') . PHP_EOL; + // message + $form .= $this->helper->tag('div', ['class' => 'form-group']); + $form .= $this->helper->tag('label', ['for' => 'message']); + $form .= 'Message:'; + $form .= $this->helper->tag('/label') . PHP_EOL; + $form .= $this->input('message'); + $form .= $this->error('message'); + $form .= $this->helper->tag('/div') . PHP_EOL; + // submit + $form .= $this->input('submit'); + $form .= $this->helper->tag('/form'); + + return $form; + } + /** * {@inheritdoc} */ @@ -60,33 +93,4 @@ public function submit() { return $_POST; } - - /** - * {@inheritdoc} - */ - public function __toString() - { - $form = $this->form(); - // name - $form .= $this->helper->tag('div', ['class' => 'form-group']); - $form .= $this->helper->tag('label', ['for' => 'name']); - $form .= 'Name:'; - $form .= $this->helper->tag('/label') . PHP_EOL; - $form .= $this->input('name'); - $form .= $this->error('name'); - $form .= $this->helper->tag('/div') . PHP_EOL; - // message - $form .= $this->helper->tag('div', ['class' => 'form-group']); - $form .= $this->helper->tag('label', ['for' => 'message']); - $form .= 'Message:'; - $form .= $this->helper->tag('/label') . PHP_EOL; - $form .= $this->input('message'); - $form .= $this->error('message'); - $form .= $this->helper->tag('/div') . PHP_EOL; - // submit - $form .= $this->input('submit'); - $form .= $this->helper->tag('/form'); - - return $form; - } } diff --git a/docs/demo/1.csrf/Controller.php b/docs/demo/1.csrf/Controller.php index f0ee5eb..f17209a 100644 --- a/docs/demo/1.csrf/Controller.php +++ b/docs/demo/1.csrf/Controller.php @@ -1,5 +1,9 @@ addPsr4('Ray\WebFormModule\\', __DIR__); use Aura\Input\Exception\CsrfViolation; @@ -14,7 +17,7 @@ try { $controller->createUser(['name' => 'bear', 'message' => 'hello']); } catch (CsrfViolation $e) { - echo 'Anti CSRF works !'. PHP_EOL; + echo 'Anti CSRF works !' . PHP_EOL; exit; } echo 'Anti CSRF DOES NOT works !' . PHP_EOL; diff --git a/docs/demo/1.csrf/web.php b/docs/demo/1.csrf/web.php index ef72c18..5bf307b 100644 --- a/docs/demo/1.csrf/web.php +++ b/docs/demo/1.csrf/web.php @@ -1,5 +1,9 @@ + diff --git a/phpmd.xml b/phpmd.xml index bd342f1..0412e29 100644 --- a/phpmd.xml +++ b/phpmd.xml @@ -1,9 +1,7 @@ - - PHP.Skeleton rule set diff --git a/src/AbstractForm.php b/src/AbstractForm.php index d3ddc98..3ab127e 100644 --- a/src/AbstractForm.php +++ b/src/AbstractForm.php @@ -1,6 +1,6 @@ filter = clone $this->filter; + $this->init(); + } + /** * @param BuilderInterface $builder * @param FilterFactory $filterFactory @@ -49,15 +59,11 @@ public function setBaseDependencies( FilterFactory $filterFactory, HelperLocatorFactory $helperFactory ) { - $this->builder = $builder; + $this->builder = $builder; $this->filter = $filterFactory->newSubjectFilter(); $this->helper = $helperFactory->newInstance(); } - public function __construct() - { - } - public function setAntiCsrf(AntiCsrfInterface $antiCsrf) { $this->antiCsrf = $antiCsrf; @@ -75,7 +81,7 @@ public function postConstruct() } /** - * @inheritdoc + * {@inheritdoc} */ public function input($input) { @@ -83,7 +89,7 @@ public function input($input) } /** - * @inheritdoc + * {@inheritdoc} */ public function error($input) { @@ -102,12 +108,12 @@ public function error($input) } /** - * @param array $attr Attributes for the form tag. - * - * @return string + * @param array $attr attributes for the form tag * * @throws \Aura\Html\Exception\HelperNotFound * @throws \Aura\Input\Exception\NoSuchInput + * + * @return string */ public function form($attr = []) { @@ -124,8 +130,9 @@ public function form($attr = []) * * @param array $data * - * @return bool * @throws CsrfViolationException + * + * @return bool */ public function apply(array $data) { @@ -159,10 +166,4 @@ public function getIterator() { return new \ArrayIterator($this->inputs); } - - public function __clone() - { - $this->filter = clone $this->filter; - $this->init(); - } } diff --git a/src/Annotation/AbstractValidation.php b/src/Annotation/AbstractValidation.php index b9daa11..3cf5e2f 100644 --- a/src/Annotation/AbstractValidation.php +++ b/src/Annotation/AbstractValidation.php @@ -1,6 +1,6 @@ failureHandler->handle($formValidation, $invocation, $form); } + /** + * @param array $submit + * @param AbstractForm $form + * + * @throws Exception\CsrfViolationException + * + * @return bool + */ + public function isValid(array $submit, AbstractForm $form) + { + $isValid = $form->apply($submit); + + return $isValid; + } + /** * Return arguments as named arguments. * @@ -81,20 +96,6 @@ private function getNamedArguments(MethodInvocation $invocation) return $submit; } - /** - * @param array $submit - * @param AbstractForm $form - * - * @return bool - * @throws Exception\CsrfViolationException - */ - public function isValid(array $submit, AbstractForm $form) - { - $isValid = $form->apply($submit); - - return $isValid; - } - /** * Return form property * diff --git a/src/AuraInputModule.php b/src/AuraInputModule.php index 3d9819a..738c346 100644 --- a/src/AuraInputModule.php +++ b/src/AuraInputModule.php @@ -1,6 +1,6 @@ reader->getMethodAnnotation($invocation->getMethod(), VndError::class); - $error = new FormValidationError($this->makeVndError($form, $vndError)); + $error = new FormValidationError($this->makeVndError($form, $vndError)); $e = new ValidationException('Validation failed.', 400, null, $error); throw $e; diff --git a/tests/AbstractAuraFormTest.php b/tests/AbstractAuraFormTest.php index 33ae3be..ecc9068 100644 --- a/tests/AbstractAuraFormTest.php +++ b/tests/AbstractAuraFormTest.php @@ -1,5 +1,9 @@ antiCsrf = new AntiCsrf($this->newSession([]), false, [AntiCsrf::TOKEN_KEY => AntiCsrf::TEST_TOKEN]); } - protected function newSession(array $cookies = []) - { - return new Session( - new SegmentFactory, - new CsrfTokenFactory(new Randval(new Phpfunc())), - $this->phpfunc, - $cookies - ); - } - public function testNew() { $this->assertInstanceOf(AntiCsrf::class, $this->antiCsrf); @@ -58,4 +52,14 @@ public function testIsValid() $data = [AntiCsrf::TOKEN_KEY => $this->session->getCsrfToken()->getValue()]; $this->assertTrue($this->antiCsrf->isValid($data)); } + + protected function newSession(array $cookies = []) + { + return new Session( + new SegmentFactory, + new CsrfTokenFactory(new Randval(new Phpfunc())), + $this->phpfunc, + $cookies + ); + } } diff --git a/tests/AuraInputInterceptorTest.php b/tests/AuraInputInterceptorTest.php index a046464..400bb63 100644 --- a/tests/AuraInputInterceptorTest.php +++ b/tests/AuraInputInterceptorTest.php @@ -1,5 +1,9 @@