1
0
Fork 0
mirror of https://github.com/nishiki/manage-password.git synced 2025-03-19 12:59:30 +00:00

new binary for config

This commit is contained in:
Adrien Waksberg 2016-10-13 21:59:51 +02:00
parent 4085d43f97
commit 3d99ac80de
3 changed files with 116 additions and 22 deletions

91
bin/mpw-config Normal file
View file

@ -0,0 +1,91 @@
#!/usr/bin/ruby
# MPW is a software to crypt and manage your passwords
# Copyright (C) 2016 Adrien Waksberg <mpw@yae.im>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
$: << File.expand_path('../../lib', __FILE__)
require 'optparse'
require 'locale'
require 'set'
require 'i18n'
require 'mpw/config'
require 'mpw/cli'
# --------------------------------------------------------- #
# Set local
# --------------------------------------------------------- #
lang = Locale::Tag.parse(ENV['LANG']).to_simple.to_s[0..1]
if defined?(I18n.enforce_available_locales)
I18n.enforce_available_locales = true
end
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
I18n.load_path = Dir["#{File.expand_path('../../i18n', __FILE__)}/*.yml"]
I18n.default_locale = :en
I18n.locale = lang.to_sym
# --------------------------------------------------------- #
# Options
# --------------------------------------------------------- #
options = {}
OptionParser.new do |opts|
opts.banner = "#{I18n.t('option.usage')}: mpw [options]"
opts.on('-c', '--config CONFIG', I18n.t('option.config')) do |config|
options[:config] = config
end
opts.on('-g', '--gpg-exe PATH', I18n.t('option.lang')) do |gpg_exe|
options[:gpg_exe] = gpg_exe
end
opts.on('-h', '--help', I18n.t('option.help')) do
puts opts
exit 0
end
opts.on('--init', I18n.t('option.init')) do
options[:init] = true
end
opts.on('-k', '--key GPG_KEY', I18n.t('option.lang')) do |gpg_key|
options[:gpg_key] = gpg_key
end
opts.on('-l', '--lang LANG', I18n.t('option.lang')) do |lang|
options[:lang] = lang
end
opts.on('-w', '--wallet-dir LANG', I18n.t('option.lang')) do |wallet_dir|
options[:wallet_dir] = wallet_dir
end
end.parse!
config = MPW::Config.new(options[:config])
cli = MPW::Cli.new(config, options[:clipboard], options[:sync], options[:otp])
if not options[:init].nil?
cli.setup(options)
cli.setup_gpg_key(options[:gpg_key]) if not config.check_gpg_key?
exit 0
end
cli.set_config(options)

View file

@ -17,6 +17,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
require 'readline'
require 'locale'
require 'i18n'
require 'colorize'
require 'highline/import'
@ -40,17 +41,32 @@ class Cli
@otp = otp
end
# Change a parameter int the config after init
# @args: options -> param to change
def set_config(options)
raise I18n.t('error.config.check') if not @config.is_valid?
gpg_key = options[:gpg_key] || @config.key
lang = options[:lang] || @config.lang
wallet_dir = options[:wallet_dir] || @config.wallet_dir
gpg_exe = options[:gpg_exe] || @config.gpg_exe
@config.setup(gpg_key, lang, wallet_dir, gpg_exe)
rescue Exception => e
puts "#{I18n.t('display.error')} #15: #{e}".red
exit 2
end
# Create a new config file
# @args: language -> the software language
def setup(language)
def setup(options)
@config.is_valid?
options = text_editor('setup_form', language)
language = options[:language] || language
lang = options[:lang] || Locale::Tag.parse(ENV['LANG']).to_simple.to_s[0..1]
I18n.locale = language.to_sym
I18n.locale = lang.to_sym
@config.setup(options[:gpg_key], language, options[:wallet_dir], options[:gpg_exe])
@config.setup(options[:gpg_key], lang, options[:wallet_dir], options[:gpg_exe])
raise I18n.t('error.config.check') if not @config.is_valid?
@ -61,16 +77,11 @@ class Cli
end
# Setup a new GPG key
def setup_gpg_key
# @args: gpg_key -> the key name
def setup_gpg_key(gpg_key)
puts I18n.t('form.setup_gpg_key.title')
puts '--------------------'
ask = ask(I18n.t('form.setup_gpg_key.ask')).to_s
if not ['Y', 'y', 'O', 'o'].include?(ask)
raise I18n.t('form.setup_gpg_key.no_create')
end
name = ask(I18n.t('form.setup_gpg_key.name')).to_s
password = ask(I18n.t('form.setup_gpg_key.password')) {|q| q.echo = false}
confirm = ask(I18n.t('form.setup_gpg_key.confirm_password')) {|q| q.echo = false}
@ -78,16 +89,9 @@ class Cli
raise I18n.t('form.setup_gpg_key.error_password')
end
length = ask(I18n.t('form.setup_gpg_key.length')).to_s
expire = ask(I18n.t('form.setup_gpg_key.expire')).to_s
password = password.to_s
length = length.nil? or length.empty? ? 2048 : length.to_i
expire = expire.nil? or expire.empty? ? 0 : expire.to_i
puts I18n.t('form.setup_gpg_key.wait')
@config.setup_gpg_key(password, name, length, expire)
@config.setup_gpg_key(password.to_s, gpg_key)
puts "#{I18n.t('form.setup_gpg_key.valid')}".green
rescue Exception => e

View file

@ -57,12 +57,11 @@ class Config
# gpg_exe -> the path of gpg executable
# @rtrn: true if le config file is create
def setup(key, lang, wallet_dir, gpg_exe)
if not key =~ /[a-zA-Z0-9.-_]+\@[a-zA-Z0-9]+\.[a-zA-Z]+/
raise I18n.t('error.config.key_bad_format')
end
if wallet_dir.empty?
if wallet_dir.to_s.empty?
wallet_dir = "#{@config_dir}/wallets"
end