mirror of
https://github.com/nishiki/manage-password.git
synced 2024-11-26 23:33:03 +00:00
add git
This commit is contained in:
parent
2328e4eff7
commit
ef86d8de80
8 changed files with 61 additions and 2 deletions
1
Gemfile
1
Gemfile
|
@ -1,6 +1,7 @@
|
||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
gem 'clipboard', '~> 1.1', '>= 1.1.1'
|
gem 'clipboard', '~> 1.1', '>= 1.1.1'
|
||||||
gem 'colorize', '~> 0.8', '>= 0.8.1'
|
gem 'colorize', '~> 0.8', '>= 0.8.1'
|
||||||
|
gem 'git', '~> 1.3', '>= 1.3.0'
|
||||||
gem 'gpgme', '~> 2.0', '>= 2.0.14'
|
gem 'gpgme', '~> 2.0', '>= 2.0.14'
|
||||||
gem 'highline', '~> 1.7', '>= 1.7.8'
|
gem 'highline', '~> 1.7', '>= 1.7.8'
|
||||||
gem 'i18n', '~> 0.9', '>= 0.9.1'
|
gem 'i18n', '~> 0.9', '>= 0.9.1'
|
||||||
|
|
|
@ -47,6 +47,10 @@ OptionParser.new do |opts|
|
||||||
exit 0
|
exit 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
opts.on('-i', '--init', I18n.t('option.init_wallet')) do
|
||||||
|
options[:init] = true
|
||||||
|
end
|
||||||
|
|
||||||
opts.on('-l', '--list', I18n.t('option.list')) do
|
opts.on('-l', '--list', I18n.t('option.list')) do
|
||||||
options[:list] = true
|
options[:list] = true
|
||||||
end
|
end
|
||||||
|
@ -55,6 +59,10 @@ OptionParser.new do |opts|
|
||||||
options[:list_keys] = true
|
options[:list_keys] = true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
opts.on('-r', '--remote URI', I18n.t('option.remote_uri')) do |uri|
|
||||||
|
options[:remote] = uri
|
||||||
|
end
|
||||||
|
|
||||||
opts.on('-w', '--wallet NAME', I18n.t('option.wallet')) do |wallet|
|
opts.on('-w', '--wallet NAME', I18n.t('option.wallet')) do |wallet|
|
||||||
options[:wallet] = wallet
|
options[:wallet] = wallet
|
||||||
end
|
end
|
||||||
|
@ -65,7 +73,10 @@ cli = MPW::Cli.new(config)
|
||||||
|
|
||||||
cli.load_config
|
cli.load_config
|
||||||
|
|
||||||
if options.key?(:list_keys) || options.key?(:gpg_key)
|
if options[:init]
|
||||||
|
cli.get_wallet(options[:wallet])
|
||||||
|
cli.init_wallet(options[:remote])
|
||||||
|
elsif options.key?(:list_keys) || options.key?(:gpg_key)
|
||||||
cli.get_wallet(options[:wallet])
|
cli.get_wallet(options[:wallet])
|
||||||
cli.decrypt
|
cli.decrypt
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ en:
|
||||||
gpg_file:
|
gpg_file:
|
||||||
decrypt: "Can't decrypt file!"
|
decrypt: "Can't decrypt file!"
|
||||||
encrypt: "Can't encrypt the GPG file!"
|
encrypt: "Can't encrypt the GPG file!"
|
||||||
|
init_wallet: "Can't initialize the wallet!"
|
||||||
mpw_file:
|
mpw_file:
|
||||||
read_data: "Can't read the MPW file!"
|
read_data: "Can't read the MPW file!"
|
||||||
write_data: "Can't write the MPW file!"
|
write_data: "Can't write the MPW file!"
|
||||||
|
@ -63,6 +64,7 @@ en:
|
||||||
group: "Search the items with specified group"
|
group: "Search the items with specified group"
|
||||||
help: "Show this help message"
|
help: "Show this help message"
|
||||||
init: "Initialize mpw"
|
init: "Initialize mpw"
|
||||||
|
init_wallet: "Initialize a new wallet"
|
||||||
import: "Import item from an yaml file"
|
import: "Import item from an yaml file"
|
||||||
key: "Define the key name"
|
key: "Define the key name"
|
||||||
lang: "Set the software language"
|
lang: "Set the software language"
|
||||||
|
@ -75,6 +77,7 @@ en:
|
||||||
pattern: "Given search pattern"
|
pattern: "Given search pattern"
|
||||||
pinmode: "Enable pinentry mode (available with gpg >= 2.1)"
|
pinmode: "Enable pinentry mode (available with gpg >= 2.1)"
|
||||||
random_password: "Generate a random password"
|
random_password: "Generate a random password"
|
||||||
|
remote_uri: "Set remote GIT repository URL"
|
||||||
setup: "Create a new configuration file"
|
setup: "Create a new configuration file"
|
||||||
setup_wallet: "Create a new configuration file for a wallet"
|
setup_wallet: "Create a new configuration file for a wallet"
|
||||||
special_chars: "Use special char to create a password"
|
special_chars: "Use special char to create a password"
|
||||||
|
@ -130,6 +133,8 @@ en:
|
||||||
format_unknown: "The import format '%{file_format} is unknown!"
|
format_unknown: "The import format '%{file_format} is unknown!"
|
||||||
valid: "The import is successful!"
|
valid: "The import is successful!"
|
||||||
not_valid: "No data to import!"
|
not_valid: "No data to import!"
|
||||||
|
init_wallet:
|
||||||
|
valid: "The wallet has been initialized!"
|
||||||
set_config:
|
set_config:
|
||||||
valid: "The config file has been edited!"
|
valid: "The config file has been edited!"
|
||||||
setup_config:
|
setup_config:
|
||||||
|
|
|
@ -17,6 +17,7 @@ fr:
|
||||||
gpg_file:
|
gpg_file:
|
||||||
decrypt: "Impossible de déchiffrer le fichier GPG!"
|
decrypt: "Impossible de déchiffrer le fichier GPG!"
|
||||||
encrypt: "Impossible de chiffrer le fichier GPG!"
|
encrypt: "Impossible de chiffrer le fichier GPG!"
|
||||||
|
init_wallet: "Impossible d'initialiser le porte-feuille!"
|
||||||
mpw_file:
|
mpw_file:
|
||||||
read_data: "Impossible de lire le fichier MPW!"
|
read_data: "Impossible de lire le fichier MPW!"
|
||||||
write_data: "Impossible d'écrire le fichier MPW!"
|
write_data: "Impossible d'écrire le fichier MPW!"
|
||||||
|
@ -64,6 +65,7 @@ fr:
|
||||||
help: "Affiche ce message d'aide"
|
help: "Affiche ce message d'aide"
|
||||||
import: "Importe des éléments depuis un fichier yaml"
|
import: "Importe des éléments depuis un fichier yaml"
|
||||||
init: "Initialise mpw"
|
init: "Initialise mpw"
|
||||||
|
init_wallet: "Initialise un nouveau porte-feuille"
|
||||||
key: "Spécifie le nom d'une clé"
|
key: "Spécifie le nom d'une clé"
|
||||||
lang: "Spécifie la langue du logiciel (ex: fr)"
|
lang: "Spécifie la langue du logiciel (ex: fr)"
|
||||||
length: "Taille du mot de passe"
|
length: "Taille du mot de passe"
|
||||||
|
@ -75,6 +77,7 @@ fr:
|
||||||
pattern: "Motif de donnée à chercher"
|
pattern: "Motif de donnée à chercher"
|
||||||
pinmode: "Active le mode pinentry (valable avec gpg >= 2.1)"
|
pinmode: "Active le mode pinentry (valable avec gpg >= 2.1)"
|
||||||
random_password: "Génére un mot de passe aléatoire"
|
random_password: "Génére un mot de passe aléatoire"
|
||||||
|
remote_uri: "Spécifie l'url d'un dépôt git distant"
|
||||||
setup: "Création d'un nouveau fichier de configuration"
|
setup: "Création d'un nouveau fichier de configuration"
|
||||||
setup_wallet: "Création d'un nouveau fichier de configuration pour un portefeuille"
|
setup_wallet: "Création d'un nouveau fichier de configuration pour un portefeuille"
|
||||||
special_chars: "Utilise des charactères speciaux dans la génération d'un mot de passe"
|
special_chars: "Utilise des charactères speciaux dans la génération d'un mot de passe"
|
||||||
|
@ -130,6 +133,8 @@ fr:
|
||||||
format_unknown: "Le format d'import '%{file_format}' est inconnu!"
|
format_unknown: "Le format d'import '%{file_format}' est inconnu!"
|
||||||
valid: "L'import est un succès!"
|
valid: "L'import est un succès!"
|
||||||
not_valid: "Aucune donnée à importer!"
|
not_valid: "Aucune donnée à importer!"
|
||||||
|
init_wallet:
|
||||||
|
valid: "Le porte-feuille a bien été initialisé!"
|
||||||
set_config:
|
set_config:
|
||||||
valid: "Le fichier de configuration a bien été modifié!"
|
valid: "Le fichier de configuration a bien été modifié!"
|
||||||
setup_config:
|
setup_config:
|
||||||
|
|
|
@ -35,6 +35,18 @@ module MPW
|
||||||
@config = config
|
@config = config
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Init a wallet folder
|
||||||
|
# @param remote_uri [String] the uri of the remote git repository
|
||||||
|
def init_wallet(remote_uri)
|
||||||
|
@mpw = MPW.new(@config.gpg_key, @wallet_path, nil, @config.gpg_exe, @config.pinmode)
|
||||||
|
@mpw.init_wallet(remote_uri)
|
||||||
|
|
||||||
|
puts I18n.t('form.init_wallet.valid').to_s.green
|
||||||
|
rescue => e
|
||||||
|
puts "#{I18n.t('display.error')} #20: #{e}".red
|
||||||
|
exit 2
|
||||||
|
end
|
||||||
|
|
||||||
# Change a parameter int the config after init
|
# Change a parameter int the config after init
|
||||||
# @param options [Hash] param to change
|
# @param options [Hash] param to change
|
||||||
def set_config(options)
|
def set_config(options)
|
||||||
|
@ -42,7 +54,7 @@ module MPW
|
||||||
|
|
||||||
puts I18n.t('form.set_config.valid').to_s.green
|
puts I18n.t('form.set_config.valid').to_s.green
|
||||||
rescue => e
|
rescue => e
|
||||||
puts "#{I18n.t('display.error')} #15: #{e}".red
|
puts "#{I18n.t('display.error')} #19: #{e}".red
|
||||||
exit 2
|
exit 2
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
require 'gpgme'
|
require 'gpgme'
|
||||||
|
require 'git'
|
||||||
require 'i18n'
|
require 'i18n'
|
||||||
require 'yaml'
|
require 'yaml'
|
||||||
require 'rotp'
|
require 'rotp'
|
||||||
|
@ -37,17 +38,30 @@ module MPW
|
||||||
@gpg_exe = gpg_exe
|
@gpg_exe = gpg_exe
|
||||||
@pinmode = pinmode
|
@pinmode = pinmode
|
||||||
@wallet_path = wallet_path
|
@wallet_path = wallet_path
|
||||||
|
@wallet_name = File.basename(@wallet_path)
|
||||||
|
@git = Git.open(@wallet_path) if Dir.exist?(@wallet_path)
|
||||||
@data = []
|
@data = []
|
||||||
@keys = {}
|
@keys = {}
|
||||||
@passwords = {}
|
@passwords = {}
|
||||||
@otp_keys = {}
|
@otp_keys = {}
|
||||||
|
|
||||||
GPGME::Engine.set_info(GPGME::PROTOCOL_OpenPGP, @gpg_exe, "#{Dir.home}/.gnupg") unless @gpg_exe.to_s.empty?
|
GPGME::Engine.set_info(GPGME::PROTOCOL_OpenPGP, @gpg_exe, "#{Dir.home}/.gnupg") unless @gpg_exe.to_s.empty?
|
||||||
|
end
|
||||||
|
|
||||||
|
# Init a wallet folder
|
||||||
|
# @param remote_uri [String] the uri of the remote git repository
|
||||||
|
def init_wallet(remote_uri)
|
||||||
Dir.mkdir(@wallet_path) unless Dir.exist?(@wallet_path)
|
Dir.mkdir(@wallet_path) unless Dir.exist?(@wallet_path)
|
||||||
%w[passwords otp_keys keys].each do |folder|
|
%w[passwords otp_keys keys].each do |folder|
|
||||||
Dir.mkdir("#{@wallet_path}/#{folder}") unless Dir.exist?("#{@wallet_path}/#{folder}")
|
Dir.mkdir("#{@wallet_path}/#{folder}") unless Dir.exist?("#{@wallet_path}/#{folder}")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@git = remote_uri ? Git.clone(remote_uri, @wallet_name, path: @wallet_path) : Git.init(@wallet_path)
|
||||||
|
@git.config('user.name', @key.split('@').first)
|
||||||
|
@git.config('user.email', @key)
|
||||||
|
@git.commit('init wallet', allow_empty: true) unless remote_uri
|
||||||
|
rescue => e
|
||||||
|
raise "#{I18n.t('error.init_wallet')}\n#{e}"
|
||||||
end
|
end
|
||||||
|
|
||||||
# Read mpw file
|
# Read mpw file
|
||||||
|
@ -118,6 +132,9 @@ module MPW
|
||||||
File.unlink(file) unless data.key?(File.basename(file, '.gpg'))
|
File.unlink(file) unless data.key?(File.basename(file, '.gpg'))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@git.add
|
||||||
|
@git.commit('wallet updated')
|
||||||
rescue => e
|
rescue => e
|
||||||
raise "#{I18n.t('error.mpw_file.write_data')}\n#{e}"
|
raise "#{I18n.t('error.mpw_file.write_data')}\n#{e}"
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
||||||
spec.required_ruby_version = '>= 2.1'
|
spec.required_ruby_version = '>= 2.1'
|
||||||
|
|
||||||
spec.add_dependency 'i18n', '~> 0.9', '>= 0.9.1'
|
spec.add_dependency 'i18n', '~> 0.9', '>= 0.9.1'
|
||||||
|
spec.add_dependency 'git', '~> 1.3', '>= 1.3.0'
|
||||||
spec.add_dependency 'gpgme', '~> 2.0', '>= 2.0.14'
|
spec.add_dependency 'gpgme', '~> 2.0', '>= 2.0.14'
|
||||||
spec.add_dependency 'highline', '~> 1.7', '>= 1.7.8'
|
spec.add_dependency 'highline', '~> 1.7', '>= 1.7.8'
|
||||||
spec.add_dependency 'locale', '~> 2.1', '>= 2.1.2'
|
spec.add_dependency 'locale', '~> 2.1', '>= 2.1.2'
|
||||||
|
|
|
@ -24,6 +24,13 @@ class TestConfig < Test::Unit::TestCase
|
||||||
)
|
)
|
||||||
assert_match(I18n.t('form.setup_config.valid'), output)
|
assert_match(I18n.t('form.setup_config.valid'), output)
|
||||||
assert_match(I18n.t('form.setup_gpg_key.valid'), output)
|
assert_match(I18n.t('form.setup_gpg_key.valid'), output)
|
||||||
|
|
||||||
|
output = %x(
|
||||||
|
mpw wallet \
|
||||||
|
--init \
|
||||||
|
2>/dev/null
|
||||||
|
)
|
||||||
|
assert_match(I18n.t('form.init_wallet.valid'), output)
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_01_add_item
|
def test_01_add_item
|
||||||
|
|
Loading…
Reference in a new issue