toolrack 0.8.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d2de080a19bcf745dd39bc1125df5cbc061ca67af65a1068847fe01c4c7af6a
4
- data.tar.gz: 45ab47d974811ea0c491bdc592e743c2b1e5afa3f7b74b3141c3b3bf6d1fb3c1
3
+ metadata.gz: e2252d8ade57bb6f6bb8792c05eafdd148e6949f0ba161232f28cad4deba98d0
4
+ data.tar.gz: 10f5349171d87a626c13e6a84c990eadf64f03c772f68ef439194a3f7fbc6aa5
5
5
  SHA512:
6
- metadata.gz: a1a7ebfc77d5319f7d3b768d7c27c213b858a414663f1bfa5992fa8c2ac0b8f775348a2298618cc7d84141269c383be0390c3bfe00fafe5a8c377cc67b89066c
7
- data.tar.gz: a9a4d41057b2328f03e407d84ef1350ee8a1ad575d2c80c7b166d818c6172ec92fb338a22726acdd27dc99ab5d0098a4ccfe2f620b1d7de4a3a8a475f14ba076
6
+ metadata.gz: 12e80e95f7326b95365df855b9b56ceb71663d31794e257b304fc1baf24df9144cad100a52bd3fc695347806dcc2173da0d80f9a6b5004c27cd480dfbb264367
7
+ data.tar.gz: 1b535e82f1c75c4bee974ed41f3c1d6f0705c352572a332cb2f4f4a670d4be77fb63fd2d68a15b8591ae626b6721f8473f4049d4a276aa21131da7eb15640ff3
@@ -15,10 +15,10 @@ module Antrapol
15
15
  else
16
16
  obj.empty?
17
17
  end
18
- #elsif obj.respond_to?(:length)
19
- # obj.length == 0
20
- #elsif obj.respond_to?(:size)
21
- # obj.size == 0
18
+ elsif obj.respond_to?(:length)
19
+ obj.length == 0
20
+ elsif obj.respond_to?(:size)
21
+ obj.size == 0
22
22
  else
23
23
  false
24
24
  end
@@ -55,7 +55,7 @@ module Antrapol
55
55
 
56
56
  def from_b58(str)
57
57
  return "" if is_empty?(str)
58
- Base58.base58.to_binary(str)
58
+ Base58.base58_to_binary(str)
59
59
  end
60
60
 
61
61
  def b58_to_number(str)
@@ -0,0 +1,301 @@
1
+
2
+ require 'securerandom'
3
+
4
+ module Antrapol
5
+ module ToolRack
6
+ module PasswordUtils
7
+ include Antrapol::ToolRack::ConditionUtils
8
+
9
+ class PasswordUtilsError < StandardError; end
10
+
11
+ # complexity
12
+ # 1 : lowercase alphabet
13
+ # 2 : lower + upper alphabet
14
+ # 3 : lower + upper + number
15
+ # 4 : lower + upper + number + symbol
16
+ def generate_random_password(length = 12, opts = { complexity: 4, enforce_quality: true })
17
+
18
+
19
+ length = 12 if is_empty?(length)
20
+ length = length.to_i
21
+ length = 12 if length <= 0
22
+
23
+ logger.debug "Length : #{length}"
24
+
25
+ if not_empty?(opts)
26
+ complexity = opts[:complexity] || 4
27
+
28
+ raise PasswordUtilsError, "Password length too short but complexity too high. Not able generate the password with required complexity." if length <= complexity
29
+
30
+ enforce_quality = opts[:enforce_quality] || true
31
+ end
32
+
33
+ complexity = 4 if is_empty?(complexity)
34
+ complexity = 4 if complexity > 4
35
+ complexity = 1 if complexity < 1
36
+
37
+ logger.debug "Complexity : #{complexity}"
38
+
39
+ enforce_quality = true if is_empty?(enforce_quality) or not is_bool?(enforce_quality)
40
+
41
+ res = []
42
+ antropy = [("a".."z"),("A".."Z"),(0..9),("!".."?")]
43
+ selection = antropy[0..complexity-1].map { |s| s.to_a }.flatten
44
+
45
+ fres = nil
46
+ loop do
47
+
48
+ len = length
49
+ processed = 0
50
+ loop do
51
+ #res += selection.sample(length)
52
+ res += selection.sort_by { SecureRandom.random_number }
53
+ break if res.length >= length
54
+ end
55
+
56
+ fres = res[0...length].join
57
+
58
+ if enforce_quality
59
+ case complexity
60
+ when 1
61
+ if all_lowercase_alpha?(fres)
62
+ break
63
+ else
64
+ logger.debug "Failed lowercase alpha quality check. #{fres} - Regenerating..."
65
+ res.clear
66
+ end
67
+ when 2
68
+ st, dst = all_alpha?(fres)
69
+ if st
70
+ break
71
+ else
72
+ logger.debug "Failed all alpha quality check. #{dst} - Regenerating..."
73
+ res.clear
74
+ end
75
+ when 3
76
+ st, dst = all_alpha_numeric?(fres)
77
+ if st
78
+ break
79
+ else
80
+ logger.debug "Failed alpha numeric quality check. #{dst} - Regenerating"
81
+ res.clear
82
+ end
83
+ when 4
84
+ st, dst = all_alpha_numeric_and_symbol?(fres)
85
+ if st
86
+ break
87
+ else
88
+ logger.debug "Failed alpha numeric + symbol quality check. #{fres} / #{dst} - Regenerating"
89
+ res.clear
90
+ end
91
+ else
92
+ logger.debug "Unknown complexity?? #{complexity}"
93
+ break
94
+ end
95
+ else
96
+ break
97
+ end
98
+
99
+ end
100
+
101
+ fres
102
+
103
+ #length = 12 if is_empty?(length)
104
+ #length = length.to_i
105
+ #length = 12 if length <= 0
106
+
107
+ #antropy = ('!'..'~').to_a
108
+ #antropy.sort_by { SecureRandom.random_number }.join[0...length]
109
+ end
110
+ alias_method :gen_rand_pass, :generate_random_password
111
+ alias_method :gen_pass, :generate_random_password
112
+
113
+ def all_lowercase_alpha?(str)
114
+ return false if is_empty?(str) or not str.is_a?(String)
115
+
116
+ s = str.split("")
117
+ lalpha = ('a'..'z').to_a
118
+
119
+ (s.difference(lalpha).length == 0)
120
+ end
121
+
122
+ def has_lowercase_alpha?(str)
123
+ return false if is_empty?(str) or not str.is_a?(String)
124
+
125
+ s = str.split("")
126
+ lalpha = ('a'..'z').to_a
127
+
128
+ (s & lalpha).length > 0
129
+ end
130
+
131
+ def all_uppercase_alpha?(str)
132
+ return false if is_empty?(str) or not str.is_a?(String)
133
+
134
+ s = str.split("")
135
+ ualpha = ('A'..'Z').to_a
136
+
137
+ s.difference(ualpha).length == 0
138
+ end
139
+
140
+ def has_uppercase_alpha?(str)
141
+ return false if is_empty?(str) or not str.is_a?(String)
142
+
143
+ s = str.split("")
144
+ ualpha = ('A'..'Z').to_a
145
+
146
+ (s & ualpha).length > 0
147
+ end
148
+
149
+ def all_alpha?(str)
150
+ return false if is_empty?(str) or not str.is_a?(String)
151
+
152
+ s = str.split("")
153
+ lalpha = ('a'..'z').to_a
154
+ ualpha = ('A'..'Z').to_a
155
+ num = ('0'..'9').to_a
156
+ sym = ('!'..'?').to_a
157
+
158
+ alpha = [lalpha, ualpha].flatten
159
+
160
+ t1 = (alpha.difference(s).length == 0)
161
+ t2 = (alpha.difference(s).length == 0)
162
+
163
+ t3 = (s & num).length > 0
164
+ t4 = (s & sym).length > 0
165
+
166
+ [!(t1 or t2 or t3 or t4), res = { has_lower_alpha: t1, has_upper_alpha: t2, has_num: t3, has_symbol: t4 }]
167
+ end
168
+
169
+ def has_alpha?(str)
170
+ return false if is_empty?(str) or not str.is_a?(String)
171
+
172
+ s = str.split("")
173
+ lalpha = ('a'..'z').to_a
174
+ ualpha = ('A'..'Z').to_a
175
+ alpha = [lalpha, ualpha].flatten
176
+
177
+ (alpha & s).length > 0
178
+ end
179
+
180
+ def has_number?(str)
181
+ return false if is_empty?(str)
182
+
183
+ str = str.to_s if not str.is_a?(String)
184
+
185
+ s = str.split("")
186
+ num = ('0'..'9').to_a
187
+
188
+ (s & num).length > 0
189
+
190
+ end
191
+
192
+ def all_number?(str)
193
+ return false if is_empty?(str)
194
+
195
+ str = str.to_s if not str.is_a?(String)
196
+
197
+ s = str.split("")
198
+ num = ('0'..'9').to_a
199
+
200
+ !(s.difference(num).length > 0)
201
+
202
+ end
203
+
204
+ def all_symbol?(str)
205
+ return false if is_empty?(str)
206
+
207
+ s = str.split("")
208
+ sym = ('!'..'?').to_a
209
+ !(s.difference(sym).length > 0)
210
+
211
+ end
212
+
213
+ def has_symbol?(str)
214
+ return false if is_empty?(str)
215
+
216
+ s = str.split("")
217
+ sym = ('!'..'?').to_a
218
+
219
+ p (s & sym)
220
+ (s & sym).length > 0
221
+ end
222
+
223
+
224
+ def all_alpha_numeric?(str)
225
+ return false if is_empty?(str)
226
+
227
+ s = str.split("")
228
+ lalpha = ('a'..'z').to_a
229
+ ualpha = ('A'..'Z').to_a
230
+ num = ('0'..'9').to_a
231
+ sym = ('!'..'?').to_a
232
+ sym = sym.difference(num)
233
+
234
+ t1 = ((s & lalpha).length > 0)
235
+ t2 = ((s & ualpha).length > 0)
236
+ t3 = ((s & num).length > 0)
237
+
238
+ t4 = ((s & sym).length > 0)
239
+
240
+ [(t1 and t2 and t3 and !t4), res = { has_lower_alpha: t1, has_upper_alpha: t2, has_num: t3, has_symbol: t4 }]
241
+ end
242
+
243
+ def has_alpha_numeric?(str)
244
+ return false if is_empty?(str)
245
+
246
+ s = str.split("")
247
+ lalpha = ('a'..'z').to_a
248
+ ualpha = ('A'..'Z').to_a
249
+ num = ('0'..'9').to_a
250
+ alphanum = [lalpha, ualpha, num].flatten
251
+
252
+ (s & alphanum).length > 0
253
+
254
+ end
255
+
256
+ def all_alpha_numeric_and_symbol?(str)
257
+ return false if is_empty?(str)
258
+
259
+ s = str.split("")
260
+ lalpha = ('a'..'z').to_a
261
+ ualpha = ('A'..'Z').to_a
262
+ num = ('0'..'9').to_a
263
+ sym = ('!'..'?').to_a
264
+ sym = sym.difference(num)
265
+
266
+ t1 = ((s & lalpha).length > 0)
267
+ t2 = ((s & ualpha).length > 0)
268
+ t3 = ((s & num).length > 0)
269
+ t4 = ((s & sym).length > 0)
270
+
271
+ [(t1 and t2 and t3 and t4), res = { has_lower_alpha: t1, has_upper_alpha: t2, has_num: t3, has_symbol: t4 }]
272
+ end
273
+
274
+ def has_alpha_numeric_or_symbol?(str)
275
+ return false if is_empty?(str)
276
+
277
+ s = str.split("")
278
+ lalpha = ('a'..'z').to_a
279
+ ualpha = ('A'..'Z').to_a
280
+ num = ('0'..'9').to_a
281
+ sym = ('!'..'?').to_a
282
+ sym = sym.difference(num)
283
+
284
+ t1 = ((s & lalpha).length > 0)
285
+ t2 = ((s & ualpha).length > 0)
286
+ t3 = ((s & num).length > 0)
287
+ t4 = ((s & sym).length > 0)
288
+
289
+ [(t1 or t2 or t3 or t4), res = { has_lower_alpha: t1, has_upper_alpha: t2, has_num: t3, has_symbol: t4 }]
290
+ end
291
+
292
+ private
293
+ def logger
294
+ logger = Antrapol::ToolRack::Logger.instance.glogger
295
+ logger.tag = :pass_utils
296
+ logger
297
+ end
298
+
299
+ end
300
+ end
301
+ end
@@ -1,6 +1,6 @@
1
1
  module Antrapol
2
2
  module ToolRack
3
- VERSION = "0.8.1"
3
+ VERSION = "0.9.2"
4
4
  end
5
5
  end
6
6
 
data/lib/toolrack.rb CHANGED
@@ -11,6 +11,7 @@ require_relative 'toolrack/condition_utils'
11
11
  require_relative 'toolrack/process_utils'
12
12
  require_relative 'toolrack/runtime_utils'
13
13
  require_relative 'toolrack/data_conversion_utils'
14
+ require_relative 'toolrack/password_utils'
14
15
 
15
16
  module Antrapol
16
17
  module ToolRack
@@ -22,5 +23,7 @@ end
22
23
 
23
24
  ToolRack = Antrapol::ToolRack
24
25
  ToolRack::DataConv = Antrapol::ToolRack::DataConversionUtils
26
+ ToolRack::CondUtils = ToolRack::ConditionUtils
27
+ ToolRack::PassUtils = ToolRack::PasswordUtils
25
28
 
26
29
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toolrack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-31 00:00:00.000000000 Z
11
+ date: 2021-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tlogger
@@ -73,6 +73,7 @@ files:
73
73
  - lib/toolrack/data_conversion_utils.rb
74
74
  - lib/toolrack/exception_utils.rb
75
75
  - lib/toolrack/global.rb
76
+ - lib/toolrack/password_utils.rb
76
77
  - lib/toolrack/process_utils.rb
77
78
  - lib/toolrack/runtime_utils.rb
78
79
  - lib/toolrack/utils.rb