avoid multi accounts assignment for single email address
[why] the mail-robot may assign a new account if user send 'apply account' email with the same email address. and this is a big waste of account resource.
[how] when get the request for applying account, check whether the email already has already been assigned an account. assign a new one if there is none return the old one if there is already one and update info mail robot will update infos if the mail has been set new: - my_name - my_ssh_pubkey
Signed-off-by: Luan Shengde shdluan@163.com --- container/mail-robot/lib/apply-account.rb | 36 +++++++++++++++++------ 1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/container/mail-robot/lib/apply-account.rb b/container/mail-robot/lib/apply-account.rb index bf40429..d499840 100755 --- a/container/mail-robot/lib/apply-account.rb +++ b/container/mail-robot/lib/apply-account.rb @@ -12,6 +12,7 @@ require_relative 'apply-jumper-account' require_relative 'parse-apply-account-email'
SEND_MAIL_PORT = ENV['SEND_MAIL_PORT'] || 49000 +ES_PORT = ENV['ES_PORT'] || 9200
# assign uuid/account for user # when mail-robot listened new email, and the email's subject @@ -51,6 +52,8 @@ class ApplyAccount @send_mail_host = %x(/sbin/ip route | awk '/default/ {print $3}').chomp @send_mail_port = SEND_MAIL_PORT @mail_content = mail_content + @es_host = @send_mail_host + @es_port = ES_PORT
@my_info = {} end @@ -61,9 +64,8 @@ class ApplyAccount # firstly get my_email before execute parse_mail_content is needed @my_info['my_email'] = @mail_content.from[0] parse_mail_content - acct_info = apply_my_account - - @my_info['my_login_name'] = acct_info['my_login_name'] + my_account_es = check_account_es + apply_my_account(my_account_es)
store_account_info send_mail('') @@ -82,15 +84,31 @@ class ApplyAccount @my_info.update parsed_email_info end
- def apply_my_account - my_uuid = %x(uuidgen).chomp - - @my_info['my_uuid'] = my_uuid + def apply_my_account(my_account_es) + apply_info = {} + if my_account_es['found'] + apply_info.update my_account_es['_source'] + apply_info.update @my_info + @my_info.update apply_info + apply_info['is_update_account'] = true + else + my_uuid = %x(uuidgen).chomp + @my_info['my_uuid'] = my_uuid + apply_info.update @my_info + end + apply_new_account(apply_info, my_account_es) + end
- apply_account = ApplyJumperAccount.new(@my_info) + def apply_new_account(apply_info, my_account_es) + apply_account = ApplyJumperAccount.new(apply_info) acct_info = apply_account.apply_jumper_account
- return acct_info + @my_info['my_login_name'] = acct_info['my_login_name'] unless my_account_es['found'] + end + + def check_account_es + my_account_info_str = %x(curl -XGET #{@es_host}:#{@es_port}/accounts/_doc/#{@my_info['my_email']}) + YAML.safe_load my_account_info_str end
def store_account_info
On Fri, Dec 04, 2020 at 09:45:10AM +0800, Luan Shengde wrote:
avoid multi accounts assignment for single email address
[why] the mail-robot may assign a new account if user send 'apply account' email with the same email address. and this is a big waste of account resource.
[how] when get the request for applying account, check whether the email already has already been assigned an account. assign a new one if there is none return the old one if there is already one and update info mail robot will update infos if the mail has been set new:
- my_name
- my_ssh_pubkey
Signed-off-by: Luan Shengde shdluan@163.com
container/mail-robot/lib/apply-account.rb | 36 +++++++++++++++++------ 1 file changed, 27 insertions(+), 9 deletions(-)
diff --git a/container/mail-robot/lib/apply-account.rb b/container/mail-robot/lib/apply-account.rb index bf40429..d499840 100755 --- a/container/mail-robot/lib/apply-account.rb +++ b/container/mail-robot/lib/apply-account.rb @@ -12,6 +12,7 @@ require_relative 'apply-jumper-account' require_relative 'parse-apply-account-email'
SEND_MAIL_PORT = ENV['SEND_MAIL_PORT'] || 49000 +ES_PORT = ENV['ES_PORT'] || 9200
# assign uuid/account for user # when mail-robot listened new email, and the email's subject @@ -51,6 +52,8 @@ class ApplyAccount @send_mail_host = %x(/sbin/ip route | awk '/default/ {print $3}').chomp @send_mail_port = SEND_MAIL_PORT @mail_content = mail_content
@es_host = @send_mail_host
@es_port = ES_PORT
@my_info = {} end
@@ -61,9 +64,8 @@ class ApplyAccount # firstly get my_email before execute parse_mail_content is needed @my_info['my_email'] = @mail_content.from[0] parse_mail_content
- acct_info = apply_my_account
- @my_info['my_login_name'] = acct_info['my_login_name']
my_account_es = check_account_es
apply_my_account(my_account_es)
store_account_info send_mail('')
@@ -82,15 +84,31 @@ class ApplyAccount @my_info.update parsed_email_info end
- def apply_my_account
- my_uuid = %x(uuidgen).chomp
- @my_info['my_uuid'] = my_uuid
- def apply_my_account(my_account_es)
- apply_info = {}
- if my_account_es['found']
apply_info.update my_account_es['_source']
apply_info.update @my_info
@my_info.update apply_info
apply_info['is_update_account'] = true
- else
my_uuid = %x(uuidgen).chomp
@my_info['my_uuid'] = my_uuid
apply_info.update @my_info
- end
- apply_new_account(apply_info, my_account_es)
- end
- apply_account = ApplyJumperAccount.new(@my_info)
- def apply_new_account(apply_info, my_account_es)
- apply_account = ApplyJumperAccount.new(apply_info) acct_info = apply_account.apply_jumper_account
- return acct_info
- @my_info['my_login_name'] = acct_info['my_login_name'] unless my_account_es['found']
- end
- def check_account_es
- my_account_info_str = %x(curl -XGET #{@es_host}:#{@es_port}/accounts/_doc/#{@my_info['my_email']})
Use the es client may be better and maintainable.
Thanks, Xueliang
YAML.safe_load my_account_info_str end
def store_account_info
-- 2.23.0
- def check_account_es
- my_account_info_str = %x(curl -XGET #{@es_host}:#{@es_port}/accounts/_doc/#{@my_info['my_email']})
Use the es client may be better and maintainable.
OK, I will optimizi it
Thanks, Luan Shengde
Thanks, Xueliang
YAML.safe_load my_account_info_str end
def store_account_info
-- 2.23.0