Add UserController
This commit is contained in:
parent
f61444cffa
commit
178c2bf72e
5 changed files with 81 additions and 2 deletions
|
@ -61,6 +61,11 @@ config :logger, :console,
|
||||||
# Use Jason for JSON parsing in Phoenix
|
# Use Jason for JSON parsing in Phoenix
|
||||||
config :phoenix, :json_library, Jason
|
config :phoenix, :json_library, Jason
|
||||||
|
|
||||||
|
config :mime, :types, %{
|
||||||
|
"application/activity+json" => ["activity+json"],
|
||||||
|
"application/ld+json" => ["ld+json"]
|
||||||
|
}
|
||||||
|
|
||||||
# Import environment specific config. This must remain at the bottom
|
# Import environment specific config. This must remain at the bottom
|
||||||
# of this file so it overrides the configuration defined above.
|
# of this file so it overrides the configuration defined above.
|
||||||
import_config "#{config_env()}.exs"
|
import_config "#{config_env()}.exs"
|
||||||
|
|
64
lib/nulla_web/controllers/user_controller.ex
Normal file
64
lib/nulla_web/controllers/user_controller.ex
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
defmodule NullaWeb.UserController do
|
||||||
|
use NullaWeb, :controller
|
||||||
|
|
||||||
|
def show(conn, %{"username" => username}) do
|
||||||
|
accept = get_req_header(conn, "accept") |> List.first() || ""
|
||||||
|
|
||||||
|
if String.contains?(accept, "application/activity+json") or String.contains?(accept, "application/ld+json") do
|
||||||
|
conn
|
||||||
|
|> put_resp_content_type("application/activity+json")
|
||||||
|
|> json(%{
|
||||||
|
id: "https://localhost/@#{username}",
|
||||||
|
type: "Person",
|
||||||
|
following: "https://localhost/@#{username}/following",
|
||||||
|
followers: "https://localhost/@#{username}/followers",
|
||||||
|
inbox: "https://localhost/@#{username}/inbox",
|
||||||
|
outbox: "https://localhost/@#{username}/outbox",
|
||||||
|
featured: "https://localhost/@#{username}/collections/featured",
|
||||||
|
preferredUsername: "miraikumiko",
|
||||||
|
name: "Mirai Kumiko",
|
||||||
|
summary: "Lol Kek Cheburek",
|
||||||
|
url: "https://localhost/@#{username}",
|
||||||
|
manuallyApprovesFollowers: false,
|
||||||
|
discoverable: true,
|
||||||
|
indexable: true,
|
||||||
|
published: "2025-05-05T00:00:00Z",
|
||||||
|
memorial: false,
|
||||||
|
publicKey: %{
|
||||||
|
id: "https://localhost/@#{username}#main-key",
|
||||||
|
owner: "https://localhost/@#{username}",
|
||||||
|
publicKeyPem: "public key"
|
||||||
|
},
|
||||||
|
tag: [
|
||||||
|
%{
|
||||||
|
type: "Hashtag",
|
||||||
|
href: "https://localhost/tags/linux",
|
||||||
|
name: "#linux"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
attachment: [
|
||||||
|
%{
|
||||||
|
type: "PropertyValue",
|
||||||
|
name: "Website",
|
||||||
|
value: "<a href=\"https://miraikumiko.com/\" rel=\"me nofollow noopener\" target=\"_blank\">https://miraikumiko.com</a>"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
endpoints: %{
|
||||||
|
sharedInbox: "https://localhost/inbox"
|
||||||
|
},
|
||||||
|
icon: %{
|
||||||
|
type: "Image",
|
||||||
|
mediaType: "image/jpeg",
|
||||||
|
url: "url"
|
||||||
|
},
|
||||||
|
image: %{
|
||||||
|
type: "Image",
|
||||||
|
mediaType: "image/jpeg",
|
||||||
|
url: "url"
|
||||||
|
}
|
||||||
|
})
|
||||||
|
else
|
||||||
|
render(conn, :show, username: username, layout: false)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
10
lib/nulla_web/controllers/user_html.ex
Normal file
10
lib/nulla_web/controllers/user_html.ex
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
defmodule NullaWeb.UserHTML do
|
||||||
|
@moduledoc """
|
||||||
|
This module contains pages rendered by UserController.
|
||||||
|
|
||||||
|
See the `user_html` directory for all templates available.
|
||||||
|
"""
|
||||||
|
use NullaWeb, :html
|
||||||
|
|
||||||
|
embed_templates "user_html/*"
|
||||||
|
end
|
|
@ -2,7 +2,7 @@ defmodule NullaWeb.Router do
|
||||||
use NullaWeb, :router
|
use NullaWeb, :router
|
||||||
|
|
||||||
pipeline :browser do
|
pipeline :browser do
|
||||||
plug :accepts, ["html"]
|
plug :accepts, ["html", "activity+json", "ld+json"]
|
||||||
plug :fetch_session
|
plug :fetch_session
|
||||||
plug :fetch_live_flash
|
plug :fetch_live_flash
|
||||||
plug :put_root_layout, html: {NullaWeb.Layouts, :root}
|
plug :put_root_layout, html: {NullaWeb.Layouts, :root}
|
||||||
|
@ -18,7 +18,7 @@ defmodule NullaWeb.Router do
|
||||||
pipe_through :browser
|
pipe_through :browser
|
||||||
|
|
||||||
get "/", PageController, :home
|
get "/", PageController, :home
|
||||||
get "/@:username", PageController, :profile
|
get "/@:username", UserController, :show
|
||||||
end
|
end
|
||||||
|
|
||||||
# Other scopes may use custom stacks.
|
# Other scopes may use custom stacks.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue