Esempio n. 1
0
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
Esempio n. 2
0
    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)
Esempio n. 3
0
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
Esempio n. 4
0
    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)
Esempio n. 5
0
    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'])
Esempio n. 6
0
    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
Esempio n. 7
0
    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)
Esempio n. 8
0
    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)