feat(admin): add user fediverse handle setting
This commit is contained in:
@@ -133,6 +133,12 @@ module Volumen
|
||||
change_name
|
||||
end
|
||||
|
||||
app.post "/admin/settings/fediverse" do
|
||||
require_login!
|
||||
check_csrf!
|
||||
change_fediverse_creator
|
||||
end
|
||||
|
||||
app.post "/admin/settings/users" do
|
||||
require_login!
|
||||
require_admin!
|
||||
|
||||
@@ -205,6 +205,10 @@ module Volumen
|
||||
current_user_record&.name
|
||||
end
|
||||
|
||||
def current_user_fediverse
|
||||
current_user_record&.fediverse_creator
|
||||
end
|
||||
|
||||
def admin?
|
||||
current_role == "admin"
|
||||
end
|
||||
@@ -304,6 +308,21 @@ module Volumen
|
||||
render_settings(notice: name ? "Display name updated." : "Display name cleared.")
|
||||
end
|
||||
|
||||
def change_fediverse_creator
|
||||
value = params["fediverse_creator"].to_s.strip
|
||||
if value.empty?
|
||||
users.update_fediverse_creator(current_user, nil)
|
||||
return render_settings(notice: "Fediverse handle cleared.")
|
||||
end
|
||||
|
||||
unless value.match?(Post::FEDIVERSE_CREATOR_REGEX)
|
||||
return render_settings(error: "Fediverse handle must look like @user@host.")
|
||||
end
|
||||
|
||||
users.update_fediverse_creator(current_user, value)
|
||||
render_settings(notice: "Fediverse handle updated.")
|
||||
end
|
||||
|
||||
def create_user
|
||||
name = presence(params["username"])
|
||||
password = presence(params["password"])
|
||||
|
||||
+12
-4
@@ -15,7 +15,7 @@ module Volumen
|
||||
ROLES = %w[admin author].freeze
|
||||
DEFAULT_ROLE = "author"
|
||||
|
||||
User = Struct.new(:username, :password_hash, :role, :name)
|
||||
User = Struct.new(:username, :password_hash, :role, :name, :fediverse_creator)
|
||||
|
||||
def initialize(path:, bootstrap_hash: nil)
|
||||
@path = path
|
||||
@@ -33,7 +33,7 @@ module Volumen
|
||||
elsif @bootstrap_hash.empty?
|
||||
[]
|
||||
else
|
||||
[User.new("admin", @bootstrap_hash, "admin", nil)]
|
||||
[User.new("admin", @bootstrap_hash, "admin", nil, nil)]
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -54,7 +54,7 @@ module Volumen
|
||||
def add(username, password, role = DEFAULT_ROLE)
|
||||
return nil if username.to_s.empty? || find(username)
|
||||
|
||||
user = User.new(username, Password.hash(password), normalize_role(role), nil)
|
||||
user = User.new(username, Password.hash(password), normalize_role(role), nil, nil)
|
||||
persist(all + [user])
|
||||
user
|
||||
end
|
||||
@@ -63,6 +63,12 @@ module Volumen
|
||||
mutate(username) { |user| user.name = name.to_s.empty? ? nil : name.to_s }
|
||||
end
|
||||
|
||||
def update_fediverse_creator(username, value)
|
||||
mutate(username) do |user|
|
||||
user.fediverse_creator = value.to_s.empty? ? nil : value.to_s
|
||||
end
|
||||
end
|
||||
|
||||
def update_password(username, password)
|
||||
mutate(username) { |user| user.password_hash = Password.hash(password) }
|
||||
end
|
||||
@@ -125,7 +131,8 @@ module Volumen
|
||||
def read_file
|
||||
data = TomlRB.load_file(@path)
|
||||
Array(data["users"]).map do |entry|
|
||||
User.new(entry["username"], entry["password_hash"], entry["role"] || "admin", entry["name"])
|
||||
User.new(entry["username"], entry["password_hash"], entry["role"] || "admin",
|
||||
entry["name"], entry["fediverse_creator"])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -143,6 +150,7 @@ module Volumen
|
||||
"role" => user.role
|
||||
}
|
||||
hash["name"] = user.name if user.name
|
||||
hash["fediverse_creator"] = user.fediverse_creator if user.fediverse_creator
|
||||
hash
|
||||
end
|
||||
end
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
<div class="field">
|
||||
<label for="fediverse_creator">Fediverse creator</label>
|
||||
<input id="fediverse_creator" class="input" type="text" name="fediverse_creator"
|
||||
value="<%= h(@post.fediverse_creator) %>" placeholder="@user@instance.tld">
|
||||
value="<%= h(@post.fediverse_creator.to_s.empty? ? (current_user_fediverse || config.site['fediverse_creator']) : @post.fediverse_creator) %>" placeholder="@user@instance.tld">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -57,6 +57,21 @@
|
||||
|
||||
<div style="border-top: 1px solid var(--border); margin: 1.5rem 0;"></div>
|
||||
|
||||
<form method="post" action="<%= to("/admin/settings/fediverse") %>">
|
||||
<input type="hidden" name="_csrf" value="<%= csrf_token %>">
|
||||
<h3 style="margin: 0 0 0.75rem;">Fediverse handle</h3>
|
||||
<div class="field">
|
||||
<label for="fediverse_creator">Fediverse creator</label>
|
||||
<input id="fediverse_creator" class="input" type="text" name="fediverse_creator"
|
||||
value="<%= h(current_user_record&.fediverse_creator) %>"
|
||||
placeholder="@user@instance.tld" style="max-width: 360px;">
|
||||
<p class="help">Used to pre-fill the Fediverse creator for new posts.</p>
|
||||
</div>
|
||||
<button type="submit" class="btn">Save handle</button>
|
||||
</form>
|
||||
|
||||
<div style="border-top: 1px solid var(--border); margin: 1.5rem 0;"></div>
|
||||
|
||||
<form method="post" action="<%= to("/admin/settings/username") %>">
|
||||
<input type="hidden" name="_csrf" value="<%= csrf_token %>">
|
||||
<h3 style="margin: 0 0 0.75rem;">Change username</h3>
|
||||
|
||||
Reference in New Issue
Block a user