rpass 0.1.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: a71b6a57ccc93aa4485be90a30bbb4a164aa4e85
4
+ data.tar.gz: e6dd9e471c803590b53fa584cc9977fe848698ea
5
+ SHA512:
6
+ metadata.gz: 3e424792e6e583c5fa467ddc4c9bdd05b44d959f3f3f9ef328ac718bb2d6f1ba8dc919ed285051b630f2af3faea44c5ea260e4779b2da2482e0ebe93c7bd95ce
7
+ data.tar.gz: d7d768ed556eaa5b9863cef9136bfd33337d6ed726b3dc1aaaac511e4260acd9c846968c0e07f958da74ea149886d9b97d513c0994faf2264dee1e65a681f913
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .byebug_history
11
+ tags
data/.pryrc ADDED
@@ -0,0 +1,2 @@
1
+ $: << File.join(File.dirname(__FILE__), "lib")
2
+ require "rpass"
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,135 @@
1
+ # Ruby linting configuration.
2
+ # We only worry about two kinds of issues: 'error' and anything less than that.
3
+ # Error is not about severity, but about taste. Simple style choices that
4
+ # never have a great excuse to be broken, such as 1.9 JSON-like hash syntax,
5
+ # are errors. Choices that tend to have good exceptions in practice, such as
6
+ # line length, are warnings.
7
+
8
+ # If you'd like to make changes, a full list of available issues is at
9
+ # https://github.com/bbatsov/rubocop/blob/master/config/enabled.yml
10
+ # A list of configurable issues is at:
11
+ # https://github.com/bbatsov/rubocop/blob/master/config/default.yml
12
+ #
13
+ # If you disable a check, document why.
14
+
15
+ StringLiterals:
16
+ EnforcedStyle: double_quotes
17
+ Severity: error
18
+
19
+ HashSyntax:
20
+ EnforcedStyle: ruby19
21
+ UseHashRocketsWithSymbolValues: false
22
+ Severity: error
23
+ Exclude:
24
+ - !ruby/regexp /db\/schema.rb/
25
+
26
+ AlignHash:
27
+ SupportedLastArgumentHashStyles: always_ignore
28
+
29
+ AlignParameters:
30
+ Enabled: false # This is usually true, but we often want to roll back to
31
+ # the start of a line.
32
+
33
+ Attr:
34
+ Enabled: false # We have no styleguide guidance here, and it seems to be
35
+ # in frequent use.
36
+
37
+ ClassAndModuleChildren:
38
+ Enabled: false # module X<\n>module Y is just as good as module X::Y.
39
+
40
+ Style/RescueModifier:
41
+ Enabled: false
42
+
43
+ Documentation:
44
+ Enabled: false
45
+
46
+ ParameterLists:
47
+ Max: 10
48
+
49
+ ModuleLength:
50
+ Max: 150
51
+ Exclude:
52
+ - !ruby/regexp /spec\/*\/*/
53
+
54
+ ClassLength:
55
+ Max: 130
56
+ Exclude:
57
+ - !ruby/regexp /spec\/*\/*/
58
+
59
+ Metrics/ModuleLength:
60
+ Exclude:
61
+ - !ruby/regexp /spec\/*\/*/
62
+
63
+ Metrics/BlockLength:
64
+ Exclude:
65
+ - !ruby/regexp /spec\/*\/*/
66
+
67
+ PercentLiteralDelimiters:
68
+ PreferredDelimiters:
69
+ '%w': '{}'
70
+
71
+ LineLength:
72
+ Max: 150
73
+ Severity: warning
74
+
75
+ MultilineTernaryOperator:
76
+ Severity: error
77
+
78
+ UnreachableCode:
79
+ Severity: error
80
+
81
+ AndOr:
82
+ Severity: error
83
+
84
+ EndAlignment:
85
+ Severity: error
86
+
87
+ IndentationWidth:
88
+ Severity: error
89
+
90
+ MethodLength:
91
+ CountComments: false # count full line comments?
92
+ Max: 25
93
+ Severity: error
94
+
95
+ FrozenStringLiteralComment:
96
+ Enabled: false # Adding comment to all files...
97
+
98
+ Alias:
99
+ Enabled: false # We have no guidance on alias vs alias_method
100
+
101
+ RedundantSelf:
102
+ Enabled: false # Sometimes a self.field is a bit more clear
103
+
104
+ IfUnlessModifier:
105
+ Enabled: false
106
+
107
+ Metrics/AbcSize:
108
+ Max: 16
109
+
110
+ Rails/HttpPositionalArguments:
111
+ Enabled: false
112
+
113
+ AllCops:
114
+ TargetRubyVersion: 2.3
115
+ # Include gemspec and Rakefile
116
+ Include:
117
+ - '**/*.gemspec'
118
+ - '**/*.rake'
119
+ - '**/Rakefile'
120
+ - '**/Capfile'
121
+ - '**/Guardfile'
122
+ - '**/Podfile'
123
+ - '**/Vagrantfile'
124
+ Exclude:
125
+ - '**/Gemfile'
126
+ - 'db/**/*'
127
+ - 'bin/*'
128
+ - 'script/**/*'
129
+ - 'config/**/*'
130
+ - 'vendor/**/*'
131
+
132
+ # By default, the rails cops are not run. Override in project or home
133
+ # directory .rubocop.yml files, or by giving the -R/--rails option.
134
+ Rails:
135
+ Enabled: true
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.3
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rpass.gemspec
4
+ gemspec
@@ -0,0 +1,59 @@
1
+ # Rpass
2
+
3
+ RPass is a Reasonable interface to LastPass. It provides an interactive shell that can
4
+ be used to display information about accounts, along with indexes to allow you to easily copy or
5
+ display the account passwords. The indexing is in the style of [sack](https://github.com/sampson-chen/sack).
6
+
7
+ RPass is built using:
8
+ * [CLI-Console](https://github.com/davispuh/CLI-Console),
9
+ * [Highline](https://github.com/JEG2/highline)
10
+ * [lastpass-ruby](https://github.com/detunized/lastpass-ruby)
11
+ * [clamp](https://github.com/mdub/clamp)
12
+ * [colorize](https://github.com/fazibear/colorize)
13
+
14
+ Currently, RPass is read-only. I would like to extend it to support saving passwords, and maybe
15
+ other LastPass features in future.
16
+
17
+ ## Installation
18
+
19
+ Add this line to your application's Gemfile:
20
+
21
+ ```ruby
22
+ gem 'rpass'
23
+ ```
24
+
25
+ And then execute:
26
+
27
+ $ bundle
28
+
29
+ Or install it yourself as:
30
+
31
+ $ gem install rpass
32
+
33
+ ## Usage
34
+
35
+ ```bash
36
+ # Launch the interactive shell. This will ask for your username, password and 2fa.
37
+ rpass
38
+
39
+ # This will print out all accounts with any field (other than password) that matches the string "gmail".
40
+ # You can use any valid regular expression for the parameter to "ls".
41
+ rpass> ls gmail
42
+
43
+ # This will copy the given matched account from the last output of "ls". Indexing starts at zero.
44
+ rpass> cp 1
45
+
46
+ # This will print out the given matched account from th elast output of "ls".
47
+ rpass> show 1
48
+ ```
49
+
50
+ ## Development
51
+
52
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
53
+
54
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
55
+
56
+ ## Contributing
57
+
58
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/rpass.
59
+
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require "rubocop/rake_task"
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+ RuboCop::RakeTask.new(:rubocop)
7
+
8
+ task default: [:spec, :rubocop]
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "rpass"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.join(File.dirname(__FILE__), "..", "lib")
3
+ require "rpass"
4
+
5
+ RPass::CLI.run
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,6 @@
1
+ require "rpass/version"
2
+ require "rpass/cli"
3
+
4
+ module Rpass
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,39 @@
1
+ require 'rpass/storage'
2
+
3
+ module RPass
4
+
5
+ def self.cache
6
+ @cache ||= Cache.new(RPass.storage)
7
+ end
8
+
9
+ class Cache
10
+ CACHE_KEY = ".cache"
11
+
12
+ attr_reader :storage
13
+
14
+ def initialize(storage)
15
+ @storage = storage
16
+ end
17
+
18
+ def write(name, value, duration: 0)
19
+ storage.write(name, value)
20
+ map = data
21
+ data[name] = Time.now + duration
22
+ storage.write(CACHE_KEY, data)
23
+ end
24
+
25
+ def read(name)
26
+ map = data
27
+ if !data[name] || Time.now < data[name]
28
+ storage.read(name)
29
+ else
30
+ storage.delete(name)
31
+ nil
32
+ end
33
+ end
34
+
35
+ def data
36
+ YAML.load(storage.read(CACHE_KEY))
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,13 @@
1
+ require "clamp"
2
+ require "lastpass"
3
+ require "rpass/shell_command"
4
+
5
+ module RPass
6
+ class CLI < Clamp::Command
7
+ self.default_subcommand = "shell"
8
+
9
+ subcommand "shell", "Interactive shell", RPass::ShellCommand
10
+ end
11
+ end
12
+
13
+
@@ -0,0 +1,19 @@
1
+ require "colorize"
2
+
3
+ module RPass
4
+ class Display
5
+ def render_account(account, index)
6
+ <<-EOF
7
+ #{title(account, index)}
8
+ - id: #{account.id}
9
+ - username: #{account.username}
10
+ - url: #{account.url}
11
+ - group: #{account.group}
12
+ EOF
13
+ end
14
+
15
+ def title(account, index)
16
+ "[#{index}] - #{account.name}:".green
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,70 @@
1
+ require "cli-console"
2
+ require "pbcopy"
3
+ require "rpass/display"
4
+
5
+ module RPass
6
+ class Shell
7
+ private
8
+
9
+ extend CLI::Task
10
+
11
+ attr_accessor:accounts, :matches, :display
12
+
13
+ public
14
+
15
+ def initialize(accounts, display: Display.new)
16
+ @accounts = accounts
17
+ @matches = nil
18
+ @display = display
19
+ end
20
+
21
+ def ls(args)
22
+ string = args.size == 0 ? "." : args.first
23
+ reset_matches
24
+ i = 0
25
+ matched_accounts(string).each do |account|
26
+ puts display.render_account(account, i)
27
+ puts
28
+ i += 1
29
+ end
30
+ end
31
+
32
+ def cp(args)
33
+ pbcopy < get_match(args[0]).password
34
+ end
35
+
36
+ def print(args)
37
+ puts get_match(args[0]).password
38
+ end
39
+
40
+ def get_match(index)
41
+ index = index.to_i
42
+ fail "No matched accounts" unless matches
43
+ fail "No such index: #{index}" if index < 0 || index > matches.size - 1
44
+ matches[index]
45
+ end
46
+
47
+ def reset_matches
48
+ @matches = nil
49
+ end
50
+
51
+ def matched_accounts(string)
52
+ @matches ||= find_matches(string)
53
+ end
54
+
55
+ def find_matches(string)
56
+ accounts.select do |account|
57
+ matched = false
58
+ %i{id name username password url group}.each do |method|
59
+ matched ||= account.send(method).to_s =~ /#{string}/
60
+ break if matched
61
+ end
62
+ matched
63
+ end
64
+ end
65
+
66
+ def prompt
67
+ "rpass"
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,23 @@
1
+ require "cli-console"
2
+ require "highline"
3
+ require "rpass/vault_provider"
4
+ require "rpass/shell"
5
+
6
+ module RPass
7
+ class ShellCommand < Clamp::Command
8
+ def execute
9
+ io = HighLine.new
10
+ shell = Shell.new(all_accounts)
11
+ console = ::CLI::Console.new(io)
12
+ console.addCommand("ls", shell.method(:ls), "List lastpass entries.")
13
+ console.addCommand("print", shell.method(:print), "Print password for the specified entry, by number.")
14
+ console.addCommand("cp", shell.method(:cp), "Copy password for the specified entry to clipboard.")
15
+ console.addExitCommand('quit', 'Quit')
16
+ console.start("%s> ", [shell.method(:prompt)])
17
+ end
18
+
19
+ def all_accounts
20
+ RPass.vault.accounts
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,52 @@
1
+ require "fileutils"
2
+
3
+ module RPass
4
+
5
+ def self.storage
6
+ @storage ||= Storage.new("#{ENV["HOME"]}/.rpass")
7
+ end
8
+
9
+ class Storage
10
+ attr_reader :path
11
+
12
+ def initialize(path)
13
+ @path = path
14
+ end
15
+
16
+ def write(name, value)
17
+ File.write(file(name), value)
18
+ end
19
+
20
+ def delete(name)
21
+ File.delete(file(name))
22
+ end
23
+
24
+ def exists?(name)
25
+ File.exists?(file(name))
26
+ end
27
+
28
+ def read(name)
29
+ exists?(name) ? File.read(file(name)) : nil
30
+ end
31
+
32
+ def [](name)
33
+ read(name)
34
+ end
35
+
36
+ def []=(name, value)
37
+ write(name, value)
38
+ end
39
+
40
+ private
41
+
42
+ def file(name)
43
+ "#{dir}/#{name}"
44
+ end
45
+
46
+ def dir
47
+ @dir ||= path.tap do |path|
48
+ FileUtils.mkdir_p path
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,42 @@
1
+ require "lastpass"
2
+ require "rpass/cache"
3
+ require "highline"
4
+
5
+ module RPass
6
+
7
+ def self.vault
8
+ VaultProvider.new(RPass.storage).vault
9
+ end
10
+
11
+ class VaultProvider
12
+ attr_reader :storage
13
+
14
+ def initialize(storage)
15
+ @storage = storage
16
+ end
17
+
18
+ def vault
19
+ LastPass::Vault.open_remote(username, get_password, get_second_factor)
20
+ end
21
+
22
+ def username
23
+ storage["username"] ||= get_username
24
+ end
25
+
26
+ def get_password
27
+ cli.ask("Enter your password: "){ |q| q.echo = false }.strip
28
+ end
29
+
30
+ def get_second_factor
31
+ cli.ask("Enter your second factor: ").strip
32
+ end
33
+
34
+ def get_username
35
+ cli.ask("Enter your username: ").strip
36
+ end
37
+
38
+ def cli
39
+ @cli ||= HighLine.new
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,3 @@
1
+ module Rpass
2
+ VERSION = "0.1.0".freeze
3
+ end
@@ -0,0 +1,38 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "rpass/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rpass"
8
+ spec.version = Rpass::VERSION
9
+ spec.authors = ["Michael Shea"]
10
+ spec.email = ["mike.shea@gmail.com"]
11
+
12
+ spec.summary = "Reasonable lastpass CLI"
13
+ spec.description = "A reasonable lastpass CLI"
14
+ spec.homepage = ""
15
+
16
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
17
+ # delete this section to allow pushing this gem to any host.
18
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes." unless spec.respond_to?(:metadata)
19
+
20
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
+ spec.bindir = "exe"
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = ["lib"]
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.11"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rspec", "~> 3.0"
28
+ spec.add_development_dependency "rubocop"
29
+ spec.add_development_dependency "pry"
30
+ spec.add_development_dependency "byebug"
31
+
32
+ spec.add_dependency "clamp"
33
+ spec.add_dependency "lastpass"
34
+ spec.add_dependency "highline"
35
+ spec.add_dependency "cli-console"
36
+ spec.add_dependency "pbcopy"
37
+ spec.add_dependency "colorize"
38
+ end
metadata ADDED
@@ -0,0 +1,232 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rpass
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Michael Shea
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-04-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: clamp
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: lastpass
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: highline
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: cli-console
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pbcopy
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: colorize
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ description: A reasonable lastpass CLI
182
+ email:
183
+ - mike.shea@gmail.com
184
+ executables: []
185
+ extensions: []
186
+ extra_rdoc_files: []
187
+ files:
188
+ - ".gitignore"
189
+ - ".pryrc"
190
+ - ".rspec"
191
+ - ".rubocop.yml"
192
+ - ".travis.yml"
193
+ - Gemfile
194
+ - README.md
195
+ - Rakefile
196
+ - bin/console
197
+ - bin/rpass
198
+ - bin/setup
199
+ - lib/rpass.rb
200
+ - lib/rpass/cache.rb
201
+ - lib/rpass/cli.rb
202
+ - lib/rpass/display.rb
203
+ - lib/rpass/shell.rb
204
+ - lib/rpass/shell_command.rb
205
+ - lib/rpass/storage.rb
206
+ - lib/rpass/vault_provider.rb
207
+ - lib/rpass/version.rb
208
+ - rpass.gemspec
209
+ homepage: ''
210
+ licenses: []
211
+ metadata: {}
212
+ post_install_message:
213
+ rdoc_options: []
214
+ require_paths:
215
+ - lib
216
+ required_ruby_version: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ required_rubygems_version: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - ">="
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ requirements: []
227
+ rubyforge_project:
228
+ rubygems_version: 2.2.2
229
+ signing_key:
230
+ specification_version: 4
231
+ summary: Reasonable lastpass CLI
232
+ test_files: []