From c4a43c439237cba47c8a5555c54294fda57fa15b Mon Sep 17 00:00:00 2001 From: "vilet.yy" Date: Fri, 2 Apr 2021 16:44:36 +0800 Subject: [PATCH] add: need edit user password --- app/controllers/application_controller.rb | 1 - app/controllers/concerns/register_helper.rb | 8 ++++++-- app/controllers/oauth/educoder_controller.rb | 2 +- app/models/user.rb | 15 ++++++++++++++- app/services/projects/fork_service.rb | 2 ++ app/views/users/get_user_info.json.jbuilder | 1 + 6 files changed, 24 insertions(+), 5 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index ee81765a..14892ce7 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -329,7 +329,6 @@ class ApplicationController < ActionController::Base User.current = user end end - # if !User.current.logged? && Rails.env.development? # User.current = User.find 1 # end diff --git a/app/controllers/concerns/register_helper.rb b/app/controllers/concerns/register_helper.rb index 3a23a210..f4087290 100644 --- a/app/controllers/concerns/register_helper.rb +++ b/app/controllers/concerns/register_helper.rb @@ -1,13 +1,17 @@ module RegisterHelper extend ActiveSupport::Concern - def autologin_register(username, email, password, platform= 'forge') + def autologin_register(username, email, password, platform= 'forge', need_edit_password = false) result = {message: nil, user: nil} user = User.new(admin: false, login: username, mail: email, type: "User") user.password = password user.platform = platform - user.activate + if need_edit_password + user.need_edit_password + else + user.activate + end return unless user.valid? diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index 685e245c..51b0e7a8 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -53,7 +53,7 @@ class Oauth::EducoderController < Oauth::BaseController if current_user.blank? || !current_user.logged? new_user = true login = User.generate_login('E') - reg_result = autologin_register(login,"#{login}@forge.com", "Ec#{login}2021#", 'educoder') + reg_result = autologin_register(login,"#{login}@forge.com", "Ec#{login}2021#", 'educoder', true) if reg_result[:message].blank? open_user = OpenUsers::Educoder.create!(user_id: reg_result[:user][:id], uid: result['login'], extra: result) successful_authentication(open_user.user) diff --git a/app/models/user.rb b/app/models/user.rb index 5bfe3b6e..5d03498c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -79,6 +79,7 @@ class User < Owner STATUS_ACTIVE = 1 STATUS_REGISTERED = 2 STATUS_LOCKED = 3 + STATUS_EDIT_PASSWORD = 4 # tpi tpm权限控制 EDU_ADMIN = 1 # 超级管理员 @@ -161,7 +162,7 @@ class User < Owner has_many :organizations, through: :organization_users # Groups and active users - scope :active, lambda { where(status: STATUS_ACTIVE) } + scope :active, lambda { where(status: [STATUS_ACTIVE, STATUS_EDIT_PASSWORD]) } scope :like, lambda { |keywords| where("LOWER(concat(lastname, firstname, login, mail)) LIKE ?", "%#{keywords.split(" ").join('|')}%") unless keywords.blank? } @@ -378,6 +379,10 @@ class User < Owner status == STATUS_LOCKED end + def need_edit_password? + status == STATUS_EDIT_PASSWORD + end + def activate self.status = STATUS_ACTIVE end @@ -390,6 +395,10 @@ class User < Owner self.status = STATUS_LOCKED end + def need_edit_password + self.status = STATUS_EDIT_PASSWORD + end + def activate! update_attribute(:status, STATUS_ACTIVE) end @@ -402,6 +411,10 @@ class User < Owner update_attribute(:status, STATUS_LOCKED) end + def need_edit_password! + update_attribute(:status, STATUS_LOCKED) + end + # 课程用户身份 def course_identity(course) if !logged? diff --git a/app/services/projects/fork_service.rb b/app/services/projects/fork_service.rb index 3204e5fc..8ae787c5 100644 --- a/app/services/projects/fork_service.rb +++ b/app/services/projects/fork_service.rb @@ -24,6 +24,8 @@ class Projects::ForkService < ApplicationService new_repository.identifier = @project.identifier new_repository.save! + ProjectUnit.init_types(clone_project.id) + result = Gitea::Repository::ForkService.new(@project.owner, @target_owner, @project.identifier, @organization).call @project.update_column('forked_count', @project&.forked_count.to_i + 1) diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index d9aa4402..be11d6c0 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -8,6 +8,7 @@ json.is_teacher @user.user_extension&.teacher? json.user_identity @user.identity json.tidding_count 0 json.user_phone_binded @user.phone.present? +json.need_edit_password @user.need_edit_password? # json.phone @user.phone # json.email @user.mail json.profile_completed @user.profile_completed?