From 9b21e29426379e77b82b04f6c0d3fea01e767986 Mon Sep 17 00:00:00 2001 From: jasder Date: Thu, 18 Mar 2021 17:27:18 +0800 Subject: [PATCH] ADD educoder api --- app/controllers/users_controller.rb | 60 ++++++++++++++++++- app/forms/gitea/user/change_email_form.rb | 9 +++ app/forms/gitea/user/change_password_form.rb | 23 +++++++ .../forms/change_password_form.zh-CN.yml | 17 ++++++ config/routes.rb | 6 +- 5 files changed, 112 insertions(+), 3 deletions(-) create mode 100644 app/forms/gitea/user/change_email_form.rb create mode 100644 app/forms/gitea/user/change_password_form.rb create mode 100644 config/locales/forms/change_password_form.zh-CN.yml diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 6c5c10fb..b42ab0bf 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -4,7 +4,7 @@ class UsersController < ApplicationController before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] - before_action :require_login, only: %i[me list] + before_action :require_login, only: %i[me list change_password change_email] before_action :connect_to_ci_db, only: [:get_user_info] skip_before_action :check_sign, only: [:attachment_show] @@ -233,6 +233,64 @@ class UsersController < ApplicationController render_ok end + # TODO: For Educoder + def change_password + user = User.find_by_login params[:login] + return render_error("用户 #{rq_params[:login]} 不存在.") unless user === current_user + + form_params= { + login: params[:login], + email: user&.mail, + password: params[:password], + old_password: params[:old_password], + user: user + } + Gitea::User::ChangePasswordForm.new(form_params).validate! + + sync_params = { + email: user&.mail, + password: params[:password] + } + + if sync_params.present? + interactor = Gitea::User::UpdateInteractor.call(user.login, sync_params) + if interactor.success? + user.update!(password: params[:password]) + render_ok + else + render_error(interactor.error) + end + end + end + + # TODO: For Educoder + def change_email + user = User.find_by_login params[:login] + return render_error("用户 #{rq_params[:login]} 不存在.") unless user === current_user + + form_params= { + login: params[:login], + email: user&.mail, + user: user + } + + Gitea::User::ChangeEmailForm.new(form_params).validate! + + sync_params = { + email: params[:email] + } + + if sync_params.present? + interactor = Gitea::User::UpdateInteractor.call(user.login, sync_params) + if interactor.success? + user.update!(mail: params[:email]) + render_ok + else + render_error(interactor.error) + end + end + end + private def load_user @user = User.find_by_login(params[:id]) || User.find_by(id: params[:id]) diff --git a/app/forms/gitea/user/change_email_form.rb b/app/forms/gitea/user/change_email_form.rb new file mode 100644 index 00000000..9d235622 --- /dev/null +++ b/app/forms/gitea/user/change_email_form.rb @@ -0,0 +1,9 @@ +class Gitea::User::ChangeEmailForm + include ActiveModel::Model + + attr_accessor :user + attr_accessor :email, :login + + validates :email, presence: true, format: { with: CustomRegexp::EMAIL } + validates :login, presence: true +end diff --git a/app/forms/gitea/user/change_password_form.rb b/app/forms/gitea/user/change_password_form.rb new file mode 100644 index 00000000..ff494de7 --- /dev/null +++ b/app/forms/gitea/user/change_password_form.rb @@ -0,0 +1,23 @@ +class Gitea::User::ChangePasswordForm + include ActiveModel::Model + + attr_accessor :user + attr_accessor :email, :login, :old_password, :password + + validates :email, presence: true, format: { with: CustomRegexp::EMAIL } + validates :login, presence: true + validates :old_password, presence: true + validates :password, presence: true + + validate :check_old_password + + def check_old_password + return if user.check_password?(old_password.to_s) + + errors.add(:old_password, :password_error) + end + + # def check_user! + # user === current_user + # end +end diff --git a/config/locales/forms/change_password_form.zh-CN.yml b/config/locales/forms/change_password_form.zh-CN.yml new file mode 100644 index 00000000..a96b0cc9 --- /dev/null +++ b/config/locales/forms/change_password_form.zh-CN.yml @@ -0,0 +1,17 @@ +'zh-CN': + activemodel: + attributes: + gitea/user/change_password_form: + user: '' + email: 邮箱 + login: 用户名 + old_password: 旧密码 + password: 新密码 + errors: + models: + gitea/user/change_password_form: + attributes: + old_password: + password_error: 错误 + user: + not_exist: 不存在 diff --git a/config/routes.rb b/config/routes.rb index 228c546c..4d066d58 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -73,12 +73,12 @@ Rails.application.routes.draw do end resources :statistic, only: [:index] do - collection do + collection do get :platform_profile get :platform_code get :active_project_rank get :active_developer_rank - end + end end resources :sync_forge, only: [:create] do collection do @@ -219,6 +219,8 @@ Rails.application.routes.draw do post :sync_salt get :trustie_projects get :trustie_related_projects + post :change_password + post :change_email scope '/ci', module: :ci do scope do