2017-11-18 11:33:03 +01:00
< ? php
namespace LibreNMS\Interfaces\Authentication ;
use LibreNMS\Exceptions\AuthenticationException ;
interface Authorizer
{
/**
* Authenticate the user and password.
* Some Authorizer methods may only check username.
*
2021-09-08 23:35:56 +02:00
* @param array $credentials
2017-11-18 11:33:03 +01:00
* @return true throws an Exception on failure
2021-09-10 20:09:53 +02:00
*
2017-11-18 11:33:03 +01:00
* @throws AuthenticationException thrown if the username or password is invalid
*/
2019-03-05 00:24:14 -06:00
public function authenticate ( $credentials );
2017-11-18 11:33:03 +01:00
/**
* Check if a $username exists.
*
2021-09-08 23:35:56 +02:00
* @param string $username
* @param bool $throw_exception Allows for a message to be sent to callers in case the user does not exist
2017-11-18 11:33:03 +01:00
* @return bool
*/
public function userExists ( $username , $throw_exception = false );
/**
* Get the userlevel of $username
*
2021-09-08 23:35:56 +02:00
* @param string $username The username to check
2017-11-18 11:33:03 +01:00
* @return int
*/
public function getUserlevel ( $username );
/**
* Get the user_id of $username
*
2021-09-08 23:35:56 +02:00
* @param string $username
2017-11-18 11:33:03 +01:00
* @return int
*/
public function getUserid ( $username );
/**
* Get an array describing this $user_id.
*
* It should contain the fields:
* user_id
* username
* realname
* email
* descr
* level
* can_modify_passwd
*
2021-09-08 23:35:56 +02:00
* @param int $user_id
2021-04-01 17:35:18 +02:00
* @return array|false
2017-11-18 11:33:03 +01:00
*/
public function getUser ( $user_id );
/**
* Add a new user.
*
2021-09-08 23:35:56 +02:00
* @param string $username
* @param string $password
* @param int $level
* @param string $email
* @param string $realname
* @param int $can_modify_passwd If this user is allowed to edit their password
* @param string $description
2017-11-18 11:33:03 +01:00
* @return int|false Returns the added user_id or false if adding failed
*/
public function addUser ( $username , $password , $level = 0 , $email = '' , $realname = '' , $can_modify_passwd = 0 , $description = '' );
/**
* Update the some of the fields of a user
*
2021-09-08 23:35:56 +02:00
* @param int $user_id The user_id to update
* @param string $realname
* @param int $level
* @param int $can_modify_passwd
* @param string $email
2017-11-18 11:33:03 +01:00
* @return bool If the update was successful
*/
public function updateUser ( $user_id , $realname , $level , $can_modify_passwd , $email );
/**
* Delete a user.
*
2021-09-08 23:35:56 +02:00
* @param int $user_id
2017-11-18 11:33:03 +01:00
* @return bool If the deletion was successful
*/
public function deleteUser ( $user_id );
/**
* Get a list of all users in this Authorizer
* !Warning! this could be very slow for some Authorizer types or configurations
*
* @return array
*/
public function getUserlist ();
/**
* Check if this Authorizer can add or remove users.
* You must also check canUpdateUsers() to see if it can edit users.
* You must check canUpdatePasswords() to see if it can set passwords.
*
* @return bool
*/
public function canManageUsers ();
/**
* Check if this Authorizer can modify users.
*
* @return bool
*/
public function canUpdateUsers ();
/**
* Check if this Authorizer can set new passwords.
*
2021-09-08 23:35:56 +02:00
* @param string $username Optionally, check if $username can set their own password
2017-11-18 11:33:03 +01:00
* @return bool
*/
public function canUpdatePasswords ( $username = '' );
2017-11-29 02:40:17 +00:00
/**
* Indicates if the authentication happens within the LibreNMS process, or external to it.
* If the former, LibreNMS provides a login form, and the user must supply the username. If the latter, the authenticator supplies it via getExternalUsername() without user interaction.
* This is an important distinction, because at the point this is called if the authentication happens out of process, the user is already authenticated and LibreNMS must not display a login form - even if something fails.
*
* @return bool
*/
public function authIsExternal ();
/**
* The username provided by an external authenticator.
*
* @return string|null
*/
public function getExternalUsername ();
2017-11-18 11:33:03 +01:00
}