import random
import time
import math
import binascii
import struct
import os
def microtime(get_as_float = False):
if get_as_float:
return time.time()
else:
return '%f %d' % math.modf(time.time())
#
# Generate a pseudo-random password, alternating consonants and vowels to
# assist human readability. Password strength is flexible:
#
# 0 = lowercase letters only
# 1 = add uppercase consonants
# 2 = add uppercase vowels
# 3 = add numbers
# 4 = add special characters
#
# @param int length the desired length of the password.
# @param int strength the desired strength of the password.
def generatePassword(length, strength=0):
# vowels and consonants excluding the letters o, i and l
# because they can be mistaken for other letters or numbers.
vowels = 'aeuy'
consonants = 'bcdfghjkmnpqrstvwxyz'
if strength >= 1:
consonants += consonants.upper()
if strength >= 2:
vowels += vowels.upper()
if strength >= 3:
consonants += '23456789'
if strength >= 4:
consonants += '@$%^'
password = ''
#print(microtime())
times = microtime().split(' ')
seed = int(times[1]) * 100000000
random.seed(seed)
alt = seed % 2
for i in range(length):
if alt == 1:
password += consonants[random.randint(1, 100000) % len(consonants)]
alt = 0
else:
password += vowels[random.randint(1, 100000) % len(vowels)]
alt = 1
return password
def createDbFolderName(filename, email, access_key):
return "%s_%s_%s" % (binascii.hexlify(filename), binascii.hexlify(email),
binascii.hexlify(access_key))
# /**
# * Iterate over all database folders in 'dbroot', explode names
# * on underscore, and decode hexed names.
# *
# * @return array multi-dimensional array containing decoded db name
# * pieces plus actual folder/file names and expiry date.
# */
def getDatabaseFolders(root):
databases = []
folders = os.listdir(root)
for folder in folders:
if not os.path.isdir(os.path.join(root, folder)):
continue
# split on underscore - skip files without four elements.
parts = folder.split('_')
if len(parts) != 3:
continue
database = {
'log_file': binascii.unhexlify(parts[0]),
'email': binascii.unhexlify(parts[1]),
'access_key': binascii.unhexlify(parts[2]),
# 'time' : intval( $parts[3]),
# 'expires' : intval( $parts[3] ) +
# ( $this->getDaysToKeepLogs() * 24 * 60 * 60 ),
'folderName': os.path.join(root, folder)}
if os.path.exists(os.path.join(database['folderName'], 'testdb.db')):
database['dbFile'] = os.path.join(database['folderName'], 'testdb.db')
if os.path.exists(os.path.join(database['folderName'], 'status')):
database['statusFile'] = os.path.join(database['folderName'], 'status')
database['hasLogFile'] = os.path.exists(os.path.join(database['folderName'], database['log_file']))
database['permission'] = os.path.exists(os.path.join(database['folderName'], 'permission'))
databases.append(database)
return databases
if __name__ == '__main__':
for i in range(10):
print(generatePassword(8, 3))
print(generatePassword(8, 4))