def onUserDeletion(event):
    """ Delete jabber account when a user is removed.
    """
    request = getRequest()
    if not IProductLayer.providedBy(request):
        return

    client = getUtility(IAdminClient)
    xmpp_users = getUtility(IXMPPUsers)

    principal_id = event.principal
    principal_jid = xmpp_users.getUserJID(principal_id)

    pass_storage = getUtility(IXMPPPasswordStorage)
    pass_storage.remove(principal_id)

    d = users.deletePrincipal(client, principal_jid)
    return d
Exemplo n.º 2
0
def setUpAdminClient(event):
    if not IProductLayer.providedBy(event.request):
        return
    site = getSite()
    mtool = getToolByName(site, 'portal_membership', None)
    if not mtool or mtool.isAnonymousUser():
        return
    client = queryUtility(IAdminClient)
    if client is None:

        def checkAdminClientConnected(client):
            if client.state != 'authenticated':
                log.warn(
                    'XMPP admin client has not been able to authenticate. ' \
                    'Client state is "%s". Will retry on the next request.' \
                    % client.state)
                gsm = getGlobalSiteManager()
                gsm.unregisterUtility(client, IAdminClient)

        createAdminClient(checkAdminClientConnected)
def onUserPreferencesChanged(event):
    """ Update user's vcard when their prefs have changed.
    """
    request = getRequest()
    if not IProductLayer.providedBy(request):
        return
    if not isinstance(event.context, UserDataPanel):
        return
    portal = getSite()
    mtool = getToolByName(portal, 'portal_membership')
    member = mtool.getAuthenticatedMember()
    member_id = member.getId()
    pass_storage = getUtility(IXMPPPasswordStorage)
    member_pass = pass_storage.get(member_id)
    if not member_pass:
        log.info('%s is not registered on the XMPP server.' % member_id)
        return
    xmpp_users = getUtility(IXMPPUsers)
    member_jid = xmpp_users.getUserJID(member_id)
    portal_url = getToolByName(portal, 'portal_url')()
    fullname = member.getProperty('fullname').decode('utf-8')
    portrait = mtool.getPersonalPortrait(member_id)
    if IOFSImage.providedBy(portrait):
        raw_image = portrait.data
    elif isinstance(portrait, FSImage):
        raw_image = portrait._data
    else:
        log.warn('Could not get the raw data for portrait image for user %s' \
                 % member_id)
        raw_image = None
    udict = {
        'fullname': fullname,
        'nickname': member_id,
        'email': member.getProperty('email'),
        'userid': member_jid.userhost(),
        'jabberid': member_jid.userhost(),
        'url': '%s/author/%s' % (portal_url, member_id),
        'image_type': portrait.content_type,
        'raw_image': raw_image
    }
    setup.setVCard(udict, member_jid, member_pass)