keybox 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +9 -0
- data/README +7 -3
- data/bin/keybox +2 -1
- data/bin/kpg +2 -1
- data/data/dark_bg.color_scheme.yaml +32 -0
- data/data/light_bg.color_scheme.yaml +32 -0
- data/lib/keybox.rb +2 -2
- data/lib/keybox/application/base.rb +27 -12
- data/lib/keybox/application/password_safe.rb +137 -59
- data/lib/keybox/digest.rb +4 -4
- data/lib/keybox/highline_util.rb +91 -0
- data/lib/keybox/storage/container.rb +19 -1
- data/spec/base_app_spec.rb +4 -5
- data/spec/keybox_app_spec.rb +84 -45
- data/spec/kpg_app_spec.rb +12 -12
- data/vendor/highline/highline.rb +704 -0
- data/vendor/highline/highline/color_scheme.rb +120 -0
- data/vendor/highline/highline/import.rb +43 -0
- data/vendor/highline/highline/menu.rb +395 -0
- data/vendor/highline/highline/question.rb +462 -0
- data/vendor/highline/highline/system_extensions.rb +125 -0
- metadata +34 -12
- data/lib/keybox/term_io.rb +0 -163
@@ -0,0 +1,125 @@
|
|
1
|
+
#!/usr/local/bin/ruby -w
|
2
|
+
|
3
|
+
# system_extensions.rb
|
4
|
+
#
|
5
|
+
# Created by James Edward Gray II on 2006-06-14.
|
6
|
+
# Copyright 2006 Gray Productions. All rights reserved.
|
7
|
+
#
|
8
|
+
# This is Free Software. See LICENSE and COPYING for details.
|
9
|
+
|
10
|
+
class HighLine
|
11
|
+
module SystemExtensions
|
12
|
+
module_function
|
13
|
+
|
14
|
+
#
|
15
|
+
# This section builds character reading and terminal size functions
|
16
|
+
# to suit the proper platform we're running on. Be warned: Here be
|
17
|
+
# dragons!
|
18
|
+
#
|
19
|
+
begin
|
20
|
+
# Cygwin will look like Windows, but we want to treat it like a Posix OS:
|
21
|
+
raise LoadError, "Cygwin is a Posix OS." if RUBY_PLATFORM =~ /\bcygwin\b/i
|
22
|
+
|
23
|
+
require "Win32API" # See if we're on Windows.
|
24
|
+
|
25
|
+
CHARACTER_MODE = "Win32API" # For Debugging purposes only.
|
26
|
+
|
27
|
+
#
|
28
|
+
# Windows savvy getc().
|
29
|
+
#
|
30
|
+
# *WARNING*: This method ignores <tt>input</tt> and reads one
|
31
|
+
# character from +STDIN+!
|
32
|
+
#
|
33
|
+
def get_character( input = STDIN )
|
34
|
+
Win32API.new("crtdll", "_getch", [ ], "L").Call
|
35
|
+
end
|
36
|
+
|
37
|
+
# A Windows savvy method to fetch the console columns, and rows.
|
38
|
+
def terminal_size
|
39
|
+
m_GetStdHandle = Win32API.new( 'kernel32',
|
40
|
+
'GetStdHandle',
|
41
|
+
['L'],
|
42
|
+
'L' )
|
43
|
+
m_GetConsoleScreenBufferInfo = Win32API.new(
|
44
|
+
'kernel32', 'GetConsoleScreenBufferInfo', ['L', 'P'], 'L'
|
45
|
+
)
|
46
|
+
|
47
|
+
format = 'SSSSSssssSS'
|
48
|
+
buf = ([0] * format.size).pack(format)
|
49
|
+
stdout_handle = m_GetStdHandle.call(0xFFFFFFF5)
|
50
|
+
|
51
|
+
m_GetConsoleScreenBufferInfo.call(stdout_handle, buf)
|
52
|
+
bufx, bufy, curx, cury, wattr,
|
53
|
+
left, top, right, bottom, maxx, maxy = buf.unpack(format)
|
54
|
+
return right - left + 1, bottom - top + 1
|
55
|
+
end
|
56
|
+
rescue LoadError # If we're not on Windows try...
|
57
|
+
begin
|
58
|
+
require "termios" # Unix, first choice.
|
59
|
+
|
60
|
+
CHARACTER_MODE = "termios" # For Debugging purposes only.
|
61
|
+
|
62
|
+
#
|
63
|
+
# Unix savvy getc(). (First choice.)
|
64
|
+
#
|
65
|
+
# *WARNING*: This method requires the "termios" library!
|
66
|
+
#
|
67
|
+
def get_character( input = STDIN )
|
68
|
+
old_settings = Termios.getattr(input)
|
69
|
+
|
70
|
+
new_settings = old_settings.dup
|
71
|
+
new_settings.c_lflag &= ~(Termios::ECHO | Termios::ICANON)
|
72
|
+
new_settings.c_cc[Termios::VMIN] = 1
|
73
|
+
|
74
|
+
begin
|
75
|
+
Termios.setattr(input, Termios::TCSANOW, new_settings)
|
76
|
+
input.getc
|
77
|
+
ensure
|
78
|
+
Termios.setattr(input, Termios::TCSANOW, old_settings)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
rescue LoadError # If our first choice fails, default.
|
82
|
+
CHARACTER_MODE = "stty" # For Debugging purposes only.
|
83
|
+
|
84
|
+
#
|
85
|
+
# Unix savvy getc(). (Second choice.)
|
86
|
+
#
|
87
|
+
# *WARNING*: This method requires the external "stty" program!
|
88
|
+
#
|
89
|
+
def get_character( input = STDIN )
|
90
|
+
raw_no_echo_mode
|
91
|
+
|
92
|
+
begin
|
93
|
+
input.getc
|
94
|
+
ensure
|
95
|
+
restore_mode
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
#
|
100
|
+
# Switched the input mode to raw and disables echo.
|
101
|
+
#
|
102
|
+
# *WARNING*: This method requires the external "stty" program!
|
103
|
+
#
|
104
|
+
def raw_no_echo_mode
|
105
|
+
@state = `stty -g`
|
106
|
+
system "stty raw -echo cbreak"
|
107
|
+
end
|
108
|
+
|
109
|
+
#
|
110
|
+
# Restores a previously saved input mode.
|
111
|
+
#
|
112
|
+
# *WARNING*: This method requires the external "stty" program!
|
113
|
+
#
|
114
|
+
def restore_mode
|
115
|
+
system "stty #{@state}"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# A Unix savvy method to fetch the console columns, and rows.
|
120
|
+
def terminal_size
|
121
|
+
`stty size`.split.map { |x| x.to_i }.reverse
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.1
|
3
3
|
specification_version: 1
|
4
4
|
name: keybox
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.
|
7
|
-
date: 2007-01-
|
6
|
+
version: 1.1.0
|
7
|
+
date: 2007-01-27 00:00:00 -07:00
|
8
8
|
summary: Keybox is a set of command line applications and ruby libraries for secure password storage and password generation.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -26,11 +26,19 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
|
|
26
26
|
platform: ruby
|
27
27
|
signing_key:
|
28
28
|
cert_chain:
|
29
|
-
post_install_message:
|
29
|
+
post_install_message: "\e[1m\e[31m\e[40mTry `keybox --help` for more information\e[0m"
|
30
30
|
authors:
|
31
31
|
- Jeremy Hinegardner
|
32
32
|
files:
|
33
|
+
- data/dark_bg.color_scheme.yaml
|
33
34
|
- data/chargrams.txt
|
35
|
+
- data/light_bg.color_scheme.yaml
|
36
|
+
- vendor/highline/highline.rb
|
37
|
+
- vendor/highline/highline/system_extensions.rb
|
38
|
+
- vendor/highline/highline/question.rb
|
39
|
+
- vendor/highline/highline/color_scheme.rb
|
40
|
+
- vendor/highline/highline/menu.rb
|
41
|
+
- vendor/highline/highline/import.rb
|
34
42
|
- spec/kpg_app_spec.rb
|
35
43
|
- spec/convert_csv_spec.rb
|
36
44
|
- spec/storage_record_spec.rb
|
@@ -42,12 +50,9 @@ files:
|
|
42
50
|
- spec/string_generator_spec.rb
|
43
51
|
- spec/password_hash_spec.rb
|
44
52
|
- spec/randomizer_spec.rb
|
45
|
-
- README
|
46
|
-
- CHANGES
|
47
|
-
- COPYING
|
48
53
|
- lib/keybox.rb
|
54
|
+
- lib/keybox/highline_util.rb
|
49
55
|
- lib/keybox/cipher.rb
|
50
|
-
- lib/keybox/term_io.rb
|
51
56
|
- lib/keybox/error.rb
|
52
57
|
- lib/keybox/randomizer.rb
|
53
58
|
- lib/keybox/uuid.rb
|
@@ -65,13 +70,22 @@ files:
|
|
65
70
|
- lib/keybox/application/password_safe.rb
|
66
71
|
- bin/keybox
|
67
72
|
- bin/kpg
|
73
|
+
- README
|
74
|
+
- CHANGES
|
75
|
+
- COPYING
|
68
76
|
test_files: []
|
69
77
|
|
70
78
|
rdoc_options:
|
71
79
|
- --line-numbers
|
72
80
|
- --inline-source
|
73
|
-
|
74
|
-
|
81
|
+
- --title
|
82
|
+
- keybox - 1.1.0
|
83
|
+
- --main
|
84
|
+
- README
|
85
|
+
extra_rdoc_files:
|
86
|
+
- README
|
87
|
+
- CHANGES
|
88
|
+
- COPYING
|
75
89
|
executables:
|
76
90
|
- keybox
|
77
91
|
- kpg
|
@@ -79,5 +93,13 @@ extensions: []
|
|
79
93
|
|
80
94
|
requirements: []
|
81
95
|
|
82
|
-
dependencies:
|
83
|
-
|
96
|
+
dependencies:
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: highline
|
99
|
+
version_requirement:
|
100
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 1.2.6
|
105
|
+
version:
|
data/lib/keybox/term_io.rb
DELETED
@@ -1,163 +0,0 @@
|
|
1
|
-
module Keybox
|
2
|
-
# including this module assumes that the class included has
|
3
|
-
# @stdout and @stdin member variables.
|
4
|
-
#
|
5
|
-
# This module also assumes that stty is available
|
6
|
-
module TermIO
|
7
|
-
|
8
|
-
# http://pueblo.sourceforge.net/doc/manual/ansi_color_codes.html
|
9
|
-
#
|
10
|
-
ESCAPE = "\e"
|
11
|
-
BOLD_ON = "[1m"
|
12
|
-
RESET = "[0m"
|
13
|
-
|
14
|
-
FG_BLACK = "[30m"
|
15
|
-
FG_RED = "[31m"
|
16
|
-
FG_GREEN = "[32m"
|
17
|
-
FG_YELLOW = "[33m"
|
18
|
-
FG_BLUE = "[34m"
|
19
|
-
FG_MAGENTA = "[35m"
|
20
|
-
FG_CYAN = "[36m"
|
21
|
-
FG_WHITE = "[37m"
|
22
|
-
|
23
|
-
COLORS = {
|
24
|
-
:black => FG_BLACK,
|
25
|
-
:red => FG_RED,
|
26
|
-
:green => FG_GREEN,
|
27
|
-
:yellow => FG_YELLOW,
|
28
|
-
:blue => FG_BLUE,
|
29
|
-
:magenta => FG_MAGENTA,
|
30
|
-
:cyan => FG_CYAN,
|
31
|
-
:white => FG_WHITE,
|
32
|
-
}
|
33
|
-
|
34
|
-
VALID_COLORS = COLORS.keys()
|
35
|
-
|
36
|
-
|
37
|
-
STTY = "stty"
|
38
|
-
STTY_SAVE_CMD = "#{STTY} -g"
|
39
|
-
STTY_RAW_CMD = "#{STTY} raw -echo isig"
|
40
|
-
|
41
|
-
EOL_CHARS = [10, # '\n'
|
42
|
-
13, # '\r'
|
43
|
-
]
|
44
|
-
#
|
45
|
-
# prompt for input, returning what was typed. If echo is false,
|
46
|
-
# then '*' is printed out for each character typed in. If it is
|
47
|
-
# any other character then that is output instead.
|
48
|
-
#
|
49
|
-
# If validate is set to true, then it will prompt twice and make
|
50
|
-
# sure that the two values match
|
51
|
-
#
|
52
|
-
def prompt(p,echo = true, validate = false, width = 20)
|
53
|
-
validated = false
|
54
|
-
line = ""
|
55
|
-
extra_prompt = " (again)"
|
56
|
-
original_prompt = p
|
57
|
-
validation_prompt = original_prompt + extra_prompt
|
58
|
-
width += extra_prompt.length
|
59
|
-
|
60
|
-
until validated do
|
61
|
-
line = prompt_and_return(original_prompt.rjust(width),echo)
|
62
|
-
|
63
|
-
# if we are validating then prompt again to validate
|
64
|
-
if validate then
|
65
|
-
v = prompt_and_return(validation_prompt.rjust(width),echo)
|
66
|
-
if v != line then
|
67
|
-
color_puts "Entries do not match, try again.", :red
|
68
|
-
else
|
69
|
-
validated = true
|
70
|
-
end
|
71
|
-
else
|
72
|
-
validated = true
|
73
|
-
end
|
74
|
-
end
|
75
|
-
return line
|
76
|
-
end
|
77
|
-
|
78
|
-
def prompt_y_n(p)
|
79
|
-
response = prompt(p)
|
80
|
-
if response.size > 0 and response.downcase[0].chr == 'y' then
|
81
|
-
true
|
82
|
-
else
|
83
|
-
false
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
def get_one_char
|
88
|
-
stty_original = %x{#{STTY_SAVE_CMD}}
|
89
|
-
char = nil
|
90
|
-
begin
|
91
|
-
system STTY_RAW_CMD
|
92
|
-
char = @stdin.getc
|
93
|
-
ensure
|
94
|
-
system "#{STTY} #{stty_original}"
|
95
|
-
end
|
96
|
-
|
97
|
-
return char
|
98
|
-
end
|
99
|
-
|
100
|
-
def prompt_and_return(the_prompt,echo)
|
101
|
-
line = ""
|
102
|
-
color_print "#{the_prompt} : ", :white
|
103
|
-
if echo != true then
|
104
|
-
|
105
|
-
echo_char = echo || '*'
|
106
|
-
|
107
|
-
if has_stty? then
|
108
|
-
stty_original = %x{#{STTY_SAVE_CMD}}
|
109
|
-
|
110
|
-
begin
|
111
|
-
system STTY_RAW_CMD
|
112
|
-
while char = @stdin.getc
|
113
|
-
line << char
|
114
|
-
break if EOL_CHARS.include? char
|
115
|
-
@stdout.putc echo_char
|
116
|
-
end
|
117
|
-
ensure
|
118
|
-
system "#{STTY} #{stty_original}"
|
119
|
-
end
|
120
|
-
@stdout.puts
|
121
|
-
end
|
122
|
-
else
|
123
|
-
line = @stdin.gets
|
124
|
-
end
|
125
|
-
|
126
|
-
# if we got end of file or some other input resulting in
|
127
|
-
# line becoming nil then set it to the empty string
|
128
|
-
line = line || ""
|
129
|
-
|
130
|
-
return line.rstrip
|
131
|
-
end
|
132
|
-
|
133
|
-
def has_stty?
|
134
|
-
system "which stty > /dev/null 2>&1"
|
135
|
-
end
|
136
|
-
|
137
|
-
def colorize(text,color,bold=true)
|
138
|
-
before = ""
|
139
|
-
after = ""
|
140
|
-
if VALID_COLORS.include?(color) then
|
141
|
-
before = ESCAPE + COLORS[color]
|
142
|
-
before = ESCAPE + BOLD_ON + before if bold
|
143
|
-
after = ESCAPE + RESET
|
144
|
-
end
|
145
|
-
"#{before}#{text}#{after}"
|
146
|
-
end
|
147
|
-
|
148
|
-
def colorize_if_io_isatty(io,text,color,bold)
|
149
|
-
if io.tty? then
|
150
|
-
text = colorize(text,color,bold)
|
151
|
-
end
|
152
|
-
text
|
153
|
-
end
|
154
|
-
|
155
|
-
def color_puts(text, color, bold = true)
|
156
|
-
@stdout.puts colorize_if_io_isatty(@stdout,text,color,bold)
|
157
|
-
end
|
158
|
-
|
159
|
-
def color_print(text,color, bold = true)
|
160
|
-
@stdout.print colorize_if_io_isatty(@stdout,text,color,bold)
|
161
|
-
end
|
162
|
-
end
|
163
|
-
end
|