def generate_launch_data(self): # Validate params if not self.has_required_params(): raise InvalidLTIConfigError('ToolConsumer does not have all required attributes: consumer_key = %s, consumer_secret = %s, resource_link_id = %s, launch_url = %s' %(self.consumer_key, self.consumer_secret, self.resource_link_id, self.launch_url)) params = self.to_params() if params.get('lit_version', None) is not None: params['lti_version'] = 'LTI-1.0' if params.get('lti_message_type', None) is not None: params['lti_message_type'] = 'basic-lti-launch-request' # Get new OAuth consumer consumer = oauth2.Consumer(key = self.consumer_key,\ secret = self.consumer_secret) params.update({ 'oauth_nonce': str(generate_identifier()), 'oauth_timestamp': str(int(time.time())), 'oauth_scheme': 'body', 'oauth_consumer_key': consumer.key }) # russomi: Removing since it is causing duplicate id values # to be passed and fails to match the moodle signature... # uri = urlparse.urlparse(self.launch_url) # if uri.query != '': # for param in uri.query.split('&'): # key, val = param.split('=') # if params.get(key) == None: # params[key] = str(val) request = oauth2.Request(method = 'POST', url = self.launch_url, parameters = params) signature_method = oauth2.SignatureMethod_HMAC_SHA1() request.sign_request(signature_method, consumer, None) # Request was made by an HTML form in the user's browser. # Return the dict of post parameters ready for embedding # in an html view. return_params = {} for key in request: if request[key] == None: return_params[key] = None elif isinstance(request[key], list): return_params[key] = request.get_parameter(key) else: return_params[key] = unquote(request.get_parameter(key)) return return_params
def generate_launch_data(self): # Validate params if not self.has_required_params(): raise InvalidLTIConfigError( 'ToolConsumer does not have all required attributes: consumer_key = %s, consumer_secret = %s, resource_link_id = %s, launch_url = %s' % (self.consumer_key, self.consumer_secret, self.resource_link_id, self.launch_url)) params = self.to_params() if not params.get('lit_version', None): params['lti_version'] = 'LTI-1.0' params['lti_message_type'] = 'basic-lti-launch-request' # Get new OAuth consumer consumer = oauth2.Consumer(key = self.consumer_key,\ secret = self.consumer_secret) params.update({ 'oauth_nonce': str(generate_identifier()), 'oauth_timestamp': str(int(time.time())), 'oauth_scheme': 'body', 'oauth_consumer_key': consumer.key }) uri = urlparse.urlparse(self.launch_url) if uri.query != '': for param in uri.query.split('&'): key, val = param.split('=') if params.get(key) == None: params[key] = str(val) request = oauth2.Request(method='POST', url=self.launch_url, parameters=params) signature_method = oauth2.SignatureMethod_HMAC_SHA1() request.sign_request(signature_method, consumer, None) # Request was made by an HTML form in the user's browser. # Return the dict of post parameters ready for embedding # in an html view. return_params = {} for key in request: if request[key] == None: return_params[key] = None elif isinstance(request[key], list): return_params[key] = request.get_parameter(key) else: return_params[key] = unquote(request.get_parameter(key)) return return_params
def _params_update(self): return { 'oauth_nonce': str(generate_identifier()), 'oauth_timestamp': str(int(time.time())), 'oauth_scheme': 'body' }