Commit Graph

348 Commits

Author SHA1 Message Date
Fabien Potencier
ca62f65887 merged branch fabpot/expression-engine (PR #8913)
This PR was merged into the master branch.

Discussion
----------

New Component: Expression Language

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #8850, #7352
| License       | MIT
| Doc PR        | not yet

TODO:

 - [ ] write documentation
 - [x] add tests for the new component
 - [x] implement expression support for access rules in the security component
 - [x] find a better character/convention for expressions in the YAML format
 - [x] check the performance of the evaluation mode
 - [x] better error messages in the evaluation mode
 - [x] add support in the Routing
 - [x] add support in the Validator

The ExpressionLanguage component provides an engine that can compile and
evaluate expressions.

An expression is a one-liner that returns a value (mostly, but not limited to, Booleans).

It is a strip-down version of Twig (only the expression part of it is
implemented.) Like Twig, the expression is lexed, parsed, and
compiled/evaluated. So, it is immune to external injections by design.

If we compare it to Twig, here are the main big differences:

 * only support for Twig expressions
 * no ambiguity for calls (foo.bar is only valid for properties, foo['bar'] is only valid for array calls, and foo.bar() is required for method calls)
 * no support for naming conventions in method calls (if the method is named getFoo(), you must use getFoo() and not foo())
 * no notion of a line for errors, but a cursor (we are mostly talking about one-liners here)
 * removed everything specific to the templating engine (like output escaping or filters)
 * no support for named arguments in method calls
 * only one extension point with functions (no possibility to define new operators, ...)
 * and probably even more I don't remember right now
 * there is no need for a runtime environment, the compiled PHP string is self-sufficient

An open question is whether we keep the difference betweens arrays and hashes.

The other big difference with Twig is that it can work in two modes (possible
because of the restrictions described above):

 * compilation: the expression is compiled to PHP and is self-sufficient
 * evaluation: the expression is evaluated without being compiled to PHP (the node tree produced by the parser can be serialized and evaluated afterwards -- so it can be saved on disk or in a database to speed up things when needed)

Let's see a simple example:

```php
$language = new ExpressionLanguage();

echo $language->evaluate('1 + 1');
// will echo 2

echo $language->compile('1 + 2');
// will echo "(1 + 2)"
```

The language supports:

 * all basic math operators (with precedence rules):
    * unary: not, !, -, +
    * binary: or, ||, and, &&, b-or, b-xor, b-and, ==, ===, !=, !==, <, >, >=, <=, not in, in, .., +, -, ~, *, /, %, **

 * all literals supported by Twig: strings, numbers, arrays (`[1, 2]`), hashes
   (`{a: "b"}`), Booleans, and null.

 * simple variables (`foo`), array accesses (`foo[1]`), property accesses
   (`foo.bar`), and method calls (`foo.bar(1, 2)`).

 * the ternary operator: `true ? true : false` (and all the shortcuts
   implemented in Twig).

 * function calls (`constant('FOO')` -- `constant` is the only built-in
   functions).

 * and of course, any combination of the above.

The compilation is better for performances as the end result is just a plain PHP string without any runtime. For the evaluation, we need to tokenize, parse, and evaluate the nodes on the fly. This can be optimized by using a `ParsedExpression` or a `SerializedParsedExpression` instead:

```php
$nodes = $language->parse($expr, $names);
$expression = new SerializedParsedExpression($expr, serialize($nodes));

// You can now store the expression in a DB for later reuse

// a SerializedParsedExpression can be evaluated like any other expressions,
// but under the hood, the lexer and the parser won't be used at all, so it''s much faster.
$language->evaluate($expression);
```
That's all folks!

I can see many use cases for this new component, and we have two use cases in
Symfony that we can implement right away.

## Using Expressions in the Service Container

The first one is expression support in the service container (it would replace
#8850) -- anywhere you can pass an argument in the service container, you can
use an expression:

```php
$c->register('foo', 'Foo')->addArgument(new Expression('bar.getvalue()'));
```

You have access to the service container via `this`:

    container.get("bar").getvalue(container.getParameter("value"))

The implementation comes with two functions that simplifies expressions
(`service()` to get a service, and `parameter` to get a parameter value). The
previous example can be simplified to:

    service("bar").getvalue(parameter("value"))

Here is how to use it in XML:

```xml
<parameters>
    <parameter key="value">foobar</parameter>
</parameters>
<services>
    <service id="foo" class="Foo">
        <argument type="expression">service('bar').getvalue(parameter('value'))</argument>
    </service>
    <service id="bar" class="Bar" />
</services>
```

and in YAML (I chose the syntax randomly ;)):

```yaml
parameters:
    value: foobar

services:
    bar:
        class: Bar

    foo:
        class: Foo
        arguments: [@=service("bar").getvalue(parameter("value"))]
```

When using the container builder, Symfony uses the evaluator, but with the PHP
dumper, the compiler is used, and there is no overhead as the expression
engine is not needed at runtime. The expression above would be compiled to:

```php
$this->get("bar")->getvalue($this->getParameter("value"))
```

## Using Expression for Security Access Control Rules

The second use case in Symfony is for access rules.

As we all know, the way to configure the security access control rules is confusing, which might lead to insecure applications (see http://symfony.com/blog/security-access-control-documentation-issue for more information).

Here is how the new `allow_if` works:

```yaml
access_control:
    - { path: ^/_internal/secure, allow_if: "'127.0.0.1' == request.getClientIp() or has_role('ROLE_ADMIN')" }
```

This one restricts the URLs starting with `/_internal/secure` to people browsing from the localhost. Here, `request` is the current Request instance. In the expression, there is access to the following variables:

 * `request`
 * `token`
 * `user`

And to the following functions:

 * `is_anonymous`
 * `is_authenticated`
 * `is_fully_authenticated`
 * `is_rememberme`
 * `has_role`

You can also use expressions in Twig, which works well with the `is_granted` function:

```jinja
{% if is_granted(expression('has_role("FOO")')) %}
   ...
{% endif %}
```

## Using Expressions in the Routing

Out of the box, Symfony can only match an incoming request based on some pre-determined variables (like the path info, the method, the scheme, ...). But some people want to be able to match on more complex logic, based on other information of the Request object. That's why we introduced `RequestMatcherInterface` recently (but we no default implementation in Symfony itself).

The first change I've made (not related to expression support) is implement this interface for the default `UrlMatcher`. It was simple enough.

Then, I've added a new `condition` configuration for Route objects, which allow you to add any valid expression. An expression has access to the `request` and to the routing `context`.

Here is how one would configure it in a YAML file:

```yaml
hello:
    path: /hello/{name}
    condition: "context.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') =~ '/firefox/i'"
```

Why do I keep the context as all the data are also available in the request? Because you can also use the condition without using the RequestMatcherInterface, in which case, you don't have access to the request. So, the previous example is equivalent to:

```yaml
hello:
    path: /hello/{name}
    condition: "request.getMethod() in ['GET', 'HEAD'] and request.headers.get('User-Agent') =~ '/firefox/i'"
```

When using the PHP dumper, there is no overhead as the condition is compiled. Here is how it looks like:

```php
// hello
if (0 === strpos($pathinfo, '/hello') && preg_match('#^/hello/(?P<name>[^/]++)$#s', $pathinfo, $matches) && (in_array($context->getMethod(), array(0 => "GET", 1 => "HEAD")) && preg_match("/firefox/i", $request->headers->get("User-Agent")))) {
    return $this->mergeDefaults(array_replace($matches, array('_route' => 'hello')), array ());
}
```

Be warned that conditions are not taken into account when generating a URL.

## Using Expressions in the Validator

There is a new Expression constraint that you can put on a class. The expression is then evaluated for validation:

```php
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @Assert\Condition(condition="this.getFoo() == 'fo'", message="Not good!")
 */
class Obj
{
    public function getFoo()
    {
        return 'foo';
    }
}
```

In the expression, you get access to the current object via the `this` variable.

## Dynamic annotations

The expression language component is also very useful in annotations. the SensoLabs FrameworkExtraBundle leverages this possibility to implement HTTP validation caching in the `@Cache` annotation and to add a new `@Security` annotation (see sensiolabs/SensioFrameworkExtraBundle#238.)

Commits
-------

d4ebbfd [Validator] Renamed Condition to Expression and added possibility to set it onto properties
a3b3a78 [Validator] added a constraint that runs an expression
1bcfb40 added optimized versions of expressions
984bd38 mades things more consistent for the end user
d477f15 [Routing] added support for expression conditions in routes
86ac8d7 [ExpressionLanguage] improved performance
e369d14 added a Twig extension to create Expression instances
38b7fde added support for expression in control access rules
2777ac7 [HttpFoundation] added ExpressionRequestMatcher
c25abd9 [DependencyInjection] added support for expressions in the service container
3a41781 [ExpressionLanguage] added support for regexes
9d98fa2 [ExpressionLanguage] added the component
2013-09-19 13:00:34 +02:00
Fabien Potencier
38b7fde8ed added support for expression in control access rules 2013-09-19 12:59:11 +02:00
Fabien Potencier
12c0b74eac merged branch nicolas-bastien/remove_unsued_statement (PR #9075)
This PR was merged into the master branch.

Discussion
----------

[Security] Remove unused use statement

Commits
-------

6981669 Remove unused use statement
2013-09-19 11:48:08 +02:00
Fabien Potencier
51c6d7696c Merge branch '2.3'
* 2.3:
  fixed phpdoc
  Fix some annotates
  [FrameworkBundle] made sure that the debug event dispatcher is used everywhere
  [HttpKernel] remove unneeded strtoupper
  updated the composer install command to reflect changes in Composer

Conflicts:
	src/Symfony/Component/Serializer/Encoder/XmlEncoder.php
2013-09-19 11:47:34 +02:00
Fabien Potencier
88cef41560 Merge branch '2.2' into 2.3
* 2.2:
  Fix some annotates
  [FrameworkBundle] made sure that the debug event dispatcher is used everywhere
  [HttpKernel] remove unneeded strtoupper
  updated the composer install command to reflect changes in Composer

Conflicts:
	src/Symfony/Component/Console/Application.php
	src/Symfony/Component/Console/Command/Command.php
	src/Symfony/Component/Console/Input/InputDefinition.php
	src/Symfony/Component/CssSelector/Node/CombinedSelectorNode.php
	src/Symfony/Component/Form/Form.php
	src/Symfony/Component/HttpKernel/Debug/ErrorHandler.php
	src/Symfony/Component/HttpKernel/DependencyInjection/RegisterListenersPass.php
	src/Symfony/Component/HttpKernel/Tests/DependencyInjection/RegisterListenersPassTest.php
	src/Symfony/Component/Locale/Locale.php
	src/Symfony/Component/Locale/README.md
	src/Symfony/Component/Locale/Stub/DateFormat/FullTransformer.php
2013-09-19 11:45:20 +02:00
bronze1man
de39bd5433 Fix some annotates 2013-09-19 11:36:05 +02:00
Nicolas Bastien
6981669e08 Remove unused use statement 2013-09-19 10:36:42 +02:00
Fabien Potencier
5dbec8a060 [Security] fixed README files 2013-09-18 13:11:09 +02:00
Bernhard Schussek
7826781235 [Security] Split the component into 3 sub-components Core, ACL, HTTP 2013-09-18 09:16:41 +02:00
Fabien Potencier
1b2ef74a9a [Security] made sure that the exception listener is always removed from the event dispatcher at the end of the request 2013-09-08 15:18:27 +02:00
Fabien Potencier
091a96ca3d Merge branch '2.3'
* 2.3:
  Fixing singular form for kisses, accesses and addresses.
  fixed some circular references
  [Security] fixed a leak in ExceptionListener
  [Security] fixed a leak in the ContextListener
  Ignore posix_istatty warnings
  removed unused variable
  [Form] fix iterator typehint
  typos
  Button missing getErrorsAsString() fixes #8084 Debug: Not calling undefined method anymore. If the form contained a submit button the call would fail and the debug of the form wasn't possible. Now it will work in all cases. This fixes #8084
  Use isset() instead of array_key_exists() in DIC
  Fixed annotation
  [BrowserKit] fixed method/files/content when redirecting a request
  [BrowserKit] removed some headers when redirecting a request
  [BrowserKit] fixed headers when redirecting if history is set to false (refs #8697)
  [HttpKernel] fixed route parameters storage in the Request data collector (closes #8867)
  [BrowserKit] Pass headers when `followRedirect()` is called
  Return BC compatibility for `@Route` parameters and default values

Conflicts:
	src/Symfony/Component/Security/Http/Firewall/ContextListener.php
2013-09-06 20:21:06 +02:00
Fabien Potencier
702e652002 Merge branch '2.2' into 2.3
* 2.2:
  Fixing singular form for kisses, accesses and addresses.
  fixed some circular references
  [Security] fixed a leak in ExceptionListener
  [Security] fixed a leak in the ContextListener
  Ignore posix_istatty warnings
  typos
  [HttpKernel] fixed route parameters storage in the Request data collector (closes #8867)
  Return BC compatibility for `@Route` parameters and default values

Conflicts:
	src/Symfony/Bundle/FrameworkBundle/Templating/Helper/FormHelper.php
	src/Symfony/Component/Console/Application.php
2013-09-06 20:20:34 +02:00
Fabien Potencier
899f1760a6 [Security] fixed a leak in ExceptionListener 2013-09-06 16:13:07 +02:00
Fabien Potencier
2fd8a7acf3 [Security] fixed a leak in the ContextListener 2013-09-06 15:53:58 +02:00
Fabien Potencier
e838bf04ca Merge branch '2.3'
* 2.3:
  [Security] fixed some phpdoc
  Fixed PHPDoc Blocks
  optimized circular reference checker
  fixed misleading doc block
  [HttpKernel] changed fragment URLs to be relative by default (closes #8458)

Conflicts:
	src/Symfony/Component/HttpKernel/Fragment/RoutableFragmentRenderer.php
	src/Symfony/Component/HttpKernel/Tests/Fragment/RoutableFragmentRendererTest.php
2013-08-30 15:15:50 +02:00
Fabien Potencier
e8e5a3a2e5 Merge branch '2.2' into 2.3
* 2.2:
  [Security] fixed some phpdoc
  Fixed PHPDoc Blocks
  optimized circular reference checker
  [HttpKernel] changed fragment URLs to be relative by default (closes #8458)
2013-08-30 15:10:46 +02:00
Fabien Potencier
7f3878e1d9 merged branch vierbergenlars/patch-1 (PR #8854)
This PR was merged into the master branch.

Discussion
----------

[Security] Keep other query string parameters when switching users

| Q                    | A
| ---------------------- | ---
| Bug fix? 	        | yes
| New feature? 	| no
| BC breaks? 	| no
| Deprecations? 	| no
| Tests pass? 	| yes
| Fixed tickets 	| n/a
| Doc PR 	        | n/a

When switching users, the whole query string gets dropped when redirecting after the switch.
I think only the switch user parameter should be dropped from the query string.

Commits
-------

0a338f5 [Security] Keep other query string parameters when switching users
2013-08-30 15:07:27 +02:00
Fabien Potencier
f02dbd6641 [Security] fixed some phpdoc 2013-08-30 14:58:19 +02:00
Fabien Potencier
feff411dfc Merge branch '2.3'
* 2.3:
  Clear lazy loading initializer after the service is successfully initialized
  [FrameworkBundle] added support for double-quoted strings in the extractor (closes #8797)
  [SecurityBundle] Move format-dependent tests from SecurityExtensionTest
  bumped Symfony version to 2.3.5-DEV
  updated VERSION for 2.3.4
  updated CHANGELOG for 2.3.4
  bumped Symfony version to 2.2.7
  updated VERSION for 2.2.6
  update CONTRIBUTORS for 2.2.6
  updated CHANGELOG for 2.2.6
  clearToken exception is thrown at wrong place.
  fix typo in test skipped message
  [Form] Fixed Form::all() signature for PHP 5.3.3
  [Form] Fixed Form::all() signature for PHP 5.3.3
  [Locale] Fixed: Locale::setDefault() throws no exception when "en" is passed
  [Locale] Fixed: StubLocale::setDefault() throws no exception when "en" is passed
  [Translation] Grammar fix
  [Yaml] fixed embedded folded string parsing
  [Validator] fixed Boolean handling in XML constraint mappings (closes #5603)
  [Translation] Fixed regression: When only one rule is passed to transChoice(), this rule should be used

Conflicts:
	src/Symfony/Component/HttpKernel/Kernel.php
2013-08-29 08:54:01 +02:00
Lars Vierbergen
0a338f5497 [Security] Keep other query string parameters when switching users 2013-08-27 12:44:23 +02:00
Fabien Potencier
d75a35ef12 Merge branch '2.2' into 2.3
* 2.2:
  bumped Symfony version to 2.2.7
  updated VERSION for 2.2.6
  update CONTRIBUTORS for 2.2.6
  updated CHANGELOG for 2.2.6
  clearToken exception is thrown at wrong place.

Conflicts:
	src/Symfony/Component/HttpKernel/Kernel.php
2013-08-27 10:54:20 +02:00
Xavier HAUSHERR
f936b41a90 clearToken exception is thrown at wrong place. 2013-08-26 16:47:55 +02:00
Fabien Potencier
167245c9c7 Merge branch '2.3'
* 2.3:
  [Locale] fixed build-data exit code in case of an error
  fixed request format of sub-requests when explicitely set by the developer (closes #8787)
  Sets _format attribute only if it wasn't set previously by the user.
  Exclude little words of 'ee' to 'oo' plural transformation
  fixed the format of the request used to render an exception
  Fix typo in the check_path validator
  added a missing use statement (closes #8808)
  fix for Process:isSuccessful()
  Include untrusted host in the exception message

Conflicts:
	src/Symfony/Component/HttpKernel/EventListener/ExceptionListener.php
	src/Symfony/Component/HttpKernel/Fragment/InlineFragmentRenderer.php
2013-08-22 08:44:20 +02:00
Fabien Potencier
8e1cb3e3ca Merge branch '2.2' into 2.3
* 2.2:
  [Locale] fixed build-data exit code in case of an error
  fixed request format of sub-requests when explicitely set by the developer (closes #8787)
  Sets _format attribute only if it wasn't set previously by the user.
  Exclude little words of 'ee' to 'oo' plural transformation
  fixed the format of the request used to render an exception
  Fix typo in the check_path validator
  added a missing use statement (closes #8808)
  fix for Process:isSuccessful()

Conflicts:
	UPGRADE-3.0.md
	src/Symfony/Component/Locale/Resources/data/build-data.php
2013-08-22 08:42:25 +02:00
Fabien Potencier
5f7219e2ab added a missing use statement (closes #8808) 2013-08-21 22:48:51 +02:00
Kris Wallsmith
554f95fd9f [HttpKernel] added $event->isMasterRequest() 2013-08-08 14:41:21 -07:00
Fabien Potencier
4ee3d7f11a Merge branch '2.3'
* 2.3:
  moved some fixed dep versions from 2.2.* to ~2.2 (refs #8613)
  [HttpKernel] added a missing dep for dev
  [Form] fixed wrong call to setTimeZone() (closes #8644)
  Fix issue with \DateTimeZone::UTC / 'UTC' for PHP 5.4
  [Form] Fixed patched forms to be valid even if children are not submitted
  Revert "[Form] Fix of "PATCH'ed forms are never valid""
  [Form] Fixed: If a form is not present in a request, it is not automatically submitted
  Fixes link indices
  [Form] Removed the "disabled" attribute from the placeholder option in select fields due to problems with the BlackBerry 10 browser
  Revert "[Form] Remove "value" attribute on empty_value option"
  [routing] added ability for apache matcher to handle array values
  removed dead code and fixed CS
  [Validator] fixed StaticMethodLoader trying to invoke methods of abstract classes (closes #8589)
2013-08-02 22:53:46 +02:00
Fabien Potencier
64535bbcb2 Merge branch '2.2' into 2.3
* 2.2:
  [HttpKernel] added a missing dep for dev
  [Form] fixed wrong call to setTimeZone() (closes #8644)
  Fix issue with \DateTimeZone::UTC / 'UTC' for PHP 5.4
  [Form] Removed the "disabled" attribute from the placeholder option in select fields due to problems with the BlackBerry 10 browser
  [routing] added ability for apache matcher to handle array values
  removed dead code and fixed CS
  [Validator] fixed StaticMethodLoader trying to invoke methods of abstract classes (closes #8589)

Conflicts:
	src/Symfony/Bundle/TwigBundle/TokenParser/RenderTokenParser.php
	src/Symfony/Component/Form/FormConfigBuilder.php
	src/Symfony/Component/HttpKernel/composer.json
	src/Symfony/Component/Validator/Tests/GraphWalkerTest.php
2013-08-02 22:53:38 +02:00
Fabien Potencier
7d581471ce removed dead code and fixed CS 2013-07-28 20:26:16 +02:00
Jon Cave
f7bb5de804 Use HMAC construction for remember me cookie hashes 2013-07-21 21:35:20 +02:00
Fabien Potencier
0cac9a11cf Merge branch '2.3'
* 2.3:
  [PropertyAccess] added moves to pluralMap
  [Security] fixed issue where authentication listeners clear unrelated tokens
  added greek translation
  [DependencyInjection] Add exception for service name not dumpable in PHP
  bumped Symfony version to 2.3.3-DEV
  fix issue #8499 modelChoiceList call getPrimaryKey on a non object
  updated VERSION for 2.3.2
  updated CHANGELOG for 2.3.2
  [DependencyInjection] Add exception for service name not dumpable in PHP
  fixed typo
  bumped Symfony version to 2.2.5
  updated VERSION for 2.2.4
  update CONTRIBUTORS for 2.2.4
  updated CHANGELOG for 2.2.4
  Fixed NativeSessionStorage:regenerate when does not exists
  removed extraneous whitespaces

Conflicts:
	src/Symfony/Component/HttpKernel/Kernel.php
2013-07-20 09:42:41 +02:00
Fabien Potencier
183796312d Merge branch '2.2' into 2.3
* 2.2:
  [PropertyAccess] added moves to pluralMap
  [Security] fixed issue where authentication listeners clear unrelated tokens
  fix issue #8499 modelChoiceList call getPrimaryKey on a non object
  [DependencyInjection] Add exception for service name not dumpable in PHP

Conflicts:
	src/Symfony/Component/DependencyInjection/Dumper/PhpDumper.php
	src/Symfony/Component/DependencyInjection/Tests/Dumper/PhpDumperTest.php
	src/Symfony/Component/Security/Tests/Http/Firewall/BasicAuthenticationListenerTest.php
2013-07-20 09:42:02 +02:00
alcaeus
2317443708 [Security] fixed issue where authentication listeners clear unrelated tokens
This commit fixes an issue where authentication listeners clear all security tokens in case of authentication failure.
This behavior makes it impossible to combine certain authentication mechanisms, notably x509 with form-based login.
2013-07-19 23:56:43 +02:00
Fabien Potencier
2e650b16ea Merge branch '2.3'
* 2.3:
  Reverts JSON_NUMERIC_CHECK
  Just a Typo
  [Yaml] removed wrong comment removal inside a string block
  Fixing configuration validation error messages.
  [HtppKernel] fixed inline fragment renderer
  fixed inline fragment renderer
  ProgressHelper shows percentage complete.
  Comment fixed: RedrawFrequency is measured in steps.
  fix handling of a default 'template' as a string

Conflicts:
	src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php
2013-07-11 21:37:15 +02:00
Fabien Potencier
c2c156835f Merge branch '2.2' into 2.3
* 2.2:
  Reverts JSON_NUMERIC_CHECK
  Just a Typo
  [Yaml] removed wrong comment removal inside a string block
  Fixing configuration validation error messages.
  [HtppKernel] fixed inline fragment renderer
  fixed inline fragment renderer
  ProgressHelper shows percentage complete.
  Comment fixed: RedrawFrequency is measured in steps.
  fix handling of a default 'template' as a string

Conflicts:
	src/Symfony/Component/Console/Helper/ProgressHelper.php
	src/Symfony/Component/Console/Tests/Helper/ProgressHelperTest.php
	src/Symfony/Component/HttpKernel/Tests/Fragment/HIncludeFragmentRendererTest.php
	src/Symfony/Component/HttpKernel/Tests/Fragment/InlineFragmentRendererTest.php
2013-07-11 21:36:36 +02:00
Moritz Borgmann
306b704bb0 Just a Typo 2013-07-11 17:52:51 +02:00
Fabien Potencier
2e50edceeb Revert "marked some classes as being experimental in 2.3"
This reverts commit 74cfc84c87.
2013-06-13 10:14:47 +02:00
Fabien Potencier
d93883490d merged branch Seldaek/simplesecurity (PR #6069)
This PR was merged into the master branch.

Discussion
----------

[Security] Add simpler customization options

The goal of this is to provide a simpler extension point for people that don't have the time to dive into the whole security factory + authentication provider + user provider + authentication listener + token mess. As it stands, it gives you a way to just create one class that is handling all the security stuff in one (by implementing SimpleFormAuthenticatorInterface and UserProviderInterface) + one or more token classes.

I would like feedback on whether people think this makes sense or not before continuing and doing a SimpleHttpAuthenticatorInterface for non-form based stuff.

Just FYI that's how it would look in security.yml:

```yaml
security:
    providers:
        simple:
            id: simple_authenticator
    firewalls:
        foo:
            pattern: ^/
            simple_form:
                provider: simple
                authenticator: simple_authenticator
```

/cc @atrauzzi (who posted a long rant on the ML about how hard this all is, and I can't agree more - I hope it's the right account on github?)

Commits
-------

74cfc84 marked some classes as being experimental in 2.3
471e5bc [Security] allowed simple pre-auth to be optional if another auth mechanism already authenticated the user
01c913b moved the simple HTTP authenticator to a pre-auth one
887d9b8 fixed wrong Logger interface
65335ea [Security] Renamed simple_token to simple_http, added support for failure and success handler to both simple firewalls
f7a11a1 [Security] Add simple_token auth method
1fe2ed6 [Security] Add SimpleForm authentication
2013-06-13 10:14:40 +02:00
Jakub Zalas
314f29a718 [Security] Removed an unnecessary call to sprintf() and added a test case. 2013-06-02 18:27:21 +01:00
Fabien Potencier
74cfc84c87 marked some classes as being experimental in 2.3 2013-05-08 15:02:54 +02:00
Fabien Potencier
471e5bc21a [Security] allowed simple pre-auth to be optional if another auth mechanism already authenticated the user 2013-05-08 15:02:51 +02:00
Fabien Potencier
01c913be4b moved the simple HTTP authenticator to a pre-auth one 2013-05-08 15:02:48 +02:00
Fabien Potencier
887d9b8473 fixed wrong Logger interface 2013-05-08 15:02:45 +02:00
Jordi Boggiano
65335eaa62 [Security] Renamed simple_token to simple_http, added support for failure and success handler to both simple firewalls 2013-05-08 15:02:42 +02:00
Jordi Boggiano
f7a11a1ab3 [Security] Add simple_token auth method 2013-05-08 15:02:39 +02:00
Jordi Boggiano
1fe2ed64d1 [Security] Add SimpleForm authentication 2013-05-08 15:02:36 +02:00
Fabien Potencier
f1c227be22 Merge branch '2.2'
* 2.2:
  added additional tests to cover invalid argument exceptions in OutputFormatterStyle component
  added a missing check for the provider key
  [Validator] fixed wrong URL for XSD
  [Validator] Fixed: $traverse and $deep is passed to the visitor from Validator::validate()
  [Form] Fixed transform()/reverseTransform() to always throw TransformationFailedExceptions
  [Form] Fixed: String validation groups are never interpreted as callbacks
  if the repository method returns an array ensure that it's internal poin...
  [Form] Improved multi-byte handling of NumberToLocalizedStringTransformer
  Fix wrong method in findTaggedServiceIds(), add example to docblock.

Conflicts:
	src/Symfony/Component/Form/Extension/Core/DataTransformer/ChoicesToBooleanArrayTransformer.php
	src/Symfony/Component/Form/Extension/Validator/Constraints/FormValidator.php
2013-05-06 10:44:35 +02:00
Fabien Potencier
b9bc5b4770 Merge branch '2.1' into 2.2
* 2.1:
  added additional tests to cover invalid argument exceptions in OutputFormatterStyle component
  added a missing check for the provider key
  [Validator] fixed wrong URL for XSD
  [Form] Fixed transform()/reverseTransform() to always throw TransformationFailedExceptions
  [Form] Fixed: String validation groups are never interpreted as callbacks
  if the repository method returns an array ensure that it's internal poin...
  Fix wrong method in findTaggedServiceIds(), add example to docblock.

Conflicts:
	src/Symfony/Bridge/Doctrine/Form/DataTransformer/CollectionToArrayTransformer.php
	src/Symfony/Component/Form/Extension/Core/DataTransformer/DataTransformerChain.php
	src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/ArrayToPartsTransformerTest.php
	src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/ChoiceToValueTransformerTest.php
	src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/ChoicesToValuesTransformerTest.php
	src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToArrayTransformerTest.php
	src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/DateTimeToRfc3339TransformerTest.php
	src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformerTest.php
	src/Symfony/Component/Form/Tests/Extension/Core/DataTransformer/ValueToDuplicatesTransformerTest.php
2013-05-06 10:37:50 +02:00
Fabien Potencier
5b7e1e6f68 added a missing check for the provider key 2013-05-05 18:38:27 +02:00
Fabien Potencier
1b2619078d Merge branch '2.2'
* 2.2:
  Fix default value handling for multi-value options
  [HttpKernel] truncate profiler token to 6 chars (see #7665)
  Disabled APC on Travis for PHP 5.5+ as it is not available
  [HttpFoundation] do not use server variable PATH_INFO because it is already decoded and thus symfony is fragile to double encoding of the path
  Fix download over SSL using IE < 8 and binary file response
  [Console] Fix merging of application definition, fixes #7068, replaces #7158
  [HttpKernel] fixed the Kernel when the ClassLoader component is not available (closes #7406)
  fixed output of bag values
  [Yaml] improved boolean naming ($notEOF -> !$EOF)
  [Yaml] fixed handling an empty value
  [Routing][XML Loader] Add a possibility to set a default value to null
  [Console] fixed handling of "0" input on ask
  The /e modifier for preg_replace() is deprecated in PHP 5.5; replace with preg_replace_callback()
  fixed handling of "0" input on ask
  [HttpFoundation] Fixed bug in key searching for NamespacedAttributeBag
  [Form] DateTimeToRfc3339Transformer use proper transformation exteption in reverse transformation
  Update PhpEngine.php
  [PropertyAccess] Add objectives to pluralMap
  [Security] Removed unused var
  [HttpFoundation] getClientIp is fixed.

Conflicts:
	src/Symfony/Component/Console/Tests/Command/CommandTest.php
	src/Symfony/Component/Console/Tests/Input/ArgvInputTest.php
	src/Symfony/Component/HttpFoundation/Request.php
	src/Symfony/Component/HttpKernel/Kernel.php
2013-04-17 07:31:37 +02:00