leetpassword 0.1.1 → 1.0.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 525ed07cdf7cb955fea1468d151e39b33493e8382e5243702f8601606f897206
4
+ data.tar.gz: 77ce5322708ffb6a0295988e3049d619a855ab09434d83cd6dc5bef73ce16f43
5
+ SHA512:
6
+ metadata.gz: e670eaa8346bc1b380a0644f4d4797c945ee51cbf5a79c7667943581c4d5691f0f88b0ad50c61131181a3ec7f9ab14f78fcfb61e01592b51d598dab09520c650
7
+ data.tar.gz: 318377588112f117415b5cbbc56c368afd4e0fb16c29179dc54ea2d38536efa1a6299c820312ac2f81ed550c51fdf144b5a167772816f67f0a975d65920f57dd
checksums.yaml.gz.sig ADDED
Binary file
data/lib/leetpassword.rb CHANGED
@@ -2,46 +2,128 @@
2
2
 
3
3
  # file: leetpassword.rb
4
4
 
5
- require 'random-word'
5
+ require 'random_word'
6
6
 
7
7
  class LeetPassword
8
8
 
9
- def self.generate(max_len=nil, subs={i: '1', o: '0', e: '3'})
9
+ # note: nowadays it's typical for passwords to be required to
10
+ # contain at least 1 symbol, 2 uppercase characters and 2 numerals
11
+ #
12
+ def self.generate(max_len=nil, subs: {i: '1', o: '0', e: '3'},
13
+ symlist: ['@'], upcase: 2, symchar: 1, debug: false,
14
+ verbose: true)
15
+
16
+ max_len += symchar if max_len
10
17
 
11
18
  if max_len and max_len <= 6 then
12
19
  raise "max length must be greater than 6 characters"
13
20
  end
14
21
 
15
- noun = RandomWord.nouns.next.gsub(/_/,'')
22
+ rawnoun = RandomWord.nouns.next
23
+ hint1 = rawnoun.clone
24
+ noun = rawnoun.gsub(/_/,'')
16
25
  if max_len then
17
26
  until noun.length >= 6 and noun.length <= max_len
18
- noun = RandomWord.nouns.next.gsub(/_/,'')
27
+ rawnoun = RandomWord.nouns.next
28
+ hint1 = rawnoun.clone
29
+ noun = rawnoun.gsub(/_/,'')
19
30
  end
20
31
  end
21
32
 
33
+
22
34
  subs.each{|k,v| noun.gsub!(k.to_s,v)}
23
- return noun if noun.length > 7
24
35
 
25
- adj = RandomWord.adjs.next.gsub(/_/,'')
36
+ if noun.length > 7 then
37
+
38
+ n = upcase / 2
39
+ r = upcase - n
40
+ noun.sub!(/[a-z]{#{n}}/) {|x| x.upcase}
41
+ noun.sub!(/[a-z]{#{r}}/) {|x| x.upcase}
42
+
43
+ noun += symlist.sample
44
+ puts 'returning a noun' if debug
45
+ puts 'hint: ' + hint1 if verbose
46
+ return [noun, :noun, hint1]
47
+ end
48
+
49
+ rawadj = RandomWord.adjs.next
50
+ hint2 = rawadj.clone
51
+ adj = rawadj.gsub(/_/,'')
52
+
26
53
  if max_len then
27
54
  until adj.length >= 6 and adj.length <= max_len
28
- adj = RandomWord.adjs.next.gsub(/_/,'')
55
+ rawadj = RandomWord.adjs.next
56
+ hint2 = rawadj.clone
57
+ adj = rawadj.gsub(/_/,'')
29
58
  end
30
59
  end
31
60
 
61
+
32
62
  subs.each{|k,v| adj.gsub!(k.to_s,v)}
33
63
 
34
- return adj if adj.length > 7
64
+ if adj.length > 7 then
65
+ n = upcase / 2
66
+ r = upcase - n
67
+ adj.sub!(/[a-z]{#{n}}/) {|x| x.upcase}
68
+ adj.sub!(/[a-z]{#{r}}/) {|x| x.upcase}
69
+ adj += symlist.sample
70
+ puts 'returning an adjective' if debug
71
+ puts 'hint: ' + hint2 if verbose
72
+ return [adj, :adj, hint2]
73
+ end
74
+
75
+ hint = hint1 + ' ' + hint2
35
76
 
36
77
  if max_len then
37
- if (adj+noun).length <= max_len then
38
- return adj + noun
78
+
79
+ words = [noun, adj]
80
+
81
+ n = upcase / 2
82
+ r = upcase - n
83
+ words[0].sub!(/.{#{n}}/) {|x| x.upcase}
84
+ words[-1].sub!(/.{#{r}}/) {|x| x.upcase}
85
+ words.insert 1, symlist.sample(symchar)
86
+
87
+ if (words.join).length <= max_len then
88
+ puts 'returning a maxlen word' if debug
89
+ puts 'hint: ' + hint if verbose
90
+ return [words.join, :maxlen, hint]
39
91
  else
40
- LeetPassword.generate(max_len,subs)
92
+ LeetPassword.generate(max_len, verbose: verbose)
41
93
  end
94
+
42
95
  else
43
- return adj + noun
96
+
97
+ words = [noun, adj]
98
+ n = upcase / 2
99
+ r = upcase - n
100
+
101
+ words[0].sub!(/.{#{n}}/) {|x| x.upcase}
102
+ words[-1].sub!(/.{#{r}}/) {|x| x.upcase}
103
+ words.insert 1, symlist.sample(symchar)
104
+ puts 'words: ' + words.inspect if debug
105
+ puts 'returning a variable length' if debug
106
+ puts 'hint: ' + hint if verbose
107
+ return [words.join, :varlen, hint]
108
+
44
109
  end
110
+
111
+ end
112
+
113
+ # This method makes it easier to remember the password since it consists of
114
+ # the following:
115
+ #
116
+ # * 2 words
117
+ # * each word is capitalized
118
+ # * the letters i, e, o are replaced with the numbers 1, 3, and
119
+ # 0 respectively
120
+ # * the words are separated by the @ symbol
121
+ # * a password never longer than 12 characters
122
+ #
123
+ def self.easygen()
124
+ pwd, type, hint = self.generate(12, verbose: false) until type == :maxlen
125
+ puts 'hint: ' + hint
126
+ return pwd
45
127
  end
46
128
  end
47
129
 
data.tar.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- ��E⥊��'o��J�QJ��O��A�Э�p|��)EV� �=9���� y��o����z�� ����w7_i�~6arL$����iF��H�|��N��d��'�}�$�w$��+�f��D����Ty]r:�/f�"�(�� �A���$ܧ��2C��a�a��3c��;�Ÿ�������A�K�
2
- =cr�
1
+ V^DCH���h73�� y���ߦ`������8 +!�O�`����~�?=�"�8i�#Z�0�K6@�SKa#=��=�V� 6�7A���- UUq]��'J��T ��|���@��Qւ@d��a17E���MA�����f���KK��x�q�˙���^�P5�����iZW�:B���{qB��S�+#�`@�����
2
+ �ً�r��@m�>���Y2A��J.k�SJ�לs���[t��P#�c���f̃�o���Ƣ*P�Θ^C[�Ж ޢ�8��: ����g���
metadata CHANGED
@@ -1,85 +1,90 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: leetpassword
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.1.1
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - James Robertson
9
8
  autorequire:
10
9
  bindir: bin
11
- cert_chain:
10
+ cert_chain:
12
11
  - |
13
12
  -----BEGIN CERTIFICATE-----
14
- MIIDRDCCAiygAwIBAgIBADANBgkqhkiG9w0BAQUFADBIMRIwEAYDVQQDDAlnZW1t
15
- YXN0ZXIxHjAcBgoJkiaJk/IsZAEZFg5qYW1lc3JvYmVydHNvbjESMBAGCgmSJomT
16
- 8ixkARkWAmV1MB4XDTEzMDIwNjIwNTg0N1oXDTE0MDIwNjIwNTg0N1owSDESMBAG
17
- A1UEAwwJZ2VtbWFzdGVyMR4wHAYKCZImiZPyLGQBGRYOamFtZXNyb2JlcnRzb24x
18
- EjAQBgoJkiaJk/IsZAEZFgJldTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
19
- ggEBANUV5kzvqxLqMtq+RdzFxNxUWh4r6dqoVyOmR4KR5NQ92QEyb9O2gNwWUB8r
20
- qzMs1p0GQZ9z3TmD2gbZ/UvOkE3qxRd2sCjAOj4bbJN5FN7P4Ek+m19Pvb8rvx/s
21
- X8pSmNG9mW4iy4crRUeyDsJg6Qb0MVy0NvLtbgPSY4Z7LkZMsuxuhszHwMslKemz
22
- YAxF2cfsuadODb02tk7OsmksyGy41g/ZS1gvv/MFHK4kFir8diW+rq/Ledlr44SE
23
- rlq7Y0Jdi5n+3tyQXASqhm8MNKDLNrhh4o+exSJiJOXtHd7byAqrq7OD39+F82WK
24
- dTqcyeoRrKSHckMk7QNPcud4sZUCAwEAAaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4E
25
- FgQUzULP9LAPr4WL5ae6TRlZAs4Wl24wCwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEB
26
- BQUAA4IBAQBk9u3c8ovMENKcpYrMAUvWgMtKm3XxOQ0wwX4cx8U9vI8mTCHuARf9
27
- H+1BhpuePgw4WI8iSwII2wTrsFy1kZ1TDTm68klLA+CBmaJLsyscTmLmmEdajfMF
28
- Ve8VlDI4B2t2qI8XYYwDfsCLBoEyn9iBDwyAQgMSG1/07s4xEZY496L/GtV+do/x
29
- MWVOK5IdBfJmht2Fh6xAKLttKMPteIx5kivA78mSz/9eBUiKp16mrrM52VJxn7zU
30
- fN2Hry5xFOmULxaHq0cp4fBwVTK0l1lcNIZ/Pn958RJBqpS72REg9yPaKxECqxwM
31
- SACOJXvb7sLlyn9zLaNDher+bKLaLwBq
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMjIwNTI2MDcyNjI5WhcN
15
+ MjMwNTI2MDcyNjI5WjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDjaDKP
17
+ VUyQS52JKpSAbbWga2HvFbGxoe5AkMT05MJCeCYOZeK9jWn/UNUoTQQKvQbUf/+G
18
+ KdAsnMfKN4J0ZDvZcT6F1/+xQfX1y96ZOYC2LpEFNXEZYgEEr6Nys7SZ7wwmCpLj
19
+ sT03cQmNboZSlx2To60hYVkEXweFwabUzciuRUURCvnqTG2aTQ5NCMYImhkbisY+
20
+ 6ZFnZyluumfZCo2XkF24X8J2KJvwaH76JE4e1JsvhYbx29ozp/1orSfZOs8ExWM9
21
+ sVpCWb92iuT0nCqDxkGR6tWuCnltnlL3zrhkT2FsKThzPyCoU+iIfruIrUbG65zG
22
+ 11UZ7o82YBz6VF9L2cm/c4LKIxiBplH4wvWy5T4xNmqwOHoubhV+br4abzOE4U/9
23
+ RChvKpn9nw+nUZupLZE53BSG80pPh+bPXpYGjw+7wSFfhwPmakD65v1UEECjbsQt
24
+ NiJWqmGqR2UPL4dGLej46xTSuQpsaot8TLac/h9l0RnE0FBY+7sW/xSIaBkCAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUSPoELqlZ
26
+ Pxh1xm67yjd/p2ZNbwkwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAZAvMNWQmxsY7o1CzPoUSA3HUm/BXSbt7EyFr2e9u
29
+ KTgr0wHUsgh9Svu51fOG9w/+BsFd3yS9VEnJUztDWEPnX/OnXKrdlQMKPWSsAo9c
30
+ 8HG+KcXJjAgqG2C0+5yUCQXzej0wIWU0n3L1/6e5V8+2Xu1EyOKvC5A9I+oCc+P6
31
+ LJqaMufUX9Qefm34ZBdgvqzn0AftvMjYIUOvbIU5uem017NSHD00bmH1xO4+Dxhh
32
+ ve3J+5FvPjgE54S29bbfgvMJRPNPpRf1kAxpHNmm4d+5QJRoIkFgwqr83jFW1w+l
33
+ 5wuteMtb63Rh60vdtkMRexdlSWF0Tbns/otn0oLNTGDEjptmskS9Tt9asV+vy+38
34
+ gB5hvm0ZVOhWTupZAzI90V0KfVnVqfeBrXD+e+2LhQZPur7DKW6hJ7atyXoKnPGQ
35
+ wsJoMv/2Pxome92q2iZQ0ZEEV4DYM6tpetiC3sLMT70W5dBAck6YkUBfDlbRlrU1
36
+ a48r2r3b5G9dmbtyJVaowaxo
32
37
  -----END CERTIFICATE-----
33
-
34
- date: 2013-02-06 00:00:00 Z
35
- dependencies:
36
- - !ruby/object:Gem::Dependency
37
- name: random-word
38
- prerelease: false
39
- requirement: &id001 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
38
+ date: 2022-05-26 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: random_word
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.1'
42
47
  - - ">="
43
- - !ruby/object:Gem::Version
44
- version: "0"
48
+ - !ruby/object:Gem::Version
49
+ version: 2.1.1
45
50
  type: :runtime
46
- version_requirements: *id001
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '2.1'
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 2.1.1
47
60
  description:
48
- email:
61
+ email: digital.robertson@gmail.com
49
62
  executables: []
50
-
51
63
  extensions: []
52
-
53
64
  extra_rdoc_files: []
54
-
55
- files:
65
+ files:
56
66
  - lib/leetpassword.rb
57
- homepage:
58
- licenses: []
59
-
67
+ homepage: https://github.com/jrobertson/leetpassword
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
60
71
  post_install_message:
61
72
  rdoc_options: []
62
-
63
- require_paths:
73
+ require_paths:
64
74
  - lib
65
- required_ruby_version: !ruby/object:Gem::Requirement
66
- none: false
67
- requirements:
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
68
77
  - - ">="
69
- - !ruby/object:Gem::Version
70
- version: "0"
71
- required_rubygems_version: !ruby/object:Gem::Requirement
72
- none: false
73
- requirements:
78
+ - !ruby/object:Gem::Version
79
+ version: 2.1.2
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
74
82
  - - ">="
75
- - !ruby/object:Gem::Version
76
- version: "0"
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
77
85
  requirements: []
78
-
79
- rubyforge_project:
80
- rubygems_version: 1.8.23
86
+ rubygems_version: 3.2.22
81
87
  signing_key:
82
- specification_version: 3
88
+ specification_version: 4
83
89
  summary: leetpassword creates a password with 1 or 2 random leet words.
84
90
  test_files: []
85
-
metadata.gz.sig CHANGED
Binary file