Difference: TWikiUsersDotPm (3 vs. 4)

Revision 42008-01-22 - Main.TWikiContributor

Line: 1 to 1
 

Package TWiki::Users

Added:
>
>
This package provides services for the lookup and manipulation of login and wiki names of users, and their authentication.
 
Changed:
<
<
Singleton object that handles mapping of users to wikinames and vice versa, and user authentication checking.
>
>
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
 

Changed:
<
<

ClassMethod new ($session,$impl)

>
>

ClassMethod new ($session)

Construct the user management object that is the facade to the BaseUserMapping and the user mapping chosen in the configuration.
 
Deleted:
<
<
Construct the user management object
 
Added:
>
>

ObjectMethod finish ()

Break circular references.
 
Deleted:
<
<

ObjectMethod finish

 
Deleted:
<
<
Complete processing after the client's HTTP request has been responded to.
  1. breaking circular references to allow garbage collection in persistent environments
 
Added:
>
>

ObjectMethod loginTemplateName () -> templateFile

 
Added:
>
>
allows UserMappings to come with customised login screens - that should preffereably only over-ride the UI function
 
Deleted:
<
<

ObjectMethod findUser ($name[,$wikiname][,$nocreate]) -> $userObject

 
Deleted:
<
<
  • $name - login name or wiki name
  • $wikiname - optional, wikiname for created user
  • $nocreate - optional, disable creation of user object for user not found
 
Changed:
<
<
Find the user object corresponding to $name, which may be either a login name or a wiki name. If $name is found (either in the list of login names or the list of wiki names) the corresponding user object is returned. In this case $wikiname is ignored.
>
>

ObjectMethod supportsRegistration () -> boolean

 
Changed:
<
<
If they are not found, and $nocreate is true, then return undef.
>
>
#return 1 if the main UserMapper supports registration (ie can create new users)
 
Deleted:
<
<
If $nocreate is false, then a user object is returned even if the user is not known.
 
Deleted:
<
<
If $nocreate is false, and no $wikiname is given, then the $name is used for both login name and wiki name.
 
Changed:
<
<
If nocreate is off, then a default user will be created with their wikiname set the same as their login name. This user/wiki name pair can be overridden by a later createUser call when the correct wikiname is known, if necessary.
>
>

ObjectMethod initialiseUser ($login) -> cUID

randomPassword()

Static function that returns a random password

ObjectMethod addUser ($login,$wikiname,$password,$emails) -> $cUID

  • $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.

StaticMethod forceCUID ($cUID) -> $cUID

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.

ObjectMethod getCanonicalUserID ($login) -> $user

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.

ObjectMethod findUserByWikiName ($wn) -> \@users

  • $wn - wikiname to look up
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.

 

ObjectMethod findUserByEmail ($email) -> \@users

  • $email - email address to look up
Changed:
<
<
Return a list of user objects for the users that have this email registered with the password manager.
>
>
Return a list of canonical user names for the users that have this email registered with the user mapping managers.

ObjectMethod getEmails ($user) -> @emailAddress

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.

ObjectMethod setEmails ($user,@emails)

Set the email address(es) for the given user. The password manager is tried first, and if it doesn't want to know the user mapping manager is tried.

ObjectMethod isAdmin ($cUID) -> $boolean

True if the user is an admin

  • is $TWiki::cfg{SuperAdminGroup}
  • is a member of the $TWiki::cfg{SuperAdminGroup}

ObjectMethod isInList ($user,$list) -> $boolean

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).

ObjectMethod getLoginName ($cUID) -> $string

Get the login name of a user.

ObjectMethod getWikiName ($cUID) -> $wikiName

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)

ObjectMethod webDotWikiName ($user) -> $webDotWiki

Return the fully qualified wikiname of the user

ObjectMethod userExists ($cUID) -> $boolean

Determine if the user already exists or not. A user exists if they are known to to the user mapper.

ObjectMethod eachUser () -> $iterator

Get an iterator over the list of all the registered users not including groups.

list of canonical_ids ???

Use it as follows:

    my $iterator = $umm->eachUser();
    while ($iterator->hasNext()) {
        my $user = $iterator->next();
        ...
    }

ObjectMethod eachGroup () -> $iterator

Get an iterator over the list of all the groups.

ObjectMethod eachGroupMember ($group) -> $iterator

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.

ObjectMethod isGroup ($user) -> boolean

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??

ObjectMethod isInGroup ($user,$group) -> $boolean

Test if user is in the given group.

ObjectMethod eachMembership ($cUID) -> $iterator

Return an iterator over the groups that $cUID is a member of.

ObjectMethod checkPassword ($userName,$passwordU) -> $boolean

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..

ObjectMethod setPassword ($user,$newPassU,$oldPassU) -> $boolean

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.

ObjectMethod passwordError () -> $string

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

ObjectMethod removeUser ($user) -> $boolean

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.

ObjectMethod ASSERT_IS_CANONICAL_USER_ID ($user_id) -> $boolean

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

 
Added:
>
>

ObjectMethod ASSERT_IS_USER_LOGIN_ID ($user_login) -> $boolean

 
Added:
>
>
used for debugging to ensure we are actually passing a user login
 
Changed:
<
<

ObjectMethod createUser ($login,$wikiname) -> $userobject

>
>
These ASSERTS have been disabled, as they have been made dangerous and misleading due to the legacy cUID code
 
Deleted:
<
<
Create a user, and insert them in the maps (overwriting any current entry). Use this instead of findUser when you want to be sure you are not going to pick up any default user created by findUser. All parameters are required.
 
Added:
>
>

ObjectMethod ASSERT_IS_USER_DISPLAY_NAME ($user_display) -> $boolean

 
Changed:
<
<

ObjectMethod addUserToMapping ($user) -> $topicName

>
>
used for debugging to ensure we are actually passing a user display_name (commonly a WikiWord Name)
 
Changed:
<
<
Add a user to the persistant mapping that maps from usernames to wikinames and vice-versa.
>
>
These ASSERTS have been disabled, as they have been made dangerous and misleading due to the legacy cUID code
 
 
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback
Note: Please contribute updates to this topic on TWiki.org at TWiki:TWiki.TWikiUsersDotPm