@@ -10,9 +10,10 @@ defmodule Kmxgit.RepositoryManager do
alias Kmxgit.UserManager.User
def list_repositories do
- Repo.all from org in Repository,
- preload: [organisation: :slug],
- preload: [user: :slug]
+ Repo.all from r in Repository,
+ preload: [members: :slug,
+ organisation: [:slug, users: :slug],
+ user: :slug]
end
def change_repository(repository \\ %Repository{}) do
@@ -53,4 +53,20 @@ defmodule Kmxgit.RepositoryManager.Repository do
end
|> Enum.uniq
end
+
+ def auth(repo) do
+ repo
+ |> members()
+ |> Enum.sort(fn a, b ->
+ a.slug.slug < b.slug.slug
+ end)
+ |> Enum.map(fn user ->
+ mode = if user.deploy_only do
+ "r"
+ else
+ "rw"
+ end
+ "#{user.slug.slug} #{mode} \"#{full_slug(repo)}.git\"\n"
+ end)
+ end
end
@@ -2,6 +2,8 @@ defmodule KmxgitWeb.PageController do
use KmxgitWeb, :controller
alias Kmxgit.Repo
+ alias Kmxgit.RepositoryManager
+ alias Kmxgit.RepositoryManager.Repository
alias Kmxgit.UserManager
alias Kmxgit.UserManager.{Guardian, User}
@@ -56,4 +58,16 @@ defmodule KmxgitWeb.PageController do
|> put_resp_content_type("text/text")
|> resp(200, k)
end
+
+ def auth(conn, params) do
+ a = RepositoryManager.list_repositories
+ |> Enum.sort(fn a, b ->
+ Repository.full_slug(a) < Repository.full_slug(b)
+ end)
+ |> Enum.map(fn repo -> Repository.auth(repo) end)
+ |> Enum.join("\n")
+ conn
+ |> put_resp_content_type("text/text")
+ |> resp(200, a)
+ end
end
@@ -34,6 +34,7 @@ defmodule KmxgitWeb.Router do
pipe_through [:browser, :auth]
get "/", PageController, :index
+ get "/_auth", PageController, :auth
get "/_keys", PageController, :keys
get "/_new_admin", PageController, :new_admin
post "/_new_admin", PageController, :new_admin_post