def _handle(self):
if self._secret:
# check signature
if 'X-Signature' not in request.headers:
abort(401)
sec = self._secret
if isinstance(sec, str):
sec = sec.encode('utf-8')
sig = hmac.new(sec, request.body.read(), 'sha1').hexdigest()
if request.headers['X-Signature'] != 'sha1=' + sig:
abort(403)
post_type = request.json.get('post_type')
if post_type not in ('message', 'event', 'request'):
abort(400)
handler_key = None
for pk_pair in (('message', 'message_type'),
('event', 'event'),
('request', 'request_type')):
if post_type == pk_pair[0]:
handler_key = request.json.get(pk_pair[1])
if not handler_key:
abort(400)
else:
break
if not handler_key:
abort(400)
for group in self._groups:
handler = self._handlers[group][post_type].get(handler_key)
if not handler:
handler = self._handlers[group][post_type].get('*') # try wildcard
if handler:
assert callable(handler)
result = handler(request.json)
if 'pass' in result:
continue
else:
return result
return ''
评论列表
文章目录