From 983f48817776418deb0ed546b8847a94aac2b77c Mon Sep 17 00:00:00 2001 From: yystopf Date: Thu, 8 Dec 2022 11:51:59 +0800 Subject: [PATCH 01/25] =?UTF-8?q?fixed=20=E7=AC=AC=E4=B8=89=E6=96=B9?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E7=99=BB=E5=BD=95=E9=85=8D=E7=BD=AE=E6=94=AF?= =?UTF-8?q?=E6=8C=81Get=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/initializers/omniauth.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb index 876dbad5..37736b79 100644 --- a/config/initializers/omniauth.rb +++ b/config/initializers/omniauth.rb @@ -5,6 +5,7 @@ OmniAuth.config.add_camelization 'qq', 'QQ' if config.dig("oauth", "qq") # OmniAuth.config.add_camelization 'gitee', 'Gitee' if config.dig("oauth", "gitee") # OmniAuth.config.add_camelization 'wechat', 'Wechat' if config.dig("oauth", "wechat") OmniAuth.config.logger = Rails.logger +OmniAuth.config.allowed_request_methods = %i[get post] OmniAuth.config.before_request_phase = nil OmniAuth.config.before_callback_phase = nil OmniAuth.config.on_failure = Proc.new { |env| From 1c16b74f1b3b7dd11125a98e4d37c4f1d570ac77 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 8 Dec 2022 17:15:33 +0800 Subject: [PATCH 02/25] =?UTF-8?q?fixed=20=E4=B8=8B=E8=BD=BD=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=B1=BB=E5=A2=9E=E5=8A=A0xlsx,Makefile=E5=8F=AF?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/repositories_helper.rb | 402 +++++++++--------- .../repositories/_simple_entry.json.jbuilder | 2 +- 2 files changed, 202 insertions(+), 202 deletions(-) diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index b7bb568a..d9ac3746 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -1,201 +1,201 @@ -module RepositoriesHelper - def render_permission(user, project) - return "Admin" if user&.admin? - project.get_premission(user) - end - - def render_decode64_content(str) - return nil if str.blank? - Base64.decode64(str).force_encoding("UTF-8").encode("UTF-8", invalid: :replace) - end - - def download_type(str) - default_type = %w(ppt pptx pdf zip 7z rar exe pdb obj idb RData rdata doc docx mpp vsdx dot otf eot ttf woff woff2 mp4 mov wmv flv mpeg avi avchd webm mkv apk) - default_type.include?(str&.downcase) || str.blank? - end - - def image_type?(str) - default_type = %w(png jpg gif tif psd svg bmp webp jpeg ico psd) - default_type.include?(str&.downcase) - end - - def is_readme?(type, str) - return false if type != 'file' || str.blank? - readme_types = ["readme.md", "readme", "readme_en.md", "readme_zh.md", "readme_en", "readme_zh"] - readme_types.include?(str.to_s.downcase) || str =~ CustomRegexp::MD_REGEX - end - - def render_commit_author(author_json) - return nil if author_json.blank? || (author_json["id"].blank? && author_json['name'].blank?) - if author_json["id"].present? - return find_user_by_gitea_uid author_json['id'] - end - if author_json["id"].nil? && (author_json["name"].present? && author_json["email"].present?) - return find_user_by_login_and_mail(author_json['name'], author_json["email"]) - end - end - - def render_cache_commit_author(author_json) - if author_json["name"].present? && author_json["email"].present? - return find_user_in_redis_cache(author_json['name'], author_json['email']) - end - if author_json["Name"].present? && author_json["Email"].present? - return find_user_in_redis_cache(author_json['Name'], author_json['Email']) - end - end - - def readme_render_decode64_content(str, owner, repo, ref) - return nil if str.blank? - begin - content = Base64.decode64(str).force_encoding('UTF-8') - - c_regex = /\!\[.*?\]\((.*?)\)/ - src_regex = /src=\"(.*?)\"/ - ss = content.to_s.scan(c_regex) - ss_src = content.to_s.scan(src_regex) - total_images = ss + ss_src - if total_images.length > 0 - total_images.each do |s| - begin - image_title = /\"(.*?)\"/ - r_content = s[0] - remove_title = r_content.to_s.scan(image_title) - if remove_title.length > 0 - r_content = r_content.gsub(/#{remove_title[0]}/, "").strip - end - # if r_content.include?("?") - # new_r_content = r_content + "&raw=true" - # else - # new_r_content = r_content + "?raw=true" - # end - new_r_content = r_content - - unless r_content.include?("http://") || r_content.include?("https://") || r_content.include?("mailto:") - # new_r_content = "#{path}" + new_r_content - new_r_content = [base_url, "/api/#{owner&.login}/#{repo.identifier}/raw?filepath=#{r_content}&ref=#{ref}"].join - end - content = content.gsub(/#{r_content}/, new_r_content) - rescue - next - end - end - end - - return content - rescue - return str - end - end - - # author hui.he - def new_readme_render_decode64_content(str, owner, repo, ref, readme_path, readme_name) - file_path = readme_path.include?('/') ? readme_path.gsub("/#{readme_name}", '') : readme_path.gsub("#{readme_name}", '') - return nil if str.blank? - content = Base64.decode64(str).force_encoding('UTF-8') - s_regex = /\[.*?\]\((.*?)\)/ - src_regex = /src=\"(.*?)\"/ - ss = content.to_s.scan(s_regex) - ss_src = content.to_s.scan(src_regex) - total_sources = ss + ss_src - total_sources.uniq! - total_sources.each do |s| - begin - s_content = s[0] - # 链接直接跳过不做替换 - next if s_content.starts_with?('http://') || s_content.starts_with?('https://') || s_content.starts_with?('mailto:') || s_content.blank? - ext = File.extname(s_content)[1..-1] - if (image_type?(ext) || download_type(ext)) && !ext.blank? - s_content = File.expand_path(s_content, file_path) - s_content = s_content.split("#{Rails.root}/")[1] - # content = content.gsub(s[0], "/#{s_content}") - s_content = [base_url, "/api/#{owner&.login}/#{repo.identifier}/raw?filepath=#{s_content}&ref=#{ref}"].join - content = content.gsub(s[0], s_content) - else - path = [owner&.login, repo&.identifier, 'tree', ref, file_path].join("/") - s_content = File.expand_path(s_content, path) - s_content = s_content.split("#{Rails.root}/")[1] - content = content.gsub('('+s[0]+')', '('+"/#{s_content}"+')') - end - rescue - next - end - end - - return content - rescue - return str - end - - # unix_time values for example: 1604382982 - def render_format_time_with_unix(unix_time) - Time.at(unix_time).strftime("%Y-%m-%d %H:%M") - end - - # date for example: 2020-11-01T19:57:27+08:00 - def render_format_time_with_date(date) - date.to_time.strftime("%Y-%m-%d %H:%M") - end - - def readme_decode64_content(entry, owner, repo, ref, path=nil) - Rails.logger.info("entry===#{entry["type"]} #{entry["name"]}") - content = Gitea::Repository::Entries::GetService.call(owner, repo.identifier, URI.escape(entry['path']), ref: ref)['content'] - Rails.logger.info("content===#{content}") - # readme_render_decode64_content(content, owner, repo, ref) - new_readme_render_decode64_content(content, owner, repo, ref, entry['path'], entry['name']) - end - - def decode64_content(entry, owner, repo, ref, path=nil) - if is_readme?(entry['type'], entry['name']) - Rails.logger.info("entry===#{entry["type"]} #{entry["name"]}") - content = Gitea::Repository::Entries::GetService.call(owner, repo.identifier, URI.escape(entry['path']), ref: ref)['content'] - Rails.logger.info("content===#{content}") - # readme_render_decode64_content(content, owner, repo, ref) - return Base64.decode64(content).force_encoding('UTF-8') - else - file_type = File.extname(entry['name'].to_s)[1..-1] - if image_type?(file_type) - return entry['content'].nil? ? Gitea::Repository::Entries::GetService.call(owner, repo.identifier, URI.escape(entry['path']), ref: ref)['content'] : entry['content'] - end - if download_type(file_type) - return entry['content'] - end - render_decode64_content(entry['content']) - end - end - - def base64_to_image(path, content) - # generate to https://git.trusite.net/pawm36ozq/-/raw/branch/master/entrn.png" - content = Base64.decode64(content) - File.open(path, 'wb') { |f| f.write(content) } - end - - def render_download_image_url(dir_path, file_path, content) - full_path = file_path.starts_with?("/") ? [dir_path, file_path].join("") : [dir_path, file_path].join("/") - file_name = full_path.split("/")[-1] - # 用户名/项目标识/文件路径 - dir_path = generate_dir_path(full_path.split("/"+file_name)[0]) - - file_path = [dir_path, file_name].join('/') - - puts "##### render_download_image_url file_path: #{file_path}" - base64_to_image(file_path, content) - file_path = file_path[6..-1] - File.join(base_url, file_path) - end - - def generate_dir_path(dir_path) - # tmp_dir_path - # eg: jasder/forgeplus/raw/branch/ref - dir_path = ["public", tmp_dir, dir_path].join('/') - puts "#### dir_path: #{dir_path}" - unless Dir.exists?(dir_path) - FileUtils.mkdir_p(dir_path) ##不成功这里会抛异常 - end - dir_path - end - - def tmp_dir - "repo" - end - -end +module RepositoriesHelper + def render_permission(user, project) + return "Admin" if user&.admin? + project.get_premission(user) + end + + def render_decode64_content(str) + return nil if str.blank? + Base64.decode64(str).force_encoding("UTF-8").encode("UTF-8", invalid: :replace) + end + + def download_type(str) + default_type = %w(ppt pptx pdf zip 7z rar exe pdb obj idb RData rdata doc docx mpp vsdx dot otf eot ttf woff woff2 mp4 mov wmv flv mpeg avi avchd webm mkv apk xlsx xls) + default_type.include?(str&.downcase) || str.blank? + end + + def image_type?(str) + default_type = %w(png jpg gif tif psd svg bmp webp jpeg ico psd) + default_type.include?(str&.downcase) + end + + def is_readme?(type, str) + return false if type != 'file' || str.blank? + readme_types = ["readme.md", "readme", "readme_en.md", "readme_zh.md", "readme_en", "readme_zh"] + readme_types.include?(str.to_s.downcase) || str =~ CustomRegexp::MD_REGEX + end + + def render_commit_author(author_json) + return nil if author_json.blank? || (author_json["id"].blank? && author_json['name'].blank?) + if author_json["id"].present? + return find_user_by_gitea_uid author_json['id'] + end + if author_json["id"].nil? && (author_json["name"].present? && author_json["email"].present?) + return find_user_by_login_and_mail(author_json['name'], author_json["email"]) + end + end + + def render_cache_commit_author(author_json) + if author_json["name"].present? && author_json["email"].present? + return find_user_in_redis_cache(author_json['name'], author_json['email']) + end + if author_json["Name"].present? && author_json["Email"].present? + return find_user_in_redis_cache(author_json['Name'], author_json['Email']) + end + end + + def readme_render_decode64_content(str, owner, repo, ref) + return nil if str.blank? + begin + content = Base64.decode64(str).force_encoding('UTF-8') + + c_regex = /\!\[.*?\]\((.*?)\)/ + src_regex = /src=\"(.*?)\"/ + ss = content.to_s.scan(c_regex) + ss_src = content.to_s.scan(src_regex) + total_images = ss + ss_src + if total_images.length > 0 + total_images.each do |s| + begin + image_title = /\"(.*?)\"/ + r_content = s[0] + remove_title = r_content.to_s.scan(image_title) + if remove_title.length > 0 + r_content = r_content.gsub(/#{remove_title[0]}/, "").strip + end + # if r_content.include?("?") + # new_r_content = r_content + "&raw=true" + # else + # new_r_content = r_content + "?raw=true" + # end + new_r_content = r_content + + unless r_content.include?("http://") || r_content.include?("https://") || r_content.include?("mailto:") + # new_r_content = "#{path}" + new_r_content + new_r_content = [base_url, "/api/#{owner&.login}/#{repo.identifier}/raw?filepath=#{r_content}&ref=#{ref}"].join + end + content = content.gsub(/#{r_content}/, new_r_content) + rescue + next + end + end + end + + return content + rescue + return str + end + end + + # author hui.he + def new_readme_render_decode64_content(str, owner, repo, ref, readme_path, readme_name) + file_path = readme_path.include?('/') ? readme_path.gsub("/#{readme_name}", '') : readme_path.gsub("#{readme_name}", '') + return nil if str.blank? + content = Base64.decode64(str).force_encoding('UTF-8') + s_regex = /\[.*?\]\((.*?)\)/ + src_regex = /src=\"(.*?)\"/ + ss = content.to_s.scan(s_regex) + ss_src = content.to_s.scan(src_regex) + total_sources = ss + ss_src + total_sources.uniq! + total_sources.each do |s| + begin + s_content = s[0] + # 链接直接跳过不做替换 + next if s_content.starts_with?('http://') || s_content.starts_with?('https://') || s_content.starts_with?('mailto:') || s_content.blank? + ext = File.extname(s_content)[1..-1] + if (image_type?(ext) || download_type(ext)) && !ext.blank? + s_content = File.expand_path(s_content, file_path) + s_content = s_content.split("#{Rails.root}/")[1] + # content = content.gsub(s[0], "/#{s_content}") + s_content = [base_url, "/api/#{owner&.login}/#{repo.identifier}/raw?filepath=#{s_content}&ref=#{ref}"].join + content = content.gsub(s[0], s_content) + else + path = [owner&.login, repo&.identifier, 'tree', ref, file_path].join("/") + s_content = File.expand_path(s_content, path) + s_content = s_content.split("#{Rails.root}/")[1] + content = content.gsub('('+s[0]+')', '('+"/#{s_content}"+')') + end + rescue + next + end + end + + return content + rescue + return str + end + + # unix_time values for example: 1604382982 + def render_format_time_with_unix(unix_time) + Time.at(unix_time).strftime("%Y-%m-%d %H:%M") + end + + # date for example: 2020-11-01T19:57:27+08:00 + def render_format_time_with_date(date) + date.to_time.strftime("%Y-%m-%d %H:%M") + end + + def readme_decode64_content(entry, owner, repo, ref, path=nil) + Rails.logger.info("entry===#{entry["type"]} #{entry["name"]}") + content = Gitea::Repository::Entries::GetService.call(owner, repo.identifier, URI.escape(entry['path']), ref: ref)['content'] + Rails.logger.info("content===#{content}") + # readme_render_decode64_content(content, owner, repo, ref) + new_readme_render_decode64_content(content, owner, repo, ref, entry['path'], entry['name']) + end + + def decode64_content(entry, owner, repo, ref, path=nil) + if is_readme?(entry['type'], entry['name']) + Rails.logger.info("entry===#{entry["type"]} #{entry["name"]}") + content = Gitea::Repository::Entries::GetService.call(owner, repo.identifier, URI.escape(entry['path']), ref: ref)['content'] + Rails.logger.info("content===#{content}") + # readme_render_decode64_content(content, owner, repo, ref) + return Base64.decode64(content).force_encoding('UTF-8') + else + file_type = File.extname(entry['name'].to_s)[1..-1] + if image_type?(file_type) + return entry['content'].nil? ? Gitea::Repository::Entries::GetService.call(owner, repo.identifier, URI.escape(entry['path']), ref: ref)['content'] : entry['content'] + end + if download_type(file_type) + return entry['content'] + end + render_decode64_content(entry['content']) + end + end + + def base64_to_image(path, content) + # generate to https://git.trusite.net/pawm36ozq/-/raw/branch/master/entrn.png" + content = Base64.decode64(content) + File.open(path, 'wb') { |f| f.write(content) } + end + + def render_download_image_url(dir_path, file_path, content) + full_path = file_path.starts_with?("/") ? [dir_path, file_path].join("") : [dir_path, file_path].join("/") + file_name = full_path.split("/")[-1] + # 用户名/项目标识/文件路径 + dir_path = generate_dir_path(full_path.split("/"+file_name)[0]) + + file_path = [dir_path, file_name].join('/') + + puts "##### render_download_image_url file_path: #{file_path}" + base64_to_image(file_path, content) + file_path = file_path[6..-1] + File.join(base_url, file_path) + end + + def generate_dir_path(dir_path) + # tmp_dir_path + # eg: jasder/forgeplus/raw/branch/ref + dir_path = ["public", tmp_dir, dir_path].join('/') + puts "#### dir_path: #{dir_path}" + unless Dir.exists?(dir_path) + FileUtils.mkdir_p(dir_path) ##不成功这里会抛异常 + end + dir_path + end + + def tmp_dir + "repo" + end + +end diff --git a/app/views/repositories/_simple_entry.json.jbuilder b/app/views/repositories/_simple_entry.json.jbuilder index 3a0d16e2..3bea9819 100644 --- a/app/views/repositories/_simple_entry.json.jbuilder +++ b/app/views/repositories/_simple_entry.json.jbuilder @@ -1,7 +1,7 @@ if @project.forge? file_name = entry['name'] file_type = File.extname(file_name.to_s)[1..-1] - direct_download = download_type(file_type) + direct_download = file_name.to_s.downcase.include?("Makefile".downcase) || download_type(file_type) image_type = image_type?(file_type) json.name file_name json.sha entry['sha'] From d0b638cbc0bc3610e693ea90e222fc5e45b6993f Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 8 Dec 2022 17:16:21 +0800 Subject: [PATCH 03/25] =?UTF-8?q?fixed=20=E4=B8=8B=E8=BD=BD=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=B1=BB=E5=A2=9E=E5=8A=A0xlsx,Makefile=E5=8F=AF?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/repositories/_simple_entry.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/repositories/_simple_entry.json.jbuilder b/app/views/repositories/_simple_entry.json.jbuilder index 3bea9819..4875554c 100644 --- a/app/views/repositories/_simple_entry.json.jbuilder +++ b/app/views/repositories/_simple_entry.json.jbuilder @@ -1,7 +1,7 @@ if @project.forge? file_name = entry['name'] file_type = File.extname(file_name.to_s)[1..-1] - direct_download = file_name.to_s.downcase.include?("Makefile".downcase) || download_type(file_type) + direct_download = file_name.to_s.downcase == "Makefile".downcase || download_type(file_type) image_type = image_type?(file_type) json.name file_name json.sha entry['sha'] From 3edac3656a7f6e5a0c0e9b7360eb45ea66d3142a Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 8 Dec 2022 18:14:43 +0800 Subject: [PATCH 04/25] =?UTF-8?q?fixed=20=E4=B8=8B=E8=BD=BD=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=B1=BB=E5=A2=9E=E5=8A=A0xlsx,Makefile=E5=8F=AF?= =?UTF-8?q?=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/repositories/_simple_entry.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/repositories/_simple_entry.json.jbuilder b/app/views/repositories/_simple_entry.json.jbuilder index 4875554c..30ed9d22 100644 --- a/app/views/repositories/_simple_entry.json.jbuilder +++ b/app/views/repositories/_simple_entry.json.jbuilder @@ -1,7 +1,7 @@ if @project.forge? file_name = entry['name'] file_type = File.extname(file_name.to_s)[1..-1] - direct_download = file_name.to_s.downcase == "Makefile".downcase || download_type(file_type) + direct_download = file_name.to_s.downcase != "Makefile".downcase && download_type(file_type) image_type = image_type?(file_type) json.name file_name json.sha entry['sha'] From edd1d27b0a2543184252c6ffb3713b3df08683e9 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 9 Dec 2022 11:04:24 +0800 Subject: [PATCH 05/25] =?UTF-8?q?fixed=20=E7=94=A8=E6=88=B7=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E8=B7=B3=E8=BD=AC=E9=93=BE=E6=8E=A5=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/admins/users/shared/_user_list.html.erb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/admins/users/shared/_user_list.html.erb b/app/views/admins/users/shared/_user_list.html.erb index 16cd403d..716e7cc5 100644 --- a/app/views/admins/users/shared/_user_list.html.erb +++ b/app/views/admins/users/shared/_user_list.html.erb @@ -27,7 +27,7 @@ <%= user.identity %> <%= display_text(user.created_on&.strftime('%Y-%m-%d %H:%M')) %> <%= display_text(user.last_login_on&.strftime('%Y-%m-%d %H:%M')) %> - <%= link_to user.projects_count, "/users/#{user.login}/projects", target: "_blank" %> + <%= link_to user.projects_count, "/#{user.login}/projects", target: "_blank" %> <%= link_to '编辑', edit_admins_user_path(user), class: 'action' %> From a631d423c66675216f8db68118b164dec3030c47 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 9 Dec 2022 11:07:00 +0800 Subject: [PATCH 06/25] =?UTF-8?q?fixed=20=E9=A1=B9=E7=9B=AE=E8=B7=B3?= =?UTF-8?q?=E8=BD=AC=E9=93=BE=E6=8E=A5=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/helpers/admins/projects_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/admins/projects_helper.rb b/app/helpers/admins/projects_helper.rb index 36d9d6f5..9a4d1855 100644 --- a/app/helpers/admins/projects_helper.rb +++ b/app/helpers/admins/projects_helper.rb @@ -6,7 +6,7 @@ module Admins::ProjectsHelper if owner.is_a?(User) link_to(project.owner&.real_name, "/#{project&.owner&.login}", target: '_blank') elsif owner.is_a?(Organization) - link_to(project.owner&.real_name, "/organize/#{project&.owner&.login}", target: '_blank') + link_to(project.owner&.real_name, "/#{project&.owner&.login}", target: '_blank') else "" end From bc2992cc3d2508b0abf53d1ecbcd5c1562c6ddb9 Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 9 Dec 2022 11:45:31 +0800 Subject: [PATCH 07/25] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E7=AE=A1=E7=90=86=E6=9B=B4=E6=94=B9=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E9=82=AE=E7=AE=B1=E9=9C=80=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E8=87=B3gitea?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/admins/update_user_service.rb | 15 +++++++++++++-- app/views/admins/users/edit.html.erb | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/services/admins/update_user_service.rb b/app/services/admins/update_user_service.rb index 34f704cb..9d116cff 100644 --- a/app/services/admins/update_user_service.rb +++ b/app/services/admins/update_user_service.rb @@ -15,13 +15,14 @@ class Admins::UpdateUserService < ApplicationService user.firstname = '' user.password = params[:password] if params[:password].present? - user.user_extension.assign_attributes(user_extension_attributes) + user.user_extension.assign_attributes(user_extension_attributes) if user.user_extension.present? old_login = user.login ActiveRecord::Base.transaction do user.save! - user.user_extension.save! + user.user_extension.save! if user.user_extension.present? update_gitea_user(old_login) + update_gitea_user_email(user.previous_changes[:mail]) end user @@ -65,4 +66,14 @@ class Admins::UpdateUserService < ApplicationService Util.logger_error(ex) raise Error, '保存失败' end + + def update_gitea_user_email(change_options) + return if change_options.blank? + return if user.gitea_uid.blank? || user.gitea_token.blank? + $gitea_client.delete_user_emails({body: {emails: [change_options[0]]}.to_json, query: {access_token: user.gitea_token}}) + $gitea_client.post_user_emails({body: {emails: [change_options[1]]}.to_json, query: {access_token: user.gitea_token}}) + rescue Exception => ex + Util.logger_error(ex) + raise Error, '保存失败' + end end \ No newline at end of file diff --git a/app/views/admins/users/edit.html.erb b/app/views/admins/users/edit.html.erb index 44d52499..3b480177 100644 --- a/app/views/admins/users/edit.html.erb +++ b/app/views/admins/users/edit.html.erb @@ -68,12 +68,12 @@ <%= f.label :identity, label: '职业' %> <%= select_tag('user[identity]', [], class: 'form-control identity-select optional', 'data-value': @user.user_extension&.identity, 'data-first-title': '请选择') %> -
+
<%= f.label :technical_title, label: '职称' %> <%= select_tag('user[technical_title]', [], class: 'form-control technical-title-select optional', 'data-value': @user.technical_title) %>
- <%= f.input :student_id, as: :tel, label: '学号', wrapper_html: { class: 'col-md-2', style: @user.user_extension.student? ? '' : 'display:none;' }, input_html: { class: 'student-id-input' } %> + <%= f.input :student_id, as: :tel, label: '学号', wrapper_html: { class: 'col-md-2', style: @user&.user_extension&.student? ? '' : 'display:none;' }, input_html: { class: 'student-id-input' } %>
From f796d1be42ec030f09c5730804f912e39cc1bd54 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 9 Dec 2022 14:03:41 +0800 Subject: [PATCH 08/25] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E5=8F=AF=E8=A7=81=E6=80=A7=E4=B8=BA=E7=A7=81=E6=9C=89=EF=BC=8C?= =?UTF-8?q?=E5=88=99=E9=9C=80=E5=B0=86=E8=AF=A5=E7=BB=84=E7=BB=87=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E6=89=80=E6=9C=89=E4=BB=93=E5=BA=93=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=9B=B4=E6=94=B9=E4=B8=BA=E7=A7=81=E6=9C=89=E4=BB=93=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../organizations/organizations_controller.rb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/controllers/organizations/organizations_controller.rb b/app/controllers/organizations/organizations_controller.rb index 0ae11359..1a6b1bd4 100644 --- a/app/controllers/organizations/organizations_controller.rb +++ b/app/controllers/organizations/organizations_controller.rb @@ -46,6 +46,12 @@ class Organizations::OrganizationsController < Organizations::BaseController @organization.nickname = organization_params[:nickname] if organization_params[:nickname].present? @organization.save! sync_organization_extension! + # 更改组织可见性为私有,则需将该组织下的所有仓库同步更改为私有仓库 + if organization_extension_params[:visibility] == "privacy" + Project.where(user_id: @organization.id).where(is_public: true).each do |project| + update_project_private(project) + end + end Gitea::Organization::UpdateService.call(current_user.gitea_token, login, @organization.reload) Util.write_file(@image, avatar_path(@organization)) if params[:image].present? @@ -123,5 +129,20 @@ class Organizations::OrganizationsController < Organizations::BaseController def sync_organization_extension! @organization.organization_extension.update_attributes!(organization_extension_params) end + + def update_project_private(project) + project.update_attributes!(is_public: false) + project.forked_projects.update_all(is_public: project.is_public) + gitea_params = { + private: false, + default_branch: project.default_branch, + website: project.website, + name: project.identifier + } + gitea_repo = Gitea::Repository::UpdateService.call(@organization, project&.repository&.identifier, gitea_params) + project.repository.update_attributes({hidden: gitea_repo["private"], identifier: gitea_repo["name"]}) + # 更新对应所属分类下的项目数量(私有) + project.project_category.decrement!(:private_projects_count, 1) if project.project_category.present? + end end \ No newline at end of file From d9833ef1bf16f5dd78f50a28569371c3c8ed1975 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 9 Dec 2022 14:18:19 +0800 Subject: [PATCH 09/25] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E5=8F=AF=E8=A7=81=E6=80=A7=E4=B8=BA=E7=A7=81=E6=9C=89=EF=BC=8C?= =?UTF-8?q?=E5=88=99=E9=9C=80=E5=B0=86=E8=AF=A5=E7=BB=84=E7=BB=87=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E6=89=80=E6=9C=89=E4=BB=93=E5=BA=93=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=9B=B4=E6=94=B9=E4=B8=BA=E7=A7=81=E6=9C=89=E4=BB=93=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/organizations/organizations_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/organizations/organizations_controller.rb b/app/controllers/organizations/organizations_controller.rb index 1a6b1bd4..10aaa1ae 100644 --- a/app/controllers/organizations/organizations_controller.rb +++ b/app/controllers/organizations/organizations_controller.rb @@ -134,7 +134,7 @@ class Organizations::OrganizationsController < Organizations::BaseController project.update_attributes!(is_public: false) project.forked_projects.update_all(is_public: project.is_public) gitea_params = { - private: false, + private: true, default_branch: project.default_branch, website: project.website, name: project.identifier From 45aa49f27d027c4220654d0fcd7b43e3ff8b1c45 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 9 Dec 2022 15:39:33 +0800 Subject: [PATCH 10/25] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A7=81=E6=9C=89=E7=BB=84=E7=BB=87=E4=B8=AD?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/queries/projects/list_query.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/queries/projects/list_query.rb b/app/queries/projects/list_query.rb index 0a3cc3a4..35d91dff 100644 --- a/app/queries/projects/list_query.rb +++ b/app/queries/projects/list_query.rb @@ -12,6 +12,9 @@ class Projects::ListQuery < ApplicationQuery def call collection = Project.visible + # 增加私有组织中项目过滤 + collection = collection.joins("left join organization_extensions on organization_extensions.organization_id = projects.user_id") + .where("organization_extensions.visibility is null or organization_extensions.visibility in (0,1)") collection = filter_projects(collection) sort = params[:sort_by] || "updated_on" From 69065d1e5a3f933887b88cec7463f57061341ac4 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 9 Dec 2022 15:42:47 +0800 Subject: [PATCH 11/25] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A7=81=E6=9C=89=E7=BB=84=E7=BB=87=E4=B8=AD?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/queries/projects/list_query.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/queries/projects/list_query.rb b/app/queries/projects/list_query.rb index 35d91dff..c943f131 100644 --- a/app/queries/projects/list_query.rb +++ b/app/queries/projects/list_query.rb @@ -15,6 +15,7 @@ class Projects::ListQuery < ApplicationQuery # 增加私有组织中项目过滤 collection = collection.joins("left join organization_extensions on organization_extensions.organization_id = projects.user_id") .where("organization_extensions.visibility is null or organization_extensions.visibility in (0,1)") + .where("projects.user_id > 0") collection = filter_projects(collection) sort = params[:sort_by] || "updated_on" From 309ba151befa5d001919aaed19b9f6d463705b1d Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 9 Dec 2022 17:54:34 +0800 Subject: [PATCH 12/25] =?UTF-8?q?fixed=20qq=E8=AE=A4=E8=AF=81=E5=AF=86?= =?UTF-8?q?=E9=92=A5=E8=AF=BB=E5=8F=96=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/initializers/omniauth.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb index 37736b79..809650ae 100644 --- a/config/initializers/omniauth.rb +++ b/config/initializers/omniauth.rb @@ -14,7 +14,7 @@ OmniAuth.config.on_failure = Proc.new { |env| Rails.application.config.middleware.use OmniAuth::Builder do if config.dig("oauth", "qq") - provider :qq, config.dig("oauth", "qq", "appid"), config.dig("oauth", "github", "secret"), { provider_ignores_state: true } + provider :qq, config.dig("oauth", "qq", "appid"), config.dig("oauth", "qq", "secret"), { provider_ignores_state: true } end if config.dig("oauth", "github").present? provider :github, config.dig("oauth", "github", "appid"), config.dig("oauth", "github", "secret"), { provider_ignores_state: true, scope: "user:email" } From 311852234f22913f5d3774853b0b8a7fff7c8709 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 15 Dec 2022 11:38:03 +0800 Subject: [PATCH 13/25] =?UTF-8?q?fixed=20=E5=88=9B=E5=BB=BA=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=BC=80=E9=80=9A=E5=BB=BA=E6=9C=A8DevOps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/bind_users_controller.rb | 20 +++++++------ app/controllers/projects_controller.rb | 3 +- app/jobs/open_project_dev_ops_job.rb | 18 ++++++++++++ app/jobs/send_template_message_job.rb | 8 ++++++ app/models/message_template.rb | 1 + .../message_template/project_open_dev_ops.rb | 28 +++++++++++++++++++ 6 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 app/jobs/open_project_dev_ops_job.rb create mode 100644 app/models/message_template/project_open_dev_ops.rb diff --git a/app/controllers/bind_users_controller.rb b/app/controllers/bind_users_controller.rb index 329ade86..353842ef 100644 --- a/app/controllers/bind_users_controller.rb +++ b/app/controllers/bind_users_controller.rb @@ -4,10 +4,19 @@ class BindUsersController < ApplicationController def create # user = CreateBindUserService.call(create_params) # + Rails.logger.debug "--------------开始绑定用户------------" + Rails.logger.debug "--------------params: #{params.to_unsafe_h}" + tip_exception '系统错误' if session[:unionid].blank? + + bind_user = User.try_to_login(params[:username], params[:password]) + tip_exception '用户名或者密码错误' if bind_user.blank? + tip_exception '用户名或者密码错误' unless bind_user.check_password?(params[:password].to_s) + tip_exception '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s) + if params[:type] == "qq" begin - user = CreateBindUserService.call(current_user, create_params) - successful_authentication(user) if user.id != current_user.id + OpenUsers::QQ.create!(user: bind_user, uid: session[:unionid]) + successful_authentication(bind_user) render_ok rescue ApplicationService::Error => ex @@ -15,13 +24,6 @@ class BindUsersController < ApplicationController end else begin - tip_exception '系统错误' if session[:unionid].blank? - - bind_user = User.try_to_login(params[:username], params[:password]) - tip_exception '用户名或者密码错误' if bind_user.blank? - tip_exception '用户名或者密码错误' unless bind_user.check_password?(params[:password].to_s) - tip_exception '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s) - OpenUsers::Wechat.create!(user: bind_user, uid: session[:unionid]) successful_authentication(bind_user) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index faf9ec07..65557381 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -53,7 +53,7 @@ class ProjectsController < ApplicationController ActiveRecord::Base.transaction do Projects::CreateForm.new(project_params).validate! @project = Projects::CreateService.new(current_user, project_params).call - + OpenProjectDevOpsJob.perform_later(@project&.id, current_user.id) end rescue Exception => e uid_logger_error(e.message) @@ -84,6 +84,7 @@ class ProjectsController < ApplicationController else Projects::MigrateService.call(current_user, mirror_params) end + OpenProjectDevOpsJob.perform_later(@project&.id, current_user.id) rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) diff --git a/app/jobs/open_project_dev_ops_job.rb b/app/jobs/open_project_dev_ops_job.rb new file mode 100644 index 00000000..8f9cebb1 --- /dev/null +++ b/app/jobs/open_project_dev_ops_job.rb @@ -0,0 +1,18 @@ +class OpenProjectDevOpsJob < ApplicationJob + include ProjectsHelper + + queue_as :message + + def perform(project_id, user_id) + project = Project.find_by(id: project_id) + user = User.find_by(id: user_id) + url = "#{jianmu_devops_url}/#{jianmu_devops_code(project, user)}" + puts "jianmu_devops_url ===== #{url}" + http = Net::HTTP.new(url.host, url.port) + request = Net::HTTP::Get.new(url) + response = http.request(request) + puts "jianmu_devops_url ===== #{response.body}" + SendTemplateMessageJob.perform_later('ProjectOpenDevOps', user_id, project_id) + end + +end \ No newline at end of file diff --git a/app/jobs/send_template_message_job.rb b/app/jobs/send_template_message_job.rb index 557d4d0f..763708c3 100644 --- a/app/jobs/send_template_message_job.rb +++ b/app/jobs/send_template_message_job.rb @@ -217,6 +217,14 @@ class SendTemplateMessageJob < ApplicationJob receivers = project&.all_managers.where.not(id: operator&.id) receivers_string, content, notification_url = MessageTemplate::ProjectPraised.get_message_content(receivers, operator, project) Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, project_id: project.id}) + when 'ProjectOpenDevOps' + operator_id, project_id = args[0], args[1] + operator = User.find_by_id(operator_id) + project = Project.find_by_id(project_id) + return unless operator.present? && project.present? + receivers = User.where(id: operator.id) + receivers_string, content, notification_url = MessageTemplate::ProjectOpenDevOps.get_message_content(receivers, operator, project) + Notice::Write::CreateService.call(receivers_string, content, notification_url, source, {operator_id: operator.id, project_id: project.id}) when 'ProjectPullRequest' operator_id, pull_request_id = args[0], args[1] operator = User.find_by_id(operator_id) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index d9ba3eb7..7dc049c6 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -52,6 +52,7 @@ class MessageTemplate < ApplicationRecord email_html = File.read("#{email_template_html_dir}/project_milestone_completed.html") self.create(type: 'MessageTemplate::ProjectMilestoneCompleted', sys_notice: '在 {nickname}/{repository} 仓库,里程碑 {name} 的完成度已达到100%', notification_url: '{baseurl}/{owner}/{identifier}/milestones/{id}', email: email_html, email_title: "#{PLATFORM}: 仓库 {nickname}/{repository} 有里程碑已完成") self.create(type: 'MessageTemplate::ProjectPraised', sys_notice: '{nickname1} 点赞了你管理的仓库 {nickname2}/{repository}', notification_url: '{baseurl}/{login}') + self.create(type: 'MessageTemplate::ProjectOpenDevOps', sys_notice: '您的仓库 {nickname1} 已成功开通引擎服务,可通过简单的节点编排完成自动化集成与部署。欢迎体验!', notification_url: '{baseurl}/{owner}/{identifier}') email_html = File.read("#{email_template_html_dir}/project_pull_request.html") self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在 {nickname2}/{repository} 提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}', email: email_html, email_title: "#{PLATFORM}: {nickname1} 在 {nickname2}/{repository} 提交了一个合并请求") email_html = File.read("#{email_template_html_dir}/project_role.html") diff --git a/app/models/message_template/project_open_dev_ops.rb b/app/models/message_template/project_open_dev_ops.rb new file mode 100644 index 00000000..b3778535 --- /dev/null +++ b/app/models/message_template/project_open_dev_ops.rb @@ -0,0 +1,28 @@ +# == Schema Information +# +# Table name: message_templates +# +# id :integer not null, primary key +# type :string(255) +# sys_notice :text(65535) +# email :text(65535) +# created_at :datetime not null +# updated_at :datetime not null +# notification_url :string(255) +# email_title :string(255) +# + +# 我管理的仓库项目设置被更改 +class MessageTemplate::ProjectOpenDevOps < MessageTemplate + + # MessageTemplate::ProjectOpenDevOps.get_message_content(User.where(login: 'yystopf')) + def self.get_message_content(receivers, user, project) + return '', '', '' if receivers.blank? + content = sys_notice.gsub('{repository}', project&.name) + url = notification_url.gsub('{owner}', project&.owner&.login).gsub('{identifier}', project&.identifier) + return receivers_string(receivers), content, url + rescue => e + Rails.logger.info("MessageTemplate::ProjectOpenDevOps.get_message_content [ERROR] #{e}") + return '', '', '' + end +end From 2f9a514837c371762378580e78f8e0a13ed45f56 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 15 Dec 2022 11:41:11 +0800 Subject: [PATCH 14/25] =?UTF-8?q?fixed=20=E5=88=9B=E5=BB=BA=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=BC=80=E9=80=9A=E5=BB=BA=E6=9C=A8DevOps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/message_template.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 7dc049c6..399134b0 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -52,7 +52,7 @@ class MessageTemplate < ApplicationRecord email_html = File.read("#{email_template_html_dir}/project_milestone_completed.html") self.create(type: 'MessageTemplate::ProjectMilestoneCompleted', sys_notice: '在 {nickname}/{repository} 仓库,里程碑 {name} 的完成度已达到100%', notification_url: '{baseurl}/{owner}/{identifier}/milestones/{id}', email: email_html, email_title: "#{PLATFORM}: 仓库 {nickname}/{repository} 有里程碑已完成") self.create(type: 'MessageTemplate::ProjectPraised', sys_notice: '{nickname1} 点赞了你管理的仓库 {nickname2}/{repository}', notification_url: '{baseurl}/{login}') - self.create(type: 'MessageTemplate::ProjectOpenDevOps', sys_notice: '您的仓库 {nickname1} 已成功开通引擎服务,可通过简单的节点编排完成自动化集成与部署。欢迎体验!', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectOpenDevOps', sys_notice: '您的仓库 {repository} 已成功开通引擎服务,可通过简单的节点编排完成自动化集成与部署。欢迎体验!', notification_url: '{baseurl}/{owner}/{identifier}') email_html = File.read("#{email_template_html_dir}/project_pull_request.html") self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在 {nickname2}/{repository} 提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}', email: email_html, email_title: "#{PLATFORM}: {nickname1} 在 {nickname2}/{repository} 提交了一个合并请求") email_html = File.read("#{email_template_html_dir}/project_role.html") From 1a0390bf55c4965b9ac61be4450f52e1c846d1bb Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 15 Dec 2022 11:47:11 +0800 Subject: [PATCH 15/25] =?UTF-8?q?fixed=20=E5=88=9B=E5=BB=BA=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=BC=80=E9=80=9A=E5=BB=BA=E6=9C=A8DevOps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/open_project_dev_ops_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/open_project_dev_ops_job.rb b/app/jobs/open_project_dev_ops_job.rb index 8f9cebb1..84ee7b7d 100644 --- a/app/jobs/open_project_dev_ops_job.rb +++ b/app/jobs/open_project_dev_ops_job.rb @@ -6,7 +6,7 @@ class OpenProjectDevOpsJob < ApplicationJob def perform(project_id, user_id) project = Project.find_by(id: project_id) user = User.find_by(id: user_id) - url = "#{jianmu_devops_url}/#{jianmu_devops_code(project, user)}" + url = "#{jianmu_devops_url}/oauth2/authorize?code=#{jianmu_devops_code(project, user)}" puts "jianmu_devops_url ===== #{url}" http = Net::HTTP.new(url.host, url.port) request = Net::HTTP::Get.new(url) From 46f388999d8ac9b90db9a06b739be6345f367f5f Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 15 Dec 2022 13:53:34 +0800 Subject: [PATCH 16/25] =?UTF-8?q?fixed=20=E5=88=9B=E5=BB=BA=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=BC=80=E9=80=9A=E5=BB=BA=E6=9C=A8DevOps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/open_project_dev_ops_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/open_project_dev_ops_job.rb b/app/jobs/open_project_dev_ops_job.rb index 84ee7b7d..218237b8 100644 --- a/app/jobs/open_project_dev_ops_job.rb +++ b/app/jobs/open_project_dev_ops_job.rb @@ -6,7 +6,7 @@ class OpenProjectDevOpsJob < ApplicationJob def perform(project_id, user_id) project = Project.find_by(id: project_id) user = User.find_by(id: user_id) - url = "#{jianmu_devops_url}/oauth2/authorize?code=#{jianmu_devops_code(project, user)}" + url = URI("#{jianmu_devops_url}/oauth2/authorize?code=#{jianmu_devops_code(project, user)}") puts "jianmu_devops_url ===== #{url}" http = Net::HTTP.new(url.host, url.port) request = Net::HTTP::Get.new(url) From 1de784e9c7c52cf8301e6361e9653bc2383c15de Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 15 Dec 2022 14:02:47 +0800 Subject: [PATCH 17/25] =?UTF-8?q?fixed=20=E5=88=9B=E5=BB=BA=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=BC=80=E9=80=9A=E5=BB=BA=E6=9C=A8DevOps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/open_project_dev_ops_job.rb | 2 +- app/models/message_template.rb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/jobs/open_project_dev_ops_job.rb b/app/jobs/open_project_dev_ops_job.rb index 218237b8..008d19e5 100644 --- a/app/jobs/open_project_dev_ops_job.rb +++ b/app/jobs/open_project_dev_ops_job.rb @@ -6,7 +6,7 @@ class OpenProjectDevOpsJob < ApplicationJob def perform(project_id, user_id) project = Project.find_by(id: project_id) user = User.find_by(id: user_id) - url = URI("#{jianmu_devops_url}/oauth2/authorize?code=#{jianmu_devops_code(project, user)}") + url = URI.parse(URI.encode("#{jianmu_devops_url}/oauth2/authorize?code=#{jianmu_devops_code(project, user)}")) puts "jianmu_devops_url ===== #{url}" http = Net::HTTP.new(url.host, url.port) request = Net::HTTP::Get.new(url) diff --git a/app/models/message_template.rb b/app/models/message_template.rb index 399134b0..200c2f67 100644 --- a/app/models/message_template.rb +++ b/app/models/message_template.rb @@ -52,7 +52,7 @@ class MessageTemplate < ApplicationRecord email_html = File.read("#{email_template_html_dir}/project_milestone_completed.html") self.create(type: 'MessageTemplate::ProjectMilestoneCompleted', sys_notice: '在 {nickname}/{repository} 仓库,里程碑 {name} 的完成度已达到100%', notification_url: '{baseurl}/{owner}/{identifier}/milestones/{id}', email: email_html, email_title: "#{PLATFORM}: 仓库 {nickname}/{repository} 有里程碑已完成") self.create(type: 'MessageTemplate::ProjectPraised', sys_notice: '{nickname1} 点赞了你管理的仓库 {nickname2}/{repository}', notification_url: '{baseurl}/{login}') - self.create(type: 'MessageTemplate::ProjectOpenDevOps', sys_notice: '您的仓库 {repository} 已成功开通引擎服务,可通过简单的节点编排完成自动化集成与部署。欢迎体验!', notification_url: '{baseurl}/{owner}/{identifier}') + self.create(type: 'MessageTemplate::ProjectOpenDevOps', sys_notice: '您的仓库 {repository} 已成功开通引擎服务,可通过简单的节点编排完成自动化集成与部署。欢迎体验!', notification_url: '{baseurl}/{owner}/{identifier}/devops') email_html = File.read("#{email_template_html_dir}/project_pull_request.html") self.create(type: 'MessageTemplate::ProjectPullRequest', sys_notice: '{nickname1}在 {nickname2}/{repository} 提交了一个合并请求:{title}', notification_url: '{baseurl}/{owner}/{identifier}/pulls/{id}', email: email_html, email_title: "#{PLATFORM}: {nickname1} 在 {nickname2}/{repository} 提交了一个合并请求") email_html = File.read("#{email_template_html_dir}/project_role.html") From 454baf8010d06766e73d650a877d5fabffeb28eb Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 15 Dec 2022 14:25:42 +0800 Subject: [PATCH 18/25] =?UTF-8?q?fixed=20=E5=88=9B=E5=BB=BA=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=BC=80=E9=80=9A=E5=BB=BA=E6=9C=A8DevOps=20404?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/open_project_dev_ops_job.rb | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/app/jobs/open_project_dev_ops_job.rb b/app/jobs/open_project_dev_ops_job.rb index 008d19e5..8b76d96f 100644 --- a/app/jobs/open_project_dev_ops_job.rb +++ b/app/jobs/open_project_dev_ops_job.rb @@ -6,11 +6,9 @@ class OpenProjectDevOpsJob < ApplicationJob def perform(project_id, user_id) project = Project.find_by(id: project_id) user = User.find_by(id: user_id) - url = URI.parse(URI.encode("#{jianmu_devops_url}/oauth2/authorize?code=#{jianmu_devops_code(project, user)}")) - puts "jianmu_devops_url ===== #{url}" - http = Net::HTTP.new(url.host, url.port) - request = Net::HTTP::Get.new(url) - response = http.request(request) + code = jianmu_devops_code(project, user) + uri = URI.parse("#{jianmu_devops_url}/oauth2/authorize?code=#{URI.encode_www_form_component(code)}") + response = Net::HTTP.get_response(uri) puts "jianmu_devops_url ===== #{response.body}" SendTemplateMessageJob.perform_later('ProjectOpenDevOps', user_id, project_id) end From 672107412b39d6ad7b6b5fda5c81abb5d4cf6955 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 15 Dec 2022 15:06:02 +0800 Subject: [PATCH 19/25] =?UTF-8?q?fixed=20=E5=88=9B=E5=BB=BA=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=BC=80=E9=80=9A=E5=BB=BA=E6=9C=A8DevOps=20job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/projects_controller.rb | 1 - app/jobs/migrate_remote_repository_job.rb | 8 ++++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 65557381..53f6d1ae 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -84,7 +84,6 @@ class ProjectsController < ApplicationController else Projects::MigrateService.call(current_user, mirror_params) end - OpenProjectDevOpsJob.perform_later(@project&.id, current_user.id) rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) diff --git a/app/jobs/migrate_remote_repository_job.rb b/app/jobs/migrate_remote_repository_job.rb index 48814191..8420f791 100644 --- a/app/jobs/migrate_remote_repository_job.rb +++ b/app/jobs/migrate_remote_repository_job.rb @@ -12,6 +12,14 @@ class MigrateRemoteRepositoryJob < ApplicationJob if gitea_repository[0]==201 repo&.project&.update_columns(gpid: gitea_repository[2]["id"]) repo&.mirror&.succeeded! + ## open jianmu devops + project_id = repo&.project&.id + if repo&.project.present? && repo&.project.owner.is_a?(Organization) + user_id = repo&.project.members.take&.user_id + else + user_id = repo&.project.user_id + end + OpenProjectDevOpsJob.perform_later(project_id, user_id) if project_id.present? && user_id.present? puts "############ mirror status: #{repo.mirror.status} ############" else repo&.mirror&.failed! From b2310fb98b255ae68308828d03eda32a4f70220e Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 15 Dec 2022 16:33:00 +0800 Subject: [PATCH 20/25] =?UTF-8?q?fixed=20=E5=88=9B=E5=BB=BA=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=BC=80=E9=80=9A=E5=BB=BA=E6=9C=A8DevOps=20log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/migrate_remote_repository_job.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/jobs/migrate_remote_repository_job.rb b/app/jobs/migrate_remote_repository_job.rb index 8420f791..724a8160 100644 --- a/app/jobs/migrate_remote_repository_job.rb +++ b/app/jobs/migrate_remote_repository_job.rb @@ -19,6 +19,7 @@ class MigrateRemoteRepositoryJob < ApplicationJob else user_id = repo&.project.user_id end + puts "############ mirror project_id,user_id: #{project_id},#{user_id} ############" OpenProjectDevOpsJob.perform_later(project_id, user_id) if project_id.present? && user_id.present? puts "############ mirror status: #{repo.mirror.status} ############" else From 859d72f7d78cc48a8f85b76ef975b945623c8c7e Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 15 Dec 2022 16:45:28 +0800 Subject: [PATCH 21/25] =?UTF-8?q?fixed=20=E5=88=9B=E5=BB=BA=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=BC=80=E9=80=9A=E5=BB=BA=E6=9C=A8DevOps=E9=80=9A?= =?UTF-8?q?=E7=9F=A5=E4=BC=A0=E9=80=92=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/migrate_remote_repository_job.rb | 7 +------ app/services/repositories/migrate_service.rb | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/app/jobs/migrate_remote_repository_job.rb b/app/jobs/migrate_remote_repository_job.rb index 724a8160..5e56901a 100644 --- a/app/jobs/migrate_remote_repository_job.rb +++ b/app/jobs/migrate_remote_repository_job.rb @@ -1,7 +1,7 @@ class MigrateRemoteRepositoryJob < ApplicationJob queue_as :default - def perform(repo_id, token, params) + def perform(repo_id, token, user_id, params) repo = Repository.find_by(id: repo_id) return if repo.blank? @@ -14,11 +14,6 @@ class MigrateRemoteRepositoryJob < ApplicationJob repo&.mirror&.succeeded! ## open jianmu devops project_id = repo&.project&.id - if repo&.project.present? && repo&.project.owner.is_a?(Organization) - user_id = repo&.project.members.take&.user_id - else - user_id = repo&.project.user_id - end puts "############ mirror project_id,user_id: #{project_id},#{user_id} ############" OpenProjectDevOpsJob.perform_later(project_id, user_id) if project_id.present? && user_id.present? puts "############ mirror status: #{repo.mirror.status} ############" diff --git a/app/services/repositories/migrate_service.rb b/app/services/repositories/migrate_service.rb index cccfaed0..7cf1cb3e 100644 --- a/app/services/repositories/migrate_service.rb +++ b/app/services/repositories/migrate_service.rb @@ -11,7 +11,7 @@ class Repositories::MigrateService < ApplicationService @repository = Repository.new(repository_params) if @repository.save! @repository.set_mirror! - MigrateRemoteRepositoryJob.perform_later(@repository.id, user.gitea_token, gitea_repository_params) + MigrateRemoteRepositoryJob.perform_later(@repository.id, user.gitea_token, user.id, gitea_repository_params) end @repository rescue => e From aba1dad1ea4c10b2f5923cdc6617f776f3a469cf Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 15 Dec 2022 17:54:52 +0800 Subject: [PATCH 22/25] =?UTF-8?q?fixed=20=E5=88=9B=E5=BB=BA=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=BC=80=E9=80=9A=E5=BB=BA=E6=9C=A8DevOps=20log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/open_project_dev_ops_job.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/jobs/open_project_dev_ops_job.rb b/app/jobs/open_project_dev_ops_job.rb index 8b76d96f..057d173c 100644 --- a/app/jobs/open_project_dev_ops_job.rb +++ b/app/jobs/open_project_dev_ops_job.rb @@ -9,7 +9,7 @@ class OpenProjectDevOpsJob < ApplicationJob code = jianmu_devops_code(project, user) uri = URI.parse("#{jianmu_devops_url}/oauth2/authorize?code=#{URI.encode_www_form_component(code)}") response = Net::HTTP.get_response(uri) - puts "jianmu_devops_url ===== #{response.body}" + puts "jianmu_devops_url response.code ===== #{response.code}" SendTemplateMessageJob.perform_later('ProjectOpenDevOps', user_id, project_id) end From d821006cb5652c68cc3e12cae517c126c9763d16 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Fri, 16 Dec 2022 12:03:51 +0800 Subject: [PATCH 23/25] =?UTF-8?q?fixed=20=E9=82=AE=E4=BB=B6=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/user_mailer/bind_email.html.erb | 62 ++++++++++++++++++++ app/views/user_mailer/find_password.html.erb | 62 ++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 app/views/user_mailer/bind_email.html.erb create mode 100644 app/views/user_mailer/find_password.html.erb diff --git a/app/views/user_mailer/bind_email.html.erb b/app/views/user_mailer/bind_email.html.erb new file mode 100644 index 00000000..a4bfa0b7 --- /dev/null +++ b/app/views/user_mailer/bind_email.html.erb @@ -0,0 +1,62 @@ + + + + GitLink-验证码发送 + + + + + +
+
+
+ + 确实开源 + +
+
+
+

+ 您好! +

+

+ 您正在GitLink绑定邮箱,请在10分钟内输入此验证码,并进行下一步操作。 + 如非你本人操作,请忽略此邮件。 +

+
+
+

<%= @code %>

+
+ + 此邮件为系统所发,请勿直接回复。
+ 要解决问题或了解您的帐户详情,您可以访问 帮助中心。 +
+
+

+ 如果您并未发过此请求,则可能是因为其他用户误输了您的邮件地址,而使您收到了这封邮件,那么您可以放心的忽略此邮件,无需进一步采取任何操作。 +

+
+ +
+
+ + diff --git a/app/views/user_mailer/find_password.html.erb b/app/views/user_mailer/find_password.html.erb new file mode 100644 index 00000000..a64ad628 --- /dev/null +++ b/app/views/user_mailer/find_password.html.erb @@ -0,0 +1,62 @@ + + + + GitLink-验证码发送 + + + + + +
+
+
+ + 确实开源 + +
+
+
+

+ 您好! +

+

+ 您正在GitLink找回密码,请在10分钟内输入此验证码,并进行下一步操作。 + 如非你本人操作,请忽略此邮件。 +

+
+
+

<%= @code %>

+
+ + 此邮件为系统所发,请勿直接回复。
+ 要解决问题或了解您的帐户详情,您可以访问 帮助中心。 +
+
+

+ 如果您并未发过此请求,则可能是因为其他用户误输了您的邮件地址,而使您收到了这封邮件,那么您可以放心的忽略此邮件,无需进一步采取任何操作。 +

+
+ +
+
+ + From 3459054349e8997e39a58801e02e35aca9c43a02 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Thu, 22 Dec 2022 17:04:50 +0800 Subject: [PATCH 24/25] =?UTF-8?q?fixed=20=E6=8E=88=E6=9D=83=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=BB=91=E5=AE=9A=E8=B4=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/accounts_controller.rb | 6 ++++- app/controllers/bind_users_controller.rb | 25 +++---------------- app/controllers/oauth/callbacks_controller.rb | 24 +++++++++++++++++- 3 files changed, 31 insertions(+), 24 deletions(-) diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 28313f16..4a104129 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -153,6 +153,10 @@ class AccountsController < ApplicationController user.gitea_uid = gitea_user[:body]['id'] if user.save! UserExtension.create!(user_id: user.id) + # 绑定授权账号 + if ["qq", "wechat", "gitee", "github", "educoder"].include?(params[:type].to_s) && session[:unionid].present? + "OpenUsers::#{params[:type].to_s.capitalize}".constantize.create!(user: user, uid: session[:unionid]) + end successful_authentication(user) render_ok end @@ -394,7 +398,7 @@ class AccountsController < ApplicationController end def register_params - params.permit(:login, :namespace, :password, :password_confirmation, :code) + params.permit(:login, :namespace, :password, :password_confirmation, :code, :type) end def reset_password_params diff --git a/app/controllers/bind_users_controller.rb b/app/controllers/bind_users_controller.rb index 353842ef..764e1591 100644 --- a/app/controllers/bind_users_controller.rb +++ b/app/controllers/bind_users_controller.rb @@ -1,9 +1,6 @@ class BindUsersController < ApplicationController - # before_action :require_login def create - # user = CreateBindUserService.call(create_params) - # Rails.logger.debug "--------------开始绑定用户------------" Rails.logger.debug "--------------params: #{params.to_unsafe_h}" tip_exception '系统错误' if session[:unionid].blank? @@ -11,27 +8,11 @@ class BindUsersController < ApplicationController bind_user = User.try_to_login(params[:username], params[:password]) tip_exception '用户名或者密码错误' if bind_user.blank? tip_exception '用户名或者密码错误' unless bind_user.check_password?(params[:password].to_s) + tip_exception '参数错误' unless ["qq", "wechat", "gitee", "github", "educoder"].include?(params[:type].to_s) tip_exception '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s) - if params[:type] == "qq" - begin - OpenUsers::QQ.create!(user: bind_user, uid: session[:unionid]) - successful_authentication(bind_user) - - render_ok - rescue ApplicationService::Error => ex - render_error(ex.message) - end - else - begin - OpenUsers::Wechat.create!(user: bind_user, uid: session[:unionid]) - successful_authentication(bind_user) - - render_ok - rescue Exception => e - render_error(e.message) - end - end + "OpenUsers::#{params[:type].to_s.capitalize}".constantize.create!(user: bind_user, uid: session[:unionid]) + render_ok end def new_user diff --git a/app/controllers/oauth/callbacks_controller.rb b/app/controllers/oauth/callbacks_controller.rb index b97fdc02..8a06a661 100644 --- a/app/controllers/oauth/callbacks_controller.rb +++ b/app/controllers/oauth/callbacks_controller.rb @@ -1,6 +1,6 @@ class Oauth::CallbacksController < Oauth::BaseController def create - process_callback + process_callback_new rescue Exception => e Rails.logger.info "授权失败:#{e}" tip_exception("授权失败") @@ -57,6 +57,28 @@ class Oauth::CallbacksController < Oauth::BaseController redirect_to root_path(new_user: new_user) end + def process_callback_new + Rails.logger.info("[OAuth2] omniauth.auth -> #{request.env['omniauth.auth'].inspect}") + if auth_hash.blank? + redirect_to("/login") && return + end + platform = auth_hash[:provider] + uid = auth_hash[:uid] + uid = auth_hash.info.unionid if platform == "wechat" + + open_user = "OpenUsers::#{platform.to_s.capitalize}".constantize.find_by(uid: uid) + if open_user.present? && open_user.user.present? + successful_authentication(open_user.user) + else + if current_user.blank? || !current_user.logged? + session[:unionid] = uid + else + "OpenUsers::#{platform.to_s.capitalize}".constantize.create!(user: current_user, uid: uid) + end + end + redirect_to "/bindlogin/#{platform}" + end + # gitee,github nickname=login,如果系统未占用保留原用户名 def build_login_name(provider, nickname) if ["gitee", "github"].include?(provider) && User.find_by(login: nickname).blank? From 87ee19e8827b0305b6d729dcb8988d11b89abcd5 Mon Sep 17 00:00:00 2001 From: xxq250 Date: Mon, 26 Dec 2022 11:19:58 +0800 Subject: [PATCH 25/25] =?UTF-8?q?fixed=20=E6=8E=88=E6=9D=83=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=BB=91=E5=AE=9A=E8=B4=A6=E5=8F=B7=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/bind_users_controller.rb | 2 +- app/views/bind_users/create.json.jbuilder | 8 ++++++++ public/123.html | 0 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 app/views/bind_users/create.json.jbuilder delete mode 100644 public/123.html diff --git a/app/controllers/bind_users_controller.rb b/app/controllers/bind_users_controller.rb index 764e1591..f5812452 100644 --- a/app/controllers/bind_users_controller.rb +++ b/app/controllers/bind_users_controller.rb @@ -12,7 +12,7 @@ class BindUsersController < ApplicationController tip_exception '该账号已被绑定,请更换其他账号进行绑定' if bind_user.bind_open_user?(params[:type].to_s) "OpenUsers::#{params[:type].to_s.capitalize}".constantize.create!(user: bind_user, uid: session[:unionid]) - render_ok + @user = bind_user end def new_user diff --git a/app/views/bind_users/create.json.jbuilder b/app/views/bind_users/create.json.jbuilder new file mode 100644 index 00000000..0ac7dc82 --- /dev/null +++ b/app/views/bind_users/create.json.jbuilder @@ -0,0 +1,8 @@ +json.username @user.full_name +json.real_name @user.real_name +json.login @user.login +json.user_id @user.id +json.image_url url_to_avatar(@user) +json.admin @user.admin? +json.user_identity @user.identity +json.is_watch current_user&.watched?(@user) \ No newline at end of file diff --git a/public/123.html b/public/123.html deleted file mode 100644 index e69de29b..00000000