| @@ -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 | |||
| @@ -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 | |||
| @@ -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]) | |||
| @@ -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 | |||
| @@ -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 | |||
| # 课程用户身份 | |||
| @@ -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 | |||