def generate_token(username): iat = time.time() exp = iat + web['session_timeout'] payload = {'username': username, 'iat': iat, 'exp': exp} key_pix = token_key() token = jwt.encode(payload, signer=jws.HmacSha(bits=256, key=web['token_key'] + key_pix)) r.set(token, key_pix) return token
def publish_results(self, starttime=0, tstrt=0, tstop=0, testname='', cache_enabled=True, rejected=False): # Create JSON to send to webserver resultdata = { 'phoneid': self.phone.id, 'testname': testname, 'starttime': starttime, 'throbberstart': tstrt, 'throbberstop': tstop, 'blddate': self.build.date, 'cached': cache_enabled, 'rejected': rejected, 'revision': self.build.revision, 'productname': self.build.app_name, 'productversion': self.build.version, 'osver': self.phone.osver, 'bldtype': self.build.type, 'machineid': self.phone.machinetype } result = {'data': resultdata} # Upload if self._signer: encoded_result = jwt.encode(result, signer=self._signer) content_type = 'application/jwt' else: encoded_result = json.dumps(result) content_type = 'application/json; charset=utf-8' req = urllib2.Request(self._resulturl + 'add/', encoded_result, {'Content-Type': content_type}) try: f = urllib2.urlopen(req) except Exception, e: self.loggerdeco.exception('Error sending results to server') self.worker_subprocess.mailer.send( 'Error sending %s results for phone %s, build %s' % (self.name, self.phone.id, self.build.id), 'There was an error attempting to send test results' 'to the result server %s.\n' '\n' 'Test %s\n' 'Phone %s\n' 'Build %s\n' 'Revision %s\n' 'Exception: %s\n' % (self.result_server, self.name, self.phone.id, self.build.id, self.build.revision, e)) message = 'Error sending results to server' self.test_result.status = PhoneTestResult.EXCEPTION self.message = message self.update_status(message=message)
def en_token(telephone, user_id): iat = time.time() exp = iat + ex_time['token_ex'] payload = { 'telephone': str(telephone), 'user_id': str(user_id), 'iat': iat, 'exp': exp } key_pix = generate_key() token = jwt.encode(payload, signer=jws.HmacSha(bits=256, key=web['token_key'] + key_pix)) redis_service.set(token, key_pix) return token
def publish_results(self, starttime=0, tstrt=0, tstop=0, testname='', cache_enabled=True, rejected=False): # Create JSON to send to webserver author = None if self.build.tree == 'try': rev_json_url = self.build.changeset.replace('/rev/', '/json-rev/') rev_json = utils.get_remote_json(rev_json_url) if rev_json: author = rev_json['pushuser'] blddate = float(convert_datetime_to_string(self.build.date, TIMESTAMP)) self.loggerdeco.debug('publish_results: build.id: %s, build.date: %s, blddate: %s' % ( self.build.id, self.build.date, blddate)) resultdata = { 'phoneid': self.phone.id, 'testname': testname, 'starttime': starttime, 'throbberstart': tstrt, 'throbberstop': tstop, 'blddate': blddate, 'cached': cache_enabled, 'rejected': rejected, 'revision': self.build.changeset, 'author': author, 'productname': self.build.app_name, 'productversion': self.build.version, 'osver': self.phone.osver, 'bldtype': self.build.type, 'machineid': self.phone.machinetype } result = {'data': resultdata} # Upload if self._signer: encoded_result = jwt.encode(result, signer=self._signer) content_type = 'application/jwt' else: encoded_result = json.dumps(result) content_type = 'application/json; charset=utf-8' req = urllib2.Request(self._resulturl + 'add/', encoded_result, {'Content-Type': content_type}) max_attempts = 10 wait_time = 10 for attempt in range(1, max_attempts+1): try: f = urllib2.urlopen(req) f.read() f.close() return except Exception, e: # Retry submission if the exception is due to a # timeout and if we haven't exceeded the maximum # number of attempts. if attempt < max_attempts: self.loggerdeco.warning('PerfTest.publish_results: ' 'Attempt %d/%d error %s sending ' 'results to server' % ( attempt, max_attempts, e)) time.sleep(wait_time) continue self.loggerdeco.exception('Error sending results to server') self.worker_subprocess.mailer.send( '%s attempt %s/%s Error sending %s results for phone %s, ' 'build %s' % (utils.host(), attempt, max_attempts, self.name, self.phone.id, self.build.id), 'There was an error attempting to send test results ' 'to the result server %s.\n' '\n' 'Host %s\n' 'Job %s\n' 'Test %s\n' 'Phone %s\n' 'Repository %s\n' 'Build %s\n' 'Revision %s\n' 'Exception %s\n' 'Result %s\n' % (self.result_server, utils.host(), self.job_url, self.name, self.phone.id, self.build.tree, self.build.id, self.build.changeset, e, json.dumps(resultdata, sort_keys=True, indent=2))) message = 'Error sending results to server' self.status = PhoneTest.EXCEPTION self.message = message self.update_status(message=message)
def test_hmac_sha256(self): self.assertEqual(jwt.decode(self.jws_repr, signers=[jws.HmacSha(key=self.key)]), { 'headers': {u'alg': u'HS256', u'typ': u'JWT'}, 'payload': self.payload, 'valid': True }) # test encoding and decoding using key id keydict = {'secret': self.key, 'secret2': 'abcd'} self.assertEqual(jwt.decode( jwt.encode(self.payload, signer=jws.HmacSha(keydict=keydict, key_id='secret')), signers=[jws.HmacSha(keydict=keydict)]), { 'headers': {u'alg': u'HS256', u'typ': u'JWT', u'kid': u'secret'}, 'payload': self.payload, 'valid': True }) # Test some errors in encoding. self.assertRaises(jws.KeyRequiredException, jwt.encode, self.payload, signer=jws.HmacSha()) self.assertRaises(jws.KeyRequiredException, jwt.encode, self.payload, signer=jws.HmacSha(keydict=keydict, key_id='notfound')) # Test encoding with no kid. msg = jwt.encode(self.payload, jws.HmacSha(key=self.key)) # Just default key given to decoder. self.assertTrue(jwt.decode(msg, signers=[jws.HmacSha(key=self.key)])['valid']) # Default key and random entry in keydict. self.assertTrue(jwt.decode(msg, signers=[jws.HmacSha(key=self.key, keydict={'foo': 'bar'})])['valid']) # Default key, nonmatching default key id, random entry in keydict. self.assertTrue(jwt.decode(msg, signers=[jws.HmacSha(key=self.key, key_id='foo', keydict={'foo': 'bar'})])['valid']) # No default key, nonmatching default key id, random entry in keydict. self.assertFalse(jwt.decode(msg, signers=[jws.HmacSha(key_id='foo', keydict={'foo': 'bar'})])['valid']) # No default key, matching default key id, random entry in keydict. self.assertTrue(jwt.decode(msg, signers=[jws.HmacSha(key_id='foo', keydict={'foo': self.key})])['valid']) # No key given to decoder. self.assertFalse(jwt.decode(msg, signers=[jws.HmacSha()])['valid']) self.assertFalse(jwt.decode(msg, signers=[jws.HmacSha(keydict={'foo': 'bar'})])['valid']) # With kid. msg = jwt.encode(self.payload, jws.HmacSha(key=self.key, key_id=self.key_id)) # Default matching key. self.assertTrue(jwt.decode(msg, signers=[jws.HmacSha(key=self.key)])['valid']) # Nonmatching default key, matching entry in keydict. self.assertTrue(jwt.decode(msg, signers=[jws.HmacSha(key='nope', keydict={self.key_id: self.key})])['valid']) # Default key and random entry in keydict. self.assertTrue(jwt.decode(msg, signers=[jws.HmacSha(key=self.key, keydict={'foo': 'bar'})])['valid']) # No default key, nonmatching default key id, random entry in keydict. self.assertFalse(jwt.decode(msg, signers=[jws.HmacSha(key_id='foo', keydict={'foo': 'bar'})])['valid']) # No default key, matching default key id, random entry in keydict. self.assertTrue(jwt.decode(msg, signers=[jws.HmacSha(key_id='foo', keydict={'foo': self.key})])['valid']) msg = jwt.encode(self.payload, signer=jws.HmacSha( key=self.key, key_id='secret')) self.assertFalse(jwt.decode(msg, signers=[jws.HmacSha( keydict={'wrongkid': self.key})])['valid'])
def publish_results(self, starttime=0, tstrt=0, tstop=0, testname='', cache_enabled=True, rejected=False): # Create JSON to send to webserver resultdata = { 'phoneid': self.phone.id, 'testname': testname, 'starttime': starttime, 'throbberstart': tstrt, 'throbberstop': tstop, 'blddate': self.build.date, 'cached': cache_enabled, 'rejected': rejected, 'revision': self.build.revision, 'productname': self.build.app_name, 'productversion': self.build.version, 'osver': self.phone.osver, 'bldtype': self.build.type, 'machineid': self.phone.machinetype } result = {'data': resultdata} # Upload if self._signer: encoded_result = jwt.encode(result, signer=self._signer) content_type = 'application/jwt' else: encoded_result = json.dumps(result) content_type = 'application/json; charset=utf-8' req = urllib2.Request(self._resulturl + 'add/', encoded_result, {'Content-Type': content_type}) max_attempts = 10 wait_time = 30 for attempt in range(1, max_attempts+1): try: f = urllib2.urlopen(req) except Exception, e: # Retry submission if the exception is due to a # timeout and if we haven't exceeded the maximum # number of attempts. if (attempt < max_attempts and isinstance(e, urllib2.URLError) and e.errno == 60): self.loggerdeco.warning('PerfTest.publish_results: ' 'Attempt %d/%d timed out sending ' 'results to server' % ( attempt, max_attempts)) time.sleep(wait_time) continue self.loggerdeco.exception('Error sending results to server') self.worker_subprocess.mailer.send( 'Error sending %s results for phone %s, build %s' % (self.name, self.phone.id, self.build.id), 'There was an error attempting to send test results' 'to the result server %s.\n' '\n' 'Test %s\n' 'Phone %s\n' 'Build %s\n' 'Revision %s\n' 'Exception: %s\n' % (self.result_server, self.name, self.phone.id, self.build.id, self.build.revision, e)) message = 'Error sending results to server' self.test_result.status = PhoneTestResult.EXCEPTION self.message = message self.update_status(message=message) else: f.read() f.close() break
def publish_results(self, starttime=0, tstrt=0, tstop=0, testname='', cache_enabled=True, rejected=False): # Create JSON to send to webserver author = None if self.build.tree == 'try': rev_json_url = self.build.changeset.replace('/rev/', '/json-rev/') rev_json = utils.get_remote_json(rev_json_url) if rev_json: author = rev_json['pushuser'] blddate = float(convert_datetime_to_string(self.build.date, TIMESTAMP)) self.loggerdeco.debug('publish_results: build.id: %s, build.date: %s, blddate: %s' % ( self.build.id, self.build.date, blddate)) resultdata = { 'phoneid': self.phone.id, 'testname': testname, 'starttime': starttime, 'throbberstart': tstrt, 'throbberstop': tstop, 'blddate': blddate, 'cached': cache_enabled, 'rejected': rejected, 'revision': self.build.changeset, 'author': author, 'productname': self.build.app_name, 'productversion': self.build.version, 'osver': self.phone.osver, 'bldtype': self.build.type, 'machineid': self.phone.machinetype } result = {'data': resultdata} # Upload if self._signer: encoded_result = jwt.encode(result, signer=self._signer) content_type = 'application/jwt' else: encoded_result = json.dumps(result) content_type = 'application/json; charset=utf-8' req = urllib2.Request(self._resulturl + 'add/', encoded_result, {'Content-Type': content_type}) max_attempts = 10 wait_time = 10 for attempt in range(1, max_attempts+1): try: f = urllib2.urlopen(req) f.read() f.close() return except Exception, e: # Retry submission if the exception is due to a # timeout and if we haven't exceeded the maximum # number of attempts. if attempt < max_attempts: self.loggerdeco.warning('PerfTest.publish_results: ' 'Attempt %d/%d error %s sending ' 'results to server' % ( attempt, max_attempts, e)) time.sleep(wait_time) continue self.loggerdeco.exception('Error sending results to server') self.worker_subprocess.mailer.send( '%s attempt %s/%s Error sending %s results for phone %s, ' 'build %s' % (utils.host(), attempt, max_attempts, self.name, self.phone.id, self.build.id), 'There was an error attempting to send test results ' 'to the result server %s.\n' '\n' 'Host %s\n' 'Job %s\n' 'Test %s\n' 'Phone %s\n' 'Repository %s\n' 'Build %s\n' 'Revision %s\n' 'Exception %s\n' 'Result %s\n' % (self.result_server, utils.host(), self.job_url, self.name, self.phone.id, self.build.tree, self.build.id, self.build.changeset, e, json.dumps(resultdata, sort_keys=True, indent=2))) message = 'Error sending results to phonedash server' self.add_failure(self.name, TestStatus.TEST_UNEXPECTED_FAIL, message, TreeherderStatus.EXCEPTION)
def publish_results(self, starttime=0, tstrt=0, tstop=0, testname="", cache_enabled=True, rejected=False): # Create JSON to send to webserver resultdata = { "phoneid": self.phone.id, "testname": testname, "starttime": starttime, "throbberstart": tstrt, "throbberstop": tstop, "blddate": self.build.date, "cached": cache_enabled, "rejected": rejected, "revision": self.build.revision, "productname": self.build.app_name, "productversion": self.build.version, "osver": self.phone.osver, "bldtype": self.build.type, "machineid": self.phone.machinetype, } result = {"data": resultdata} # Upload if self._signer: encoded_result = jwt.encode(result, signer=self._signer) content_type = "application/jwt" else: encoded_result = json.dumps(result) content_type = "application/json; charset=utf-8" req = urllib2.Request(self._resulturl + "add/", encoded_result, {"Content-Type": content_type}) max_attempts = 10 wait_time = 10 for attempt in range(1, max_attempts + 1): try: f = urllib2.urlopen(req) f.read() f.close() return except Exception, e: # Retry submission if the exception is due to a # timeout and if we haven't exceeded the maximum # number of attempts. if attempt < max_attempts: self.loggerdeco.warning( "PerfTest.publish_results: " "Attempt %d/%d error %s sending " "results to server" % (attempt, max_attempts, e) ) time.sleep(wait_time) continue self.loggerdeco.exception("Error sending results to server") self.worker_subprocess.mailer.send( "%s attempt %s/%s Error sending %s results for phone %s, " "build %s" % (utils.host(), attempt, max_attempts, self.name, self.phone.id, self.build.id), "There was an error attempting to send test results " "to the result server %s.\n" "\n" "Host %s\n" "Job %s\n" "Test %s\n" "Phone %s\n" "Repository %s\n" "Build %s\n" "Revision %s\n" "Exception %s\n" "Result %s\n" % ( self.result_server, utils.host(), self.job_url, self.name, self.phone.id, self.build.tree, self.build.id, self.build.revision, e, json.dumps(resultdata, sort_keys=True, indent=2), ), ) message = "Error sending results to server" self.test_result.status = PhoneTestResult.EXCEPTION self.message = message self.update_status(message=message)