| @@ -11,6 +11,7 @@ module LoginHelper | |||
| def set_autologin_cookie(user) | |||
| token = Token.get_or_create_permanent_login_token(user, "autologin") | |||
| Rails.logger.info "###### def set_autologin_cookie and get_or_create_permanent_login_token result: #{token&.value}" | |||
| cookie_options = { | |||
| :value => token.value, | |||
| :expires => 1.month.from_now, | |||
| @@ -21,9 +22,11 @@ module LoginHelper | |||
| if edu_setting('cookie_domain').present? | |||
| cookie_options = cookie_options.merge(domain: edu_setting('cookie_domain')) | |||
| end | |||
| unless cookies[autologin_cookie_name].present? | |||
| cookies[autologin_cookie_name] = cookie_options | |||
| end | |||
| # unless cookies[autologin_cookie_name].present? | |||
| # cookies[autologin_cookie_name] = cookie_options | |||
| # end | |||
| cookies[autologin_cookie_name] = cookie_options | |||
| # for action cable | |||
| cookies.signed[:user_id] ||= user.id | |||
| @@ -2,6 +2,7 @@ class Oauth::EducoderController < Oauth::BaseController | |||
| def bind | |||
| begin | |||
| login = params[:login] | |||
| mail = params[:mail] || nil | |||
| callback_url = params[:callback_url] | |||
| token = params[:token] | |||
| @@ -10,26 +11,21 @@ class Oauth::EducoderController < Oauth::BaseController | |||
| open_user= OpenUsers::Educoder.find_by(uid: login) | |||
| if open_user.present? && open_user.user.present? && open_user.user.email_binded? | |||
| if current_user != open_user.user | |||
| logout_user | |||
| successful_authentication(open_user.user) | |||
| end | |||
| Rails.logger.info "######## open_user exist and open_user.user exsit and email is binded ok" | |||
| successful_authentication(open_user.user) | |||
| redirect_to callback_url | |||
| else | |||
| if current_user.blank? || !current_user.logged? | |||
| user = User.find_by(login: login) | |||
| if user | |||
| successful_authentication(user) | |||
| OpenUsers::Educoder.create!(user: user, uid: user.login) | |||
| Rails.logger.info "######## open user not exits" | |||
| user = User.find_by('login = ? or mail = ?', login, mail) | |||
| if user.is_a?(User) | |||
| OpenUsers::Educoder.create!(user: user, uid: login) | |||
| successful_authentication(user) | |||
| redirect_to callback_url | |||
| else | |||
| redirect_to oauth_register_path(login: login, callback_url: callback_url) | |||
| end | |||
| else | |||
| # forge平台已登录 | |||
| OpenUsers::Educoder.create!(user: current_user, uid: login) | |||
| redirect_to callback_url | |||
| else | |||
| redirect_to oauth_register_path(login: login, callback_url: callback_url) | |||
| end | |||
| end | |||
| rescue WechatOauth::Error => ex | |||
| @@ -65,22 +65,22 @@ class OauthController < ApplicationController | |||
| platform = params[:plathform] || 'educoder' | |||
| if User.where(mail: email).exists? | |||
| render_error("该邮箱已使用过.") and return | |||
| end | |||
| result = autologin_register(login, email, password, platform) | |||
| logger.info "[Oauth educoer] =====#{result}" | |||
| if result[:message].blank? | |||
| logger.info "[Oauth educoer] ====auto_register success" | |||
| user = User.find result[:user][:id] | |||
| successful_authentication(user) | |||
| OpenUsers::Educoder.create!(user: user, uid: user.login) | |||
| render_ok({callback_url: callback_url}) | |||
| # redirect_to callback_url | |||
| render json: { email_exist: '该邮箱已使用过' } | |||
| else | |||
| logger.info "[Oauth educoer] ====auto_register failed." | |||
| render :action => "auto_register" | |||
| result = autologin_register(login, email, password, platform) | |||
| logger.info "[Oauth educoer] =====#{result}" | |||
| if result[:message].blank? | |||
| logger.info "[Oauth educoer] ====auto_register success" | |||
| user = User.find result[:user][:id] | |||
| successful_authentication(user) | |||
| OpenUsers::Educoder.create!(user: user, uid: user.login) | |||
| render json: { callback_url: callback_url } | |||
| # redirect_to callback_url | |||
| else | |||
| logger.info "[Oauth educoer] ====auto_register failed." | |||
| render :action => "auto_register" | |||
| end | |||
| end | |||
| end | |||
| @@ -149,8 +149,10 @@ class UsersController < ApplicationController | |||
| def trustie_related_projects | |||
| projects = Project.includes(:owner, :members, :project_score).where(id: params[:ids]).order("updated_on desc") | |||
| projects_json = [] | |||
| domain_url = EduSetting.get('host_name') + '/projects' | |||
| if projects.present? | |||
| projects.each do |p| | |||
| project_url = "/#{p.owner.login}/#{p.identifier}" | |||
| pj = { | |||
| id: p.id, | |||
| name: p.name, | |||
| @@ -165,6 +167,10 @@ class UsersController < ApplicationController | |||
| members_count: p&.members.size, | |||
| issues_count: p.issues_count - p.pull_requests_count, | |||
| commits_count: p&.project_score&.changeset_num.to_i, | |||
| http_url: domain_url + project_url, | |||
| http_collaborator_url: domain_url + project_url + "/setting/collaborator", | |||
| http_issues_url: domain_url + project_url + "/issues", | |||
| http_commits_url: domain_url + project_url + "/commits", | |||
| project_score: p&.project_score.present? ? p&.project_score&.as_json(:except=>[:created_at, :updated_at]).merge!(commit_time: format_time(p&.project_score&.commit_time)) : {} | |||
| } | |||
| projects_json.push(pj) | |||
| @@ -177,7 +183,7 @@ class UsersController < ApplicationController | |||
| def trustie_projects | |||
| user_id = User.select(:id, :login).where(login: params[:login])&.first&.id | |||
| projects = Project.visible | |||
| projects = projects.joins(:members).where(members: { user_id: user_id }) | |||
| search = params[:search].to_s.strip | |||
| @@ -11,16 +11,10 @@ class OauthEducoderForm | |||
| validate :check_auth! | |||
| def check_auth! | |||
| Rails.logger.info "====login: #{login} ====token: #{token} ==== callback_url: #{callback_url}" | |||
| secret = OauthEducoder.config[:access_key_secret] | |||
| Rails.logger.info "==== secret: #{secret}" | |||
| before_raw_pay_load = Digest::SHA1.hexdigest("#{login}#{secret}#{Time.now.to_i/60-1}") | |||
| now_raw_pay_load = Digest::SHA1.hexdigest("#{login}#{secret}#{Time.now.to_i/60}") | |||
| Rails.logger.info "==== before_raw_pay_load: #{before_raw_pay_load}" | |||
| Rails.logger.info "==== now_raw_pay_load: #{now_raw_pay_load}" | |||
| Rails.logger.info "==== token: #{token}" | |||
| if token != now_raw_pay_load && token != before_raw_pay_load | |||
| raise '你的请求无效值无效.' | |||
| end | |||
| @@ -27,8 +27,10 @@ class Token < ActiveRecord::Base | |||
| def self.get_or_create_permanent_login_token(user, type) | |||
| token = Token.get_token_from_user(user, type) | |||
| Rails.logger.info "###### Token.get_token_from_user result: #{token&.value}" | |||
| unless token | |||
| token = Token.create(:user => user, :action => type) | |||
| Rails.logger.info "###### Token.get_token_from_user is nul and agine create token: #{token&.value}" | |||
| else | |||
| token.update_attribute(:created_on, Time.now) | |||
| end | |||
| @@ -37,8 +39,10 @@ class Token < ActiveRecord::Base | |||
| def self.get_token_from_user(user, action) | |||
| token = Token.where(:action => action, :user_id => user).first | |||
| Rails.logger.info "###### self.get_token_from_user query result: #{token&.value}" | |||
| unless token | |||
| token = Token.create!(user_id: user.id, action: action) | |||
| Rails.logger.info "###### self.get_token_from_user query is nil and create result: #{token&.value}" | |||
| end | |||
| token | |||
| end | |||
| @@ -60,7 +60,7 @@ | |||
| success: function(data) { | |||
| console.log(data) | |||
| if (data) { | |||
| if(data.message){ | |||
| if(data.email_exist){ | |||
| $(".emailCheck span").html("该邮箱已存在."); | |||
| return; | |||
| } | |||
| @@ -1 +1 @@ | |||
| json.extract! @project, :id, :name | |||
| json.extract! @project, :id, :name, :identifier | |||