neiam
/gitgud
Git Gud
public · Issues · Pulls · Labels · Forks · Compare · Actions success · Badges · Packages
Log in to mark this repository.
Repository settings: check admin rights in mount and in every handler
a6f4469 · Gabriel Morell · 2026-10-18 18:44
Message
{commit_body(@commit)}
Files changed
modified
lib/git_gud/branch_protections.ex
+6
−0
| 28 | 28 | |
| 29 | 29 | def get_rule!(id), do: Repo.get!(BranchProtection, id) |
| 30 | 30 | |
| 31 | + @doc "Rule `id` if it belongs to `repo`, else `nil`. `id` is an integer or `nil`." | |
| 32 | + def get_rule(_repo, nil), do: nil | |
| 33 | + | |
| 34 | + def get_rule(%Repository{id: rid}, id) when is_integer(id), | |
| 35 | + do: Repo.get_by(BranchProtection, id: id, repository_id: rid) | |
| 36 | + | |
| 31 | 37 | def create_rule(%Repository{id: rid}, attrs) do |
| 32 | 38 | %BranchProtection{repository_id: rid} |
| 33 | 39 | |> BranchProtection.changeset(attrs) |
modified
lib/git_gud/deploy_keys.ex
+6
−0
| 26 | 26 | |
| 27 | 27 | def get_key!(id), do: Repo.get!(DeployKey, id) |
| 28 | 28 | |
| 29 | + @doc "Key `id` if it belongs to `repo`, else `nil`. `id` is an integer or `nil`." | |
| 30 | + def get_key(_repo, nil), do: nil | |
| 31 | + | |
| 32 | + def get_key(%Repository{id: rid}, id) when is_integer(id), | |
| 33 | + do: Repo.get_by(DeployKey, id: id, repository_id: rid) | |
| 34 | + | |
| 29 | 35 | def create_key(%Repository{id: rid}, attrs) do |
| 30 | 36 | %DeployKey{repository_id: rid} |
| 31 | 37 | |> DeployKey.changeset(attrs) |
modified
lib/git_gud/packages.ex
+14
−0
| 95 | 95 | |
| 96 | 96 | def get_package!(id), do: Repo.get!(Package, id) |
| 97 | 97 | |
| 98 | + @doc """ | |
| 99 | + Version `id` if it belongs to one of `repo`'s packages, else `nil` — | |
| 100 | + never another repository's. `id` is an integer or `nil`. | |
| 101 | + """ | |
| 102 | + def get_repo_version(_repo, nil), do: nil | |
| 103 | + | |
| 104 | + def get_repo_version(%Repository{id: rid}, id) when is_integer(id) do | |
| 105 | + Repo.one( | |
| 106 | + from v in PackageVersion, | |
| 107 | + join: p in assoc(v, :package), | |
| 108 | + where: v.id == ^id and p.repository_id == ^rid | |
| 109 | + ) | |
| 110 | + end | |
| 111 | + | |
| 98 | 112 | def get_package_by(repo_id, kind, name) do |
| 99 | 113 | Repo.get_by(Package, repository_id: repo_id, kind: kind, name: name) |
| 100 | 114 | end |
modified
lib/git_gud/repositories.ex
+7
−0
| 1746 | 1746 | end |
| 1747 | 1747 | end |
| 1748 | 1748 | |
| 1749 | + @doc "Sets the federation interaction policy, and only that." | |
| 1750 | + def update_interaction_policy(%Repository{} = repo, attrs) do | |
| 1751 | + repo | |
| 1752 | + |> Repository.interaction_policy_changeset(attrs) | |
| 1753 | + |> Repo.update() | |
| 1754 | + end | |
| 1755 | + | |
| 1749 | 1756 | defp maybe_check_org_visibility(%Repository{organization_id: nil}, _), do: :ok |
| 1750 | 1757 | defp maybe_check_org_visibility(_repo, nil), do: :ok |
| 1751 | 1758 |
modified
lib/git_gud/repositories/repository.ex
+12
−0
| 117 | 117 | ) |
| 118 | 118 | end |
| 119 | 119 | |
| 120 | + @doc """ | |
| 121 | + The interaction-policy page's changeset: that one field and nothing | |
| 122 | + else, so a crafted submit can't reach visibility, archiving or the | |
| 123 | + merge rules through it. | |
| 124 | + """ | |
| 125 | + def interaction_policy_changeset(repo, attrs) do | |
| 126 | + repo | |
| 127 | + |> cast(attrs, [:interaction_policy]) | |
| 128 | + |> validate_required([:interaction_policy]) | |
| 129 | + |> validate_inclusion(:interaction_policy, @valid_interaction_policies) | |
| 130 | + end | |
| 131 | + | |
| 120 | 132 | def valid_interaction_policies, do: @valid_interaction_policies |
| 121 | 133 | def valid_sync_modes, do: @valid_sync_modes |
| 122 | 134 | end |
modified
lib/git_gud/webhooks.ex
+12
−0
Click to load diff…
modified
lib/git_gud_web/live/branch_protection_live/index.ex
+33
−18
Click to load diff…
modified
lib/git_gud_web/live/deploy_key_live/index.ex
+33
−17
Click to load diff…
modified
lib/git_gud_web/live/interaction_policy_live/edit.ex
+24
−15
Click to load diff…
modified
lib/git_gud_web/live/org_live/show.ex
+11
−1
Click to load diff…
added
lib/git_gud_web/live/repo_admin.ex
+96
−0
Click to load diff…
modified
lib/git_gud_web/live/repo_live/header.ex
+10
−5
Click to load diff…
modified
lib/git_gud_web/live/repo_live/packages.ex
+93
−46
Click to load diff…
modified
lib/git_gud_web/live/secrets_live/org.ex
+17
−6
Click to load diff…
modified
lib/git_gud_web/live/secrets_live/repo.ex
+31
−17
Click to load diff…
modified
lib/git_gud_web/live/webhook_live/index.ex
+49
−26
Click to load diff…
modified
lib/git_gud_web/live/webhook_live/org.ex
+36
−19
Click to load diff…
modified
lib/git_gud_web/live/wiki_live/edit.ex
+30
−12
Click to load diff…
modified
lib/git_gud_web/live/wiki_live/index.ex
+5
−0
Click to load diff…
modified
lib/git_gud_web/live/wiki_live/show.ex
+28
−15
Click to load diff…
added
test/git_gud_web/live/repo_auth/branch_protection_auth_test.exs
+66
−0
Click to load diff…
added
test/git_gud_web/live/repo_auth/deploy_keys_auth_test.exs
+74
−0
Click to load diff…
added
test/git_gud_web/live/repo_auth/interaction_policy_auth_test.exs
+82
−0
Click to load diff…
added
test/git_gud_web/live/repo_auth/org_team_auth_test.exs
+50
−0
Click to load diff…
added
test/git_gud_web/live/repo_auth/packages_auth_test.exs
+126
−0
Click to load diff…
added
test/git_gud_web/live/repo_auth/repo_admin_test.exs
+71
−0
Click to load diff…
added
test/git_gud_web/live/repo_auth/secrets_auth_test.exs
+87
−0
Click to load diff…
added
test/git_gud_web/live/repo_auth/webhooks_auth_test.exs
+119
−0
Click to load diff…
added
test/git_gud_web/live/repo_auth/wiki_auth_test.exs
+101
−0
Click to load diff…
added
test/support/repo_auth_helpers.ex
+61
−0
Click to load diff…
Parents: 5e43417