slixmpp.plugins.xep_0235.stanza

1.6 Documentation

Contents

Source code for slixmpp.plugins.xep_0235.stanza

"""
    Slixmpp: The Slick XMPP Library
    Copyright (C) 2012 Nathanael C. Fritz, Lance J.T. Stout
    This file is part of Slixmpp.

    See the file LICENSE for copying permission.
"""

import hmac
import hashlib
import urllib
import base64

from slixmpp.xmlstream import ET, ElementBase, JID


[docs]class OAuth(ElementBase): name = 'oauth' namespace = 'urn:xmpp:oauth:0' plugin_attrib = 'oauth' interfaces = {'oauth_consumer_key', 'oauth_nonce', 'oauth_signature', 'oauth_signature_method', 'oauth_timestamp', 'oauth_token', 'oauth_version'} sub_interfaces = interfaces
[docs] def generate_signature(self, stanza, sfrom, sto, consumer_secret, token_secret, method='HMAC-SHA1'): self['oauth_signature_method'] = method request = urllib.quote('%s&%s' % (sfrom, sto), '') parameters = urllib.quote('&'.join([ 'oauth_consumer_key=%s' % self['oauth_consumer_key'], 'oauth_nonce=%s' % self['oauth_nonce'], 'oauth_signature_method=%s' % self['oauth_signature_method'], 'oauth_timestamp=%s' % self['oauth_timestamp'], 'oauth_token=%s' % self['oauth_token'], 'oauth_version=%s' % self['oauth_version'] ]), '') sigbase = '%s&%s&%s' % (stanza, request, parameters) consumer_secret = urllib.quote(consumer_secret, '') token_secret = urllib.quote(token_secret, '') key = '%s&%s' % (consumer_secret, token_secret) if method == 'HMAC-SHA1': sig = base64.b64encode(hmac.new(key, sigbase, hashlib.sha1).digest()) elif method == 'PLAINTEXT': sig = key self['oauth_signature'] = sig return sig
[docs] def verify_signature(self, stanza, sfrom, sto, consumer_secret, token_secret): method = self['oauth_signature_method'] request = urllib.quote('%s&%s' % (sfrom, sto), '') parameters = urllib.quote('&'.join([ 'oauth_consumer_key=%s' % self['oauth_consumer_key'], 'oauth_nonce=%s' % self['oauth_nonce'], 'oauth_signature_method=%s' % self['oauth_signature_method'], 'oauth_timestamp=%s' % self['oauth_timestamp'], 'oauth_token=%s' % self['oauth_token'], 'oauth_version=%s' % self['oauth_version'] ]), '') sigbase = '%s&%s&%s' % (stanza, request, parameters) consumer_secret = urllib.quote(consumer_secret, '') token_secret = urllib.quote(token_secret, '') key = '%s&%s' % (consumer_secret, token_secret) if method == 'HMAC-SHA1': sig = base64.b64encode(hmac.new(key, sigbase, hashlib.sha1).digest()) elif method == 'PLAINTEXT': sig = key return self['oauth_signature'] == sig

Contents