diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 14892ce7a..71c50fed1 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -357,7 +357,10 @@ class ApplicationController < ActionController::Base uid_logger("user setup start: session[:user_id] is #{session[:user_id]}") uid_logger("0000000000000user setup start: default_yun_session is #{default_yun_session}, session[:current_user_id] is #{session[:"#{default_yun_session}"]}") current_domain_session = session[:"#{default_yun_session}"] + Rails.logger.info "#{session[:user_id]}===============" + if current_domain_session + Rails.logger.info "#{current_domain_session}===============" # existing session User.current = (User.active.find(current_domain_session) rescue nil) elsif autologin_user = try_to_autologin diff --git a/app/controllers/concerns/register_helper.rb b/app/controllers/concerns/register_helper.rb index f40872905..35c1adea4 100644 --- a/app/controllers/concerns/register_helper.rb +++ b/app/controllers/concerns/register_helper.rb @@ -1,14 +1,14 @@ module RegisterHelper extend ActiveSupport::Concern - def autologin_register(username, email, password, platform= 'forge', need_edit_password = false) + def autologin_register(username, email, password, platform= 'forge', need_edit_info = false) result = {message: nil, user: nil} user = User.new(admin: false, login: username, mail: email, type: "User") user.password = password user.platform = platform - if need_edit_password - user.need_edit_password + if need_edit_info + user.need_edit_info else user.activate end @@ -31,4 +31,30 @@ module RegisterHelper result end + def autosync_register_trustie(username, password, email) + config = Rails.application.config_for(:configuration).symbolize_keys! + + api_host = config[:sync_url] + + return if api_host.blank? + + url = "#{api_host}/api/v1/users" + sync_json = { + "mail": email, + "password": password, + "login": username + } + uri = URI.parse(url) + + if api_host + http = Net::HTTP.new(uri.hostname, uri.port) + + if api_host.include?("https://") + http.use_ssl = true + end + + http.send_request('POST', uri.path, sync_json.to_json, {'Content-Type' => 'application/json'}) + end + end + end diff --git a/app/controllers/oauth/educoder_controller.rb b/app/controllers/oauth/educoder_controller.rb index 51b0e7a86..9ca4ae49b 100644 --- a/app/controllers/oauth/educoder_controller.rb +++ b/app/controllers/oauth/educoder_controller.rb @@ -56,6 +56,7 @@ class Oauth::EducoderController < Oauth::BaseController 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) + autosync_register_trustie(login, "Ec#{login}2021#", "#{login}@forge.com") successful_authentication(open_user.user) else render_error(reg_result[:message]) diff --git a/app/models/token.rb b/app/models/token.rb index c71a860af..db778c6b8 100644 --- a/app/models/token.rb +++ b/app/models/token.rb @@ -1,19 +1,19 @@ -# == Schema Information -# -# Table name: tokens -# -# id :integer not null, primary key -# user_id :integer default("0"), not null -# action :string(30) default(""), not null -# value :string(40) default(""), not null -# created_on :datetime not null -# -# Indexes -# -# index_tokens_on_user_id (user_id) -# tokens_value (value) UNIQUE -# - +# == Schema Information +# +# Table name: tokens +# +# id :integer not null, primary key +# user_id :integer default("0"), not null +# action :string(30) default(""), not null +# value :string(40) default(""), not null +# created_on :datetime not null +# +# Indexes +# +# index_tokens_on_user_id (user_id) +# tokens_value (value) UNIQUE +# + # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -76,7 +76,7 @@ class Token < ActiveRecord::Base # Returns the active user who owns the key for the given action def self.find_active_user(action, key, validity_days=nil) user = find_user(action, key, validity_days) - if user && user.active? + if user && (user.active? || user.need_edit_info?) user end end diff --git a/app/models/user.rb b/app/models/user.rb index 5d03498c1..5559da088 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -79,7 +79,7 @@ class User < Owner STATUS_ACTIVE = 1 STATUS_REGISTERED = 2 STATUS_LOCKED = 3 - STATUS_EDIT_PASSWORD = 4 + STATUS_EDIT_INFO = 4 # tpi tpm权限控制 EDU_ADMIN = 1 # 超级管理员 @@ -162,7 +162,7 @@ class User < Owner has_many :organizations, through: :organization_users # Groups and active users - scope :active, lambda { where(status: [STATUS_ACTIVE, STATUS_EDIT_PASSWORD]) } + scope :active, lambda { where(status: [STATUS_ACTIVE, STATUS_EDIT_INFO]) } scope :like, lambda { |keywords| where("LOWER(concat(lastname, firstname, login, mail)) LIKE ?", "%#{keywords.split(" ").join('|')}%") unless keywords.blank? } @@ -379,8 +379,8 @@ class User < Owner status == STATUS_LOCKED end - def need_edit_password? - status == STATUS_EDIT_PASSWORD + def need_edit_info? + status == STATUS_EDIT_INFO end def activate @@ -395,8 +395,8 @@ class User < Owner self.status = STATUS_LOCKED end - def need_edit_password - self.status = STATUS_EDIT_PASSWORD + def need_edit_info + self.status = STATUS_EDIT_INFO end def activate! @@ -411,8 +411,8 @@ class User < Owner update_attribute(:status, STATUS_LOCKED) end - def need_edit_password! - update_attribute(:status, STATUS_LOCKED) + def need_edit_info! + update_attribute(:status, STATUS_EDIT_INFO) end # 课程用户身份 diff --git a/app/views/users/get_user_info.json.jbuilder b/app/views/users/get_user_info.json.jbuilder index be11d6c0e..908801dad 100644 --- a/app/views/users/get_user_info.json.jbuilder +++ b/app/views/users/get_user_info.json.jbuilder @@ -8,9 +8,9 @@ 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.need_edit_info @user.need_edit_info? # json.phone @user.phone -# json.email @user.mail +json.email @user.mail json.profile_completed @user.profile_completed? json.professional_certification @user.professional_certification json.devops_step @user.devops_step