On Mon, Oct 19, 2020 at 03:01:48PM +0800, Wu Fengguang wrote:
On Fri, Oct 16, 2020 at 06:00:47PM +0800, Luan Shengde wrote:
add parameters for answerback-email -e,--email email_addr: add email address -s,--ssh-pubkey pub_key: add ssh pub_key -f,--raw-email mail_file: add email_adress[,pub_key] via email file
Signed-off-by: Luan Shengde luanshengde2@huawei.com
container/assign-account/answerback-email.rb | 162 ++++++++----------- 1 file changed, 70 insertions(+), 92 deletions(-)
diff --git a/container/assign-account/answerback-email.rb b/container/assign-account/answerback-email.rb index b5283ba..4a86a87 100755 --- a/container/assign-account/answerback-email.rb +++ b/container/assign-account/answerback-email.rb @@ -3,46 +3,18 @@ # Copyright (c) 2020 Huawei Technologies Co., Ltd. All rights reserved. # frozen_string_literal: true
-=begin
-repo_list:
- all repos url list from upstream-repos.git
-API: -call graph: -read_mail_content -send_account_request
- email_addr
- get email address
- email_message_id
- get email message_id
- check_email_available
- check email available
- pub_key_value
- get pub key
- account
- send apply account request and return account info
- build_message
- build email message
- send_mail
- call send_mail to send mail whit build message
-the returned data for account_info like: -{
- "account" => "guest",
- "passwd" => "Use pub_key to login",
- "jumper_ip" => "10.10.10.10",
- "jumper_port" => "10000"
-} -=end +# xx --email xxx --login --ssh-pubkey xxx --raw-email email-file +# samba mount +# ssh logshn (huawei, ) (install pubkey / send password)
require 'json' require 'mail' require 'set' -require_relative '../defconfig.rb' +require 'optparse' +require_relative '../defconfig'
names = Set.new %w[
- JUMPER_IP
- JUMPER_HOST JUMPER_PORT CRYSTAL_INTRANET SEND_MAIL_PORT
@@ -50,18 +22,64 @@ names = Set.new %w[
defaults = relevant_defaults(names)
-JUMPER_IP = defaults['JUMPER_IP'] +JUMPER_HOST = defaults['JUMPER_HOST'] JUMPER_PORT = defaults['JUMPER_PORT'] CRYSTAL_INTRANET = defaults['CRYSTAL_INTRANET'] SEND_MAIL_PORT = defaults['SEND_MAIL_PORT']
-def build_message(email, message_id, infos) +email_info = {
It's not email_info -- think about pub_key. => apply_info or applicant_info
- 'email_addr' => '',
Better use nil as default value.
- 'pub_key' => '',
+}
+def format_info(email_file)
format_info => get_apply_info
- mail_content = Mail.read(email_file)
- email_addr = mail_content.from[0]
- pub_key = mail_content.part[1].body.decoded.split(/\r|\n/).join if mail_content.part[1].filename == 'id_rsa.pub'
- infos = {
infos is used once and can be reduced
Or not return info here, but set the global info fields directly.
btw, rubocop will warn on global vars?
OK, I will fix this
Thanks Luan Shengde
- 'email_addr' => email_addr,
- 'pub_key' => pub_key,
- }
- infos
+end
+options = OptionParser.new do |opts|
- opts.banner = "Usage: answerback-mail.rb [--email email] [--ssh-pubkey pub_key] [--raw-email email_file]\n"
- opts.banner += ' -e or -f is required'
- opts.banner += ' -s is optional when use -e'
- opts.separator ''
- opts.separator 'options:'
- opts.on('-e email_addr', '--email email_addr', 'appoint email address') do |email_addr|
- email_info['email_addr'] = email_addr
- end
- opts.on('-s pub_key', '--ssh-pubkey pub_key', 'ssh pub_key to enable keyless login') do |pub_key|
- email_info['pub_key'] = pub_key
- end
- opts.on('-f email_file', '--raw-email email_file', 'email file') do |email_file|
- email_info = format_info(email_file)
- end
- opts.on_tail('', '-h', '--help', 'show this message') do
puts opts
exit
- end
+end
+options.parse!(ARGV)
+def build_message(email, infos) message = <<~EMAIL_MESSAGE To: #{email}
Message-ID: #{message_id} Subject: jumper account is ready
Dear #{email}
Dear #{email.split('@')[0]}
Thank you for joining us. You can use the following command to login the jumper server:
@@ -79,67 +97,27 @@ def build_message(email, message_id, infos) return message end
-def email_addr(mail_content)
- msg = 'not an applying account email'
- raise msg unless mail_content.subject =~ /apply ssh account/i
- email = mail_content.from.join(',')
- return email
-end
-# def check_email_available(mail_content, email) -# oos_list = File.read('/c/upstream-repos/repo_list').split(/\n/) -# url = mail_content.body.decoded.split(/\n/).find { |line| line =~ /https?:/// } -# base_url = url.split('/')[0,5].join('/') -# message = 'The url is not in upstream repo_list' -# -# raise message unless oos_list.include? base_url -# -# url_fdback = %x(curl #{url}) -# email_index = url_fdback.index email -# -# message = 'No commit info found from the url for the email' -# raise message unless email_index -# end
-def email_message_id(mail_content)
- message_id = mail_content.message_id
- return message_id
-end
-def pub_key_value(mail_content)
- pub_key = mail_content.body.decoded.split(/\n/).find { |line| line =~ /ssh-rsa/ }
- return pub_key
-end
def account_info(pub_key)
- account_info_str = %x(curl -XGET '#{JUMPER_IP}:#{JUMPER_PORT}/assign_account' -d "pub_key: #{pub_key}")
- account_info_str = if pub_key.empty?
%x(curl -XGET '#{JUMPER_HOST}:#{JUMPER_PORT}/assign_account')
else
%x(curl -XGET '#{JUMPER_HOST}:#{JUMPER_PORT}/assign_account' -d "pub_key: #{pub_key}")
account_info = JSON.parse account_info_strend
- return account_info
- account_info
end
-def send_account(mail_content)
- email = email_addr(mail_content)
- message_id = email_message_id(mail_content)
- # check_email_available(mail_content, email)
- pub_key = pub_key_value(mail_content)
- acct_info = account_info(pub_key)
+def send_account(email_info)
- message = "No email address specified\n"
- message += "use -e email_addr add a email address\n"
- message += 'or use -f to add a mail file'
- raise message if email_info['email_addr'].empty?
- acct_info = account_info(email_info['pub_key'])
- message = build_message(email, message_id, acct_info)
message = build_message(email_info['email_addr'], acct_info)
%x(curl -XPOST '#{CRYSTAL_INTRANET}:#{SEND_MAIL_PORT}/send_mail_text' -d "#{message}")
end
-def read_mail_content(mail_file)
- mail_content = Mail.read(mail_file)
- return mail_content
-end
-mail_file = ARGV[0] -mail_content = read_mail_content(mail_file) -send_account(mail_content)
+send_account(email_info)
2.23.0