FIX merge dev_trustie branch
This commit is contained in:
commit
2ac2920399
|
@ -245,7 +245,7 @@ class AccountsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_autologin_cookie(user)
|
def set_autologin_cookie(user)
|
||||||
token = Token.get_or_create_permanent_login_token(user, "autologin")
|
token = Token.get_or_create_permanent_login_token(user, autologin_cookie_name)
|
||||||
cookie_options = {
|
cookie_options = {
|
||||||
:value => token.value,
|
:value => token.value,
|
||||||
:expires => 1.month.from_now,
|
:expires => 1.month.from_now,
|
||||||
|
|
|
@ -373,7 +373,7 @@ class ApplicationController < ActionController::Base
|
||||||
# auto-login feature starts a new session
|
# auto-login feature starts a new session
|
||||||
user = nil
|
user = nil
|
||||||
Rails.logger.info("111111111111111111#{default_yun_session}, session is #{session[:"#{default_yun_session}"]} ")
|
Rails.logger.info("111111111111111111#{default_yun_session}, session is #{session[:"#{default_yun_session}"]} ")
|
||||||
user = User.try_to_autologin(cookies[autologin_cookie_name])
|
user = User.try_to_autologin(cookies[autologin_cookie_name], autologin_cookie_name)
|
||||||
# start_user_session(user) if user # TODO 解决sso退出不同步的问题
|
# start_user_session(user) if user # TODO 解决sso退出不同步的问题
|
||||||
user
|
user
|
||||||
end
|
end
|
||||||
|
|
|
@ -33,6 +33,7 @@ class AttachmentsController < ApplicationController
|
||||||
# 2. 上传到云
|
# 2. 上传到云
|
||||||
begin
|
begin
|
||||||
upload_file = params["file"] || params["#{params[:file_param_name]}"]# 这里的file_param_name是为了方便其他插件名称
|
upload_file = params["file"] || params["#{params[:file_param_name]}"]# 这里的file_param_name是为了方便其他插件名称
|
||||||
|
dun_check_file = upload_file.dup
|
||||||
uid_logger("#########################file_params####{params["#{params[:file_param_name]}"]}")
|
uid_logger("#########################file_params####{params["#{params[:file_param_name]}"]}")
|
||||||
raise "未上传文件" unless upload_file
|
raise "未上传文件" unless upload_file
|
||||||
|
|
||||||
|
@ -71,7 +72,15 @@ class AttachmentsController < ApplicationController
|
||||||
@attachment.author_id = current_user.id
|
@attachment.author_id = current_user.id
|
||||||
@attachment.disk_directory = month_folder
|
@attachment.disk_directory = month_folder
|
||||||
@attachment.cloud_url = remote_path
|
@attachment.cloud_url = remote_path
|
||||||
@attachment.save!
|
# @attachment.save!
|
||||||
|
if @attachment.save!
|
||||||
|
check_result = Attachment.check_image_able(dun_check_file)
|
||||||
|
if check_result[:status].to_i == -1
|
||||||
|
@attachment.destroy
|
||||||
|
raise "上传失败,#{check_result[:message]}"
|
||||||
|
# return render json: {status: -1, message: "上传失败,#{check_result[:message]}" }
|
||||||
|
end
|
||||||
|
end
|
||||||
else
|
else
|
||||||
logger.info "文件已存在,id = #{@attachment.id}, filename = #{@attachment.filename}"
|
logger.info "文件已存在,id = #{@attachment.id}, filename = #{@attachment.filename}"
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,12 +6,12 @@ module LoginHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def autologin_cookie_name
|
def autologin_cookie_name
|
||||||
edu_setting('autologin_cookie_name').presence || 'autologin'
|
edu_setting('autologin_cookie_name').presence || 'autologin_forge_military'
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_autologin_cookie(user)
|
def set_autologin_cookie(user)
|
||||||
token = Token.get_or_create_permanent_login_token(user, "autologin")
|
Rails.logger.info("set_cookie_user_id is=======> #{user.id}")
|
||||||
Rails.logger.info "###### def set_autologin_cookie and get_or_create_permanent_login_token result: #{token&.value}"
|
token = Token.get_or_create_permanent_login_token(user, autologin_cookie_name)
|
||||||
cookie_options = {
|
cookie_options = {
|
||||||
:value => token.value,
|
:value => token.value,
|
||||||
:expires => 1.month.from_now,
|
:expires => 1.month.from_now,
|
||||||
|
|
|
@ -140,7 +140,7 @@ class IssuesController < ApplicationController
|
||||||
# normal_status(0, "创建成功",)
|
# normal_status(0, "创建成功",)
|
||||||
render :json => { status: 0, message: "创建成功", id: @issue.id}
|
render :json => { status: 0, message: "创建成功", id: @issue.id}
|
||||||
else
|
else
|
||||||
normal_status(-1, "创建失败")
|
normal_status(-1, @issue.errors.messages.values[0][0])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -202,7 +202,7 @@ class IssuesController < ApplicationController
|
||||||
@issue.create_journal_detail(change_files, issue_files, issue_file_ids, current_user&.id)
|
@issue.create_journal_detail(change_files, issue_files, issue_file_ids, current_user&.id)
|
||||||
normal_status(0, "更新成功")
|
normal_status(0, "更新成功")
|
||||||
else
|
else
|
||||||
normal_status(-1, "更新失败")
|
normal_status(-1, @issue.errors.messages.values[0][0])
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -46,7 +46,7 @@ class JournalsController < ApplicationController
|
||||||
render :json => { status: 0, message: "评论成功", id: journal.id}
|
render :json => { status: 0, message: "评论成功", id: journal.id}
|
||||||
# normal_status(0, "评论成功")
|
# normal_status(0, "评论成功")
|
||||||
else
|
else
|
||||||
normal_status(-1, "评论失败")
|
normal_status(-1, journal.errors.messages.values[0][0])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -70,7 +70,7 @@ class JournalsController < ApplicationController
|
||||||
if @journal.update_attribute(:notes, content)
|
if @journal.update_attribute(:notes, content)
|
||||||
normal_status(0, "更新成功")
|
normal_status(0, "更新成功")
|
||||||
else
|
else
|
||||||
normal_status(-1, "更新失败")
|
normal_status(-1, @journal.errors.messages.values[0][0])
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
normal_status(-1, "评论的内容不能为空")
|
normal_status(-1, "评论的内容不能为空")
|
||||||
|
|
|
@ -96,8 +96,10 @@ class PullRequestsController < ApplicationController
|
||||||
normal_status(-1, "PullRequest创建失败")
|
normal_status(-1, "PullRequest创建失败")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
normal_status(-1, "PullRequest创建失败")
|
normal_status(-1, local_requests.errors.messages.values[0][0])
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
normal_status(-1, pull_issue.errors.messages.values[0][0])
|
||||||
end
|
end
|
||||||
rescue => e
|
rescue => e
|
||||||
normal_status(-1, e.message)
|
normal_status(-1, e.message)
|
||||||
|
@ -147,8 +149,10 @@ class PullRequestsController < ApplicationController
|
||||||
normal_status(-1, "PullRequest更新失败")
|
normal_status(-1, "PullRequest更新失败")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
normal_status(-1, "PullRequest更新失败")
|
normal_status(-1, @pull_request.errors.messages.values[0][0])
|
||||||
end
|
end
|
||||||
|
else
|
||||||
|
normal_status(-1, @issue.errors.messages.values[0][0])
|
||||||
end
|
end
|
||||||
rescue => e
|
rescue => e
|
||||||
normal_status(-1, e.message)
|
normal_status(-1, e.message)
|
||||||
|
|
|
@ -12,11 +12,11 @@ class SyncForgeController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# def create
|
# def create
|
||||||
# ActiveRecord::Base.transaction do
|
# ActiveRecord::Base.transaction do
|
||||||
# params.permit!
|
# params.permit!
|
||||||
# sync_params = params[:sync_params]
|
# sync_params = params[:sync_params]
|
||||||
# project_user = User.where(login: sync_params[:owner_login])&.first
|
# project_user = User.where(login: sync_params[:owner_login])&.first
|
||||||
# #以前已同步的项目,那么肯定存在仓库
|
# #以前已同步的项目,那么肯定存在仓库
|
||||||
# SyncLog.sync_log("=================begin_to_sync_forge: project_identifier: #{sync_params[:identifier]}========")
|
# SyncLog.sync_log("=================begin_to_sync_forge: project_identifier: #{sync_params[:identifier]}========")
|
||||||
# user_projects = Project.where(user_id: project_user.id)
|
# user_projects = Project.where(user_id: project_user.id)
|
||||||
|
@ -38,7 +38,7 @@ class SyncForgeController < ApplicationController
|
||||||
# check_sync_project(project, sync_params)
|
# check_sync_project(project, sync_params)
|
||||||
# else #新建项目
|
# else #新建项目
|
||||||
# SyncLog.sync_log("=================begin_to_create_new_project========")
|
# SyncLog.sync_log("=================begin_to_create_new_project========")
|
||||||
|
|
||||||
# project_params = {
|
# project_params = {
|
||||||
# repository_name: sync_params[:identifier],
|
# repository_name: sync_params[:identifier],
|
||||||
# user_id: project_user.id,
|
# user_id: project_user.id,
|
||||||
|
@ -53,7 +53,7 @@ class SyncForgeController < ApplicationController
|
||||||
# new_project_score = ProjectScore.create(score_params)
|
# new_project_score = ProjectScore.create(score_params)
|
||||||
# SyncLog.sync_log("=================new_project_score:#{new_project_score.try(:id)}========")
|
# SyncLog.sync_log("=================new_project_score:#{new_project_score.try(:id)}========")
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# SyncRepositoryJob.perform_later(sync_params[:owner_login], sync_params[:identifier], sync_params[:repository], get_sudomain) if sync_params[:repository].present?
|
# SyncRepositoryJob.perform_later(sync_params[:owner_login], sync_params[:identifier], sync_params[:repository], get_sudomain) if sync_params[:repository].present?
|
||||||
# check_new_project(project, sync_params)
|
# check_new_project(project, sync_params)
|
||||||
# else
|
# else
|
||||||
|
@ -115,7 +115,7 @@ class SyncForgeController < ApplicationController
|
||||||
# SyncLog.sync_log("=================sync_user_failed====#{e}")
|
# SyncLog.sync_log("=================sync_user_failed====#{e}")
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# private
|
# private
|
||||||
|
|
||||||
# def check_sync_project(project,sync_params)
|
# def check_sync_project(project,sync_params)
|
||||||
# begin
|
# begin
|
||||||
|
@ -125,8 +125,8 @@ class SyncForgeController < ApplicationController
|
||||||
# # end
|
# # end
|
||||||
|
|
||||||
# SyncLog.sync_log("----begin_to_check_sync_project----project_id:#{project.id}---------------")
|
# SyncLog.sync_log("----begin_to_check_sync_project----project_id:#{project.id}---------------")
|
||||||
# change_project_score(project, sync_params[:project_score], sync_params[:repository]) if sync_params[:repository].present? #更新project_score
|
# change_project_score(project, sync_params[:project_score], sync_params[:repository]) if sync_params[:repository].present? #更新project_score
|
||||||
# change_project_issues(project, sync_params[:issues],project.id, gitea_main)
|
# change_project_issues(project, sync_params[:issues],project.id, gitea_main)
|
||||||
# change_project_members(project, sync_params[:members],gitea_main)
|
# change_project_members(project, sync_params[:members],gitea_main)
|
||||||
# change_project_versions(project, sync_params[:project_versions],gitea_main)
|
# change_project_versions(project, sync_params[:project_versions],gitea_main)
|
||||||
# change_project_watchers(project, sync_params[:project_watchers],gitea_main)
|
# change_project_watchers(project, sync_params[:project_watchers],gitea_main)
|
||||||
|
@ -134,7 +134,7 @@ class SyncForgeController < ApplicationController
|
||||||
# rescue => e
|
# rescue => e
|
||||||
# SyncLog.sync_log("=========check_sync_project_errors:#{e}===================")
|
# SyncLog.sync_log("=========check_sync_project_errors:#{e}===================")
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# def check_new_project(project,sync_params)
|
# def check_new_project(project,sync_params)
|
||||||
|
@ -167,7 +167,7 @@ class SyncForgeController < ApplicationController
|
||||||
# parent_id: project.id
|
# parent_id: project.id
|
||||||
# }
|
# }
|
||||||
# SyncProjectsJob.perform_later(sync_projects_params,gitea_main)
|
# SyncProjectsJob.perform_later(sync_projects_params,gitea_main)
|
||||||
|
|
||||||
# SyncLog.sync_log("***6. end_to_sync_parises---------------")
|
# SyncLog.sync_log("***6. end_to_sync_parises---------------")
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
|
@ -189,7 +189,7 @@ class SyncForgeController < ApplicationController
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
# pre_project_score.save! if change_num > 0 #如果 project_score有变化则更新
|
# pre_project_score.save! if change_num > 0 #如果 project_score有变化则更新
|
||||||
# else
|
# else
|
||||||
# ProjectScore.create!(project_scores.merge(project_id: project.id))
|
# ProjectScore.create!(project_scores.merge(project_id: project.id))
|
||||||
# end
|
# end
|
||||||
# SyncLog.sync_log("***1. end_to_sync_project_score---------------")
|
# SyncLog.sync_log("***1. end_to_sync_project_score---------------")
|
||||||
|
@ -206,7 +206,7 @@ class SyncForgeController < ApplicationController
|
||||||
# SyncLog.sync_log("***2--01. forge_issue_ids-#{forge_issue_ids.size.to_i}--------------")
|
# SyncLog.sync_log("***2--01. forge_issue_ids-#{forge_issue_ids.size.to_i}--------------")
|
||||||
# if forge_issue_ids.size.to_i <= old_issues_params[:count].to_i
|
# if forge_issue_ids.size.to_i <= old_issues_params[:count].to_i
|
||||||
# diff_issue_ids = old_issues_params[:ids] - forge_issue_ids
|
# diff_issue_ids = old_issues_params[:ids] - forge_issue_ids
|
||||||
|
|
||||||
# if diff_issue_ids.size == 0 #issue数量一样,判断评论是否有增减
|
# if diff_issue_ids.size == 0 #issue数量一样,判断评论是否有增减
|
||||||
# forge_journal_ids = Journal.select([:id, :journalized_id, :journalized_type]).where(journalized_id: forge_issue_ids).pluck(:id)
|
# forge_journal_ids = Journal.select([:id, :journalized_id, :journalized_type]).where(journalized_id: forge_issue_ids).pluck(:id)
|
||||||
# diff_journal_ids = old_issues_params[:journals][:ids] - forge_journal_ids
|
# diff_journal_ids = old_issues_params[:journals][:ids] - forge_journal_ids
|
||||||
|
@ -241,10 +241,10 @@ class SyncForgeController < ApplicationController
|
||||||
# # }
|
# # }
|
||||||
# # SyncLog.sync_log("***2--03. sync_projects_params_groups-#{sync_projects_params}--------------")
|
# # SyncLog.sync_log("***2--03. sync_projects_params_groups-#{sync_projects_params}--------------")
|
||||||
# # SyncProjectsJob.perform_later(sync_projects_params, gitea_main)
|
# # SyncProjectsJob.perform_later(sync_projects_params, gitea_main)
|
||||||
|
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# # SyncProjectsJob.perform_later(sync_projects_params, gitea_main) if sync_projects_params.present?
|
# # SyncProjectsJob.perform_later(sync_projects_params, gitea_main) if sync_projects_params.present?
|
||||||
# SyncLog.sync_log("***2. end_to_syncissues---------------")
|
# SyncLog.sync_log("***2. end_to_syncissues---------------")
|
||||||
# rescue Exception => e
|
# rescue Exception => e
|
||||||
|
@ -265,7 +265,7 @@ class SyncForgeController < ApplicationController
|
||||||
# parent_id: project.id
|
# parent_id: project.id
|
||||||
# }
|
# }
|
||||||
# SyncProjectsJob.perform_later(sync_projects_params,gitea_main)
|
# SyncProjectsJob.perform_later(sync_projects_params,gitea_main)
|
||||||
|
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
# SyncLog.sync_log("***5. begin_to_sync_watchers---------------")
|
# SyncLog.sync_log("***5. begin_to_sync_watchers---------------")
|
||||||
|
@ -285,7 +285,7 @@ class SyncForgeController < ApplicationController
|
||||||
# }
|
# }
|
||||||
# SyncProjectsJob.perform_later(sync_projects_params,gitea_main)
|
# SyncProjectsJob.perform_later(sync_projects_params,gitea_main)
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# SyncLog.sync_log("***4. end_to_sync_versions---------------")
|
# SyncLog.sync_log("***4. end_to_sync_versions---------------")
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
|
@ -304,12 +304,13 @@ class SyncForgeController < ApplicationController
|
||||||
# }
|
# }
|
||||||
# SyncProjectsJob.perform_later(sync_projects_params,gitea_main)
|
# SyncProjectsJob.perform_later(sync_projects_params,gitea_main)
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# SyncLog.sync_log("***3. end_to_sync_members---------------")
|
# SyncLog.sync_log("***3. end_to_sync_members---------------")
|
||||||
|
<<<<<<< HEAD
|
||||||
# end
|
# end
|
||||||
# end
|
# end
|
||||||
|
|
||||||
# def check_token
|
# def check_token
|
||||||
# sync_params = params[:sync_params]
|
# sync_params = params[:sync_params]
|
||||||
# unless sync_params[:token] && sync_params[:token] == get_token
|
# unless sync_params[:token] && sync_params[:token] == get_token
|
||||||
# render json: {message: "token_errors"}
|
# render json: {message: "token_errors"}
|
||||||
|
@ -320,6 +321,22 @@ class SyncForgeController < ApplicationController
|
||||||
# "34c82f51e0b699d9d16d70fd6497c9b1e4821d6ea3e872558a6537a091076b8e"
|
# "34c82f51e0b699d9d16d70fd6497c9b1e4821d6ea3e872558a6537a091076b8e"
|
||||||
# end
|
# end
|
||||||
|
|
||||||
|
=======
|
||||||
|
# end
|
||||||
|
# end
|
||||||
|
|
||||||
|
# # def check_token
|
||||||
|
# # sync_params = params[:sync_params]
|
||||||
|
# # unless sync_params[:token] && sync_params[:token] == get_token
|
||||||
|
# # render json: {message: "token_errors"}
|
||||||
|
# # end
|
||||||
|
# # end
|
||||||
|
|
||||||
|
# def get_token
|
||||||
|
# "34c82f51e0b699d9d16d70fd6497c9b1e4821d6ea3e872558a6537a091076b8e"
|
||||||
|
# end
|
||||||
|
|
||||||
|
>>>>>>> e0bedf175fa89ad61d0759c620f4050758307288
|
||||||
# def get_sudomain
|
# def get_sudomain
|
||||||
# SyncLog.sync_log("=================request.subdomain:#{request.subdomain}========")
|
# SyncLog.sync_log("=================request.subdomain:#{request.subdomain}========")
|
||||||
# gitea_main = "gitea.trustie.net"
|
# gitea_main = "gitea.trustie.net"
|
||||||
|
@ -331,4 +348,4 @@ class SyncForgeController < ApplicationController
|
||||||
# return gitea_main
|
# return gitea_main
|
||||||
# end
|
# end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -140,8 +140,7 @@ class UsersController < ApplicationController
|
||||||
# 其他平台登录后,必须将token同步到forge平台,实现sso登录功能
|
# 其他平台登录后,必须将token同步到forge平台,实现sso登录功能
|
||||||
def sync_token
|
def sync_token
|
||||||
return render_error('未找相关用户!') unless @user
|
return render_error('未找相关用户!') unless @user
|
||||||
|
token = Token.get_or_create_permanent_login_token(@user, autologin_cookie_name)
|
||||||
token = Token.get_or_create_permanent_login_token(@user, 'autologin')
|
|
||||||
token.update_column(:value, params[:token])
|
token.update_column(:value, params[:token])
|
||||||
render_ok
|
render_ok
|
||||||
end
|
end
|
||||||
|
|
|
@ -83,7 +83,7 @@ class VersionsController < ApplicationController
|
||||||
if version.save
|
if version.save
|
||||||
normal_status(0, "里程碑创建成功")
|
normal_status(0, "里程碑创建成功")
|
||||||
else
|
else
|
||||||
normal_status(-1, "里程碑创建失败")
|
normal_status(-1, version.errors.messages.values[0][0])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -121,7 +121,7 @@ class VersionsController < ApplicationController
|
||||||
if @version.update_attributes(tag_params)
|
if @version.update_attributes(tag_params)
|
||||||
normal_status(0, "里程碑更新成功")
|
normal_status(0, "里程碑更新成功")
|
||||||
else
|
else
|
||||||
normal_status(-1, "里程碑更新失败")
|
normal_status(-1, version.errors.messages.values[0][0])
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,13 +1,24 @@
|
||||||
class Contents::CreateForm < BaseForm
|
class Contents::CreateForm < BaseForm
|
||||||
attr_accessor :filepath, :branch, :new_branch
|
attr_accessor :filepath, :branch, :new_branch, :content
|
||||||
|
|
||||||
validates :filepath, presence: true
|
validates :filepath, presence: true
|
||||||
|
|
||||||
validate :check_branch
|
validate :check_branch
|
||||||
|
|
||||||
|
validate :dun_content_check
|
||||||
|
|
||||||
def check_branch
|
def check_branch
|
||||||
raise "branch和new_branch必须存在一个 " if branch.blank? && new_branch.blank?
|
raise "branch和new_branch必须存在一个 " if branch.blank? && new_branch.blank?
|
||||||
# raise "branch和new_branch只能存在一个" if !branch.blank? && !new_branch.blank?
|
# raise "branch和new_branch只能存在一个" if !branch.blank? && !new_branch.blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def dun_content_check
|
||||||
|
if content.present?
|
||||||
|
check_result = DunCheck::TextCheck.new({title: "", content: content}).call
|
||||||
|
if check_result[:status].to_i == -1
|
||||||
|
raise "内容含有:#{check_result[:extra_params][:infos]},请修改"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -149,7 +149,7 @@ module ApplicationHelper
|
||||||
File.join("images/avatars", ["#{source.class}", "#{source.id}"]) + "?t=#{ctime}"
|
File.join("images/avatars", ["#{source.class}", "#{source.id}"]) + "?t=#{ctime}"
|
||||||
end
|
end
|
||||||
elsif source.class.to_s == 'User'
|
elsif source.class.to_s == 'User'
|
||||||
str = source.user_extension.try(:gender).to_i == 0 ? "b" : "g"
|
str = source.user_extension.try(:gender).to_i == 0 ? "boy.jpg" : "girl.jpg"
|
||||||
File.join(relative_path, "#{source.class}", str)
|
File.join(relative_path, "#{source.class}", str)
|
||||||
elsif source.class.to_s == 'Subject'
|
elsif source.class.to_s == 'Subject'
|
||||||
File.join("images","educoder", "index", "subject", "subject#{rand(17)}.jpg")
|
File.join("images","educoder", "index", "subject", "subject#{rand(17)}.jpg")
|
||||||
|
|
|
@ -47,7 +47,8 @@ module Gitea
|
||||||
{
|
{
|
||||||
filepath: @params[:filepath],
|
filepath: @params[:filepath],
|
||||||
branch: @params[:branch],
|
branch: @params[:branch],
|
||||||
new_branch: @params[:new_branch]
|
new_branch: @params[:new_branch],
|
||||||
|
content: @params[:content]
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
class SyncForgeProjectJob < ApplicationJob
|
||||||
|
queue_as :default
|
||||||
|
|
||||||
|
def perform(sync_parmas)
|
||||||
|
# sync_parmas.permit!
|
||||||
|
Rails.logger.info("=======begin to sync forge projects, and sync_parmas: #{sync_parmas}")
|
||||||
|
get_rand_user = rand_user
|
||||||
|
project_params = sync_parmas[:project]
|
||||||
|
repository_params = sync_parmas[:repository]
|
||||||
|
project_socre_params = sync_parmas[:project_socre]
|
||||||
|
begin
|
||||||
|
unless Project.select(:identifier).exists?(identifier: project_params[:identifier])
|
||||||
|
project_params = project_params.merge({user_id: get_rand_user.id })
|
||||||
|
project = Project.new(project_params)
|
||||||
|
if project.save
|
||||||
|
repository_params = {
|
||||||
|
hidden: false,
|
||||||
|
identifier: repository_params[:identifier],
|
||||||
|
mirror_url: repository_params[:url].to_s.gsub("https://gitea.", "https://git."),
|
||||||
|
user_id: get_rand_user.id,
|
||||||
|
login: get_rand_user.login,
|
||||||
|
password: "",
|
||||||
|
is_mirror: false
|
||||||
|
}
|
||||||
|
Repositories::MigrateService.new(get_rand_user, project, repository_params).call
|
||||||
|
project_score = ProjectScore.new(project_socre_params.merge({project_id: project.id}))
|
||||||
|
project_score.save
|
||||||
|
end
|
||||||
|
end
|
||||||
|
Rails.logger.info("=======end to sync forge projects")
|
||||||
|
rescue => e
|
||||||
|
Rails.logger.info("=======sync forge projects has errors: #{e}")
|
||||||
|
raise ActiveRecord::Rollback
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def rand_user
|
||||||
|
user_ids = User.select(:id, :type, :gitea_token, :gitea_uid).where("gitea_token is not null and gitea_uid is not null and type = ?", "User").pluck(:id)
|
||||||
|
range_user_id = user_ids[rand(user_ids.length-1)]
|
||||||
|
rand_sync_user = User.find_by_id(range_user_id) #生成随机用户
|
||||||
|
unless rand_sync_user.present?
|
||||||
|
rand_user
|
||||||
|
end
|
||||||
|
rand_sync_user
|
||||||
|
end
|
||||||
|
end
|
|
@ -6,6 +6,6 @@ class SyncMirroredRepositoryJob < ApplicationJob
|
||||||
current_user = User.find_by(id: user_id)
|
current_user = User.find_by(id: user_id)
|
||||||
return if repo.blank? || current_user.blank?
|
return if repo.blank? || current_user.blank?
|
||||||
result = Gitea::Repository::SyncMirroredService.new(repo.user.login, repo.identifier, token: current_user.gitea_token).call
|
result = Gitea::Repository::SyncMirroredService.new(repo.user.login, repo.identifier, token: current_user.gitea_token).call
|
||||||
repo&.mirror.set_status! if result[:status] === 200
|
repo&.mirror&.set_status! if result[:status] == 200 && repo.mirror.present?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -0,0 +1,167 @@
|
||||||
|
class DunCheck::ImageCheck
|
||||||
|
|
||||||
|
#检测结果,0:通过,1:嫌疑,2:不通过
|
||||||
|
# include ActionView::Helpers::LoopTextsHelper
|
||||||
|
|
||||||
|
require 'uri'
|
||||||
|
require 'net/http'
|
||||||
|
|
||||||
|
def initialize(image_params)
|
||||||
|
@image_params = image_params
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
begin
|
||||||
|
Rails.logger.info("==========@image_params===========#{@image_params}")
|
||||||
|
dun_params = check_dun_params(@image_params)
|
||||||
|
|
||||||
|
api_url = EduSetting.get("dun_image_api")
|
||||||
|
|
||||||
|
uri = URI.parse(api_url)
|
||||||
|
|
||||||
|
http = Net::HTTP.new(uri.hostname, uri.port)
|
||||||
|
if api_url.include?("https://")
|
||||||
|
http.use_ssl = true
|
||||||
|
end
|
||||||
|
dun_params_str = URI.encode_www_form(dun_params)
|
||||||
|
|
||||||
|
header = {'content-type':'application/x-www-form-urlencoded'}
|
||||||
|
response = http.post(uri.path, dun_params_str, header)
|
||||||
|
|
||||||
|
response_body = JSON.parse(response.body)
|
||||||
|
if response_body["code"].to_i == 200
|
||||||
|
response_body_result = response_body["antispam"]
|
||||||
|
response_lables = response_body_result[0]["labels"]
|
||||||
|
return_sub_lable = ""
|
||||||
|
if response_lables.present?
|
||||||
|
return_sub_lable = get_sub_labels(response_lables)
|
||||||
|
end
|
||||||
|
render_status = response_body_result[0]["action"].to_i == 0 ? 1 : -1
|
||||||
|
tip_status(render_status, return_sub_lable.present? ? "图片含有: #{return_sub_lable}" : response_body["msg"] )
|
||||||
|
else
|
||||||
|
tip_status(-1, response_body["msg"])
|
||||||
|
end
|
||||||
|
rescue Exception => ex
|
||||||
|
Rails.logger.info "*** transaction abored!"
|
||||||
|
Rails.logger.info "*** errors: #{ex.message}"
|
||||||
|
tip_status(-1, "检测失败")
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def check_dun_params(image_params)
|
||||||
|
|
||||||
|
dun_public_params = DunCheck::PublicParams.new("image")
|
||||||
|
check_params = {
|
||||||
|
version: "v4",
|
||||||
|
images: image_params.to_json
|
||||||
|
}
|
||||||
|
check_params.merge!(dun_public_params.call)
|
||||||
|
dun_params = dun_public_params.generate_sign(check_params)
|
||||||
|
|
||||||
|
return dun_params
|
||||||
|
end
|
||||||
|
|
||||||
|
def tip_status(status, message, msg_params={})
|
||||||
|
return {status: status, message: message, extra_params: msg_params}
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_sub_labels(labels)
|
||||||
|
_sub_labels = []
|
||||||
|
labels.each do |label|
|
||||||
|
error_label = label["subLabels"].present? ? label["subLabels"][0]["subLabel"] : ""
|
||||||
|
if error_label.present?
|
||||||
|
_sub_labels.push(sub_lables[:"#{error_label.to_s}"])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return _sub_labels.present? ? _sub_labels.join(",") : ""
|
||||||
|
end
|
||||||
|
|
||||||
|
def sub_lables
|
||||||
|
{
|
||||||
|
"10000": "色情",
|
||||||
|
"10001": "女下体",
|
||||||
|
"10002": "女胸",
|
||||||
|
"10003": "男下体",
|
||||||
|
"10004": "性行为",
|
||||||
|
"10005": "臀部",
|
||||||
|
"10006": "口交",
|
||||||
|
"10007": "卡通色情",
|
||||||
|
"10008": "色情人物",
|
||||||
|
"10009": "儿童色情",
|
||||||
|
"11000": "性感低俗",
|
||||||
|
"11001": "亲吻",
|
||||||
|
"11002": "腿部特写",
|
||||||
|
"11003": "非漏点赤膊",
|
||||||
|
"11004": "胸部",
|
||||||
|
"100001": "色情文字-色情其他",
|
||||||
|
"100002": "色情文字-色情传播",
|
||||||
|
"100003": "色情文字-色情性器官",
|
||||||
|
"100004": "色情文字-色情挑逗",
|
||||||
|
"100005": "色情文字-色情低俗段子",
|
||||||
|
"100006": "色情文字-色情性行为",
|
||||||
|
"100007": "色情文字-色情舆情事件",
|
||||||
|
"100008": "色情文字-色情交友类",
|
||||||
|
"20000": "广告",
|
||||||
|
"20001": "广告带文字",
|
||||||
|
"200009": "广告文字-商业推广",
|
||||||
|
"200010": "广告文字-广告法",
|
||||||
|
"200011": "刷量行为",
|
||||||
|
"200012": "广告其他",
|
||||||
|
"260052": "广告文字-广告法-涉医疗用语",
|
||||||
|
"260053": "广告文字-广告法-迷信用语",
|
||||||
|
"260054": "广告文字-广告法-需要凭证",
|
||||||
|
"260055": "广告文字-广告法-限时性用语",
|
||||||
|
"260056": "广告文字-广告法-涉嫌诱导消费者",
|
||||||
|
"260057": "广告文字-广告法-涉嫌欺诈消费者",
|
||||||
|
"260058": "广告文字-广告法-法律风险较高",
|
||||||
|
"260059": "广告文字-广告法-极限词",
|
||||||
|
"21000": "二维码",
|
||||||
|
"30000": "暴恐",
|
||||||
|
"30001": "暴恐图集",
|
||||||
|
"30002": "暴恐旗帜",
|
||||||
|
"30003": "暴恐人物",
|
||||||
|
"30004": "暴恐标识",
|
||||||
|
"30005": "暴恐场景",
|
||||||
|
"300016": "暴恐文字-暴恐其他",
|
||||||
|
"40000": "违禁",
|
||||||
|
"40001": "违禁图集",
|
||||||
|
"40002": "违禁品",
|
||||||
|
"40003": "特殊标识",
|
||||||
|
"40004": "血腥模型",
|
||||||
|
"40005": "公职服饰",
|
||||||
|
"40006": "不文明",
|
||||||
|
"40007": "违禁人物",
|
||||||
|
"40008": "违禁场景",
|
||||||
|
"40009": "火焰",
|
||||||
|
"40010": "骷髅",
|
||||||
|
"40011": "货币",
|
||||||
|
"40012": "毒品",
|
||||||
|
"400017": "违禁文字-违禁其他",
|
||||||
|
"600018": "违禁文字-谩骂其他",
|
||||||
|
"50000": "涉政",
|
||||||
|
"50001": "涉政图集",
|
||||||
|
"50002": "中国地图",
|
||||||
|
"50003": "涉政人物",
|
||||||
|
"50004": "涉政旗帜",
|
||||||
|
"50005": "涉政标识",
|
||||||
|
"50006": "涉政场景",
|
||||||
|
"500013": "涉政文字-涉政其他",
|
||||||
|
"500014": "涉政文字-敏感专项",
|
||||||
|
"500015": "涉政文字-严格涉政",
|
||||||
|
"500039": "涉政文字-时事报道",
|
||||||
|
"500040": "涉政文字-领导人相关",
|
||||||
|
"500041": "涉政文字-英雄烈士相关",
|
||||||
|
"500042": "涉政文字-邪教迷信",
|
||||||
|
"500043": "涉政文字-落马官员相关",
|
||||||
|
"500044": "涉政文字-热点舆情",
|
||||||
|
"500045": "涉政文字-涉政综合",
|
||||||
|
"90000": "其他",
|
||||||
|
"90002": "自定义用户名单",
|
||||||
|
"90003": "自定义IP名单",
|
||||||
|
"900020": "文字违规-其他"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,31 @@
|
||||||
|
class DunCheck::PublicParams
|
||||||
|
def initialize(type)
|
||||||
|
@type = type
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
|
||||||
|
public_params = {
|
||||||
|
secretId: EduSetting.get("dun_secret_id"),
|
||||||
|
businessId: EduSetting.get("dun_#{@type}_businessId"),
|
||||||
|
timestamp: DateTime.current.strftime('%Q').to_i,
|
||||||
|
nonce: rand(10 ** 11).to_i
|
||||||
|
}
|
||||||
|
return public_params
|
||||||
|
end
|
||||||
|
|
||||||
|
def generate_sign(params)
|
||||||
|
secretkey = EduSetting.get("dun_secrect_key")
|
||||||
|
sort_params = params.sort.to_h
|
||||||
|
sign_str = ""
|
||||||
|
sort_params.each do |k,v|
|
||||||
|
sign_str += "#{k.to_s}#{v.to_s}"
|
||||||
|
end
|
||||||
|
sign_str += secretkey
|
||||||
|
md5_sign = Digest::MD5.hexdigest(sign_str.to_s.force_encoding("UTF-8"))
|
||||||
|
return sort_params.merge!(signature: md5_sign)
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,164 @@
|
||||||
|
class DunCheck::TextCheck
|
||||||
|
|
||||||
|
# include DunCheck::PublicParams
|
||||||
|
#text_params = {
|
||||||
|
# content: "ccc", #内容
|
||||||
|
# ip: "xxx", #用户ip
|
||||||
|
# account: "xxx", #登录login
|
||||||
|
# nickname: "xxx", #用户姓名
|
||||||
|
# title: "xxx", #帖子的标题
|
||||||
|
# }
|
||||||
|
|
||||||
|
#检测结果,0:通过,1:嫌疑,2:不通过
|
||||||
|
# include ActionView::Helpers::LoopTextsHelper
|
||||||
|
|
||||||
|
require 'uri'
|
||||||
|
require 'net/http'
|
||||||
|
|
||||||
|
def initialize(text_params)
|
||||||
|
@text_params = text_params
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
new_text_params = @text_params
|
||||||
|
text_long_array = []
|
||||||
|
check_content = new_text_params[:content]
|
||||||
|
format_text(check_content,text_long_array)
|
||||||
|
(1..text_long_array.size).each do |i|
|
||||||
|
new_text_params.merge!(content: text_long_array[i-1])
|
||||||
|
check_result = check_text(new_text_params)
|
||||||
|
if check_result[:status].to_i == -1
|
||||||
|
return check_result
|
||||||
|
break
|
||||||
|
else
|
||||||
|
if i == text_long_array.size
|
||||||
|
return check_result
|
||||||
|
else
|
||||||
|
next
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def check_text(text_params)
|
||||||
|
begin
|
||||||
|
dun_params = check_dun_params(text_params)
|
||||||
|
|
||||||
|
# api_url = Redmine::Configuration['dun']['text_api']
|
||||||
|
api_url = EduSetting.get("dun_text_api")
|
||||||
|
uri = URI.parse(api_url)
|
||||||
|
|
||||||
|
http = Net::HTTP.new(uri.hostname, uri.port)
|
||||||
|
if api_url.include?("https://")
|
||||||
|
http.use_ssl = true
|
||||||
|
end
|
||||||
|
dun_params_str = URI.encode_www_form(dun_params)
|
||||||
|
header = {'content-type':'application/x-www-form-urlencoded'}
|
||||||
|
response = http.post(uri.path, dun_params_str, header)
|
||||||
|
response_body = eval(response.body)
|
||||||
|
Rails.logger.info("======response========#{response_body}")
|
||||||
|
|
||||||
|
if response_body[:code].to_i == 200
|
||||||
|
response_body_result = response_body[:result]
|
||||||
|
response_body_labels = response_body_result[:labels].present? ? response_body_result[:labels][0] : []
|
||||||
|
extra_params = {
|
||||||
|
action: response_body_result[:action],
|
||||||
|
taskId: response_body_result[:taskId],
|
||||||
|
infos: response_body_labels.present? ? sub_lables[:"#{response_body_labels[:subLabels][0][:subLabel]}"] : ""
|
||||||
|
}
|
||||||
|
render_status = response_body_result[:action].to_i == 0 ? 1 : -1
|
||||||
|
tip_status(render_status, response_body[:msg], extra_params)
|
||||||
|
else
|
||||||
|
tip_status(-1, response_body[:msg])
|
||||||
|
end
|
||||||
|
rescue Exception => ex
|
||||||
|
Rails.logger.info "*** transaction abored!"
|
||||||
|
Rails.logger.info "*** errors: #{ex.message}"
|
||||||
|
tip_status(-1, "检测失败")
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def check_dun_params(text_params)
|
||||||
|
dun_public_params = DunCheck::PublicParams.new("text")
|
||||||
|
rand_data_id = random_dataId
|
||||||
|
check_params = {
|
||||||
|
dataId: rand_data_id,
|
||||||
|
version: "v3.1",
|
||||||
|
callback: rand_data_id
|
||||||
|
}.merge(text_params)
|
||||||
|
|
||||||
|
check_params.merge!(dun_public_params.call)
|
||||||
|
dun_params = dun_public_params.generate_sign(check_params)
|
||||||
|
return dun_params
|
||||||
|
end
|
||||||
|
|
||||||
|
def format_text(text_long, text_long_array)
|
||||||
|
slice_content = text_long.slice(0..4998)
|
||||||
|
last_slice_content = text_long.slice(4999..-1)
|
||||||
|
text_long_array.push(slice_content)
|
||||||
|
if last_slice_content.present?
|
||||||
|
if last_slice_content.length > 4999
|
||||||
|
format_text(last_slice_content, text_long_array)
|
||||||
|
else
|
||||||
|
text_long_array.push(last_slice_content)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def random_dataId
|
||||||
|
Digest::MD5.hexdigest(rand(100000000).to_s)
|
||||||
|
end
|
||||||
|
|
||||||
|
def check_labels
|
||||||
|
# 100:色情,200:广告,260:广告法,300:暴恐,400:违禁,500:涉政,600:谩骂,700:灌水
|
||||||
|
%w(100 200 260 300 400 500 600 700).join(",")
|
||||||
|
end
|
||||||
|
|
||||||
|
def tip_status(status, message, msg_params={})
|
||||||
|
return {status: status, message: message, extra_params: msg_params}
|
||||||
|
end
|
||||||
|
|
||||||
|
def sub_lables
|
||||||
|
{
|
||||||
|
"100001": "色情其他",
|
||||||
|
"100002": "色情传播",
|
||||||
|
"100003": "色情性器官",
|
||||||
|
"100004": "色情挑逗",
|
||||||
|
"100005": "色情低俗段子",
|
||||||
|
"100006": "色情性行为",
|
||||||
|
"100007": "色情舆情事件",
|
||||||
|
"100008": "色情交友类",
|
||||||
|
"200009": "商业推广",
|
||||||
|
"200010": "广告法",
|
||||||
|
"200011": "刷量行为",
|
||||||
|
"200012": "广告其他",
|
||||||
|
"260052": "广告法-涉医疗用语(非药品禁止宣传药效)",
|
||||||
|
"260053": "广告法-迷信用语",
|
||||||
|
"260054": "广告法-需要凭证(可以写但需要凭证证明)",
|
||||||
|
"260055": "广告法-限时性用语(可以写但必须有具体时间)",
|
||||||
|
"260056": "广告法-涉嫌诱导消费者",
|
||||||
|
"260057": "广告法-涉嫌欺诈消费者",
|
||||||
|
"260058": "广告法-法律风险较高",
|
||||||
|
"260059": "广告法-极限词(用语绝对化)",
|
||||||
|
"300016": "暴恐其他",
|
||||||
|
"400017": "违禁其他",
|
||||||
|
"400021": "违禁网监要求",
|
||||||
|
"500013": "涉政其他",
|
||||||
|
"500014": "敏感专项",
|
||||||
|
"500015": "严格涉政",
|
||||||
|
"500039": "时事报道",
|
||||||
|
"500040": "领导人相关",
|
||||||
|
"500041": "英雄烈士相关",
|
||||||
|
"500042": "邪教迷信",
|
||||||
|
"500043": "落马官员相关",
|
||||||
|
"500044": "热点舆情",
|
||||||
|
"500045": "涉政综合",
|
||||||
|
"600018": "谩骂其他",
|
||||||
|
"700019": "灌水其他",
|
||||||
|
"900020": "其他",
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
|
@ -3,7 +3,7 @@ class Attachment < ApplicationRecord
|
||||||
include Publicable
|
include Publicable
|
||||||
include Publishable
|
include Publishable
|
||||||
include Lockable
|
include Lockable
|
||||||
|
include DunCheckImageAble
|
||||||
belongs_to :container, polymorphic: true, optional: true
|
belongs_to :container, polymorphic: true, optional: true
|
||||||
belongs_to :author, class_name: "User", foreign_key: :author_id
|
belongs_to :author, class_name: "User", foreign_key: :author_id
|
||||||
# belongs_to :course, foreign_key: :container_id, optional: true
|
# belongs_to :course, foreign_key: :container_id, optional: true
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
module DunCheckAble
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
included do
|
||||||
|
validate :check_text_able
|
||||||
|
end
|
||||||
|
|
||||||
|
def check_text_able
|
||||||
|
dun_check_params = get_model
|
||||||
|
if dun_check_params[:is_change]
|
||||||
|
dun_check_params.delete(:is_change)
|
||||||
|
check_result = DunCheck::TextCheck.new(dun_check_params).call
|
||||||
|
if check_result[:status].to_i == -1
|
||||||
|
errors.add(:base, "内容含有:#{check_result[:extra_params][:infos]},请修改")
|
||||||
|
# raise ActiveRecord::RecordInvalid.new(self)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_model
|
||||||
|
dun_model = self.class.name
|
||||||
|
case dun_model
|
||||||
|
when "Issue"
|
||||||
|
check_params = {
|
||||||
|
title: self.subject,
|
||||||
|
content: self.description,
|
||||||
|
is_change: (self.subject_changed? || self.description_changed?) && self.subject.present? && self.description.present?
|
||||||
|
}
|
||||||
|
when "PullRequest"
|
||||||
|
check_params = {
|
||||||
|
title: "",
|
||||||
|
content: self.body,
|
||||||
|
is_change: self.body_changed? && self.body.present?
|
||||||
|
}
|
||||||
|
when "Journal"
|
||||||
|
check_params = {
|
||||||
|
title: "",
|
||||||
|
content: self.notes,
|
||||||
|
is_change: self.notes_changed? && self.notes.present?
|
||||||
|
}
|
||||||
|
when "Version"
|
||||||
|
check_params = {
|
||||||
|
title: self.name,
|
||||||
|
content: self.description,
|
||||||
|
is_change: (self.name_changed? || self.description_changed?) && self.name.present? && self.description.present?
|
||||||
|
}
|
||||||
|
end
|
||||||
|
return check_params
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,34 @@
|
||||||
|
module DunCheckImageAble
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
included do
|
||||||
|
def self.check_image_able(file)
|
||||||
|
|
||||||
|
original_filename = file.original_filename
|
||||||
|
file_extention = original_filename.split(".").last
|
||||||
|
check_include = %w(jpg png bmp gif webp tiff jpeg)
|
||||||
|
|
||||||
|
if file_extention && check_include.include?(file_extention)
|
||||||
|
base64_file = Base64.encode64(file.open.read.force_encoding(Encoding::UTF_8))
|
||||||
|
check_params = [
|
||||||
|
{
|
||||||
|
name: original_filename,
|
||||||
|
type: 2,
|
||||||
|
data: base64_file,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
check_result = DunCheck::ImageCheck.new(check_params).call
|
||||||
|
if check_result[:status].to_i == -1
|
||||||
|
return {status: -1, message: check_result[:message]}
|
||||||
|
else
|
||||||
|
return {status: 1}
|
||||||
|
end
|
||||||
|
else
|
||||||
|
return {status: 1}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end
|
|
@ -1,5 +1,6 @@
|
||||||
class Issue < ApplicationRecord
|
class Issue < ApplicationRecord
|
||||||
#issue_type 1为普通,2为悬赏
|
#issue_type 1为普通,2为悬赏
|
||||||
|
include DunCheckAble
|
||||||
belongs_to :project, :counter_cache => true
|
belongs_to :project, :counter_cache => true
|
||||||
belongs_to :tracker,optional: true
|
belongs_to :tracker,optional: true
|
||||||
has_many :project_trends, as: :trend, dependent: :destroy
|
has_many :project_trends, as: :trend, dependent: :destroy
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
class Journal < ApplicationRecord
|
class Journal < ApplicationRecord
|
||||||
|
include DunCheckAble
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
belongs_to :issue, foreign_key: :journalized_id, :touch => true
|
belongs_to :issue, foreign_key: :journalized_id, :touch => true
|
||||||
has_many :journal_details, :dependent => :delete_all
|
has_many :journal_details, :dependent => :delete_all
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
class PullRequest < ApplicationRecord
|
class PullRequest < ApplicationRecord
|
||||||
#status 0 默认未合并, 1表示合并, 2表示请求拒绝
|
#status 0 默认未合并, 1表示合并, 2表示请求拒绝
|
||||||
|
include DunCheckAble
|
||||||
belongs_to :issue
|
belongs_to :issue
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
belongs_to :project, :counter_cache => true
|
belongs_to :project, :counter_cache => true
|
||||||
|
|
|
@ -54,7 +54,7 @@ class Token < ActiveRecord::Base
|
||||||
|
|
||||||
# Delete all expired tokens
|
# Delete all expired tokens
|
||||||
def self.destroy_expired
|
def self.destroy_expired
|
||||||
Token.delete_all ["action NOT IN (?) AND created_on < ?", ['feeds', 'api', 'autologin'], Time.now - @@validity_time]
|
Token.delete_all ["action NOT IN (?) AND created_on < ?", ['feeds', 'api', 'autologin', 'autologin_forge_military'], Time.now - @@validity_time]
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns the active user who owns the key for the given action
|
# Returns the active user who owns the key for the given action
|
||||||
|
|
|
@ -124,7 +124,7 @@ class User < ApplicationRecord
|
||||||
|
|
||||||
# 删除自动登录的token,一旦退出下次会提示需要登录
|
# 删除自动登录的token,一旦退出下次会提示需要登录
|
||||||
def delete_autologin_token(value)
|
def delete_autologin_token(value)
|
||||||
Token.where(:user_id => id, :action => 'autologin', :value => value).delete_all
|
Token.where(:user_id => id, :action => autologin_name, :value => value).delete_all
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_session_token(value)
|
def delete_session_token(value)
|
||||||
|
@ -510,8 +510,8 @@ class User < ApplicationRecord
|
||||||
end
|
end
|
||||||
|
|
||||||
# Returns the user who matches the given autologin +key+ or nil
|
# Returns the user who matches the given autologin +key+ or nil
|
||||||
def self.try_to_autologin(key)
|
def self.try_to_autologin(key,type)
|
||||||
user = Token.find_active_user('autologin', key)
|
user = Token.find_active_user(type, key)
|
||||||
user.update(last_login_on: Time.now) if user
|
user.update(last_login_on: Time.now) if user
|
||||||
user
|
user
|
||||||
end
|
end
|
||||||
|
@ -675,6 +675,10 @@ class User < ApplicationRecord
|
||||||
raise("昵称包含敏感词汇,请重新输入") if nickname && !HarmoniousDictionary.clean?(nickname)
|
raise("昵称包含敏感词汇,请重新输入") if nickname && !HarmoniousDictionary.clean?(nickname)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def autologin_name
|
||||||
|
EduSetting.get('autologin_cookie_name') || "autologin_forge_military"
|
||||||
|
end
|
||||||
|
|
||||||
def set_laboratory
|
def set_laboratory
|
||||||
return unless new_record?
|
return unless new_record?
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
class Version < ApplicationRecord
|
class Version < ApplicationRecord
|
||||||
|
include DunCheckAble
|
||||||
belongs_to :project, counter_cache: true
|
belongs_to :project, counter_cache: true
|
||||||
has_many :issues, class_name: "Issue", foreign_key: "fixed_version_id"
|
has_many :issues, class_name: "Issue", foreign_key: "fixed_version_id"
|
||||||
belongs_to :user, optional: true
|
belongs_to :user, optional: true
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
require 'uri'
|
||||||
|
require 'net/http'
|
||||||
|
|
||||||
|
class SyncForgeProjectsRake
|
||||||
|
# 运行示例: 检查哪些项目的repo不存在,bundle exec rails runner "SyncForgeProjectsRake.new.call(5)" -e production
|
||||||
|
|
||||||
|
def call(count)
|
||||||
|
|
||||||
|
url = "https://forgeplus.trustie.net/api/sync_forge/sync_range_projects" #trustie上的相关路由
|
||||||
|
count_params = {
|
||||||
|
sync_count: count || 10
|
||||||
|
}
|
||||||
|
Rails.logger.info("============begin to sync project,count: #{count_params} ===========")
|
||||||
|
uri = URI.parse(url)
|
||||||
|
http = Net::HTTP.new(uri.hostname, uri.port)
|
||||||
|
http.use_ssl = true
|
||||||
|
response = http.send_request('POST', uri.path, count_params.to_json, {'Content-Type' => 'application/json'})
|
||||||
|
Rails.logger.info("============end to sync project, status: #{response.code} ===========")
|
||||||
|
end
|
||||||
|
end
|
|
@ -19,10 +19,14 @@
|
||||||
maxlength: 15, class: 'form-control font-16',
|
maxlength: 15, class: 'form-control font-16',
|
||||||
'onKeyUp': 'value=value.replace(/[^\w\-\/]/ig,"").toLowerCase()',
|
'onKeyUp': 'value=value.replace(/[^\w\-\/]/ig,"").toLowerCase()',
|
||||||
style: 'text-transform:lowercase'%>
|
style: 'text-transform:lowercase'%>
|
||||||
<div class="input-group-append">
|
<%
|
||||||
|
=begin%>
|
||||||
|
<div class="input-group-append">
|
||||||
<% rails_env = EduSetting.get('rails_env') %>
|
<% rails_env = EduSetting.get('rails_env') %>
|
||||||
<span class="input-group-text font-14" id="site-prefix"><%= rails_env && rails_env != 'production' ? ".#{rails_env}.educoder.net" : '.educoder.net' %></span>
|
<span class="input-group-text font-14" id="site-prefix"><%= rails_env && rails_env != 'production' ? ".#{rails_env}.educoder.net" : '.educoder.net' %></span>
|
||||||
</div>
|
</div>
|
||||||
|
<%
|
||||||
|
=end%>
|
||||||
</div>
|
</div>
|
||||||
<%# if @laboratory.errors && @laboratory.errors.key?(:identifier) %>
|
<%# if @laboratory.errors && @laboratory.errors.key?(:identifier) %>
|
||||||
<!-- <span id="identifier-error" class="danger text-danger">二级域名已被使用</span>-->
|
<!-- <span id="identifier-error" class="danger text-danger">二级域名已被使用</span>-->
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
|
json.status 0
|
||||||
json.id @attachment.id
|
json.id @attachment.id
|
||||||
json.filesize @attachment.filesize
|
json.filesize @attachment.filesize
|
||||||
|
|
|
@ -17,7 +17,7 @@ Rails.application.routes.draw do
|
||||||
get 'oauth/bind', to: 'oauth/educoder#bind'
|
get 'oauth/bind', to: 'oauth/educoder#bind'
|
||||||
get 'oauth/register', to: 'oauth#register'
|
get 'oauth/register', to: 'oauth#register'
|
||||||
post 'oauth/auto_register', to: 'oauth#auto_register'
|
post 'oauth/auto_register', to: 'oauth#auto_register'
|
||||||
|
|
||||||
resources :edu_settings
|
resources :edu_settings
|
||||||
|
|
||||||
scope '/api' do
|
scope '/api' do
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue