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.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.pryrc +2 -0
- data/.rspec +2 -0
- data/.rubocop.yml +135 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/README.md +59 -0
- data/Rakefile +8 -0
- data/bin/console +14 -0
- data/bin/rpass +5 -0
- data/bin/setup +8 -0
- data/lib/rpass.rb +6 -0
- data/lib/rpass/cache.rb +39 -0
- data/lib/rpass/cli.rb +13 -0
- data/lib/rpass/display.rb +19 -0
- data/lib/rpass/shell.rb +70 -0
- data/lib/rpass/shell_command.rb +23 -0
- data/lib/rpass/storage.rb +52 -0
- data/lib/rpass/vault_provider.rb +42 -0
- data/lib/rpass/version.rb +3 -0
- data/rpass.gemspec +38 -0
- metadata +232 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
data/.pryrc
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -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
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -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
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -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
|
data/bin/rpass
ADDED
data/bin/setup
ADDED
data/lib/rpass.rb
ADDED
data/lib/rpass/cache.rb
ADDED
@@ -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
|
data/lib/rpass/cli.rb
ADDED
@@ -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
|
data/lib/rpass/shell.rb
ADDED
@@ -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
|
data/rpass.gemspec
ADDED
@@ -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: []
|