keybox 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,5 +1,14 @@
1
- = keybox Changelog
2
- === Version 1.1.1
1
+ = Changelog
2
+
3
+ === Version 1.2.0 - 2007-09-09
4
+
5
+ * Added Feature [#11796] Change initial setup prompts to NOT have colorized output and ask the user what color scheme is appropriate for them
6
+ * Update to use HighLine 1.4.0
7
+ * general code cleanup
8
+ * rework rake tasks to keep in line with other projects
9
+ * switch to webby for site generation
10
+
11
+ === Version 1.1.1 - 2007-06-21
3
12
 
4
13
  * update all tests to use latest RSpec syntax
5
14
  * Fixed Bug [#8231] storage::container.find() does not work for anything but AccountEntry classes
@@ -9,7 +18,7 @@
9
18
  * Fixed Bug [#11684] apostrophe's in additional information cause errors
10
19
  * Updated to using HighLine 1.2.9 (fixes Bug #9827)
11
20
 
12
- === Version 1.1.0
21
+ === Version 1.1.0 - 2007-01-27
13
22
 
14
23
  * keybox now uses HighLine for terminal input/output
15
24
  * Added --color SCHEME option to support custom colorized output
@@ -18,7 +27,7 @@
18
27
  * Fixed configuration bug where command line options were not
19
28
  correctly overwriting default options.
20
29
 
21
- === Version 1.0.0
30
+ === Version 1.0.0 - 2007-01-14
22
31
 
23
32
  * Initial public release
24
33
  * +keybox+ - Full basic functionality
data/README CHANGED
@@ -92,6 +92,9 @@ applications.
92
92
  * webgen >= 0.4.1
93
93
  * highline >= 1.2.6
94
94
 
95
+ To run the RSpec test, you have to remove the termios library if it is installed.
96
+ stdin, stdout, and stderr are redirected and this doesn't play well with termios in highline.
97
+
95
98
  == INSTALL:
96
99
 
97
100
  * gem install keybox
data/bin/keybox CHANGED
@@ -6,9 +6,15 @@
6
6
  #----------------------------------------------------------------------
7
7
  # bootstrap
8
8
  #----------------------------------------------------------------------
9
- $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
10
- require 'keybox'
11
- require 'keybox/application/password_safe'
9
+ begin
10
+ require 'keybox'
11
+ require 'keybox/application/password_safe'
12
+ rescue LoadError
13
+ path = File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
14
+ raise if $:.include? path
15
+ $: << path
16
+ retry
17
+ end
12
18
 
13
19
  #----------------------------------------------------------------------
14
20
  # instantiate the program and pass it the commandline parameters
data/bin/kpg CHANGED
@@ -6,9 +6,15 @@
6
6
  #----------------------------------------------------------------------
7
7
  # bootstrap
8
8
  #----------------------------------------------------------------------
9
- $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
10
- require 'keybox'
11
- require 'keybox/application/password_generator'
9
+ begin
10
+ require 'keybox'
11
+ require 'keybox/application/password_generator'
12
+ rescue LoadError
13
+ path = File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
14
+ raise if $:.include? path
15
+ $: << path
16
+ retry
17
+ end
12
18
 
13
19
  #----------------------------------------------------------------------
14
20
  # instantiate the program and pass it the commandline parameters
@@ -1,22 +1,16 @@
1
1
  module Keybox
2
- APP_ROOT_DIR = File.dirname(File.expand_path(File.join(__FILE__,".."))).freeze
3
- APP_LIB_DIR = File.join(APP_ROOT_DIR,"lib").freeze
4
- APP_DATA_DIR = File.join(APP_ROOT_DIR,"data").freeze
5
- APP_VENDOR_DIR = File.join(APP_ROOT_DIR,"vendor").freeze
6
-
7
- VERSION = [1,1,1].freeze
8
- AUTHOR = "Jeremy Hinegardner".freeze
9
- AUTHOR_EMAIL= "jeremy@hinegardner.org".freeze
10
- HOMEPAGE = "http://keybox.rubyforge.org".freeze
11
- COPYRIGHT = "2006, 2007 #{AUTHOR}".freeze
12
- DESCRIPTION = <<DESC
13
- Keybox is a set of command line applications and ruby libraries for
14
- secure password storage and password generation.
15
- DESC
2
+ APP_ROOT_DIR = File.dirname(File.expand_path(File.join(__FILE__,".."))).freeze
3
+ APP_LIB_DIR = File.join(APP_ROOT_DIR,"lib").freeze
4
+ APP_RESOURCE_DIR = File.join(APP_ROOT_DIR,"resources").freeze
5
+ APP_VENDOR_DIR = File.join(APP_ROOT_DIR,"vendor").freeze
6
+ APP_BIN_DIR = File.join(APP_ROOT_DIR,"bin").freeze
16
7
  end
17
8
 
18
9
  $: << Keybox::APP_LIB_DIR
19
10
 
11
+ require 'keybox/version'
12
+ require 'keybox/specification'
13
+ require 'keybox/gemspec'
20
14
  require 'keybox/cipher'
21
15
  require 'keybox/digest'
22
16
  require 'keybox/entry'
@@ -89,11 +89,13 @@ module Keybox
89
89
  end
90
90
 
91
91
  def default_options
92
- options = OpenStruct.new
93
- options.debug = 0
94
- options.show_version = false
95
- options.show_help = false
96
- return options
92
+ if not @default_options then
93
+ @default_options = OpenStruct.new
94
+ @default_options.debug = 0
95
+ @default_options.show_version = false
96
+ @default_options.show_help = false
97
+ end
98
+ return @default_options
97
99
  end
98
100
 
99
101
  def configuration_file_options
@@ -121,7 +123,7 @@ module Keybox
121
123
  @stderr.puts @error_message
122
124
  exit 1
123
125
  elsif @parsed_options.show_version then
124
- @highline.say "#{@parser.program_name}: version #{Keybox::VERSION.join(".")}"
126
+ @highline.say "#{@parser.program_name}: version #{Keybox::VERSION}"
125
127
  exit 0
126
128
  elsif @parsed_options.show_help then
127
129
  @highline.say @parser.to_s
@@ -75,17 +75,19 @@ module Keybox
75
75
  end
76
76
 
77
77
  def default_options
78
- options = OpenStruct.new
79
- options.debug = 0
80
- options.show_version = false
81
- options.show_help = false
82
- options.algorithm = :random
83
- options.number_to_generate = 6
84
- options.min_length = 8
85
- options.max_length = 10
86
- options.use_symbols = options_to_symbol_sets(["all"])
87
- options.require_symbols = options_to_symbol_sets([])
88
- return options
78
+ if not @default_options then
79
+ @default_options = OpenStruct.new
80
+ @default_options.debug = 0
81
+ @default_options.show_version = false
82
+ @default_options.show_help = false
83
+ @default_options.algorithm = :random
84
+ @default_options.number_to_generate = 6
85
+ @default_options.min_length = 8
86
+ @default_options.max_length = 10
87
+ @default_options.use_symbols = options_to_symbol_sets(["all"])
88
+ @default_options.require_symbols = options_to_symbol_sets([])
89
+ end
90
+ return @default_options
89
91
  end
90
92
 
91
93
  def options_to_symbol_sets(args)
@@ -19,7 +19,7 @@ module Keybox
19
19
  DEFAULT_DIRECTORY = File.join(home_directory,".keybox")
20
20
  DEFAULT_DB = File.join(DEFAULT_DIRECTORY,"database.yaml")
21
21
  DEFAULT_CONFIG = File.join(DEFAULT_DIRECTORY,"config.yaml")
22
- DEFAULT_COLOR_SCHEME = :dark_bg
22
+ DEFAULT_COLOR_SCHEME = :none
23
23
 
24
24
  ACTION_LIST = %w(add delete edit show list master-password)
25
25
 
@@ -113,15 +113,17 @@ module Keybox
113
113
  end
114
114
 
115
115
  def default_options
116
- options = OpenStruct.new
117
- options.debug = 0
118
- options.show_help = false
119
- options.show_version = false
120
- options.config_file = Keybox::Application::PasswordSafe::DEFAULT_CONFIG
121
- options.db_file = Keybox::Application::PasswordSafe::DEFAULT_DB
122
- options.use_password_hash_for_url = false
123
- options.color_scheme = Keybox::Application::PasswordSafe::DEFAULT_COLOR_SCHEME
124
- return options
116
+ if not @default_options then
117
+ @default_options = OpenStruct.new
118
+ @default_options.debug = 0
119
+ @default_options.show_help = false
120
+ @default_options.show_version = false
121
+ @default_options.config_file = Keybox::Application::PasswordSafe::DEFAULT_CONFIG
122
+ @default_options.db_file = Keybox::Application::PasswordSafe::DEFAULT_DB
123
+ @default_options.use_password_hash_for_url = false
124
+ @default_options.color_scheme = Keybox::Application::PasswordSafe::DEFAULT_COLOR_SCHEME
125
+ end
126
+ return @default_options
125
127
  end
126
128
 
127
129
  # load options from the configuration file, if the file
@@ -136,6 +138,7 @@ module Keybox
136
138
  # if the file is 0 bytes, then this is illegal and needs
137
139
  # to be overwritten.
138
140
  if not File.exists?(file_path) or File.size(file_path) == 0 then
141
+ determine_color_scheme
139
142
  FileUtils.mkdir_p(File.dirname(file_path))
140
143
  File.open(file_path,"w") do |f|
141
144
  YAML.dump(default_options.marshal_dump,f)
@@ -144,6 +147,20 @@ module Keybox
144
147
  options = YAML.load_file(file_path) || Hash.new
145
148
  end
146
149
 
150
+ # determine the color scheme to store in the initial creation of the configuration
151
+ # file. We ask the user which of the color schemes will work best for them.
152
+ def determine_color_scheme
153
+ @default_options.color_scheme = @highline.choose do |menu|
154
+ menu.layout = :one_line
155
+ menu.select_by = :name
156
+ menu.header = nil
157
+ menu.prompt = "What color scheme would you like? "
158
+ menu.choice("none") { :none }
159
+ menu.choice("dark terminal background") { :dark_bg }
160
+ menu.choice("light terminal background") { :light_bg }
161
+ end
162
+ end
163
+
147
164
  #
148
165
  # load the given color scheme. If the scheme cannot be
149
166
  # found it will default to the +:none+ scheme which has no
@@ -160,7 +177,7 @@ module Keybox
160
177
  # dark_bg.color_scheme.yaml
161
178
  def load_color_scheme
162
179
  if @options.color_scheme != :none then
163
- search_directories = [ Keybox::APP_DATA_DIR, File.dirname(@options.config_file) ]
180
+ search_directories = [ Keybox::APP_RESOURCE_DIR, File.dirname(@options.config_file) ]
164
181
  scheme_basename = "#{@options.color_scheme.to_s}.color_scheme.yaml"
165
182
  scheme_path = nil
166
183
 
@@ -204,7 +221,7 @@ module Keybox
204
221
 
205
222
  else
206
223
  # if we don't have a file then set the color
207
- # scheme to nil and we're done
224
+ # scheme to :none and we're done
208
225
  @options.color_scheme = :none
209
226
  ::HighLine.color_scheme = ::HighLine::ColorScheme.new(NONE_SCHEME)
210
227
  end
@@ -267,7 +284,6 @@ module Keybox
267
284
  hsay "-" * 40, :separator_bar
268
285
  hsay entry, :normal
269
286
  hsay "-" * 40, :separator_bar
270
-
271
287
 
272
288
  gathered = hagree "Is this information correct? (y/n)"
273
289
  end
@@ -463,9 +479,10 @@ module Keybox
463
479
  if @actions.size == 0 then
464
480
  @actions << [:list, ".*"]
465
481
  end
482
+
466
483
  action, param = *@actions.shift
467
484
  self.send(action, param)
468
-
485
+
469
486
  if @db.modified? then
470
487
  hsay "Database modified, saving.", :information
471
488
  @db.save
@@ -0,0 +1,52 @@
1
+ require 'rubygems'
2
+ require 'keybox/specification'
3
+ require 'keybox/version'
4
+ require 'rake'
5
+
6
+ module Keybox
7
+ SPEC = Keybox::Specification.new do |spec|
8
+ spec.name = "keybox"
9
+ spec.version = Keybox::VERSION
10
+ spec.rubyforge_project = "keybox"
11
+ spec.author = "Jeremy Hinegardner"
12
+ spec.email = "jeremy@hinegardner.org"
13
+ spec.homepage = "http://keybox.rubyforge.org"
14
+
15
+ spec.summary = "Secure pasword storage."
16
+ spec.description = <<-DESC
17
+ A set of command line applications and ruby libraries for
18
+ secure password storage and password generation.
19
+ DESC
20
+
21
+ spec.extra_rdoc_files = FileList["CHANGES", "COPYING", "README"]
22
+ spec.has_rdoc = true
23
+ spec.rdoc_main = "README"
24
+ spec.rdoc_options = [ "--line-numbers" , "--inline-source" ]
25
+
26
+ spec.test_files = FileList["spec/**/*.rb"]
27
+ spec.default_executable = "#{spec.name}"
28
+ spec.executables = Dir.entries(Keybox::APP_BIN_DIR).delete_if { |f| f =~ /\A\./ }
29
+ spec.files = spec.test_files + spec.extra_rdoc_files +
30
+ FileList["lib/**/*.rb", "resources/**/*", "data/**/*"]
31
+
32
+ spec.add_dependency("highline", ">= 1.4.0")
33
+
34
+ spec.required_ruby_version = ">= 1.8.5"
35
+
36
+ spec.platform = Gem::Platform::RUBY
37
+
38
+ spec.remote_user = "jjh"
39
+ spec.local_site_dir = "doc"
40
+ spec.local_rdoc_dir = "doc/rdoc"
41
+ spec.remote_rdoc_dir = "rdoc/"
42
+ spec.local_coverage_dir = "doc/coverage"
43
+
44
+ spec.remote_site_dir = ""
45
+
46
+ spec.post_install_message = "\e[1m\e[31m\e[40mTry `keybox --help` for more information\e[0m"
47
+
48
+
49
+ end
50
+ end
51
+
52
+
@@ -1,7 +1,7 @@
1
1
  begin
2
2
  # first try to use the gem
3
3
  require 'rubygems'
4
- gem 'highline', ">=1.2.6"
4
+ gem 'highline', ">=1.4.0"
5
5
  rescue Gem::LoadError
6
6
  # If that fails, then use what ships with keybox
7
7
  $: << File.join(Keybox::APP_VENDOR_DIR,"highline")
@@ -0,0 +1,128 @@
1
+ require 'rubygems'
2
+ require 'rubygems/specification'
3
+ require 'rake'
4
+
5
+ module Keybox
6
+ # Add some additional items to Gem::Specification
7
+ # A Keybox::Specification adds additional pieces of information the
8
+ # typical gem specification
9
+ class Specification
10
+
11
+ RUBYFORGE_ROOT = "/var/www/gforge-projects/"
12
+
13
+ # user that accesses remote site
14
+ attr_accessor :remote_user
15
+
16
+ # remote host, default 'rubyforge.org'
17
+ attr_accessor :remote_host
18
+
19
+ # name the rdoc main
20
+ attr_accessor :rdoc_main
21
+
22
+ # local directory in development holding the generated rdoc
23
+ # default 'doc'
24
+ attr_accessor :local_rdoc_dir
25
+
26
+ # remote directory for storing rdoc, default 'doc'
27
+ attr_accessor :remote_rdoc_dir
28
+
29
+ # local directory for coverage report
30
+ attr_accessor :local_coverage_dir
31
+
32
+ # remote directory for storing coverage reports
33
+ # This defaults to 'coverage'
34
+ attr_accessor :remote_coverage_dir
35
+
36
+ # local directory for generated website, default +site/public+
37
+ attr_accessor :local_site_dir
38
+
39
+ # remote directory relative to +remote_root+ for the website.
40
+ # website.
41
+ attr_accessor :remote_site_dir
42
+
43
+ # is a .tgz to be created?, default 'true'
44
+ attr_accessor :need_tar
45
+
46
+ # is a .zip to be created, default 'true'
47
+ attr_accessor :need_zip
48
+
49
+
50
+ def initialize
51
+ @remote_user = nil
52
+ @remote_host = "rubyforge.org"
53
+
54
+ @rdoc_main = "README"
55
+ @local_rdoc_dir = "doc"
56
+ @remote_rdoc_dir = "doc"
57
+ @local_coverage_dir = "coverage"
58
+ @remote_coverage_dir = "coverage"
59
+ @local_site_dir = "site/public"
60
+ @remote_site_dir = "."
61
+
62
+ @need_tar = true
63
+ @need_zip = true
64
+
65
+ @spec = Gem::Specification.new
66
+
67
+ yield self if block_given?
68
+
69
+ # update rdoc options to take care of the rdoc_main if it is
70
+ # there, and add a default title if one is not given
71
+ if not @spec.rdoc_options.include?("--main") then
72
+ @spec.rdoc_options.concat(["--main", rdoc_main])
73
+ end
74
+
75
+ if not @spec.rdoc_options.include?("--title") then
76
+ @spec.rdoc_options.concat(["--title","'#{name} -- #{summary}'"])
77
+ end
78
+ end
79
+
80
+ # if this gets set then it overwrites what would be the
81
+ # rubyforge default. If rubyforge project is not set then use
82
+ # name. If rubyforge project and name are set, but they are
83
+ # different then assume that name is a subproject of the
84
+ # rubyforge project
85
+ def remote_root
86
+ if rubyforge_project.nil? or
87
+ rubyforge_project == name then
88
+ return RUBYFORGE_ROOT + "#{name}/"
89
+ else
90
+ return RUBYFORGE_ROOT + "#{rubyforge_project}/#{name}/"
91
+ end
92
+ end
93
+
94
+ # rdoc files is the same as what would be generated during gem
95
+ # installation. That is, everything in the require paths plus
96
+ # the extra_rdoc_files
97
+ #
98
+ def rdoc_files
99
+ flist = extra_rdoc_files.dup
100
+ @spec.require_paths.each do |rp|
101
+ flist << FileList["#{rp}/**/*.rb"]
102
+ end
103
+ flist.flatten.uniq
104
+ end
105
+
106
+ # calculate the remote directories
107
+ def remote_root_location
108
+ "#{remote_user}@#{remote_host}:#{remote_root}"
109
+ end
110
+
111
+ def remote_rdoc_location
112
+ remote_root_location + @remote_rdoc_dir
113
+ end
114
+
115
+ def remote_coverage_location
116
+ remote_root_loation + @remote_coverage_dir
117
+ end
118
+
119
+ def remote_site_location
120
+ remote_root_location + @remote_site_dir
121
+ end
122
+
123
+ # we delegate any other calls to spec
124
+ def method_missing(method_id,*params,&block)
125
+ @spec.send method_id, *params, &block
126
+ end
127
+ end
128
+ end