Skip to content

Instantly share code, notes, and snippets.

@kirk91
Last active March 30, 2016 03:32
Show Gist options
  • Save kirk91/a8d20b1b510d3b5ed35f7e4f091ab8f2 to your computer and use it in GitHub Desktop.
Save kirk91/a8d20b1b510d3b5ed35f7e4f091ab8f2 to your computer and use it in GitHub Desktop.
# encoding: utf-8
import logging
import hashlib
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcf.request.v20151127 import AuthenticateRequest
from rumble import settings
logger = logging.getLogger(__name__)
acs_client = None
def init_client():
global acs_client
if acs_client is None:
acs_client = \
AcsClient(settings.ALIYUN_ACCESSKEY, settings.ALIYUN_SECRET,
region_id='cn-hangzhou')
init_client()
def authenticate_request(token, sig, sessionid, remoteip):
""" authenticate request
:param token: request token
:param sig: request signature
:param sessionid: request sessionid
:param remoteip: client ip
:return: bool
"""
appkey = settings.ALICF_APPKEY
accesskey = settings.ALICF_ACCESSKEY
enc = '{}{}{}{}'.format(
appkey, accesskey, token, sig
)
serno = hashlib.md5(enc).hexdigest()
request = AuthenticateRequest.AuthenticateRequest()
request.set_accept_format('JSON')
request.set_AppKey(appkey)
request.set_Token(token)
request.set_Sig(sig)
request.set_Serno(serno)
request.set_SessionId(sessionid)
request.set_RemoteIp(remoteip)
try:
response = json.loads(acs_client.do_action(request))
except Exception as e:
logger.exception(e, exc_info=True)
return False
else:
return _handle_authenticate_response(response)
def _handle_authenticate_response(response):
ret = False
if response.get('Success', False):
auth_code = \
int(response.get('SigAuthenticateResult', {}).get('code', 0))
if 100 <= auth_code < 300:
ret = True
if not ret:
logger.warning(
'aliyun authenticate request error, get response : {}'.format(
response
)
)
return ret
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment