toolrack 0.7.0 → 0.9.1

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: 3b5c17ec1e90be20f1ec19300d51804183a44223b5b761bdb00475ed7d930063
4
- data.tar.gz: b7776ecbd1cbad8a7541f32085d3db57a24867ef6ed2d0f9b98f5ad724e3d1a4
3
+ metadata.gz: 571e36485e6a124ee83052bd40d53b1612973e3f7636bf8432ae5d4d4f641f35
4
+ data.tar.gz: 7042d576dec084cc3eccbbb49e74c2ff8e7175d4e69c3ddb2fe9027b7a65d0cd
5
5
  SHA512:
6
- metadata.gz: 835aa468defaf9c46aae59586c1ae1315c9112b5e116846be4f5f63661faff5d2cf1977082c313768434b6af2a8b82429db8b438a44aaf100e386dbfa2628e1b
7
- data.tar.gz: 70ab89133d5088f7a04fd167a2dd9e402368323fc29bbbbeb55266bcf1d5abb84fc847bbd8ab470a0ec56afe6c83281fab174d4a2d0c98151d61c8ce0822fb8f
6
+ metadata.gz: 32a5ebec97858317a3a500db4e2bd315a80e67bee888b302fc45ff0aacd46749b77c25b9485d3faf6588fe0efbb1a72041a731366809dd8471fe73c1aa16437e
7
+ data.tar.gz: e76ec4875a11dbf84634e527a665492ec9665f55747ba6aaf5007b28cb92bd1ba682072c3186b218b87a8954f4623d64908ce0b4a406573b521fb62f36128b25
@@ -1,5 +1,6 @@
1
1
 
2
2
  require 'base64'
3
+ require 'base58'
3
4
 
4
5
  module Antrapol
5
6
  module ToolRack
@@ -41,6 +42,27 @@ module Antrapol
41
42
  end
42
43
  end
43
44
 
45
+ def to_b58(val)
46
+ return "" if is_empty?(val)
47
+
48
+ case val
49
+ when Integer
50
+ Base58.int_to_base58(val)
51
+ else
52
+ Base58.binary_to_base58(val.force_encoding('BINARY'))
53
+ end
54
+ end
55
+
56
+ def from_b58(str)
57
+ return "" if is_empty?(str)
58
+ Base58.base58_to_binary(str)
59
+ end
60
+
61
+ def b58_to_number(str)
62
+ return 0 if is_empty?(str)
63
+ Base58.base58_to_int(str)
64
+ end
65
+
44
66
  def from_hex(str)
45
67
  if not_empty?(str)
46
68
  str.scan(/../).map { |x| x.hex.chr }.join
@@ -90,6 +112,8 @@ module Antrapol
90
112
  nil
91
113
  end
92
114
  end
115
+ alias_method :str_to_bool, :string_to_bool
116
+ alias_method :string_to_boolean, :string_to_bool
93
117
 
94
118
  end
95
119
  end
@@ -0,0 +1,310 @@
1
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2
+ # Version 2, December 2004
3
+ #
4
+ # Copyright (C) 2021 Chris Liaw <chrisliaw@antrapol.com>
5
+ # Author: Chris Liaw <chrisliaw@antrapol.com>
6
+ #
7
+ # Everyone is permitted to copy and distribute verbatim or modified
8
+ # copies of this license document, and changing it is allowed as long
9
+ # as the name is changed.
10
+ #
11
+ # DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
12
+ # TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
13
+ #
14
+ # 0. You just DO WHAT THE FUCK YOU WANT TO.
15
+
16
+
17
+ require 'securerandom'
18
+
19
+ module Antrapol
20
+ module ToolRack
21
+ module PasswordUtils
22
+ include Antrapol::ToolRack::ConditionUtils
23
+
24
+ # complexity
25
+ # 1 : lowercase alphabet
26
+ # 2 : lower + upper alphabet
27
+ # 3 : lower + upper + number
28
+ # 4 : lower + upper + number + symbol
29
+ def generate_random_password(length = 12, opts = { complexity: 4, enforce_quality: true })
30
+
31
+ length = 12 if is_empty?(length)
32
+ length = length.to_i
33
+ length = 12 if length <= 0
34
+
35
+ logger.debug "Length : #{length}"
36
+
37
+ if not_empty?(opts)
38
+ complexity = opts[:complexity] || 4
39
+ enforce_quality = opts[:enforce_quality] || true
40
+ end
41
+
42
+ complexity = 4 if is_empty?(complexity)
43
+ complexity = 4 if complexity > 4
44
+ complexity = 1 if complexity < 1
45
+
46
+ logger.debug "Complexity : #{complexity}"
47
+
48
+ enforce_quality = true if is_empty?(enforce_quality) or not is_bool?(enforce_quality)
49
+
50
+ res = []
51
+ antropy = [("a".."z"),("A".."Z"),(0..9),("!".."?")]
52
+ selection = antropy[0..complexity-1].map { |s| s.to_a }.flatten
53
+
54
+ fres = nil
55
+ loop do
56
+
57
+ len = length
58
+ processed = 0
59
+ loop do
60
+ #res += selection.sample(length)
61
+ res += selection.sort_by { SecureRandom.random_number }
62
+ break if res.length >= length
63
+ end
64
+
65
+ fres = res[0...length].join
66
+
67
+ if enforce_quality
68
+ case complexity
69
+ when 1
70
+ if all_lowercase_alpha?(fres)
71
+ break
72
+ else
73
+ logger.debug "Failed lowercase alpha quality check. #{fres} - Regenerating..."
74
+ res.clear
75
+ end
76
+ when 2
77
+ st, dst = all_alpha?(fres)
78
+ if st
79
+ break
80
+ else
81
+ logger.debug "Failed all alpha quality check. #{dst} - Regenerating..."
82
+ res.clear
83
+ end
84
+ when 3
85
+ st, dst = all_alpha_numeric?(fres)
86
+ if st
87
+ break
88
+ else
89
+ logger.debug "Failed alpha numeric quality check. #{dst} - Regenerating"
90
+ res.clear
91
+ end
92
+ when 4
93
+ st, dst = all_alpha_numeric_and_symbol?(fres)
94
+ if st
95
+ break
96
+ else
97
+ logger.debug "Failed alpha numeric + symbol quality check. #{fres} / #{dst} - Regenerating"
98
+ res.clear
99
+ end
100
+ else
101
+ logger.debug "Unknown complexity?? #{complexity}"
102
+ break
103
+ end
104
+ else
105
+ break
106
+ end
107
+
108
+ end
109
+
110
+ fres
111
+
112
+ #length = 12 if is_empty?(length)
113
+ #length = length.to_i
114
+ #length = 12 if length <= 0
115
+
116
+ #antropy = ('!'..'~').to_a
117
+ #antropy.sort_by { SecureRandom.random_number }.join[0...length]
118
+ end
119
+ alias_method :gen_rand_pass, :generate_random_password
120
+ alias_method :gen_pass, :generate_random_password
121
+
122
+ def all_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.difference(lalpha).length == 0)
129
+ end
130
+
131
+ def has_lowercase_alpha?(str)
132
+ return false if is_empty?(str) or not str.is_a?(String)
133
+
134
+ s = str.split("")
135
+ lalpha = ('a'..'z').to_a
136
+
137
+ (s & lalpha).length > 0
138
+ end
139
+
140
+ def all_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.difference(ualpha).length == 0
147
+ end
148
+
149
+ def has_uppercase_alpha?(str)
150
+ return false if is_empty?(str) or not str.is_a?(String)
151
+
152
+ s = str.split("")
153
+ ualpha = ('A'..'Z').to_a
154
+
155
+ (s & ualpha).length > 0
156
+ end
157
+
158
+ def all_alpha?(str)
159
+ return false if is_empty?(str) or not str.is_a?(String)
160
+
161
+ s = str.split("")
162
+ lalpha = ('a'..'z').to_a
163
+ ualpha = ('A'..'Z').to_a
164
+ num = ('0'..'9').to_a
165
+ sym = ('!'..'?').to_a
166
+
167
+ alpha = [lalpha, ualpha].flatten
168
+
169
+ t1 = (alpha.difference(s).length == 0)
170
+ t2 = (alpha.difference(s).length == 0)
171
+
172
+ t3 = (s & num).length > 0
173
+ t4 = (s & sym).length > 0
174
+
175
+ [!(t1 or t2 or t3 or t4), res = { has_lower_alpha: t1, has_upper_alpha: t2, has_num: t3, has_symbol: t4 }]
176
+ end
177
+
178
+ def has_alpha?(str)
179
+ return false if is_empty?(str) or not str.is_a?(String)
180
+
181
+ s = str.split("")
182
+ lalpha = ('a'..'z').to_a
183
+ ualpha = ('A'..'Z').to_a
184
+ alpha = [lalpha, ualpha].flatten
185
+
186
+ (alpha & s).length > 0
187
+ end
188
+
189
+ def has_number?(str)
190
+ return false if is_empty?(str)
191
+
192
+ str = str.to_s if not str.is_a?(String)
193
+
194
+ s = str.split("")
195
+ num = ('0'..'9').to_a
196
+
197
+ (s & num).length > 0
198
+
199
+ end
200
+
201
+ def all_number?(str)
202
+ return false if is_empty?(str)
203
+
204
+ str = str.to_s if not str.is_a?(String)
205
+
206
+ s = str.split("")
207
+ num = ('0'..'9').to_a
208
+
209
+ !(s.difference(num).length > 0)
210
+
211
+ end
212
+
213
+ def all_symbol?(str)
214
+ return false if is_empty?(str)
215
+
216
+ s = str.split("")
217
+ sym = ('!'..'?').to_a
218
+ !(s.difference(sym).length > 0)
219
+
220
+ end
221
+
222
+ def has_symbol?(str)
223
+ return false if is_empty?(str)
224
+
225
+ s = str.split("")
226
+ sym = ('!'..'?').to_a
227
+
228
+ p (s & sym)
229
+ (s & sym).length > 0
230
+ end
231
+
232
+
233
+ def all_alpha_numeric?(str)
234
+ return false if is_empty?(str)
235
+
236
+ s = str.split("")
237
+ lalpha = ('a'..'z').to_a
238
+ ualpha = ('A'..'Z').to_a
239
+ num = ('0'..'9').to_a
240
+ sym = ('!'..'?').to_a
241
+ sym = sym.difference(num)
242
+
243
+ t1 = ((s & lalpha).length > 0)
244
+ t2 = ((s & ualpha).length > 0)
245
+ t3 = ((s & num).length > 0)
246
+
247
+ t4 = ((s & sym).length > 0)
248
+
249
+ [(t1 and t2 and t3 and !t4), res = { has_lower_alpha: t1, has_upper_alpha: t2, has_num: t3, has_symbol: t4 }]
250
+ end
251
+
252
+ def has_alpha_numeric?(str)
253
+ return false if is_empty?(str)
254
+
255
+ s = str.split("")
256
+ lalpha = ('a'..'z').to_a
257
+ ualpha = ('A'..'Z').to_a
258
+ num = ('0'..'9').to_a
259
+ alphanum = [lalpha, ualpha, num].flatten
260
+
261
+ (s & alphanum).length > 0
262
+
263
+ end
264
+
265
+ def all_alpha_numeric_and_symbol?(str)
266
+ return false if is_empty?(str)
267
+
268
+ s = str.split("")
269
+ lalpha = ('a'..'z').to_a
270
+ ualpha = ('A'..'Z').to_a
271
+ num = ('0'..'9').to_a
272
+ sym = ('!'..'?').to_a
273
+ sym = sym.difference(num)
274
+
275
+ t1 = ((s & lalpha).length > 0)
276
+ t2 = ((s & ualpha).length > 0)
277
+ t3 = ((s & num).length > 0)
278
+ t4 = ((s & sym).length > 0)
279
+
280
+ [(t1 and t2 and t3 and t4), res = { has_lower_alpha: t1, has_upper_alpha: t2, has_num: t3, has_symbol: t4 }]
281
+ end
282
+
283
+ def has_alpha_numeric_or_symbol?(str)
284
+ return false if is_empty?(str)
285
+
286
+ s = str.split("")
287
+ lalpha = ('a'..'z').to_a
288
+ ualpha = ('A'..'Z').to_a
289
+ num = ('0'..'9').to_a
290
+ sym = ('!'..'?').to_a
291
+ sym = sym.difference(num)
292
+
293
+ t1 = ((s & lalpha).length > 0)
294
+ t2 = ((s & ualpha).length > 0)
295
+ t3 = ((s & num).length > 0)
296
+ t4 = ((s & sym).length > 0)
297
+
298
+ [(t1 or t2 or t3 or t4), res = { has_lower_alpha: t1, has_upper_alpha: t2, has_num: t3, has_symbol: t4 }]
299
+ end
300
+
301
+ private
302
+ def logger
303
+ logger = Antrapol::ToolRack::Logger.instance.glogger
304
+ logger.tag = :pass_utils
305
+ logger
306
+ end
307
+
308
+ end
309
+ end
310
+ end
@@ -1,6 +1,6 @@
1
1
  module Antrapol
2
2
  module ToolRack
3
- VERSION = "0.7.0"
3
+ VERSION = "0.9.1"
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
 
data/toolrack.gemspec CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.require_paths = ["lib"]
28
28
 
29
29
  spec.add_dependency "tlogger", "~> 0.21"
30
+ spec.add_dependency "base58"
30
31
 
31
32
  spec.add_development_dependency "devops_helper", "~> 0.1.0"
32
33
  end
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.7.0
4
+ version: 0.9.1
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-17 00:00:00.000000000 Z
11
+ date: 2021-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tlogger
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.21'
27
+ - !ruby/object:Gem::Dependency
28
+ name: base58
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: devops_helper
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -59,6 +73,7 @@ files:
59
73
  - lib/toolrack/data_conversion_utils.rb
60
74
  - lib/toolrack/exception_utils.rb
61
75
  - lib/toolrack/global.rb
76
+ - lib/toolrack/password_utils.rb
62
77
  - lib/toolrack/process_utils.rb
63
78
  - lib/toolrack/runtime_utils.rb
64
79
  - lib/toolrack/utils.rb