diff --git a/lib/kmxcrm_web/controllers/user_controller.ex b/lib/kmxcrm_web/controllers/user_controller.ex
index 1e50427..d584ab6 100644
--- a/lib/kmxcrm_web/controllers/user_controller.ex
+++ b/lib/kmxcrm_web/controllers/user_controller.ex
@@ -18,6 +18,18 @@ defmodule KmxcrmWeb.UserController do
not_found(conn)
end
+ def show(conn, params) do
+ user = UserManager.get_user_by_login(params["login"])
+ if !user do
+ not_found(conn)
+ else
+ conn
+ |> assign(:page_title, gettext("User %{login}", login: user.login))
+ |> assign(:user, user)
+ |> render("show.html")
+ end
+ end
+
def edit(conn, params) do
current_user = conn.assigns.current_user
if params["login"] == current_user.login do
diff --git a/lib/kmxcrm_web/router.ex b/lib/kmxcrm_web/router.ex
index d1b48a8..4a0ada2 100644
--- a/lib/kmxcrm_web/router.ex
+++ b/lib/kmxcrm_web/router.ex
@@ -81,6 +81,7 @@ defmodule KmxcrmWeb.Router do
scope "/_u" do
get "/:login", UserController, :show
+ delete "/:login", UserController, :delete
get "/:login/_edit", UserController, :edit
put "/:login", UserController, :update
get "/:login/totp", UserController, :totp
diff --git a/lib/kmxcrm_web/templates/page/index.html.heex b/lib/kmxcrm_web/templates/page/index.html.heex
index f844bd8..bce8307 100644
--- a/lib/kmxcrm_web/templates/page/index.html.heex
+++ b/lib/kmxcrm_web/templates/page/index.html.heex
@@ -1,41 +1,43 @@
-<section class="phx-hero">
- <h1><%= gettext "Welcome to %{name}!", name: "Phoenix" %></h1>
- <p>Peace of mind from prototype to production</p>
-</section>
+<div class="container-fluid">
+ <section class="phx-hero">
+ <h1><%= gettext "Welcome to %{name}!", name: "Phoenix" %></h1>
+ <p>Peace of mind from prototype to production</p>
+ </section>
-<section class="row">
- <article class="column">
- <h2>Resources</h2>
- <ul>
- <li>
- <a href="https://hexdocs.pm/phoenix/overview.html">Guides & Docs</a>
- </li>
- <li>
- <a href="https://github.com/phoenixframework/phoenix">Source</a>
- </li>
- <li>
- <a href="https://github.com/phoenixframework/phoenix/blob/v1.6/CHANGELOG.md">v1.6 Changelog</a>
- </li>
- </ul>
- </article>
- <article class="column">
- <h2>Help</h2>
- <ul>
- <li>
- <a href="https://elixirforum.com/c/phoenix-forum">Forum</a>
- </li>
- <li>
- <a href="https://web.libera.chat/#elixir">#elixir on Libera Chat (IRC)</a>
- </li>
- <li>
- <a href="https://twitter.com/elixirphoenix">Twitter @elixirphoenix</a>
- </li>
- <li>
- <a href="https://elixir-slackin.herokuapp.com/">Elixir on Slack</a>
- </li>
- <li>
- <a href="https://discord.gg/elixir">Elixir on Discord</a>
- </li>
- </ul>
- </article>
-</section>
+ <section class="row">
+ <article class="column">
+ <h2>Resources</h2>
+ <ul>
+ <li>
+ <a href="https://hexdocs.pm/phoenix/overview.html">Guides & Docs</a>
+ </li>
+ <li>
+ <a href="https://github.com/phoenixframework/phoenix">Source</a>
+ </li>
+ <li>
+ <a href="https://github.com/phoenixframework/phoenix/blob/v1.6/CHANGELOG.md">v1.6 Changelog</a>
+ </li>
+ </ul>
+ </article>
+ <article class="column">
+ <h2>Help</h2>
+ <ul>
+ <li>
+ <a href="https://elixirforum.com/c/phoenix-forum">Forum</a>
+ </li>
+ <li>
+ <a href="https://web.libera.chat/#elixir">#elixir on Libera Chat (IRC)</a>
+ </li>
+ <li>
+ <a href="https://twitter.com/elixirphoenix">Twitter @elixirphoenix</a>
+ </li>
+ <li>
+ <a href="https://elixir-slackin.herokuapp.com/">Elixir on Slack</a>
+ </li>
+ <li>
+ <a href="https://discord.gg/elixir">Elixir on Discord</a>
+ </li>
+ </ul>
+ </article>
+ </section>
+</div>
diff --git a/lib/kmxcrm_web/templates/user/avatar.html.heex b/lib/kmxcrm_web/templates/user/avatar.html.heex
index cbf3563..da47dab 100644
--- a/lib/kmxcrm_web/templates/user/avatar.html.heex
+++ b/lib/kmxcrm_web/templates/user/avatar.html.heex
@@ -1,7 +1,7 @@
<% user = UserManager.get_user_by_email(@email) %>
<%= if user do %>
<% avatar_path = Avatar.path(user, @size) %>
- <%= link to: Routes.slug_path(@conn, :show, User.login(user)) do %><%= if File.exists?(avatar_path) do %><%= img_tag(Routes.user_path(@conn, :avatar, User.login(user), @size), alt: @title, title: @title, class: @class) %><% else %><img src={Exgravatar.gravatar_url(@email, s: @size)} alt={@title} title={@title} class={@class} /><% end %><% end %>
+ <%= link to: Routes.user_path(@conn, :show, user.login) do %><%= if File.exists?(avatar_path) do %><%= img_tag(Routes.user_path(@conn, :avatar, user.login, @size), alt: @title, title: @title, class: @class) %><% else %><img src={Exgravatar.gravatar_url(@email, s: @size)} alt={@title} title={@title} class={@class} /><% end %><% end %>
<% else %>
<img src={Exgravatar.gravatar_url(@email, s: @size)} alt={@title} title={@title} class={@class} />
<% end %>
diff --git a/lib/kmxcrm_web/templates/user/edit.html.heex b/lib/kmxcrm_web/templates/user/edit.html.heex
index 89cf31a..50e0cd3 100644
--- a/lib/kmxcrm_web/templates/user/edit.html.heex
+++ b/lib/kmxcrm_web/templates/user/edit.html.heex
@@ -1,7 +1,7 @@
<div class="container-fluid center">
- <h1>Edit user <%= User.login(@user) %></h1>
+ <h1>Edit user <%= @user.login %></h1>
- <%= form_for @changeset, Routes.user_path(@conn, :update, User.login(@user)), [multipart: true], fn f -> %>
+ <%= form_for @changeset, Routes.user_path(@conn, :update, @user.login), [multipart: true], fn f -> %>
<div class="mb-3">
<%= label f, :name, class: "form-label" %>
@@ -9,13 +9,11 @@
<%= error_tag f, :name %>
</div>
- <%= inputs_for f, :slug, fn ff -> %>
- <div class="mb-3">
- <%= label ff, :slug, gettext("Login"), class: "form-label" %>
- <%= text_input ff, :slug, class: "form-control" %>
- <%= error_tag ff, :slug %>
- </div>
- <% end %>
+ <div class="mb-3">
+ <%= label f, :login, gettext("Login"), class: "form-label" %>
+ <%= text_input f, :login, class: "form-control" %>
+ <%= error_tag f, :login %>
+ </div>
<div class="mb-3">
<%= label f, :avatar, class: "form-label" %>
@@ -30,30 +28,14 @@
</div>
<div class="mb-3">
- <%= label f, :ssh_keys, gettext("SSH keys"), class: "form-label" %>
- <%= textarea f, :ssh_keys, class: "form-control" %>
- <%= error_tag f, :ssh_keys %>
- </div>
-
- <div class="mb-3 form-check">
- <%= checkbox f, :deploy_only, class: "form-check-input" %>
- <%= label f, :deploy_only, class: "form-check-label" %>
- <%= error_tag f, :deploy_only %>
- </div>
-
- <div>
- <%= error_tag f, :owned_repositories %>
- </div>
-
- <div class="mb-3">
<%= link gettext("Cancel"),
- to: Routes.slug_path(@conn, :show, User.login(@user)),
+ to: Routes.user_path(@conn, :show, @user.login),
class: "btn btn-secondary" %>
<%= link gettext("Delete user"),
- to: Routes.user_path(@conn, :delete, User.login(@user)),
+ to: Routes.user_path(@conn, :delete, @user.login),
method: :delete,
class: "btn btn-danger",
- data: [confirm: gettext("Are you sure you want to delete the user %{user} ?", user: User.login(@user))] %>
+ data: [confirm: gettext("Are you sure you want to delete the user %{user} ?", user: @user.login)] %>
<%= submit gettext("Submit"), class: "btn btn-primary" %>
</div>
<% end %>
@@ -130,11 +112,11 @@
<%= gettext "2FA enabled (TOTP)" %>
</p>
<p>
- <%= link gettext("Disable TOTP (Google Authenticator)"), to: Routes.user_path(@conn, :totp_delete, User.login(@user)), method: :delete, data: [confirm: gettext("Are you sure you want to disable TOTP (Google Authenticator) for %{site} ?", site: "kmxgit")], class: "btn btn-danger" %>
+ <%= link gettext("Disable TOTP (Google Authenticator)"), to: Routes.user_path(@conn, :totp_delete, @user.login), method: :delete, data: [confirm: gettext("Are you sure you want to disable TOTP (Google Authenticator) for %{site} ?", site: "kmxgit")], class: "btn btn-danger" %>
</p>
<% else %>
<p>
- <%= link gettext("Enable TOTP (Google Authenticator)"), to: Routes.user_path(@conn, :totp, User.login(@user)), class: "btn btn-danger" %>
+ <%= link gettext("Enable TOTP (Google Authenticator)"), to: Routes.user_path(@conn, :totp, @user.login), class: "btn btn-danger" %>
</p>
<% end %>
diff --git a/lib/kmxcrm_web/templates/user/show.html.heex b/lib/kmxcrm_web/templates/user/show.html.heex
index ead47c8..af77e56 100644
--- a/lib/kmxcrm_web/templates/user/show.html.heex
+++ b/lib/kmxcrm_web/templates/user/show.html.heex
@@ -1,15 +1,12 @@
<div class="container-fluid">
<div class="row">
<div class="col col-12 col-sm-7">
- <h1><%= @user.slug.slug %></h1>
+ <h1><%= @user.login %></h1>
</div>
<div class="col col-12 col-sm-4">
<%= if @current_user && @user.id == @current_user.id do %>
- <%= link gettext("New repository"),
- to: Routes.repository_path(@conn, :new, @user.slug.slug),
- class: "btn btn-primary" %>
<%= link gettext("Edit"),
- to: Routes.user_path(@conn, :edit, @user.slug.slug),
+ to: Routes.user_path(@conn, :edit, @user.login),
class: "btn btn-primary" %>
<% end %>
</div>
@@ -17,7 +14,7 @@
<div class="row">
<div class="col col-12">
<hr/>
- <%= render("avatar.html", conn: @conn, email: @user.email, size: 256, title: User.login(@user), class: "avatar-lg") %>
+ <%= render("avatar.html", conn: @conn, email: @user.email, size: 256, title: @user.login, class: "avatar-lg") %>
<h1><%= @user.name %></h1>
<div class="col col-12 col-md-8">
<%= if @user.description do %>
@@ -26,82 +23,35 @@
</div>
</div>
</div>
- <div class="row">
- <div class="col col-12 col-md-7">
- <hr/>
- <h2><%= gettext "Repositories" %></h2>
- <ul>
- <%= for repo <- @repos do %>
- <li>
- <%= link Repository.full_slug(repo), to: Routes.repository_path(@conn, :show, Repository.owner_slug(repo), Repository.splat(repo)) %>
- </li>
- <% end %>
- </ul>
- </div>
- <div class="col col-12 col-md-4">
- <hr/>
- <h2><%= gettext "Properties" %></h2>
- <table class="table admin-properties">
- <tr>
- <th><%= gettext "Name" %></th>
- <td><%= @user.name %></td>
- </tr>
- <tr>
- <th><%= gettext "Email" %></th>
- <td><%= link @user.email, to: "mailto:#{@user.email}" %></td>
- </tr>
- <tr>
- <th><%= gettext "Login" %></th>
- <td><%= @user.slug.slug %></td>
- </tr>
- <tr>
- <th><%= gettext "Description" %></th>
- <td>
- </td>
- </tr>
- <tr>
- <th><%= gettext "Deploy only" %></th>
- <td><%= @user.deploy_only %></td>
- </tr>
- <tr>
- <th>
- <%= gettext "Organisations" %><br/>
- <%= if @current_user && @user.id == @current_user.id do %>
- <%= link("+", to: Routes.organisation_path(@conn, :new), class: "btn btn-primary btn-sm") %>
- <% end %>
- </th>
- <td>
- <ul>
- <%= for org <- Enum.sort_by(@user.organisations, fn o -> o.slug.slug end) do %>
- <li>
- <%= link(org.name || org.slug.slug,
- to: Routes.slug_path(@conn, :show, org.slug.slug),
- class: "org") %>
- </li>
- <% end %>
- </ul>
- </td>
- </tr>
- <tr>
- <th><%= gettext "SSH keys" %></th>
- <td class="scroll-x">
- <pre class="ssh_keys">
- <%= @user.ssh_keys %>
- </pre>
- </td>
- </tr>
- <tr>
- <th><%= gettext "Disk usage" %></th>
- <td><%= disk_usage(@disk_usage) %></td>
- </tr>
- <tr>
- <th><%= gettext "Accessible" %></th>
- <td><%= disk_usage(@disk_usage_all) %></td>
- </tr>
- </table>
- </div>
- </div>
- <p>
- </p>
+ <h2><%= gettext "Properties" %></h2>
+ <table class="table properties">
+ <tr>
+ <th><%= gettext "Name" %></th>
+ <td><%= @user.name %></td>
+ </tr>
+ <tr>
+ <th><%= gettext "Login" %></th>
+ <td><%= @user.login %></td>
+ </tr>
+ <tr>
+ <th>
+ <%= gettext "Organisations" %><br/>
+ <%= if @current_user && @user.id == @current_user.id do %>
+ <%= link("+", to: Routes.organisation_path(@conn, :new), class: "btn btn-primary btn-sm") %>
+ <% end %>
+ </th>
+ <td>
+ <ul>
+ <%= for org <- Enum.sort_by(@user.organisations, fn o -> o.slug end) do %>
+ <li>
+ <%= link(org.name || org.slug,
+ to: Routes.organisation_path(@conn, :show, org.slug),
+ class: "org") %>
+ </li>
+ <% end %>
+ </ul>
+ </td>
+ </tr>
+ </table>
</div>
diff --git a/lib/kmxcrm_web/views/user_view.ex b/lib/kmxcrm_web/views/user_view.ex
new file mode 100644
index 0000000..f4e0c90
--- /dev/null
+++ b/lib/kmxcrm_web/views/user_view.ex
@@ -0,0 +1,6 @@
+defmodule KmxcrmWeb.UserView do
+ use KmxcrmWeb, :view
+
+ alias Kmxcrm.UserManager
+ alias Kmxcrm.UserManager.Avatar
+end