MediaWiki  master
ParameterizedPassword.php
Go to the documentation of this file.
1 <?php
38 abstract class ParameterizedPassword extends Password {
43  protected $params = [];
44 
50  protected $args = [];
51 
52  protected function parseHash( $hash ) {
53  parent::parseHash( $hash );
54 
55  if ( $hash === null ) {
56  $this->params = $this->getDefaultParams();
57  return;
58  }
59 
60  $parts = explode( $this->getDelimiter(), $hash );
61  $paramKeys = array_keys( $this->getDefaultParams() );
62 
63  if ( count( $parts ) < count( $paramKeys ) ) {
64  throw new PasswordError( 'Hash is missing required parameters.' );
65  }
66 
67  if ( $paramKeys ) {
68  $this->args = array_splice( $parts, count( $paramKeys ) );
69  $this->params = array_combine( $paramKeys, $parts );
70  } else {
71  $this->args = $parts;
72  }
73 
74  if ( $this->args ) {
75  $this->hash = array_pop( $this->args );
76  } else {
77  $this->hash = null;
78  }
79  }
80 
81  public function needsUpdate() {
82  return $this->params !== $this->getDefaultParams();
83  }
84 
85  public function toString() {
86  $str = ':' . $this->config['type'] . ':';
87 
88  if ( count( $this->params ) || count( $this->args ) ) {
89  $str .= implode( $this->getDelimiter(), array_merge( $this->params, $this->args ) );
90  $str .= $this->getDelimiter();
91  }
92 
93  $res = $str . $this->hash;
94  $this->assertIsSafeSize( $res );
95  return $res;
96  }
97 
103  abstract protected function getDelimiter();
104 
120  abstract protected function getDefaultParams();
121 }
array $params
Named parameters that have default values for this password type.
assertIsSafeSize( $hash)
Assert that hash will fit in a tinyblob field.
Definition: Password.php:195
Helper class for password hash types that have a delimited set of parameters inside of the hash...
getDelimiter()
Returns the delimiter for the parameters inside the hash.
string $hash
String representation of the hash without the type.
Definition: Password.php:71
Show an error when any operation involving passwords fails to run.
getDefaultParams()
Return an ordered array of default parameters for this password hash.
array $args
Extra arguments that were found in the hash.