Authentication support for the GC3Libs.
A mish-mash of authorization functions.
This class actually serves the purposes of:
- a registry of authorization ‘types’, mapping internally-assigned names to Python classes;
- storage for the configuration information (which can be arbitrary, but should probably be read off a configuration file);
- a factory, returning a ‘SomeAuth’ object through which clients can deal with actual authorization issues (like checking if the authorization credentials are valid and getting/renewing them).
- a cache, that tries to avoid expensive re-initializations of Auth objects by allowing only one live instance per type, and returning it when requested.
There are several problems with this approach:
- the configuration is assumed static and cannot be changed after the Auth instance is constructed.
- there is no communication between the client class and the Auth classes.
- there is no control over the lifetime of the cache; at a minimum, it should be settable per-auth-type.
- I’m unsure whether the mapping of ‘type names’ (as in the type=… keyword in the config file) to Python classes belongs in a generic factory method or in the configuration file reader. (Probably the former, so the code here would actually be right.)
- The whole auto_enable stuff really belongs to the user-interface part, which is also hard-coded in the auth classes, and should not be.
Add the specified keyword arguments as initialization parameters to all the configured auth classes.
Parameters that have already been specified are silently overwritten.
Return an instance of the Auth class corresponding to the given auth_name, or raise an exception if instanciating the same class has given an unrecoverable exception in past calls.
Additional keyword arguments are passed unchanged to the class constructor and can override values specified at configuration time.
Instances are remembered for the lifetime of the program; if an instance of the given class is already present in the cache, that one is returned; otherwise, an instance is contructed with the given parameters.
The params keyword arguments are only used if a new instance is constructed and are silently ignored if the cached instance is returned.
Auth proxy to use when no auth is needed.