Example #1
0
def obtain_alternatives(trip_id, user_id):
	db = get_trip_db()
	trip = E_Mission_Trip.trip_from_json(db.find_one({"trip_id": trip_id, "user_id": user_id}))
	logging.debug(trip.sections)
	start_coord = trip.trip_start_location.maps_coordinate()
	end_coord = trip.trip_end_location.maps_coordinate()
	logging.debug("Start: %s " % start_coord)
	logging.debug("End: %s " % end_coord)
	    
	curr_time = datetime.datetime.now()
	curr_month = curr_time.month
	curr_day = curr_time.day
	curr_hour = curr_time.hour
	curr_minute = curr_time.minute

	otp_modes = ['CAR', 'WALK', 'BICYCLE', 'TRANSIT']
	
        for mode in otp_modes:
                try:
		    otp_trip = OTP(start_coord, end_coord, mode, write_day(curr_month, curr_day, "2015"), write_time(curr_hour, curr_minute), False)
     		    otp_trip = otp_trip.turn_into_trip(None, user_id, trip_id) 
		    otp_trip.save_to_db()
                except Exception as e:
                    #modes = ['driving', 'walking', 'bicycling', 'transit']
                    logging.debug("Got error %s from OTP, defaulting to Google Maps" % e)
                    otp_to_google_mode = {"CAR":"driving", "WALK":"walking", "BICYCLE":"bicycling", "TRANSIT":"transit"}
                    mode = otp_to_google_mode[mode]
                    gmaps = googlemaps.GoogleMaps('AIzaSyBEkw4PXVv_bsAdUmrFwatEyS6xLw3Bd9c')
                    result = gmaps.directions(origin=start_coord, destination=end_coord, mode=mode)
                    gmaps_trip = google_maps_to_our_trip(result, None, user_id, trip_id, mode, curr_time)
                    gmaps_trip.save_to_db()

        '''
Example #2
0
def otpgen():
    if "user" in session:
        otp=OTP(productname)
        tmp=otp.genOTP()
        enckey=EncryptPass()
        return render_template("nano/2fa_gen.html",productname=productname,toqr=tmp[1],year=year)
    else:
        return redirect(url_for("login"))
Example #3
0
    def test_generate_hotp(self):
        # Test vectors taken from RFC 4226, Appendix E

        self.assertEqual('755224', OTP.generate_hotp(self.secret, 0))
        self.assertEqual('287082', OTP.generate_hotp(self.secret, 1))
        self.assertEqual('359152', OTP.generate_hotp(self.secret, 2))
        self.assertEqual('969429', OTP.generate_hotp(self.secret, 3))
        self.assertEqual('338314', OTP.generate_hotp(self.secret, 4))
        self.assertEqual('254676', OTP.generate_hotp(self.secret, 5))
        self.assertEqual('287922', OTP.generate_hotp(self.secret, 6))
        self.assertEqual('162583', OTP.generate_hotp(self.secret, 7))
        self.assertEqual('399871', OTP.generate_hotp(self.secret, 8))
        self.assertEqual('520489', OTP.generate_hotp(self.secret, 9))
Example #4
0
 def do_getHOTP(self, line):
     "getHOTP [digits]"
     digits = 6
     if line:
         digits = int(line.split()[0])
     print("Your HOTP code : ",
           OTP.generate_hotp(self.secret, self.counter, digits))
     self.counter += 1
Example #5
0
 def do_geturl(self, line):
     """geturl authtype(hotp/totp) """
     if not line or len(line.split()) < 1:
         print("Wrong")
     else:
         auth = line.split()[0]
         if auth != "hotp" and auth != "totp":
             print("Wrong auth param")
         else:
             print("Type this in browser : ",
                   OTP.get_url(self.account, auth, self.secret))
Example #6
0
    def test_generate_totp(self):
        # Test vectors taken from RFC 6238, Appendix B

        self.assertEqual('94287082', OTP.generate_totp(self.secret, 59, 8))
        self.assertEqual('07081804', OTP.generate_totp(self.secret, 1111111109, 8))
        self.assertEqual('14050471', OTP.generate_totp(self.secret, 1111111111, 8))
        self.assertEqual('89005924', OTP.generate_totp(self.secret, 1234567890, 8))
        self.assertEqual('69279037', OTP.generate_totp(self.secret, 2000000000, 8))
        self.assertEqual('65353130', OTP.generate_totp(self.secret, 20000000000, 8))
Example #7
0
    def verify(self,
               otp,
               timestamp=False,
               sl=None,
               timeout=None,
               return_response=False):
        """
        Returns True is the provided OTP is valid,
        False if the REPLAYED_OTP status value is returned or the response
        message signature verification failed and None for the rest of the
        status values.
        """
        ca_bundle_path = self._get_ca_bundle_path()

        otp = OTP(otp, self.translate_otp)
        nonce = base64.b64encode(os.urandom(30), 'xz')[:25]
        query_string = self.generate_query_string(otp.otp, nonce, timestamp,
                                                  sl, timeout)
        request_urls = self.generate_request_urls()

        threads = []
        timeout = timeout or DEFAULT_TIMEOUT
        for url in request_urls:
            thread = URLThread('%s?%s' % (url, query_string), timeout,
                               self.verify_cert, ca_bundle_path)
            thread.start()
            threads.append(thread)

        # Wait for a first positive or negative response
        start_time = time.time()
        while threads and (start_time + timeout) > time.time():
            for thread in threads:
                if not thread.is_alive():
                    if thread.exception:
                        raise thread.exception
                    elif thread.response:
                        status = self.verify_response(thread.response, otp.otp,
                                                      nonce, return_response)

                        if status:
                            if return_response:
                                return status
                            else:
                                return True
                    threads.remove(thread)
            time.sleep(0.1)

        # Timeout or no valid response received
        raise Exception('NO_VALID_ANSWERS')
Example #8
0
    def verify_multi(self,
                     otp_list=None,
                     max_time_window=None,
                     sl=None,
                     timeout=None):
        # Create the OTP objects
        otps = []
        for otp in otp_list:
            otps.append(OTP(otp, self.translate_otp))

        device_ids = set()
        for otp in otps:
            device_ids.add(otp.device_id)

        # Check that all the OTPs contain same device id
        if len(device_ids) != 1:
            raise Exception('OTPs contain different device ids')

        # Now we verify the OTPs and save the server response for each OTP.
        # We need the server response, to retrieve the timestamp.
        # It's possible to retrieve this value locally, without querying the
        # server but in this case, user would need to provide his AES key.
        for otp in otps:
            response = self.verify(otp.otp,
                                   True,
                                   sl,
                                   timeout,
                                   return_response=True)

            if not response:
                return False

            otp.timestamp = int(response['timestamp'])

        count = len(otps)
        delta = otps[count - 1].timestamp - otps[0].timestamp

        if max_time_window:
            max_time_window = (max_time_window / 0.125)
        else:
            max_time_window = DEFAULT_MAX_TIME_WINDOW

        if delta > max_time_window:
            raise Exception('More then %s seconds has passed between ' +
                            'generating the first and the last OTP.' %
                            (max_time_window * 0.125))

        return True
Example #9
0
    def verify_multi(self,
                     otp_list=None,
                     max_time_window=None,
                     sl=None,
                     timeout=None):
        # Create the OTP objects
        otps = []
        for otp in otp_list:
            otps.append(OTP(otp, self.translate_otp))

        device_ids = set()
        for otp in otps:
            device_ids.add(otp.device_id)

        # Check that all the OTPs contain same device id
        if len(device_ids) != 1:
            return False

        # Now we verify the OTPs and save the server response for each OTP.
        # We need the server response, to retrieve the timestamp.
        # It's possible to retrieve this value locally, without querying the server
        # but in this case, user would need to provide his AES key.
        for otp in otps:
            response = self.verify(otp.otp,
                                   True,
                                   sl,
                                   timeout,
                                   return_response=True)

            if not response:
                return False

            otp.timestamp = int(response['timestamp'])

        count = len(otps)
        delta = otps[count - 1].timestamp - otps[0].timestamp

        max_time_window = (max_time_window /
                           0.125) if max_time_window else None
        max_time_window = max_time_window or MAX_TIME_WINDOW
        if delta > max_time_window:
            return False

        return True
Example #10
0
    def verify(self,
               otp,
               timestamp=False,
               sl=None,
               timeout=None,
               return_response=False):
        """
		Returns True is the provided OTP is valid,
		False if the REPLAYED_OTP status value is returned or the response
		message signature verification failed and None for the rest of the status values.
		"""
        otp = OTP(otp, self.translate_otp)
        nonce = base64.b64encode(os.urandom(30), 'xz')[:25]
        query_string = self.generate_query_string(otp.otp, nonce, timestamp,
                                                  sl, timeout)
        request_urls = self.generate_request_urls()

        threads = []
        timeout = timeout or TIMEOUT
        for url in request_urls:
            thread = URLThread('%s?%s' % (url, query_string), timeout,
                               self.verify_cert)
            thread.start()
            threads.append(thread)

        # Wait for a first positive or negative response
        start_time = time.time()
        while threads and (start_time + timeout) > time.time():
            for thread in threads:
                if not thread.is_alive() and thread.response:
                    status = self.verify_response(thread.response,
                                                  return_response)

                    if status:
                        if return_response:
                            return status
                        else:
                            return True
                    threads.remove(thread)

        return None
Example #11
0
 def setUp(self):
     self.otp = OTP()
     self.secret = "12345678901234567890"
Example #12
0
class TestOTP(TestCase):
    def setUp(self):
        self.otp = OTP()
        self.secret = "12345678901234567890"

    def test_generate_hotp(self):
        # Test vectors taken from RFC 4226, Appendix E

        self.assertEqual("755224", self.otp.generate_hotp(self.secret, 0))
        self.assertEqual("287082", self.otp.generate_hotp(self.secret, 1))
        self.assertEqual("359152", self.otp.generate_hotp(self.secret, 2))
        self.assertEqual("969429", self.otp.generate_hotp(self.secret, 3))
        self.assertEqual("338314", self.otp.generate_hotp(self.secret, 4))
        self.assertEqual("254676", self.otp.generate_hotp(self.secret, 5))
        self.assertEqual("287922", self.otp.generate_hotp(self.secret, 6))
        self.assertEqual("162583", self.otp.generate_hotp(self.secret, 7))
        self.assertEqual("399871", self.otp.generate_hotp(self.secret, 8))
        self.assertEqual("520489", self.otp.generate_hotp(self.secret, 9))

    def test_generate_totp(self):
        # Test vectors taken from RFC 6238, Appendix B

        self.assertEqual("94287082", self.otp.generate_totp(self.secret, 59, 8))
        self.assertEqual("07081804", self.otp.generate_totp(self.secret, 1111111109, 8))
        self.assertEqual("14050471", self.otp.generate_totp(self.secret, 1111111111, 8))
        self.assertEqual("89005924", self.otp.generate_totp(self.secret, 1234567890, 8))
        self.assertEqual("69279037", self.otp.generate_totp(self.secret, 2000000000, 8))
        self.assertEqual("65353130", self.otp.generate_totp(self.secret, 20000000000, 8))

    def test_validate_hotp(self):
        self.assertTrue(self.otp.validate_hotp("755224", self.secret, 0))
        self.assertTrue(self.otp.validate_hotp("287082", self.secret, 0))
        self.assertFalse(self.otp.validate_hotp("969429", self.secret, 0))

    def test_validate_totp(self):
        self.assertTrue(self.otp.validate_totp("07081804", self.secret, 1111111109, 8))
        self.assertTrue(self.otp.validate_totp("07081804", self.secret, 1111111084, 8))
        self.assertFalse(self.otp.validate_totp("07081804", self.secret, 1111111078, 8))
        self.assertTrue(self.otp.validate_totp("07081804", self.secret, 1111111134, 8))
        self.assertFalse(self.otp.validate_totp("07081804", self.secret, 1111111140, 8))

    def test_encode(self):
        self.assertRaises(IncorrectOTPType, self.otp.encode, "asdf", "asdf", "asdf", "asdf")
Example #13
0
        os.remove("../website/data/" + file)

    if algo == 'caesar':
        f = open("../website/data/" + file)
        encrypted_message = f.read()
        f.close()
        caesar = CaesarCipherDecrypt(encrypted_message)
        decrypted_message = caesar.decrypt(5)
        print("Decrypted Message: {}".format(decrypted_message))
        os.remove("../website/data/" + file)

    if algo == 'otp':
        f = open("../website/data/" + file)
        encrypted_message = f.read()
        f.close()
        otp = OTP(" ")
        key = key[1:-1].split(', ')
        for x in range(len(key)):
            key[x] = int(key[x])
        decrypted_message = otp.decrypt(encrypted_message, key)
        print("Decrypted Message: {}".format(decrypted_message))
        os.remove("../website/data/" + file)

    if algo == 'substitution':
        f = open("../website/data/" + file)
        encrypted_message = f.read()
        f.close()
        key = key[1:-1].split(', ')
        for x in range(len(key)):
            key[x] = int(key[x])
        substitution = SubstitutionCipher('', key)
Example #14
0
 def do_getTOTP(self, line):
     "getTOTP [digits]"
     digits = 6
     if line:
         digits = int(line.split()[0])
     print("Your TOTP code : ", OTP.generate_totp(self.secret, digits))
Example #15
0
 def test_validate_totp(self):
     self.assertTrue(OTP.validate_totp('07081804', self.secret, 1111111109, 8))
     self.assertTrue(OTP.validate_totp('07081804', self.secret, 1111111084, 8))
     self.assertFalse(OTP.validate_totp('07081804', self.secret, 1111111078, 8))
     self.assertFalse(OTP.validate_totp('07081804', self.secret, 1111111140, 8))
Example #16
0
 def test_validate_hotp(self):
     self.assertTrue(OTP.validate_hotp('755224', self.secret, 0))
     self.assertTrue(OTP.validate_hotp('287082', self.secret, 0))
     self.assertFalse(OTP.validate_hotp('969429', self.secret, 0))