From d6bf85ef7323d22e327eefb17d6c2d4509eca24d Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Thu, 18 Mar 2021 15:28:03 +0800 Subject: [PATCH] add: user gitea register --- app/controllers/accounts_controller.rb | 26 ++++++++++++++++++++++++++ app/forms/users/sync_gitea_form.rb | 16 ++++++++++++++++ config/routes.rb | 1 + 3 files changed, 43 insertions(+) create mode 100644 app/forms/users/sync_gitea_form.rb diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 8e82a814..042cbe2b 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -6,6 +6,28 @@ class AccountsController < ApplicationController render json: session end + # 为了同步平台上未注册gitea的用户 + def gitea_register + Users::SyncGiteaForm.new(sync_gitea_params).validate! + user = User.find_by(login: sync_gitea_params[:login]) + return render_error("该用户已同步协作平台") if user.gitea_token.present? && user.gitea_uid.present? + user.mail = sync_gitea_params[:email] + interactor = Gitea::RegisterInteractor.call({username: sync_gitea_params[:login], email: sync_gitea_params[:email], password: sync_gitea_params[:password]}) + if interactor.success? + gitea_user = interactor.result + result = Gitea::User::GenerateTokenService.call(sync_gitea_params[:login], sync_gitea_params[:password]) + user.gitea_token = result['sha1'] + user.gitea_uid = gitea_user[:body]['id'] + user.save! + render_ok + else + render_error(interactor.error) + end + rescue Exception => e + uid_logger_error(e.message) + tip_exception(-1, e.message) + end + # 其他平台同步注册的用户 def remote_register username = params[:username]&.gsub(/\s+/, "") @@ -341,6 +363,10 @@ class AccountsController < ApplicationController { login: pre + code, email: email, phone: phone } end + def sync_gitea_params + params.permit(:login, :email, :password) + end + def user_params params.require(:user).permit(:login, :email, :phone) end diff --git a/app/forms/users/sync_gitea_form.rb b/app/forms/users/sync_gitea_form.rb new file mode 100644 index 00000000..9b2ef99f --- /dev/null +++ b/app/forms/users/sync_gitea_form.rb @@ -0,0 +1,16 @@ +class Users::SyncGiteaForm < BaseForm + attr_accessor :login, :password, :email, :user + + validates :login, :password, :email, presence: true + + validate :check_user, :check_password + + def check_user + @user = User.find_by(login: login) + raise '用户不存在.' unless user.present? + end + + def check_password + raise '用户密码错误.' unless user.check_password?(password) + end +end \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 6b0f11d3..f505003c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -186,6 +186,7 @@ Rails.application.routes.draw do get :logout get :get_verification_code get :valid_email_and_phone + post :gitea_register post :remote_register post :remote_update post :remote_login