mirror of
https://github.com/nishiki/manage-password.git
synced 2025-03-19 12:59:30 +00:00
Merge branch 'fix-gpg-password'
This commit is contained in:
commit
84afbc4b40
6 changed files with 33 additions and 7 deletions
|
@ -60,6 +60,14 @@ OptionParser.new do |opts|
|
||||||
values[:lang] = lang
|
values[:lang] = lang
|
||||||
end
|
end
|
||||||
|
|
||||||
|
opts.on('-P', '--enable-pinmode', I18n.t('option.pinmode')) do
|
||||||
|
values[:pinmode] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
opts.on('-p', '--disable-pinmode', I18n.t('option.disable_pinmode')) do
|
||||||
|
values[:pinmode] = false
|
||||||
|
end
|
||||||
|
|
||||||
opts.on('-w', '--wallet-dir PATH', I18n.t('option.wallet_dir')) do |wallet_dir|
|
opts.on('-w', '--wallet-dir PATH', I18n.t('option.wallet_dir')) do |wallet_dir|
|
||||||
values[:wallet_dir] = wallet_dir
|
values[:wallet_dir] = wallet_dir
|
||||||
end
|
end
|
||||||
|
@ -94,7 +102,7 @@ OptionParser.new do |opts|
|
||||||
end.parse!
|
end.parse!
|
||||||
|
|
||||||
config = MPW::Config.new(options[:config])
|
config = MPW::Config.new(options[:config])
|
||||||
cli = MPW::Cli.new(config, nil)
|
cli = MPW::Cli.new(config)
|
||||||
|
|
||||||
if options.key?(:init)
|
if options.key?(:init)
|
||||||
cli.setup(values)
|
cli.setup(values)
|
||||||
|
|
|
@ -49,6 +49,7 @@ en:
|
||||||
delete_gpg_key: "Delete the wallet's share with an other GPG key"
|
delete_gpg_key: "Delete the wallet's share with an other GPG key"
|
||||||
disable_alpha: "Don't use letter to generate a password"
|
disable_alpha: "Don't use letter to generate a password"
|
||||||
disable_numeric: "Don't use number to generate a password"
|
disable_numeric: "Don't use number to generate a password"
|
||||||
|
disable_pinmode: "Disable the pinentry mode"
|
||||||
disable_special_chars: "Don't use special char to generate a password"
|
disable_special_chars: "Don't use special char to generate a password"
|
||||||
export: "Export a wallet in an yaml file"
|
export: "Export a wallet in an yaml file"
|
||||||
file_export: "Specify the file where export data"
|
file_export: "Specify the file where export data"
|
||||||
|
@ -68,6 +69,7 @@ en:
|
||||||
list_keys: "List the GPG keys in wallet"
|
list_keys: "List the GPG keys in wallet"
|
||||||
numeric: "Use number to generate a password"
|
numeric: "Use number to generate a password"
|
||||||
pattern: "Given search pattern"
|
pattern: "Given search pattern"
|
||||||
|
pinmode: "Enable pinentry mode (available with gpg >= 2.1)"
|
||||||
random_password: "Generate a random password"
|
random_password: "Generate a random password"
|
||||||
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"
|
||||||
|
|
|
@ -49,6 +49,7 @@ fr:
|
||||||
delete_gpg_key: "Supprime le partage le portefeuille avec une autre clé GPG"
|
delete_gpg_key: "Supprime le partage le portefeuille avec une autre clé GPG"
|
||||||
disable_alpha: "Désactive l'utilisation des lettres dans la génération d'un mot de passe"
|
disable_alpha: "Désactive l'utilisation des lettres dans la génération d'un mot de passe"
|
||||||
disable_numeric: "Désactive l'utilisation des chiffre dans la génération d'un mot de passe"
|
disable_numeric: "Désactive l'utilisation des chiffre dans la génération d'un mot de passe"
|
||||||
|
disable_pinmode: "Désactive le mode pinentry"
|
||||||
disable_special_chars: "Désactive l'utilisation des charactères speciaux dans la génération d'un mot de passe"
|
disable_special_chars: "Désactive l'utilisation des charactères speciaux dans la génération d'un mot de passe"
|
||||||
export: "Exporte un portefeuille dans un fichier yaml"
|
export: "Exporte un portefeuille dans un fichier yaml"
|
||||||
file_export: "Spécifie le fichier où exporter les données"
|
file_export: "Spécifie le fichier où exporter les données"
|
||||||
|
@ -68,6 +69,7 @@ fr:
|
||||||
list_keys: "Liste les clés GPG dans le portefeuille"
|
list_keys: "Liste les clés GPG dans le portefeuille"
|
||||||
numeric: "Utilise des chiffre dans la génération d'un mot de passe"
|
numeric: "Utilise des chiffre dans la génération d'un mot de passe"
|
||||||
pattern: "Motif de donnée à chercher"
|
pattern: "Motif de donnée à chercher"
|
||||||
|
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"
|
||||||
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"
|
||||||
|
|
|
@ -101,7 +101,7 @@ module MPW
|
||||||
def decrypt
|
def decrypt
|
||||||
unless defined?(@mpw)
|
unless defined?(@mpw)
|
||||||
@password = ask(I18n.t('display.gpg_password')) { |q| q.echo = false }
|
@password = ask(I18n.t('display.gpg_password')) { |q| q.echo = false }
|
||||||
@mpw = MPW.new(@config.gpg_key, @wallet_file, @password, @config.gpg_exe)
|
@mpw = MPW.new(@config.gpg_key, @wallet_file, @password, @config.gpg_exe, @config.pinmode)
|
||||||
end
|
end
|
||||||
|
|
||||||
@mpw.read_data
|
@mpw.read_data
|
||||||
|
|
|
@ -32,6 +32,7 @@ module MPW
|
||||||
attr_accessor :wallet_dir
|
attr_accessor :wallet_dir
|
||||||
attr_accessor :gpg_exe
|
attr_accessor :gpg_exe
|
||||||
attr_accessor :password
|
attr_accessor :password
|
||||||
|
attr_accessor :pinmode
|
||||||
|
|
||||||
# Constructor
|
# Constructor
|
||||||
# @args: config_file -> the specify config file
|
# @args: config_file -> the specify config file
|
||||||
|
@ -59,12 +60,13 @@ module MPW
|
||||||
wallet_dir = options[:wallet_dir] || @wallet_dir
|
wallet_dir = options[:wallet_dir] || @wallet_dir
|
||||||
default_wallet = options[:default_wallet] || @default_wallet
|
default_wallet = options[:default_wallet] || @default_wallet
|
||||||
gpg_exe = options[:gpg_exe] || @gpg_exe
|
gpg_exe = options[:gpg_exe] || @gpg_exe
|
||||||
|
pinmode = options[:pinmode] || @pinmode
|
||||||
password = { numeric: true,
|
password = { numeric: true,
|
||||||
alpha: true,
|
alpha: true,
|
||||||
special: false,
|
special: false,
|
||||||
length: 16 }
|
length: 16 }
|
||||||
|
|
||||||
%w(numeric special alpha length).each do |k|
|
%w[numeric special alpha length].each do |k|
|
||||||
if options.key?("pwd_#{k}".to_sym)
|
if options.key?("pwd_#{k}".to_sym)
|
||||||
password[k.to_sym] = options["pwd_#{k}".to_sym]
|
password[k.to_sym] = options["pwd_#{k}".to_sym]
|
||||||
elsif !@password.nil? && @password.key?(k.to_sym)
|
elsif !@password.nil? && @password.key?(k.to_sym)
|
||||||
|
@ -82,7 +84,8 @@ module MPW
|
||||||
'wallet_dir' => wallet_dir,
|
'wallet_dir' => wallet_dir,
|
||||||
'default_wallet' => default_wallet,
|
'default_wallet' => default_wallet,
|
||||||
'gpg_exe' => gpg_exe,
|
'gpg_exe' => gpg_exe,
|
||||||
'password' => password }
|
'password' => password,
|
||||||
|
'pinmode' => pinmode }
|
||||||
|
|
||||||
FileUtils.mkdir_p(@config_dir, mode: 0700)
|
FileUtils.mkdir_p(@config_dir, mode: 0700)
|
||||||
FileUtils.mkdir_p(wallet_dir, mode: 0700)
|
FileUtils.mkdir_p(wallet_dir, mode: 0700)
|
||||||
|
@ -132,6 +135,7 @@ module MPW
|
||||||
@default_wallet = config['default_wallet']
|
@default_wallet = config['default_wallet']
|
||||||
@gpg_exe = config['gpg_exe']
|
@gpg_exe = config['gpg_exe']
|
||||||
@password = config['password'] || {}
|
@password = config['password'] || {}
|
||||||
|
@pinmode = config['pinmode']
|
||||||
|
|
||||||
raise if @gpg_key.empty? || @wallet_dir.empty?
|
raise if @gpg_key.empty? || @wallet_dir.empty?
|
||||||
|
|
||||||
|
|
|
@ -26,11 +26,12 @@ require 'mpw/item'
|
||||||
module MPW
|
module MPW
|
||||||
class MPW
|
class MPW
|
||||||
# Constructor
|
# Constructor
|
||||||
def initialize(key, wallet_file, gpg_pass = nil, gpg_exe = nil)
|
def initialize(key, wallet_file, gpg_pass = nil, gpg_exe = nil, pinmode = false)
|
||||||
@key = key
|
@key = key
|
||||||
@gpg_pass = gpg_pass
|
@gpg_pass = gpg_pass
|
||||||
@gpg_exe = gpg_exe
|
@gpg_exe = gpg_exe
|
||||||
@wallet_file = wallet_file
|
@wallet_file = wallet_file
|
||||||
|
@pinmode = pinmode
|
||||||
|
|
||||||
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
|
end
|
||||||
|
@ -313,9 +314,18 @@ module MPW
|
||||||
def decrypt(data)
|
def decrypt(data)
|
||||||
return nil if data.to_s.empty?
|
return nil if data.to_s.empty?
|
||||||
|
|
||||||
crypto = GPGME::Crypto.new(armor: true)
|
password =
|
||||||
|
if /^(1\.[0-9.]+|2\.0)(\.[0-9]+)?/ =~ GPGME::Engine.info.first.version || @pinmode
|
||||||
|
{ password: @gpg_pass }
|
||||||
|
else
|
||||||
|
{ password: @gpg_pass,
|
||||||
|
pinentry_mode: GPGME::PINENTRY_MODE_LOOPBACK }
|
||||||
|
end
|
||||||
|
|
||||||
crypto.decrypt(data, password: @gpg_pass).read.force_encoding('utf-8')
|
crypto = GPGME::Crypto.new(armor: true)
|
||||||
|
crypto
|
||||||
|
.decrypt(data, password)
|
||||||
|
.read.force_encoding('utf-8')
|
||||||
rescue => e
|
rescue => e
|
||||||
raise "#{I18n.t('error.gpg_file.decrypt')}\n#{e}"
|
raise "#{I18n.t('error.gpg_file.decrypt')}\n#{e}"
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue