Merge branch 'pre_trustie_server' into trustie_server
This commit is contained in:
commit
6eaf491f70
|
@ -1,6 +1,25 @@
|
||||||
class AccountsController < ApplicationController
|
class AccountsController < ApplicationController
|
||||||
|
before_action :require_login, only: [:login_check, :simple_update]
|
||||||
include ApplicationHelper
|
include ApplicationHelper
|
||||||
|
|
||||||
|
#skip_before_action :check_account, :only => [:logout]
|
||||||
|
|
||||||
|
def simple_update
|
||||||
|
simple_update_params.merge!(username: params[:username]&.gsub(/\s+/, ""))
|
||||||
|
simple_update_params.merge!(email: params[:email]&.gsub(/\s+/, ""))
|
||||||
|
simple_update_params.merge!(platform: (params[:platform] || 'forge')&.gsub(/\s+/, ""))
|
||||||
|
Register::RemoteForm.new(simple_update_params).validate!
|
||||||
|
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
|
result = auto_update(current_user, simple_update_params)
|
||||||
|
if result[:message].blank?
|
||||||
|
render_ok
|
||||||
|
else
|
||||||
|
render_error(result[:message])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def index
|
def index
|
||||||
render json: session
|
render json: session
|
||||||
end
|
end
|
||||||
|
@ -316,6 +335,11 @@ class AccountsController < ApplicationController
|
||||||
render_ok
|
render_ok
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def login_check
|
||||||
|
Register::LoginCheckColumnsForm.new(check_params.merge(user: current_user)).validate!
|
||||||
|
render_ok
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
# type 事件类型 1:用户注册 2:忘记密码 3: 绑定手机 4: 绑定邮箱, 5: 验证手机号是否有效 # 如果有新的继续后面加
|
# type 事件类型 1:用户注册 2:忘记密码 3: 绑定手机 4: 绑定邮箱, 5: 验证手机号是否有效 # 如果有新的继续后面加
|
||||||
|
@ -383,4 +407,7 @@ class AccountsController < ApplicationController
|
||||||
params.permit(:username, :email, :password, :platform)
|
params.permit(:username, :email, :password, :platform)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def simple_update_params
|
||||||
|
params.permit(:username, :email, :password, :platform)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -58,4 +58,32 @@ module RegisterHelper
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def auto_update(user, params={})
|
||||||
|
return if params.blank?
|
||||||
|
result = {message: nil, user: nil}
|
||||||
|
before_login = user.login
|
||||||
|
user.login = params[:username]
|
||||||
|
user.password = params[:password]
|
||||||
|
user.mail = params[:email]
|
||||||
|
|
||||||
|
if user.save!
|
||||||
|
sync_params = {
|
||||||
|
password: params[:password].to_s,
|
||||||
|
email: params[:email],
|
||||||
|
login_name: params[:username],
|
||||||
|
new_name: params[:username],
|
||||||
|
source_id: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
interactor = Gitea::User::UpdateInteractor.call(before_login, sync_params)
|
||||||
|
if interactor.success?
|
||||||
|
result[:user] = user
|
||||||
|
else
|
||||||
|
result[:message] = '用户同步Gitea失败!'
|
||||||
|
end
|
||||||
|
else
|
||||||
|
result[:message] = user.errors.full_messages.join(",")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,7 +4,7 @@ module RenderHelper
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_error(message = '')
|
def render_error(message = '')
|
||||||
render json: { status: -1, message: message }
|
render json: { status: status, message: message }
|
||||||
end
|
end
|
||||||
|
|
||||||
def render_not_acceptable(message = '请求已拒绝')
|
def render_not_acceptable(message = '请求已拒绝')
|
||||||
|
|
|
@ -8,7 +8,7 @@ class UsersController < ApplicationController
|
||||||
before_action :connect_to_ci_db, only: [:get_user_info]
|
before_action :connect_to_ci_db, only: [:get_user_info]
|
||||||
before_action :convert_image!, only: [:update, :update_image]
|
before_action :convert_image!, only: [:update, :update_image]
|
||||||
skip_before_action :check_sign, only: [:attachment_show]
|
skip_before_action :check_sign, only: [:attachment_show]
|
||||||
# before_action :sso_login, only: [:get_user_info]
|
before_action :sso_login, only: [:get_user_info]
|
||||||
|
|
||||||
def connect_to_ci_db(options={})
|
def connect_to_ci_db(options={})
|
||||||
if !(current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_certification?)
|
if !(current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_certification?)
|
||||||
|
@ -302,6 +302,11 @@ class UsersController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def email_search
|
||||||
|
return render_error('请输入email') if params[:email].blank?
|
||||||
|
@user = User.find_by(mail: params[:email])
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def load_user
|
def load_user
|
||||||
@user = User.find_by_login(params[:id]) || User.find_by(id: params[:id])
|
@user = User.find_by_login(params[:id]) || User.find_by(id: params[:id])
|
||||||
|
@ -331,35 +336,64 @@ class UsersController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def sso_login
|
def sso_login
|
||||||
if params[:ticket].present? && !current_user.logged? && params[:websiteName].nil?
|
if params[:login].present? && !current_user.logged? && params[:websiteName].present?
|
||||||
info = Base64.decode64(params[:ticket]) || Base64.decode64(params[:info].gsub(" ", "+")).force_encoding("utf-8")
|
user = User.where("login = ?", "#{params[:login].presence}").first
|
||||||
# login 邮箱 手机号 姓名 学校/单位
|
# 已同步注册,直接登录
|
||||||
user_info = info.split("&&")
|
if user.present?
|
||||||
# Rails.logger.info("user_info====== #{info}")
|
successful_authentication(user)
|
||||||
login = user_info[0]
|
else
|
||||||
email = user_info[1]
|
autologin_register_by_educoder(params[:login].presence)
|
||||||
phone = user_info[2]
|
end
|
||||||
real_name = user_info[3]
|
end
|
||||||
department_name = user_info[4]
|
end
|
||||||
|
|
||||||
# 没有登录时,新建用户并登录
|
# 通过login参数查询头歌账号信息,注册并登录
|
||||||
if current_user.logged?
|
def autologin_register_by_educoder(edu_login)
|
||||||
user = current_user
|
req_params = { "login" => "#{edu_login}", "private_token" => "hriEn3UwXfJs3PmyXnSH" }
|
||||||
|
api_url= "https://data.educoder.net"
|
||||||
|
client = Faraday.new(url: api_url)
|
||||||
|
response = client.public_send("get", "/api/sources/get_user_info_by_login", req_params)
|
||||||
|
result = JSON.parse(response.body)
|
||||||
|
#查询
|
||||||
|
return nil if result["status"].to_s != "0"
|
||||||
|
|
||||||
|
# login 邮箱 手机号 姓名 学校/单位
|
||||||
|
user_info = result["data"]
|
||||||
|
Rails.logger.info("user_info====== #{user_info}")
|
||||||
|
login = user_info["login"]
|
||||||
|
email = user_info["mail"]
|
||||||
|
phone = user_info["phone"]
|
||||||
|
real_name = user_info["username"]
|
||||||
|
department_name = user_info["school"]
|
||||||
|
password = "12345678"
|
||||||
|
|
||||||
|
# 没有用户时,新建用户并登录
|
||||||
|
user = User.where("login = ? or phone = ? or mail = ? ", "#{login}", phone, email).first
|
||||||
|
if user.present?
|
||||||
|
# 手机号先记录,后续用
|
||||||
|
user.update_column(:phone, "#{phone}") if phone.present?
|
||||||
else
|
else
|
||||||
user = User.where("login = ? or phone = ? or mail = ? ", "edu_#{login}", phone, email).first
|
|
||||||
unless user
|
|
||||||
ActiveRecord::Base.transaction do
|
ActiveRecord::Base.transaction do
|
||||||
phone_rand = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].sample(4).join
|
email = "#{login}@gitlink.org.cn" if email.blank?
|
||||||
user_params = { status: 1, type: 'User', login: "e_#{login}", lastname: "#{real_name}", mail: "#{email}",
|
user_params = { status: 1, type: 'User', login: "#{login}", lastname: "#{real_name}", mail: "#{email}",
|
||||||
nickname: "#{real_name}", professional_certification: 0, certification: 0, grade: 0,
|
nickname: "#{real_name}", professional_certification: 0, certification: 0, grade: 0,
|
||||||
password: "12345678", phone: "#{phone_rand}", profile_completed: 1 }
|
password: "#{password}", phone: "#{phone}", profile_completed: 1 }
|
||||||
user = User.create!(user_params)
|
user = User.create!(user_params)
|
||||||
UserExtension.create!(user_id: user.id, gender: 1, custom_department: "#{department_name}")
|
UserExtension.create!(user_id: user.id, gender: 1, custom_department: "#{department_name}")
|
||||||
|
interactor = Gitea::RegisterInteractor.call({username: login, email: email, password: password})
|
||||||
|
if interactor.success?
|
||||||
|
gitea_user = interactor.result
|
||||||
|
Rails.logger.info("Gitea::RegisterInteractor.call result====== #{gitea_user}")
|
||||||
|
result = Gitea::User::GenerateTokenService.call(login, password)
|
||||||
|
user.gitea_token = result['sha1']
|
||||||
|
user.gitea_uid = gitea_user[:body]['id']
|
||||||
|
user.save!
|
||||||
|
else
|
||||||
|
Rails.logger.info("Gitea::RegisterInteractor.call error====== #{interactor.error}")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
successful_authentication(user)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
successful_authentication(user) if user.present?
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
|
@ -4,7 +4,7 @@ class Gitea::User::UpdateForm
|
||||||
|
|
||||||
attr_accessor :username, :email, :admin, :allow_create_organization, :allow_git_hook, :allow_import_local,
|
attr_accessor :username, :email, :admin, :allow_create_organization, :allow_git_hook, :allow_import_local,
|
||||||
:full_name, :location, :login_name, :max_repo_creation, :must_change_password, :password, :prohibit_login,
|
:full_name, :location, :login_name, :max_repo_creation, :must_change_password, :password, :prohibit_login,
|
||||||
:source_id, :website
|
:source_id, :website, :new_name
|
||||||
|
|
||||||
validates :username, presence: true
|
validates :username, presence: true
|
||||||
validates :email, presence: true, format: { with: EMAIL_REGEX, multiline: true }
|
validates :email, presence: true, format: { with: EMAIL_REGEX, multiline: true }
|
||||||
|
|
|
@ -3,28 +3,40 @@ module Register
|
||||||
include ActiveModel::Model
|
include ActiveModel::Model
|
||||||
|
|
||||||
private
|
private
|
||||||
def check_login(login)
|
def check_login(login, user=nil)
|
||||||
login = strip(login)
|
login = strip(login)
|
||||||
raise LoginError, "登录名格式有误" unless login =~ CustomRegexp::LOGIN
|
raise LoginError, "登录名格式有误" unless login =~ CustomRegexp::LOGIN
|
||||||
|
|
||||||
login_exist = Owner.exists?(login: login) || ReversedKeyword.check_exists?(login)
|
login_exist = Owner.exists?(login: login) || ReversedKeyword.check_exists?(login)
|
||||||
|
if user.present?
|
||||||
|
raise LoginError, '登录名已被使用' if login_exist && login != user&.login
|
||||||
|
else
|
||||||
raise LoginError, '登录名已被使用' if login_exist
|
raise LoginError, '登录名已被使用' if login_exist
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def check_mail(mail)
|
def check_mail(mail, user=nil)
|
||||||
mail = strip(mail)
|
mail = strip(mail)
|
||||||
raise EmailError, "邮件格式有误" unless mail =~ CustomRegexp::EMAIL
|
raise EmailError, "邮件格式有误" unless mail =~ CustomRegexp::EMAIL
|
||||||
|
|
||||||
mail_exist = Owner.exists?(mail: mail)
|
mail_exist = Owner.exists?(mail: mail)
|
||||||
|
if user.present?
|
||||||
|
raise EmailError, '邮箱已被使用' if mail_exist && mail != user&.mail
|
||||||
|
else
|
||||||
raise EmailError, '邮箱已被使用' if mail_exist
|
raise EmailError, '邮箱已被使用' if mail_exist
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def check_phone(phone)
|
def check_phone(phone, user=nil)
|
||||||
phone = strip(phone)
|
phone = strip(phone)
|
||||||
raise PhoneError, "手机号格式有误" unless phone =~ CustomRegexp::PHONE
|
raise PhoneError, "手机号格式有误" unless phone =~ CustomRegexp::PHONE
|
||||||
|
|
||||||
phone_exist = Owner.exists?(phone: phone)
|
phone_exist = Owner.exists?(phone: phone)
|
||||||
|
if user.present?
|
||||||
|
raise PhoneError, '手机号已被使用' if phone_exist && phone != user&.phone
|
||||||
|
else
|
||||||
raise PhoneError, '手机号已被使用' if phone_exist
|
raise PhoneError, '手机号已被使用' if phone_exist
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
module Register
|
||||||
|
class LoginCheckColumnsForm < Register::BaseForm
|
||||||
|
attr_accessor :type, :value, :user
|
||||||
|
|
||||||
|
validates :type, presence: true, numericality: true
|
||||||
|
validates :value, presence: true
|
||||||
|
validate :check!
|
||||||
|
|
||||||
|
def check!
|
||||||
|
# params[:type] 为事件类型 1:登录名(login) 2:email(邮箱) 3:phone(手机号)
|
||||||
|
case strip(type).to_i
|
||||||
|
when 1 then check_login(strip(value), user)
|
||||||
|
when 2 then check_mail(strip(value), user)
|
||||||
|
when 3 then check_phone(strip(value), user)
|
||||||
|
else raise("type值无效")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -13,7 +13,7 @@ module Gitea
|
||||||
end
|
end
|
||||||
|
|
||||||
def success?
|
def success?
|
||||||
@error.nil?
|
@error.nil? && @result[:status].to_s == "success"
|
||||||
end
|
end
|
||||||
|
|
||||||
def result
|
def result
|
||||||
|
|
|
@ -24,7 +24,8 @@ class Projects::TransferService < ApplicationService
|
||||||
|
|
||||||
private
|
private
|
||||||
def update_owner
|
def update_owner
|
||||||
project.members.map{|m| m.destroy! if m.user_id == owner.id || (new_owner.is_a?(Organization) && new_owner.is_member?(m.user_id)) }
|
project.members.map{|m| m.destroy! if m.user_id == owner.id || project.member(new_owner.id) || (new_owner.is_a?(Organization) && new_owner.is_member?(m.user_id)) }
|
||||||
|
project.set_owner_permission(new_owner)
|
||||||
project.update!(user_id: new_owner.id)
|
project.update!(user_id: new_owner.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
if @user.present?
|
||||||
|
json.partial! 'users/user', locals: { user: @user }
|
||||||
|
else
|
||||||
|
json.null
|
||||||
|
end
|
|
@ -26,3 +26,4 @@ json.super_description @user.super_description
|
||||||
json.(@user, :show_email, :show_department, :show_location, :show_super_description)
|
json.(@user, :show_email, :show_department, :show_location, :show_super_description)
|
||||||
json.message_unread_total @message_unread_total
|
json.message_unread_total @message_unread_total
|
||||||
json.has_trace_user @user.trace_user.present?
|
json.has_trace_user @user.trace_user.present?
|
||||||
|
json.is_new @user.login.present? && params[:login].to_s.include?("#{@user.login}")
|
|
@ -214,6 +214,8 @@ Rails.application.routes.draw do
|
||||||
post :remote_password
|
post :remote_password
|
||||||
post :change_password
|
post :change_password
|
||||||
post :check
|
post :check
|
||||||
|
post :login_check
|
||||||
|
post :simple_update
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -247,6 +249,7 @@ Rails.application.routes.draw do
|
||||||
get :trustie_projects
|
get :trustie_projects
|
||||||
get :trustie_related_projects
|
get :trustie_related_projects
|
||||||
post :sync_user_info
|
post :sync_user_info
|
||||||
|
get :email_search
|
||||||
|
|
||||||
scope '/ci', module: :ci do
|
scope '/ci', module: :ci do
|
||||||
scope do
|
scope do
|
||||||
|
|
Loading…
Reference in New Issue