summaryrefslogtreecommitdiffstats
path: root/Core
diff options
context:
space:
mode:
authorFabien Potencier <fabien.potencier@gmail.com>2016-09-13 17:06:01 -0700
committerFabien Potencier <fabien.potencier@gmail.com>2016-09-13 17:06:01 -0700
commit178ee8b06c268dd6e803d0ef05267ced2bab582d (patch)
tree7acf00450764cedfce35cd1fcfae2b39cedca47d /Core
parent52847d3a196e38c482e77edece9b6e317b0023a4 (diff)
parenteba38024cb3320cca78f91a75402b42c01dae96c (diff)
downloadsymfony-security-178ee8b06c268dd6e803d0ef05267ced2bab582d.zip
symfony-security-178ee8b06c268dd6e803d0ef05267ced2bab582d.tar.gz
symfony-security-178ee8b06c268dd6e803d0ef05267ced2bab582d.tar.bz2
feature #19843 [Security] Allow run-time configuration of hash algo (nicolas-grekas)
This PR was merged into the 3.2-dev branch. Discussion ---------- [Security] Allow run-time configuration of hash algo | Q | A | ------------- | --- | Branch? | master | New feature? | yes | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | - Required if we want run-time config with env vars. See #19681 Commits ------- 7903a46 [Security] Allow run-time configuration of hash algo
Diffstat (limited to 'Core')
-rw-r--r--Core/Encoder/EncoderFactory.php40
1 files changed, 40 insertions, 0 deletions
diff --git a/Core/Encoder/EncoderFactory.php b/Core/Encoder/EncoderFactory.php
index 0568d41..7794b2f 100644
--- a/Core/Encoder/EncoderFactory.php
+++ b/Core/Encoder/EncoderFactory.php
@@ -69,6 +69,9 @@ class EncoderFactory implements EncoderFactoryInterface
*/
private function createEncoder(array $config)
{
+ if (isset($config['algorithm'])) {
+ $config = $this->getEncoderConfigFromAlgorithm($config);
+ }
if (!isset($config['class'])) {
throw new \InvalidArgumentException(sprintf('"class" must be set in %s.', json_encode($config)));
}
@@ -80,4 +83,41 @@ class EncoderFactory implements EncoderFactoryInterface
return $reflection->newInstanceArgs($config['arguments']);
}
+
+ private function getEncoderConfigFromAlgorithm($config)
+ {
+ switch ($config['algorithm']) {
+ case 'plaintext':
+ return array(
+ 'class' => PlaintextPasswordEncoder::class,
+ 'arguments' => array($config['ignore_case']),
+ );
+
+ case 'pbkdf2':
+ return array(
+ 'class' => Pbkdf2PasswordEncoder::class,
+ 'arguments' => array(
+ $config['hash_algorithm'],
+ $config['encode_as_base64'],
+ $config['iterations'],
+ $config['key_length'],
+ ),
+ );
+
+ case 'bcrypt':
+ return array(
+ 'class' => BCryptPasswordEncoder::class,
+ 'arguments' => array($config['cost']),
+ );
+ }
+
+ return array(
+ 'class' => MessageDigestPasswordEncoder::class,
+ 'arguments' => array(
+ $config['algorithm'],
+ $config['encode_as_base64'],
+ $config['iterations'],
+ ),
+ );
+ }
}