sesame-cli 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/.document +5 -0
- data/Gemfile +20 -0
- data/Gemfile.lock +109 -0
- data/README.md +234 -0
- data/Rakefile +44 -0
- data/UNLICENSE +24 -0
- data/VERSION +1 -0
- data/bin/sesame +42 -0
- data/lib/sesame/cave.rb +282 -0
- data/lib/sesame/dict.rb +2062 -0
- data/lib/sesame/fail.rb +4 -0
- data/lib/sesame/jinn.rb +308 -0
- data/lib/sesame/lang/en.yml +50 -0
- data/lib/sesame.rb +4 -0
- data/sesame-cli.gemspec +100 -0
- data/sesame.gemspec +99 -0
- data/spec/spec_helper.rb +30 -0
- metadata +273 -0
data/lib/sesame/fail.rb
ADDED
data/lib/sesame/jinn.rb
ADDED
@@ -0,0 +1,308 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
require 'i18n'
|
3
|
+
require 'clipboard'
|
4
|
+
|
5
|
+
module Sesame
|
6
|
+
class Jinn
|
7
|
+
def initialize(opts)
|
8
|
+
@opts = opts
|
9
|
+
_parse
|
10
|
+
_welcome
|
11
|
+
@sesame = Cave.new(@opts[:path])
|
12
|
+
I18n.load_path = Dir[File.join(File.dirname(__FILE__), 'lang', '*yml')]
|
13
|
+
rescue Fail => e
|
14
|
+
_error(e.message)
|
15
|
+
end
|
16
|
+
|
17
|
+
def process!
|
18
|
+
was_locked = false
|
19
|
+
if @sesame.exists?
|
20
|
+
@sesame.forget if @sesame.locked? && @opts.expunge?
|
21
|
+
if @sesame.locked?
|
22
|
+
_unlock
|
23
|
+
@sesame.forget
|
24
|
+
was_locked = true
|
25
|
+
else
|
26
|
+
_open
|
27
|
+
end
|
28
|
+
else
|
29
|
+
@sesame.forget if @sesame.locked?
|
30
|
+
_new
|
31
|
+
end
|
32
|
+
_process(@opts[:command])
|
33
|
+
if @opts[:command].nil? || @opts.interactive?
|
34
|
+
loop do
|
35
|
+
say("\n")
|
36
|
+
break if _prompt
|
37
|
+
end
|
38
|
+
if @opts.expunge?
|
39
|
+
@sesame.close
|
40
|
+
else
|
41
|
+
_lock(was_locked)
|
42
|
+
end
|
43
|
+
elsif was_locked
|
44
|
+
_lock(true)
|
45
|
+
else
|
46
|
+
@sesame.close
|
47
|
+
end
|
48
|
+
rescue Fail => e
|
49
|
+
_error(e.message)
|
50
|
+
end
|
51
|
+
|
52
|
+
protected
|
53
|
+
|
54
|
+
def _welcome
|
55
|
+
return if @opts[:quiet]
|
56
|
+
say(HighLine.color(<<~EOS, :bold, :yellow))
|
57
|
+
╔═════════════════════════════════════╗
|
58
|
+
║ ┏━━━┓ ┏━━━┓ ┏━━━┓ ┏━┓ ┏┓ ┏┓ ┏━━━┓ ║
|
59
|
+
║ ┗━╋━┓ ┣━━┫ ┗━╋━┓ ┏┻━┻┓ ┃┗┳┛┃ ┣━━┫ ║
|
60
|
+
║ ┗━━━┛ ┗━━━┛ ┗━━━┛ ┗ ┛ ┗ ┛ ┗━━━┛ ║
|
61
|
+
╚═════════════════════════════════════╝
|
62
|
+
EOS
|
63
|
+
end
|
64
|
+
|
65
|
+
def _parse
|
66
|
+
_set_path
|
67
|
+
_set_command('list') if @opts.list?
|
68
|
+
_set_command('add') if @opts.add?
|
69
|
+
_set_command('get') if @opts.get?
|
70
|
+
_set_command('next') if @opts.next?
|
71
|
+
_set_command('delete') if @opts.delete?
|
72
|
+
end
|
73
|
+
|
74
|
+
def _set_path
|
75
|
+
# set @opts[:path] if nil from .sesamerc and then $SESAME_PATH and then current dir
|
76
|
+
if @opts[:path].nil?
|
77
|
+
@opts[:path] = _load_config || ENV.fetch('SESAME_PATH', '.')
|
78
|
+
end
|
79
|
+
@opts[:path] = File.expand_path(@opts[:path])
|
80
|
+
unless Dir.exist?(@opts[:path])
|
81
|
+
say("No such directory: #{@opts[:path]}")
|
82
|
+
exit 2
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def _load_config(base=".")
|
87
|
+
path = File.join(base, '.sesamerc')
|
88
|
+
if File.exist?(path)
|
89
|
+
File.read(path)
|
90
|
+
elsif base == '.'
|
91
|
+
_load_config(Dir.home)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def _set_command(name)
|
96
|
+
if @opts[:command].nil?
|
97
|
+
@opts[:command] = name
|
98
|
+
else
|
99
|
+
say("Cannot execute command #{name}; #{@opts[:command]} already specified!")
|
100
|
+
exit 2
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
def _process(command)
|
105
|
+
return if command.nil?
|
106
|
+
case command.to_sym
|
107
|
+
when :list
|
108
|
+
_list
|
109
|
+
when :add
|
110
|
+
_add
|
111
|
+
when :get
|
112
|
+
_get
|
113
|
+
when :next
|
114
|
+
_next
|
115
|
+
when :delete
|
116
|
+
_delete
|
117
|
+
else
|
118
|
+
_error
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def _prompt
|
123
|
+
done = false
|
124
|
+
_info("prompt")
|
125
|
+
choose do |menu|
|
126
|
+
menu.prompt = "\n> "
|
127
|
+
menu.shell = true
|
128
|
+
menu.choice(:list, "Display all of the services and users in your Sesame store.") do |command, args|
|
129
|
+
_set_opts(args)
|
130
|
+
_list
|
131
|
+
end
|
132
|
+
menu.choice(:add, "Add a new service and user to your Sesame store.") do |command, args|
|
133
|
+
_set_opts(args)
|
134
|
+
_add
|
135
|
+
end
|
136
|
+
menu.choice(:get, "Retrieve the pass phrase for a service and user.") do |command, args|
|
137
|
+
_set_opts(args)
|
138
|
+
_get
|
139
|
+
end
|
140
|
+
menu.choice(:next, "Generate a new passphrase for a service and user.") do |comnmand, args|
|
141
|
+
_set_opts(args)
|
142
|
+
_next
|
143
|
+
end
|
144
|
+
menu.choice(:delete, "Remove a service and user from the Sesame store.") do |command, args|
|
145
|
+
_set_opts(args)
|
146
|
+
_delete
|
147
|
+
end
|
148
|
+
menu.choice(:exit, "Close Sesame.") do
|
149
|
+
done = true
|
150
|
+
end
|
151
|
+
end
|
152
|
+
done
|
153
|
+
rescue Fail => e
|
154
|
+
_error(e.message)
|
155
|
+
end
|
156
|
+
|
157
|
+
def _error(details="An error occurred")
|
158
|
+
message =
|
159
|
+
if @opts[:quiet]
|
160
|
+
_trans("error", details: details)
|
161
|
+
else
|
162
|
+
_trans("jinn.error", details: details)
|
163
|
+
end
|
164
|
+
say(HighLine.color(message, :bold, :red))
|
165
|
+
end
|
166
|
+
|
167
|
+
def _new
|
168
|
+
words = nil
|
169
|
+
if @opts.reconstruct?
|
170
|
+
_info("reconstruct")
|
171
|
+
words = ask("🔑 ") { |q| q.echo = "*" }
|
172
|
+
end
|
173
|
+
phrase = @sesame.create!(words)
|
174
|
+
if words.nil?
|
175
|
+
_info("new")
|
176
|
+
_show(phrase)
|
177
|
+
else
|
178
|
+
_info("reconstructed")
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
def _open
|
183
|
+
_info("open")
|
184
|
+
words = ask("🔑 ") { |q| q.echo = "*" }
|
185
|
+
@sesame.open(words)
|
186
|
+
_info("path", path: @sesame.path)
|
187
|
+
end
|
188
|
+
|
189
|
+
def _unlock
|
190
|
+
_info("unlock")
|
191
|
+
key = ask("🔑 ") { |q| q.echo = "*" }
|
192
|
+
@sesame.unlock(key)
|
193
|
+
_info("path", path: @sesame.path)
|
194
|
+
end
|
195
|
+
|
196
|
+
def _forget
|
197
|
+
_info("forgot")
|
198
|
+
@sesame.forget
|
199
|
+
end
|
200
|
+
|
201
|
+
def _list
|
202
|
+
_info("list")
|
203
|
+
if @opts[:service].nil? || @opts[:service].length == 0
|
204
|
+
@sesame.index.each do |service, users|
|
205
|
+
next if service == 'sesame'
|
206
|
+
if users.count > 1
|
207
|
+
say("#{service} (#{users.count})")
|
208
|
+
else
|
209
|
+
say(service)
|
210
|
+
end
|
211
|
+
end
|
212
|
+
else
|
213
|
+
users = @sesame.index[@opts[:service]]
|
214
|
+
raise Fail, "No such service found, you must be thinking of some other cave" if users.nil? || @opts[:service] == "sesame"
|
215
|
+
users.each do |user, index|
|
216
|
+
say(user)
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
def _get
|
222
|
+
phrase = @sesame.get(*_question, @opts[:offset])
|
223
|
+
_info("get", @sesame.item)
|
224
|
+
_show(phrase)
|
225
|
+
end
|
226
|
+
|
227
|
+
def _add
|
228
|
+
phrase = @sesame.insert(*_question(true), @opts[:offset])
|
229
|
+
_info("add", @sesame.item)
|
230
|
+
_show(phrase)
|
231
|
+
end
|
232
|
+
|
233
|
+
def _next
|
234
|
+
phrase = @sesame.update(*_question, @opts[:offset])
|
235
|
+
if phrase.nil?
|
236
|
+
_info("next_key")
|
237
|
+
else
|
238
|
+
_info("next", @sesame.item)
|
239
|
+
_show(phrase)
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
def _delete
|
244
|
+
phrase = @sesame.delete(*_question)
|
245
|
+
_info("delete")
|
246
|
+
_show(phrase)
|
247
|
+
end
|
248
|
+
|
249
|
+
def _lock(silent=false)
|
250
|
+
key = @sesame.lock
|
251
|
+
return if silent
|
252
|
+
_info("lock")
|
253
|
+
_show(key)
|
254
|
+
end
|
255
|
+
|
256
|
+
def _info(message, args={})
|
257
|
+
message =
|
258
|
+
if @opts[:quiet]
|
259
|
+
_trans(message, args)
|
260
|
+
else
|
261
|
+
_trans("jinn.#{message}", args)
|
262
|
+
end
|
263
|
+
return if message.nil? || message.length == 0
|
264
|
+
say(HighLine.color(message, :bold, :green))
|
265
|
+
end
|
266
|
+
|
267
|
+
def _trans(message, args)
|
268
|
+
retval = I18n.t(message, args)
|
269
|
+
if retval =~ /^translation missing/
|
270
|
+
retval =
|
271
|
+
if @opts[:echo]
|
272
|
+
I18n.t("#{message}_echo", args)
|
273
|
+
else
|
274
|
+
I18n.t("#{message}_clip", args)
|
275
|
+
end
|
276
|
+
end
|
277
|
+
retval
|
278
|
+
end
|
279
|
+
|
280
|
+
def _show(data)
|
281
|
+
if @opts[:echo]
|
282
|
+
say(data)
|
283
|
+
else
|
284
|
+
Clipboard.copy(data)
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
def _set_opts(args)
|
289
|
+
args = args.split(" ").map(&:strip).map(&:downcase)
|
290
|
+
return if args.count == 0
|
291
|
+
@opts[:service] = args.first if args.count < 3
|
292
|
+
@opts[:user] = args.last if args.count == 2
|
293
|
+
end
|
294
|
+
|
295
|
+
def _question(user_required=false)
|
296
|
+
service, user = @opts[:service], @opts[:user]
|
297
|
+
if service.nil?
|
298
|
+
_info("service")
|
299
|
+
service = ask("🏷 ")
|
300
|
+
end
|
301
|
+
if user.nil? && (user_required || !@sesame.unique?(service))
|
302
|
+
_info("user")
|
303
|
+
user = ask("👤 ")
|
304
|
+
end
|
305
|
+
[service.downcase, user.nil? ? nil : user.downcase]
|
306
|
+
end
|
307
|
+
end
|
308
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
en:
|
2
|
+
error: 'Error: %{details}.'
|
3
|
+
open: 'Enter pass phrase.'
|
4
|
+
unlock: 'Enter unlock code.'
|
5
|
+
prompt: ''
|
6
|
+
new_echo: 'Store created. Your passphrase is:'
|
7
|
+
new_clip: 'Store created. Passphrase copied to clipboard.'
|
8
|
+
reconstruct: 'Enter pass phrase for new store.'
|
9
|
+
reconstructed: 'Store created with your chosen passphrase.'
|
10
|
+
path: 'Opened %{path}'
|
11
|
+
forgot: 'Lock removed.'
|
12
|
+
list: ''
|
13
|
+
get_echo: 'Password for %{service} / %{user}:'
|
14
|
+
get_clip: 'Password for %{service} / %{user} copied to clipboard.'
|
15
|
+
add_echo: 'New password:'
|
16
|
+
add_clip: 'New password copied to clipboard.'
|
17
|
+
next_key: 'Unlock code will be updated on exit.'
|
18
|
+
next_echo: 'Updated password for %{service} / %{user}:'
|
19
|
+
next_clip: 'Updated password for %{service} / %{user} copied to clipboard.'
|
20
|
+
delete_echo: 'Deleted password for %{service} / %{user}:'
|
21
|
+
delete_clip: 'Deleted password for %{service} / %{user} copied to clipboard.'
|
22
|
+
lock_echo: 'Store locked with unlock code:'
|
23
|
+
lock_clip: 'Store locked. Unlock code copied to clipboard.'
|
24
|
+
service: 'Enter service name:'
|
25
|
+
user: 'Enter user name:'
|
26
|
+
jinn:
|
27
|
+
error: '🧞 - "A thousand apologies! %{details}."'
|
28
|
+
open: '🧞 - "Open sesame! Please incant the magic words..."'
|
29
|
+
unlock: '🧞 - "Master, your cave is locked. Do you have the key?"'
|
30
|
+
prompt: '🧞 - "What is your command?"'
|
31
|
+
new_echo: '🧞 - "Your new cave is ready, master. Please commit these magic words to memory..."'
|
32
|
+
new_clip: '🧞 - "Your new cave is ready, master. The magic words are in your clipboard."'
|
33
|
+
reconstruct: '🧞 - "Master, what are the magic words you wish to use?"'
|
34
|
+
reconstructed: '🧞 - "Your new cave is ready, master."'
|
35
|
+
path: '🧞 - "The cave is open: %{path}"'
|
36
|
+
forgot: '🧞 - "My pleasure, master. I seem to have misplaced the lock."'
|
37
|
+
list: '🧞 - "Behold! Tremble in awe at the greatness of these heroes!"'
|
38
|
+
get_echo: '🧞 - "Master, the magic words for %{user} of %{service} are..."'
|
39
|
+
get_clip: '🧞 - "Master, the magic words for %{user} of %{service} are in your clipboard."'
|
40
|
+
add_echo: '🧞 - "Your new magic words are..."'
|
41
|
+
add_clip: '🧞 - "Your new magic words are in your clipboard."'
|
42
|
+
next_key: '🧞 - "I shall forge you a new key for locking your cave."'
|
43
|
+
next_echo: '🧞 - "I have recast the magic words for %{user} of %{service}..."'
|
44
|
+
next_clip: '🧞 - "The recast magic words for %{user} of %{service} are in your clipboard."'
|
45
|
+
delete_echo: '🧞 - "These magic words for %{user} of %{service} are no more..."'
|
46
|
+
delete_clip: '🧞 - "The magic words for %{user} of %{service} are no more, but are still in your clipboard."'
|
47
|
+
lock_echo: '🧞 - "I have secured your treasure with this key..."'
|
48
|
+
lock_clip: '🧞 - "I have secured your treasure. The key is in your clipboard."'
|
49
|
+
service: '🧞 - "What be the name of the service?"'
|
50
|
+
user: '🧞 - "And what be the name of the user?"'
|
data/lib/sesame.rb
ADDED
data/sesame-cli.gemspec
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: sesame-cli 0.1.0 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "sesame-cli".freeze
|
9
|
+
s.version = "0.1.0"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib".freeze]
|
13
|
+
s.authors = ["Jason Hutchens".freeze, "Jack Casey".freeze]
|
14
|
+
s.date = "2018-04-20"
|
15
|
+
s.description = "Sesame is a simple password manager for the command-line.".freeze
|
16
|
+
s.email = "jasonhutchens@gmail.com".freeze
|
17
|
+
s.executables = ["sesame".freeze]
|
18
|
+
s.extra_rdoc_files = [
|
19
|
+
"README.md"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".document",
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
25
|
+
"README.md",
|
26
|
+
"Rakefile",
|
27
|
+
"UNLICENSE",
|
28
|
+
"VERSION",
|
29
|
+
"bin/sesame",
|
30
|
+
"lib/sesame.rb",
|
31
|
+
"lib/sesame/cave.rb",
|
32
|
+
"lib/sesame/dict.rb",
|
33
|
+
"lib/sesame/fail.rb",
|
34
|
+
"lib/sesame/jinn.rb",
|
35
|
+
"lib/sesame/lang/en.yml",
|
36
|
+
"sesame-cli.gemspec",
|
37
|
+
"sesame.gemspec",
|
38
|
+
"spec/spec_helper.rb"
|
39
|
+
]
|
40
|
+
s.homepage = "http://github.com/kranzky/sesame-cli".freeze
|
41
|
+
s.licenses = ["UNLICENSE".freeze]
|
42
|
+
s.required_ruby_version = Gem::Requirement.new("~> 2.1".freeze)
|
43
|
+
s.rubygems_version = "2.7.3".freeze
|
44
|
+
s.summary = "Sesame is a simple password manager for the command-line.".freeze
|
45
|
+
|
46
|
+
if s.respond_to? :specification_version then
|
47
|
+
s.specification_version = 4
|
48
|
+
|
49
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
50
|
+
s.add_runtime_dependency(%q<bases>.freeze, ["~> 1.0"])
|
51
|
+
s.add_runtime_dependency(%q<clipboard>.freeze, ["~> 1.1"])
|
52
|
+
s.add_runtime_dependency(%q<digest-crc>.freeze, ["~> 0.4"])
|
53
|
+
s.add_runtime_dependency(%q<highline>.freeze, ["~> 1.7"])
|
54
|
+
s.add_runtime_dependency(%q<i18n>.freeze, ["~> 1.0"])
|
55
|
+
s.add_runtime_dependency(%q<rbnacl>.freeze, ["~> 5.0"])
|
56
|
+
s.add_runtime_dependency(%q<rbnacl-libsodium>.freeze, ["~> 1.0"])
|
57
|
+
s.add_runtime_dependency(%q<slop>.freeze, ["~> 4.6"])
|
58
|
+
s.add_development_dependency(%q<awesome_print>.freeze, ["~> 1.8.0"])
|
59
|
+
s.add_development_dependency(%q<byebug>.freeze, ["~> 10.0.1"])
|
60
|
+
s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
61
|
+
s.add_development_dependency(%q<rdoc>.freeze, ["~> 6.0"])
|
62
|
+
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.7"])
|
63
|
+
s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.15"])
|
64
|
+
s.add_development_dependency(%q<yard>.freeze, ["~> 0.9"])
|
65
|
+
else
|
66
|
+
s.add_dependency(%q<bases>.freeze, ["~> 1.0"])
|
67
|
+
s.add_dependency(%q<clipboard>.freeze, ["~> 1.1"])
|
68
|
+
s.add_dependency(%q<digest-crc>.freeze, ["~> 0.4"])
|
69
|
+
s.add_dependency(%q<highline>.freeze, ["~> 1.7"])
|
70
|
+
s.add_dependency(%q<i18n>.freeze, ["~> 1.0"])
|
71
|
+
s.add_dependency(%q<rbnacl>.freeze, ["~> 5.0"])
|
72
|
+
s.add_dependency(%q<rbnacl-libsodium>.freeze, ["~> 1.0"])
|
73
|
+
s.add_dependency(%q<slop>.freeze, ["~> 4.6"])
|
74
|
+
s.add_dependency(%q<awesome_print>.freeze, ["~> 1.8.0"])
|
75
|
+
s.add_dependency(%q<byebug>.freeze, ["~> 10.0.1"])
|
76
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
77
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 6.0"])
|
78
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3.7"])
|
79
|
+
s.add_dependency(%q<simplecov>.freeze, ["~> 0.15"])
|
80
|
+
s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
|
81
|
+
end
|
82
|
+
else
|
83
|
+
s.add_dependency(%q<bases>.freeze, ["~> 1.0"])
|
84
|
+
s.add_dependency(%q<clipboard>.freeze, ["~> 1.1"])
|
85
|
+
s.add_dependency(%q<digest-crc>.freeze, ["~> 0.4"])
|
86
|
+
s.add_dependency(%q<highline>.freeze, ["~> 1.7"])
|
87
|
+
s.add_dependency(%q<i18n>.freeze, ["~> 1.0"])
|
88
|
+
s.add_dependency(%q<rbnacl>.freeze, ["~> 5.0"])
|
89
|
+
s.add_dependency(%q<rbnacl-libsodium>.freeze, ["~> 1.0"])
|
90
|
+
s.add_dependency(%q<slop>.freeze, ["~> 4.6"])
|
91
|
+
s.add_dependency(%q<awesome_print>.freeze, ["~> 1.8.0"])
|
92
|
+
s.add_dependency(%q<byebug>.freeze, ["~> 10.0.1"])
|
93
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
94
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 6.0"])
|
95
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3.7"])
|
96
|
+
s.add_dependency(%q<simplecov>.freeze, ["~> 0.15"])
|
97
|
+
s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
data/sesame.gemspec
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: sesame 0.1.0 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "sesame".freeze
|
9
|
+
s.version = "0.1.0"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib".freeze]
|
13
|
+
s.authors = ["Jason Hutchens".freeze, "Jack Casey".freeze]
|
14
|
+
s.date = "2018-04-20"
|
15
|
+
s.description = "Sesame is a simple password manager for the command-line.".freeze
|
16
|
+
s.email = "jasonhutchens@gmail.com".freeze
|
17
|
+
s.executables = ["sesame".freeze]
|
18
|
+
s.extra_rdoc_files = [
|
19
|
+
"README.md"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".document",
|
23
|
+
"Gemfile",
|
24
|
+
"Gemfile.lock",
|
25
|
+
"README.md",
|
26
|
+
"Rakefile",
|
27
|
+
"UNLICENSE",
|
28
|
+
"VERSION",
|
29
|
+
"bin/sesame",
|
30
|
+
"lib/sesame.rb",
|
31
|
+
"lib/sesame/cave.rb",
|
32
|
+
"lib/sesame/dict.rb",
|
33
|
+
"lib/sesame/fail.rb",
|
34
|
+
"lib/sesame/jinn.rb",
|
35
|
+
"lib/sesame/lang/en.yml",
|
36
|
+
"sesame.gemspec",
|
37
|
+
"spec/spec_helper.rb"
|
38
|
+
]
|
39
|
+
s.homepage = "http://github.com/kranzky/sesame-cli".freeze
|
40
|
+
s.licenses = ["UNLICENSE".freeze]
|
41
|
+
s.required_ruby_version = Gem::Requirement.new("~> 2.1".freeze)
|
42
|
+
s.rubygems_version = "2.7.3".freeze
|
43
|
+
s.summary = "Sesame is a simple password manager for the command-line.".freeze
|
44
|
+
|
45
|
+
if s.respond_to? :specification_version then
|
46
|
+
s.specification_version = 4
|
47
|
+
|
48
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
|
+
s.add_runtime_dependency(%q<bases>.freeze, ["~> 1.0"])
|
50
|
+
s.add_runtime_dependency(%q<clipboard>.freeze, ["~> 1.1"])
|
51
|
+
s.add_runtime_dependency(%q<digest-crc>.freeze, ["~> 0.4"])
|
52
|
+
s.add_runtime_dependency(%q<highline>.freeze, ["~> 1.7"])
|
53
|
+
s.add_runtime_dependency(%q<i18n>.freeze, ["~> 1.0"])
|
54
|
+
s.add_runtime_dependency(%q<rbnacl>.freeze, ["~> 5.0"])
|
55
|
+
s.add_runtime_dependency(%q<rbnacl-libsodium>.freeze, ["~> 1.0"])
|
56
|
+
s.add_runtime_dependency(%q<slop>.freeze, ["~> 4.6"])
|
57
|
+
s.add_development_dependency(%q<awesome_print>.freeze, ["~> 1.8.0"])
|
58
|
+
s.add_development_dependency(%q<byebug>.freeze, ["~> 10.0.1"])
|
59
|
+
s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
60
|
+
s.add_development_dependency(%q<rdoc>.freeze, ["~> 6.0"])
|
61
|
+
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.7"])
|
62
|
+
s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.15"])
|
63
|
+
s.add_development_dependency(%q<yard>.freeze, ["~> 0.9"])
|
64
|
+
else
|
65
|
+
s.add_dependency(%q<bases>.freeze, ["~> 1.0"])
|
66
|
+
s.add_dependency(%q<clipboard>.freeze, ["~> 1.1"])
|
67
|
+
s.add_dependency(%q<digest-crc>.freeze, ["~> 0.4"])
|
68
|
+
s.add_dependency(%q<highline>.freeze, ["~> 1.7"])
|
69
|
+
s.add_dependency(%q<i18n>.freeze, ["~> 1.0"])
|
70
|
+
s.add_dependency(%q<rbnacl>.freeze, ["~> 5.0"])
|
71
|
+
s.add_dependency(%q<rbnacl-libsodium>.freeze, ["~> 1.0"])
|
72
|
+
s.add_dependency(%q<slop>.freeze, ["~> 4.6"])
|
73
|
+
s.add_dependency(%q<awesome_print>.freeze, ["~> 1.8.0"])
|
74
|
+
s.add_dependency(%q<byebug>.freeze, ["~> 10.0.1"])
|
75
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
76
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 6.0"])
|
77
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3.7"])
|
78
|
+
s.add_dependency(%q<simplecov>.freeze, ["~> 0.15"])
|
79
|
+
s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
|
80
|
+
end
|
81
|
+
else
|
82
|
+
s.add_dependency(%q<bases>.freeze, ["~> 1.0"])
|
83
|
+
s.add_dependency(%q<clipboard>.freeze, ["~> 1.1"])
|
84
|
+
s.add_dependency(%q<digest-crc>.freeze, ["~> 0.4"])
|
85
|
+
s.add_dependency(%q<highline>.freeze, ["~> 1.7"])
|
86
|
+
s.add_dependency(%q<i18n>.freeze, ["~> 1.0"])
|
87
|
+
s.add_dependency(%q<rbnacl>.freeze, ["~> 5.0"])
|
88
|
+
s.add_dependency(%q<rbnacl-libsodium>.freeze, ["~> 1.0"])
|
89
|
+
s.add_dependency(%q<slop>.freeze, ["~> 4.6"])
|
90
|
+
s.add_dependency(%q<awesome_print>.freeze, ["~> 1.8.0"])
|
91
|
+
s.add_dependency(%q<byebug>.freeze, ["~> 10.0.1"])
|
92
|
+
s.add_dependency(%q<jeweler>.freeze, ["~> 2.3.9"])
|
93
|
+
s.add_dependency(%q<rdoc>.freeze, ["~> 6.0"])
|
94
|
+
s.add_dependency(%q<rspec>.freeze, ["~> 3.7"])
|
95
|
+
s.add_dependency(%q<simplecov>.freeze, ["~> 0.15"])
|
96
|
+
s.add_dependency(%q<yard>.freeze, ["~> 0.9"])
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
|
3
|
+
module SimpleCov::Configuration
|
4
|
+
def clean_filters
|
5
|
+
@filters = []
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
SimpleCov.configure do
|
10
|
+
clean_filters
|
11
|
+
load_profile 'test_frameworks'
|
12
|
+
end
|
13
|
+
|
14
|
+
ENV["COVERAGE"] && SimpleCov.start do
|
15
|
+
add_filter "/.rvm/"
|
16
|
+
end
|
17
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
18
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
19
|
+
|
20
|
+
require 'rspec'
|
21
|
+
|
22
|
+
require 'sesame'
|
23
|
+
|
24
|
+
# Requires supporting files with custom matchers and macros, etc,
|
25
|
+
# in ./support/ and its subdirectories.
|
26
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
27
|
+
|
28
|
+
RSpec.configure do |config|
|
29
|
+
|
30
|
+
end
|