Commit Graph

39792 Commits

Author SHA1 Message Date
Fabien Potencier
017420b511 feature #36094 [AmazonSqsMessenger] Use AsyncAws to handle SQS communication (jderusse)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[AmazonSqsMessenger] Use AsyncAws to handle SQS communication

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | /
| License       | MIT
| Doc PR        | /

Similar to #35992 this PR use AsyncAws to handle Sqs messages sent/receive

It move complexity of authentication/streaming outside Symfony while keeping HttpClient integration.

Commits
-------

7c4888eed1 [AmazonSqsMessenger] Use AsyncAws to handle SQS communication
2020-05-03 18:22:12 +02:00
Jérémy Derussé
7c4888eed1 [AmazonSqsMessenger] Use AsyncAws to handle SQS communication 2020-05-03 18:22:01 +02:00
Fabien Potencier
87a570185e bug #36660 [Messenger] Fix messenger:failed:remove can not remove single message (tienvx)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Messenger] Fix messenger:failed:remove can not remove single message

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36659
| License       | MIT
| Doc PR        | -

Fix this error:
```
count(): Parameter must be an array or an object that implements Countable
```
When calling `messenger:failed:remove` command from other code with single id

Commits
-------

e66cd97ec3 [Messenger] Fix messenger:failed:remove can not remove single message
2020-05-03 17:44:00 +02:00
Fabien Potencier
eebb3efa2c feature #36636 Add support of PHP8 static return type for withers (l-vo)
This PR was merged into the 5.1-dev branch.

Discussion
----------

Add support of PHP8 static return type for withers

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | https://github.com/orgs/symfony/projects/1#card-35852557
| License       | MIT
| Doc PR        |

Commits
-------

04fdf05cff Add support of PHP8 static return type for withers
2020-05-03 16:47:09 +02:00
Fabien Potencier
d6aa205b47 feature #36586 [DI] allow loading and dumping tags with an attribute named "name" (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[DI] allow loading and dumping tags with an attribute named "name"

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

This is a minor feature added for consistency: using PHP, we can already define tags with an attribute named `"name"`. But then, we cannot dump such definitions in YAML nor XML since we don't have a syntax to declare such tags in these formats.

I spotted this while looking at a dumped container: we already use an attribute named `"name"` on two tags: `cache.pool` and `workflow.definition`. Currently, the dumped XML is wrong because of this.

This PR enables the following new syntaxes (the current style still works as usual):
- in YAML, consistently with the new syntax for method calls:
  ```yaml
  tags:
    - cache.pool: { name: my_cache_pool }
  ```
- in XML:
  ```xml
  <tag name="my_cache_pool">cache.pool</tag>
  ```

Commits
-------

b023e4cac3 [DI] allow loading and dumping tags with an attribute named "name"
2020-05-03 16:42:23 +02:00
Fabien Potencier
07a0334947 feature #36599 [HttpKernel] make kernels implementing WarmableInterface be part of the cache warmup stage (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[HttpKernel] make kernels implementing `WarmableInterface` be part of the cache warmup stage

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

This allows your kernel to return extra classes to preload also (which was my main motivation for creating this PR actually.)

```php
// ...
use Symfony\Component\HttpKernel\CacheWarmer\WarmableInterface;
// ...

class Kernel ... implements ..., WarmableInterface
{
    // ...

    public function warmUp(string $cacheDir): array
    {
        // ...

        return [
            SomeClassToPreload::class,
            AnotherClassClassToPreload::class,
            $cacheDir.'/some-file-to-preload.php',
            // ...
        ];
    }

    // ...
}
```

Commits
-------

649e530356 [HttpKernel] make kernels implementing `WarmableInterface` be part of the cache warmup stage
2020-05-03 16:39:00 +02:00
Fabien Potencier
3a6f8ca3e4 bug #36578 [Form] deprecate not using a rounding mode (xabbuh)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Form] deprecate not using a rounding mode

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | yes
| Tickets       |
| License       | MIT
| Doc PR        |

Commits
-------

25ba1a241d deprecate not using a rounding mode
2020-05-03 16:35:45 +02:00
Fabien Potencier
669b7f132b feature #35992 [Mailer] Use AsyncAws to handle SES requests (jderusse)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Mailer] Use AsyncAws to handle SES requests

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | #33183, #35468 and #35037
| License       | MIT
| Doc PR        | TODO

alternative to #33326

This PR replace the native code to call AWS SES by the new [AsyncAws](https://github.com/async-aws/aws) project maintained by @Nyholm and me.

This removes complexity of signing request, and adds new features likes:
- authentication via .aws/config.ini, Instance profile, WebIdentity (K8S service account)
- usesignature V4 (the one recommanded by the Official SDK )
- fully compatible with API (uses the official AWS SDK interface contract to generate classes)

Because it's based on `symfony/http-client`, it's fully integrable with Symfony application.

Commits
-------

21243874bc [Mailer] Use AsyncAws to handle SES requests
2020-05-03 16:23:47 +02:00
Jérémy Derussé
21243874bc [Mailer] Use AsyncAws to handle SES requests 2020-05-03 16:23:41 +02:00
Fabien Potencier
a5ae434a92 bug #36505 [Translation] Fix for translation:update command updating ICU messages (artemoliynyk)
This PR was merged into the 4.4 branch.

Discussion
----------

[Translation] Fix for translation:update command updating ICU messages

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36459
| License       | MIT

If `translation:update` command executed with option `--domain=messages`  – it  ignore `messages-intl-icu` file and just create new `messages`

Method `TranslationUpdateCommand::filterCatalogue()` on `MessageCatalogue::all()` method to get all messages for domain
But `MessageCatalogue::all()` method disredard `intl-icu` domains and simply merge all.

[Translation] added $strict parameter for MessageCatalogueInterface::all() to be able to get only defined domain messages
[FrameworkBundle] modified translation:update command to respect intl-icu domain

Commits
-------

567cee5f02 [Translation] Fix for translation:update command updating ICU messages
2020-05-03 10:46:12 +02:00
Wouter de Jong
ac84a6c5d9 Removed AnonymousToken from the authenticator system
* Anonymous users are actual to unauthenticated users, both are now represented by no token
* Added a PUBLIC_ACCESS Security attribute to be used in access_control
* Deprecated "anonymous: lazy" in favor of "lazy: true"
2020-05-03 08:43:40 +02:00
Fabien Potencier
28bb74cd50 bug #36661 [SecurityBundle] Fixed entry point service ID resolving and multiple guard entry points (wouterj)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[SecurityBundle] Fixed entry point service ID resolving and multiple guard entry points

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | n/a

@fabpot I am not able to reproduce [the error you reported](https://github.com/symfony/symfony/pull/36575#issuecomment-622272051) in any of my demo applications or in the tests introduced in this PR. The error indicates that no entry point is configured in your application, can you maybe try out this patch (given it now makes a hard error when more than one guard is used)? If it still doesn't work, can you maybe share your firewall configuration?

---

_build failures are unrelated_

Commits
-------

c75659350e Do not make AbstractFactory internal and revert method rename
6870a18803 Fixed entry point resolving and guard entry point configuration
2020-05-03 08:36:54 +02:00
Marko Kaznovac
0da177a224
fix sr_Latn translation
*negative* translated as positive
2020-05-03 00:06:24 +02:00
Wouter de Jong
c75659350e Do not make AbstractFactory internal and revert method rename 2020-05-02 20:58:17 +02:00
Wouter de Jong
5ba4d1de86 Renamed VerifyAuthenticatorCredentialsEvent to CheckPassportEvent 2020-05-02 20:51:30 +02:00
Wouter de Jong
6870a18803 Fixed entry point resolving and guard entry point configuration 2020-05-02 15:04:30 +02:00
Christian Flothmann
aee10cd44a bug #36627 [Validator] fix lazy property usage. (bendavies)
This PR was squashed before being merged into the 3.4 branch (closes #36627).

Discussion
----------

[Validator] fix lazy property usage.

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36343
| License       | MIT
| Doc PR        |

This attempts to fix a large regression introduced in #36343, which broke recursing values returned from `getter` Constraints, because they are now wrapped  in in a `LazyProperty`. The `LazyProperty` needs to be evaluated because some checks are done on the type of `$value`, i.e `is_array` etc... in `validateGenericNode`.

I'm concerned that the original PR didn't really add sufficient test coverage for the introduction of `LazyProperty`, and I'm not 100% sure that I've caught all the cases where the `instanceof` check are needed in this PR.

For the tests, I added the `@dataProvider getConstraintMethods` to every test that hit the problem area of code.

~~The only issue is that my fixed has broken the test introduced in #36343, `testGroupedMethodConstraintValidateInSequence`.~~

~~I think I need @HeahDude to help me work through this. Maybe there is a more simple solution, one that doesn't require doing `instanceof LazyPropery` checks in multiple places, because this feels very brittle.~~
EDIT: fixed that test.

Commits
-------

281861e788 [Validator] fix lazy property usage.
2020-05-02 08:43:10 +02:00
Ben Davies
281861e788 [Validator] fix lazy property usage. 2020-05-02 08:43:03 +02:00
Christian Flothmann
a804333b25 minor #36613 [Form] provide a useful message when extension types don't match (xabbuh)
This PR was merged into the 4.4 branch.

Discussion
----------

[Form] provide a useful message when extension types don't match

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36610
| License       | MIT
| Doc PR        |

Commits
-------

88d836643a provide a useful message when extension types don't match
2020-05-02 08:23:09 +02:00
tien.xuan.vo
e66cd97ec3 [Messenger] Fix messenger:failed:remove can not remove single message 2020-05-02 11:26:03 +07:00
Nicolas Grekas
4528c1194b bug #36601 [Serializer] do not transform empty \Traversable to Array (soyuka)
This PR was merged into the 4.4 branch.

Discussion
----------

[Serializer] do not transform empty \Traversable to Array

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | na
| License       | MIT
| Doc PR        | na

Today, using `PRESERVE_EMPTY_OBJECTS` ([introduced in 4.0](f28e826627)), the JSON serialization of:

```php
<?php
$object = [];
$object['foo'] = new \ArrayObject();
$object['bar'] = new \ArrayObject(['notempty']);
$object['baz'] = new \ArrayObject(['nested' => new \ArrayObject()]);
```

Outputs:

```json
{"foo":[],"bar":["notempty"],"baz":{"nested":[]}}
```

Instead of the expected:

```json
{"foo":{},"bar":["notempty"],"baz":{"nested":{}}}
```

This issue comes from the Serializer that transforms `Traversable` to an Array [here](11a707200d/src/Symfony/Component/Serializer/Serializer.php (L159)). Also, the `AbstractObjectNormalizer` [doesn't support Traversable](11a707200d/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php (L134)), but he allows to preserve empty objects.

I propose this patch where the fix doesn't transform a `Traversable` to an Array. I see another way to patch this in which we could allow empty Traversable in the `AbstractObjectNormalizer` (not sure it's better though). See attached [other-fix.patch](https://github.com/symfony/symfony/files/4539865/other-fix.log) to see the alternative patch.

Commits
-------

e5c20293fa Fix serializer do not transform empty \Traversable to Array
2020-05-01 23:09:03 +02:00
Vincent Langlet
67b744929f Fix annotation 2020-05-01 19:30:18 +02:00
Vincent Langlet
9233efbe06 Add CustomUserMessageAccountStatusException 2020-05-01 19:29:52 +02:00
Nicolas Grekas
c5e5b2d019 [Debug][ErrorHandler] cleanup phpunit.xml.dist files 2020-05-01 18:55:10 +02:00
Wouter J
69784713bb
Fixed #36575 2020-05-01 09:50:12 +02:00
Fabien Potencier
ed1b6eaf83 bug #36609 Add missing port SQS Host Header request (jderusse)
This PR was merged into the 5.1-dev branch.

Discussion
----------

Add missing port SQS Host Header request

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | /
| License       | MIT
| Doc PR        | /

When user provides a custom endpoint, the port is missing from the `Host` headers, leading to wrong URL when calling `getQueueUrl`

Commits
-------

41165beb48 Add missing port SQS Host Header request
2020-05-01 08:04:26 +02:00
Fabien Potencier
da6620c035 bug #36635 [Notifier] Fix 3 errors for bridge Mattermost (Sébastien COURJEAN)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Notifier] Fix 3 errors for bridge Mattermost

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36632
| License       | MIT
| Doc PR        | symfony/symfony-docs#...

Fix 3 errors for bridge mattermost in notifier component.

Commits
-------

ca9439ac43 [Notifier] Fix 3 errors for bridge Mattermost
2020-05-01 08:02:37 +02:00
Sébastien COURJEAN
ca9439ac43 [Notifier] Fix 3 errors for bridge Mattermost 2020-05-01 08:02:29 +02:00
Laurent VOULLEMIER
04fdf05cff Add support of PHP8 static return type for withers 2020-04-30 22:10:08 +02:00
Artem Oliynyk
567cee5f02 [Translation] Fix for translation:update command updating ICU messages 2020-04-30 20:05:09 +02:00
Nicolas Grekas
f8d3b0626a bug #36606 [Cache] Fixed not supported Redis eviction policies (SerheyDolgushev)
This PR was merged into the 4.4 branch.

Discussion
----------

[Cache] Fixed not supported Redis eviction policies

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | no
| License       | MIT
| Doc PR        | no

**Steps to reproduce:**
1. Define the following redis service on SymfonyCloud:
```
rediscache:
    type: redis:5.0
    size: S
    configuration:
        maxmemory_policy: allkeys-lru
```
2. Deploy the change

**Expected result:**
No redis cache will be populated

**Actual result:**
Following exception is thrown:
```
[2020-04-28T05:35:58.440403-04:00] php.CRITICAL: Uncaught Error: Return value of Symfony\Component\Cache\Adapter\RedisTagAwareAdapter::doSave() must be of the type array, bool returned {"exception":"[object] (TypeError(code: 0): Return value of Symfony\\Component\\Cache\\Adapter\\RedisTagAwareAdapter::doSave() must be of the type array, bool returned at /app/vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php:100)"} []
```

Commits
-------

3d6e942da5 [Cache] Fixed not supported Redis eviction policies
2020-04-30 19:47:27 +02:00
Nicolas Grekas
649e530356 [HttpKernel] make kernels implementing WarmableInterface be part of the cache warmup stage 2020-04-30 19:43:15 +02:00
Nicolas Grekas
0633308bb3 minor #36644 [FrameworkBundle][CacheWarmupCommand] Append files to preload (fancyweb)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[FrameworkBundle][CacheWarmupCommand] Append files to preload

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Files returned by the warmUp() method must be added to the preload file.

I also added checks to avoid empty preload calls in the preload file like this:
```
$classes = [];
Preloader::preload($classes);
```

Commits
-------

a82c7ab4c0 [FrameworkBundle][CacheWarmupCommand] Append files to preload
2020-04-30 19:42:17 +02:00
Nicolas Grekas
27c10f0f24 minor #36646 [HttpFoundation][HttpKernel] Add more preload always-needed symbols (fancyweb)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[HttpFoundation][HttpKernel] Add more preload always-needed symbols

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Part of https://github.com/orgs/symfony/projects/1#card-37082675
| License       | MIT
| Doc PR        | -

`ConfigCache` is in the hot path because it is used for every request in the kernel boot (initializeContainer() method). I guess we can consider that every kernel is going to be booted so it should always be used.

`InputBag` should be added too - it is used in the Request initialization so it will likely be hit on every request as well - but maybe it wasn't added in the first place for a reason since other bags are already there?

Commits
-------

636a8bdf12 [HttpFoundation][HttpKernel] Add more preload always-needed symbols
2020-04-30 19:12:27 +02:00
Thomas Calvet
636a8bdf12 [HttpFoundation][HttpKernel] Add more preload always-needed symbols 2020-04-30 18:01:38 +02:00
Thomas Calvet
a82c7ab4c0 [FrameworkBundle][CacheWarmupCommand] Append files to preload 2020-04-30 16:30:59 +02:00
Fabien Potencier
a114f8d227 feature #36575 [Security] Require entry_point to be configured with multiple authenticators (wouterj)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Security] Require entry_point to be configured with multiple authenticators

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | tbd

See @weaverryan's comment at https://github.com/symfony/symfony/pull/33558#discussion_r403740402:

> I have it on my list to look at the entrypoint stuff more closely. But my gut reaction is this: let's fix them (or try to... or maybe in a PR after this) :). What I mean is this:
>
> -    It's always been confusing that your firewall may have multiple auth mechanisms that have their own "entry point"... and one is chosen seemingly at random :). I know it's not random, but why does the entrypoint from `form_login` "win" over `http_basic` if I have both defined under my firewall?
>
> -    Since we're moving to a new system, why not throw an exception the _moment_ that a firewall has multiple entrypoints available to it. Then we _force_ the user to choose the _one_ entrypoint that should be used.

---

**Before** (one authenticator)
```yaml
security:
  enable_authenticator_manager: true

  firewalls:
    main:
      form_login: ...

# form login is your entry point
```

**After**
Same as before

---

**Before** (multiple authenticators)
```yaml
security:
  enable_authenticator_manager: true

  firewalls:
    main:
      http_basic: ...
      form_login: ...

# for some reason, FormLogin is now your entry point! (config order doesn't matter)
```

**After**
```yaml
security:
  enable_authenticator_manager: true

  firewalls:
    main:
      http_basic: ...
      form_login: ...
      entry_point: form_login
```

---

**Before** (custom entry point service)
```yaml
security:
  enable_authenticator_manager: true

  firewalls:
    main:
      http_basic: ...
      form_login: ...
      entry_point: App\Security\CustomEntryPoint
```

**After**
Same as before

Commits
-------

7e861698e7 [Security] Require entry_point to be configured with multiple authenticators
2020-04-30 15:22:09 +02:00
Wouter de Jong
7e861698e7 [Security] Require entry_point to be configured with multiple authenticators 2020-04-30 15:22:03 +02:00
Fabien Potencier
8022f6c4eb Fxi missing use statement 2020-04-29 22:54:16 +02:00
Nicolas Grekas
b2d1ec5d34 [DI] fix synthetic services in ResolveNoPreloadPass 2020-04-29 19:41:01 +02:00
Nicolas Grekas
856ba8c98f [PhpUnitBridge] fix compat with PHP 5.3 2020-04-29 17:41:38 +02:00
Nicolas Grekas
6dd52f9719 [DI] limit recursivity of ResolveNoPreloadPass 2020-04-29 16:29:53 +02:00
Fabien Potencier
4fc5895266 bumped Symfony version to 5.0.9 2020-04-28 20:57:42 +02:00
Fabien Potencier
a5cc4dd077 updated VERSION for 5.0.8 2020-04-28 20:53:25 +02:00
Fabien Potencier
cd66cd57a0 bumped Symfony version to 4.4.9 2020-04-28 20:52:27 +02:00
Fabien Potencier
f7b9d93cb2 updated VERSION for 4.4.8 2020-04-28 20:47:42 +02:00
Nicolas Grekas
c699b9cb3d Merge branch '5.0'
* 5.0:
  [Validator] fix merge
2020-04-28 20:26:40 +02:00
Nicolas Grekas
270d204750 Merge branch '4.4' into 5.0
* 4.4:
  [Validator] fix merge
2020-04-28 20:26:18 +02:00
Nicolas Grekas
dfc4a71eac [Validator] fix merge 2020-04-28 20:23:58 +02:00
Nicolas Grekas
be8adfaf99 Merge branch '5.0'
* 5.0:
  updated VERSION for 3.4.40
  update CONTRIBUTORS for 3.4.40
  updated CHANGELOG for 3.4.40
  [WebProfilerBundle] changed label of peak memory usage in the time & memory panels (MB into MiB)
  add tests for the ConstraintViolationBuilder class
  Improve dirname usage
  [PhpUnitBridge] Use COMPOSER_BINARY env var if available
  Allow invalidateTags calls to be traced by data collector
  [YAML] escape DEL(\x7f)
  fix compatibility with phpunit 9
  [Cache] skip APCu in chains when the backend is disabled
  [Mailer] Add a comment to avoid more wrong PRs on this piece of code
  [Form] apply automatically step=1 for datetime-local input
  remove getContainer overwrites in tests
  Fixing a bug where class_alias would cause incorrect items in debug:autowiring
  [DependencyInjection][ServiceSubscriber] Support late aliases
  Fix profiler nullable string type
2020-04-28 20:01:52 +02:00
Nicolas Grekas
77cdbffcb3 Merge branch '4.4' into 5.0
* 4.4:
  updated VERSION for 3.4.40
  update CONTRIBUTORS for 3.4.40
  updated CHANGELOG for 3.4.40
  [WebProfilerBundle] changed label of peak memory usage in the time & memory panels (MB into MiB)
  add tests for the ConstraintViolationBuilder class
  Improve dirname usage
  [PhpUnitBridge] Use COMPOSER_BINARY env var if available
  Allow invalidateTags calls to be traced by data collector
  [YAML] escape DEL(\x7f)
  fix compatibility with phpunit 9
  [Cache] skip APCu in chains when the backend is disabled
  [Mailer] Add a comment to avoid more wrong PRs on this piece of code
  [Form] apply automatically step=1 for datetime-local input
  Fixing a bug where class_alias would cause incorrect items in debug:autowiring
  [DependencyInjection][ServiceSubscriber] Support late aliases
2020-04-28 19:58:55 +02:00
Nicolas Grekas
49b74baab4 Merge branch '3.4' into 4.4
* 3.4:
  updated VERSION for 3.4.40
  update CONTRIBUTORS for 3.4.40
  updated CHANGELOG for 3.4.40
  [WebProfilerBundle] changed label of peak memory usage in the time & memory panels (MB into MiB)
  add tests for the ConstraintViolationBuilder class
  Improve dirname usage
  [PhpUnitBridge] Use COMPOSER_BINARY env var if available
  [YAML] escape DEL(\x7f)
  fix compatibility with phpunit 9
  [Cache] skip APCu in chains when the backend is disabled
  [Form] apply automatically step=1 for datetime-local input
2020-04-28 19:55:16 +02:00
Christian Flothmann
88d836643a provide a useful message when extension types don't match 2020-04-28 19:46:51 +02:00
Fabien Potencier
f59e0e9c23 updated VERSION for 3.4.40 2020-04-28 19:41:38 +02:00
Jérémy Derussé
41165beb48
Add missing port SQS Host Header request 2020-04-28 15:17:36 +02:00
Serhey Dolgushev
3d6e942da5 [Cache] Fixed not supported Redis eviction policies 2020-04-28 12:13:53 +01:00
soyuka
e5c20293fa Fix serializer do not transform empty \Traversable to Array 2020-04-27 16:07:50 +02:00
Christian Flothmann
25ba1a241d deprecate not using a rounding mode 2020-04-27 08:57:02 +02:00
Filippo Tessarotto
4774946fbd [BrowserKit] Allow Referer set by history to be overridden (3.4) 2020-04-27 08:55:12 +02:00
Gabriel Ostrolucký
ee7fc5544e
[Console] Default hidden question to 1 attempt for non-tty session 2020-04-27 05:08:14 +02:00
Nicolas Grekas
1bc3ee798d bug #36536 [Cache] Allow invalidateTags calls to be traced by data collector (l-vo)
This PR was merged into the 4.4 branch.

Discussion
----------

[Cache] Allow invalidateTags calls to be traced by data collector

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | #34810
| License       | MIT
| Doc PR        |

`TraceableTagAwareAdapter` is not used in the fullstack framework since tag aware pools don't have the `cache.pool` tag (it's the decorated adapter that has it). This PR aims to use `TraceableTagAwareAdapter` when a pool is configured with `tags: true`

Commits
-------

28fdb3a879 Allow invalidateTags calls to be traced by data collector
2020-04-26 16:19:08 +02:00
Nicolas Grekas
b023e4cac3 [DI] allow loading and dumping tags with an attribute named "name" 2020-04-26 16:03:15 +02:00
Nicolas Grekas
048e6f3dd8 minor #36571 [WebProfilerBundle] changed label of peak memory usage in the time & memory panels (MB into MiB) (Lozik)
This PR was squashed before being merged into the 3.4 branch.

Discussion
----------

[WebProfilerBundle] changed label of peak memory usage in the time & memory panels (MB into MiB)

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36533
| License       | MIT
| Doc PR        | none
<!--
Replace this notice by a short README for your feature/bugfix. This will help people
understand your PR and can be used as a start for the documentation.

Additionally (see https://symfony.com/releases):
 - Always add tests and ensure they pass.
 - Never break backward compatibility (see https://symfony.com/bc).
 - Bug fixes must be submitted against the lowest maintained branch where they apply
   (lowest branches are regularly merged to upper ones so they get the fixes too.)
 - Features and deprecations must be submitted against branch master.
-->
This PR changes the label of the peak memory usage from `MB` into `MiB` in the time and memory panels of the web profiler, as discussed in #36533.

The changed file `Resources/views/Collector/time.html.twig` is completely updated by commit c9433b0090 for v4.3. So for correctly displaying the label in 4.4 (& 5.0), the file `Resources/views/Collector/time.js` needs to be updated.

Commits
-------

89fb0799cd [WebProfilerBundle] changed label of peak memory usage in the time & memory panels (MB into MiB)
2020-04-26 14:49:57 +02:00
Loïc Beurlet
89fb0799cd [WebProfilerBundle] changed label of peak memory usage in the time & memory panels (MB into MiB) 2020-04-26 14:49:41 +02:00
Christian Flothmann
fb3aaefbf2 add tests for the ConstraintViolationBuilder class 2020-04-26 10:10:12 +02:00
Nicolas Grekas
2a20c6e605 [DI] fix not preloading excluded service factories 2020-04-25 22:55:37 +02:00
Fabien Potencier
e3dc5effa6 bug #36566 [PhpUnitBridge] Use COMPOSER_BINARY env var if available (fancyweb)
This PR was merged into the 3.4 branch.

Discussion
----------

[PhpUnitBridge] Use COMPOSER_BINARY env var if available

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | https://github.com/symfony/symfony/issues/36401
| License       | MIT
| Doc PR        | -

Commits
-------

6dce90d47b [PhpUnitBridge] Use COMPOSER_BINARY env var if available
2020-04-25 14:18:34 +02:00
Wouter de Jong
8708a6c37d Integrated Guards with the Authenticator system 2020-04-24 19:07:56 +02:00
Alessandro Lai
e721cfd65c
Improve dirname usage 2020-04-24 16:08:51 +02:00
Thomas Calvet
6dce90d47b [PhpUnitBridge] Use COMPOSER_BINARY env var if available 2020-04-24 14:56:41 +02:00
Laurent VOULLEMIER
28fdb3a879 Allow invalidateTags calls to be traced by data collector 2020-04-24 13:56:40 +02:00
Fabien Potencier
fe5eacd3a2 bug #36560 [YAML] escape DEL(\x7f) (sdkawata)
This PR was merged into the 3.4 branch.

Discussion
----------

[YAML] escape DEL(\x7f)

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36559
| License       | MIT
| Doc PR        | none

Commits
-------

734d97bdcc [YAML] escape DEL(\x7f)
2020-04-24 12:37:21 +02:00
sdkawata
734d97bdcc [YAML] escape DEL(\x7f) 2020-04-24 19:16:04 +09:00
Nicolas Grekas
e4e8945aef Revert "feature #30501 [FrameworkBundle][Routing] added Configurators to handle template and redirect controllers (HeahDude)"
This reverts commit 477ee19778, reversing
changes made to 9bfa25869a.
2020-04-24 12:08:40 +02:00
Fabien Potencier
69452b22c2 bug #36548 [DI] fix lazy factory code generation (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[DI] fix lazy factory code generation

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | #36547
| License       | MIT
| Doc PR        | -

Commits
-------

7d55151ff4 [DI] fix lazy factory code generation
2020-04-24 11:16:27 +02:00
Fabien Potencier
d6b9011ebf feature #36373 [DI] add syntax to stack decorators (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[DI] add syntax to stack decorators

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #30599
| License       | MIT
| Doc PR        | -

Declare this:
```yaml
services:
    my_stack_of_decorators:
        stack:
            - class: App\ExternalDecorator
            - class: App\InternalDecorator
            - class: App\DecoratoredClass
```

And get this:
![image](https://user-images.githubusercontent.com/243674/78615803-b8c8e580-7872-11ea-95c2-22cb78f88ca8.png)

The PR is now ready with support for Yaml, XML and the PHP-DSL. It needs #36388, #36392 and #36389 to pass, and relates to #36390 to be DX-friendly.

The new syntax now supports composable stacks - i.e stack you can reuse in the middle of another stack.

RIP middleware, simple decorators FTW :)

From the test cases:
```yaml
services:
    reusable_stack:
        stack:
            - class: stdClass
              properties:
                  label: A
                  inner: '@.inner'
            - class: stdClass
              properties:
                  label: B
                  inner: '@.inner'

    concrete_stack:
        stack:
            - parent: reusable_stack
            - class: stdClass
              properties:
                  label: C
```

This will create a service similar to:
```php
(object) [
    'label' => 'A',
    'inner' => (object) [
        'label' => 'B',
        'inner' => (object) [
             'label' => 'C',
        ]
    ],
];
```

When used together with autowiring, this is enough to declare a stack of decorators:
```yaml
services:
    my_processing_stack:
        stack:
            - App\ExternalDecorator: ~
            - App\InternalDecorator: ~
            - App\TheDecoratedClass: ~
```

See fixtures for the other configuration formats.

See also https://twitter.com/nicolasgrekas/status/1248198573998604288

Todo:
- [x] rebase on top of #36388, #36392 and #36389 once they are merged
- [x] test declaring deeper nested stacks

Commits
-------

98eeeae3d1 [DI] add syntax to stack decorators
2020-04-24 11:12:12 +02:00
Fabien Potencier
9d763e0a93 feature #36545 [DI] fix definition and usage of AbstractArgument (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[DI] fix definition and usage of AbstractArgument

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Reading https://symfony.com/blog/new-in-symfony-5-1-abstract-service-arguments and the comments there made me realize that the current implementation is not generic enough. Abstract arguments can be found anywhere, not only as service arguments. Also, `AbstractArgument` instances should not convey the key/id since that makes them harder to use in the PHP-DSL.

Commits
-------

abb463c749 [DI] fix definition and usage of AbstractArgument
2020-04-24 10:41:57 +02:00
Fabien Potencier
734a0061e5 feature #28744 [Serializer] Add an @Ignore annotation (dunglas)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Serializer] Add an @Ignore annotation

| Q             | A
| ------------- | ---
| Branch?       | master
 Bug fix?      | no
| New feature?  | yes <!-- don't forget to update src/**/CHANGELOG.md files -->
| BC breaks?    | no     <!-- see https://symfony.com/bc -->
| Deprecations? | no <!-- don't forget to update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tests pass?   | yes    <!-- please add some, will be required by reviewers -->
| Fixed tickets | #24071
| License       | MIT
| Doc PR        | n/a

Add an `@Ignore` annotation to configure [ignored attributes](https://symfony.com/doc/current/components/serializer.html#ignoring-attributes) in a convenient way, as well as the related XML and YAML loaders.

TODO:

* [x] Add tests

Commits
-------

8526d7c050 [Serializer] Add an @Ignore annotation
2020-04-24 10:37:03 +02:00
Kévin Dunglas
8526d7c050 [Serializer] Add an @Ignore annotation 2020-04-24 10:36:57 +02:00
Fabien Potencier
260dea0387 feature #36456 [String] Add locale-sensitive map for slugging symbols (lmasforne)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[String] Add locale-sensitive map for slugging symbols

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #36383
| License       | MIT

By default chars '@' and '&' are respectively replaced by 'at' and 'and' (so limited by enlgish language).
I had an $options arguments to 'slug' method to replace chars with your own logic.

Commits
-------

1331584fa1 [String] Add locale-sensitive map for slugging symbols
2020-04-24 10:33:33 +02:00
Fabien Potencier
719bb15c38 bug #36539 [PhpUnitBridge] fix compatibility with phpunit 9 (garak)
This PR was merged into the 3.4 branch.

Discussion
----------

[PhpUnitBridge] fix compatibility with phpunit 9

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36499
| License       | MIT
| Doc PR        | none

See related issue

Commits
-------

e27ed28bae fix compatibility with phpunit 9
2020-04-24 10:28:23 +02:00
Fabien Potencier
259f523010 bug #36555 [Cache] skip APCu in chains when the backend is disabled (nicolas-grekas)
This PR was merged into the 3.4 branch.

Discussion
----------

[Cache] skip APCu in chains when the backend is disabled

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #34962
| License       | MIT
| Doc PR        | -

I think this should do it.

Commits
-------

5a7208481d [Cache] skip APCu in chains when the backend is disabled
2020-04-24 10:25:10 +02:00
Fabien Potencier
ac3bd146a3 feature #36535 [DI] skip preloading dependencies of non-preloaded services (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[DI] skip preloading dependencies of non-preloaded services

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Suggested by @stof on Slack: this improves preloading by propagating the `container.no_preload` tag to services that are referenced only by not-preloaded services.

The benefit is double:
1. this fixes potential over-preloading
2. this requires less work from the community: no need to add the tag anymore most of the time

As a corollary, listeners of console events are tagged with `container.no_preload` automatically now.

Commits
-------

add867020a [DI] skip preloading dependencies of non-preloaded services
2020-04-24 10:23:03 +02:00
Massimiliano Arione
e27ed28bae
fix compatibility with phpunit 9 2020-04-24 09:55:53 +02:00
Nicolas Grekas
f38904ea93 Use is_file() instead of file_exists() where possible 2020-04-24 00:29:19 +02:00
Nicolas Grekas
add867020a [DI] skip preloading dependencies of non-preloaded services 2020-04-23 23:57:44 +02:00
Nicolas Grekas
5a7208481d [Cache] skip APCu in chains when the backend is disabled 2020-04-23 23:50:38 +02:00
Nicolas Grekas
abb463c749 [DI] fix definition and usage of AbstractArgument 2020-04-23 22:40:01 +02:00
Nicolas Grekas
2d7b0b8dad bug #36519 [FrameworkBundle] debug:autowiring: Fix wrong display when using class_alias (weaverryan)
This PR was merged into the 4.4 branch.

Discussion
----------

[FrameworkBundle] debug:autowiring: Fix wrong display when using class_alias

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | None
| License       | MIT
| Doc PR        | not needed

Imagine that `FooInterface` is an alias, but it is deprecated and so has a `class_alias` to `BarInterface`. Currently, `debug:autowiring` will actually print that's the autowiring alias is `BarInterface`, despite there being no such id in the container.

@nicolas-grekas originally (on purpose) made the 2nd argument to `Descriptor::getClassDescription()` be passed by reference *for* this exact feature - 56aab09b01 - but I can't figure out why. This change (which effectively removes the by-reference modifying) made no existing tests fail.

Discovered this because the whole deprecated`Doctrine\Common\Persistence\ManagerRegistry` vs newer `Doctrine\Persistence\ManagerRegistry` causes the issue.

Thanks!

Commits
-------

d34b437ce0 Fixing a bug where class_alias would cause incorrect items in debug:autowiring
2020-04-23 22:17:53 +02:00
Thomas Calvet
fc6cf3d3c6 [DX] Show the ParseException message in YAML file loaders 2020-04-23 16:16:02 +02:00
Nicolas Grekas
7d55151ff4 [DI] fix lazy factory code generation 2020-04-23 15:09:13 +02:00
Fabien Potencier
444e616f6b [Mailer] Add a comment to avoid more wrong PRs on this piece of code 2020-04-23 14:41:43 +02:00
Robin Chalas
83b37e8010 feature #36525 Improve SQS interoperability (jderusse)
This PR was squashed before being merged into the 5.1-dev branch (closes #36525).

Discussion
----------

Improve SQS interoperability

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | NA
| License       | MIT
| Doc PR        | NA

The Symfony Messenger component provides a SerializerInterface to encode/decode the `Envelope`, this can be used to improve the Interoperability (see [article from jolicode](https://jolicode.com/blog/symfony-messenger-et-linteroperabilite) (french))

Sadly, the current implementation of SQS adapter json_encode the elements of the `Envelope` (`string body` + `string[] headers`) and store everything in the SQS message `Body`. That partially defect the interoperability: 3rd party have to also wrap (unwrap) message form json_encoded Body.

This PR leverage the AWS SQS `Body` and `MessageAttribute` properties to store message information:

```yaml
# before
SQS Message:
  Body: {"body": "hello world", "headers": {"foo": "bar"}}
  MessageAttributes: {}

# after
SQS Message:
  Body: hello world
  MessageAttributes:
    foor: bar
```

Commits
-------

00d84c125e Improve SQS interoperability
2020-04-23 11:06:03 +02:00
Jérémy Derussé
00d84c125e Improve SQS interoperability 2020-04-23 11:05:32 +02:00
Robin Chalas
fc4be4822a [Mailer] Don't dispatch MessageEvent twice 2020-04-22 17:34:22 +02:00
Dimitri Gritsajuk
3c24cfecdd [Form] apply automatically step=1 for datetime-local input 2020-04-22 12:34:32 +02:00
Tobias Schultze
5ef9390b2f remove getContainer overwrites in tests
Since 5.0 the parent implementation throws an exception anyway making the overwrites obsolete, see https://github.com/symfony/symfony/pull/31202
2020-04-22 02:36:07 +02:00
Nicolas Grekas
119ba3b742 bug #36454 [DependencyInjection][ServiceSubscriber] Support late aliases (fancyweb)
This PR was merged into the 4.4 branch.

Discussion
----------

[DependencyInjection][ServiceSubscriber] Support late aliases

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

A service subscriber that references a service that is aliased after optimization passes (after ResolveReferencesToAliasesPass technically) end up being dumped with the real service and not the alias.

I would consider it a bug but @nicolas-grekas told me it's a feature for him, this is why I'm submitting this on master.

@nicolas-grekas, feel free to close this one and open with your solution since you definitely know the subject better.

Commits
-------

24150370c3 [DependencyInjection][ServiceSubscriber] Support late aliases
2020-04-21 23:46:25 +02:00
Fabien Potencier
829566cdea [Mailer] Avoid reusing the same var names 2020-04-21 23:44:24 +02:00
Fabien Potencier
418c8479b0 minor #36509 [OptionsResolver] remove not needed BC layer (xabbuh)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[OptionsResolver] remove not needed BC layer

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

Commits
-------

1452619a52 remove not needed BC layer
2020-04-21 23:43:03 +02:00
Nicolas Grekas
33392442e7 fix merge (ter) 2020-04-21 23:41:31 +02:00
Fabien Potencier
22f1076375 bug #36162 [Profiler] Fix profiler nullable string type (mRoca)
This PR was merged into the 5.0 branch.

Discussion
----------

[Profiler] Fix profiler nullable string type

| Q             | A
| ------------- | ---
| Branch?       | 5.0
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets | n/a
| License | MIT
| Doc PR | -

This PR fixes nullable string types in setter for the Profile class.

The detected issue comes from [the Profiler class](https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpKernel/Profiler/Profiler.php#L149) :

```php
$profile->setIp($request->getClientIp()); // string or null
```

The corresponding return types for the Profile getters are allready good:
```php
    /**
     * Returns the IP.
     *
     * @return string|null The IP
     */
    public function getIp()
    {
        return $this->ip;
    }
```

Commits
-------

b5d406117d Fix profiler nullable string type
2020-04-21 23:40:38 +02:00
Nicolas Grekas
7ff6fb0b21 fix merge (bis) 2020-04-21 23:40:12 +02:00
Nicolas Grekas
5105062e7a fix merge 2020-04-21 23:38:17 +02:00
Nicolas Grekas
670e601d19 Merge branch '5.0'
* 5.0:
  fix merge
2020-04-21 23:19:50 +02:00
Nicolas Grekas
ebc90fb0c5 Merge branch '4.4' into 5.0
* 4.4:
  fix merge
2020-04-21 23:19:41 +02:00
Nicolas Grekas
15d2b77632 fix merge 2020-04-21 23:19:23 +02:00
Nicolas Grekas
7ce2f2401a Merge branch '5.0'
* 5.0:
  [FrameworkBundle] Fix session.attribute_bag service definition
  [Routing] Remove unused properties from the Route annotation
  [Routing] Add missing _locale requirements
  Update LdapBindAuthenticationProvider.php
  Add reproducer to for hit after update expire cacheItem
  [Cache] fix FilesystemTagAwareAdapter failing when a tag link preexists
2020-04-21 23:06:40 +02:00
Nicolas Grekas
4042cc49d1 Merge branch '4.4' into 5.0
* 4.4:
  [FrameworkBundle] Fix session.attribute_bag service definition
  [Routing] Remove unused properties from the Route annotation
  [Routing] Add missing _locale requirements
  Update LdapBindAuthenticationProvider.php
  Add reproducer to for hit after update expire cacheItem
  [Cache] fix FilesystemTagAwareAdapter failing when a tag link preexists
2020-04-21 23:02:50 +02:00
Nicolas Grekas
0ed6cfd412 Merge branch '3.4' into 4.4
* 3.4:
  [FrameworkBundle] Fix session.attribute_bag service definition
  Update LdapBindAuthenticationProvider.php
2020-04-21 23:01:55 +02:00
Nicolas Grekas
08ded7fed6 bug #36498 [Security/Core] fix escape for username in LdapBindAuthenticationProvider.php (stoccc)
This PR was merged into the 3.4 branch.

Discussion
----------

[Security/Core] fix escape for username in LdapBindAuthenticationProvider.php

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| License       | MIT

I think that when we call `ldap_search()` as definitely it will do the `$this->ldap->query()` call, the proper filter applied should be `LdapInterface::ESCAPE_FILTER` as documented in
https://www.php.net/manual/en/function.ldap-escape.php while `LdapInterface::ESCAPE_DN` should be used for `dn` only

This simple change should fix, I'm sorry if I'm wrong.

Commits
-------

4bda68a9a2 Update LdapBindAuthenticationProvider.php
2020-04-21 22:51:56 +02:00
Robin Chalas
f8b86df6af fix tests 2020-04-21 22:24:20 +02:00
Wouter de Jong
be3a9a93f0 Applied left-over review comments from #33558 2020-04-21 22:14:49 +02:00
Nicolas Grekas
60245d94aa bug #36500 [Routing][PrefixTrait] Add the _locale requirement (fancyweb)
This PR was merged into the 4.4 branch.

Discussion
----------

[Routing][PrefixTrait] Add the _locale requirement

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Commits
-------

9fd62f79fb [Routing] Add missing _locale requirements
2020-04-21 21:59:53 +02:00
Laurent Masforné
1331584fa1 [String] Add locale-sensitive map for slugging symbols 2020-04-21 21:55:25 +02:00
Ryan Weaver
d34b437ce0 Fixing a bug where class_alias would cause incorrect items in debug:autowiring 2020-04-21 14:42:49 -04:00
Sebastiaan Stok
5cb633c0dd
Update CsrfTokenBadge.php 2020-04-21 17:08:27 +02:00
Fabien Potencier
6167ce4961 [Notifier] Fix error handling for Free mobile 2020-04-21 16:08:57 +02:00
Fabien Potencier
2235be0864 feature #36516 [Notifier] Throw an exception when the Slack DSN is not valid (fabpot)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Notifier] Throw an exception when the Slack DSN is not valid

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes-ish
| New feature?  | yes-ish <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | n/a <!-- prefix each issue number with "Fix #", if any -->
| License       | MIT
| Doc PR        | n/a

Improved errors in case of a DSN issue.
+ proper error for the Slack DSN when path is empty (will help catch when people haven't updated their Slack DSN for 5.1).

Commits
-------

6b1a64a642 [Notifier] Throw an exception when the Slack DSN is not valid
2020-04-21 15:48:22 +02:00
Fabien Potencier
5a9481784c Fix wrong version in composer.json 2020-04-21 15:43:00 +02:00
Fabien Potencier
a89a2a8893 Fix package name 2020-04-21 15:29:37 +02:00
Fabien Potencier
6b1a64a642 [Notifier] Throw an exception when the Slack DSN is not valid 2020-04-21 15:15:11 +02:00
Fabien Potencier
4cc605537f feature #35690 [Notifier] Add Free Mobile notifier (noniagriconomie)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Notifier] Add Free Mobile notifier

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Implements https://github.com/symfony/symfony-docs/pull/13025#pullrequestreview-352447344
| License       | MIT
| Doc PR        | Will document if accepted (see **Usage** below)

## Add a new notifier (SMS) with the French Free Mobile provider.

It is a **special notifier** as it **only send the SMS to the self user**,
but I think it can be **useful for notification alerting purposes** (the way I use it already, and plan to use it with the component)

---

**Provider doc:** (🇫🇷 sorry)

https://mobile.free.fr/moncompte/index.php?page=options

<img width="716" alt="1" src="https://user-images.githubusercontent.com/13205768/74357784-b55c3500-4dc0-11ea-95ba-19ded062e800.png">

<img width="431" alt="2" src="https://user-images.githubusercontent.com/13205768/74357786-b7be8f00-4dc0-11ea-837e-b922c20e9a2e.png">

---

**Usage:**

```
// .env file
FREEMOBILE_DSN=freemobile://LOGIN:PASSWORD@default?phone=PHONE
```

where:
 - `LOGIN` is your Free Mobile login
 - `PASSWORD` is the token displayed in the config panel
- `PHONE` is your Free Mobile phone number

```yaml
// config/packages/notifiers.yaml file
framework:
    notifier:
        texter_transports:
            freemobile: '%env(FREEMOBILE_DSN)%'
```

Then you can then use it like documented here https://symfony.com/doc/current/notifier/texters.html

ℹ️ As this is a special notifier, the `PHONE` provided inside the DSN mut be the same used [here](https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Notifier/Message/SmsMessage.php#L31) for `$phone` value

---

Voilà!

Commits
-------

1b8709ee72 Add Free Mobile notifier
2020-04-21 15:13:45 +02:00
Fabien Potencier
1abdcbb205 feature #33558 [Security] AuthenticatorManager to make "authenticators" first-class security (wouterj)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Security] AuthenticatorManager to make "authenticators" first-class security

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | tbd

The tl;dr
---

The old authentication listener + authentication provider system was replaced by a new "authenticator" system (similar to Guard authentication). All existing "auth systems" (e.g. `form_login` are now written as an "authenticator" in core).

Instead of each "authentication system" registering its own listener in the `Firewall`, there is now only one listener: `AuthenticatorManagerListener`

* `Firewall` -> executes `AuthenticatorManagerListener`
* `AuthenticatorManagerListener` -> calls `AuthenticatorManager`
* `AuthenticatorManager` -> calls each authenticator

This PR contains *no deprecations* and the "new system" is *marked as experimental*. This allows to continue to develop the new Security system during the 5.x release cycle without disturbing Symfony users. In 5.4, we can deprecate "old" Security and remove it completely in 6.0.

Important Decisions
---

* A) **The new authentication manager - `AuthenticatorManager` - now dispatches 3 important "hook" events**:

  * `VerifyAuthenticatorCredentialsEvent`: occurs at the point when a "password" needs to be checked. Allows us to centralize password checking, CSRF validation, password upgrading and the "user checker" logic.
  * `LoginSuccessEvent`: Dispatched after a successful authentication. E.g. used by remember me listener.
  * `LoginFailedEvent`: Dispatched after an unsuccessful authentication. Also used by remember me (and in theory could be used for login throttling).

* B) **`getCredentials()`, `getUser()` and `checkCredentials()` methods from old Guard are gone: their logic is centralized**.
   Authenticators now have an `authenticate(Request $request): PassportInterface` method. A passport contains the user object, the credentials and any other add-in Security badges (e.g. CSRF):

   ```php
   public function authenticate(Request $request): PassportInterface
   {
       return new Passport(
           $user,
           new PasswordCredentials($request->get('_password')),
           [
               new CsrfBadge($request->get('_token'))
           ]
       );
   }
   ```

   All badges (including the credentials) need to be resolved by listeners to `VerifyAuthenticatorCredentialsEvent`. There is build-in core support for the following badges/credentials:

   * `PasswordCredentials`: validated using the password encoder factory
   * `CustomCredentials`: allows a closure to do credentials checking
   * `CsrfTokenBadge`: automatic CSRF token verification
   * `PasswordUpgradeBadge`: enables password migration
   * `RememberMeBadge`: enables remember-me support for this authenticator

* C) **`AuthenticatorManager` contains all logic to authenticate**
  As authenticators always relate to HTTP, the `AuthenticatorManager` contains all logic to authenticate. It has three methods, the most important two are:

  * `authenticateRequest(Request $request): TokenInterface`: Doing what is previously done by a listener and an authentication provider;
  * `authenticateUser(UserInterface $user, AuthenticatorInterface $authenticator, Request $request, array $badges = [])` for manual login in e.g. a controller.

* D) **One AuthenticatorManager per firewall**
  In the old system, there was 1 authentication manager containing all providers and each firewall had a specific firewall listener. In the new system, each firewall has a specific authentication manager.

* E) **Pre-authentication tokens are dropped.**
  As everything is now handled inside `AuthenticatorManager` and everything is stored in the Security `Passport`, there was no need for a token anymore (removing lots of confusion about what information is inside the token).

  This change deprecates 2 authentication calls: one in `AuthorizationChecker#isGranted()` and one in `AccessListener`.  These seem now to be mis-used to reload users (e.g. re-authenticate the user after you change their roles). This (some "way" to change a user's roles *without* logging them out) needs to be "fixed"/added in another PR.

* F) **The remember me service now uses *all* user providers**
  Previously, only user providers of authentication providers listening on that firewall were used. This change is due to practical reasons and we don't think it is common to have 2 user providers supporting the same user instance. In any case, you can always explicitly configure the user provider under `remember_me`.

* G) **Auth Providers No Longer Clear the Token on Auth Failure**
  Previously, authentication providers did `$this->tokenStorage->setToken(null)` upon authentication failure. This is not yet implemented: our reasoning is that if you've authenticated successfully using e.g. the login form, why should you be logged out if you visit the same login form and enter wrong credentials?
  The pre-authenticated authenticators are an exception here, they do reset the token upon authentication failure, just like the old system.

* H) **CSRF Generator Service ID No Longer Configurable**
  The old Form login authentication provider allowed you to configure the CSRF generator service ID. This is no longer possible with the automated CSRF listener. This feature was introduced in the first CSRF commit and didn't get any updates ever since, so we don't think this feature is required. This could also be accomplished by checking CSRF manually in your authenticator, instead of using the automated check.

Future Considerations
---

* Remove Security sub-components: Move CSRF to `Symfony\Component\Csrf` (just like mime); Deprecated Guard; Put HTTP + Core as `symfony/security`. This means moving the new classes to `Symfony\Component\Security`

* Convert LDAP to the new system

* This is fixed (and merged) by #36243 <s>There is a need for some listeners to listen for events on one firewall, but not another (e.g. `RememberMeListener`). This is now fixed by checking the `$providerKey`. We thought it might be nice to introduce a feature to the event dispatcher:</s>

  * <s>Create one event dispatcher per firewall;</s>
  * <s>Extend the `kernel.event_subscriber` tag, so that you can optionally specify the dispatcher service ID (to allow listening on events for a specific dispatcher);</s>
  * <s>Add a listener that always also triggers the events on the main event dispatcher, in case you want a listener that is listening on all firewalls.</s>

* Drop the `AnonymousToken` and `AnonymousAuthenticator`: Anonymous authentication has never made much sense and complicates things (e.g. the user can be a string). For access control, an anonymous user has the same meaning as an un-authenticated one (`null`). This require changes in the `AccessListener` and `AuthorizationChecker` and probably also a new Security attribute (to replace `IS_AUTHENTICATED_ANONYMOUSLY`). Related issues: #34909, #30609

> **How to test**
> 1. Install the Symfony demo application (or any Symfony application)
> 2. Clone my Symfony fork (`git clone git@github.com:wouterj/symfony`) and checkout my branch (`git checkout security/deprecate-providers-listeners`)
> 3. Use the link utility to link my fork to the Symfony application: `/path/to/symfony-fork/link /path/to/project`
> 4. Enable the new system by setting `security.enable_authenticator_manager` to `true`

Commits
-------

b1e040f311 Rename providerKey to firewallName for more consistent naming
50224aa285 Introduce Passport & Badges to extend authenticators
9ea32c4ed3 Also use authentication failure/success handlers in FormLoginAuthenticator
0fe5083a3e Added JSON login authenticator
7ef6a7ab03 Use the firewall event dispatcher
95edc806a1 Added pre-authenticated authenticators (X.509 & REMOTE_USER)
f5e11e5f32 Reverted changes to the Guard component
ba3754a80f Differentiate between interactive and non-interactive authenticators
6b9d78d5e0 Added tests
59f49b20ca Rename AuthenticatingListener
60d396f2d1 Added automatically CSRF protected authenticators
bf1a452e94 Merge AuthenticatorManager and AuthenticatorHandler
44cc76fec2 Use one AuthenticatorManager per firewall
09bed16d3d Only load old manager if new system is disabled
ddf430fc1e Added remember me functionality
1c810d5d2a Added support for lazy firewalls
7859977324 Removed all mentions of 'guard' in the new system
999ec2795f Refactor to an event based authentication approach
b14a5e8c52 Moved new authenticator to the HTTP namespace
b923e4c4f6 Enabled remember me for the GuardManagerListener
873b949cf9 Mark new core authenticators as experimental
4c06236933 Fixes after testing in Demo application
fa4b3ec213 Implemented password migration for the new authenticators
5efa892395 Create a new core AuthenticatorInterface
50132587a1 Add provider key in PreAuthenticationGuardToken
526f75608b Added GuardManagerListener
a172bacaa6 Added FormLogin and Anonymous authenticators
9b7fddd10c Integrated GuardAuthenticationManager in the SecurityBundle
a6890dbcf0 Created HttpBasicAuthenticator and some Guard traits
c321f4d73a Created GuardAuthenticationManager to make Guard first-class Security
2020-04-21 14:44:22 +02:00
Fabien Potencier
bc85eb34c7 [Notifier] Mark the component as experimental in 5.1 2020-04-21 13:50:35 +02:00
Christian Flothmann
1452619a52 remove not needed BC layer 2020-04-21 09:24:21 +02:00
Thomas Calvet
76072c6424 [FrameworkBundle] Fix session.attribute_bag service definition 2020-04-20 18:42:48 +02:00
Thomas Calvet
9ac1c76fd5 [Routing] Remove unused properties from the Route annotation 2020-04-20 16:41:27 +02:00
noniagriconomie
1b8709ee72 Add Free Mobile notifier 2020-04-20 15:47:45 +02:00
Wouter de Jong
b1e040f311 Rename providerKey to firewallName for more consistent naming 2020-04-20 14:20:56 +02:00
Wouter de Jong
50224aa285 Introduce Passport & Badges to extend authenticators 2020-04-20 14:20:56 +02:00
Wouter de Jong
9ea32c4ed3 Also use authentication failure/success handlers in FormLoginAuthenticator 2020-04-20 14:20:56 +02:00
Wouter de Jong
0fe5083a3e Added JSON login authenticator 2020-04-20 14:20:56 +02:00
Wouter de Jong
7ef6a7ab03 Use the firewall event dispatcher 2020-04-20 14:20:56 +02:00
Wouter de Jong
95edc806a1 Added pre-authenticated authenticators (X.509 & REMOTE_USER) 2020-04-20 14:20:56 +02:00
Wouter de Jong
f5e11e5f32 Reverted changes to the Guard component 2020-04-20 14:20:56 +02:00
Wouter de Jong
ba3754a80f Differentiate between interactive and non-interactive authenticators 2020-04-20 14:20:56 +02:00
Wouter de Jong
6b9d78d5e0 Added tests 2020-04-20 14:20:56 +02:00
Wouter de Jong
59f49b20ca Rename AuthenticatingListener 2020-04-20 14:20:56 +02:00
Wouter de Jong
60d396f2d1 Added automatically CSRF protected authenticators 2020-04-20 14:20:56 +02:00
Wouter de Jong
bf1a452e94 Merge AuthenticatorManager and AuthenticatorHandler
The AuthenticatorManager now performs the whole authentication process. This
allows for manual authentication without duplicating or publicly exposing parts
of the process.
2020-04-20 14:20:56 +02:00
Wouter de Jong
44cc76fec2 Use one AuthenticatorManager per firewall 2020-04-20 14:20:56 +02:00
Wouter de Jong
09bed16d3d Only load old manager if new system is disabled 2020-04-20 14:20:56 +02:00
Wouter de Jong
ddf430fc1e Added remember me functionality 2020-04-20 14:20:56 +02:00
Wouter de Jong
1c810d5d2a Added support for lazy firewalls 2020-04-20 14:20:56 +02:00
Wouter de Jong
7859977324 Removed all mentions of 'guard' in the new system
This to remove confusion between the new system and Guard. When using the new
system, guard should not be installed. Guard did however influence the idea
behind the new system. Thus keeping the mentions of "guard" makes it confusing
to use the new system.
2020-04-20 14:20:56 +02:00
Wouter de Jong
999ec2795f Refactor to an event based authentication approach
This allows more flexibility for the authentication manager (to e.g. implement
login throttling, easier remember me, etc). It is also a known design pattern
in Symfony HttpKernel.
2020-04-20 14:20:56 +02:00
Wouter de Jong
b14a5e8c52 Moved new authenticator to the HTTP namespace
This removes the introduced dependency on Guard from core. It also allows an
easier migration path, as the complete Guard subcomponent can now be deprecated
later in the 5.x life.
2020-04-20 14:20:56 +02:00
Wouter de Jong
b923e4c4f6 Enabled remember me for the GuardManagerListener 2020-04-20 14:20:56 +02:00
Wouter de Jong
873b949cf9 Mark new core authenticators as experimental 2020-04-20 14:20:56 +02:00
Wouter de Jong
4c06236933 Fixes after testing in Demo application 2020-04-20 14:20:56 +02:00
Wouter de Jong
fa4b3ec213 Implemented password migration for the new authenticators 2020-04-20 14:20:55 +02:00
Wouter de Jong
5efa892395 Create a new core AuthenticatorInterface
This is an iteration on the AuthenticatorInterface of the Guard, to allow more
flexibility so it can be used as a real replaced of the authentication
providers and listeners.
2020-04-20 14:20:55 +02:00
Wouter de Jong
50132587a1 Add provider key in PreAuthenticationGuardToken
This is required to create the correct authenticated token in the
GuardAuthenticationManager.
2020-04-20 14:20:55 +02:00
Wouter de Jong
526f75608b Added GuardManagerListener
This replaces all individual authentication listeners when guard authentication
manager is enabled.
2020-04-20 14:20:55 +02:00
Wouter de Jong
a172bacaa6 Added FormLogin and Anonymous authenticators 2020-04-20 14:20:55 +02:00
Wouter J
9b7fddd10c Integrated GuardAuthenticationManager in the SecurityBundle 2020-04-20 14:20:55 +02:00
Wouter J
a6890dbcf0 Created HttpBasicAuthenticator and some Guard traits 2020-04-20 14:20:55 +02:00
Wouter J
c321f4d73a Created GuardAuthenticationManager to make Guard first-class Security 2020-04-20 14:20:55 +02:00
Thomas Calvet
9fd62f79fb [Routing] Add missing _locale requirements
Co-authored-by: Nicolas Grekas <nicolas.grekas@gmail.com>
2020-04-20 14:17:53 +02:00
Olivier Dolbeau
4751a732f2 [Routing] Deal with hosts per locale 2020-04-20 10:51:50 +02:00
stoccc
4bda68a9a2
Update LdapBindAuthenticationProvider.php 2020-04-19 23:34:01 +02:00
Nicolas Grekas
95becc4078 bug #36457 [Cache] CacheItem with tag is never a hit after expired (alexander-schranz, nicolas-grekas)
This PR was merged into the 4.4 branch.

Discussion
----------

[Cache] CacheItem with tag is never a hit after expired

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes/no
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36458
| License       | MIT
| Doc PR        | symfony/symfony-docs#... <!-- required for new features -->

It seems like a tag cacheItem is never a hit again. Not sure how fix this but the cache component is really hard to debug 🙈 .

It need to be somewhere generally as all TagAware caches are effected:

```
1) Symfony\Component\Cache\Tests\Adapter\FilesystemTagAwareAdapterTest::testRefreshAfterExpires

Failed asserting that false is true.

/home/travis/build/symfony/symfony/src/Symfony/Component/Cache/Tests/Traits/TagAwareTestTrait.php:194

2) Symfony\Component\Cache\Tests\Adapter\PredisTagAwareClusterAdapterTest::testRefreshAfterExpires

Failed asserting that true is false.

/home/travis/build/symfony/symfony/src/Symfony/Component/Cache/Tests/Traits/TagAwareTestTrait.php:183

3) Symfony\Component\Cache\Tests\Adapter\RedisTagAwareAdapterTest::testRefreshAfterExpires

Failed asserting that true is false.

/home/travis/build/symfony/symfony/src/Symfony/Component/Cache/Tests/Traits/TagAwareTestTrait.php:183

4) Symfony\Component\Cache\Tests\Adapter\RedisTagAwareClusterAdapterTest::testRefreshAfterExpires

Failed asserting that true is false.

/home/travis/build/symfony/symfony/src/Symfony/Component/Cache/Tests/Traits/TagAwareTestTrait.php:183
```

Commits
-------

d082eca7dd Add reproducer to for hit after update expire cacheItem
f815b011c3 [Cache] fix FilesystemTagAwareAdapter failing when a tag link preexists
2020-04-19 21:54:45 +02:00
Nicolas Grekas
8f9ff4f7a0 [Routing] fix CS 2020-04-19 19:10:00 +02:00
Nicolas Grekas
69b6c90330 Merge branch '5.0'
* 5.0:
  [HttpFoundation] workaround PHP bug in the session module
  [SecurityBundle] fix accepting env vars in remember-me configurations
  [Form] Fixed handling groups sequence validation
  [Mime] Ensure proper line-ending for SMIME
  [Cache] Avoid memory leak in TraceableAdapter::reset()
2020-04-18 22:50:29 +02:00
Nicolas Grekas
efbe752918 Merge branch '4.4' into 5.0
* 4.4:
  [HttpFoundation] workaround PHP bug in the session module
  [SecurityBundle] fix accepting env vars in remember-me configurations
  [Form] Fixed handling groups sequence validation
  [Cache] Avoid memory leak in TraceableAdapter::reset()
2020-04-18 22:50:06 +02:00
Nicolas Grekas
e0e3cf634e Merge branch '3.4' into 4.4
* 3.4:
  [HttpFoundation] workaround PHP bug in the session module
2020-04-18 22:40:08 +02:00
Nicolas Grekas
0cbca19edc [HttpFoundation] workaround PHP bug in the session module 2020-04-18 22:23:17 +02:00
Wouter de Jong
94f47630ba Fixed fetching sessionId from InputBag 2020-04-18 20:51:12 +02:00
Alexander Schranz
d082eca7dd Add reproducer to for hit after update expire cacheItem 2020-04-18 16:28:10 +02:00
Nicolas Grekas
f815b011c3 [Cache] fix FilesystemTagAwareAdapter failing when a tag link preexists 2020-04-18 16:28:10 +02:00
Nicolas Grekas
80c5060401 Merge branch '3.4' into 4.4
* 3.4:
  [SecurityBundle] fix accepting env vars in remember-me configurations
  [Form] Fixed handling groups sequence validation
  [Cache] Avoid memory leak in TraceableAdapter::reset()
2020-04-18 14:50:46 +02:00
Nicolas Grekas
a347a84453 bug #36483 [SecurityBundle] fix accepting env vars in remember-me configurations (zek)
This PR was merged into the 3.4 branch.

Discussion
----------

[SecurityBundle] fix accepting env vars in remember-me configurations

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36271
| License       | MIT
| Doc PR        | -

As @wouterj explained we cannot use env variables after #35910 merged.

> Hmm, so I'm guessing this is what happens:
>
> * `lifetime` is now an `integerNode()`
> * For the Config component (which IIRC doesn't know anything about env variables), you're passing a string: `"%env(int:REMEMBER_ME_COOKIE_LIFETIME)%"`
> * This throws an error, although if it wouldn't, the DI component would sucessfully process the string into a integer before it's used by any PHP class.
>
> So we either make Config aware of environment variables (that's probably a huge feature) or we revert the `integerNode()` changes (as you suggested).
>
> @HeahDude am I mislooking something, or would reverting these 2 lines not result in much harm? (only a little less strict config processor)

Commits
-------

46c278316c [SecurityBundle] fix accepting env vars in remember-me configurations
2020-04-18 14:12:43 +02:00
Talha Zekeriya Durmuş
46c278316c [SecurityBundle] fix accepting env vars in remember-me configurations 2020-04-18 14:12:03 +02:00
Nicolas Grekas
0f1a5c452e bug #36343 [Form] Fixed handling groups sequence validation (HeahDude)
This PR was merged into the 3.4 branch.

Discussion
----------

[Form] Fixed handling groups sequence validation

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | FIx https://github.com/symfony/symfony/issues/9939#issuecomment-607459505, Fix #35556
| License       | MIT
| Doc PR        | ~

This is not the same as the original issue fixed by #36245, that was reported in https://github.com/symfony/symfony/issues/9939#issuecomment-607459505.

The form also fails to cascade sequence validation properly because each nested field is validated against the sequence, and one can fail at a step independently from another which could failed in another step. I've added a lot of tests to ensure this is working properly and tested in a website skeleton too.

This PR aims to close #35556 which tries to fix the same issue but afterwards in its implementation as said in https://github.com/symfony/symfony/pull/35556#discussion_r379289230.

Commits
-------

dfb61c204c [Form] Fixed handling groups sequence validation
2020-04-18 14:07:22 +02:00
Jules Pietri
dfb61c204c
[Form] Fixed handling groups sequence validation 2020-04-18 13:27:37 +02:00
Fabien Potencier
2460ca59af feature #36464 [RedisMessengerBridge] Add a delete_after_ack option (Seldaek)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[RedisMessengerBridge] Add a delete_after_ack option

This allows Messenger to clean up processed messages from memory, avoiding a mem "leak" in redis

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | https://github.com/symfony/symfony/issues/33715
| License       | MIT
| Doc PR        | symfony/symfony-docs#... TODO - will pile it on to https://github.com/symfony/symfony-docs/pull/11869 as it kinda binds together and a bigger refactor of the docs here is much needed to avoid all these gotchas

Right now by default a redis transport for messenger will leak memory as all messages stay in redis forever. You can configure `stream_max_entries` to automatically trim to a max of X entries, but that means if you have big peaks in messages you might start losing messages which have not been processed.

This PR provides an alternative to that, by deleting message as they are processed. This is ideal as it avoids having to find the right number for `stream_max_entries` (do you want to risk losing data or use more memory than needed on average?). The only catch is that if you have multiple groups consuming the same stream, the first one processing a message will delete it, so other groups will not see it. For that reason `setup()` attempts to detect this and fails hard if it is misconfigured to prevent data loss.

Commits
-------

7c416a7173 [RedisMessengerBridge] Add a delete_after_ack option to automatically clean up processed messages from memory
2020-04-17 14:22:43 +02:00
Jordi Boggiano
7c416a7173
[RedisMessengerBridge] Add a delete_after_ack option to automatically clean up processed messages from memory 2020-04-17 08:23:45 +02:00
Fabien Potencier
67948a7ffb feature #36431 [Messenger] Add FIFO support to the SQS transport (cv65kr)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Messenger] Add FIFO support to the SQS transport

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | no
| License       | MIT
| Doc PR        | --

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html

Commits
-------

37601753f1 [Messenger] Add FIFO support to the SQS transport
2020-04-17 05:34:16 +02:00
cv65kr
37601753f1 [Messenger] Add FIFO support to the SQS transport 2020-04-17 05:34:10 +02:00
Fabien Potencier
a85545f3e9 feature #36455 [Cache] Added context to log messages (Nyholm)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Cache] Added context to log messages

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        | n/a

In my application logs, I've got many entries like:

> Failed to save key "foobar" of type string.

I know it is related to the cache, But I dont know from what adapter. I use a chain of Array, Apcu and Redis. This PR adds some context to that log entry so I know which one of my cache adapter that fails.

Commits
-------

a4d9e0fc94 [Cache] Added context to log messages
2020-04-17 05:32:08 +02:00
Nyholm
a4d9e0fc94 [Cache] Added context to log messages 2020-04-17 05:31:59 +02:00
Fabien Potencier
6f81e03331 bug #36463 [Mime] Ensure proper line-ending for SMIME (sstok)
This PR was merged into the 5.0 branch.

Discussion
----------

[Mime] Ensure proper line-ending for SMIME

| Q             | A
| ------------- | ---
| Branch?       | 5.0
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36398
| License       | MIT
| Doc PR        |

Commits
-------

5e3ccc2814 [Mime] Ensure proper line-ending for SMIME
2020-04-17 05:29:44 +02:00
Fabien Potencier
5369aff94f minor #36468 Use ExpectDeprecationTrait (fancyweb)
This PR was merged into the 5.1-dev branch.

Discussion
----------

Use ExpectDeprecationTrait

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Commits
-------

08febef500 Use ExpectDeprecationTrait
2020-04-17 05:15:37 +02:00
Fabien Potencier
17bbaa502a bug #36460 [Cache] Avoid memory leak in TraceableAdapter::reset() (lyrixx)
This PR was merged into the 3.4 branch.

Discussion
----------

[Cache] Avoid memory leak in TraceableAdapter::reset()

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

When we call `ServicesResetter::reset()`, we want to reset the
application to its initial states. We don't want a memory leak :p

Commits
-------

15a8610c0c [Cache] Avoid memory leak in TraceableAdapter::reset()
2020-04-17 05:10:57 +02:00
Thomas Calvet
08febef500 Use ExpectDeprecationTrait 2020-04-16 18:52:30 +02:00
Thomas Calvet
24150370c3 [DependencyInjection][ServiceSubscriber] Support late aliases 2020-04-16 18:36:56 +02:00
Thomas Calvet
454b6ff48b [Form] Add the html5 option to ColorType to validate the input 2020-04-16 17:25:04 +02:00
Fabien Potencier
4d8a4b6ede Merge branch '5.0'
* 5.0:
  Fix From/Sender handling in Emails
2020-04-16 17:13:28 +02:00
Fabien Potencier
3b4c41fd4b Merge branch '4.4' into 5.0
* 4.4:
  Fix From/Sender handling in Emails
2020-04-16 17:13:13 +02:00
Fabien Potencier
e885860edc Fix From/Sender handling in Emails 2020-04-16 16:49:30 +02:00
Sebastiaan
5e3ccc2814
[Mime] Ensure proper line-ending for SMIME 2020-04-16 13:38:11 +02:00
Grégoire Pineau
15a8610c0c [Cache] Avoid memory leak in TraceableAdapter::reset() 2020-04-15 20:25:28 +02:00
Nicolas Grekas
6dc7d8b211 Merge branch '5.0'
* 5.0:
  [PhpUnitBridge] add PolyfillTestCaseTrait::expectExceptionMessageMatches to provide FC with recent phpunit versions
  [Messenger] Make sure redis transports are initialized correctly
  Remove return type for Twig function workflow_metadata()
  [DI] fix typo
2020-04-15 18:09:08 +02:00
Nicolas Grekas
4f8f3747d3 Merge branch '4.4' into 5.0
* 4.4:
  [PhpUnitBridge] add PolyfillTestCaseTrait::expectExceptionMessageMatches to provide FC with recent phpunit versions
  [Messenger] Make sure redis transports are initialized correctly
  Remove return type for Twig function workflow_metadata()
  [DI] fix typo
2020-04-15 17:59:10 +02:00
Nicolas Grekas
14a204636d bug #36408 [PhpUnitBridge] add PolyfillTestCaseTrait::expectExceptionMessageMatches to provide FC with recent phpunit versions (soyuka)
This PR was squashed before being merged into the 4.4 branch.

Discussion
----------

[PhpUnitBridge] add PolyfillTestCaseTrait::expectExceptionMessageMatches to provide FC with recent phpunit versions

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | na
| License       | MIT
| Doc PR        | na

expectExceptionMessageRegExp is deprecated coming phpunit 8.5.3  see https://github.com/sebastianbergmann/phpunit/issues/4133

Not sure if I need to add something else lmk.

Commits
-------

cfd5a29eaf [PhpUnitBridge] add PolyfillTestCaseTrait::expectExceptionMessageMatches to provide FC with recent phpunit versions
2020-04-15 17:56:18 +02:00
soyuka
cfd5a29eaf [PhpUnitBridge] add PolyfillTestCaseTrait::expectExceptionMessageMatches to provide FC with recent phpunit versions 2020-04-15 17:55:41 +02:00
Fabien Potencier
39a7ee1a61 bug #36447 Remove return type for Twig function workflow_metadata() (gisostallenberg)
This PR was merged into the 4.4 branch.

Discussion
----------

Remove return type for Twig function workflow_metadata()

Technically it is allowed to have metadata other than string, even data that does not cast to string, like an array.

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36391
| License       | MIT
| Doc PR        | n/a

The workflow metadata store can contain not only strings, but setting nested metadata results in an error when workflow_metadata() is used in Twig.
Also see #36391

Commits
-------

55664c5a17 Remove return type for Twig function workflow_metadata()
2020-04-15 11:12:33 +02:00
Nicolas Grekas
98eeeae3d1 [DI] add syntax to stack decorators 2020-04-14 18:54:23 +02:00
Jordi Boggiano
68b3b898d8 [Messenger] Make sure redis transports are initialized correctly 2020-04-14 13:52:59 +02:00
Giso Stallenberg
55664c5a17 Remove return type for Twig function workflow_metadata()
Technically it is allowed to have metadata other than string, even data that does not cast to string, like an array.
Also see https://github.com/symfony/symfony/issues/36391
2020-04-14 11:16:32 +02:00
Nicolas Grekas
b3333e552d [DI] fix typo 2020-04-14 10:30:58 +02:00
Fabien Potencier
b2f210f1f3 feature #34363 [HttpFoundation] Add InputBag (azjezz)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[HttpFoundation] Add InputBag

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | yes
| License       | MIT

When ppl read a request attribute, they never check if an array is returned
This means many apps just fail with a 500 when adding `[]` in the query string.
This PR turns them to 400 basically (with a deprecation for now)

Commits
-------

0a2ef70c04 [HttpFoundation] add InputBag
2020-04-13 22:42:08 +02:00
azjezz
0a2ef70c04 [HttpFoundation] add InputBag 2020-04-13 21:20:37 +01:00
Fabien Potencier
0ee98a1679 [WebProfilerBundle] Make a difference between queued and sent emails 2020-04-13 14:53:23 +02:00
Fabien Potencier
0933f90fd5 feature #36424 [Mailer][Messenger] add return statement for MessageHandler (ottaviano)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Mailer][Messenger] add return statement for MessageHandler

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       |
| License       | MIT
| Doc PR        |

By returning the result of the transporter in `MessageHandler` we can get hold of `SentMessage` from `HandledStamp::getResult()`.
![image](https://user-images.githubusercontent.com/4582866/79046122-3bed9100-7c0f-11ea-878f-65a6eb610758.png)

Commits
-------

7854cb488e [Mailer][Messenger] add return statement for MessageHandler
2020-04-13 13:14:28 +02:00
Nicolas Grekas
4f0375dccd fix merge 2020-04-13 12:44:30 +02:00
Nicolas Grekas
e94506bee7 Merge branch '5.0'
* 5.0:
  [DI] fix loading defaults when using the PHP-DSL
  RepeatedType should always have inner types mapped
2020-04-13 12:14:44 +02:00
Nicolas Grekas
8647ad3b2b Merge branch '4.4' into 5.0
* 4.4:
  [DI] fix loading defaults when using the PHP-DSL
  RepeatedType should always have inner types mapped
2020-04-13 12:13:27 +02:00
Nicolas Grekas
acb1060754 Merge branch '3.4' into 4.4
* 3.4:
  [DI] fix loading defaults when using the PHP-DSL
  RepeatedType should always have inner types mapped
2020-04-13 12:13:05 +02:00
Nicolas Grekas
f70286333f bug #36411 [Form] RepeatedType should always have inner types mapped (biozshock)
This PR was merged into the 3.4 branch.

Discussion
----------

[Form] RepeatedType should always have inner types mapped

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Doc PR| https://github.com/symfony/symfony-docs/pull/13519 |
| Tickets       | Fix #36410
| License       | MIT

Always set mapped=true to override inner type mapped setting.
Throw an exception if inner types of RepeatedType has mapped=false

Commits
-------

728cd66a13 RepeatedType should always have inner types mapped
2020-04-13 11:46:34 +02:00
Nicolas Grekas
51e0d3792c [DI] fix loading defaults when using the PHP-DSL 2020-04-13 11:33:40 +02:00
Fabien Potencier
600280edf5 Merge branch '5.0'
* 5.0:
  Fixed false-negative fabbot error on exception message
2020-04-13 08:25:50 +02:00
Fabien Potencier
e9c82ad283 Merge branch '4.4' into 5.0
* 4.4:
  Fixed false-negative fabbot error on exception message
2020-04-13 08:25:42 +02:00
Wouter de Jong
4f6381323c Fixed false-negative fabbot error on exception message 2020-04-13 00:16:27 +02:00
Fabien Potencier
7eecd4fc11 Fix tests 2020-04-12 22:55:33 +02:00
Fabien Potencier
6ae2fc3d07 Merge branch '5.0'
* 5.0:
  Tweak the code to avoid fabbot false positives
2020-04-12 19:09:07 +02:00
Fabien Potencier
910cc727a0 Tweak the code to avoid fabbot false positives 2020-04-12 19:06:46 +02:00
Fabien Potencier
edb0518e56 Merge branch '5.0'
* 5.0:
  Fix tests
  Fix test
2020-04-12 18:56:52 +02:00
Fabien Potencier
780b539669 Merge branch '4.4' into 5.0
* 4.4:
  Fix tests
  Fix test
2020-04-12 18:56:42 +02:00
Fabien Potencier
093a71500a Fix tests 2020-04-12 18:56:09 +02:00
Fabien Potencier
311a944a08 Fix test 2020-04-12 18:54:01 +02:00
Fabien Potencier
b7c7b6f445 Merge branch '5.0'
* 5.0:
  Fix code
  Tweak the code to avoid fabbot false positives
2020-04-12 18:48:26 +02:00
Fabien Potencier
8e9bd7ad06 Merge branch '4.4' into 5.0
* 4.4:
  Fix code
  Tweak the code to avoid fabbot false positives
2020-04-12 18:45:47 +02:00
Fabien Potencier
9f9383b25f Fix code 2020-04-12 18:45:36 +02:00
Fabien Potencier
e4d4428bb3 Fix code 2020-04-12 18:39:58 +02:00
Fabien Potencier
7d2cab1644 Tweak the code to avoid fabbot false positives 2020-04-12 18:14:02 +02:00
Fabien Potencier
253e018ea5 Merge branch '5.0'
* 5.0:
  Tweak the code to avoid fabbot false positives
  Remove UPGRADE files for 4.x
2020-04-12 16:42:09 +02:00
Fabien Potencier
9e254aea75 Merge branch '4.4' into 5.0
* 4.4:
  Tweak the code to avoid fabbot false positives
2020-04-12 16:40:17 +02:00
Fabien Potencier
11a707200d Merge branch '3.4' into 4.4
* 3.4:
  Tweak the code to avoid fabbot false positives
2020-04-12 16:39:55 +02:00
Fabien Potencier
ad6f75e5c8 Tweak the code to avoid fabbot false positives 2020-04-12 16:33:46 +02:00
Fabien Potencier
7800a2ab92 feature #36426 [Form] Deprecated unused old ServerParams util (HeahDude)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Form] Deprecated unused old `ServerParams` util

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| Deprecations? | yes
| Tickets       | ~
| License       | MIT
| Doc PR        | ~

A left over after https://github.com/symfony/symfony/pull/11924#issuecomment-56511557, this class is unused since Symfony 2.3 ^^'. I've noticed it before but never took the time to submit a PR because this is very minor IMHO. But since this deprecation should not impact anyone, let's keep the codebase clean and remove it in 6.0.

Commits
-------

e05e924c5a [Form] Deprecated unused old `ServerParams` util
2020-04-12 15:57:46 +02:00
Fabien Potencier
cea5ebc81f feature #36433 [Console] cursor tweaks (fabpot)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Console] cursor tweaks

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | Refs #27444
| License       | MIT
| Doc PR        | n/a

While playing with the new cursor class, I realized that I would like to make some changes. Mainly having a fluent interface: `$cursor->moveUp(10)->clearOutput()` for instance.

I have also separater the `clearLine()` method in two method to avoid the bool arg.

/cc @pierredup

Commits
-------

5a7b3146f5 Make the Cursor class final
b0e7eb66e0 Make Cursor fluent
55fef914cc Split a method
d00b5b5e08 Remove default value
2020-04-12 15:54:11 +02:00
Fabien Potencier
6eaafed6df Fix typo 2020-04-12 15:51:25 +02:00
Fabien Potencier
852eabdb9e feature #35828 [Notifier][Slack] Send messages using Incoming Webhooks (birkof, fabpot)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Notifier][Slack] Send messages using Incoming Webhooks

| Q             | A
| ------------- | ---
| Branch?       | master <!-- see below -->
| Bug fix?      | no
| New feature?  | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | <!-- prefix each issue number with "Fix #", if any -->
| License       | MIT
| Doc PR        | <!-- required for new features -->

> Legacy tokens are a deprecated method of generating tokens for testing and development.

As tokens will became deprecated on May 5th, 2020 we should use Incoming Webhooks app for using this bundle.
**Usage:**
_`slack://hooks.slack.com/services/xxx/xxx/xxx`_

Commits
-------

4b0807bd1a [Notifier] Tweak Slack support
e242cc35e9 Git rebase form master
2020-04-12 15:50:16 +02:00
Fabien Potencier
4b0807bd1a [Notifier] Tweak Slack support 2020-04-12 15:45:49 +02:00
Jules Pietri
e05e924c5a
[Form] Deprecated unused old ServerParams util 2020-04-12 15:23:35 +02:00
Fabien Potencier
5a7b3146f5 Make the Cursor class final 2020-04-12 14:38:26 +02:00
Fabien Potencier
b0e7eb66e0 Make Cursor fluent 2020-04-12 14:38:26 +02:00
Nicolas Grekas
ee3caba5eb [Lock] fix tests for MongoDB 2020-04-12 13:23:14 +02:00
Nicolas Grekas
c8472b5125 Merge branch '5.0'
* 5.0:
  [Lock] remove mention of mongodb
  [Routing] µtweaks
2020-04-12 13:07:37 +02:00
Nicolas Grekas
ce838882cf Merge branch '4.4' into 5.0
* 4.4:
  [Lock] remove mention of mongodb
  [Routing] µtweaks
2020-04-12 13:07:29 +02:00
Nicolas Grekas
8b84ab6002 [Lock] remove mention of mongodb 2020-04-12 13:06:58 +02:00
Nicolas Grekas
d53973afdb Merge branch '3.4' into 4.4
* 3.4:
  [Routing] µtweaks
2020-04-12 13:06:44 +02:00
Nicolas Grekas
a21c1127dc [Routing] µtweaks 2020-04-12 11:58:27 +02:00
Nicolas Grekas
de4523aa3a Merge branch '5.0'
* 5.0:
  [travis] fix CI (ter)
  Revert "[travis][appveyor] don't cache .phpunit"
  silence E_NOTICE triggered since PHP 7.4
  [Form] Removed legacy check in `ValidationListener`
  [HttpClient] fix HTTP/2 support on non-SSL connections - CurlHttpClient only
  Force ping after transport Exception
  do not merge constraints within interfaces
  [Validator] Fixed default group for nested composite constraints
2020-04-12 11:49:11 +02:00
Nicolas Grekas
7e739eeee2 Merge branch '4.4' into 5.0
* 4.4:
  [travis] fix CI (ter)
  Revert "[travis][appveyor] don't cache .phpunit"
  silence E_NOTICE triggered since PHP 7.4
  [Form] Removed legacy check in `ValidationListener`
  [HttpClient] fix HTTP/2 support on non-SSL connections - CurlHttpClient only
  Force ping after transport Exception
  do not merge constraints within interfaces
  [Validator] Fixed default group for nested composite constraints
2020-04-12 11:48:36 +02:00
Nicolas Grekas
44212f96d8 Merge branch '3.4' into 4.4
* 3.4:
  Revert "[travis][appveyor] don't cache .phpunit"
  silence E_NOTICE triggered since PHP 7.4
  [Form] Removed legacy check in `ValidationListener`
  do not merge constraints within interfaces
  [Validator] Fixed default group for nested composite constraints
2020-04-12 11:41:03 +02:00
Fabien Potencier
4e6a3bddf5 bug #36434 [HttpKernel] silence E_NOTICE triggered since PHP 7.4 (xabbuh)
This PR was merged into the 3.4 branch.

Discussion
----------

[HttpKernel] silence E_NOTICE triggered since PHP 7.4

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36413
| License       | MIT
| Doc PR        |

Commits
-------

c4e2c447ba silence E_NOTICE triggered since PHP 7.4
2020-04-12 11:33:14 +02:00
Christian Flothmann
c4e2c447ba silence E_NOTICE triggered since PHP 7.4 2020-04-12 11:28:02 +02:00
Fabien Potencier
55fef914cc Split a method 2020-04-12 11:15:20 +02:00
Fabien Potencier
d00b5b5e08 Remove default value 2020-04-12 11:14:14 +02:00
Fabien Potencier
6a27337333 bug #36365 [Validator] Fixed default group for nested composite constraints (HeahDude)
This PR was merged into the 3.4 branch.

Discussion
----------

[Validator] Fixed default group for nested composite constraints

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #33986
| License       | MIT
| Doc PR        | ~

Take a breath: when composite constraints are nested in a parent composite constraint without having non composite nested constraints (i.e empty), then the default group is not added, making the validator failing to validate in any group (including default), because there is no group at all, which should never happen.

Commits
-------

117ee34698 [Validator] Fixed default group for nested composite constraints
2020-04-12 09:44:21 +02:00
Fabien Potencier
d69b8bb730 feature #27444 [Console] Add Cursor class to control the cursor in the terminal (pierredup)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Console] Add Cursor class to control the cursor in the terminal

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | N/A
| License       | MIT
| Doc PR        | TBD

Add a new `Cursor` class to the Console component, that allows to manipulate the cursor in the terminal.

Options to move the cursor include: moveUp, moveDown, moveLeft, moveRight, show, hide, save and restore position, get current position etc.

Example usage:

```php
$cursor = new Cursor($output);

$parts = [
    ['x' => 9, 'y' => 5, 'string' => '#'],
    ['x' => 9, 'y' => 7, 'string' => '#'],
    ['x' => 2, 'y' => 7, 'string' => '#####'],
    ['x' => 9, 'y' => 1, 'string' => '#######'],
    ['x' => 7, 'y' => 6, 'string' => '#'],
    ['x' => 9, 'y' => 2, 'string' => '#'],
    ['x' => 9, 'y' => 6, 'string' => '#'],
    ['x' => 9, 'y' => 3, 'string' => '#'],
    ['x' => 2, 'y' => 1, 'string' => '#####'],
    ['x' => 7, 'y' => 2, 'string' => '#'],
    ['x' => 9, 'y' => 4, 'string' => '#####'],
    ['x' => 1, 'y' => 2, 'string' => '#'],
    ['x' => 1, 'y' => 6, 'string' => '#'],
    ['x' => 2, 'y' => 4, 'string' => '#####'],
    ['x' => 1, 'y' => 3, 'string' => '#'],
    ['x' => 7, 'y' => 5, 'string' => '#'],
];

foreach ($parts as $part) {
    $cursor->moveToPosition($part['x'], $part['y']);
    $output->write($part['string']);

    usleep(200000);
}

$cursor->moveToPosition(1, 8);
```

Result:

![kapture 2018-05-31 at 12 39 10](https://user-images.githubusercontent.com/144858/40777952-abb7c252-64cf-11e8-80a7-7417676c8b0b.gif)

Commits
-------

80d59d5c4a [Console] Add Cursor class to control the cursor in the terminal
2020-04-12 09:39:56 +02:00
Pierre du Plessis
80d59d5c4a [Console] Add Cursor class to control the cursor in the terminal 2020-04-12 09:39:50 +02:00
Fabien Potencier
f84592ac83 bug #36422 [HttpClient] fix HTTP/2 support on non-SSL connections - CurlHttpClient only (nicolas-grekas)
This PR was merged into the 4.4 branch.

Discussion
----------

[HttpClient] fix HTTP/2 support on non-SSL connections - CurlHttpClient only

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36419
| License       | MIT
| Doc PR        | -

Commits
-------

a5b884cd94 [HttpClient] fix HTTP/2 support on non-SSL connections - CurlHttpClient only
2020-04-12 09:39:11 +02:00
Fabien Potencier
280674f8bc bug #36417 Force ping after transport exception (oesteve)
This PR was merged into the 4.4 branch.

Discussion
----------

Force ping after transport exception

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36301
| License       | MIT
| Doc PR        |

SMTP transport fails for long running processes after tranport exception, if stream is closed all messages will throw a transport exception until $lastMessageTime exceds $pingThreshold.

With this PR, after transport expception the transport will ping the server to check if the connection is still alive.

Commits
-------

7ccbef62f6 Force ping after transport Exception
2020-04-12 09:31:22 +02:00
Fabien Potencier
cd4a4bd3d1 bug #35591 [Validator] do not merge constraints within interfaces (greedyivan)
This PR was merged into the 3.4 branch.

Discussion
----------

[Validator] do not merge constraints within interfaces

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #22538
| License       | MIT
| Doc PR        |

This fix disables merge constraints within interfaces.

There is no reason to merge constraints from one interface to another because each class merges the constraints of all its interfaces. Only one check is needed is to eliminate all interfaces that comes from parent class to avoid duplication.

Commits
-------

67f336b808 do not merge constraints within interfaces
2020-04-12 09:28:41 +02:00
Fabien Potencier
db733da440 minor #36428 [Form] Removed legacy check in ValidationListener (HeahDude)
This PR was merged into the 3.4 branch.

Discussion
----------

[Form] Removed legacy check in `ValidationListener`

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | ~
| License       | MIT
| Doc PR        | ~

A left over of #13198, should have been removed in 3.0. The tests don't use `null` anymore, no update needed here, this is just about removing dead code.

Commits
-------

e479e51f7c [Form] Removed legacy check in `ValidationListener`
2020-04-12 09:19:14 +02:00
Fabien Potencier
7c98954920 feature #31390 [Serializer] UnwrappingDenormalizer (nonanerz)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Serializer] UnwrappingDenormalizer

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

UnwrappingDenormalizer, registered with very high priority. Unwrapping the data if UNWRAP_PATH is provided.

Very often some APIs give nested responses in which we need only the child object. With UnwrappingDenormalizer we can get the needed object without creating unnecessary Model class that we don't really need.

Regarding to https://github.com/symfony/symfony/pull/28887 and https://github.com/symfony/symfony/pull/30894

Usage:

`$serialiser->deserialize('{"baz": {"foo": "bar", "inner": {"title": "value", "numbers": [5,3]}}}', Object::class, ['UnwrappingDenormalizer::UNWRAP_PATH' => '[baz][inner]'])`

Commits
-------

00d103d5f7 UnwrappingDenormalizer
2020-04-12 09:17:11 +02:00
Fabien Potencier
607e8d6e76 minor #36353 [ErrorHandler] Remove trigger_deprecation frame from trace (fancyweb, nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[ErrorHandler] Remove trigger_deprecation frame from trace

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

This accounts for the new `trigger_deprecation` function from [symfony/deprecation-contracts](https://github.com/symfony/deprecation-contracts).

Replaces #36329

Commits
-------

d4eb4a4bd7 [ErrorHandler] Remove trigger_deprecation frame from trace (add tests)
c293aee9ab [ErrorHandler] Remove trigger_deprecation frame from trace
2020-04-12 09:13:14 +02:00
Nicolas Grekas
622925300f [DI] remove restriction and allow mixing "parent" and instanceof-conditionals/defaults/bindings 2020-04-12 09:10:44 +02:00
Fabien Potencier
6ff7c2e1da feature #36388 [DI] deprecate the inline() function from the PHP-DSL in favor of service() (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[DI] deprecate the `inline()` function from the PHP-DSL in favor of `service()`

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| Deprecations? | yes
| Tickets       | -
| License       | MIT
| Doc PR        | -

In the PHP-DSL, the `inline()` function helps declaring ... inline services.

I'm proposing to rename it to `service()`, for consistency with yaml tags. All other helpers but this one have the same name as the yaml tag.

Let's do this while "nobody" uses this format yet :)

Commits
-------

647d971ae4 [DI] deprecate the `inline()` function from the PHP-DSL in favor of `service()`
2020-04-12 09:00:32 +02:00
Fabien Potencier
9a6695c094 feature #36389 [DI] allow decorators to reference their decorated service using the special .inner id (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[DI] allow decorators to reference their decorated service using the special `.inner` id

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Right now, when one wants to decorate a service, one needs to reference the decorated service using `foo.inner`, where `foo` is the id of the decorating service.

There are two issues with this IMHO:
- it's weird to have to repeat the name of declaring service inside of it;
- it doesn't play well with child definitions.

In this PR, I propose to use `.inner` to fix both issues.

Before:
```yaml
services:
  decorating_service:
    arguments: [@decorating_service.inner]
    decorates: decorated_service
```

After:
```yaml
services:
  decorating_service:
    arguments: [@.inner]
    decorates: decorated_service
```

Commits
-------

7b6f767fbe [DI] allow decorators to reference their decorated service using the special `.inner` id
2020-04-12 08:58:31 +02:00
Jules Pietri
e479e51f7c
[Form] Removed legacy check in ValidationListener 2020-04-11 22:17:48 +02:00
Dimitri Gritsajuk
7854cb488e [Mailer][Messenger] add return statement for MessageHandler 2020-04-11 16:01:30 +02:00
Nicolas Grekas
a5b884cd94 [HttpClient] fix HTTP/2 support on non-SSL connections - CurlHttpClient only 2020-04-11 11:49:39 +02:00
Nicolas Grekas
6e3b9c7cd9 Merge branch '5.0'
* 5.0:
  [appveyor] bump cache
  [Twig][Mime] Removed extra quotes in missing package exception message
  [DI] µfix
  Allowing empty secrets to be set
  [DI] add missing property declarations in InlineServiceConfigurator
  [DI] fix detecting short service syntax in yaml
  Supress error from fread when reading a unix pipe
  [HttpClient] Fix scoped client without query option configuration
  [Workflow] Use a strict comparison when retrieving raw marking in MarkingStore
  [Workflow] Use a strict comparison when retrieving raw markin in MarkingStore
2020-04-10 23:23:06 +02:00
Nicolas Grekas
c978b19e4f Merge branch '4.4' into 5.0
* 4.4:
  [appveyor] bump cache
  [Twig][Mime] Removed extra quotes in missing package exception message
  [DI] µfix
  Allowing empty secrets to be set
  [DI] add missing property declarations in InlineServiceConfigurator
  [DI] fix detecting short service syntax in yaml
  Supress error from fread when reading a unix pipe
  [HttpClient] Fix scoped client without query option configuration
  [Workflow] Use a strict comparison when retrieving raw marking in MarkingStore
  [Workflow] Use a strict comparison when retrieving raw markin in MarkingStore
2020-04-10 23:22:25 +02:00
Nicolas Grekas
977276efa4 bug #36377 [HttpClient] Fix scoped client without query option configuration (X-Coder264)
This PR was merged into the 4.4 branch.

Discussion
----------

[HttpClient] Fix scoped client without query option configuration

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

The `query` key default value is an [empty array](https://github.com/symfony/symfony/blob/v4.4.7/src/Symfony/Component/Config/Definition/PrototypedArrayNode.php#L30) and because of that it is always set. Processing a configuration for a scoped HTTP client (which has a `scope` and does not have a `base_uri`) results in the configuration being invalid. The error message says that query parameters cannot be aplied to the base URI since it is not defined (which doesn't make sense since the query parameters don't exist because they are empty).

Commits
-------

a07578dba3 [HttpClient] Fix scoped client without query option configuration
2020-04-10 23:11:29 +02:00
Nicolas Grekas
6f197466e5 bug #36387 [DI] fix detecting short service syntax in yaml (nicolas-grekas)
This PR was merged into the 4.4 branch.

Discussion
----------

[DI] fix detecting short service syntax in yaml

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

We do allow interfaces/classes as keys in arguments, yet the short syntax fails to know about those.

This fixes it, allowing one to use:
```
services:
    App\Foo:
        App\BarInterface: '@App\BarClass'
```

As a reminder, by-name is also allowed:
```
services:
    App\Foo: {
        $bar: '@App\BarClass'
    }
```

Commits
-------

bf17165fb1 [DI] fix detecting short service syntax in yaml
2020-04-10 23:06:17 +02:00
Nicolas Grekas
ba58c6ff8e bug #36392 [DI] add missing property declarations in InlineServiceConfigurator (nicolas-grekas)
This PR was merged into the 4.4 branch.

Discussion
----------

[DI] add missing property declarations in InlineServiceConfigurator

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

These are accessed by the traits used by the class.

Commits
-------

a6a4442cd9 [DI] add missing property declarations in InlineServiceConfigurator
2020-04-10 23:00:45 +02:00
Nicolas Grekas
2dd5fe67e0 bug #36400 Allowing empty secrets to be set (weaverryan)
This PR was merged into the 4.4 branch.

Discussion
----------

Allowing empty secrets to be set

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | None
| License       | MIT
| Doc PR        | Not needed

Setting secrets to an empty string is a valid value - you can already do this by consuming from an empty file or `stdin` with no input. But it's *not* currently possible to use the interactive prompt to set a secret to an empty string. This fixes that.

Commits
-------

c9bf0c8683 Allowing empty secrets to be set
2020-04-10 22:51:50 +02:00
Nicolas Grekas
f2d4a2910d bug #36380 [Process] Fixed input/output error on PHP 7.4 (mbardelmeijer)
This PR was merged into the 4.4 branch.

Discussion
----------

[Process] Fixed input/output error on PHP 7.4

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #34945
| License       | MIT
| Doc PR        |

This PR aims to fix the error from #34945, but i'm unsure if this is the best solution. The issue is that on PHP 7.4 the input/output error may come up.

php.net/manual/en/migration74.incompatible.php#migration74.incompatible.core.fread-fwrite

> fread() and fwrite() will now return FALSE if the operation failed. Previously an empty string or 0 was returned. EAGAIN/EWOULDBLOCK are not considered failures. These functions now also raise a notice on failure, such as when trying to write to a read only file resource.

Commits
-------

b98abde65a Supress error from fread when reading a unix pipe
2020-04-10 22:46:28 +02:00
Nicolas Grekas
4be98cd992 Merge branch '3.4' into 4.4
* 3.4:
  [appveyor] bump cache
  [DI] µfix
2020-04-10 22:35:35 +02:00
Mike Milano
b2c9a6ea91 [Twig][Mime] Removed extra quotes in missing package exception message 2020-04-10 22:28:12 +02:00
Nicolas Grekas
015d8d7e86 [DI] µfix 2020-04-10 22:02:31 +02:00
Artem Lopata
728cd66a13 RepeatedType should always have inner types mapped 2020-04-10 21:29:36 +02:00
oesteve
7ccbef62f6 Force ping after transport Exception 2020-04-10 20:51:00 +02:00
Ryan Weaver
c9bf0c8683 Allowing empty secrets to be set 2020-04-09 10:53:24 -04:00
Ivan Grigoriev
67f336b808
do not merge constraints within interfaces 2020-04-09 15:51:11 +03:00
Nicolas Grekas
647d971ae4 [DI] deprecate the inline() function from the PHP-DSL in favor of service() 2020-04-09 10:45:03 +02:00
Nicolas Grekas
a6a4442cd9 [DI] add missing property declarations in InlineServiceConfigurator 2020-04-09 10:43:57 +02:00
Nicolas Grekas
7b6f767fbe [DI] allow decorators to reference their decorated service using the special .inner id 2020-04-08 17:02:25 +02:00
Nicolas Grekas
bf17165fb1 [DI] fix detecting short service syntax in yaml 2020-04-08 16:17:20 +02:00
Jules Pietri
117ee34698
[Validator] Fixed default group for nested composite constraints 2020-04-08 12:54:36 +02:00
Fabien Potencier
168574db29 bug #36370 Update Connection.php (infinitely-young)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

Update Connection.php

Get `region` from `host` to prevent error "Credential should be scoped to a valid region, not '...'" and make it easier to setup DSN

| Q             | A
| ------------- | ---
| Branch?       | master for features / 3.4, 4.4 or 5.0 for bug fixes <!-- see below -->
| Bug fix?      | yes/no
| New feature?  | yes/no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | Fix #... <!-- prefix each issue number with "Fix #", if any -->
| License       | MIT
| Doc PR        | symfony/symfony-docs#... <!-- required for new features -->
<!--
Replace this notice by a short README for your feature/bugfix. This will help people
understand your PR and can be used as a start for the documentation.

Additionally (see https://symfony.com/releases):
 - Always add tests and ensure they pass.
 - Never break backward compatibility (see https://symfony.com/bc).
 - Bug fixes must be submitted against the lowest maintained branch where they apply
   (lowest branches are regularly merged to upper ones so they get the fixes too.)
 - Features and deprecations must be submitted against branch master.
-->

Commits
-------

af6804828b Update Connection.php
2020-04-08 08:10:19 +02:00
Evgeniy Koval
af6804828b Update Connection.php 2020-04-08 08:10:13 +02:00
Fabien Potencier
c6a176df38 feature #36345 [OptionsResolver] Improve the deprecation feature by handling package and version (atailouloute)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[OptionsResolver] Improve the deprecation feature by handling package and version

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      |no
| New feature?  | yes
| Deprecations? | yes
| Tickets       |
| License       | MIT
| Doc PR        | TODO

Commits
-------

c3f5e2c1c8 [OptionsResolver] Improve the deprecation feature by handling package + version
2020-04-08 08:08:27 +02:00
Dries Vints
633ff5b214 Fix constant accessor 2020-04-08 07:57:21 +02:00
Michel Bardelmeijer
b98abde65a Supress error from fread when reading a unix pipe 2020-04-07 21:12:26 +02:00
Grégoire Pineau
0506f8ce2b Merge remote-tracking branch 'origin/3.4' into 4.4
* origin/3.4:
  [Workflow] Use a strict comparison when retrieving raw markin in MarkingStore
2020-04-07 15:32:43 +02:00
Antonio Pauletich
a07578dba3 [HttpClient] Fix scoped client without query option configuration 2020-04-07 14:53:04 +02:00
Grégoire Pineau
a00a2f1115 [Workflow] Use a strict comparison when retrieving raw marking in MarkingStore 2020-04-07 11:51:42 +02:00
Grégoire Pineau
aebe8ae163 [Workflow] Use a strict comparison when retrieving raw markin in MarkingStore 2020-04-07 11:39:41 +02:00
Grégoire Pineau
903a57dbd9 [VarCloner] Cut Logger in dump 2020-04-07 00:58:33 +02:00
Ahmed TAILOULOUTE
c3f5e2c1c8 [OptionsResolver] Improve the deprecation feature by handling package + version 2020-04-06 19:48:46 +02:00
Thomas Calvet
d4eb4a4bd7 [ErrorHandler] Remove trigger_deprecation frame from trace (add tests) 2020-04-06 12:56:40 +02:00
Nicolas Grekas
c293aee9ab [ErrorHandler] Remove trigger_deprecation frame from trace 2020-04-06 12:56:40 +02:00
Nicolas Grekas
bfe6b6fb41 Merge branch '5.0'
* 5.0:
  [PropertyAccess] fix tests
  [WebProfilerBundle] fix test
  remove assertions that can never be reached
  [PropertyAccess] Improve message of unitialized property in php 7.4
  [HttpFoundation] Fixed session migration with custom cookie lifetime
  [HttpKernel][FrameworkBundle] fix compat with Debug component
  [Serializer] Remove unused variable
  Allow URL-encoded special characters in basic auth part of URLs
  [Serializer] Fix unitialized properties (from PHP 7.4.2) when serializing context for the cache key
  [Validator] Add missing Ukrainian and Russian translations
  Track session usage when setting the token
  [4.4][MonologBridge] Fix $level type
  [5.0][MonologBridge] Fix $level type
  No need to reconnect the bags to the session
  Support for Content Security Policy style-src-elem and script-src-elem in WebProfiler
  [PropertyInfo][ReflectionExtractor] Check the array mutator prefixes last when the property is singular
  [Security][Http][SwitchUserListener] Ignore all non existent username protection errors
  Add installation and minimal example to README
2020-04-06 12:46:53 +02:00
Nicolas Grekas
cc24b55e04 Merge branch '4.4' into 5.0
* 4.4:
  [PropertyAccess] fix tests
  [WebProfilerBundle] fix test
  remove assertions that can never be reached
  [PropertyAccess] Improve message of unitialized property in php 7.4
  [HttpFoundation] Fixed session migration with custom cookie lifetime
  [HttpKernel][FrameworkBundle] fix compat with Debug component
  [Serializer] Remove unused variable
  Allow URL-encoded special characters in basic auth part of URLs
  [Serializer] Fix unitialized properties (from PHP 7.4.2) when serializing context for the cache key
  [Validator] Add missing Ukrainian and Russian translations
  Track session usage when setting the token
  [4.4][MonologBridge] Fix $level type
  No need to reconnect the bags to the session
  Support for Content Security Policy style-src-elem and script-src-elem in WebProfiler
  [PropertyInfo][ReflectionExtractor] Check the array mutator prefixes last when the property is singular
  [Security][Http][SwitchUserListener] Ignore all non existent username protection errors
  Add installation and minimal example to README
2020-04-06 12:40:56 +02:00
Nicolas Grekas
f72dd9cafa Merge branch '3.4' into 4.4
* 3.4:
  [PropertyAccess] fix tests
  [WebProfilerBundle] fix test
  remove assertions that can never be reached
  [PropertyAccess] Improve message of unitialized property in php 7.4
  [HttpFoundation] Fixed session migration with custom cookie lifetime
  [Serializer] Remove unused variable
  Allow URL-encoded special characters in basic auth part of URLs
  [Serializer] Fix unitialized properties (from PHP 7.4.2) when serializing context for the cache key
  [Validator] Add missing Ukrainian and Russian translations
  No need to reconnect the bags to the session
  Support for Content Security Policy style-src-elem and script-src-elem in WebProfiler
  [PropertyInfo][ReflectionExtractor] Check the array mutator prefixes last when the property is singular
2020-04-06 12:16:26 +02:00
Nicolas Grekas
547c99eae5 bug #36305 [PropertyInfo][ReflectionExtractor] Check the array mutator prefixes last when the property is singular (fancyweb)
This PR was merged into the 3.4 branch.

Discussion
----------

[PropertyInfo][ReflectionExtractor] Check the array mutator prefixes last when the property is singular

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | https://github.com/symfony/symfony/issues/36079
| License       | MIT
| Doc PR        | -

Check the related tickets that have a very descriptive example.

If the property is singular, we should prioritize non array mutator prefixes and do the opposite for plural property. It relies on some guessing but it actually fixes real world scenarios.

Commits
-------

b4df2b9dff [PropertyInfo][ReflectionExtractor] Check the array mutator prefixes last when the property is singular
2020-04-06 12:11:23 +02:00
Nicolas Grekas
995ef18f95 [PropertyAccess] fix tests 2020-04-06 12:01:14 +02:00
Nicolas Grekas
a20110c6b6 [WebProfilerBundle] fix test 2020-04-06 11:49:16 +02:00
Nicolas Grekas
2b6f1e9a93 Revert to container.dumper.inline_factories=false by default 2020-04-06 10:46:45 +02:00
Christian Flothmann
112b5de3cf remove assertions that can never be reached 2020-04-06 10:30:32 +02:00
Fabien Potencier
efc93a7e17 minor #36311 [PropertyAccess] Improve message of unitialized property in php 7.4 (lmasforne)
This PR was squashed before being merged into the 3.4 branch.

Discussion
----------

[PropertyAccess] Improve message of unitialized property in php 7.4

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36277
| License       | MIT

Improve message of unitialized property in php 7.4 ;
Before
You should either initialize it or make it nullable using "?string" instead.
After
You should either initialize it or make it nullable using "?string $var = null" instead.

Commits
-------

3c8bf2d29d [PropertyAccess] Improve message of unitialized property in php 7.4
2020-04-06 10:09:12 +02:00
Laurent Masforné
3c8bf2d29d [PropertyAccess] Improve message of unitialized property in php 7.4 2020-04-06 10:09:05 +02:00
Fabien Potencier
402909ff7b feature #35748 [HttpFoundation] Add support for all core response http control directives (azjezz)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[HttpFoundation] Add support for all core response http control directives

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #35720
| License       | MIT
| Doc PR        | N/A

Add support for all core cache-control directives

see : https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control

Commits
-------

011cd38974 [HttpFoundation] Add support for all core http control directives
2020-04-05 12:28:07 +02:00
Nicolas Grekas
5517fbcdcb feature #36270 [FrameworkBundle] Add file links to named controllers in debug:router (chalasr)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[FrameworkBundle] Add file links to named controllers in debug:router

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Before
![Screenshot 2020-03-31 at 21 52 11](https://user-images.githubusercontent.com/7502063/78069168-ee189380-7399-11ea-90ef-dedce6f96131.png)

After
![Screenshot 2020-03-31 at 21 51 11](https://user-images.githubusercontent.com/7502063/78069198-fb358280-7399-11ea-8ab8-eaa24f76bbac.png)

Commits
-------

932ae91c74 [FrameworkBundle] Add file links to named controllers in debug:router
2020-04-05 12:04:27 +02:00
Nicolas Grekas
0647508b11 feature #35762 [Asset] Allows to download asset manifest over HTTP (GromNaN)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Asset] Allows to download asset manifest over HTTP

| Q             | A
| ------------- | ---
| Branch?       | master <!-- see below -->
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #35761 Fix #33001
| License       | MIT
| Doc PR        | symfony/symfony-docs#13255

```yaml
framework:
    assets:
        json_manifest_path: 'https://cdn.example.com/manifest.json'
```

Commits
-------

4ba12a80e5 [Asset] Allows to download json manifest from a remote url
2020-04-05 12:00:14 +02:00
Nicolas Grekas
78770e7f7c bug #35656 [HttpFoundation] Fixed session migration with custom cookie lifetime (Guite)
This PR was squashed before being merged into the 3.4 branch.

Discussion
----------

[HttpFoundation] Fixed session migration with custom cookie lifetime

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #28577
| License       | MIT
| Doc PR        |

This PR adds the fix proposed in https://github.com/symfony/symfony/issues/28577#issuecomment-578052397

Commits
-------

3e824de385 [HttpFoundation] Fixed session migration with custom cookie lifetime
2020-04-05 11:49:58 +02:00
Guite
3e824de385 [HttpFoundation] Fixed session migration with custom cookie lifetime 2020-04-05 11:49:47 +02:00
Nicolas Grekas
fb04711b40 [DI] add tags container.preload/.no_preload to declare extra classes to preload/services to not preload 2020-04-05 09:04:12 +02:00
Fabien Potencier
8a2a69f332 feature #36209 [HttpKernel] allow cache warmers to add to the list of preloaded classes and files (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[HttpKernel] allow cache warmers to add to the list of preloaded classes and files

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | yes
| Tickets       | -
| License       | MIT
| Doc PR        | -

This PR makes cache warmers responsible for returning a list of classes or files to preload. It does so by adding the following to `WarmableInterface::warmUp()`:
`@return string[] A list of classes or files to preload on PHP 7.4+`

Of course, this return value is properly implemented so that we can see what this provides in practice. Here are the benchmarks on a simple Hello World rendered with Twig:
- without preloading: 360 req/s
- with preloading in master: 560 req/s (+55%)
- with preloading and this PR: 630 req/s (+75%)

Commits
-------

8ab75d99d4 [HttpKernel] allow cache warmers to add to the list of preloaded classes and files
2020-04-05 09:00:42 +02:00
Fabien Potencier
ddfb3089c9 Fixed CS 2020-04-05 08:49:38 +02:00
Fabien Potencier
6f57fcf9b7 minor #35933 [Mime] strengthen is_resource() checks (nicolas-grekas)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Mime] strengthen is_resource() checks

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Improves seekable checks by using
`stream_get_meta_data($h)['seekable'] && 0 === fseek($h, 0, SEEK_CUR)`
instead of just
`stream_get_meta_data($h)['seekable']`

which is better when using userland stream wrappers.

Commits
-------

be9c675710 [Mime] strengthen is_resource() checks
2020-04-05 08:41:07 +02:00
Robin Chalas
a165ecca73 fix cs 2020-04-05 01:14:36 +02:00
Daniel STANCU
e242cc35e9 Git rebase form master 2020-04-04 23:55:02 +03:00
Wouter de Jong
253cc4ec41 Fixed build after LogoutListener changes 2020-04-04 20:35:10 +02:00
Nicolas Grekas
d5c54c2fa7 [HttpKernel][FrameworkBundle] fix compat with Debug component 2020-04-04 13:58:35 +02:00
Fabien Potencier
1fc7b86f07 feature #36243 [Security] Refactor logout listener to dispatch an event instead (wouterj)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Security] Refactor logout listener to dispatch an event instead

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes (sort of...)
| New feature?  | yes
| Deprecations? | yes
| Tickets       | Fix #25212, Fix #22473
| License       | MIT
| Doc PR        | tbd

The current `LogoutListener` has some extension points, but they are not really DX-friendly (ref #25212). It requires hacking a `addMethodCall('addHandler')` in the container builder to register a custom logout handler.
Also, it is impossible to overwrite the default logout functionality from a bundle (ref #22473).

This PR introduces a `LogoutEvent` that replaces both the `LogoutSuccessHandlerInterface` and `LogoutHandlerInterface`. This provides a DX-friendly extension point and also cleans up the authentication factories (no more `addMethodCall()`'s).

In order to allow different logout handlers for different firewalls, I created a specific event dispatcher for each firewall (as also shortly discussed in #33558). The `dispatcher` tag attribute allows you to specify which dispatcher it should be registered to (defaulting to the global dispatcher). The `EventBubblingLogoutListener` also dispatches logout events on the global dispatcher, to be used for listeners that should run on all firewalls.

_@weaverryan and I discussed this feature while working on #33558, but figured it was unrelated and could be done while preservering BC. So that's why a separate PR is created._

Commits
-------

a9f096eb1f [Security] Refactor logout listener to dispatch an event instead
2020-04-04 13:02:32 +02:00
Wouter de Jong
a9f096eb1f [Security] Refactor logout listener to dispatch an event instead 2020-04-04 13:02:21 +02:00
Nicolas Grekas
8ab75d99d4 [HttpKernel] allow cache warmers to add to the list of preloaded classes and files 2020-04-04 11:52:45 +02:00
Fabien Potencier
d33392f136 minor #36246 [Routing] Add installation and minimal example to README (wouterj)
This PR was merged into the 4.4 branch.

Discussion
----------

[Routing] Add installation and minimal example to README

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | n/a
| License       | MIT
| Doc PR        | symfony/symfony-docs#13431

Similair to what I did in #35552, this PR updates the README of the Routing component to include a minimal example and installation command.

Commits
-------

be6612060c Add installation and minimal example to README
2020-04-04 11:11:00 +02:00
Fabien Potencier
9b41a3233d minor #36341 [Serializer] Remove unused variable (dunglas)
This PR was merged into the 3.4 branch.

Discussion
----------

[Serializer] Remove unused variable

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | no
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | n/a
| License       | MIT
| Doc PR        | n/a

Commits
-------

3e943435c9 [Serializer] Remove unused variable
2020-04-04 11:08:51 +02:00
Fabien Potencier
004f1f3823 bug #36315 [WebProfilerBundle] Support for Content Security Policy style-src-elem and script-src-elem in WebProfiler (ampaze)
This PR was merged into the 3.4 branch.

Discussion
----------

[WebProfilerBundle] Support for Content Security Policy style-src-elem and script-src-elem in WebProfiler

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| License       | MIT

If a `style-src-elem` or `script-src-elem` Content Security Policy exist, the WebProfiler Styles or Scripts will be rejected as the nonce is missing.

Commits
-------

7f33f1fa3a Support for Content Security Policy style-src-elem and script-src-elem in WebProfiler
2020-04-04 10:50:20 +02:00
Kévin Dunglas
3e943435c9
[Serializer] Remove unused variable 2020-04-04 09:51:57 +02:00
Fabien Potencier
fdd8ac5f25 feature #36185 [Messenger] Add a \Throwable argument in RetryStrategyInterface methods (Benjamin Dos Santos)
This PR was squashed before being merged into the 5.1-dev branch.

Discussion
----------

[Messenger] Add a \Throwable argument in RetryStrategyInterface methods

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #36182
| License       | MIT

This allows to define new retry strategies based on the exceptions thrown during the last handling.

Commits
-------

5fa9d68e8b [Messenger] Add a \Throwable argument in RetryStrategyInterface methods
2020-04-04 09:33:17 +02:00
Benjamin Dos Santos
5fa9d68e8b [Messenger] Add a \Throwable argument in RetryStrategyInterface methods 2020-04-04 09:33:12 +02:00
Fabien Potencier
21a6ab0420 minor #36274 [HttpFoundation] No need to reconnect the bags to the session after session_regenerate_id (rosier)
This PR was merged into the 3.4 branch.

Discussion
----------

[HttpFoundation] No need to reconnect the bags to the session after session_regenerate_id

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

Bug https://bugs.php.net/70013 was fixed before the release of PHP v7.0

https://3v4l.org/A8YmY

Related to https://github.com/symfony/symfony/pull/15243

Commits
-------

923c24f438 No need to reconnect the bags to the session
2020-04-04 09:29:17 +02:00
Christian Weiske
8a56c506e3 Allow URL-encoded special characters in basic auth part of URLs
Resolves: https://github.com/symfony/symfony/issues/36285
2020-04-04 09:24:28 +02:00
Maxime Helias
e861500ce8 [Form] action allows only strings 2020-04-04 09:22:59 +02:00
Fabien Potencier
38cbcc6d4f bug #36335 [Security] Track session usage whenever a new token is set (wouterj)
This PR was merged into the 4.4 branch.

Discussion
----------

[Security] Track session usage whenever a new token is set

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #36208
| License       | MIT
| Doc PR        | -

When using `anonymous: lazy`, the programatic login using the guard handler is broken. As the `setToken()` does not track usage, the index remains equal.

I tried fixing this more properly in e.g. the `SessionStrategy::onAuthentication` class, but I couldn't get it working (as `$request->hasPreviousSession()` returns false, the session strategy isn't called). `setToken()` can also not be made usage tracking afaics, because it would directly break (`setToken(null)` is called in `ContextListener`).

The current fix does however look really ugly, but I can't find anything better with my minor knowledge of this session usage tracking feature. I'm open for all ideas :)

Commits
-------

8d96dbd08b Track session usage when setting the token
2020-04-04 09:19:12 +02:00
Fabien Potencier
6dbf9eb663 bug #36332 [Serializer] Fix unitialized properties (from PHP 7.4.2) when serializing context for the cache key (alanpoulain)
This PR was squashed before being merged into the 3.4 branch.

Discussion
----------

[Serializer] Fix unitialized properties (from PHP 7.4.2) when serializing context for the cache key

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix https://github.com/symfony/symfony/issues/35574 https://github.com/doctrine/orm/issues/8030
| License       | MIT
| Doc PR        | N/A

This bug only happens on the following conditions:
- A Doctrine entity (`Book`) having a relation with another entity (`Author`) is used;
- The `Author` entity uses typed properties (PHP 7.4) not initialized;
- The `Serializer` is used with the `Book` in the `OBJECT_TO_POPULATE` key in the context.

For instance:
```php
<?php

declare(strict_types=1);

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Entity */
class Book
{
    /**
     * @ORM\ManyToOne(targetEntity="Author")
     */
	public Author $author;

	public ?string $isbn;
}
```

```php
<?php

declare(strict_types=1);

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Entity */
class Author
{
    public ?string $name;
}
```

Or even:

```php
<?php

declare(strict_types=1);

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/** @ORM\Entity */
class Author
{
    private string $name;

    public function __construct()
    {
        $this->name = 'Leo';
    }
}
```

If the following is done (it's the case for instance in API Platform when a `PUT` is made):
```php
$serializer->deserialize('{"isbn":"2038717141"}', Book::class, 'json', ['object_to_populate' => $book]);
```

Then there will be the following error:
> Fatal error: Typed property Proxies\__CG__\App\Entity\Author::$ must not be accessed before initialization (in __sleep)

It's because of these lines in the `getCacheKey` method of the `AbstractObjectNormalizer`:
5da141b8d0/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php (L405-L409)

Since the lazy proxyfied relation has a `__sleep` with unitialized properties, the `serialize` method will throw (since https://bugs.php.net/bug.php?id=79002: 846b647953).

I propose to fix this issue by unsetting the `OBJECT_TO_POPULATE` key in the context because I don't think it's useful for determining the attributes of the object.

For the next versions of Symfony, the fix should probably be elsewhere, in the default context.
For instance in Symfony 4.4, instead of:
15edfd39d4/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php (L118)
It should be:
```php
$this->defaultContext[self::EXCLUDE_FROM_CACHE_KEY] = [self::CIRCULAR_REFERENCE_LIMIT_COUNTERS, self::OBJECT_TO_POPULATE];
```
But I'm not sure how it should be merged (another PR maybe?).

Commits
-------

1fafff7c10 [Serializer] Fix unitialized properties (from PHP 7.4.2) when serializing context for the cache key
2020-04-04 09:17:03 +02:00
Alan Poulain
1fafff7c10 [Serializer] Fix unitialized properties (from PHP 7.4.2) when serializing context for the cache key 2020-04-04 09:16:57 +02:00
Fabien Potencier
60a35f8a76 minor #36251 [Validator] Add missing Ukrainian and Russian translations (slunak)
This PR was squashed before being merged into the 3.4 branch.

Discussion
----------

[Validator] Add missing Ukrainian and Russian translations

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | none
| License       | MIT

Commits
-------

d43ef4ec92 [Validator] Add missing Ukrainian and Russian translations
2020-04-04 09:09:17 +02:00
Serhiy Lunak
d43ef4ec92 [Validator] Add missing Ukrainian and Russian translations 2020-04-04 09:09:10 +02:00
Wouter de Jong
8d96dbd08b Track session usage when setting the token 2020-04-03 19:46:33 +02:00
Thomas Calvet
19a8905d32 [4.4][MonologBridge] Fix $level type 2020-04-03 17:02:39 +02:00
Thomas Calvet
d9c06814f9 [5.0][MonologBridge] Fix $level type 2020-04-03 17:02:15 +02:00
Jordi Boggiano
c2a1781eb4
Fix $level type 2020-04-03 15:33:33 +02:00
rosier
923c24f438 No need to reconnect the bags to the session
Bug https://bugs.php.net/70013 was fixed before the release of PHP v7.0
2020-04-02 20:46:08 +02:00
ampaze
7f33f1fa3a
Support for Content Security Policy style-src-elem and script-src-elem in WebProfiler
If a `style-src-elem` or `script-src-elem` Content Security Policy exist, the WebProfiler Styles or Scripts will be rejected as the nonce is missing.
2020-04-02 13:53:10 +02:00
Thomas Calvet
b4df2b9dff [PropertyInfo][ReflectionExtractor] Check the array mutator prefixes last when the property is singular 2020-04-01 19:12:29 +02:00
Robin Chalas
932ae91c74 [FrameworkBundle] Add file links to named controllers in debug:router 2020-04-01 17:47:21 +02:00
azjezz
011cd38974 [HttpFoundation] Add support for all core http control directives 2020-04-01 11:36:04 +01:00
Thomas Calvet
42311d5c29 [Security][Http][SwitchUserListener] Ignore all non existent username protection errors 2020-04-01 11:15:47 +02:00
Nicolas Grekas
0bec08f0d8 feature #35871 [Config] Improve the deprecation features by handling package and version (atailouloute)
This PR was merged into the 5.1-dev branch.

Discussion
----------

[Config] Improve the deprecation features by handling package and version

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | yes
| Tickets       | https://github.com/orgs/symfony/projects/1#card-32681032
| License       | MIT
| Doc PR        | TODO

Commits
-------

f4de76dba0 [Config] Improve the deprecation features by handling package and version
2020-04-01 10:41:36 +02:00