mirror of
https://github.com/philomena-dev/philomena.git
synced 2025-02-23 21:54:33 +01:00
Adds deaction page and begins working on reactivation.
This commit is contained in:
parent
abfab90cfe
commit
94abf230d3
10 changed files with 79 additions and 9 deletions
|
@ -42,6 +42,7 @@
|
|||
@import "views/comments";
|
||||
@import "views/commissions";
|
||||
@import "views/communications";
|
||||
@import "views/deactivations";
|
||||
@import "views/duplicates";
|
||||
@import "views/filters";
|
||||
@import "views/galleries";
|
||||
|
|
4
assets/css/views/deactivations.css
Normal file
4
assets/css/views/deactivations.css
Normal file
|
@ -0,0 +1,4 @@
|
|||
.deactivations__button-container {
|
||||
display: flex;
|
||||
gap: 8px;
|
||||
}
|
|
@ -479,6 +479,13 @@ defmodule Philomena.Users do
|
|||
UserNotifier.deliver_reset_password_instructions(user, reset_password_url_fun.(encoded_token))
|
||||
end
|
||||
|
||||
def deliver_user_reactivation_instructions(%User{} = user, reactivation_url_fun)
|
||||
when is_function(reactivation_url_fun, 1) do
|
||||
{encoded_token, user_token} = UserToken.build_email_token(user, "reactivate")
|
||||
Repo.insert!(user_token)
|
||||
UserNotifier.deliver_reactivation_instructions(user, reactivation_url_fun.(encoded_token))
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets the user by reset password token.
|
||||
|
||||
|
@ -811,6 +818,21 @@ defmodule Philomena.Users do
|
|||
|> Repo.update()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deactivates a user account with the user recorded performing the deactivation.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> deactivate_user(user)
|
||||
{:ok, %User{}}
|
||||
|
||||
"""
|
||||
def deactivate_user(%User{} = user) do
|
||||
user
|
||||
|> User.deactivate_changeset(user)
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Generates a new API key for the user.
|
||||
|
||||
|
|
|
@ -419,10 +419,10 @@ defmodule Philomena.Users.User do
|
|||
change(user, deleted_at: nil, deleted_by_user_id: nil)
|
||||
end
|
||||
|
||||
def deactivate_changeset(user, moderator) do
|
||||
def deactivate_changeset(user, deactivator) do
|
||||
now = DateTime.utc_now(:second)
|
||||
|
||||
change(user, deleted_at: now, deleted_by_user_id: moderator.id)
|
||||
change(user, deleted_at: now, deleted_by_user_id: deactivator.id)
|
||||
end
|
||||
|
||||
def api_key_changeset(user) do
|
||||
|
|
|
@ -52,6 +52,27 @@ defmodule Philomena.Users.UserNotifier do
|
|||
""")
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deliver instructions to reactivate a deactivated account.
|
||||
"""
|
||||
def deliver_reactivation_instructions(user, url) do
|
||||
deliver(user.email, "Reactivation instructions for your account", """
|
||||
|
||||
==============================
|
||||
|
||||
Hi,
|
||||
|
||||
Your account has been deactivated. If you wish to re-activate it, please click the following link:
|
||||
|
||||
#{url}
|
||||
|
||||
Sincerely,
|
||||
The Derpibooru team.
|
||||
|
||||
==============================
|
||||
""")
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deliver instructions to update an account email.
|
||||
"""
|
||||
|
|
|
@ -1,7 +1,19 @@
|
|||
defmodule PhilomenaWeb.DeactivationController do
|
||||
use PhilomenaWeb, :controller
|
||||
alias PhilomenaWeb.UserAuth
|
||||
alias Philomena.Users
|
||||
|
||||
def show(conn, _params) do
|
||||
render(conn, "index.html", title: "Deactivate Account")
|
||||
end
|
||||
|
||||
def delete(conn, _params) do
|
||||
user = conn.assigns.current_user
|
||||
|
||||
Users.deactivate_user(user)
|
||||
Users.deliver_user_reactivation_instructions(user, &url(~p"/reactivations/#{&1}"))
|
||||
UserAuth.log_out_user(conn)
|
||||
|
||||
conn |> redirect(to: "/")
|
||||
end
|
||||
end
|
||||
|
|
7
lib/philomena_web/controllers/reactivation_controller.ex
Normal file
7
lib/philomena_web/controllers/reactivation_controller.ex
Normal file
|
@ -0,0 +1,7 @@
|
|||
defmodule PhilomenaWeb.ReactivationController do
|
||||
use PhilomenaWeb, :controller
|
||||
|
||||
def index(conn, _params) do
|
||||
text(conn, "hello world")
|
||||
end
|
||||
end
|
|
@ -104,6 +104,7 @@ defmodule PhilomenaWeb.Router do
|
|||
resources "/registrations", RegistrationController, only: [:edit, :update], singleton: true
|
||||
resources "/sessions", SessionController, only: [:delete], singleton: true
|
||||
resources "/deactivations", DeactivationController, only: [:show, :delete], singleton: true
|
||||
get "/deactivations/:id/reactivate", DeactivationController, :index
|
||||
|
||||
scope "/registrations", Registration, as: :registration do
|
||||
resources "/totp", TotpController, only: [:edit, :update], singleton: true
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
h1 Deactivate Account
|
||||
- contact_email = "ops@derpibooru.org"
|
||||
.block
|
||||
.block__content.warning
|
||||
p.walloftext
|
||||
' Deactivating your account will prevent you from logging into your account. If you ever wish to re-activate your account later on, you may do so at any time. If you wish to wipe your personally identifiable data per GDPR law, please contact ops@derpibooru.org
|
||||
' Deactivating your account will <b>prevent you from logging into your account</b>. If you ever wish to re-activate your account later on, you may do so at any time. If you wish to wipe your personally identifiable data as well, please contact <a href="mailto:#{contact_email}">#{contact_email}</a>
|
||||
.deactivations__button-container
|
||||
= button_to "Back", ~p"/registrations/edit", class: "button"
|
||||
= button_to "Confirm", ~p"/deactivations", class: "button", method: :delete, data: [confirm: "Are you sure you want to deactivate your account?"]
|
||||
= button_to "Confirm", ~p"/deactivations", class: ["button", "button--state-danger"], method: :delete, data: [confirm: "Are you sure you want to deactivate your account?"]
|
|
@ -71,6 +71,6 @@ h3 Change password
|
|||
= submit "Change password", class: "button"
|
||||
|
||||
h3 Deactivate Account
|
||||
= button_to "Deactivate account", ~p"/deactivations"
|
||||
p
|
||||
' Navigate to the account deactivation page
|
||||
' Navigate to the account deactivation page.
|
||||
= button_to "Deactivate account", ~p"/deactivations", class: "button"
|
Loading…
Reference in a new issue