10. Plugin base functions¶
The following decorators and the
PluginBase class may be used in any Plugin SDK based plugin
to get some basic functionality.
-
safeguard.sessions.plugin.plugin_base.lazy_property(factory)¶ The
@lazy_propertydecorator is used to mark attributes that should only be evaluated when accessed. This is useful when the calculation of the attribute is heavy, but not always necessary.Usage
To use
self.foobaras a lazy property, simply define it on the Plugin class, and decorate it with@lazy_propertydecorator:from safeguard.sessions.plugin import AAPlugin from safeguard.sessions.plugin.plugin_base import lazy_property class MyPlugin(AAPlugin): @lazy_property def foobar(self): return calculate_answer() def do_authenticate(self): if need_foobar: print(self.foobar)
The
@cookie_propertydecorator is used to mark attributes that should be passed in the cookie between invocations of the same plugin. Setting up such property is an easy way to store and retrieve data inself.cookie. Similarly to@lazy_propertyattributes, the evaulation of a@cookie_propertyattribute is also delayed until usage.Usage
To use
self.foobaras a cookie property, simply define it on the Plugin class, and decorate it with@cookie_propertydecorator:from safeguard.sessions.plugin import AAPlugin from safeguard.sessions.plugin.plugin_base import cookie_property class MyPlugin(AAPlugin): @cookie_property def foobar(self): return 42 def do_authenticate(self): assert self.foobar == 42 self.foobar = 0 def do_authorize(self): assert self.foobar == 0
The decorator
@cookie_propertytogether with code inAAPluginwill ensure thatfoobaris stored and retrieved from the cookie passed to the plugin.The initial definition of foobar is 42 in this case, but it can be any function - this function is only called if foobar was not accessed before. To be more precise foobar is initialized with its factory function if it is being accessed and it is not present in
self.cookie.
The
@named_cookie_propertydecorator is working similarly to the@cookie_propertydecorator. The only difference is you can specify the key you want to save value in theself.cookieIt is important that you have to call the decorator with the desired key name, see usage.Usage
To use
self.my_custom_keyas a cookie property, simply define it on the Plugin class, and decorate it with@named_cookie_property(key=my_custom_key)decorator:from safeguard.sessions.plugin import AAPlugin from safeguard.sessions.plugin.plugin_base import named_cookie_property class MyPlugin(AAPlugin): @named_cookie_property(key=my_custom_key) def foobar(self): return 42 def do_authenticate(self): assert self.cookie.my_custom_key == 42
The
@session_cookie_propertydecorator is used to mark attributes that should be passed in the session cookie between invocations of all plugins relevant to the session. Setting up such property is an easy way to store and retrieve data inself.session_cookie. Similarly to@lazy_propertyattributes, the evaulation of a@session_cookie_propertyattribute is also delayed until usage.Usage
To use
self.foobaras a session cookie property, simply define it on the Plugin class, and decorate it with@session_cookie_propertydecorator:from safeguard.sessions.plugin import AAPlugin from safeguard.sessions.plugin.plugin_base import session_cookie_property class MyPlugin(AAPlugin): @session_cookie_property def foobar(self): return 42 def do_authenticate(self): assert self.foobar == 42 self.foobar = 0 def do_authorize(self): assert self.foobar == 0
The decorator
@session_cookie_propertytogether with code inAAPluginwill ensure thatfoobaris stored and retrieved from the session cookie passed to the plugin.The initial definition of foobar is 42 in this case, but it can be any function - this function is only called if foobar was not accessed before. To be more precise foobar is initialized with its factory function if it is being accessed and it is not present in
self.session_cookie.
-
class
safeguard.sessions.plugin.plugin_base.PluginBase(configuration, defaults=None, logger=None)¶ The
PluginBaseimplements:parsing the textual plugin configuration
setting the log level
setting HTTPS proxy environment variables https_proxy and HTTPS_PROXY