| @@ -357,7 +357,10 @@ class ApplicationController < ActionController::Base | |||||
| uid_logger("user setup start: session[:user_id] is #{session[:user_id]}") | 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}"]}") | 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}"] | current_domain_session = session[:"#{default_yun_session}"] | ||||
| Rails.logger.info "#{session[:user_id]}===============" | |||||
| if current_domain_session | if current_domain_session | ||||
| Rails.logger.info "#{current_domain_session}===============" | |||||
| # existing session | # existing session | ||||
| User.current = (User.active.find(current_domain_session) rescue nil) | User.current = (User.active.find(current_domain_session) rescue nil) | ||||
| elsif autologin_user = try_to_autologin | elsif autologin_user = try_to_autologin | ||||
| @@ -1,14 +1,14 @@ | |||||
| module RegisterHelper | module RegisterHelper | ||||
| extend ActiveSupport::Concern | 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} | result = {message: nil, user: nil} | ||||
| user = User.new(admin: false, login: username, mail: email, type: "User") | user = User.new(admin: false, login: username, mail: email, type: "User") | ||||
| user.password = password | user.password = password | ||||
| user.platform = platform | user.platform = platform | ||||
| if need_edit_password | |||||
| user.need_edit_password | |||||
| if need_edit_info | |||||
| user.need_edit_info | |||||
| else | else | ||||
| user.activate | user.activate | ||||
| end | end | ||||
| @@ -31,4 +31,30 @@ module RegisterHelper | |||||
| result | result | ||||
| end | 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 | end | ||||
| @@ -56,6 +56,7 @@ class Oauth::EducoderController < Oauth::BaseController | |||||
| reg_result = autologin_register(login,"#{login}@forge.com", "Ec#{login}2021#", 'educoder', true) | reg_result = autologin_register(login,"#{login}@forge.com", "Ec#{login}2021#", 'educoder', true) | ||||
| if reg_result[:message].blank? | if reg_result[:message].blank? | ||||
| open_user = OpenUsers::Educoder.create!(user_id: reg_result[:user][:id], uid: result['login'], extra: result) | 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) | successful_authentication(open_user.user) | ||||
| else | else | ||||
| render_error(reg_result[:message]) | render_error(reg_result[:message]) | ||||
| @@ -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 | # This program is free software; you can redistribute it and/or | ||||
| # modify it under the terms of the GNU General Public License | # 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 | # Returns the active user who owns the key for the given action | ||||
| def self.find_active_user(action, key, validity_days=nil) | def self.find_active_user(action, key, validity_days=nil) | ||||
| user = find_user(action, key, validity_days) | user = find_user(action, key, validity_days) | ||||
| if user && user.active? | |||||
| if user && (user.active? || user.need_edit_info?) | |||||
| user | user | ||||
| end | end | ||||
| end | end | ||||
| @@ -79,7 +79,7 @@ class User < Owner | |||||
| STATUS_ACTIVE = 1 | STATUS_ACTIVE = 1 | ||||
| STATUS_REGISTERED = 2 | STATUS_REGISTERED = 2 | ||||
| STATUS_LOCKED = 3 | STATUS_LOCKED = 3 | ||||
| STATUS_EDIT_PASSWORD = 4 | |||||
| STATUS_EDIT_INFO = 4 | |||||
| # tpi tpm权限控制 | # tpi tpm权限控制 | ||||
| EDU_ADMIN = 1 # 超级管理员 | EDU_ADMIN = 1 # 超级管理员 | ||||
| @@ -162,7 +162,7 @@ class User < Owner | |||||
| has_many :organizations, through: :organization_users | has_many :organizations, through: :organization_users | ||||
| # Groups and active 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| | scope :like, lambda { |keywords| | ||||
| where("LOWER(concat(lastname, firstname, login, mail)) LIKE ?", "%#{keywords.split(" ").join('|')}%") unless keywords.blank? | where("LOWER(concat(lastname, firstname, login, mail)) LIKE ?", "%#{keywords.split(" ").join('|')}%") unless keywords.blank? | ||||
| } | } | ||||
| @@ -379,8 +379,8 @@ class User < Owner | |||||
| status == STATUS_LOCKED | status == STATUS_LOCKED | ||||
| end | end | ||||
| def need_edit_password? | |||||
| status == STATUS_EDIT_PASSWORD | |||||
| def need_edit_info? | |||||
| status == STATUS_EDIT_INFO | |||||
| end | end | ||||
| def activate | def activate | ||||
| @@ -395,8 +395,8 @@ class User < Owner | |||||
| self.status = STATUS_LOCKED | self.status = STATUS_LOCKED | ||||
| end | end | ||||
| def need_edit_password | |||||
| self.status = STATUS_EDIT_PASSWORD | |||||
| def need_edit_info | |||||
| self.status = STATUS_EDIT_INFO | |||||
| end | end | ||||
| def activate! | def activate! | ||||
| @@ -411,8 +411,8 @@ class User < Owner | |||||
| update_attribute(:status, STATUS_LOCKED) | update_attribute(:status, STATUS_LOCKED) | ||||
| end | end | ||||
| def need_edit_password! | |||||
| update_attribute(:status, STATUS_LOCKED) | |||||
| def need_edit_info! | |||||
| update_attribute(:status, STATUS_EDIT_INFO) | |||||
| end | end | ||||
| # 课程用户身份 | # 课程用户身份 | ||||
| @@ -8,9 +8,9 @@ json.is_teacher @user.user_extension&.teacher? | |||||
| json.user_identity @user.identity | json.user_identity @user.identity | ||||
| json.tidding_count 0 | json.tidding_count 0 | ||||
| json.user_phone_binded @user.phone.present? | 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.phone @user.phone | ||||
| # json.email @user.mail | |||||
| json.email @user.mail | |||||
| json.profile_completed @user.profile_completed? | json.profile_completed @user.profile_completed? | ||||
| json.professional_certification @user.professional_certification | json.professional_certification @user.professional_certification | ||||
| json.devops_step @user.devops_step | json.devops_step @user.devops_step | ||||