From 4fa1a433faff67f18a3139da55a833ce2494b5aa Mon Sep 17 00:00:00 2001 From: xiaoxiaoqiong Date: Mon, 11 Jul 2022 15:52:38 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=8Ewebhook=E6=8E=A5?= =?UTF-8?q?=E6=94=B6=E4=BB=93=E5=BA=93=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/commit_logs_controller.rb | 23 +++++++++++++++++++ app/models/commit_log.rb | 6 +++++ config/routes.rb | 2 ++ .../20220711061848_create_commit_logs.rb | 17 ++++++++++++++ 4 files changed, 48 insertions(+) create mode 100644 app/controllers/commit_logs_controller.rb create mode 100644 app/models/commit_log.rb create mode 100644 db/migrate/20220711061848_create_commit_logs.rb diff --git a/app/controllers/commit_logs_controller.rb b/app/controllers/commit_logs_controller.rb new file mode 100644 index 000000000..71eada879 --- /dev/null +++ b/app/controllers/commit_logs_controller.rb @@ -0,0 +1,23 @@ +class CommitLogsController < ApplicationController + + def create + tip_exception "未认证" unless params[:token].to_s == "7917908927b6f1b792f2027a08a8b24a2de42c1692c2fd45da0dee5cf90a5af5" + ref = params[:ref] + commit_id = params[:commits][0][:id] + message = params[:commits][0][:message] + user_name = params[:message][0][:committer][:username] + user_mail = params[:message][0][:committer][:email] + user = User.find_by(mail: user_mail) + user = User.find_by(login: user_name) if user.blank? + + repository_id = params[:repository][:id] + repository_name = params[:repository][:name] + repository_full_name = params[:repository][:full_name] + project = Project.where(identifier: repository_name).where(user_id: user.id)&.first + project = Project.where(identifier: repository_name).where(gpid: repository_id)&.first if project.blank? + CommitLog.create(user: user, project: project, repository_id: repository_id, + name: repository_name, full_name: repository_full_name, + ref: ref, commit_id: commit_id, message: message) + + end +end diff --git a/app/models/commit_log.rb b/app/models/commit_log.rb new file mode 100644 index 000000000..9b51b0631 --- /dev/null +++ b/app/models/commit_log.rb @@ -0,0 +1,6 @@ +class CommitLog < ApplicationRecord + belongs_to :user + belongs_to :project + belongs_to :repository + +end diff --git a/config/routes.rb b/config/routes.rb index 1f68de4b8..3a5fa745e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -992,6 +992,8 @@ Rails.application.routes.draw do get 'oauth/get_code', to: 'oauth#get_code' get 'oauth/get_token_callback', to: 'oauth#get_token_callback' + resources :commit_logs, :only => [:create] + root 'main#index' diff --git a/db/migrate/20220711061848_create_commit_logs.rb b/db/migrate/20220711061848_create_commit_logs.rb new file mode 100644 index 000000000..e0ef451af --- /dev/null +++ b/db/migrate/20220711061848_create_commit_logs.rb @@ -0,0 +1,17 @@ +class CreateCommitLogs < ActiveRecord::Migration[5.2] + def change + create_table :commit_logs do |t| + t.references :user + t.references :project + t.integer :repository_id + t.string :name + t.string :full_name + t.string :commit_id + t.string :ref + t.string :message + t.timestamps + end + + add_index :commit_logs, :commit_id + end +end From 4c7498a0469e966d0ce3eab9b90d1141e60358af Mon Sep 17 00:00:00 2001 From: xiaoxiaoqiong Date: Mon, 11 Jul 2022 15:57:46 +0800 Subject: [PATCH 2/6] =?UTF-8?q?fixed=20=E5=A2=9E=E5=8A=A0=E4=BB=8Ewebhook?= =?UTF-8?q?=E6=8E=A5=E6=94=B6=E4=BB=93=E5=BA=93=E6=97=A5=E5=BF=97=E8=AE=B0?= =?UTF-8?q?=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/commit_logs_controller.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/controllers/commit_logs_controller.rb b/app/controllers/commit_logs_controller.rb index 71eada879..2cdb4232a 100644 --- a/app/controllers/commit_logs_controller.rb +++ b/app/controllers/commit_logs_controller.rb @@ -5,8 +5,8 @@ class CommitLogsController < ApplicationController ref = params[:ref] commit_id = params[:commits][0][:id] message = params[:commits][0][:message] - user_name = params[:message][0][:committer][:username] - user_mail = params[:message][0][:committer][:email] + user_name = params[:commits][0][:committer][:username] + user_mail = params[:commits][0][:committer][:email] user = User.find_by(mail: user_mail) user = User.find_by(login: user_name) if user.blank? From 221c439a1dcb412e4ab2963fbd4bcb7d3252b4b1 Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 11 Jul 2022 17:11:13 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20oauth2=20token=20?= =?UTF-8?q?=E7=A7=81=E6=9C=89=E4=BB=93=E5=BA=93=E6=97=A0=E6=B3=95=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 67 ++++++++++++----------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index d1119914a..452af0ad3 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -170,10 +170,6 @@ class ApplicationController < ActionController::Base # 未授权的捕捉407,弹试用申请弹框 def require_login #6.13 -hs - if request.headers["Authorization"].present? - tip_exception(401, "请登录后再操作!") unless valid_doorkeeper_token? - User.current = User.find_by(id: @doorkeeper_token.resource_owner_id) if @doorkeeper_token.present? - end tip_exception(401, "请登录后再操作") unless User.current.logged? end @@ -252,42 +248,47 @@ class ApplicationController < ActionController::Base #return if params[:controller] == "main" # Find the current user #Rails.logger.info("current_laboratory is #{current_laboratory} domain is #{request.subdomain}") - User.current = find_current_user - uid_logger("user_setup: " + (User.current.logged? ? "#{User.current.try(:login)} (id=#{User.current.try(:id)})" : "anonymous")) + if request.headers["Authorization"].present? + tip_exception(401, "请登录后再操作!") unless valid_doorkeeper_token? + User.current = User.find_by(id: @doorkeeper_token.resource_owner_id) if @doorkeeper_token.present? + else + User.current = find_current_user + uid_logger("user_setup: " + (User.current.logged? ? "#{User.current.try(:login)} (id=#{User.current.try(:id)})" : "anonymous")) - # 开放课程通过链接访问的用户 - if !User.current.logged? && !params[:chinaoocTimestamp].blank? && !params[:websiteName].blank? && !params[:chinaoocKey].blank? - content = "#{OPENKEY}#{params[:websiteName]}#{params[:chinaoocTimestamp]}" + # 开放课程通过链接访问的用户 + if !User.current.logged? && !params[:chinaoocTimestamp].blank? && !params[:websiteName].blank? && !params[:chinaoocKey].blank? + content = "#{OPENKEY}#{params[:websiteName]}#{params[:chinaoocTimestamp]}" - if Digest::MD5.hexdigest(content) == params[:chinaoocKey] - user = open_class_user - if user - start_user_session(user) - set_autologin_cookie(user) + if Digest::MD5.hexdigest(content) == params[:chinaoocKey] + user = open_class_user + if user + start_user_session(user) + set_autologin_cookie(user) + end + User.current = user end - User.current = user end - end - # if !User.current.logged? && Rails.env.development? - # user = User.find 1 - # User.current = user - # start_user_session(user) - # end + # if !User.current.logged? && Rails.env.development? + # user = User.find 1 + # User.current = user + # start_user_session(user) + # end - # 测试版前端需求 - logger.info("subdomain:#{request.subdomain}") - if request.subdomain != "www" - if params[:debug] == 'teacher' #todo 为了测试,记得讲debug删除 - User.current = User.find 81403 - elsif params[:debug] == 'student' - User.current = User.find 8686 - elsif params[:debug] == 'admin' - logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....." - user = User.find 36480 - User.current = user - cookies.signed[:user_id] = user.id + # 测试版前端需求 + logger.info("subdomain:#{request.subdomain}") + if request.subdomain != "www" + if params[:debug] == 'teacher' #todo 为了测试,记得讲debug删除 + User.current = User.find 81403 + elsif params[:debug] == 'student' + User.current = User.find 8686 + elsif params[:debug] == 'admin' + logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....." + user = User.find 36480 + User.current = user + cookies.signed[:user_id] = user.id + end end end # User.current = User.find 81403 From 915e689ef99809264c5751159dead8f2561392ce Mon Sep 17 00:00:00 2001 From: xiaoxiaoqiong Date: Mon, 11 Jul 2022 18:19:08 +0800 Subject: [PATCH 4/6] =?UTF-8?q?oauth2=20=E5=A2=9E=E5=8A=A0client=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/base_controller.rb | 11 +++++++++-- app/controllers/application_controller.rb | 10 +++++++++- config/initializers/doorkeeper.rb | 8 ++++---- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/app/controllers/api/v1/base_controller.rb b/app/controllers/api/v1/base_controller.rb index 9170975b5..022f17ca7 100644 --- a/app/controllers/api/v1/base_controller.rb +++ b/app/controllers/api/v1/base_controller.rb @@ -7,8 +7,15 @@ class Api::V1::BaseController < ApplicationController skip_before_action :user_setup protected - def current_user - User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token + def current_user + #client方法对接,需要一直带着用户标识uid + if doorkeeper_token && doorkeeper_token.resource_owner_id.blank? + return User.anonymous if params[:uid].nil? + # tip_exception('缺少用户标识!') if params[:uid].nil? + User.current = User.find(params[:uid]) + else + User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token + end end def require_manager_above diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 452af0ad3..fb1968f28 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -250,7 +250,15 @@ class ApplicationController < ActionController::Base #Rails.logger.info("current_laboratory is #{current_laboratory} domain is #{request.subdomain}") if request.headers["Authorization"].present? tip_exception(401, "请登录后再操作!") unless valid_doorkeeper_token? - User.current = User.find_by(id: @doorkeeper_token.resource_owner_id) if @doorkeeper_token.present? + if @doorkeeper_token.present? + # client方法对接,需要一直带着用户标识uid + if @doorkeeper_token.resource_owner_id.blank? + tip_exception(-1, "缺少用户标识!") if params[:uid].nil? + User.current = User.find(params[:uid]) + else + User.current = User.find_by(id: @doorkeeper_token.resource_owner_id) + end + end else User.current = find_current_user uid_logger("user_setup: " + (User.current.logged? ? "#{User.current.try(:login)} (id=#{User.current.try(:id)})" : "anonymous")) diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb index b43c1a46c..dc10c24f2 100644 --- a/config/initializers/doorkeeper.rb +++ b/config/initializers/doorkeeper.rb @@ -513,7 +513,7 @@ Doorkeeper::JWT.configure do # about the user. Defaults to a randomly generated token in a hash: # { token: "RANDOM-TOKEN" } token_payload do |opts| - user = User.find(opts[:resource_owner_id]) + user = User.find_by(id: opts[:resource_owner_id]) { iss: 'GitLink', @@ -523,9 +523,9 @@ Doorkeeper::JWT.configure do jti: SecureRandom.uuid, user: { - id: user.id, - login: user.login, - mail: user.mail + id: user&.id, + login: user&.login, + mail: user&.mail } } end From d7a970e7d57fe556c2c82c44e66037439bb1184c Mon Sep 17 00:00:00 2001 From: yystopf Date: Mon, 11 Jul 2022 18:50:13 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20oauth2=20=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=BB=9F=E4=B8=80=E6=94=B9=E4=B8=BAapplication?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=99=A8=E9=87=8C=E7=9A=84user=5Fsetup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/base_controller.rb | 26 ++++++++++++----------- config/initializers/doorkeeper.rb | 3 ++- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/app/controllers/api/v1/base_controller.rb b/app/controllers/api/v1/base_controller.rb index 022f17ca7..d97123f45 100644 --- a/app/controllers/api/v1/base_controller.rb +++ b/app/controllers/api/v1/base_controller.rb @@ -3,20 +3,22 @@ class Api::V1::BaseController < ApplicationController include Api::ProjectHelper include Api::UserHelper - before_action :doorkeeper_authorize! - skip_before_action :user_setup + # before_action :doorkeeper_authorize! + # skip_before_action :user_setup protected - def current_user - #client方法对接,需要一直带着用户标识uid - if doorkeeper_token && doorkeeper_token.resource_owner_id.blank? - return User.anonymous if params[:uid].nil? - # tip_exception('缺少用户标识!') if params[:uid].nil? - User.current = User.find(params[:uid]) - else - User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token - end - end + # def current_user + # #client方法对接,需要一直带着用户标识uid + # Rails.logger.info doorkeeper_token + # if doorkeeper_token && doorkeeper_token.resource_owner_id.blank? + # # return User.anonymous if params[:uid].nil? + # # tip_exception("2222") + # # return render_error('缺少用户标识!') if params[:uid].nil? + # User.current = User.find(params[:uid]) + # else + # User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token + # end + # end def require_manager_above @project = load_project diff --git a/config/initializers/doorkeeper.rb b/config/initializers/doorkeeper.rb index dc10c24f2..b11b32dea 100644 --- a/config/initializers/doorkeeper.rb +++ b/config/initializers/doorkeeper.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true Doorkeeper.configure do + base_controller 'ApplicationController' # Change the ORM that doorkeeper will use (requires ORM extensions installed). # Check the list of supported ORMs here: https://github.com/doorkeeper-gem/doorkeeper#orms orm :active_record @@ -20,7 +21,7 @@ Doorkeeper.configure do access_token_generator '::Doorkeeper::JWT' admin_authenticator do - user = User.find_by_id(session[:www_user_id]) + user = current_user unless user && user.admin_or_business? redirect_to root_url end From 25375b32c2167825eec214c62db6b5c0ec90b3d3 Mon Sep 17 00:00:00 2001 From: xiaoxiaoqiong Date: Wed, 13 Jul 2022 12:47:39 +0800 Subject: [PATCH 6/6] =?UTF-8?q?fixed=20oauth2=20=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=8C=BA=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index fb1968f28..82aa95879 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -248,7 +248,7 @@ class ApplicationController < ActionController::Base #return if params[:controller] == "main" # Find the current user #Rails.logger.info("current_laboratory is #{current_laboratory} domain is #{request.subdomain}") - if request.headers["Authorization"].present? + if request.headers["Authorization"].present? && request.headers["Authorization"].start_with?('Bearer') tip_exception(401, "请登录后再操作!") unless valid_doorkeeper_token? if @doorkeeper_token.present? # client方法对接,需要一直带着用户标识uid