diff --git a/app/helpers/repositories_helper.rb b/app/helpers/repositories_helper.rb index b8bfc31cd..9fd45249c 100644 --- a/app/helpers/repositories_helper.rb +++ b/app/helpers/repositories_helper.rb @@ -87,6 +87,42 @@ module RepositoriesHelper end end + # author hui.he + def new_readme_render_decode64_content(str, owner, repo, ref) + path = [owner&.login, repo&.identifier, 'tree', ref].join("/") + 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:') + # 路径替换 + if s_content.starts_with?('./') || s_content.starts_with?("../") || s_content.starts_with?("/") + s_content = File.expand_path(s_content, path) + s_content = s_content.split("#{Rails.root}/")[1] + content = content.gsub(s[0], "/#{s_content}") + else + # 图片资源替换 + s_content = [base_url, "/api/#{owner&.login}/#{repo.identifier}/raw?filepath=#{s_content}&ref=#{ref}"].join + 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") @@ -102,7 +138,8 @@ module RepositoriesHelper 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) + # readme_render_decode64_content(content, owner, repo, ref) + new_readme_render_decode64_content(content, owner, repo, ref) else file_type = File.extname(entry['name'].to_s)[1..-1] if image_type?(file_type)