password_util 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/password_util/character_sets.rb +8 -0
- data/lib/password_util/config.rb +56 -0
- data/lib/password_util/generator.rb +50 -0
- data/lib/password_util.rb +56 -93
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dfc4714b8ab73246626ae199a8d874ce89fbab223466529a3059a8a952b22a26
|
4
|
+
data.tar.gz: cb5de8dd65ecb31cd05fda34369cc97b979b94c66730743d49d4ee6b382ead8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1858630fc1d0441bc54a4da9836165922480dcb776287c5602856b86692f30fd1163fa325a42b747e22421be47c02762ecf2f58026f83ff52fc744fcbb200e39
|
7
|
+
data.tar.gz: 7af824a87c53c09e64cc3e4125d2cd70fceb3c8a7bd49290eff0cc08b128ec8026f62a6f356ea67bc0017ff5bf82f75816b3e42682ee6dd19bc03d96c5a74fd7
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require_relative './character_sets'
|
2
|
+
|
3
|
+
module PasswordUtil
|
4
|
+
DEFAULT_PASSWORD_LENGTH = 8
|
5
|
+
DEFAULT_HAS_LOWER_LETTERS = true
|
6
|
+
DEFAULT_MIN_LOWER_LETTERS = 1
|
7
|
+
DEFAULT_HAS_UPPER_LETTERS = true
|
8
|
+
DEFAULT_MIN_UPPER_LETTERS = 1
|
9
|
+
DEFAULT_HAS_NUMBERS = true
|
10
|
+
DEFAULT_MIN_NUMBERS = 1
|
11
|
+
DEFAULT_HAS_SYMBOLS = true
|
12
|
+
DEFAULT_MIN_SYMBOLS = 1
|
13
|
+
|
14
|
+
class Config
|
15
|
+
class ConfigurationError < StandardError; end
|
16
|
+
|
17
|
+
attr_accessor :has_lower_letters, :has_numbers, :has_symbols, :has_upper_letters, :lower_letters, :min_lower_letters, :min_numbers, :min_symbols, :min_upper_letters, :numbers, :password_length, :symbols, :upper_letters
|
18
|
+
|
19
|
+
def initialize(params)
|
20
|
+
@upper_letters = params.fetch(:upper_letters, CharacterSets::UPPER_LETTERS)
|
21
|
+
@lower_letters = params.fetch(:lower_letters, CharacterSets::LOWER_LETTERS)
|
22
|
+
@numbers = params.fetch(:numbers, CharacterSets::NUMBERS)
|
23
|
+
@symbols = params.fetch(:symbols, CharacterSets::SYMBOLS)
|
24
|
+
|
25
|
+
@password_length = params.fetch(:password_length, DEFAULT_PASSWORD_LENGTH)
|
26
|
+
|
27
|
+
@has_lower_letters = params.fetch(:has_lower_letters, DEFAULT_HAS_LOWER_LETTERS)
|
28
|
+
@min_lower_letters = params.fetch(:min_lower_letters, DEFAULT_MIN_LOWER_LETTERS)
|
29
|
+
|
30
|
+
@has_upper_letters = params.fetch(:has_upper_letters, DEFAULT_HAS_UPPER_LETTERS)
|
31
|
+
@min_upper_letters = params.fetch(:min_upper_letters, DEFAULT_MIN_UPPER_LETTERS)
|
32
|
+
|
33
|
+
@has_numbers = params.fetch(:has_numbers, DEFAULT_HAS_NUMBERS)
|
34
|
+
@min_numbers = params.fetch(:min_numbers, DEFAULT_MIN_NUMBERS)
|
35
|
+
|
36
|
+
@has_symbols = params.fetch(:has_symbols, DEFAULT_HAS_SYMBOLS)
|
37
|
+
@min_symbols = params.fetch(:min_symbols, DEFAULT_MIN_SYMBOLS)
|
38
|
+
end
|
39
|
+
|
40
|
+
def validate!
|
41
|
+
boolean_classes = [TrueClass, FalseClass]
|
42
|
+
|
43
|
+
raise ConfigurationError, 'password_length: expected Integer' unless password_length.is_a?(Integer)
|
44
|
+
raise ConfigurationError, 'has_lower_letters: expected Boolean' unless boolean_classes.include?(has_lower_letters.class)
|
45
|
+
raise ConfigurationError, 'min_lower_letters: expected Integer' unless min_lower_letters.is_a?(Integer)
|
46
|
+
raise ConfigurationError, 'has_upper_letters: expected Boolean' unless boolean_classes.include?(has_upper_letters.class)
|
47
|
+
raise ConfigurationError, 'min_upper_letters: expected Integer' unless min_upper_letters.is_a?(Integer)
|
48
|
+
raise ConfigurationError, 'has_numbers: expected Boolean' unless boolean_classes.include?(has_numbers.class)
|
49
|
+
raise ConfigurationError, 'min_numbers: expected Integer' unless min_numbers.is_a?(Integer)
|
50
|
+
raise ConfigurationError, 'has_symbols: expected Boolean' unless boolean_classes.include?(has_symbols.class)
|
51
|
+
raise ConfigurationError, 'min_symbols: expected Integer' unless min_symbols.is_a?(Integer)
|
52
|
+
|
53
|
+
raise ConfigurationError, 'No usable character set.' unless has_lower_letters || has_upper_letters || has_numbers || has_symbols
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module PasswordUtil
|
2
|
+
class Generator
|
3
|
+
def initialize(config)
|
4
|
+
@config = config
|
5
|
+
end
|
6
|
+
|
7
|
+
def generate
|
8
|
+
config.validate!
|
9
|
+
|
10
|
+
charset = []
|
11
|
+
password = []
|
12
|
+
|
13
|
+
if config.has_upper_letters
|
14
|
+
charset << config.upper_letters
|
15
|
+
config.min_upper_letters.times do
|
16
|
+
password << config.upper_letters.sample
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
if config.has_lower_letters
|
21
|
+
charset << config.lower_letters
|
22
|
+
config.min_lower_letters.times do
|
23
|
+
password << config.lower_letters.sample
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
if config.has_numbers
|
28
|
+
charset << config.numbers
|
29
|
+
config.min_numbers.times do
|
30
|
+
password << config.numbers.sample
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
if config.has_symbols
|
35
|
+
charset << config.symbols
|
36
|
+
config.min_symbols.times do
|
37
|
+
password << config.symbols.sample
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
password.shuffle!
|
42
|
+
password << charset.sample.sample while password.length < config.password_length
|
43
|
+
password.join('')[0...config.password_length]
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
attr_reader :config
|
49
|
+
end
|
50
|
+
end
|
data/lib/password_util.rb
CHANGED
@@ -1,113 +1,76 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# Configuration exception.
|
4
|
-
class ConfigurationError < StandardError; end
|
5
|
-
|
6
|
-
UPPER_LETTERS = ('A'..'Z').to_a.freeze
|
7
|
-
LOWER_LETTERS = ('a'..'z').to_a.freeze
|
8
|
-
NUMBERS = ('0'..'9').to_a.freeze
|
9
|
-
SYMBOLS = %w[~ ` ! @ # $ % ^ & * ( ) _ - + = { \[ } \] | \\ : ; " ' < , > . ? /].freeze
|
10
|
-
|
11
|
-
##
|
12
|
-
# Validates configuration.
|
13
|
-
#
|
14
|
-
# @return [String] the generated password
|
15
|
-
def self.validate_config!
|
16
|
-
boolean_classes = [TrueClass, FalseClass]
|
17
|
-
|
18
|
-
raise ConfigurationError, 'password_length: expected Integer' unless password_length.is_a?(Integer)
|
19
|
-
raise ConfigurationError, 'has_lower_letters: expected Boolean' unless boolean_classes.include?(has_lower_letters.class)
|
20
|
-
raise ConfigurationError, 'min_lower_letters: expected Integer' unless min_lower_letters.is_a?(Integer)
|
21
|
-
raise ConfigurationError, 'has_upper_letters: expected Boolean' unless boolean_classes.include?(has_upper_letters.class)
|
22
|
-
raise ConfigurationError, 'min_upper_letters: expected Integer' unless min_upper_letters.is_a?(Integer)
|
23
|
-
raise ConfigurationError, 'has_numbers: expected Boolean' unless boolean_classes.include?(has_numbers.class)
|
24
|
-
raise ConfigurationError, 'min_numbers: expected Integer' unless min_numbers.is_a?(Integer)
|
25
|
-
raise ConfigurationError, 'has_symbols: expected Boolean' unless boolean_classes.include?(has_symbols.class)
|
26
|
-
raise ConfigurationError, 'min_symbols: expected Integer' unless min_symbols.is_a?(Integer)
|
27
|
-
|
28
|
-
raise ConfigurationError, 'No usable character set.' unless has_lower_letters || has_upper_letters || has_numbers || has_symbols
|
29
|
-
end
|
1
|
+
require_relative './password_util/config'
|
2
|
+
require_relative './password_util/generator'
|
30
3
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
self.min_symbols = 1
|
43
|
-
end
|
4
|
+
module PasswordUtil
|
5
|
+
singleton_class.attr_accessor :config
|
6
|
+
self.config = Config.new({})
|
7
|
+
|
8
|
+
class << self
|
9
|
+
##
|
10
|
+
# Resets configuration to default.
|
11
|
+
#
|
12
|
+
def reset_config
|
13
|
+
self.config = Config.new({})
|
14
|
+
end
|
44
15
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
charset = []
|
52
|
-
password = []
|
53
|
-
|
54
|
-
if has_lower_letters
|
55
|
-
charset << LOWER_LETTERS
|
56
|
-
min_lower_letters.times do
|
57
|
-
password << LOWER_LETTERS.sample
|
58
|
-
end
|
16
|
+
##
|
17
|
+
# Generates password.
|
18
|
+
#
|
19
|
+
# @return [String] the generated password
|
20
|
+
def generate
|
21
|
+
Generator.new(config).generate
|
59
22
|
end
|
60
23
|
|
61
|
-
|
62
|
-
|
63
|
-
min_upper_letters.times do
|
64
|
-
password << UPPER_LETTERS.sample
|
65
|
-
end
|
24
|
+
def has_lower_letters=(value)
|
25
|
+
config.has_lower_letters = value
|
66
26
|
end
|
67
27
|
|
68
|
-
|
69
|
-
|
70
|
-
min_numbers.times do
|
71
|
-
password << NUMBERS.sample
|
72
|
-
end
|
28
|
+
def has_numbers=(value)
|
29
|
+
config.has_numbers = value
|
73
30
|
end
|
74
31
|
|
75
|
-
|
76
|
-
|
77
|
-
min_symbols.times do
|
78
|
-
password << SYMBOLS.sample
|
79
|
-
end
|
32
|
+
def has_symbols=(value)
|
33
|
+
config.has_symbols = value
|
80
34
|
end
|
81
35
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
end
|
36
|
+
def has_upper_letters=(value)
|
37
|
+
config.has_upper_letters = value
|
38
|
+
end
|
86
39
|
|
87
|
-
|
88
|
-
|
40
|
+
def lower_letters=(value)
|
41
|
+
config.lower_letters = value
|
42
|
+
end
|
89
43
|
|
90
|
-
|
91
|
-
|
44
|
+
def min_lower_letters=(value)
|
45
|
+
config.min_lower_letters = value
|
46
|
+
end
|
92
47
|
|
93
|
-
|
94
|
-
|
48
|
+
def min_numbers=(value)
|
49
|
+
config.min_numbers = value
|
50
|
+
end
|
95
51
|
|
96
|
-
|
97
|
-
|
52
|
+
def min_symbols=(value)
|
53
|
+
config.min_symbols = value
|
54
|
+
end
|
98
55
|
|
99
|
-
|
100
|
-
|
56
|
+
def min_upper_letters=(value)
|
57
|
+
config.min_upper_letters = value
|
58
|
+
end
|
101
59
|
|
102
|
-
|
103
|
-
|
60
|
+
def numbers=(value)
|
61
|
+
config.numbers = value
|
62
|
+
end
|
104
63
|
|
105
|
-
|
106
|
-
|
64
|
+
def password_length=(value)
|
65
|
+
config.password_length = value
|
66
|
+
end
|
107
67
|
|
108
|
-
|
109
|
-
|
68
|
+
def symbols=(value)
|
69
|
+
config.symbols = value
|
70
|
+
end
|
110
71
|
|
111
|
-
|
112
|
-
|
72
|
+
def upper_letters=(value)
|
73
|
+
config.upper_letters = value
|
74
|
+
end
|
75
|
+
end
|
113
76
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: password_util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reinier John Avila
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Utility tool to generate password.
|
14
14
|
email: reinieravila@gmail.com
|
@@ -19,6 +19,9 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- bin/password_util
|
21
21
|
- lib/password_util.rb
|
22
|
+
- lib/password_util/character_sets.rb
|
23
|
+
- lib/password_util/config.rb
|
24
|
+
- lib/password_util/generator.rb
|
22
25
|
homepage: https://github.com/reinieravila/password_util.git
|
23
26
|
licenses:
|
24
27
|
- MIT
|
@@ -38,7 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
41
|
- !ruby/object:Gem::Version
|
39
42
|
version: '0'
|
40
43
|
requirements: []
|
41
|
-
rubygems_version: 3.
|
44
|
+
rubygems_version: 3.4.1
|
42
45
|
signing_key:
|
43
46
|
specification_version: 4
|
44
47
|
summary: Password Generation Utility Tool
|