---+ Package =TWiki::Users::Password=

Base class of all password handlers. Default behaviour is no passwords,
so anyone can be anyone they like.

The methods of this class should be overridded by subclasses that want
to implement other password handling methods.


%TOC%

---++ ClassMethod *new* <tt>($session) -> $object</tt>

Constructs a new password handler of this type, referring to $session
for any required TWiki services.



---++ ObjectMethod *fetchPass* <tt>($login) -> $passwordE</tt>
Implements TWiki::Password

Returns encrypted password if succeeds.  Returns 0 if login is invalid.
Returns undef otherwise.



---++ ObjectMethod *checkPassword* <tt>($user,$passwordU) -> $boolean</tt>

Finds if the password is valid for the given login.

Returns 1 on success, undef on failure.



---++ ObjectMethod *deleteUser* <tt>($user) -> $boolean</tt>

Delete users entry.

Returns 1 on success, undef on failure.



---++ ObjectMethod *passwd* <tt>($user,$newPassU,$oldPassU) -> $boolean</tt>

If the $oldPassU is undef, it will try to add the user, failing
if they are already there.

If the $oldPassU matches matches the login's password, then it will
replace it with $newPassU.

If $oldPassU is not correct and not 1, will return 0.

If $oldPassU is 1, will force the change irrespective of
the existing password, adding the user if necessary.

Otherwise returns 1 on success, undef on failure.



---++ encrypt( $user, $passwordU, $fresh ) -> $passwordE

Will return an encrypted password. Repeated calls
to encrypt with the same user/passU will return the same passE.

However if the passU is changed, and subsequently changed _back_
to the old user/passU pair, then the old passE is no longer valid.

If $fresh is true, then a new password not based on any pre-existing
salt will be used. Set this if you are generating a completely
new password.


---++ ObjectMethod *error* <tt>() -> $string</tt>

Return any error raised by the last method call, or undef if the last
method call succeeded.



---++ ObjectMethod *getEmails* <tt>($user) -> @emails</tt>

Fetch the email address(es) for the given username. Default behaviour
is to look up the users' personal topic.



---++ ObjectMethod *setEmails* <tt>($user,@emails)</tt>

Set the email address(es) for the given username in the user topic.


