Edit

kmx.io/kmxgit/lib/kmxgit_web/controllers/admin/user_controller.ex

Branch :

  • lib/kmxgit_web/controllers/admin/user_controller.ex
  • defmodule KmxgitWeb.Admin.UserController do
      use KmxgitWeb, :controller
    
      alias Kmxgit.GitManager
      alias Kmxgit.RepositoryManager
      alias Kmxgit.UserManager
      alias Kmxgit.UserManager.User
      alias KmxgitWeb.ErrorView
    
      def index(conn, _params) do
        users = UserManager.list_users
        conn
        |> assign(:page_title, gettext("Users"))
        |> assign(:users, users)
        |> render("index.html")
      end
    
      def new(conn, _params) do
        changeset = UserManager.change_user()
        conn
        |> assign(:action, Routes.admin_user_path(conn, :create))
        |> assign(:changeset, changeset)
        |> render("new.html")
      end
    
      def create(conn, params) do
        pw = :crypto.strong_rand_bytes(16) |> Base.url_encode64()
        pw = "Az0!#{pw}"
        user_params = Map.merge(params["user"], %{"password" => pw})
        case UserManager.admin_create_user(user_params) do
          {:ok, user} ->
            conn
            |> redirect(to: Routes.admin_user_path(conn, :show, user))
          {:error, changeset} ->
            IO.inspect changeset
            conn
            |> assign(:action, Routes.admin_user_path(conn, :create))
            |> assign(:changeset, changeset)
            |> render("new.html")
        end
      end
    
      def show(conn, params) do
        user = UserManager.get_user(params["id"])
        if user do
          owned_repos = User.owned_repositories(user)
          contributor_repos = RepositoryManager.list_contributor_repositories(user)
          repos = owned_repos ++ contributor_repos
          conn
          |> assign(:page_title, gettext("User %{login}", login: User.login(user)))
          |> assign(:repos, repos)
          |> assign(:user, user)
          |> render("show.html")
        else
          not_found(conn)
        end
      end
    
      def edit(conn, params) do
        user = UserManager.get_user(params["id"])
        if user do
          changeset = UserManager.change_user(user)
          conn
          |> assign(:changeset, changeset)
          |> assign(:user, user)
          |> render("edit.html")
        else
          not_found(conn)
        end
      end
    
      def update(conn, params) do
        user = UserManager.get_user(params["id"])
        if user do
          case UserManager.admin_update_user(user, params["user"]) do
            {:ok, user1} ->
              case GitManager.update_auth() do
                :ok -> nil
                error -> IO.inspect(error)
              end
              conn
              |> redirect(to: Routes.admin_user_path(conn, :show, user1))
            {:error, changeset} ->
              IO.inspect(changeset)
              conn
              |> assign(:changeset, changeset)
              |> assign(:user, user)
              |> render("edit.html")
          end
        else
          not_found(conn)
        end
      end
    
      def edit_password(conn, params) do
        user = UserManager.get_user(params["user_id"])
        if user do
          changeset = UserManager.change_user(user)
          conn
          |> assign(:changeset, changeset)
          |> assign(:user, user)
          |> render("edit_password.html")
        else
          not_found(conn)
        end
      end
    
      def update_password(conn, params) do
        user = UserManager.get_user(params["user_id"])
        if user do
          case UserManager.admin_update_user_password(user, params["user"]) do
            {:ok, user1} ->
              conn
              |> redirect(to: Routes.admin_user_path(conn, :show, user1))
            {:error, changeset} ->
              conn
              |> assign(:changeset, changeset)
              |> assign(:user, user)
              |> render("edit_password.html")
          end
        else
          not_found(conn)
        end
      end
    
      def delete(conn, params) do
        if user = UserManager.get_user(params["id"]) do
          {:ok, _} = UserManager.delete_user(user)
          case GitManager.update_auth() do
            :ok -> nil
            error -> IO.inspect(error)
          end
          conn
          |> redirect(to: Routes.admin_user_path(conn, :index))
        else
          not_found(conn)
        end
      end
    end