diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 46ea83a2..b06dab70 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -27,6 +27,7 @@ class AccountsController < ApplicationController @user.gitea_uid = gitea_user['id'] if @user.save! UserExtension.create!(user_id: @user.id) + @user.create_wallet(balance: 0) render_ok({user: {id: @user.id, token: @user.gitea_token}}) end else diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 80026ec6..3721a2ea 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -9,6 +9,7 @@ class ApplicationController < ActionController::Base include GitHelper include LoggerHelper include LoginHelper + include UpdateHelper protect_from_forgery prepend: true, unless: -> { request.format.json? } @@ -371,7 +372,13 @@ class ApplicationController < ActionController::Base def user_trace_log user = current_user # print("*********************url:", request.url, "****routes", request.request_method) - Rails.logger.user_trace.info("{id: #{user.id}, login: #{user.login}, url: #{request.url}, params: #{params}, response_code: #{response.code}, time: #{Time.now}}") + Rails.logger.user_trace.info("{id: #{user.id}, login: #{user.login}, url: #{request.url}, method: #{request.method}, params: #{params}, response_code: #{response.code}, time: #{Time.now}}") + end + + def user_trace_update_log(old_value_hash) + user = current_user + str = "{id: #{user.id}, login: #{user.login}, url: #{request.url}, method: #{request.method}, params: #{params.merge(old_value: old_value_hash)}, response_code: #{response.code}, time: #{Time.now}}" + Rails.logger.user_trace.info(str) end def try_to_autologin diff --git a/app/controllers/forks_controller.rb b/app/controllers/forks_controller.rb index 93772cd1..54d8bc52 100644 --- a/app/controllers/forks_controller.rb +++ b/app/controllers/forks_controller.rb @@ -1,9 +1,12 @@ class ForksController < ApplicationController before_action :require_login, :find_project_with_id before_action :authenticate_project!, :authenticate_user! + skip_after_action :user_trace_log, only: [:create] def create @new_project = Projects::ForkService.new(current_user, @project, params[:organization]).call + user = current_user + Rails.logger.user_trace.info("{id: #{user.id}, login: #{user.login}, url: #{request.url}, method: #{request.method}, params: #{params.merge(forkee: @new_project.id)}, response_code: #{response.code}, time: #{Time.now}}") end private diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb index 985f118d..5ecbd769 100644 --- a/app/controllers/issues_controller.rb +++ b/app/controllers/issues_controller.rb @@ -8,6 +8,8 @@ class IssuesController < ApplicationController before_action :set_issue, only: [:edit, :update, :destroy, :show, :copy, :close_issue, :lock_issue] before_action :get_branches, only: [:new, :edit] + skip_after_action :user_trace_log, only: [:update] + include ApplicationHelper include TagChosenHelper @@ -161,7 +163,11 @@ class IssuesController < ApplicationController end end + user = current_user + # issue_json = issue_send_params(@issue).except(:issue_classify, :author_id, :project_id).to_json + issue_hash = old_value_to_hash(@issue, params) if @issue.update_attributes(issue_params) + user_trace_update_log(issue_hash) issue_files = params[:attachment_ids] change_files = false issue_file_ids = [] diff --git a/app/controllers/journals_controller.rb b/app/controllers/journals_controller.rb index 6917974b..555d7928 100644 --- a/app/controllers/journals_controller.rb +++ b/app/controllers/journals_controller.rb @@ -3,6 +3,7 @@ class JournalsController < ApplicationController before_action :set_issue before_action :check_issue_permission before_action :set_journal, only: [:destroy, :edit, :update] + skip_after_action :user_trace_log, only: [:update] def index @page = params[:page] || 1 @@ -67,7 +68,9 @@ class JournalsController < ApplicationController def update content = params[:content] if content.present? + old_value = old_value_to_hash(@journal, params) if @journal.update_attribute(:notes, content) + user_trace_update_log(old_value) normal_status(0, "更新成功") else normal_status(-1, "更新失败") diff --git a/app/controllers/members_controller.rb b/app/controllers/members_controller.rb index 0a47f6a0..f9e8eda5 100644 --- a/app/controllers/members_controller.rb +++ b/app/controllers/members_controller.rb @@ -5,6 +5,7 @@ class MembersController < ApplicationController before_action :operate!, except: %i[index] before_action :check_member_exists!, only: %i[create] before_action :check_member_not_exists!, only: %i[remove change_role] + skip_after_action :user_trace_log, only: [:change_role] def create interactor = Projects::AddMemberInteractor.call(@project.owner, @project, @user) @@ -34,7 +35,9 @@ class MembersController < ApplicationController end def change_role + old_value = @project.members.where(user_id: params[:user_id])[0].roles.last.name interactor = Projects::ChangeMemberRoleInteractor.call(@project.owner, @project, @user, params[:role]) + user_trace_update_log(old_value) render_response(interactor) rescue Exception => e uid_logger_error(e.message) diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index dec45137..3be17827 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -4,6 +4,9 @@ class PullRequestsController < ApplicationController before_action :set_repository before_action :find_pull_request, except: [:index, :new, :create, :check_can_merge,:get_branches,:create_merge_infos] # before_action :get_relatived, only: [:edit] + # + skip_after_action :user_trace_log, only: [:update] + include TagChosenHelper include ApplicationHelper @@ -127,8 +130,18 @@ class PullRequestsController < ApplicationController end end + old_issue_value = old_value_to_hash(@issue, @issue_params) + old_pr_value = old_value_to_hash(@pull_request, @local_params.compact) + old_value = {issue: old_issue_value, pull_request: old_pr_value} + puts("------------------------------\nissue = #{@issue.attributes}\n") + puts("issue_params = #{@issue_params}\n") + puts("pr = #{@pull_request.attributes}\n") + puts("local_params = #{@local_params}\n") + puts("old_issue = #{old_issue_value}\nold_pr = #{old_pr_value}\nold_value = #{old_value}\n------------------------------\n") + if @issue.update_attributes(@issue_params) if @pull_request.update_attributes(@local_params.compact) + user_trace_update_log(old_value) gitea_request = Gitea::PullRequest::UpdateService.new(@project.owner, @repository.try(:identifier), @requests_params, @pull_request.try(:gpid)).call if gitea_request if params[:issue_tag_ids].present? diff --git a/app/controllers/sponsor_tiers_controller.rb b/app/controllers/sponsor_tiers_controller.rb index ccf21cc4..4a552b0c 100644 --- a/app/controllers/sponsor_tiers_controller.rb +++ b/app/controllers/sponsor_tiers_controller.rb @@ -1,5 +1,6 @@ class SponsorTiersController < ApplicationController before_action :set_sponsor_tier, only: [:show, :edit, :update, :destroy] + before_action :check_sponsor, only: [:show] # GET /sponsor_tiers # GET /sponsor_tiers.json @@ -12,7 +13,7 @@ class SponsorTiersController < ApplicationController # GET /sponsor_tiers/1 # GET /sponsor_tiers/1.json def show - @check_sponsorship = Sponsorship.where("sponsor_id=? AND developer_id=?", current_user.id, @sponsor_tier.user) + end # GET /sponsor_tiers/new @@ -29,12 +30,14 @@ class SponsorTiersController < ApplicationController # POST /sponsor_tiers.json def create # print("------------\n", sponsor_tier_params, "\n------------\n") + @check_sponsorship = nil @sponsor_tier = SponsorTier.new(sponsor_tier_params) respond_to do |format| if @sponsor_tier.save format.html { redirect_to @sponsor_tier, notice: 'Sponsor tier was successfully created.' } format.json { render :show, status: :created, location: @sponsor_tier } + # render json: {status: 1, message: '创建成功' } else format.html { render :new } format.json { render json: @sponsor_tier.errors, status: :unprocessable_entity } @@ -45,14 +48,17 @@ class SponsorTiersController < ApplicationController # PATCH/PUT /sponsor_tiers/1 # PATCH/PUT /sponsor_tiers/1.json def update + @check_sponsorship = nil respond_to do |format| if User.current.id == @sponsor_tier.user_id && @sponsor_tier.update(sponsor_tier_params) format.html { redirect_to @sponsor_tier, notice: 'Sponsor tier was successfully updated.' } format.json { render :show, status: :ok, location: @sponsor_tier } + # render json: {status: 1, message: '修改成功' } else format.html { render :edit } format.json { render json: @sponsor_tier.errors, status: :unprocessable_entity } # format.json { render status: :unprocessable_entity } + # render json: {status: -1, message: '修改失败' } end end end @@ -73,6 +79,10 @@ class SponsorTiersController < ApplicationController private # Use callbacks to share common setup or constraints between actions. + def check_sponsor + @check_sponsorship = Sponsorship.where("sponsor_id=? AND developer_id=?", current_user.id, @sponsor_tier.user) + end + def set_sponsor_tier @sponsor_tier = SponsorTier.find(params[:id]) end diff --git a/app/controllers/sponsorships_controller.rb b/app/controllers/sponsorships_controller.rb index 0a02df40..07c56b98 100644 --- a/app/controllers/sponsorships_controller.rb +++ b/app/controllers/sponsorships_controller.rb @@ -1,6 +1,9 @@ class SponsorshipsController < ApplicationController before_action :set_sponsorship, only: [:show, :edit, :update, :destroy] - + # before_action :require_login, except: [:index, :stopped, :sponsored, :sponsoring, :stopped_sponsored, :stopped_sponsoring] + before_action :require_login, only: [:show, :new, :create, :edit, :update, :destroy] + skip_after_action :user_trace_log, only: [:update] + # GET /sponsorships # GET /sponsorships.json def index @@ -17,6 +20,9 @@ class SponsorshipsController < ApplicationController else @sponsorships = Sponsorship.where("developer_id=? AND visible=1", params[:id]) end + sort = params[:sort_by] || "created_at" + sort_direction = params[:sort_direction] || "desc" + @sponsorships = @sponsorships.reorder("#{sort} #{sort_direction}") @total = @sponsorships.length @sponsorships = kaminari_paginate(@sponsorships) end @@ -27,6 +33,9 @@ class SponsorshipsController < ApplicationController else @sponsorships = Sponsorship.where("sponsor_id=? AND visible=1", params[:id]) end + sort = params[:sort_by] || "created_at" + sort_direction = params[:sort_direction] || "desc" + @sponsorships = @sponsorships.reorder("#{sort} #{sort_direction}") @total = @sponsorships.length @sponsorships = kaminari_paginate(@sponsorships) end @@ -37,6 +46,9 @@ class SponsorshipsController < ApplicationController else @stopped_sponsorships = StoppedSponsorship.where("developer_id=? AND visible=1", params[:id]) end + sort = params[:sort_by] || "created_at" + sort_direction = params[:sort_direction] || "desc" + @stopped_sponsorships = @stopped_sponsorships.reorder("#{sort} #{sort_direction}") @total = @stopped_sponsorships.length @stopped_sponsorships = kaminari_paginate(@stopped_sponsorships) end @@ -47,6 +59,9 @@ class SponsorshipsController < ApplicationController else @stopped_sponsorships = StoppedSponsorship.where("sponsor_id=? AND visible=1", params[:id]) end + sort = params[:sort_by] || "created_at" + sort_direction = params[:sort_direction] || "desc" + @stopped_sponsorships = @stopped_sponsorships.reorder("#{sort} #{sort_direction}") @total = @stopped_sponsorships.length @stopped_sponsorships = kaminari_paginate(@stopped_sponsorships) end @@ -116,7 +131,10 @@ class SponsorshipsController < ApplicationController if @sponsorship.sponsor.id != current_user.id return render json: {status: -1, message: '没有权限' } end + old_value = old_value_to_hash(@sponsorship, params) + # params.delete :sponsorship if @sponsorship.update(sponsorship_params) + user_trace_update_log(old_value) render json: {status: 1, message: '修改成功' } else render json: {status: -1, message: '修改失败' } diff --git a/app/controllers/version_releases_controller.rb b/app/controllers/version_releases_controller.rb index 6717bf06..b28aef7c 100644 --- a/app/controllers/version_releases_controller.rb +++ b/app/controllers/version_releases_controller.rb @@ -3,6 +3,7 @@ class VersionReleasesController < ApplicationController before_action :set_user_and_project before_action :require_login, except: [:index] before_action :find_version , only: [:edit, :update, :destroy] + skip_after_action :user_trace_log, only: [:update] def index version_releases = Gitea::Versions::ListService.new(@user.gitea_token, @user.try(:login), @repository.try(:identifier)).call @@ -78,14 +79,14 @@ class VersionReleasesController < ApplicationController ActiveRecord::Base.transaction do begin version_params = releases_params - + old_value = old_value_to_hash(@version, version_params) if @version.update_attributes!(version_params) create_attachments(params[:attachment_ids], @version) if params[:attachment_ids].present? git_version_release = Gitea::Versions::UpdateService.new(@user.gitea_token, @user.try(:login), @repository.try(:identifier), version_params, @version.try(:version_gid)).call unless git_version_release raise Error, "更新失败" end - + user_trace_update_log(old_value) normal_status(0, "更新成功") else normal_status(-1, "更新失败") diff --git a/app/helpers/update_helper.rb b/app/helpers/update_helper.rb new file mode 100644 index 00000000..15799180 --- /dev/null +++ b/app/helpers/update_helper.rb @@ -0,0 +1,6 @@ +module UpdateHelper + def old_value_to_hash(old_value, params) + params = params.dup.stringify_keys + old_value.attributes.select { |key, value| params.key?(key) } + end +end \ No newline at end of file diff --git a/app/views/sponsor_tiers/show.json.jbuilder b/app/views/sponsor_tiers/show.json.jbuilder index 5b32c1e1..9f929c04 100644 --- a/app/views/sponsor_tiers/show.json.jbuilder +++ b/app/views/sponsor_tiers/show.json.jbuilder @@ -1,7 +1,7 @@ json.tier do json.partial! "sponsor_tiers/sponsor_tier", sponsor_tier: @sponsor_tier end -if @check_sponsorship.length.zero? +if @check_sponsorship.nil? || @check_sponsorship.length.zero? json.is_sponsoring false else json.is_sponsoring true