On Wed, Nov 11, 2020 at 07:05:04PM +0800, Luan Shengde wrote:
ParseApplyAccountEmail parse commit url and pubkey parse commit url check commit url exists check base url in upstream-repos check commit available hub: gitee.com call gitee-commit-url-check to check commit available hub: non-gitee.com check the feedback of curl command to check the commit url available
parse pubkey attachment file name: id_rsa.pub
usage: reference assign-account.rb
Signed-off-by: Luan Shengde shdluan@163.com
lib/parse-apply-account-email.rb | 115 +++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100755 lib/parse-apply-account-email.rb
diff --git a/lib/parse-apply-account-email.rb b/lib/parse-apply-account-email.rb new file mode 100755 index 0000000..37063e0 --- /dev/null +++ b/lib/parse-apply-account-email.rb @@ -0,0 +1,115 @@ +#!/usr/bin/env ruby +# SPDX-License-Identifier: MulanPSL-2.0+ +# Copyright (c) 2020 Huawei Technologies Co., Ltd. All rights reserved. +# frozen_string_literal: true
+require 'json' +require 'mail'
+# parse mail_content +# parse_commit_url +# extract_commit_url +# check commit url exists +# base_url_in_upstream_repos +# check base url in upstream-repos +# commit_url_availability +# check commit available +# parse pub_key +# check pub_key exists +class ParseApplyAccountEmail
- def initialize(mail_content)
- @mail_content = mail_content
- @my_info = {
'my_email' => mail_content.from[0],
'my_name' => mail_content.From.unparsed_value.gsub(/ <[^<>]*>/, '')
- }
- end
- def extract_commit_url
- mail_content_body = @mail_content.part[0].part[0].body.decoded || @mail_content.part[0].body.decoded
- mail_content_line = mail_content_body.gsub(/\n/, '')
- # the commit url should be headed with a prefix: my oss commit
- # the commit url must be in a standart format, example:
- # my oss commit: https://github.com/torvalds/aalinux/commit/7be74942f184fdfba34ddd19a0d995deb...
- no_commit_url unless mail_content_line.match?(%r{my oss commit:\s*https?://[^/]*/[^/]*/[^/]*/commit/[\w\d]{40}})
- mail_content_body.match(%r{https?://[^/]*/[^/]*/[^/]*/commit/[\w\d]{40}})[0]
- end
- def no_commit_url
- error_message = "No matched commit url found.\n"
- error_message += "Ensure that you have add a right commit url with prefix 'my oss commit:'."
- raise error_message
- end
- def parse_commit_url
- url = extract_commit_url
- base_url = url.gsub(%r{/commit/[\w\d]{40}$}, '')
- base_url_in_upstream_repos('/c/upstream-repos', base_url)
- commit_url_availability(url, base_url)
- return url
- end
- def base_url_in_upstream_repos(upstream_dir, base_url)
- Dir.chdir(upstream_dir)
- match_out = %x(grep -rn #{base_url})
- return unless match_out.empty?
- error_message = "The repo url for your commit is not in our upstream-repo list.\n"
- error_message += 'Use a new one, or consulting the manager for available repo list.'
- raise error_message
- end
- def commit_url_availability(url, base_url)
- hub_name = url.split('/')[2]
- # it requires authentication when execute curl to get the commit infomation
^^ information
Thanks, Baijing
- # clone the repo and then validate the commit for the email address
- if hub_name.eql? 'gitee.com'
gitee_commit(url, base_url)
- else
non_gitee_commit(url)
- end
- end
- def gitee_commit(url, base_url)
- my_gitee_commit = GiteeCommitUrlCheck.new(@my_info, url, base_url)
- my_gitee_commit.gitee_commit_index
- end
- def non_gitee_commit(url)
- url_fdback = %x(curl #{url})
- email_index = url_fdback.index @my_info['my_email']
- return unless email_index.nil?
- error_message = "We can not confirm the commit url matches your email.\n"
- error_message += 'Make sure that the commit url is right,'
- error_message += ' or it is truely submitted with you email.'
- raise error_message
- end
- def parse_pub_key
- pub_key = @mail_content.part[1].body.decoded if @mail_content.part[1].filename == 'id_rsa.pub'
- pub_key_exist(pub_key)
- return pub_key
- end
- def pub_key_exist(pub_key)
- return unless pub_key.nil?
- error_message = "No pub_key found.\n"
- error_message += 'Please add the pub_key as an attachment with filename: id_rsa.pub.'
- raise error_message
- end
+end
2.23.0