forgeplus/app/helpers/projects_helper.rb

223 lines
9.5 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

module ProjectsHelper
def menu_hash_by_name(name)
{
menu_name: name
}
end
def render_zh_project_type(project_type)
case project_type
when 'common' then "开源托管项目"
when 'sync_mirror' then "镜像托管项目"
when 'mirror' then "开源镜像项目"
end
end
def render_zip_url(owner, repository, archive)
[base_url, archive_repositories_path(owner&.login, repository, "#{archive}.zip")].join
end
def render_tar_url(owner, repository, archive)
[base_url, archive_repositories_path(owner&.login, repository, "#{archive}.tar.gz")].join
end
def render_download_file_url(owner, repository, filepath, ref)
[base_url, "/api/#{owner&.login}/#{repository.identifier}/raw/#{CGI.escape(filepath)}?ref=#{CGI.escape(ref)}"].join
end
def render_http_url(project)
[gitea_domain, project.owner.login, "#{project.identifier}.git"].join('/')
end
def gitea_domain
GiteaService.gitea_config[:domain]
end
def find_user_by_login_or_mail(identifier)
(User.find_by_login identifier) || (User.find_by_mail identifier)
end
def json_response(project, user)
repo = Repository.includes(:mirror).select(:id, :is_mirror, :mirror_url, :source_clone_url).find_by(project: project)
tmp_json = {}
unless project.common?
tmp_json = tmp_json.merge({
is_mirror: repo.is_mirror ? true : false,
mirror_status: repo.mirror_status,
mirror_num: repo.mirror_num,
mirror_url: repo.remote_mirror_url,
first_sync: repo.first_sync?
})
end
tmp_json = tmp_json.merge({
identifier: render_identifier(project),
name: project.name,
platform: project.platform,
id: project.id,
repo_id: repo.id,
open_devops: (user.blank? || user.is_a?(AnonymousUser)) ? false : project.open_devops?,
type: project.numerical_for_project_type,
author: render_owner(project),
project_category_id: project.project_category_id,
project_language_id: project.project_language_id,
license_id: project.license_id,
jianmu_devops: jianmu_devops_code(project, user),
jianmu_devops_url: jianmu_devops_url,
cloud_ide_saas_url: cloud_ide_saas_url(user),
open_blockchain: Site.has_blockchain? && project.use_blockchain,
ignore_id: project.ignore_id
}).compact
render json: tmp_json
end
def render_owner(project)
if project.educoder?
{
login: project.project_educoder.owner,
name: project.project_educoder.owner,
type: 'Educoder',
image_url: project.project_educoder.image_url
}
else
{
login: @owner.login,
name: @owner.real_name,
type: @owner.type,
image_url: url_to_avatar(@owner)
}
end
end
def render_identifier(project)
project.educoder? ? project.project_educoder&.repo_name&.split('/')[1] : project.identifier
end
def render_author(project)
project.educoder? ? project.project_educoder&.repo_name&.split('/')[0] : project.owner.login
end
def render_educoder_avatar_url(project_educoder)
[Rails.application.config_for(:configuration)['educoder']['cdn_url'], project_educoder&.image_url].join('/')
end
# 静默登录方式:
#
# 数据格式为JSON
# {
# "userId": "xxx", // 用户唯一标识
# "ref": "xxx", // 仓库唯一标识
# "owner": "xxx", // 用户登录名或组织账号
# "timestamp": xxx // 当前时间戳,单位:毫秒
# }
# 加密方式把数据序列化成JSON字符串用Client Secret和固定IV5183666c72eec9e4对称加密模式AES-256-CBC
#
# API
# GEThttps://ci-v3.test.jianmuhub.com/oauth2/authorize?code=${encode(密文)}
def jianmu_devops_code(project, user)
if user.admin? || project.member?(user.id)
data = { userId: user.id, ref: project.identifier, owner: project.owner.login, timestamp: Time.now.to_i * 1000 }
# uid = EduSetting.get("jianmu_oauth2_uid") || 'oedKx4v-WyAfu2oy_AsFpFQCH_-g91ms0PQKN7YcEuw'
# app = Doorkeeper::Application.find_by(uid: uid)
key = 'bf3c199c2470cb477d907b1e0917c17b'
aes_encrypt(key, data.to_json)
end
end
def jianmu_devops_url
EduSetting.get("jianmu_devops_url") || "https://ci-v3.test.jianmuhub.com"
end
def cloud_ide_saas_url(user)
"" unless user.logged?
token = Token.get_token_from_user(user, "autologin")
oauth_url = "#{Rails.application.config_for(:configuration)['platform_url']}/api/users/info.json"
saas_url = EduSetting.get("cloud_ide_saas_url") || "https://saasfactory.test.opentrs.com"
"#{saas_url}/oauth/login?product_account_id=PA1001218&tenant_code=TI1001383&oauth_url=#{oauth_url}&token=#{token.value}"
end
def ai_shang_v1_url(project)
url = EduSetting.get("ai_shang_url") || "https://shang.gitlink.org.cn"
case project.identifier.to_s.downcase
when nil then ""
when 'rails' then "#{url}/v1/rails/entropy"
when 'jittor' then "#{url}/v1/jittor/entropy"
when 'paddle' then "#{url}/v1/Paddle/entropy"
when 'vue' then "#{url}/v1/vue/entropy"
when 'bootstrap' then "#{url}/v1/bootstrap/entropy"
when 'tensorflow' then "#{url}/v1/tensorflow/entropy"
when 'kernel' then "#{url}/v1/openeuler/entropy"
when 'opengauss-server' then "#{url}/v1/opengauss/entropy"
when 'mindspore' then "#{url}/v1/mindspore/entropy"
else ''
end
end
def ai_shang_v2_url(project)
url = EduSetting.get("ai_shang_url") || "https://shang.gitlink.org.cn"
case project.identifier.to_s.downcase
when nil then ""
when 'rails' then "#{url}/v2/getMediumData?repo_login=rails&repo_name=rails"
when 'jittor' then "#{url}/v2/getMediumData?repo_login=Jittor&repo_name=jittor"
when 'paddle' then "#{url}/v2/getMediumData?repo_login=PaddlePaddle&repo_name=Paddle"
when 'vue' then "#{url}/v2/getMediumData?repo_login=vuejs&repo_name=vue"
when 'bootstrap' then "#{url}/v2/getMediumData?repo_login=twbs&repo_name=bootstrap"
when 'tensorflow' then "#{url}/v2/getMediumData?repo_login=tensorflow&repo_name=tensorflow"
when 'kernel' then "#{url}/v2/getMediumData?repo_login=openeuler&repo_name=kernel"
when 'opengauss-server' then "#{url}/v2/getMediumData?repo_login=opengauss&repo_name=openGauss-server"
when 'mindspore' then "#{url}/v2/getMediumData?repo_login=mindspore&repo_name=mindspore"
else ''
end
end
def ai_shang_v4_url(project)
url = EduSetting.get("ai_shang_url") || "https://shang.gitlink.org.cn"
case project.identifier.to_s.downcase
when nil then ""
when 'rails' then "#{url}/v2/getIndexData?repo_login=rails&repo_name=rails"
when 'jittor' then "#{url}/v2/getIndexData?repo_login=Jittor&repo_name=jittor"
when 'paddle' then "#{url}/v2/getIndexData?repo_login=PaddlePaddle&repo_name=Paddle"
when 'vue' then "#{url}/v2/getIndexData?repo_login=vuejs&repo_name=vue"
when 'bootstrap' then "#{url}/v2/getIndexData?repo_login=twbs&repo_name=bootstrap"
when 'tensorflow' then "#{url}/v2/getIndexData?repo_login=tensorflow&repo_name=tensorflow"
when 'kernel' then "#{url}/v2/getIndexData?repo_login=openeuler&repo_name=kernel"
when 'opengauss-server' then "#{url}/v2/getIndexData?repo_login=opengauss&repo_name=openGauss-server"
when 'mindspore' then "#{url}/v2/getIndexData?repo_login=mindspore&repo_name=mindspore"
else ''
end
end
def ai_shang_v3_url(project)
url = EduSetting.get("ai_shang_v3_url") || "https://shang.gitlink.org.cn/v3"
case project.identifier.to_s.downcase
when nil then ""
when 'rails' then "#{url}/rails/entropy"
when 'jittor' then "#{url}/jittor/entropy"
when 'paddle' then "#{url}/paddle/entropy"
when 'vue' then "#{url}/vue/entropy"
when 'bootstrap' then "#{url}/bootstrap/entropy"
when 'tensorflow' then "#{url}/tensorflow/entropy"
when 'kernel' then "#{url}/openeuler/entropy"
when 'opengauss-server' then "#{url}/opengauss/entropy"
when 'mindspore' then "#{url}/mindspore/entropy"
else ''
end
end
def aes_encrypt(key, des_text)
# des_text='{"access_key_id":"STS.NTuC9RVmWfJqj3JkcMzPnDf7X","access_key_secret":"E8NxRZWGNxxMfwgt5nFLnBFgg6AzgXCZkSNCyqygLuHM","end_point":"oss-accelerate.aliyuncs.com","security_token":"CAIS8gF1q6Ft5B2yfSjIr5fACIPmu7J20YiaaBX7j2MYdt9Cq6Ocujz2IHhMenVhA+8Wv/02n2hR7PcYlq9IS55VWEqc/VXLaywQo22beIPkl5Gfz95t0e+IewW6Dxr8w7WhAYHQR8/cffGAck3NkjQJr5LxaTSlWS7OU/TL8+kFCO4aRQ6ldzFLKc5LLw950q8gOGDWKOymP2yB4AOSLjIx6lAt2T8vs/7hmZPFukSFtjCglL9J/baWC4O/csxhMK14V9qIx+FsfsLDqnUIs0YWpf0p3P0doGyf54vMWUM05A6dduPS7txkLAJwerjVl1/ADxc0/hqAASXhPeiktbmDjwvnSn4iKcSGQ+xoQB468eHXNdvf13dUlbbE1+JhRi0pZIB2UCtN9oTsLHcwIHt+EJaoMd3+hGwPVmvHSXzECDFHylZ8l/pzTwlE/aCtZyVmI5cZEvmWu2xBa3GRbULo7lLvyeX1cHTVmVWf4Nk6D09PzTU8qlAj","bucket":"edu-bigfiles1","region":"oss-cn-hangzhou","callback_url":"https://data.educoder.net/api/buckets/callback.json","bucket_host":"data.educoder.net"}'
# des = OpenSSL::Cipher::Cipher.new('aes-256-ctr')
des = OpenSSL::Cipher.new('AES-256-CBC')
des.encrypt
# des.padding =
des.key = key
des.iv = "5183666c72eec9e4"
result = des.update(des_text)
result << des.final
Base64.strict_encode64 result
end
end