Why pymessenger here?

parent a02dc146
import json
import six
from .bot import Bot
class Element(dict):
__acceptable_keys = ['title', 'item_url', 'image_url', 'subtitle', 'buttons']
def __init__(self, *args, **kwargs):
if six.PY2:
kwargs = {k: v for k, v in kwargs.iteritems() if k in self.__acceptable_keys}
else:
kwargs = {k: v for k, v in kwargs.items() if k in self.__acceptable_keys}
super(Element, self).__init__(*args, **kwargs)
def to_json(self):
return json.dumps({k: v for k, v in self.iteritems() if k in self.__acceptable_keys})
class Button(dict):
# TODO: Decide if this should do more
pass
This diff is collapsed.
import pymessenger.utils as utils
DEFAULT_API_VERSION = 2.6
class FacebookGraphApi(object):
def __init__(self, access_token, **kwargs):
'''
@required:
access_token
@optional:
api_version
app_secret
'''
self.api_version = kwargs.get('api_version') or DEFAULT_API_VERSION
self.app_secret = kwargs.get('app_secret')
self.graph_url = 'https://graph.facebook.com/v{0}'.format(self.api_version)
self.access_token = access_token
@property
def auth_args(self):
if not hasattr(self, '_auth_args'):
auth = {
'access_token': self.access_token
}
if self.app_secret is not None:
appsecret_proof = utils.generate_appsecret_proof(self.access_token, self.app_secret)
auth['appsecret_proof'] = appsecret_proof
self._auth_args = auth
return self._auth_args
import requests
from pymessenger.graph_api import FacebookGraphApi
class UserProfileApi(FacebookGraphApi):
def get(self, user_id, fields=None):
params = {}
if fields is not None and isinstance(fields, (list, tuple)):
params['fields'] = ",".join(fields)
params.update(self.auth_args)
request_endpoint = '{0}/{1}'.format(self.graph_url, user_id)
response = requests.get(request_endpoint, params=params)
if response.status_code == 200:
user_profile = response.json()
return user_profile
return None
import hashlib
import hmac
import six
def validate_hub_signature(app_secret, request_payload, hub_signature_header):
"""
@inputs:
app_secret: Secret Key for application
request_payload: request body
hub_signature_header: X-Hub-Signature header sent with request
@outputs:
boolean indicated that hub signature is validated
"""
try:
hash_method, hub_signature = hub_signature_header.split('=')
except:
pass
else:
digest_module = getattr(hashlib, hash_method)
hmac_object = hmac.new(str(app_secret), unicode(request_payload), digest_module)
generated_hash = hmac_object.hexdigest()
if hub_signature == generated_hash:
return True
return False
def generate_appsecret_proof(access_token, app_secret):
"""
@inputs:
access_token: page access token
app_secret_token: app secret key
@outputs:
appsecret_proof: HMAC-SHA256 hash of page access token
using app_secret as the key
"""
if six.PY2:
hmac_object = hmac.new(str(app_secret), unicode(access_token), hashlib.sha256)
else:
hmac_object = hmac.new(bytearray(app_secret, 'utf8'), str(access_token).encode('utf8'), hashlib.sha256)
generated_hash = hmac_object.hexdigest()
return generated_hash
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment