diff options
author | Nicolas Grekas <nicolas.grekas@gmail.com> | 2016-09-04 10:34:53 +0200 |
---|---|---|
committer | Nicolas Grekas <nicolas.grekas@gmail.com> | 2016-09-04 11:38:12 +0200 |
commit | eba38024cb3320cca78f91a75402b42c01dae96c (patch) | |
tree | 097831471bce96493d0359228c0e468783855d3a /Core/Encoder | |
parent | f57cf66f5b86da93a8b37e74bc431554758f4c31 (diff) | |
download | symfony-security-eba38024cb3320cca78f91a75402b42c01dae96c.zip symfony-security-eba38024cb3320cca78f91a75402b42c01dae96c.tar.gz symfony-security-eba38024cb3320cca78f91a75402b42c01dae96c.tar.bz2 |
[Security] Allow run-time configuration of hash algo
Diffstat (limited to 'Core/Encoder')
-rw-r--r-- | Core/Encoder/EncoderFactory.php | 40 |
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'], + ), + ); + } } |