forgeplus/app/services/api/v1/users/update_email_service.rb

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