This package provides services for the lookup and manipulation of login and
wiki names of users, and their authentication.
It is a Facade that presents a common interface to the User Mapping
and Password modules. The rest of the core should only use the methods
of this package, and should never call the mapping or password managers
directly.
TWiki uses the concept of a login name which is used to authenticate a
user. A login name maps to a wiki name that is used to identify the user
for display. Each login name is unique to a single user, though several
login names may map to the same wiki name.
Using this module (and the associated plug-in user mapper) TWiki supports
the concept of groups. Groups are sets of login names that are treated
equally for the purposes of access control. Group names do not have to be
wiki names, though it is helpful for display if they are.
Internally in the code TWiki uses something referred to as a _canonical user
id_ or just user id. The user id is also used externally to uniquely identify
the user when (for example) recording topic histories. The user id is usually
just the login name, but it doesn't need to be. It just has to be a unique
7-bit alphanumeric and underscore string that can be mapped to/from login
and wiki names by the user mapper.
The canonical user id should never be seen by a user. On the other hand,
core code should never use anything but a canonical user id to refer
to a user.
Terminology
A login name is the name used to log in to TWiki. Each login name is assumed to be unique to a human. The Password module is responsible for authenticating and manipulating login names.
A canonical user id is an internal TWiki representation of a user. Each canonical user id maps 1:1 to a login name.
A wikiname is how a user is displayed. Many user ids may map to a single wikiname. The user mapping module is responsible for mapping the user id to a wikiname.
A group id represents a group of users and other groups. The user mapping module is responsible for mapping from a group id to a list of canonical user ids for the users in that group.
An email is an email address asscoiated with a login name. A single login name may have many emails.
NOTE:
wherever the code references $user, its a canonical_id
wherever the code references $group, its a group_name
$login - user login name. If undef, $wikiname will be used as the login name.
$wikiname - user wikiname. If undef, the user mapper will be asked to provide it.
$password - password. If undef, a password will be generated.
Add a new TWiki user identity, returning the canonical user id for the new
user. Used ONLY for user registration.
The user is added to the password system (if there is one, and if it accepts
changes). If the user already exists in the password system, then the password
is checked and an exception thrown if it doesn't match. If there is no
existing user, and no password is given, a random password is generated.
$login can be undef; $wikiname must always have a value.
The return value is the canonical user id that is used
by TWiki to identify the user.
This function ensures that any cUID's are able to be used for rcs, and other internals
not capable of coping with user identifications that contain more than 7 bit ascii.
repeated calls must result in the same result (sorry, can't spell the word for it)so the '_' must not be re-encoded
Please, call this function in any custom Usermapper to simplifyyour mapping code.
Works out the unique TWiki identifier for the user who logs in with the
given login. The canonical user ID is an alphanumeric string that is unique
to the login name, and can be mapped back to a login name and the
corresponding wiki name using the methods of this class.
returns undef if the user does not exist.
Return a list of canonical user names for the users that have this wikiname.
Since a single wikiname might be used by multiple login ids, we need a list.
If $wn is the name of a group, the group will not be expanded.
If this is a user, return their email addresses. If it is a group,
return the addresses of everyone in the group.
The password manager and user mapping manager are both consulted for emails
for each user (where they are actually found is implementation defined).
Duplicates are removed from the list.
Return true if $user is in a list of user wikinames and group ids.
$list is a comma-separated wikiname and group list. The list may contain the
conventional web specifiers (which are ignored).
Get the wikiname to display for a canonical user identifier.
can return undef if the user is not in the mapping system
(or the special case from initialiseUser)
Return a iterator of user ids that are members of this group.
Should only be called on groups.
Note that groups may be defined recursively, so a group may contain other
groups. This method should only return users i.e. all contained groups
should be fully expanded.
Establish if a user refers to a group or not.
The default implementation is to check if the wikiname of the user ends with
'Group'. Subclasses may override this behaviour to provide alternative
interpretations. The $TWiki::cfg{SuperAdminGroup} is recognized as a
group no matter what it's name is.
QUESTION: is the $user parameter here a string, or a canonical_id??
Finds if the password is valid for the given user.
Returns 1 on success, undef on failure.
TODO: add special check for BaseMapping admin user's login, and if its there (and we're in sudo_context?) use that..
If the $oldPassU matches matches the user'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.
returns a string indicating the error that happened in the password handlers
TODO: these delayed error's should be replaced with Exceptions.
returns undef if no error
Delete the users entry. Removes the user from the password
manager and user mapping manager. Does not remove their personal
topics, which may still be linked.
used for debugging to ensure we are actually passing a canonical_id
These ASSERTS have been disabled, as they have been made dangerous and misleading
due to the legacy cUID code
used for debugging to ensure we are actually passing a user login
These ASSERTS have been disabled, as they have been made dangerous and misleading
due to the legacy cUID code
used for debugging to ensure we are actually passing a user display_name (commonly a WikiWord Name)
These ASSERTS have been disabled, as they have been made dangerous and misleading
due to the legacy cUID code