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))