uberpass 0.0.5 → 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7740715563b6928b828e51e7898b4c8c262d89f3
4
+ data.tar.gz: 1b3251bf85e6c77bd139696405e44735f91ab839
5
+ SHA512:
6
+ metadata.gz: 9ba192d068a8664e52704253c5d987479e9e9a8e981d06d078ba7c48797148895808ecb4b180c17f640a413f77459636a123e731a16fd1cada5ea748459c9c79
7
+ data.tar.gz: 98945b49e7629a01ec68e1fd7581b0c5cc8261cf9e64b6d073cd906edc2f2e668a5cc054fe6d4b966c59728a72025e69fd984c28b97e12d89a3b379e77694e88
@@ -28,3 +28,18 @@ and getting some help:
28
28
 
29
29
  $ uberpass
30
30
  $ uberpass:0.0.5> help
31
+
32
+ removing a password file
33
+
34
+ $ uberpass-seppuku
35
+
36
+ or
37
+
38
+ $ uberpass-seppuku happy_place
39
+
40
+ == Changelog
41
+
42
+ === v1.0.0
43
+
44
+ Passwords now stored as json. Dump passwords from older versions and add back
45
+ in.
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ Signal.trap("INT") { exit }
4
+
5
+ require 'uberpass'
6
+
7
+ Uberpass::FileHandler.configure { |handler| handler.namespace = ARGV.pop }
8
+
9
+ terminal = HighLine.new $stdin, $stdout
10
+
11
+ if terminal.agree("<%= color('are you sure?', :error) %> ") { |q| q.default = "n" }
12
+ Uberpass::FileHandler.seppuku!
13
+ end
@@ -1,6 +1,3 @@
1
- require 'openssl'
2
- require 'yaml'
3
-
4
1
  require 'uberpass/version'
5
2
  require 'uberpass/decrypt'
6
3
  require 'uberpass/encrypt'
@@ -61,7 +61,7 @@ module Uberpass
61
61
  action.short = 'g'
62
62
  action.usage = 'g google'
63
63
  action.proc = ->(terminal, key) {
64
- ShowDecorator.new(terminal, FileHandler.generate(key)).output
64
+ ShowDecorator.new(terminal, FileHandler.generate(key.to_s)).output
65
65
  }
66
66
  action.description = "Generates a random password for a given key"
67
67
  end
@@ -71,7 +71,7 @@ module Uberpass
71
71
  action.short = 'gs'
72
72
  action.usage = 'gs [name]'
73
73
  action.proc = ->(terminal, key) {
74
- ShowDecorator.new(terminal, FileHandler.generate_short(key)).output
74
+ ShowDecorator.new(terminal, FileHandler.generate_short(key.to_s)).output
75
75
  }
76
76
  action.description = "Generates a random password but smaller so its easier to type into a phone or a legacy system"
77
77
  end
@@ -82,20 +82,20 @@ module Uberpass
82
82
  action.usage = 'rm [name]'
83
83
  action.confirm = true
84
84
  action.proc = ->(terminal, key) {
85
- ShowDecorator.new(terminal, FileHandler.remove(key)).output
85
+ ShowDecorator.new(terminal, FileHandler.remove(key.to_s)).output
86
86
  }
87
87
  action.description = "Removes and entry"
88
88
  end
89
89
 
90
90
  register_action do |action|
91
91
  action.name = 'show'
92
- action.short = 's'
93
- action.usage = 's [name|index]'
92
+ action.short = 'cat'
93
+ action.usage = 'cat [name|index]'
94
94
  action.proc = ->(terminal, key) {
95
95
  entry = if key =~ /^\d+$/
96
96
  FileHandler.all[key.to_i]
97
97
  else
98
- FileHandler.show key
98
+ FileHandler.show key.to_s
99
99
  end
100
100
  ShowDecorator.new(terminal, entry).output
101
101
  }
@@ -105,9 +105,9 @@ module Uberpass
105
105
  register_action do |action|
106
106
  action.name = 'encrypt'
107
107
  action.short = 'e'
108
- action.usage = '[name] << [password]'
108
+ action.usage = '[name] < [password]'
109
109
  action.proc = ->(terminal, key, password) {
110
- ShowDecorator.new(terminal, FileHandler.encrypt(key, password)).output
110
+ ShowDecorator.new(terminal, FileHandler.encrypt(key.to_s, password.to_s)).output
111
111
  }
112
112
  action.description = "Encrypts a value"
113
113
  end
@@ -117,7 +117,7 @@ module Uberpass
117
117
  action.short = 'mv'
118
118
  action.usage = 'mv [name] [new name]'
119
119
  action.proc = ->(terminal, old, new) {
120
- ShowDecorator.new(terminal, FileHandler.rename(old, new)).output
120
+ ShowDecorator.new(terminal, FileHandler.rename(old.to_s, new.to_s)).output
121
121
  }
122
122
  action.description = "Rename an entry"
123
123
  end
@@ -211,7 +211,7 @@ module Uberpass
211
211
  end
212
212
 
213
213
  def output_entry(key, values, index)
214
- out = "<%= color('#{values["created_at"].strftime("%d/%m/%Y")}', :date) %>"
214
+ out = "<%= color('#{values["created_at"]}', :date) %>"
215
215
  out << " <%= color('[#{index}]', :index) %>"
216
216
  out << " <%= color('#{key}', :name) %>"
217
217
  @terminal.say out
@@ -251,7 +251,7 @@ module Uberpass
251
251
  if values.nil?
252
252
  out = "<%= color('#{key} does not exist', :error) %>"
253
253
  else
254
- out = "<%= color('#{values["created_at"].strftime("%d/%m/%Y")}', :date) %>"
254
+ out = "<%= color('#{values["created_at"]}', :date) %>"
255
255
  out << " <%= color('#{key}', :name) %>\n"
256
256
  out << "<%= color('#{values["password"]}', :name) %>"
257
257
  end
@@ -10,7 +10,6 @@ module Uberpass
10
10
  cipher.decrypt
11
11
  cipher.key = key.private_decrypt(encrypted_key)
12
12
  cipher.iv = key.private_decrypt(encrypted_iv)
13
-
14
13
  @decrypted_data = cipher.update(encrypted_data)
15
14
  @decrypted_data << cipher.final
16
15
  end
@@ -1,4 +1,5 @@
1
1
  require 'securerandom'
2
+ require 'json'
2
3
 
3
4
  module Uberpass
4
5
  class FileHandler
@@ -36,20 +37,26 @@ module Uberpass
36
37
  end
37
38
 
38
39
  def write(encryptor)
39
- File.open(passwords_file, "w") { |file|
40
+ File.open(passwords_file, "w+") { |file|
40
41
  file.write(encryptor.encrypted_data)
41
42
  }
42
- File.open(key_file, "w") { |file|
43
+ File.open(key_file, "w+") { |file|
43
44
  file.write(encryptor.encrypted_key)
44
45
  }
45
- File.open(iv_file, "w") { |file|
46
+ File.open(iv_file, "w+") { |file|
46
47
  file.write(encryptor.encrypted_iv)
47
48
  }
48
49
  end
49
50
 
51
+ def seppuku!
52
+ if File.exists?(passwords_file)
53
+ File.unlink(passwords_file, key_file, iv_file)
54
+ end
55
+ end
56
+
50
57
  def decrypted_passwords
51
58
  if File.exists?(passwords_file)
52
- YAML::load(
59
+ decode(
53
60
  Decrypt.new(
54
61
  File.read(private_key_file),
55
62
  File.read(passwords_file),
@@ -63,6 +70,14 @@ module Uberpass
63
70
  end
64
71
  end
65
72
 
73
+ def encode(data)
74
+ JSON.pretty_generate(data)
75
+ end
76
+
77
+ def decode(data)
78
+ JSON.parse(data)
79
+ end
80
+
66
81
  def show(key)
67
82
  Hash[*[key, decrypted_passwords[key]]]
68
83
  end
@@ -88,7 +103,7 @@ module Uberpass
88
103
  "password" => password,
89
104
  "created_at" => Time.now
90
105
  }
91
- encryptor = Encrypt.new(File.read(public_key_file), passwords.to_yaml, pass_phrase)
106
+ encryptor = Encrypt.new(File.read(public_key_file), encode(passwords), pass_phrase)
92
107
  write(encryptor)
93
108
  Hash[*[key, entry]]
94
109
  end
@@ -98,7 +113,7 @@ module Uberpass
98
113
  raise ExistingEntryError, new unless passwords[new].nil?
99
114
  entry = passwords.delete old
100
115
  passwords[new] = entry
101
- encryptor = Encrypt.new(File.read(public_key_file), passwords.to_yaml)
116
+ encryptor = Encrypt.new(File.read(public_key_file), encode(passwords))
102
117
  write(encryptor)
103
118
  Hash[*[new, entry]]
104
119
  end
@@ -106,7 +121,7 @@ module Uberpass
106
121
  def remove(key)
107
122
  passwords = decrypted_passwords
108
123
  entry = passwords.delete key
109
- encryptor = Encrypt.new(File.read(public_key_file), passwords.to_yaml)
124
+ encryptor = Encrypt.new(File.read(public_key_file), encode(passwords))
110
125
  write(encryptor)
111
126
  Hash[*[key, entry]]
112
127
  end
@@ -1,3 +1,3 @@
1
1
  module Uberpass
2
- VERSION = "0.0.5"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -41,7 +41,7 @@ input.truncate input.rewind
41
41
  puts output.string
42
42
  output.truncate output.rewind
43
43
 
44
- input << 's cia'
44
+ input << 'cat cia'
45
45
  input.rewind
46
46
  uberpass.do_action
47
47
  input.truncate input.rewind
@@ -19,9 +19,7 @@ describe Uberpass do
19
19
 
20
20
  @input.truncate(@input.rewind)
21
21
 
22
- Uberpass::FileHandler.all.each do |entry|
23
- Uberpass::FileHandler.remove entry.keys.first
24
- end
22
+ Uberpass::FileHandler.seppuku!
25
23
 
26
24
  Uberpass::FileHandler.generate 'twitter'
27
25
  Uberpass::FileHandler.generate 'facebook'
@@ -43,7 +41,7 @@ describe Uberpass do
43
41
 
44
42
  assert_match /facebook/, @output.string
45
43
  assert_match /twitter/, @output.string
46
- assert_match Time.now.strftime("%d/%m/%Y"), @output.string
44
+ assert_match Time.now.strftime("%Y-%m-%d"), @output.string
47
45
  end
48
46
 
49
47
  it "should raise and catch argument error" do
@@ -74,7 +72,7 @@ describe Uberpass do
74
72
 
75
73
  assert_match /are you sure\?/, @output.string
76
74
  assert_match /linkedin/, @output.string
77
- assert_match Time.now.strftime("%d/%m/%Y"), @output.string
75
+ assert_match Time.now.strftime("%Y-%m-%d"), @output.string
78
76
  end
79
77
 
80
78
  it "should encrypt an existing password with <" do
@@ -119,7 +117,7 @@ describe Uberpass do
119
117
 
120
118
  it "should show an error if key missing" do
121
119
  @output.truncate(@output.rewind)
122
- @input << 's missing'
120
+ @input << 'cat missing'
123
121
  @input.rewind
124
122
 
125
123
  @uberpass.do_action
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uberpass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Rufus Post
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-03-09 00:00:00.000000000 Z
11
+ date: 2014-01-03 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: highline
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - '='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - '='
28
25
  - !ruby/object:Gem::Version
@@ -30,23 +27,20 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: turn
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - '='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - '='
60
53
  - !ruby/object:Gem::Version
@@ -64,6 +57,7 @@ email:
64
57
  - rufuspost@gmail.com
65
58
  executables:
66
59
  - uberpass
60
+ - uberpass-seppuku
67
61
  extensions: []
68
62
  extra_rdoc_files: []
69
63
  files:
@@ -72,6 +66,7 @@ files:
72
66
  - README.rdoc
73
67
  - Rakefile
74
68
  - bin/uberpass
69
+ - bin/uberpass-seppuku
75
70
  - lib/uberpass.rb
76
71
  - lib/uberpass/cli.rb
77
72
  - lib/uberpass/decrypt.rb
@@ -83,29 +78,27 @@ files:
83
78
  - uberpass.gemspec
84
79
  homepage: ''
85
80
  licenses: []
81
+ metadata: {}
86
82
  post_install_message:
87
83
  rdoc_options: []
88
84
  require_paths:
89
85
  - lib
90
86
  required_ruby_version: !ruby/object:Gem::Requirement
91
- none: false
92
87
  requirements:
93
- - - ! '>='
88
+ - - '>='
94
89
  - !ruby/object:Gem::Version
95
90
  version: '0'
96
91
  required_rubygems_version: !ruby/object:Gem::Requirement
97
- none: false
98
92
  requirements:
99
- - - ! '>='
93
+ - - '>='
100
94
  - !ruby/object:Gem::Version
101
95
  version: '0'
102
96
  requirements: []
103
97
  rubyforge_project: uberpass
104
- rubygems_version: 1.8.23
98
+ rubygems_version: 2.0.0
105
99
  signing_key:
106
- specification_version: 3
100
+ specification_version: 4
107
101
  summary: command line key chain
108
102
  test_files:
109
103
  - spec/uberpass_output.rb
110
104
  - spec/uberpass_spec.rb
111
- has_rdoc: