Source code for collective.smsauthenticator.setuphandlers
from uuid import uuid4
from zope.i18nmessageid import MessageFactory
from collective.smsauthenticator.helpers import get_app_settings
from collective.smsauthenticator.pas_plugin import SMSAuthenticatorPlugin
_ = MessageFactory('collective.smsauthenticator')
PAS_TITLE = 'SMS Authenticator plugin (collective.smsauthenticator)'
PAS_ID = 'sms_auth'
def _add_plugin(pas, pluginid=PAS_ID):
"""
Install and activate collective.smsauthenticator PAS plugin
"""
installed = pas.objectIds()
if pluginid in installed:
return PAS_TITLE + " already installed."
plugin = SMSAuthenticatorPlugin(pluginid, title=PAS_TITLE)
pas._setObject(pluginid, plugin)
plugin = pas[plugin.getId()] # get plugin acquisition wrapped!
for info in pas.plugins.listPluginTypeInfo():
interface = info['interface']
if not interface.providedBy(plugin):
continue
pas.plugins.activatePlugin(interface, plugin.getId())
pas.plugins.movePluginsDown(
interface,
[x[0] for x in pas.plugins.listPlugins(interface)[:-1]],
)
def _setup_secret_key(portal):
"""
Generate secret key
"""
portal.portal_setup.runImportStepFromProfile(
'profile-collective.smsauthenticator:default',
'plone.app.registry'
)
settings = get_app_settings()
if not settings.ska_secret_key:
settings.ska_secret_key = unicode(uuid4())
[docs]def setupVarious(context):
"""
@param context: Products.GenericSetup.context.DirectoryImportContext instance
"""
# We check from our GenericSetup context whether we are running
# add-on installation for your product or any other proudct
if context.readDataFile('collective.smsauthenticator.marker.txt') is None:
# Not your add-on
return
portal = context.getSite()
_setup_secret_key(portal)
pas = portal.acl_users
_add_plugin(pas)