Add UserController

This commit is contained in:
Mirai Kumiko 2025-05-30 14:16:51 +02:00
parent f61444cffa
commit 178c2bf72e
Signed by: miraikumiko
GPG key ID: 3F178B1B5E0CB278
5 changed files with 81 additions and 2 deletions

View 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

View 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

View file

@ -2,7 +2,7 @@ defmodule NullaWeb.Router do
use NullaWeb, :router
pipeline :browser do
plug :accepts, ["html"]
plug :accepts, ["html", "activity+json", "ld+json"]
plug :fetch_session
plug :fetch_live_flash
plug :put_root_layout, html: {NullaWeb.Layouts, :root}
@ -18,7 +18,7 @@ defmodule NullaWeb.Router do
pipe_through :browser
get "/", PageController, :home
get "/@:username", PageController, :profile
get "/@:username", UserController, :show
end
# Other scopes may use custom stacks.