68 lines
1.8 KiB
Ruby
68 lines
1.8 KiB
Ruby
class Api::V1::Users::UpdateEmailService < ApplicationService
|
|
include ActiveModel::Model
|
|
|
|
attr_reader :user, :token, :password, :mail, :old_mail, :code, :verify_code
|
|
attr_accessor :gitea_data
|
|
|
|
validates :password, :code, presence: true
|
|
validates :mail, presence: true, format: { with: CustomRegexp::EMAIL }
|
|
|
|
def initialize(user, params, token =nil)
|
|
@user = user
|
|
@token = token
|
|
@password = params[:password]
|
|
@mail = params[:email]
|
|
@old_mail = user.mail
|
|
@code = params[:code]
|
|
@verify_code = VerificationCode.where(email: @mail, code: @code, code_type: 10).last
|
|
end
|
|
|
|
def call
|
|
raise Error, errors.full_messages.join(",") unless valid?
|
|
raise Error, "密码不正确." unless @user.check_password?(@password)
|
|
raise Error, "验证码不正确." if @verify_code&.code != @code
|
|
raise Error, "验证码已失效." if !@verify_code&.effective?
|
|
|
|
# begin
|
|
ActiveRecord::Base.transaction do
|
|
change_user_email
|
|
excute_data_to_gitea
|
|
excute_change_email_from_gitea
|
|
end
|
|
|
|
return gitea_data
|
|
|
|
# rescue
|
|
# raise Error, "服务器错误,请联系系统管理员!"
|
|
# end
|
|
end
|
|
|
|
private
|
|
def request_params
|
|
{
|
|
access_token: token
|
|
}
|
|
end
|
|
|
|
def request_body
|
|
{
|
|
email: @mail,
|
|
login_name: @user.login,
|
|
source_id: 0
|
|
}
|
|
end
|
|
|
|
def change_user_email
|
|
@user.update_attributes!({mail: @mail})
|
|
end
|
|
|
|
def excute_data_to_gitea
|
|
Rails.logger.info request_body
|
|
@gitea_data = $gitea_client.patch_admin_users_by_username(@user.login, {body: request_body.to_json})
|
|
end
|
|
|
|
def excute_change_email_from_gitea
|
|
$gitea_client.delete_user_emails({body: {emails: [@old_mail]}.to_json, query: request_params})
|
|
$gitea_client.post_user_emails({body: {emails: [@mail]}.to_json, query: request_params})
|
|
end
|
|
end |