mpw 3.2.1 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +14 -0
- data/CHANGELOG.md +56 -0
- data/Gemfile +9 -9
- data/README.md +99 -80
- data/VERSION +1 -1
- data/bin/mpw +23 -193
- data/bin/mpw-add +61 -0
- data/bin/mpw-config +108 -0
- data/bin/mpw-copy +71 -0
- data/bin/mpw-delete +66 -0
- data/bin/mpw-export +70 -0
- data/bin/mpw-genpwd +50 -0
- data/bin/mpw-import +61 -0
- data/bin/mpw-list +66 -0
- data/bin/mpw-update +70 -0
- data/bin/mpw-wallet +116 -0
- data/i18n/en.yml +70 -32
- data/i18n/fr.yml +70 -32
- data/lib/mpw/cli.rb +333 -220
- data/lib/mpw/config.rb +53 -40
- data/lib/mpw/item.rb +13 -13
- data/lib/mpw/mpw.rb +75 -98
- data/mpw.gemspec +9 -9
- data/templates/add_form.erb +9 -0
- data/templates/update_form.erb +17 -0
- data/test/files/fixtures.yml +0 -4
- data/test/init.rb +19 -0
- data/test/test_config.rb +64 -0
- data/test/test_item.rb +42 -88
- data/test/test_mpw.rb +88 -139
- data/test/test_translate.rb +31 -0
- data/test/tests.rb +4 -1
- metadata +96 -27
- data/CHANGELOG +0 -13
- data/test/files/test_import.csv +0 -3
- data/test/files/test_import.yml +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 449a8603fbd577dd5cb93ef7beefb0b8e9c45825
|
4
|
+
data.tar.gz: 763ee9163b7d0abac719853bdf48fa3b4a10ec7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f843a0c0918d63864f01c7929736f75f60bbe97ac3de0b0588b10bc90b50e87abf7f155622653c19947caa11648ac1147e88a38ff8a8756593020fb976d10d50
|
7
|
+
data.tar.gz: 571dc0eb3daa1d425f4ceae5137f1cfc41017828335d6b8fe081428c9d6bd7713badfee3cec0cc49fe45512305bcb176555c6c412c1dc8e13100b35e609b14e5
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# CHANGELOG
|
2
|
+
## v4.0.0
|
3
|
+
|
4
|
+
* feature: set default wallet
|
5
|
+
* add option for generate a random password when you update an item
|
6
|
+
* fix encryption when you share an existing wallet
|
7
|
+
* several bugs fix
|
8
|
+
|
9
|
+
## v4.0.0-beta1
|
10
|
+
|
11
|
+
* add manage share key with new interface
|
12
|
+
|
13
|
+
## v4.0.0-beta
|
14
|
+
|
15
|
+
* new interface with a table
|
16
|
+
* new command line interface
|
17
|
+
* use text editor for add or update an item
|
18
|
+
* fix generate gpg key with RSA
|
19
|
+
* several bugs fix
|
20
|
+
* add unit tests
|
21
|
+
|
22
|
+
## v3.2.1
|
23
|
+
|
24
|
+
* fix bug when add a new item
|
25
|
+
|
26
|
+
## v3.2.0
|
27
|
+
|
28
|
+
* add support OTP
|
29
|
+
* fix bug in synchronize
|
30
|
+
* improve interface
|
31
|
+
|
32
|
+
## v3.1.0
|
33
|
+
|
34
|
+
* add clipboard
|
35
|
+
* can change gpg version
|
36
|
+
* minor change in interface
|
37
|
+
* several bugs fix
|
38
|
+
|
39
|
+
## v3.0.0
|
40
|
+
|
41
|
+
* new storage format
|
42
|
+
* new share system
|
43
|
+
* remove MPW server
|
44
|
+
|
45
|
+
## v2.0.0
|
46
|
+
|
47
|
+
* change format csv to yaml
|
48
|
+
* easy install with gem
|
49
|
+
* add sync with ftp and ssh
|
50
|
+
* many improvement
|
51
|
+
|
52
|
+
## v1.1.0
|
53
|
+
|
54
|
+
* Add sync with MPW Server
|
55
|
+
* Add MPW Server
|
56
|
+
* Fix minors bugs
|
data/Gemfile
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
|
-
gem
|
3
|
-
gem
|
4
|
-
gem
|
5
|
-
gem
|
6
|
-
gem
|
7
|
-
gem
|
8
|
-
gem
|
9
|
-
gem
|
10
|
-
gem
|
2
|
+
gem "i18n", "~> 0.7", ">= 0.7.0"
|
3
|
+
gem "gpgme", "~> 2.0", ">= 2.0.12"
|
4
|
+
gem "highline", "~> 1.7", ">= 1.7.8"
|
5
|
+
gem "locale", "~> 2.1", ">= 2.1.2"
|
6
|
+
gem "colorize", "~> 0.8", ">= 0.8.1"
|
7
|
+
gem "net-ssh", "~> 3.2", ">= 3.2.0"
|
8
|
+
gem "net-sftp", "~> 2.1", ">= 2.1.2"
|
9
|
+
gem "clipboard", "~> 1.1", ">= 1.1.1"
|
10
|
+
gem "rotp", "~> 3.1", ">= 3.1.0"
|
data/README.md
CHANGED
@@ -1,128 +1,147 @@
|
|
1
|
-
# Manage your passwords!
|
1
|
+
# MPW: Manage your passwords!
|
2
|
+
[![Version](https://img.shields.io/badge/latest_version-4.0.0-green.svg)](https://github.com/nishiki/manage-password/releases)
|
3
|
+
[![Build Status](https://travis-ci.org/nishiki/manage-password.svg?branch=master)](https://travis-ci.org/nishiki/manage-password)
|
4
|
+
[![License](https://img.shields.io/badge/license-GPL--2.0-blue.svg)](https://github.com/nishiki/manage-password/blob/master/LICENSE)
|
2
5
|
|
3
|
-
|
4
|
-
MPW can synchronize your password with SSH or FTP.
|
6
|
+
mpw is a little software which stores your passwords in [GnuPG](http://www.gnupg.org/) encrypted files.
|
5
7
|
|
6
|
-
|
8
|
+
## Features
|
7
9
|
|
8
|
-
|
10
|
+
* generate random password
|
11
|
+
* generate OTP code
|
12
|
+
* copy your login, password or otp in clipboard
|
13
|
+
* manage many wallets
|
14
|
+
* synchronize your passwords with SSH or FTP.
|
15
|
+
* share a wallet with others GPG keys
|
9
16
|
|
10
|
-
|
11
|
-
* install xclip
|
12
|
-
* gem install mpw
|
17
|
+
## Install
|
13
18
|
|
14
|
-
|
19
|
+
On debian or ubuntu:
|
20
|
+
```
|
21
|
+
apt install ruby ruby-dev xclip
|
22
|
+
gem install mpw
|
23
|
+
```
|
24
|
+
|
25
|
+
## How to use
|
26
|
+
### First steps
|
27
|
+
|
28
|
+
Initialize your first wallet:
|
29
|
+
```
|
30
|
+
mpw config --init user@host.com
|
31
|
+
```
|
15
32
|
|
16
|
-
|
33
|
+
Add your first item:
|
17
34
|
```
|
18
|
-
mpw
|
35
|
+
mpw add
|
19
36
|
```
|
20
37
|
|
21
|
-
|
38
|
+
And list your items:
|
22
39
|
```
|
23
|
-
mpw
|
24
|
-
|
40
|
+
mpw list
|
41
|
+
```
|
42
|
+
or search an item with
|
43
|
+
```
|
44
|
+
mpw list --pattern Da
|
45
|
+
mpw list --group bank
|
25
46
|
```
|
26
47
|
|
27
|
-
|
48
|
+
Output:
|
28
49
|
```
|
29
|
-
|
30
|
-
|
50
|
+
Bank
|
51
|
+
==============================================================================
|
52
|
+
ID | Host | User | Protocol | Port | OTP | Comment
|
53
|
+
==============================================================================
|
54
|
+
1 | bank.com | 1234456 | https | | X |
|
55
|
+
|
56
|
+
Linux
|
57
|
+
==============================================================================
|
58
|
+
ID | Host | User | Protocol | Port | OTP | Comment
|
59
|
+
==============================================================================
|
60
|
+
2 | linuxfr.org | example | https | | | Da Linux French Site
|
61
|
+
|
31
62
|
```
|
32
63
|
|
33
|
-
|
64
|
+
Copy a password, login or OTP code:
|
34
65
|
```
|
35
|
-
mpw
|
36
|
-
mpw --add --key root@localhost.local --config /path/conf/file.cfg
|
37
|
-
mpw --add --key root@localhost.local --wallet wallet_name
|
38
|
-
mpw --add --key root@localhost.local --config /path/conf/file.cfg --wallet wallet_name
|
66
|
+
mpw copy -p linuxfr
|
39
67
|
```
|
40
68
|
|
41
|
-
|
69
|
+
Update an item:
|
42
70
|
```
|
43
|
-
mpw
|
44
|
-
mpw --add --key root@localhost.local --file /path/gpg/file.pub --config /path/conf/file.cfg
|
45
|
-
mpw --add --key root@localhost.local --file /path/gpg/file.pub --wallet wallet_name
|
46
|
-
mpw --add --key root@localhost.local --file /path/gpg/file.pub --config /path/conf/file.cfg --wallet wallet_name
|
71
|
+
mpw update -p linuxfr
|
47
72
|
```
|
48
73
|
|
49
|
-
|
74
|
+
Delete an item:
|
50
75
|
```
|
51
|
-
mpw
|
52
|
-
mpw --delete --key root@localhost.local --wallet wallet_name
|
53
|
-
mpw --delete --key root@localhost.local --wallet wallet_name --config /path/conf/file.cfg
|
76
|
+
mpw delete -p linuxfr
|
54
77
|
```
|
55
78
|
|
56
|
-
|
79
|
+
### Manage wallets
|
80
|
+
|
81
|
+
List all available wallets:
|
57
82
|
```
|
58
|
-
mpw --
|
59
|
-
mpw --add --config /path/conf/file.cfg
|
60
|
-
mpw --add --wallet wallet_name
|
61
|
-
mpw --add --config /path/conf/file.cfg --wallet wallet_name
|
83
|
+
mpw wallet --list
|
62
84
|
```
|
63
85
|
|
64
|
-
|
86
|
+
Create an other wallet:
|
65
87
|
```
|
66
|
-
mpw --
|
67
|
-
mpw --update --id uniq_id --config /path/conf/file.cfg
|
68
|
-
mpw --update --id uniq_id --wallet wallet_name
|
69
|
-
mpw --update --id uniq_id --config /path/conf/file.cfg --wallet wallet_name
|
88
|
+
mpw config --wallet work --init user@host.com
|
70
89
|
```
|
71
90
|
|
72
|
-
|
91
|
+
List all GPG keys in wallet:
|
73
92
|
```
|
74
|
-
mpw --
|
75
|
-
mpw --delete --id uniq_id --config /path/conf/file.cfg
|
76
|
-
mpw --delete --id uniq_id --wallet wallet_name
|
77
|
-
mpw --delete --id uniq_id --config /path/conf/file.cfg --wallet wallet_name
|
93
|
+
mpw wallet --list-keys [--wallet NAME]
|
78
94
|
```
|
79
95
|
|
80
|
-
|
96
|
+
Share with an other GPG key:
|
81
97
|
```
|
82
|
-
mpw --
|
83
|
-
|
84
|
-
mpw --
|
85
|
-
mpw --show 'string to search' --config /path/conf/file.cfg --wallet wallet_name
|
86
|
-
mpw --show 'string to search' --group group_name
|
87
|
-
mpw --show 'string to search' --group group_name --config /path/conf/file.cfg
|
88
|
-
mpw --show 'string to search' --group group_name --wallet wallet_name
|
89
|
-
mpw --show 'string to search' --group group_name --config /path/conf/file.cfg --wallet wallet_name
|
98
|
+
mpw wallet --add-gpg-key test42@localhost.com
|
99
|
+
or
|
100
|
+
mpw wallet --add-gpg-key /path/to/file
|
90
101
|
```
|
91
102
|
|
92
|
-
|
103
|
+
Remove a GPG key:
|
93
104
|
```
|
94
|
-
mpw
|
95
|
-
mpw --export --file /path/file/to/export.yml --config /path/conf/file.cfg
|
96
|
-
mpw --export --file /path/file/to/export.yml --wallet wallet_name
|
97
|
-
mpw --export --file /path/file/to/export.yml --config /path/conf/file.cfg --wallet wallet_name
|
105
|
+
mpw wallet --delete-gpg-key test42@localhost.com
|
98
106
|
```
|
99
107
|
|
100
|
-
|
108
|
+
Add synchronize:
|
101
109
|
```
|
102
|
-
mpw --
|
103
|
-
mpw --import --file /path/file/to/export.yml --config /path/conf/file.cfg
|
104
|
-
mpw --import --file /path/file/to/export.yml --wallet wallet_name
|
105
|
-
mpw --import --file /path/file/to/export.yml --config /path/conf/file.cfg --wallet wallet_name
|
110
|
+
mpw wallet --protocol ssh --host example.com --user test --path /remote/path --password
|
106
111
|
```
|
107
112
|
|
108
|
-
|
113
|
+
### Export and import data
|
114
|
+
|
115
|
+
You can export your data in yaml file with your passwords in clear text:
|
109
116
|
```
|
117
|
+
mpw export --file export.yml
|
118
|
+
```
|
119
|
+
|
120
|
+
Import data from an yaml file:
|
121
|
+
```
|
122
|
+
mpw import --file import.yml
|
123
|
+
```
|
124
|
+
|
125
|
+
Example yaml file for mpw:
|
126
|
+
|
127
|
+
```
|
128
|
+
---
|
110
129
|
1:
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
user: test
|
116
|
-
password: letoortue
|
117
|
-
port: 21
|
118
|
-
comment: Mysuper website
|
119
|
-
2:
|
120
|
-
name: Linuxfr
|
121
|
-
group: Pro
|
122
|
-
host: Linuxfr.org
|
130
|
+
host: bank.com
|
131
|
+
user: 123456
|
132
|
+
group: Bank
|
133
|
+
password: secret
|
123
134
|
protocol: https
|
124
|
-
user: test
|
125
|
-
password: coucou
|
126
135
|
port:
|
136
|
+
otp_key: 1afg34
|
127
137
|
comment:
|
138
|
+
2:
|
139
|
+
host: linuxfr.org
|
140
|
+
user: example
|
141
|
+
group:
|
142
|
+
password: 'complex %- password'
|
143
|
+
protocol: https
|
144
|
+
port:
|
145
|
+
otp_key:
|
146
|
+
comment: Da Linux French Site
|
128
147
|
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
4.0.0
|
data/bin/mpw
CHANGED
@@ -18,13 +18,10 @@
|
|
18
18
|
|
19
19
|
$: << File.expand_path('../../lib', __FILE__)
|
20
20
|
|
21
|
-
require 'optparse'
|
22
21
|
require 'locale'
|
23
22
|
require 'set'
|
24
23
|
require 'i18n'
|
25
|
-
require '
|
26
|
-
require 'mpw/config'
|
27
|
-
require 'mpw/cli'
|
24
|
+
require 'colorize'
|
28
25
|
|
29
26
|
# --------------------------------------------------------- #
|
30
27
|
# Set local
|
@@ -45,195 +42,28 @@ I18n.locale = lang.to_sym
|
|
45
42
|
# Options
|
46
43
|
# --------------------------------------------------------- #
|
47
44
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
45
|
+
bin_dir = File.dirname(__FILE__)
|
46
|
+
command = "#{bin_dir}/mpw-#{ARGV[0]}"
|
47
|
+
|
48
|
+
if Dir.glob("#{bin_dir}/mpw-*").include?("#{command}")
|
49
|
+
begin
|
50
|
+
Kernel.load(command)
|
51
|
+
rescue OptionParser::ParseError => e
|
52
|
+
puts "#{I18n.t('display.error')}: #{e}".red
|
53
|
+
end
|
54
|
+
else
|
55
|
+
puts "#{I18n.t('option.usage')}: mpw COMMAND [options]\n\n"
|
56
|
+
puts 'Commands:'
|
57
|
+
puts " add #{I18n.t('command.add')}"
|
58
|
+
puts " config #{I18n.t('command.config')}"
|
59
|
+
puts " copy #{I18n.t('command.copy')}"
|
60
|
+
puts " delete #{I18n.t('command.delete')}"
|
61
|
+
puts " export #{I18n.t('command.export')}"
|
62
|
+
puts " genpwd #{I18n.t('command.genpwd')}"
|
63
|
+
puts " import #{I18n.t('command.import')}"
|
64
|
+
puts " list #{I18n.t('command.list')}"
|
65
|
+
puts " update #{I18n.t('command.update')}"
|
66
|
+
puts " wallet #{I18n.t('command.wallet')}"
|
58
67
|
|
59
|
-
OptionParser.new do |opts|
|
60
|
-
opts.banner = "#{I18n.t('option.usage')}: mpw [options]"
|
61
|
-
|
62
|
-
opts.on('-a', '--add', I18n.t('option.add')) do
|
63
|
-
options[:add] = true
|
64
|
-
end
|
65
|
-
|
66
|
-
opts.on('-A', '--show-all', I18n.t('option.show_all')) do
|
67
|
-
options[:type] = nil
|
68
|
-
options[:show] = ''
|
69
|
-
end
|
70
|
-
|
71
|
-
opts.on('-c', '--config CONFIG', I18n.t('option.config')) do |config|
|
72
|
-
options[:config] = config
|
73
|
-
end
|
74
|
-
|
75
|
-
opts.on('-C', '--no-clipboard', I18n.t('option.clipboard')) do
|
76
|
-
options[:clipboard] = false
|
77
|
-
end
|
78
|
-
|
79
|
-
opts.on('-d', '--delete', I18n.t('option.remove')) do
|
80
|
-
options[:delete] = true
|
81
|
-
end
|
82
|
-
|
83
|
-
opts.on('-e', '--export', I18n.t('option.export')) do
|
84
|
-
options[:export] = true
|
85
|
-
end
|
86
|
-
|
87
|
-
opts.on('-E', '--editor', I18n.t('option.editor')) do
|
88
|
-
options[:editor] = true
|
89
|
-
end
|
90
|
-
|
91
|
-
opts.on('-f', '--file FILE', I18n.t('option.file')) do |file|
|
92
|
-
options[:file] = file
|
93
|
-
end
|
94
|
-
|
95
|
-
opts.on('-F', '--force', I18n.t('option.force')) do
|
96
|
-
options[:force] = true
|
97
|
-
end
|
98
|
-
|
99
|
-
opts.on('-g', '--group GROUP', I18n.t('option.group')) do |group|
|
100
|
-
options[:group] = group
|
101
|
-
end
|
102
|
-
|
103
|
-
opts.on('-G', '--generate-password [LENGTH]', I18n.t('option.generate_password')) do |length|
|
104
|
-
options_password[:length] = length
|
105
|
-
end
|
106
|
-
|
107
|
-
opts.on('-h', '--help', I18n.t('option.help')) do
|
108
|
-
puts opts
|
109
|
-
exit 0
|
110
|
-
end
|
111
|
-
|
112
|
-
opts.on('-i', '--id ID', I18n.t('option.id')) do |id|
|
113
|
-
options[:id] = id
|
114
|
-
end
|
115
|
-
|
116
|
-
opts.on('-I', '--import', I18n.t('option.import')) do
|
117
|
-
options[:import] = true
|
118
|
-
end
|
119
|
-
|
120
|
-
opts.on('-k', '--key KEY', I18n.t('option.key')) do |key|
|
121
|
-
options[:key] = key
|
122
|
-
end
|
123
|
-
|
124
|
-
opts.on('-n', '--numeric', I18n.t('option.numeric')) do
|
125
|
-
options_password[:numeric] = true
|
126
|
-
end
|
127
|
-
|
128
|
-
opts.on('-N', '--no-sync', I18n.t('option.no_sync')) do
|
129
|
-
options[:sync] = false
|
130
|
-
end
|
131
|
-
|
132
|
-
opts.on('-O', '--otp', I18n.t('option.otp')) do
|
133
|
-
options[:otp] = true
|
134
|
-
end
|
135
|
-
|
136
|
-
opts.on('-s', '--show [SEARCH]', I18n.t('option.show')) do |search|
|
137
|
-
search.nil? ? (options[:show] = '') : (options[:show] = search)
|
138
|
-
end
|
139
|
-
|
140
|
-
opts.on('-S', '--setup', I18n.t('option.setup')) do
|
141
|
-
options[:setup] = true
|
142
|
-
end
|
143
|
-
|
144
|
-
opts.on('-u', '--update', I18n.t('option.update')) do
|
145
|
-
options[:update] = true
|
146
|
-
end
|
147
|
-
|
148
|
-
opts.on('-w', '--wallet WALLET', I18n.t('option.wallet')) do |wallet|
|
149
|
-
options[:wallet] = wallet
|
150
|
-
end
|
151
|
-
|
152
|
-
opts.on('-W', '--setup-wallet', I18n.t('option.setup_wallet')) do
|
153
|
-
options[:setup_wallet] = true
|
154
|
-
end
|
155
|
-
|
156
|
-
opts.on('-x', '--special-chars', I18n.t('option.special_chars')) do
|
157
|
-
options_password[:special] = true
|
158
|
-
end
|
159
|
-
|
160
|
-
opts.on('-y', '--alpha', I18n.t('option.alpha')) do
|
161
|
-
options_password[:alpha] = true
|
162
|
-
end
|
163
|
-
end.parse!
|
164
|
-
|
165
|
-
# --------------------------------------------------------- #
|
166
|
-
# Main
|
167
|
-
# --------------------------------------------------------- #
|
168
|
-
|
169
|
-
# Generate password
|
170
|
-
if not options_password.empty?
|
171
|
-
puts MPW::MPW::password(options_password)
|
172
|
-
exit 0
|
173
|
-
end
|
174
|
-
|
175
|
-
begin
|
176
|
-
config = MPW::Config.new(options[:config])
|
177
|
-
cli = MPW::Cli.new(config, options[:clipboard], options[:sync], options[:otp])
|
178
|
-
|
179
|
-
# Setup a new config
|
180
|
-
if not options[:setup].nil?
|
181
|
-
cli.setup(lang)
|
182
|
-
exit 0
|
183
|
-
end
|
184
|
-
|
185
|
-
cli.setup(lang) if not config.is_valid?
|
186
|
-
cli.setup_gpg_key if not config.check_gpg_key?
|
187
|
-
|
188
|
-
cli.get_wallet(options[:wallet])
|
189
|
-
cli.decrypt
|
190
|
-
|
191
|
-
# Display the item's informations
|
192
|
-
if not options[:show].nil?
|
193
|
-
opts = {search: options[:show],
|
194
|
-
group: options[:group],
|
195
|
-
}
|
196
|
-
|
197
|
-
cli.display(opts)
|
198
|
-
|
199
|
-
# Remove an item
|
200
|
-
elsif not options[:delete].nil? and not options[:id].nil?
|
201
|
-
cli.delete(options[:id], options[:force])
|
202
|
-
|
203
|
-
# Update an item
|
204
|
-
elsif not options[:update].nil? and not options[:id].nil?
|
205
|
-
cli.update(options[:id])
|
206
|
-
|
207
|
-
# Add a new item
|
208
|
-
elsif not options[:add].nil? and options[:key].nil?
|
209
|
-
cli.add
|
210
|
-
|
211
|
-
# Add a new public key in wallet
|
212
|
-
elsif not options[:add].nil? and not options[:key].nil?
|
213
|
-
cli.add_key(options[:key], options[:file])
|
214
|
-
|
215
|
-
# Delete a public key in wallet
|
216
|
-
elsif not options[:delete].nil? and not options[:key].nil?
|
217
|
-
cli.delete_key(options[:key])
|
218
|
-
|
219
|
-
# Export
|
220
|
-
elsif not options[:export].nil? and not options[:file].nil?
|
221
|
-
cli.export(options[:file])
|
222
|
-
|
223
|
-
# Add a new item
|
224
|
-
elsif not options[:import].nil? and not options[:file].nil?
|
225
|
-
cli.import(options[:file])
|
226
|
-
|
227
|
-
# Setup wallet config
|
228
|
-
elsif not options[:setup_wallet].nil?
|
229
|
-
cli.setup_wallet_config
|
230
|
-
|
231
|
-
end
|
232
|
-
|
233
|
-
cli = nil
|
234
|
-
|
235
|
-
exit 0
|
236
|
-
|
237
|
-
rescue SystemExit, Interrupt
|
238
68
|
exit 3
|
239
69
|
end
|
data/bin/mpw-add
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
# MPW is a software to crypt and manage your passwords
|
3
|
+
# Copyright (C) 2016 Adrien Waksberg <mpw@yae.im>
|
4
|
+
#
|
5
|
+
# This program is free software; you can redistribute it and/or
|
6
|
+
# modify it under the terms of the GNU General Public License
|
7
|
+
# as published by the Free Software Foundation; either version 2
|
8
|
+
# of the License, or (at your option) any later version.
|
9
|
+
#
|
10
|
+
# This program is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with this program; if not, write to the Free Software
|
17
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
18
|
+
|
19
|
+
require 'optparse'
|
20
|
+
require 'mpw/config'
|
21
|
+
require 'mpw/cli'
|
22
|
+
|
23
|
+
# --------------------------------------------------------- #
|
24
|
+
# Options
|
25
|
+
# --------------------------------------------------------- #
|
26
|
+
|
27
|
+
options = {}
|
28
|
+
options[:sync] = true
|
29
|
+
|
30
|
+
OptionParser.new do |opts|
|
31
|
+
opts.banner = "#{I18n.t('option.usage')}: mpw add [options]"
|
32
|
+
|
33
|
+
opts.on('-c', '--config PATH', I18n.t('option.config')) do |config|
|
34
|
+
options[:config] = config
|
35
|
+
end
|
36
|
+
|
37
|
+
opts.on('-h', '--help', I18n.t('option.help')) do
|
38
|
+
puts opts
|
39
|
+
exit 0
|
40
|
+
end
|
41
|
+
|
42
|
+
opts.on('-n', '--no-sync', I18n.t('option.no_sync')) do
|
43
|
+
options[:sync] = false
|
44
|
+
end
|
45
|
+
|
46
|
+
opts.on('-r', '--random', I18n.t('option.random_password')) do
|
47
|
+
options[:password] = true
|
48
|
+
end
|
49
|
+
|
50
|
+
opts.on('-w', '--wallet NAME', I18n.t('option.wallet')) do |wallet|
|
51
|
+
options[:wallet] = wallet
|
52
|
+
end
|
53
|
+
end.parse!
|
54
|
+
|
55
|
+
config = MPW::Config.new(options[:config])
|
56
|
+
cli = MPW::Cli.new(config, options[:sync])
|
57
|
+
|
58
|
+
cli.load_config
|
59
|
+
cli.get_wallet(options[:wallet])
|
60
|
+
cli.decrypt
|
61
|
+
cli.add(options[:password])
|