linotp.useridresolver.SQLIdResolver module¶
This module implements the communication and data mapping to SQL servers. The LinOTP server imports this module to use SQL databases as a userstore.
Dependencies: UserIdResolver
- class linotp.useridresolver.SQLIdResolver.IdResolver¶
Bases:
UserIdResolver
A resolver class for userIds
Attributes¶
managed: means it uses the linotp DB [session] for storing and retrieving user information.
- checkMapping()¶
check the given sql field map against the sql table definition
- Returns
- checkPass(uid, password)¶
checkPass - checks the password for a given uid.
- Parameters
uid (string) – userid to be checked
password (string) – user password
:return : true in case of success, false if password does not match :rtype : boolean
- Todo
extend to support htpasswd passwords: http://httpd.apache.org/docs/2.2/misc/password_encryptions.html
- close()¶
close the db connection - will be called at the end of the request
- connect(sqlConnect=None)¶
create a db connection and preserve session in self.dbObj
- Parameters
sqlConnect – the sql connection string
- critical_parameters: List[str] = ['Driver', 'Server', 'Port', 'Database', 'User', 'Table']¶
- crypted_parameters: List[str] = ['Password']¶
- db_prefix = 'useridresolver.SQLIdResolver.IdResolver'¶
- classmethod getResolverClassDescriptor()¶
return the descriptor of the resolver, which is - the class name and - the config description
- Returns
resolver description dict
- Return type
dict
- classmethod getResolverClassType()¶
provide the resolver type for registration
- getResolverDescriptor()¶
return the descriptor of the resolver, which is - the class name and - the config description
- Returns
resolver description dict
- Return type
dict
- getResolverId()¶
getResolverId - provide the resolver identifier
- Returns
returns the resolver identifier string or empty string if not exist
:rtype : string
- getResolverType()¶
getResolverType - return the type of the resolver
- Returns
returns the string ‘sqlresolver’
- Return type
string
- getSearchFields()¶
return all fields on which a search could be made
- Returns
dictionary of the search fields and their types
- Return type
dict
- getUserId(loginName)¶
return the userId which mappes to a loginname
- Parameters
loginName (string) – login name of the user
- Returns
userid - unique idenitfier for this unser
- Return type
string
- getUserInfo(userId, suppress_password=True)¶
return all user related information
@param userId: specified user @type userId: string @return: dictionary, containing all user related info @rtype: dict
- getUserList(searchDict)¶
retrieve a list of users
- Parameters
searchDict (dict) – dictionary of the search criteria
- Returns
list of user descriptions (as dict)
- getUsername(userId)¶
get the loginname from the given userid
- Parameters
userId (string) – userid descriptor
- Returns
loginname
- Return type
string
- loadConfig(config, conf='')¶
loadConfig - load the config for the resolver
- Parameters
config (dict) – configuration for the sqlresolver
conf (string) – configuration postfix
- classmethod primary_key_changed(new_params, previous_params)¶
check if during the parameter update the primary key has changed
- Parameters
new_params – the set of new parameters
previous_params – the set of previous parameters
- Returns
boolean
- resolver_parameters: Dict[str, Tuple[bool, Optional[Union[str, bool, int]], Callable[[Any], Any]]] = {'Connect': (False, '', <class 'str'>), 'Database': (False, '', <class 'str'>), 'Driver': (False, None, <class 'str'>), 'Encoding': (False, 'utf-8', <class 'str'>), 'Limit': (False, '1000', <class 'int'>), 'Map': (False, '', <class 'str'>), 'Password': (True, '', <function encrypted_data>), 'Port': (False, '', <class 'str'>), 'Server': (False, '', <class 'str'>), 'Table': (False, '', <class 'str'>), 'User': (False, '', <class 'str'>), 'Where': (False, '', <class 'str'>), 'conParams': (False, '', <class 'str'>), 'readonly': (False, False, <function boolean>)}¶
- classmethod setup(config=None, cache_dir=None)¶
this setup hook is triggered, when the server starts to serve the first request
- Parameters
config (the linotp config dict) – the linotp config
- classmethod testconnection(parameters)¶
This is used to test if the given parameter set will do a successful SQL connection and return the number of found users params are:
Driver
Server
Port
Database
User
Password
Table
- linotp.useridresolver.SQLIdResolver.build_simple_connect(driver, user=None, pass_=None, server=None, port=None, db=None, conParams=None)¶
build from the parameters the sql connect url
- Parameters
driver – the url protocol / prefix
user – the database accessing user
pass – the password of database accessing user
server – the hostname for the server could be empty
port – the port on th server host, could be empty
db – the database on the server
conParams – additional and optional database parameter
return the connection string
- linotp.useridresolver.SQLIdResolver.call_on_connect(dbapi_con, connection_record)¶
- linotp.useridresolver.SQLIdResolver.check_password(password, crypted_password, salt=None)¶
check the crypted password and the optional salt for various password schemes defining a passlib crypto context
{id}pwdata - LDAP format
$id$pwdata - modular crypt format
other format like the Atlassian or PHP passwords
support db format
support for archaic formats like Des
the definitions of the crypto context is made above in the schema lists
the algorithm iterates over the crypto contexts to identify the type of the password and, if salt is provided, tries to verify with or without salt.
- Parameters
password – plaintext password
crypted_password – the crypted password
salt – optional
- Returns
boolean
- class linotp.useridresolver.SQLIdResolver.dbObject¶
Bases:
object
- close()¶
- connect(sqlConnect, db=None, timeout=5)¶
create a db session with the sqlConnect string or with the flask sqlalchemy db object
- Parameters
sqlConnect – sql url for the connection
db – the configured flask-sqlalchemy db object (this overrides the sqlConnect parameter)
- count(table, where='')¶
- getTable(tableName)¶
- query(select)¶
- linotp.useridresolver.SQLIdResolver.make_connect(driver, user, pass_, server, port, db, conParams='')¶
create a connect string from separate parts - to build a SQLAlchemy Uri
- Parameters
driver (string) – mysql, postgres, …
user (string) – database connection user
pass (string) – password of the database user
server (string) – servername
port (string or int) – database connection port
db (string) – database name
conParams (string) – additional connection parameters
- linotp.useridresolver.SQLIdResolver.testconnection(params)¶
provide the old interface for backward compatibility