summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Grekas <nicolas.grekas@gmail.com>2016-09-04 10:34:53 +0200
committerNicolas Grekas <nicolas.grekas@gmail.com>2016-09-04 11:38:12 +0200
commiteba38024cb3320cca78f91a75402b42c01dae96c (patch)
tree097831471bce96493d0359228c0e468783855d3a
parentf57cf66f5b86da93a8b37e74bc431554758f4c31 (diff)
downloadsymfony-security-eba38024cb3320cca78f91a75402b42c01dae96c.zip
symfony-security-eba38024cb3320cca78f91a75402b42c01dae96c.tar.gz
symfony-security-eba38024cb3320cca78f91a75402b42c01dae96c.tar.bz2
[Security] Allow run-time configuration of hash algo
-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'],
+ ),
+ );
+ }
}