Commit 3114c3ea07a513dfc4310cbd29245b1d160ee1ec

Thomas de Grivel 2022-02-05T12:08:43

user show

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 &amp; 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 &amp; 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