senha 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ Copyright (c) 2010-2011 Jacob Hammack, Hammackj LLC
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright
8
+ notice, this list of conditions and the following disclaimer.
9
+ * Redistributions in binary form must reproduce the above copyright
10
+ notice, this list of conditions and the following disclaimer in the
11
+ documentation and/or other materials provided with the distribution.
12
+ * Neither the name of the Jacob Hammack or Hammackj LLC nor the
13
+ names of its contributors may be used to endorse or promote products
14
+ derived from this software without specific prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ DISCLAIMED. IN NO EVENT SHALL JACOB HAMMACK or HAMMACKJ LLC BE LIABLE FOR ANY
20
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/NEWS.markdown ADDED
@@ -0,0 +1,5 @@
1
+ # News
2
+
3
+ # 0.0.1 (February 17, 2011)
4
+
5
+ - Initial Release
data/README.markdown ADDED
@@ -0,0 +1,31 @@
1
+ # senha
2
+
3
+ Senha is a password generation tool for making random passwords based on a input requirement.
4
+
5
+ # Usage
6
+
7
+ Using senha is relativley simple. Some example usage would be:
8
+
9
+ % senha -l
10
+ kpsyzatdpu
11
+ % senha -n
12
+ 3993355865
13
+ % senha -a --length 20
14
+ M;w%Bwh8z-1NwYiS,#8h
15
+ % senha -a --length 20 --count 10
16
+ :QGZz:FqV88B4CQoPgiG
17
+ @m,obU-50uyI!#7-7l8A
18
+ i8u7R4mwcYI%.QBsEVtW
19
+ .LFchb;ni%#MC6#grF:,
20
+ NoarJHX3$Nz!hcu3AIjQ
21
+ cfrZGeG90ahfqSqPpq42
22
+ 5;1WU@%:C9ZJMktx$sUa
23
+ $e5,6jdOSQ&zAV:H&6LS
24
+ 4&yqxcF2Rj,qiMQMlTt,
25
+ #TyFKmzVTVer,;E-0^ro
26
+
27
+ # Issues
28
+ If you have any problems, bugs or feature requests please use the [github issue tracker](http://github.com/hammackj/senha/issues).
29
+
30
+ # Contact
31
+ You can reach me at jacob[dot]hammack[at]hammackj[dot]com.
data/Rakefile ADDED
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
+
3
+ require "senha"
4
+
5
+ task :build do
6
+ system "gem build senha.gemspec"
7
+ end
8
+
9
+ task :release => :build do
10
+ system "gem push senha-#{Senha::VERSION}.gem"
11
+ end
12
+
13
+ task :clean do
14
+ system "rm *.gem"
15
+ end
data/bin/senha ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '/../lib'))
5
+
6
+ require 'senha'
7
+ require 'senha/cli'
8
+
9
+ app = Senha::CLI::Application.new
10
+ app.run
data/lib/senha.rb ADDED
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ module Senha
4
+ APP_NAME = "senha"
5
+ VERSION = "0.0.1"
6
+ end
7
+
8
+ require 'senha/base'
data/lib/senha/base.rb ADDED
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+
3
+ module Senha::Base
4
+
5
+ end
6
+
7
+ require 'senha/base/generator'
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+
3
+ module Senha::Base
4
+
5
+ # A class for handling the generation of a password based on options
6
+ #
7
+ # @author Jacob Hammack <jacob.hammack@hammackj.com>
8
+ class Generator
9
+ attr_accessor :available_chars
10
+
11
+ # Creates a new instance of the Generator class
12
+ #
13
+ # @return [Generator]
14
+ def initialize(options)
15
+ @available_chars = Array.new
16
+
17
+ @numbers = ('0'..'9').to_a
18
+ @lower_case = ('a'..'z').to_a
19
+ @upper_case = ('A'..'Z').to_a
20
+ @punctuation = %w(. , ! : ;).to_a
21
+ @symbols = %w(! @ # $ % ^ & * - =).to_a
22
+
23
+ if options[:all]
24
+ @available_chars.concat @numbers
25
+ @available_chars.concat @lower_case
26
+ @available_chars.concat @upper_case
27
+ @available_chars.concat @symbols
28
+ @available_chars.concat @punctuation
29
+ else
30
+ if options[:numbers]
31
+ @available_chars.concat @numbers
32
+ end
33
+
34
+ if options[:lowercase]
35
+ @available_chars.concat @lower_case
36
+ end
37
+
38
+ if options[:uppercase]
39
+ @available_chars.concat @upper_case
40
+ end
41
+
42
+ if options[:symbols]
43
+ @available_chars.concat @symbols
44
+ end
45
+
46
+ if options[:punct]
47
+ @available_chars.concat @punctuation
48
+ end
49
+ end
50
+ end
51
+
52
+ # Generates a password
53
+ #
54
+ # @return [String] of the randomly generated password
55
+ def password(length = 10)
56
+ 1.upto(length).collect do |a|
57
+ @available_chars[rand(@available_chars.size)]
58
+ end.join
59
+ end
60
+ end
61
+ end
data/lib/senha/cli.rb ADDED
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ module Senha
4
+ module CLI
5
+ end
6
+ end
7
+
8
+ require 'senha/cli/application'
@@ -0,0 +1,111 @@
1
+ # encoding: utf-8
2
+
3
+ require 'optparse'
4
+
5
+ module Senha
6
+ module CLI
7
+
8
+ # The Application class is responsible for the
9
+ #
10
+ # @author Jacob Hammack <jacob.hammack@hammackj.com>
11
+ class Application
12
+
13
+ # Creates a new instance of the Application Class
14
+ #
15
+ # @return [Application] New instance
16
+ def initialize
17
+ end
18
+
19
+ # Parses the command line arguments
20
+ #
21
+ def parse_arguments
22
+ begin
23
+ options = {}
24
+
25
+ options[:length] = 10
26
+ options[:count] = 1
27
+
28
+ opts = OptionParser.new do |opt|
29
+ opt.banner = "#{APP_NAME} v#{VERSION}\nJacob Hammack\nhttp://www.hammackj.com\n\n"
30
+ opt.banner << "Usage: #{APP_NAME} <options>"
31
+ opt.separator('')
32
+ opt.separator("Password Options")
33
+
34
+ opt.on("-n", "--numbers", "Use digits [0-9] in the password generation") do |n|
35
+ options[:numbers] = n
36
+ end
37
+
38
+ opt.on("-p", "--punctuation", "Use punctuation in the password generation") do |p|
39
+ options[:punct] = p
40
+ end
41
+
42
+ opt.on("-s", "--symbols", "Use symbols in the password generation") do |s|
43
+ options[:symbols] = s
44
+ end
45
+
46
+ opt.on("-l", "--lowercase", "Use lowercase [a-z] in the password generation") do |l|
47
+ options[:lowercase] = l
48
+ end
49
+
50
+ opt.on("-u", "--uppercase", "Use uppercase [A-Z] in the password generation") do |u|
51
+ options[:uppercase] = u
52
+ end
53
+
54
+ opt.on("-a", "--all-characters", "Use all available character sets for password generationA") do |a|
55
+ options[:all] = a
56
+ end
57
+
58
+ opt.separator ''
59
+ opt.separator 'Other Options'
60
+
61
+ opt.on("--count COUNT", Integer, "Number of passwords to generate, default is 1") do |count|
62
+ options[:count] = count#.to_i
63
+ end
64
+
65
+ opt.on("--length LENGTH", Integer, "Use uppercase in the password generation, default is 10") do |length|
66
+ options[:length] = length#.to_i
67
+ end
68
+
69
+ opt.on('-v', '--version', "Shows application version information") do
70
+ puts "#{APP_NAME} - #{VERSION}"
71
+ exit
72
+ end
73
+
74
+ opt.on_tail("-?", "--help", "Show this message") { |help|
75
+ puts opt.to_s + "\n"
76
+ exit
77
+ }
78
+
79
+ end
80
+
81
+ if ARGV.length != 0
82
+ opts.parse!
83
+ else
84
+ puts opts.to_s + "\n"
85
+ exit
86
+ end
87
+
88
+ options
89
+ rescue OptionParser::MissingArgument => m
90
+ puts opts.to_s + "\n"
91
+ exit
92
+ rescue OptionParser::InvalidOption => i
93
+ puts opts.to_s + "\n"
94
+ exit
95
+ end
96
+ end
97
+
98
+ # Main body of the Application class
99
+ #
100
+ def run
101
+ options = parse_arguments
102
+
103
+ gen = Senha::Base::Generator.new(options)
104
+
105
+ options[:count].times do
106
+ puts gen.password(options[:length])
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
data/senha.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+
3
+ base = __FILE__
4
+ $:.unshift(File.join(File.dirname(base), 'lib'))
5
+
6
+ require 'senha'
7
+
8
+ Gem::Specification.new do |s|
9
+ s.name = "#{Senha::APP_NAME}"
10
+ s.version = Senha::VERSION
11
+ s.homepage = "http://www.hammackj.com/"
12
+ s.summary = "#{Senha::APP_NAME}"
13
+ s.description = "#{Senha::APP_NAME} is a password generation tool"
14
+ s.license = "BSD"
15
+
16
+ s.author = "Jacob Hammack"
17
+ s.email = "jacob.hammack@hammackj.com"
18
+
19
+ s.files = Dir['[A-Z]*'] + Dir['lib/**/*'] + ['senha.gemspec']
20
+ s.default_executable = "#{Senha::APP_NAME}"
21
+ s.executables = ["#{Senha::APP_NAME}"]
22
+ s.require_paths = ["lib"]
23
+
24
+ s.has_rdoc = 'yard'
25
+ s.extra_rdoc_files = ["README.markdown", "LICENSE", "NEWS.markdown"]
26
+
27
+ s.required_rubygems_version = ">= 1.3.6"
28
+ s.rubyforge_project = "#{Senha::APP_NAME}"
29
+
30
+ s.add_development_dependency("rspec", ">= 2.4.0")
31
+ s.add_development_dependency("rcov", ">= 0.9.9")
32
+ s.add_development_dependency("yard", ">= 0.6.4")
33
+
34
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: senha
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Jacob Hammack
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-02-17 00:00:00 -06:00
14
+ default_executable: senha
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rspec
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 2.4.0
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rcov
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 0.9.9
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: yard
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.6.4
47
+ type: :development
48
+ version_requirements: *id003
49
+ description: senha is a password generation tool
50
+ email: jacob.hammack@hammackj.com
51
+ executables:
52
+ - senha
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - README.markdown
57
+ - LICENSE
58
+ - NEWS.markdown
59
+ files:
60
+ - LICENSE
61
+ - NEWS.markdown
62
+ - Rakefile
63
+ - README.markdown
64
+ - lib/senha/base/generator.rb
65
+ - lib/senha/base.rb
66
+ - lib/senha/cli/application.rb
67
+ - lib/senha/cli.rb
68
+ - lib/senha.rb
69
+ - senha.gemspec
70
+ - bin/senha
71
+ has_rdoc: yard
72
+ homepage: http://www.hammackj.com/
73
+ licenses:
74
+ - BSD
75
+ post_install_message:
76
+ rdoc_options: []
77
+
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: "0"
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: 1.3.6
92
+ requirements: []
93
+
94
+ rubyforge_project: senha
95
+ rubygems_version: 1.5.2
96
+ signing_key:
97
+ specification_version: 3
98
+ summary: senha
99
+ test_files: []
100
+