defmodule ShardWeb.Router do
use ShardWeb, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
plug Plug.Parsers, parsers: [:urlencoded]
plug :check_pk
end
pipeline :api do
plug :accepts, ["json"]
end
scope "/", ShardWeb do
pipe_through :browser # Use the default browser stack
get "/", PageController, :shard_list
get "/peers", PageController, :peer_list
post "/peer/add", PageController, :add_peer
get "/people", IdentityController, :list
get "/people/:pk", IdentityController, :view
get "/identity", IdentityController, :self
post "/identity", IdentityController, :update
post "/identity/switch", IdentityController, :switch
post "/identity/create", IdentityController, :create
get "/pub/:owner/:name", DirectoryController, :view_pub
get "/priv/:owner/:name", DirectoryController, :view_priv
post "/dir/add", DirectoryController, :dir_add
post "/dir/rm", DirectoryController, :dir_rm
post "/dir/set_stored", DirectoryController, :dir_set_stored
post "/dir/upload", DirectoryController, :dir_upload
get "/raw/:infohash", DirectoryController, :raw_file
get "/chat/:chan", ChatController, :chat
get "/pm/:people_list", ChatController, :privchat
end
# Other scopes may use custom stacks.
# scope "/api", ShardWeb do
# pipe_through :api
# end
def check_pk(conn, _kv) do
pk1 = get_session(conn, :pk)
{conn, pk} = if pk1 == nil || not Shard.Keys.have_sk? pk1 do
pk = Shard.Keys.get_any_identity
conn = put_session(conn, :pk, pk)
{conn, pk}
else
{conn, pk1}
end
nick = SApp.Identity.get_nick pk
conn
|> assign(:pk, pk)
|> assign(:nick, nick)
|> assign(:shard, nil)
|> PhoenixGon.Controller.put_gon(pk: (pk|>Base.encode16))
end
end