| @@ -337,7 +337,6 @@ class ApplicationController < ActionController::Base | |||||
| User.current = user | User.current = user | ||||
| end | end | ||||
| end | end | ||||
| # if !User.current.logged? && Rails.env.development? | # if !User.current.logged? && Rails.env.development? | ||||
| # User.current = User.find 1 | # User.current = User.find 1 | ||||
| # end | # end | ||||
| @@ -1,13 +1,17 @@ | |||||
| module RegisterHelper | module RegisterHelper | ||||
| extend ActiveSupport::Concern | extend ActiveSupport::Concern | ||||
| def autologin_register(username, email, password, platform= 'forge') | |||||
| 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 | ||||
| user.activate | |||||
| if need_edit_info | |||||
| user.need_edit_info | |||||
| else | |||||
| user.activate | |||||
| end | |||||
| return unless user.valid? | return unless user.valid? | ||||
| @@ -27,4 +31,31 @@ module RegisterHelper | |||||
| result | result | ||||
| end | end | ||||
| def autosync_register_trustie(username, password, email, lastname="") | |||||
| config = Rails.application.config_for(:configuration).symbolize_keys! | |||||
| api_host = config[:sync_url] | |||||
| return if api_host.blank? | |||||
| url = "#{api_host}/api/v1/users/common" | |||||
| sync_json = { | |||||
| "mail": email, | |||||
| "password": password, | |||||
| "login": username, | |||||
| "lastname": lastname | |||||
| }.compact | |||||
| 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 | ||||
| @@ -2,6 +2,7 @@ class Oauth::BaseController < ActionController::Base | |||||
| include RenderHelper | include RenderHelper | ||||
| include LoginHelper | include LoginHelper | ||||
| include ControllerRescueHandler | include ControllerRescueHandler | ||||
| include LoggerHelper | |||||
| # include LaboratoryHelper | # include LaboratoryHelper | ||||
| skip_before_action :verify_authenticity_token | skip_before_action :verify_authenticity_token | ||||
| @@ -11,6 +12,18 @@ class Oauth::BaseController < ActionController::Base | |||||
| end | end | ||||
| private | private | ||||
| def tip_exception(status = -1, message) | |||||
| raise Educoder::TipException.new(status, message) | |||||
| end | |||||
| def tip_show_exception(status = -2, message) | |||||
| raise Educoder::TipException.new(status, message) | |||||
| end | |||||
| def tip_show(exception) | |||||
| uid_logger("Tip show status is #{exception.status}, message is #{exception.message}") | |||||
| render json: exception.tip_json | |||||
| end | |||||
| def session_user_id | def session_user_id | ||||
| # session[:user_id] | # session[:user_id] | ||||
| @@ -48,4 +61,13 @@ class Oauth::BaseController < ActionController::Base | |||||
| Rails.logger.info("[wechat] set session unionid: #{unionid}") | Rails.logger.info("[wechat] set session unionid: #{unionid}") | ||||
| session[:unionid] = unionid | session[:unionid] = unionid | ||||
| end | end | ||||
| def session_edulogin | |||||
| session[:edulogin] | |||||
| end | |||||
| def set_session_edulogin(login) | |||||
| Rails.logger.info("[educoder] set sesstion edulogin: #{login}") | |||||
| session[:edulogin] = login | |||||
| end | |||||
| end | end | ||||
| @@ -1,4 +1,6 @@ | |||||
| class Oauth::EducoderController < Oauth::BaseController | class Oauth::EducoderController < Oauth::BaseController | ||||
| include RegisterHelper | |||||
| def bind | def bind | ||||
| begin | begin | ||||
| login = params[:login] | login = params[:login] | ||||
| @@ -32,4 +34,41 @@ class Oauth::EducoderController < Oauth::BaseController | |||||
| render_error(ex.message) | render_error(ex.message) | ||||
| end | end | ||||
| end | end | ||||
| # 需要educoder那边设置回调地址 | |||||
| def create | |||||
| begin | |||||
| code = params['code'].to_s.strip | |||||
| tip_exception("code不能为空") if code.blank? | |||||
| new_user = false | |||||
| result = EducoderOauth::Service.access_token(code) | |||||
| result = EducoderOauth::Service.user_info(result[:access_token]) | |||||
| # 存在该用户 | |||||
| open_user = OpenUsers::Educoder.find_by(uid: result['login']) | |||||
| if open_user.present? && open_user.user.present? | |||||
| successful_authentication(open_user.user) | |||||
| else | |||||
| 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', 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]) | |||||
| end | |||||
| else | |||||
| OpenUsers::Educoder.create!(user: current_user, uid: result['login'], extra: result) | |||||
| end | |||||
| end | |||||
| redirect_to root_path(new_user: new_user) | |||||
| rescue Exception => ex | |||||
| render_error(ex.message) | |||||
| end | |||||
| end | |||||
| end | end | ||||
| @@ -61,6 +61,7 @@ class OauthController < ApplicationController | |||||
| login = params[:login] | login = params[:login] | ||||
| email = params[:mail] | email = params[:mail] | ||||
| password = params[:password] | password = params[:password] | ||||
| lastname = params[:lastname] | |||||
| callback_url = params[:callback_url] | callback_url = params[:callback_url] | ||||
| platform = params[:plathform] || 'educoder' | platform = params[:plathform] || 'educoder' | ||||
| @@ -72,8 +73,11 @@ class OauthController < ApplicationController | |||||
| if result[:message].blank? | if result[:message].blank? | ||||
| logger.info "[Oauth educoer] ====auto_register success" | logger.info "[Oauth educoer] ====auto_register success" | ||||
| user = User.find result[:user][:id] | user = User.find result[:user][:id] | ||||
| successful_authentication(user) | |||||
| user.update_column(:lastname, params[:lastname]) | |||||
| autosync_register_trustie(login, password, email, lastname) | |||||
| OpenUsers::Educoder.create!(user: user, uid: user.login) | OpenUsers::Educoder.create!(user: user, uid: user.login) | ||||
| successful_authentication(user) | |||||
| render json: { callback_url: callback_url } | render json: { callback_url: callback_url } | ||||
| # redirect_to callback_url | # redirect_to callback_url | ||||
| @@ -347,7 +347,7 @@ class RepositoriesController < ApplicationController | |||||
| local_requests = PullRequest.new(local_params.merge(user_id: current_user.try(:id), project_id: @project.id, issue_id: @pull_issue.id)) | local_requests = PullRequest.new(local_params.merge(user_id: current_user.try(:id), project_id: @project.id, issue_id: @pull_issue.id)) | ||||
| if local_requests.save | if local_requests.save | ||||
| gitea_request = Gitea::PullRequest::CreateService.new(current_user.try(:gitea_token), @owner.login, @project.try(:identifier), requests_params).call | gitea_request = Gitea::PullRequest::CreateService.new(current_user.try(:gitea_token), @owner.login, @project.try(:identifier), requests_params).call | ||||
| if gitea_request[:status] == :success && local_requests.update_attributes(gpid: gitea_request["body"]["number"]) | |||||
| if gitea_request[:status] == :success && local_requests.update_attributes(gitea_number: gitea_request["body"]["number"]) | |||||
| local_requests.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") | local_requests.project_trends.create(user_id: current_user.id, project_id: @project.id, action_type: "create") | ||||
| end | end | ||||
| end | end | ||||
| @@ -4,6 +4,7 @@ class SettingsController < ApplicationController | |||||
| get_add_menu | get_add_menu | ||||
| get_common_menu | get_common_menu | ||||
| get_personal_menu | get_personal_menu | ||||
| get_third_party | |||||
| get_top_system_notification | get_top_system_notification | ||||
| end | end | ||||
| @@ -40,6 +41,14 @@ class SettingsController < ApplicationController | |||||
| end | end | ||||
| end | end | ||||
| def get_third_party | |||||
| @third_party = [] | |||||
| @third_party << { | |||||
| name: 'educoder', | |||||
| url: EducoderOauth.oauth_url | |||||
| } | |||||
| end | |||||
| def get_top_system_notification | def get_top_system_notification | ||||
| @top_system_notification = SystemNotification.is_top.first | @top_system_notification = SystemNotification.is_top.first | ||||
| end | end | ||||
| @@ -273,7 +273,7 @@ class UsersController < ApplicationController | |||||
| interactor = Gitea::User::UpdateInteractor.call(user.login, sync_params) | interactor = Gitea::User::UpdateInteractor.call(user.login, sync_params) | ||||
| if interactor.success? | if interactor.success? | ||||
| user.update!(password: params[:password], mail: params[:email], status: User::STATUS_EDIT_INFO) | |||||
| user.update!(password: params[:password], mail: params[:email], status: User::STATUS_ACTIVE) | |||||
| render_ok | render_ok | ||||
| else | else | ||||
| render_error(interactor.error) | render_error(interactor.error) | ||||
| @@ -0,0 +1,18 @@ | |||||
| module EducoderOauth | |||||
| class << self | |||||
| attr_accessor :client_id, :client_secret, :base_url, :redirect_uri | |||||
| def logger | |||||
| @_logger ||= STDOUT | |||||
| end | |||||
| def logger=(l) | |||||
| @_logger = l | |||||
| end | |||||
| def oauth_url | |||||
| "#{base_url}/oauth2?call_url=/oauth/authorize?client_id=#{client_id}&redirect_uri=#{URI.encode_www_form_component(redirect_uri)}&response_type=code" | |||||
| end | |||||
| end | |||||
| end | |||||
| @@ -0,0 +1,37 @@ | |||||
| require 'oauth2' | |||||
| module EducoderOauth::Service | |||||
| module_function | |||||
| def request(method, url, params) | |||||
| begin | |||||
| Rails.logger.info("[EducoderOauth] [#{method.to_s.upcase}] #{url} || #{params}") | |||||
| client = Faraday.new(url: EducoderOauth.base_url) | |||||
| response = client.public_send(method, url, params) | |||||
| result = JSON.parse(response.body) | |||||
| Rails.logger.info("[EducoderOauth] [#{response.status}] #{result}") | |||||
| result | |||||
| rescue Exception => e | |||||
| raise Educoder::TipException.new(e.message) | |||||
| end | |||||
| end | |||||
| def access_token(code) | |||||
| begin | |||||
| Rails.logger.info("[EducoderOauth] [code] #{code} ") | |||||
| Rails.logger.info("[EducoderOauth] [redirect_uri] #{EducoderOauth.redirect_uri} ") | |||||
| client = OAuth2::Client.new(EducoderOauth.client_id, EducoderOauth.client_secret, site: EducoderOauth.base_url) | |||||
| result = client.auth_code.get_token(code, redirect_uri: EducoderOauth.redirect_uri).to_hash | |||||
| return result | |||||
| rescue Exception => e | |||||
| raise Educoder::TipException.new(e.message) | |||||
| end | |||||
| end | |||||
| def user_info(access_token) | |||||
| request(:get, '/api/users/info.json', {access_token: access_token}) | |||||
| end | |||||
| end | |||||
| @@ -39,6 +39,6 @@ class Gitea::Pull < Gitea::Base | |||||
| serialize :conflicted_files, Array | serialize :conflicted_files, Array | ||||
| belongs_to :pull_request, class_name: '::PullRequest', foreign_key: :id, primary_key: :gitea_number, optional: true | |||||
| belongs_to :pull_request, class_name: '::PullRequest', foreign_key: :id, primary_key: :gitea_id, optional: true | |||||
| end | end | ||||
| @@ -1,4 +1,3 @@ | |||||
| # == Schema Information | # == Schema Information | ||||
| # | # | ||||
| # Table name: projects | # Table name: projects | ||||
| @@ -38,8 +37,6 @@ | |||||
| # rep_identifier :string(255) | # rep_identifier :string(255) | ||||
| # project_category_id :integer | # project_category_id :integer | ||||
| # project_language_id :integer | # project_language_id :integer | ||||
| # license_id :integer | |||||
| # ignore_id :integer | |||||
| # praises_count :integer default("0") | # praises_count :integer default("0") | ||||
| # watchers_count :integer default("0") | # watchers_count :integer default("0") | ||||
| # issues_count :integer default("0") | # issues_count :integer default("0") | ||||
| @@ -53,9 +50,10 @@ | |||||
| # open_devops_count :integer default("0") | # open_devops_count :integer default("0") | ||||
| # recommend :boolean default("0") | # recommend :boolean default("0") | ||||
| # platform :integer default("0") | # platform :integer default("0") | ||||
| # license_id :integer | |||||
| # ignore_id :integer | |||||
| # default_branch :string(255) default("master") | # default_branch :string(255) default("master") | ||||
| # website :string(255) | # website :string(255) | ||||
| # order_index :integer default("0") | |||||
| # lesson_url :string(255) | # lesson_url :string(255) | ||||
| # | # | ||||
| # Indexes | # Indexes | ||||
| @@ -78,7 +76,6 @@ | |||||
| # | # | ||||
| class Project < ApplicationRecord | class Project < ApplicationRecord | ||||
| include Matchable | include Matchable | ||||
| include Publicable | include Publicable | ||||
| @@ -37,7 +37,7 @@ class PullRequest < ApplicationRecord | |||||
| has_many :pull_request_tags, foreign_key: :pull_request_id | has_many :pull_request_tags, foreign_key: :pull_request_id | ||||
| has_many :project_trends, as: :trend, dependent: :destroy | has_many :project_trends, as: :trend, dependent: :destroy | ||||
| has_many :attachments, as: :container, dependent: :destroy | has_many :attachments, as: :container, dependent: :destroy | ||||
| has_one :gitea_pull, foreign_key: :id, primary_key: :gitea_number, class_name: 'Gitea::Pull' | |||||
| has_one :gitea_pull, foreign_key: :id, primary_key: :gitea_id, class_name: 'Gitea::Pull' | |||||
| scope :merged_and_closed, ->{where.not(status: 0)} | scope :merged_and_closed, ->{where.not(status: 0)} | ||||
| scope :opening, -> {where(status: 0)} | scope :opening, -> {where(status: 0)} | ||||
| @@ -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 | ||||
| @@ -83,6 +83,7 @@ class User < Owner | |||||
| STATUS_ACTIVE = 1 | STATUS_ACTIVE = 1 | ||||
| STATUS_REGISTERED = 2 | STATUS_REGISTERED = 2 | ||||
| STATUS_LOCKED = 3 | STATUS_LOCKED = 3 | ||||
| STATUS_EDIT_INFO = 4 | |||||
| # tpi tpm权限控制 | # tpi tpm权限控制 | ||||
| EDU_ADMIN = 1 # 超级管理员 | EDU_ADMIN = 1 # 超级管理员 | ||||
| @@ -174,7 +175,7 @@ class User < Owner | |||||
| has_one :user_template_message_setting, dependent: :destroy | has_one :user_template_message_setting, dependent: :destroy | ||||
| # Groups and active users | # Groups and active users | ||||
| scope :active, lambda { where(status: STATUS_ACTIVE) } | |||||
| scope :active, lambda { where(status: [STATUS_ACTIVE, STATUS_EDIT_INFO]) } | |||||
| scope :like, lambda { |keywords| | scope :like, lambda { |keywords| | ||||
| sql = "CONCAT(lastname, firstname) LIKE :search OR nickname LIKE :search OR login LIKE :search OR mail LIKE :search OR nickname LIKE :search" | sql = "CONCAT(lastname, firstname) LIKE :search OR nickname LIKE :search OR login LIKE :search OR mail LIKE :search OR nickname LIKE :search" | ||||
| where(sql, :search => "%#{keywords.split(" ").join('|')}%") unless keywords.blank? | where(sql, :search => "%#{keywords.split(" ").join('|')}%") unless keywords.blank? | ||||
| @@ -412,6 +413,10 @@ class User < Owner | |||||
| status == STATUS_LOCKED | status == STATUS_LOCKED | ||||
| end | end | ||||
| def need_edit_info? | |||||
| status == STATUS_EDIT_INFO | |||||
| end | |||||
| def activate | def activate | ||||
| self.status = STATUS_ACTIVE | self.status = STATUS_ACTIVE | ||||
| end | end | ||||
| @@ -424,6 +429,10 @@ class User < Owner | |||||
| self.status = STATUS_LOCKED | self.status = STATUS_LOCKED | ||||
| end | end | ||||
| def need_edit_info | |||||
| self.status = STATUS_EDIT_INFO | |||||
| end | |||||
| def activate! | def activate! | ||||
| update_attribute(:status, STATUS_ACTIVE) | update_attribute(:status, STATUS_ACTIVE) | ||||
| end | end | ||||
| @@ -436,6 +445,10 @@ class User < Owner | |||||
| update_attribute(:status, STATUS_LOCKED) | update_attribute(:status, STATUS_LOCKED) | ||||
| end | end | ||||
| def need_edit_info! | |||||
| update_attribute(:status, STATUS_EDIT_INFO) | |||||
| end | |||||
| # 课程用户身份 | # 课程用户身份 | ||||
| def course_identity(course) | def course_identity(course) | ||||
| if !logged? | if !logged? | ||||
| @@ -1,14 +1,19 @@ | |||||
| <div class="indexPanel"> | <div class="indexPanel"> | ||||
| <p class="indexTitle">完善信息,进入比赛</p> | |||||
| <p class="indexTitle">平台已检测到您的如下信息,完善即可进入比赛</p> | |||||
| <div class="indexInfos"> | <div class="indexInfos"> | ||||
| <%= form_tag('', method: :post, id: 'oauth_form', class: 'form-inline search-form flex-1', remote: true) do %> | <%= form_tag('', method: :post, id: 'oauth_form', class: 'form-inline search-form flex-1', remote: true) do %> | ||||
| <%= hidden_field_tag 'callback_url', params[:callback_url] %> | <%= hidden_field_tag 'callback_url', params[:callback_url] %> | ||||
| <div class="indexInfo"> | <div class="indexInfo"> | ||||
| <span>用户名:</span> | |||||
| <%= text_field_tag :login, params[:login], placeholder: '请输入用户名', readonly: true, id: 'login' %> | |||||
| <span>登录名:</span> | |||||
| <%= text_field_tag :login, params[:login], placeholder: '请输入登录名', readonly: true, id: 'login' %> | |||||
| <p class="checkInfo loginCheck"><span></span></p> | <p class="checkInfo loginCheck"><span></span></p> | ||||
| </div> | </div> | ||||
| <div class="indexInfo"> | |||||
| <span>用户名称:</span> | |||||
| <%= text_field_tag :lastname, params[:lastname], placeholder: '登录平台后显示的用户名称', maxlength: 40, id: 'lastname' %> | |||||
| <p class="checkInfo lastnameCheck"><span></span></p> | |||||
| </div> | |||||
| <div class="indexInfo"> | <div class="indexInfo"> | ||||
| <span>邮箱:</span> | <span>邮箱:</span> | ||||
| <%= text_field_tag :mail, params[:mail], placeholder: '请输入绑定邮箱', maxlength: 40, id: 'email' %> | <%= text_field_tag :mail, params[:mail], placeholder: '请输入绑定邮箱', maxlength: 40, id: 'email' %> | ||||
| @@ -16,7 +21,7 @@ | |||||
| </div> | </div> | ||||
| <div class="indexInfo"> | <div class="indexInfo"> | ||||
| <span>密码:</span> | <span>密码:</span> | ||||
| <%= password_field_tag :password, '', placeholder: '请输入账号密码', id: 'password' %> | |||||
| <%= password_field_tag :password, '', placeholder: '输入EduCoder账号密码或新的密码',maxlength: 15, id: 'password' %> | |||||
| <p class="checkInfo passwordCheck"><span></span></p> | <p class="checkInfo passwordCheck"><span></span></p> | ||||
| </div> | </div> | ||||
| <div class="indexBtn"> | <div class="indexBtn"> | ||||
| @@ -29,6 +34,7 @@ | |||||
| function submitdata(){ | function submitdata(){ | ||||
| var login = $("#login").val(); | var login = $("#login").val(); | ||||
| var email = $("#email").val(); | var email = $("#email").val(); | ||||
| var lastname = $("#lastname").val(); | |||||
| var password = $("#password").val(); | var password = $("#password").val(); | ||||
| if(!login){ | if(!login){ | ||||
| @@ -37,6 +43,12 @@ | |||||
| }else{ | }else{ | ||||
| $(".loginCheck span").html(""); | $(".loginCheck span").html(""); | ||||
| } | } | ||||
| if(!lastname){ | |||||
| $(".lastnameCheck span").html("请输入用户名称"); | |||||
| return; | |||||
| }else{ | |||||
| $(".lastnameCheck span").html(""); | |||||
| } | |||||
| if(!email){ | if(!email){ | ||||
| $(".emailCheck span").html("请输入绑定的邮箱"); | $(".emailCheck span").html("请输入绑定的邮箱"); | ||||
| return; | return; | ||||
| @@ -56,6 +56,7 @@ json.setting do | |||||
| end | end | ||||
| json.common @common | json.common @common | ||||
| json.third_party @third_party | |||||
| if @top_system_notification.present? | if @top_system_notification.present? | ||||
| json.system_notification do | json.system_notification do | ||||
| @@ -10,6 +10,7 @@ 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_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_is_completed? | json.profile_completed @user.profile_is_completed? | ||||
| @@ -22,4 +23,4 @@ json.city @user.city | |||||
| json.custom_department @user.custom_department | json.custom_department @user.custom_department | ||||
| json.description @user.description | json.description @user.description | ||||
| json.(@user, :show_email, :show_department, :show_location) | json.(@user, :show_email, :show_department, :show_location) | ||||
| json.message_unread_total @message_unread_total | |||||
| json.message_unread_total @message_unread_total | |||||
| @@ -44,6 +44,11 @@ default: &default | |||||
| cate_id: '-1' | cate_id: '-1' | ||||
| callback_url: 'callback_url' | callback_url: 'callback_url' | ||||
| signature_key: 'test12345678' | signature_key: 'test12345678' | ||||
| educoder: | |||||
| client_id: 'e9ce4d5ba1698d6f7d01d8ee2959776c7a6d743ebe94da2341e288fd2fbf60aa' | |||||
| client_secret: '6ff84dd75eddd859c5bd0e7a791b58bc5ad1ba4fbb30bc9db37cb0baf9f33012' | |||||
| base_url: 'https://test-data.educoder.net' | |||||
| redirect_uri: 'https://testforgeplus.trustie.net/api/auth/educoder/callback' | |||||
| gitea: | gitea: | ||||
| access_key_id: '' | access_key_id: '' | ||||
| @@ -0,0 +1,16 @@ | |||||
| oauth_config = {} | |||||
| begin | |||||
| config = Rails.application.config_for(:configuration) | |||||
| oauth_config = config.dig('oauth', 'educoder') | |||||
| raise 'oauth educoder config missing' if oauth_config.blank? | |||||
| rescue => ex | |||||
| raise ex if Rails.env.production? | |||||
| puts %Q{\033[33m [warning] wechat oauth config or configuration.yml missing, | |||||
| please add it or execute 'cp config/configuration.yml.example config/configuration.yml' \033[0m} | |||||
| end | |||||
| EducoderOauth.client_id = oauth_config['client_id'] | |||||
| EducoderOauth.client_secret = oauth_config['client_secret'] | |||||
| EducoderOauth.base_url = oauth_config['base_url'] | |||||
| EducoderOauth.redirect_uri = oauth_config['redirect_uri'] | |||||