| @@ -47,7 +47,7 @@ class MembersController < ApplicationController | |||||
| end | end | ||||
| def member_exists? | def member_exists? | ||||
| @project.member?(params[:user_id]) | |||||
| @project.members.exists?(user_id: params[:user_id]) | |||||
| end | end | ||||
| def operate! | def operate! | ||||
| @@ -59,6 +59,6 @@ class MembersController < ApplicationController | |||||
| end | end | ||||
| def check_member_not_exists! | def check_member_not_exists! | ||||
| return render_error("user_id为#{params[:user_id]}的用户还不是项目成员") unless @project.member?(params[:user_id]) | |||||
| return render_error("user_id为#{params[:user_id]}的用户还不是项目成员") unless member_exists? | |||||
| end | end | ||||
| end | end | ||||
| @@ -29,6 +29,11 @@ class Organizations::TeamUsersController < Organizations::BaseController | |||||
| ActiveRecord::Base.transaction do | ActiveRecord::Base.transaction do | ||||
| @team_user.destroy! | @team_user.destroy! | ||||
| Gitea::Organization::TeamUser::DeleteService.call(@organization.gitea_token, @team.gtid, @operate_user.login) | Gitea::Organization::TeamUser::DeleteService.call(@organization.gitea_token, @team.gtid, @operate_user.login) | ||||
| org_team_users = @organization.team_users.where(user_id: @operate_user.id) | |||||
| unless org_team_users.present? | |||||
| @organization.organization_users.find_by(user_id: @operate_user.id).destroy! | |||||
| Gitea::Organization::OrganizationUser::DeleteService.call(@organization.gitea_token, @organization.login, @operate_user.login) | |||||
| end | |||||
| render_ok | render_ok | ||||
| end | end | ||||
| rescue Exception => e | rescue Exception => e | ||||
| @@ -43,6 +48,11 @@ class Organizations::TeamUsersController < Organizations::BaseController | |||||
| ActiveRecord::Base.transaction do | ActiveRecord::Base.transaction do | ||||
| @team_user.destroy! | @team_user.destroy! | ||||
| Gitea::Organization::TeamUser::DeleteService.call(@organization.gitea_token, @team.gtid, current_user.login) | Gitea::Organization::TeamUser::DeleteService.call(@organization.gitea_token, @team.gtid, current_user.login) | ||||
| org_team_users = @organization.team_users.where(user_id: current_user.id) | |||||
| unless org_team_users.present? | |||||
| @organization.organization_users.find_by(user_id: current_user.id).destroy! | |||||
| Gitea::Organization::OrganizationUser::DeleteService.call(@organization.gitea_token, @organization.login, current_user.login) | |||||
| end | |||||
| render_ok | render_ok | ||||
| end | end | ||||
| rescue Exception => e | rescue Exception => e | ||||
| @@ -14,7 +14,7 @@ class Projects::TeamsController < Projects::BaseController | |||||
| def create | def create | ||||
| ActiveRecord::Base.transaction do | ActiveRecord::Base.transaction do | ||||
| @team_project = TeamProject.build(@owner.id, @operate_team.id, @project.id) | @team_project = TeamProject.build(@owner.id, @operate_team.id, @project.id) | ||||
| Gitea::Organization::TeamProject::CreateService.call(@owner.gitea_token, @operate_team.gtid, @owner.login, @project.identifier) | |||||
| Gitea::Organization::TeamProject::CreateService.call(current_user.gitea_token, @operate_team.gtid, @owner.login, @project.identifier) | |||||
| render_ok | render_ok | ||||
| end | end | ||||
| rescue Exception => e | rescue Exception => e | ||||
| @@ -25,7 +25,7 @@ class Projects::TeamsController < Projects::BaseController | |||||
| def destroy | def destroy | ||||
| ActiveRecord::Base.transaction do | ActiveRecord::Base.transaction do | ||||
| @team_project.destroy! | @team_project.destroy! | ||||
| Gitea::Organization::TeamProject::DeleteService.call(@owner.gitea_token, @operate_team.gtid, @owner.login, @project.identifier) | |||||
| Gitea::Organization::TeamProject::DeleteService.call(current_user.gitea_token, @operate_team.gtid, @owner.login, @project.identifier) | |||||
| render_ok | render_ok | ||||
| end | end | ||||
| rescue Exception => e | rescue Exception => e | ||||
| @@ -19,6 +19,7 @@ class PullRequestsController < ApplicationController | |||||
| @close_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::CLOSED}) | @close_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::CLOSED}) | ||||
| @merged_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::MERGED}) | @merged_issues = @filter_issues.joins(:pull_request).where(pull_requests: {status: PullRequest::MERGED}) | ||||
| @user_admin_or_member = current_user.present? && (current_user.admin || @project.member?(current_user)) | @user_admin_or_member = current_user.present? && (current_user.admin || @project.member?(current_user)) | ||||
| @user_admin_or_developer = current_user.present? && (current_user.admin || @project.all_developers.include?(current_user)) | |||||
| scopes = Issues::ListQueryService.call(issues,params.delete_if{|k,v| v.blank?}, "PullRequest") | scopes = Issues::ListQueryService.call(issues,params.delete_if{|k,v| v.blank?}, "PullRequest") | ||||
| @issues_size = scopes.size | @issues_size = scopes.size | ||||
| @@ -5,7 +5,7 @@ class Users::BaseController < ApplicationController | |||||
| helper_method :observed_logged_user?, :observed_user | helper_method :observed_logged_user?, :observed_user | ||||
| def observed_user | def observed_user | ||||
| @_observed_user ||= (User.find_by_id(params[:user_id]) || User.find_by_login(params[:user_id])) | |||||
| @_observed_user ||= (User.find_by_login(params[:user_id]) || User.find_by_id(params[:user_id])) | |||||
| end | end | ||||
| def observed_logged_user? | def observed_logged_user? | ||||
| @@ -31,7 +31,7 @@ class Team < ApplicationRecord | |||||
| validates :name, uniqueness: {scope: :organization_id} | validates :name, uniqueness: {scope: :organization_id} | ||||
| enum authorize: {common: 0, read: 1, write: 2, admin: 3, owner: 4} | |||||
| enum authorize: {read: 1, write: 2, admin: 3, owner: 4} | |||||
| def self.build(organization_id, name, nickname, description, authorize, includes_all_project, can_create_org_project) | def self.build(organization_id, name, nickname, description, authorize, includes_all_project, can_create_org_project) | ||||
| self.create!(organization_id: organization_id, | self.create!(organization_id: organization_id, | ||||
| @@ -20,7 +20,7 @@ class TeamUnit < ApplicationRecord | |||||
| belongs_to :organization | belongs_to :organization | ||||
| belongs_to :team | belongs_to :team | ||||
| enum unit_type: {code: 1, issues: 2, pulls: 3, releases: 4} | |||||
| enum unit_type: {code: 1, issues: 2, pulls: 3, wiki: 4, releases: 5} | |||||
| validates :unit_type, uniqueness: { scope: [:organization_id, :team_id]} | validates :unit_type, uniqueness: { scope: [:organization_id, :team_id]} | ||||
| @@ -44,7 +44,7 @@ class Gitea::Accelerator::MigrateService < Gitea::Accelerator::BaseService | |||||
| clone_addr: params[:clone_addr], | clone_addr: params[:clone_addr], | ||||
| repo_name: params[:repository_name], | repo_name: params[:repository_name], | ||||
| auth_username: params[:auth_username], | auth_username: params[:auth_username], | ||||
| auth_password: params[:auth_password], | |||||
| auth_password: Base64.decode64(params[:auth_password]), | |||||
| mirror: ActiveModel::Type::Boolean.new.cast(params[:is_mirror]) | mirror: ActiveModel::Type::Boolean.new.cast(params[:is_mirror]) | ||||
| } | } | ||||
| end | end | ||||
| @@ -37,7 +37,7 @@ class Organizations::Teams::CreateService < ApplicationService | |||||
| end | end | ||||
| def authorize | def authorize | ||||
| params[:authorize].present? ? params[:authorize] : "common" | |||||
| params[:authorize].present? ? params[:authorize] : "read" | |||||
| end | end | ||||
| def includes_all_project | def includes_all_project | ||||
| @@ -54,7 +54,7 @@ class Organizations::Teams::CreateService < ApplicationService | |||||
| end | end | ||||
| def units_params | def units_params | ||||
| %w(admin owner).include?(authorize) ? %w(code issues pulls releases) : params[:unit_types] | |||||
| %w(code issues pulls wiki releases) | |||||
| end | end | ||||
| def create_units | def create_units | ||||
| @@ -33,7 +33,7 @@ class Organizations::Teams::UpdateService < ApplicationService | |||||
| end | end | ||||
| def units_params | def units_params | ||||
| %w(admin owner).include?(team.authorize) ? %w(code issues pulls releases) : params[:unit_types] | |||||
| %w(code issues pulls wiki releases) | |||||
| end | end | ||||
| def update_team(update_params) | def update_team(update_params) | ||||
| @@ -30,7 +30,7 @@ class Projects::ApplyTransferService < ApplicationService | |||||
| def is_permit_owner | def is_permit_owner | ||||
| return true unless @owner.is_a?(Organization) | return true unless @owner.is_a?(Organization) | ||||
| return @owner.is_owner?(@user) | |||||
| return @owner.is_admin?(@user) | |||||
| end | end | ||||
| def create_apply | def create_apply | ||||
| @@ -23,12 +23,12 @@ class Projects::TransferService < ApplicationService | |||||
| private | private | ||||
| def update_owner | def update_owner | ||||
| project.members.find_by(user_id: owner.id).destroy! if owner.is_a?(User) | |||||
| project.members.map{|m| m.destroy! if m.user_id == owner.id || (new_owner.is_a?(Organization) && new_owner.is_member?(m.user_id)) } | |||||
| project.update!(user_id: new_owner.id) | project.update!(user_id: new_owner.id) | ||||
| end | end | ||||
| def update_repo_url | def update_repo_url | ||||
| project.repository.update!(url: @gitea_repo["clone_url"]) | |||||
| project.repository.update!(user_id: new_owner.id, url: @gitea_repo["clone_url"]) | |||||
| end | end | ||||
| def update_visit_teams | def update_visit_teams | ||||
| @@ -32,7 +32,7 @@ class Repositories::MigrateService < ApplicationService | |||||
| private: params[:hidden], | private: params[:hidden], | ||||
| mirror: wrapper_mirror || false, | mirror: wrapper_mirror || false, | ||||
| auth_username: params[:login], | auth_username: params[:login], | ||||
| auth_password: params[:password] | |||||
| auth_password: Base64.decode64(params[:password]) | |||||
| } | } | ||||
| end | end | ||||
| @@ -2,6 +2,7 @@ json.total_count @owners.size | |||||
| json.owners @owners.each do |owner| | json.owners @owners.each do |owner| | ||||
| json.id owner.id | json.id owner.id | ||||
| json.type owner.type | json.type owner.type | ||||
| json.login owner.login | |||||
| json.name owner&.show_real_name | json.name owner&.show_real_name | ||||
| json.avatar_url url_to_avatar(owner) | json.avatar_url url_to_avatar(owner) | ||||
| end | end | ||||
| @@ -1,5 +1,6 @@ | |||||
| json.total_count @teams.total_count | json.total_count @teams.total_count | ||||
| json.can_add @owner.is_owner?(current_user.id) || @owner&.repo_admin_change_team_access | |||||
| json.teams @teams.each do |team| | json.teams @teams.each do |team| | ||||
| json.(team, :id, :name, :authorize) | json.(team, :id, :name, :authorize) | ||||
| json.can_remove !team.includes_all_project && team&.organization&.repo_admin_change_team_access | |||||
| json.can_remove !team.includes_all_project && (@owner.is_owner?(current_user.id) || team&.organization&.repo_admin_change_team_access) | |||||
| end | end | ||||
| @@ -5,6 +5,7 @@ json.merged_issues_size @merged_issues.size | |||||
| json.search_count @issues_size | json.search_count @issues_size | ||||
| json.limit @limit | json.limit @limit | ||||
| json.user_admin_or_member @user_admin_or_member | json.user_admin_or_member @user_admin_or_member | ||||
| json.user_admin_or_developer @user_admin_or_developer | |||||
| json.project_name @project.name | json.project_name @project.name | ||||
| json.project_author_name @project.owner.try(:login) | json.project_author_name @project.owner.try(:login) | ||||
| @@ -0,0 +1,61 @@ | |||||
| desc "Fix Some Unstep Data" | |||||
| namespace :fix_some_error_data do | |||||
| task org_member_and_project_member: :environment do | |||||
| puts "======Begin: fix organization memberr======" | |||||
| fix_org_count = 0 | |||||
| OrganizationUser.find_each do |org_user| | |||||
| org = org_user.organization | |||||
| if org.team_users.where(user_id: org_user.user_id).blank? | |||||
| Gitea::Organization::OrganizationUser::DeleteService.call(org_user.organization.gitea_token, org_user.organization.login, org_user&.user&.login) | |||||
| org_user.destroy | |||||
| fix_org_count += 1 | |||||
| end | |||||
| end | |||||
| puts "======Count: #{fix_org_count}======" | |||||
| puts "======End: fix organization member and project member======" | |||||
| puts "======Begin: fix project member======" | |||||
| fix_pro_count = 0 | |||||
| Member.joins(project: :owner).where(users: {type: 'Organization'}).find_each do |member| | |||||
| if member.project.owner.team_users.where(user_id: member.user_id).blank? | |||||
| next | |||||
| else | |||||
| member.destroy | |||||
| fix_pro_count += 1 | |||||
| end | |||||
| end | |||||
| puts "======Count: #{fix_pro_count}======" | |||||
| puts "======End: fix project member======" | |||||
| end | |||||
| task open_full_gitea_team_authorize: :environment do | |||||
| puts "======Begin: fix open full team authorize======" | |||||
| team_count = 0 | |||||
| Team.find_each do |team| | |||||
| team.team_units.destroy_all | |||||
| %w(code issues pulls wiki releases).each do |unit| | |||||
| TeamUnit.build(team.organization_id, team.id, unit) | |||||
| end | |||||
| Gitea::Organization::Team::UpdateService.call(team&.organization&.gitea_token, team) | |||||
| team_count += 1 | |||||
| end | |||||
| puts "======Count: #{team_count}======" | |||||
| puts "======End: fix open full team authorize======" | |||||
| end | |||||
| task transfer_repository_user_id: :environment do | |||||
| puts "======Begin: fix open full team authorize======" | |||||
| repo_count = 0 | |||||
| AppliedTransferProject.find_each do |transfer| | |||||
| next unless transfer.project.present? | |||||
| next unless transfer.project.repository.present? | |||||
| if transfer.project.user_id != transfer.project.repository.user_id | |||||
| transfer.project.repository.update(user_id: transfer.project.user_id) | |||||
| repo_count += 1 | |||||
| end | |||||
| end | |||||
| puts "======Count: #{repo_count}======" | |||||
| puts "======End: fix open full team authorize======" | |||||
| end | |||||
| end | |||||