passw 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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/passw +10 -0
  3. data/lib/passw.rb +68 -0
  4. metadata +87 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b0f665744f6b6f8a587b38f5e93b30c7c3a117e3
4
+ data.tar.gz: 98a02a75d2b2c2bde31c393aeafa07b56c3581e6
5
+ SHA512:
6
+ metadata.gz: af15ebe940d3ada7dcbd3e25c121d26ad35a42245c551a379e67040cf25f3d28199d6e1c8910c9dd858c5778190b1e6710c17ea42f9666cbcbe9d29b98e0eb55
7
+ data.tar.gz: 5c230f6818efbf09bf54c3b42a67793e925f677d4286f2226abaaa7c230fdad8191be526b0aae6d4de7b69d5cb912c3e8534389c6bfe14ecb49b8e769fcbe780
data/bin/passw ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require File.expand_path('../lib/passw', File.dirname(__FILE__))
5
+
6
+ if !ARGV.empty?
7
+ puts Passw.generate(ARGV[0])
8
+ else
9
+ puts "Passw Usage: passw <length>"
10
+ end
data/lib/passw.rb ADDED
@@ -0,0 +1,68 @@
1
+ module Passw
2
+ # Generate a password with the sepecified options
3
+ # Params:
4
+ # +length+:: the length of the password
5
+ # +options+:: a hash defining the attributes for the password
6
+ def self.generate(length, options = {})
7
+ defaults = {
8
+ lowercase: true, # Allow lower case characters
9
+ uppercase: true, # Allow uppercase characters
10
+ symbols: true, # Allow symbols
11
+ numbers: true, # Allow numbers
12
+ duplicates: true # Allow characters to be duplicated (less secure if true)
13
+ }
14
+
15
+ defaults.merge!(options)
16
+
17
+ buffer = []
18
+
19
+ buffer += lowercase if defaults[:lowercase]
20
+ buffer += uppercase if defaults[:uppercase]
21
+ buffer += symbols if defaults[:symbols]
22
+ buffer += numbers if defaults[:numbers]
23
+
24
+ base = []
25
+
26
+ buffer_length = buffer.length
27
+
28
+ (0...length.to_i).each do |i|
29
+ if defaults[:duplicates]
30
+ base << buffer[srand % buffer_length]
31
+ else
32
+ loop do
33
+ candidate = buffer[srand % buffer_length]
34
+
35
+ if !base.include? candidate
36
+ base << candidate
37
+ break
38
+ end
39
+
40
+ # Ensure that this loop does not run forever if duplicates are disallowed
41
+ # In this case, we're limited to the collective size of buffered characters
42
+
43
+ break if base.length == buffer_length - 1
44
+ end
45
+ end
46
+ end
47
+
48
+ base.shuffle.join
49
+ end
50
+
51
+ private
52
+
53
+ def self.symbols
54
+ %w[! " ' # $ % & ( ) * + , - . / : ; < = > ? ` ~ { | } @ ^]
55
+ end
56
+
57
+ def self.lowercase
58
+ %w[a b c d e f g h i j k l m n o p q r s t u v w x y z]
59
+ end
60
+
61
+ def self.uppercase
62
+ %w[A B C D E F G H I J K L M N O P Q R S T U V W X Y Z]
63
+ end
64
+
65
+ def self.numbers
66
+ %w[0 1 2 3 4 5 6 7 8 9]
67
+ end
68
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: passw
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Sean Nieuwoudt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-04-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.7'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 5.7.0
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '5.7'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 5.7.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '10.4'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 10.4.2
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '10.4'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 10.4.2
53
+ description: Passw is a simple, customizable password generator for Ruby that allows
54
+ you to generate secure passwords easily
55
+ email: sean@isean.co.za
56
+ executables:
57
+ - passw
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - bin/passw
62
+ - lib/passw.rb
63
+ homepage: https://github.com/SeanNieuwoudt/passw
64
+ licenses:
65
+ - GPL-3.0
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.6.11
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Passw is a simple, customizable password generator for Ruby
87
+ test_files: []