8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# File 'lib/synthra/types/text_content/security.rb', line 8
def generate_random(rng, context, args)
min_length = args[:min_length] || 8
min_upper = args[:min_upper] || 1
min_lower = args[:min_lower] || 1
min_numbers = args[:min_numbers] || 1
min_symbols = args[:min_symbols] || 0
uppercase = ('A'..'Z').to_a
lowercase = ('a'..'z').to_a
numbers = ('0'..'9').to_a
symbols = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '+', '=']
password = []
password.concat(min_upper.times.map { rng.sample(uppercase) })
password.concat(min_lower.times.map { rng.sample(lowercase) })
password.concat(min_numbers.times.map { rng.sample(numbers) })
password.concat(min_symbols.times.map { rng.sample(symbols) })
all_chars = uppercase + lowercase + numbers + symbols
remaining = min_length - password.length
password.concat(remaining.times.map { rng.sample(all_chars) }) if remaining > 0
password.shuffle(random: rng.instance_variable_get(:@random)).join
end
|