Revision dca2a31f

b/snf-app/synnefo/api/util.py
39 39
from functools import wraps
40 40
from hashlib import sha256
41 41
from random import choice
42
from string import ascii_letters, digits
42
from string import digits, lowercase, uppercase
43 43
from time import time
44 44
from traceback import format_exc
45 45
from wsgiref.handlers import format_date_time
......
101 101

  
102 102
    return utc_since
103 103

  
104
def random_password(length=8):
105
    pool = ascii_letters + digits
106
    return ''.join(choice(pool) for i in range(length))
104

  
105
def random_password():
106
    """Generates a random password
107
    
108
    We try to generate a windows compliant password: it must contain at least
109
    one charachter from each of the groups: upper case, lower case, digits.
110
    """
111
    
112
    pool = lowercase + uppercase + digits
113
    lowerset = set(lowercase)
114
    upperset = set(uppercase)
115
    digitset = set(digits)
116
    length = 10
117
    tries = 10
118
    
119
    for i in range(tries):
120
        password = ''.join(choice(pool) for i in range(length))
121
        chars = set(password)
122
        if chars & lowerset and chars & upperset and chars & digitset:
123
            break
124
    
125
    return password
126

  
107 127

  
108 128
def zeropad(s):
109 129
    """Add zeros at the end of a string in order to make its length

Also available in: Unified diff