aboutsummaryrefslogtreecommitdiff
path: root/shardweb/lib
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2018-11-06 11:57:09 +0100
committerAlex Auvolat <alex@adnab.me>2018-11-06 11:57:09 +0100
commitc4f6cbab20b0b1d08755073d93365e5bd00dc755 (patch)
tree384dd05c59a810d503790a2af1b5c49e1aed5ccf /shardweb/lib
parent0e5b82f3348508eb7f4291a08722522a49edd752 (diff)
downloadshard-c4f6cbab20b0b1d08755073d93365e5bd00dc755.tar.gz
shard-c4f6cbab20b0b1d08755073d93365e5bd00dc755.zip
Shard deletion ; update README and TODO
Diffstat (limited to 'shardweb/lib')
-rw-r--r--shardweb/lib/controllers/directory_controller.ex6
-rw-r--r--shardweb/lib/controllers/page_controller.ex8
-rw-r--r--shardweb/lib/router.ex1
-rw-r--r--shardweb/lib/templates/page/shard_list.html.eex15
4 files changed, 24 insertions, 6 deletions
diff --git a/shardweb/lib/controllers/directory_controller.ex b/shardweb/lib/controllers/directory_controller.ex
index d1b7136..ecb9c97 100644
--- a/shardweb/lib/controllers/directory_controller.ex
+++ b/shardweb/lib/controllers/directory_controller.ex
@@ -9,7 +9,7 @@ defmodule ShardWeb.DirectoryController do
view(conn, false, args)
end
- def view(conn, public, %{"owner" => owner, "name" => name}=args) do
+ def view(conn, public, %{"owner" => owner, "name" => name}) do
owner = Base.decode16! owner
manifest = %SApp.Directory.Manifest{public: public, owner: owner, name: name}
shard = SData.term_hash manifest
@@ -28,7 +28,6 @@ defmodule ShardWeb.DirectoryController do
dir_public = (dir_public == "true")
manifest = %SApp.Directory.Manifest{public: dir_public, owner: conn.assigns.pk, name: dir_name}
- shard = SData.term_hash manifest
pid = Shard.Manager.find_or_start manifest
item_manifest = ShardURI.to_manifest(add_uri)
@@ -41,7 +40,6 @@ defmodule ShardWeb.DirectoryController do
dir_public = (dir_public == "true")
manifest = %SApp.Directory.Manifest{public: dir_public, owner: conn.assigns.pk, name: dir_name}
- shard = SData.term_hash manifest
pid = Shard.Manager.find_or_start manifest
SApp.Directory.rm_item(pid, rm_name)
@@ -54,7 +52,6 @@ defmodule ShardWeb.DirectoryController do
item_stored = (item_stored == "true")
manifest = %SApp.Directory.Manifest{public: dir_public, owner: conn.assigns.pk, name: dir_name}
- shard = SData.term_hash manifest
pid = Shard.Manager.find_or_start manifest
SApp.Directory.set_stored(pid, item_name, item_stored)
@@ -68,7 +65,6 @@ defmodule ShardWeb.DirectoryController do
dir_public = (dir_public == "true")
manifest = %SApp.Directory.Manifest{public: dir_public, owner: conn.assigns.pk, name: dir_name}
- shard = SData.term_hash manifest
pid = Shard.Manager.find_or_start manifest
{:ok, file_manifest, _file_pid} = SApp.File.create(path, mime_type)
diff --git a/shardweb/lib/controllers/page_controller.ex b/shardweb/lib/controllers/page_controller.ex
index 5c90416..baf72b9 100644
--- a/shardweb/lib/controllers/page_controller.ex
+++ b/shardweb/lib/controllers/page_controller.ex
@@ -9,6 +9,14 @@ defmodule ShardWeb.PageController do
render conn, "shard_list.html"
end
+ def shard_action(conn, %{"shard_id" => shard_id, "action" => action}) do
+ shard_id = Base.decode16! shard_id
+ case action do
+ "delete" -> Shard.Manager.delete(shard_id)
+ end
+ redirect conn, to: page_path(conn, :shard_list)
+ end
+
def add_peer(conn, _params) do
try do
ip = conn.params["ip"]
diff --git a/shardweb/lib/router.ex b/shardweb/lib/router.ex
index a6a61f9..0b1f686 100644
--- a/shardweb/lib/router.ex
+++ b/shardweb/lib/router.ex
@@ -19,6 +19,7 @@ defmodule ShardWeb.Router do
pipe_through :browser # Use the default browser stack
get "/", PageController, :shard_list
+ post "/", PageController, :shard_action
get "/peers", PageController, :peer_list
post "/peer/add", PageController, :add_peer
diff --git a/shardweb/lib/templates/page/shard_list.html.eex b/shardweb/lib/templates/page/shard_list.html.eex
index 3fffef7..79fd794 100644
--- a/shardweb/lib/templates/page/shard_list.html.eex
+++ b/shardweb/lib/templates/page/shard_list.html.eex
@@ -23,9 +23,10 @@
<tr>
<th></th>
<th>Shard</th>
+ <th></th>
<th>URI</th>
</tr>
- <%= for {_id, manifest, why_have_it} <- shard_list() do %>
+ <%= for {id, manifest, why_have_it} <- shard_list() do %>
<tr>
<td>
<%= case why_have_it do %>
@@ -37,6 +38,18 @@
<td>
<%= render "shard_entry.html", conn: @conn, manifest: manifest, pk: @pk %>
</td>
+ <td>
+ <%= case why_have_it do %>
+ <% {:cached, _} -> %>
+ <%= form_for @conn, page_path(@conn, :shard_action), [class: "form-inline", style: "display: inline", onsubmit: "return confirm('Delete this shard and all its data?');"], fn f -> %>
+ <%= hidden_input f, :shard_id, value: id |> Base.encode16 %>
+ <%= hidden_input f, :action, value: "delete" %>
+ <%= submit "Delete", [class: "btn btn-xs btn-danger"] %>
+ <% end %>
+ <% _ -> %>&nbsp;
+ <% end %>
+
+ </td>
<td><small class="shard_uri"><%= manifest |> ShardURI.from_manifest %></small></td>
</tr>
<% end %>