Merge branch 'develop' into docs/apache-config
This commit is contained in:
commit
0b19534475
@ -8,9 +8,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- **Breaking:** Changed `mix pleroma.user toggle_confirmed` to `mix pleroma.user confirm`
|
- **Breaking**: Changed `mix pleroma.user toggle_confirmed` to `mix pleroma.user confirm`
|
||||||
|
- **Breaking**: Changed `mix pleroma.user toggle_activated` to `mix pleroma.user activate/deactivate`
|
||||||
- **Breaking**: AdminAPI changed User field `confirmation_pending` to `is_confirmed`
|
- **Breaking**: AdminAPI changed User field `confirmation_pending` to `is_confirmed`
|
||||||
- **Breaking**: AdminAPI changed User field `approval_pending` to `is_approved`
|
- **Breaking**: AdminAPI changed User field `approval_pending` to `is_approved`
|
||||||
|
- **Breaking**: AdminAPI changed User field `deactivated` to `is_active`
|
||||||
- Polls now always return a `voters_count`, even if they are single-choice.
|
- Polls now always return a `voters_count`, even if they are single-choice.
|
||||||
- Admin Emails: The ap id is used as the user link in emails now.
|
- Admin Emails: The ap id is used as the user link in emails now.
|
||||||
- Improved registration workflow for email confirmation and account approval modes.
|
- Improved registration workflow for email confirmation and account approval modes.
|
||||||
@ -55,6 +57,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
- Streaming API: Posts and notifications are not dropped, when CLI task is executing.
|
- Streaming API: Posts and notifications are not dropped, when CLI task is executing.
|
||||||
- Creating incorrect IPv4 address-style HTTP links when encountering certain numbers.
|
- Creating incorrect IPv4 address-style HTTP links when encountering certain numbers.
|
||||||
- Reblog API Endpoint: Do not set visibility parameter to public by default and let CommonAPI to infer it from status, so a user can reblog their private status without explicitly setting reblog visibility to private.
|
- Reblog API Endpoint: Do not set visibility parameter to public by default and let CommonAPI to infer it from status, so a user can reblog their private status without explicitly setting reblog visibility to private.
|
||||||
|
- Tag URLs in statuses are now absolute
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>API Changes</summary>
|
<summary>API Changes</summary>
|
||||||
|
@ -133,22 +133,20 @@
|
|||||||
mix pleroma.user sign_out <nickname>
|
mix pleroma.user sign_out <nickname>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Activate a user
|
||||||
## Deactivate or activate a user
|
|
||||||
|
|
||||||
=== "OTP"
|
=== "OTP"
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
./bin/pleroma_ctl user toggle_activated <nickname>
|
./bin/pleroma_ctl user activate NICKNAME
|
||||||
```
|
```
|
||||||
|
|
||||||
=== "From Source"
|
=== "From Source"
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
mix pleroma.user toggle_activated <nickname>
|
mix pleroma.user activate NICKNAME
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Deactivate a user and unsubscribes local users from the user
|
## Deactivate a user and unsubscribes local users from the user
|
||||||
|
|
||||||
=== "OTP"
|
=== "OTP"
|
||||||
|
@ -125,7 +125,7 @@ sudo -Hu pleroma mix deps.get
|
|||||||
* Check the configuration and if all looks right, rename it, so Pleroma will load it (`prod.secret.exs` for productive instance, `dev.secret.exs` for development instances):
|
* Check the configuration and if all looks right, rename it, so Pleroma will load it (`prod.secret.exs` for productive instance, `dev.secret.exs` for development instances):
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
mv config/{generated_config.exs,prod.secret.exs}
|
sudo -Hu pleroma mv config/{generated_config.exs,prod.secret.exs}
|
||||||
```
|
```
|
||||||
|
|
||||||
* The previous command creates also the file `config/setup_db.psql`, with which you can create the database:
|
* The previous command creates also the file `config/setup_db.psql`, with which you can create the database:
|
||||||
|
@ -100,7 +100,7 @@ sudo -Hu pleroma mix deps.get
|
|||||||
* Check the configuration and if all looks right, rename it, so Pleroma will load it (`prod.secret.exs` for productive instance, `dev.secret.exs` for development instances):
|
* Check the configuration and if all looks right, rename it, so Pleroma will load it (`prod.secret.exs` for productive instance, `dev.secret.exs` for development instances):
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
mv config/{generated_config.exs,prod.secret.exs}
|
sudo -Hu pleroma mv config/{generated_config.exs,prod.secret.exs}
|
||||||
```
|
```
|
||||||
|
|
||||||
* The previous command creates also the file `config/setup_db.psql`, with which you can create the database:
|
* The previous command creates also the file `config/setup_db.psql`, with which you can create the database:
|
||||||
|
@ -98,7 +98,7 @@ sudo -Hu pleroma mix deps.get
|
|||||||
* Check the configuration and if all looks right, rename it, so Pleroma will load it (`prod.secret.exs` for productive instance, `dev.secret.exs` for development instances):
|
* Check the configuration and if all looks right, rename it, so Pleroma will load it (`prod.secret.exs` for productive instance, `dev.secret.exs` for development instances):
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
mv config/{generated_config.exs,prod.secret.exs}
|
sudo -Hu pleroma mv config/{generated_config.exs,prod.secret.exs}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ sudo -Hu pleroma mix pleroma.instance gen
|
|||||||
|
|
||||||
* コンフィギュレーションを確認して、もし問題なければ、ファイル名を変更してください。
|
* コンフィギュレーションを確認して、もし問題なければ、ファイル名を変更してください。
|
||||||
```
|
```
|
||||||
mv config/{generated_config.exs,prod.secret.exs}
|
sudo -Hu pleroma mv config/{generated_config.exs,prod.secret.exs}
|
||||||
```
|
```
|
||||||
|
|
||||||
* 先程のコマンドで、すでに `config/setup_db.psql` というファイルが作られています。このファイルをもとに、データベースを作成します。
|
* 先程のコマンドで、すでに `config/setup_db.psql` というファイルが作られています。このファイルをもとに、データベースを作成します。
|
||||||
|
@ -33,7 +33,7 @@ defmodule Mix.Tasks.Pleroma.Email do
|
|||||||
|
|
||||||
Pleroma.User.Query.build(%{
|
Pleroma.User.Query.build(%{
|
||||||
local: true,
|
local: true,
|
||||||
deactivated: false,
|
is_active: true,
|
||||||
is_confirmed: false,
|
is_confirmed: false,
|
||||||
invisible: false
|
invisible: false
|
||||||
})
|
})
|
||||||
|
@ -107,21 +107,6 @@ defmodule Mix.Tasks.Pleroma.User do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def run(["toggle_activated", nickname]) do
|
|
||||||
start_pleroma()
|
|
||||||
|
|
||||||
with %User{} = user <- User.get_cached_by_nickname(nickname) do
|
|
||||||
{:ok, user} = User.deactivate(user, !user.deactivated)
|
|
||||||
|
|
||||||
shell_info(
|
|
||||||
"Activation status of #{nickname}: #{if(user.deactivated, do: "de", else: "")}activated"
|
|
||||||
)
|
|
||||||
else
|
|
||||||
_ ->
|
|
||||||
shell_error("No user #{nickname}")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def run(["reset_password", nickname]) do
|
def run(["reset_password", nickname]) do
|
||||||
start_pleroma()
|
start_pleroma()
|
||||||
|
|
||||||
@ -156,20 +141,41 @@ defmodule Mix.Tasks.Pleroma.User do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def run(["activate", nickname]) do
|
||||||
|
start_pleroma()
|
||||||
|
|
||||||
|
with %User{} = user <- User.get_cached_by_nickname(nickname),
|
||||||
|
false <- user.is_active do
|
||||||
|
User.set_activation(user, true)
|
||||||
|
:timer.sleep(500)
|
||||||
|
|
||||||
|
shell_info("Successfully activated #{nickname}")
|
||||||
|
else
|
||||||
|
true ->
|
||||||
|
shell_info("User #{nickname} already activated")
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
shell_error("No user #{nickname}")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def run(["deactivate", nickname]) do
|
def run(["deactivate", nickname]) do
|
||||||
start_pleroma()
|
start_pleroma()
|
||||||
|
|
||||||
with %User{} = user <- User.get_cached_by_nickname(nickname) do
|
with %User{} = user <- User.get_cached_by_nickname(nickname),
|
||||||
shell_info("Deactivating #{user.nickname}")
|
true <- user.is_active do
|
||||||
User.deactivate(user)
|
User.set_activation(user, false)
|
||||||
:timer.sleep(500)
|
:timer.sleep(500)
|
||||||
|
|
||||||
user = User.get_cached_by_id(user.id)
|
user = User.get_cached_by_id(user.id)
|
||||||
|
|
||||||
if Enum.empty?(Enum.filter(User.get_friends(user), & &1.local)) do
|
if Enum.empty?(Enum.filter(User.get_friends(user), & &1.local)) do
|
||||||
shell_info("Successfully unsubscribed all local followers from #{user.nickname}")
|
shell_info("Successfully deactivated #{nickname} and unsubscribed all local followers")
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
false ->
|
||||||
|
shell_info("User #{nickname} already deactivated")
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
shell_error("No user #{nickname}")
|
shell_error("No user #{nickname}")
|
||||||
end
|
end
|
||||||
@ -365,7 +371,7 @@ defmodule Mix.Tasks.Pleroma.User do
|
|||||||
|
|
||||||
Pleroma.User.Query.build(%{
|
Pleroma.User.Query.build(%{
|
||||||
local: true,
|
local: true,
|
||||||
deactivated: false,
|
is_active: true,
|
||||||
is_moderator: false,
|
is_moderator: false,
|
||||||
is_admin: false,
|
is_admin: false,
|
||||||
invisible: false
|
invisible: false
|
||||||
@ -383,7 +389,7 @@ defmodule Mix.Tasks.Pleroma.User do
|
|||||||
|
|
||||||
Pleroma.User.Query.build(%{
|
Pleroma.User.Query.build(%{
|
||||||
local: true,
|
local: true,
|
||||||
deactivated: false,
|
is_active: true,
|
||||||
is_moderator: false,
|
is_moderator: false,
|
||||||
is_admin: false,
|
is_admin: false,
|
||||||
invisible: false
|
invisible: false
|
||||||
@ -420,7 +426,7 @@ defmodule Mix.Tasks.Pleroma.User do
|
|||||||
shell_info(
|
shell_info(
|
||||||
"#{user.nickname} moderator: #{user.is_moderator}, admin: #{user.is_admin}, locked: #{
|
"#{user.nickname} moderator: #{user.is_moderator}, admin: #{user.is_admin}, locked: #{
|
||||||
user.is_locked
|
user.is_locked
|
||||||
}, deactivated: #{user.deactivated}"
|
}, is_active: #{user.is_active}"
|
||||||
)
|
)
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
@ -152,7 +152,7 @@ defmodule Pleroma.FollowingRelationship do
|
|||||||
|> join(:inner, [r], f in assoc(r, :follower))
|
|> join(:inner, [r], f in assoc(r, :follower))
|
||||||
|> where([r], r.state == ^:follow_pending)
|
|> where([r], r.state == ^:follow_pending)
|
||||||
|> where([r], r.following_id == ^id)
|
|> where([r], r.following_id == ^id)
|
||||||
|> where([r, f], f.deactivated != true)
|
|> where([r, f], f.is_active == true)
|
||||||
|> select([r, f], f)
|
|> select([r, f], f)
|
||||||
|> Repo.all()
|
|> Repo.all()
|
||||||
end
|
end
|
||||||
|
@ -115,7 +115,7 @@ defmodule Pleroma.Notification do
|
|||||||
|> where(
|
|> where(
|
||||||
[n, a],
|
[n, a],
|
||||||
fragment(
|
fragment(
|
||||||
"? not in (SELECT ap_id FROM users WHERE deactivated = 'true')",
|
"? not in (SELECT ap_id FROM users WHERE is_active = 'false')",
|
||||||
a.actor
|
a.actor
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
@ -75,7 +75,7 @@ defmodule Pleroma.Stats do
|
|||||||
|
|
||||||
users_query =
|
users_query =
|
||||||
from(u in User,
|
from(u in User,
|
||||||
where: u.deactivated != true,
|
where: u.is_active == true,
|
||||||
where: u.local == true,
|
where: u.local == true,
|
||||||
where: not is_nil(u.nickname),
|
where: not is_nil(u.nickname),
|
||||||
where: not u.invisible
|
where: not u.invisible
|
||||||
|
@ -117,7 +117,7 @@ defmodule Pleroma.User do
|
|||||||
field(:confirmation_token, :string, default: nil)
|
field(:confirmation_token, :string, default: nil)
|
||||||
field(:default_scope, :string, default: "public")
|
field(:default_scope, :string, default: "public")
|
||||||
field(:domain_blocks, {:array, :string}, default: [])
|
field(:domain_blocks, {:array, :string}, default: [])
|
||||||
field(:deactivated, :boolean, default: false)
|
field(:is_active, :boolean, default: true)
|
||||||
field(:no_rich_text, :boolean, default: false)
|
field(:no_rich_text, :boolean, default: false)
|
||||||
field(:ap_enabled, :boolean, default: false)
|
field(:ap_enabled, :boolean, default: false)
|
||||||
field(:is_moderator, :boolean, default: false)
|
field(:is_moderator, :boolean, default: false)
|
||||||
@ -217,7 +217,8 @@ defmodule Pleroma.User do
|
|||||||
target_users_query = assoc(user, unquote(outgoing_relation_target))
|
target_users_query = assoc(user, unquote(outgoing_relation_target))
|
||||||
|
|
||||||
if restrict_deactivated? do
|
if restrict_deactivated? do
|
||||||
restrict_deactivated(target_users_query)
|
target_users_query
|
||||||
|
|> User.Query.build(%{deactivated: false})
|
||||||
else
|
else
|
||||||
target_users_query
|
target_users_query
|
||||||
end
|
end
|
||||||
@ -286,7 +287,7 @@ defmodule Pleroma.User do
|
|||||||
|
|
||||||
@doc "Returns status account"
|
@doc "Returns status account"
|
||||||
@spec account_status(User.t()) :: account_status()
|
@spec account_status(User.t()) :: account_status()
|
||||||
def account_status(%User{deactivated: true}), do: :deactivated
|
def account_status(%User{is_active: false}), do: :deactivated
|
||||||
def account_status(%User{password_reset_pending: true}), do: :password_reset_pending
|
def account_status(%User{password_reset_pending: true}), do: :password_reset_pending
|
||||||
def account_status(%User{local: true, is_approved: false}), do: :approval_pending
|
def account_status(%User{local: true, is_approved: false}), do: :approval_pending
|
||||||
def account_status(%User{local: true, is_confirmed: false}), do: :confirmation_pending
|
def account_status(%User{local: true, is_confirmed: false}), do: :confirmation_pending
|
||||||
@ -378,11 +379,6 @@ defmodule Pleroma.User do
|
|||||||
def ap_following(%User{following_address: fa}) when is_binary(fa), do: fa
|
def ap_following(%User{following_address: fa}) when is_binary(fa), do: fa
|
||||||
def ap_following(%User{} = user), do: "#{ap_id(user)}/following"
|
def ap_following(%User{} = user), do: "#{ap_id(user)}/following"
|
||||||
|
|
||||||
@spec restrict_deactivated(Ecto.Query.t()) :: Ecto.Query.t()
|
|
||||||
def restrict_deactivated(query) do
|
|
||||||
from(u in query, where: u.deactivated != ^true)
|
|
||||||
end
|
|
||||||
|
|
||||||
defp truncate_fields_param(params) do
|
defp truncate_fields_param(params) do
|
||||||
if Map.has_key?(params, :fields) do
|
if Map.has_key?(params, :fields) do
|
||||||
Map.put(params, :fields, Enum.map(params[:fields], &truncate_field/1))
|
Map.put(params, :fields, Enum.map(params[:fields], &truncate_field/1))
|
||||||
@ -777,7 +773,7 @@ defmodule Pleroma.User do
|
|||||||
candidates = Config.get([:instance, :autofollowed_nicknames])
|
candidates = Config.get([:instance, :autofollowed_nicknames])
|
||||||
|
|
||||||
autofollowed_users =
|
autofollowed_users =
|
||||||
User.Query.build(%{nickname: candidates, local: true, deactivated: false})
|
User.Query.build(%{nickname: candidates, local: true, is_active: true})
|
||||||
|> Repo.all()
|
|> Repo.all()
|
||||||
|
|
||||||
follow_all(user, autofollowed_users)
|
follow_all(user, autofollowed_users)
|
||||||
@ -938,7 +934,7 @@ defmodule Pleroma.User do
|
|||||||
deny_follow_blocked = Config.get([:user, :deny_follow_blocked])
|
deny_follow_blocked = Config.get([:user, :deny_follow_blocked])
|
||||||
|
|
||||||
cond do
|
cond do
|
||||||
followed.deactivated ->
|
not followed.is_active ->
|
||||||
{:error, "Could not follow user: #{followed.nickname} is deactivated."}
|
{:error, "Could not follow user: #{followed.nickname} is deactivated."}
|
||||||
|
|
||||||
deny_follow_blocked and blocks?(followed, follower) ->
|
deny_follow_blocked and blocks?(followed, follower) ->
|
||||||
@ -1173,7 +1169,7 @@ defmodule Pleroma.User do
|
|||||||
|
|
||||||
@spec get_followers_query(User.t(), pos_integer() | nil) :: Ecto.Query.t()
|
@spec get_followers_query(User.t(), pos_integer() | nil) :: Ecto.Query.t()
|
||||||
def get_followers_query(%User{} = user, nil) do
|
def get_followers_query(%User{} = user, nil) do
|
||||||
User.Query.build(%{followers: user, deactivated: false})
|
User.Query.build(%{followers: user, is_active: true})
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_followers_query(%User{} = user, page) do
|
def get_followers_query(%User{} = user, page) do
|
||||||
@ -1349,7 +1345,7 @@ defmodule Pleroma.User do
|
|||||||
@spec get_users_from_set([String.t()], keyword()) :: [User.t()]
|
@spec get_users_from_set([String.t()], keyword()) :: [User.t()]
|
||||||
def get_users_from_set(ap_ids, opts \\ []) do
|
def get_users_from_set(ap_ids, opts \\ []) do
|
||||||
local_only = Keyword.get(opts, :local_only, true)
|
local_only = Keyword.get(opts, :local_only, true)
|
||||||
criteria = %{ap_id: ap_ids, deactivated: false}
|
criteria = %{ap_id: ap_ids, is_active: true}
|
||||||
criteria = if local_only, do: Map.put(criteria, :local, true), else: criteria
|
criteria = if local_only, do: Map.put(criteria, :local, true), else: criteria
|
||||||
|
|
||||||
User.Query.build(criteria)
|
User.Query.build(criteria)
|
||||||
@ -1360,7 +1356,7 @@ defmodule Pleroma.User do
|
|||||||
def get_recipients_from_activity(%Activity{recipients: to, actor: actor}) do
|
def get_recipients_from_activity(%Activity{recipients: to, actor: actor}) do
|
||||||
to = [actor | to]
|
to = [actor | to]
|
||||||
|
|
||||||
query = User.Query.build(%{recipients_from_activity: to, local: true, deactivated: false})
|
query = User.Query.build(%{recipients_from_activity: to, local: true, is_active: true})
|
||||||
|
|
||||||
query
|
query
|
||||||
|> Repo.all()
|
|> Repo.all()
|
||||||
@ -1579,19 +1575,19 @@ defmodule Pleroma.User do
|
|||||||
|
|
||||||
defp maybe_filter_on_ap_id(query, _ap_ids), do: query
|
defp maybe_filter_on_ap_id(query, _ap_ids), do: query
|
||||||
|
|
||||||
def deactivate_async(user, status \\ true) do
|
def set_activation_async(user, status \\ true) do
|
||||||
BackgroundWorker.enqueue("deactivate_user", %{"user_id" => user.id, "status" => status})
|
BackgroundWorker.enqueue("user_activation", %{"user_id" => user.id, "status" => status})
|
||||||
end
|
end
|
||||||
|
|
||||||
def deactivate(user, status \\ true)
|
@spec set_activation([User.t()], boolean()) :: {:ok, User.t()} | {:error, Changeset.t()}
|
||||||
|
def set_activation(users, status) when is_list(users) do
|
||||||
def deactivate(users, status) when is_list(users) do
|
|
||||||
Repo.transaction(fn ->
|
Repo.transaction(fn ->
|
||||||
for user <- users, do: deactivate(user, status)
|
for user <- users, do: set_activation(user, status)
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
def deactivate(%User{} = user, status) do
|
@spec set_activation(User.t(), boolean()) :: {:ok, User.t()} | {:error, Changeset.t()}
|
||||||
|
def set_activation(%User{} = user, status) do
|
||||||
with {:ok, user} <- set_activation_status(user, status) do
|
with {:ok, user} <- set_activation_status(user, status) do
|
||||||
user
|
user
|
||||||
|> get_followers()
|
|> get_followers()
|
||||||
@ -1680,7 +1676,7 @@ defmodule Pleroma.User do
|
|||||||
registration_reason: nil,
|
registration_reason: nil,
|
||||||
confirmation_token: nil,
|
confirmation_token: nil,
|
||||||
domain_blocks: [],
|
domain_blocks: [],
|
||||||
deactivated: true,
|
is_active: false,
|
||||||
ap_enabled: false,
|
ap_enabled: false,
|
||||||
is_moderator: false,
|
is_moderator: false,
|
||||||
is_admin: false,
|
is_admin: false,
|
||||||
@ -1754,7 +1750,7 @@ defmodule Pleroma.User do
|
|||||||
delete_or_deactivate(user)
|
delete_or_deactivate(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform(:deactivate_async, user, status), do: deactivate(user, status)
|
def perform(:set_activation_async, user, status), do: set_activation(user, status)
|
||||||
|
|
||||||
@spec external_users_query() :: Ecto.Query.t()
|
@spec external_users_query() :: Ecto.Query.t()
|
||||||
def external_users_query do
|
def external_users_query do
|
||||||
@ -2048,7 +2044,7 @@ defmodule Pleroma.User do
|
|||||||
|
|
||||||
@spec all_superusers() :: [User.t()]
|
@spec all_superusers() :: [User.t()]
|
||||||
def all_superusers do
|
def all_superusers do
|
||||||
User.Query.build(%{super_users: true, local: true, deactivated: false})
|
User.Query.build(%{super_users: true, local: true, is_active: true})
|
||||||
|> Repo.all()
|
|> Repo.all()
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -2089,7 +2085,7 @@ defmodule Pleroma.User do
|
|||||||
left_join: a in Pleroma.Activity,
|
left_join: a in Pleroma.Activity,
|
||||||
on: u.ap_id == a.actor,
|
on: u.ap_id == a.actor,
|
||||||
where: not is_nil(u.nickname),
|
where: not is_nil(u.nickname),
|
||||||
where: u.deactivated != ^true,
|
where: u.is_active == ^true,
|
||||||
where: u.id not in ^has_read_notifications,
|
where: u.id not in ^has_read_notifications,
|
||||||
group_by: u.id,
|
group_by: u.id,
|
||||||
having:
|
having:
|
||||||
@ -2210,9 +2206,9 @@ defmodule Pleroma.User do
|
|||||||
end
|
end
|
||||||
|
|
||||||
# Internal function; public one is `deactivate/2`
|
# Internal function; public one is `deactivate/2`
|
||||||
defp set_activation_status(user, deactivated) do
|
defp set_activation_status(user, status) do
|
||||||
user
|
user
|
||||||
|> cast(%{deactivated: deactivated}, [:deactivated])
|
|> cast(%{is_active: status}, [:is_active])
|
||||||
|> update_and_set_cache()
|
|> update_and_set_cache()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ defmodule Pleroma.User.Query do
|
|||||||
defp compose_query({:external, _}, query), do: location_query(query, false)
|
defp compose_query({:external, _}, query), do: location_query(query, false)
|
||||||
|
|
||||||
defp compose_query({:active, _}, query) do
|
defp compose_query({:active, _}, query) do
|
||||||
User.restrict_deactivated(query)
|
where(query, [u], u.is_active == true)
|
||||||
|> where([u], u.is_approved == true)
|
|> where([u], u.is_approved == true)
|
||||||
|> where([u], u.is_confirmed == true)
|
|> where([u], u.is_confirmed == true)
|
||||||
end
|
end
|
||||||
@ -148,11 +148,11 @@ defmodule Pleroma.User.Query do
|
|||||||
end
|
end
|
||||||
|
|
||||||
defp compose_query({:deactivated, false}, query) do
|
defp compose_query({:deactivated, false}, query) do
|
||||||
User.restrict_deactivated(query)
|
where(query, [u], u.is_active == true)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp compose_query({:deactivated, true}, query) do
|
defp compose_query({:deactivated, true}, query) do
|
||||||
where(query, [u], u.deactivated == ^true)
|
where(query, [u], u.is_active == false)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp compose_query({:confirmation_pending, bool}, query) do
|
defp compose_query({:confirmation_pending, bool}, query) do
|
||||||
|
@ -56,7 +56,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|
|||||||
|
|
||||||
defp check_actor_is_active(actor) when is_binary(actor) do
|
defp check_actor_is_active(actor) when is_binary(actor) do
|
||||||
case User.get_cached_by_ap_id(actor) do
|
case User.get_cached_by_ap_id(actor) do
|
||||||
%User{deactivated: deactivated} -> not deactivated
|
%User{is_active: true} -> true
|
||||||
_ -> false
|
_ -> false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -35,7 +35,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations do
|
|||||||
cng
|
cng
|
||||||
|> validate_change(field_name, fn field_name, actor ->
|
|> validate_change(field_name, fn field_name, actor ->
|
||||||
case User.get_cached_by_ap_id(actor) do
|
case User.get_cached_by_ap_id(actor) do
|
||||||
%User{deactivated: true} ->
|
%User{is_active: false} ->
|
||||||
[{field_name, "user is deactivated"}]
|
[{field_name, "user is deactivated"}]
|
||||||
|
|
||||||
%User{} ->
|
%User{} ->
|
||||||
|
@ -172,9 +172,9 @@ defmodule Pleroma.Web.AdminAPI.UserController do
|
|||||||
def toggle_activation(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname}) do
|
def toggle_activation(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname}) do
|
||||||
user = User.get_cached_by_nickname(nickname)
|
user = User.get_cached_by_nickname(nickname)
|
||||||
|
|
||||||
{:ok, updated_user} = User.deactivate(user, !user.deactivated)
|
{:ok, updated_user} = User.set_activation(user, !user.is_active)
|
||||||
|
|
||||||
action = if user.deactivated, do: "activate", else: "deactivate"
|
action = if !user.is_active, do: "activate", else: "deactivate"
|
||||||
|
|
||||||
ModerationLog.insert_log(%{
|
ModerationLog.insert_log(%{
|
||||||
actor: admin,
|
actor: admin,
|
||||||
@ -189,7 +189,7 @@ defmodule Pleroma.Web.AdminAPI.UserController do
|
|||||||
|
|
||||||
def activate(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do
|
def activate(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do
|
||||||
users = Enum.map(nicknames, &User.get_cached_by_nickname/1)
|
users = Enum.map(nicknames, &User.get_cached_by_nickname/1)
|
||||||
{:ok, updated_users} = User.deactivate(users, false)
|
{:ok, updated_users} = User.set_activation(users, true)
|
||||||
|
|
||||||
ModerationLog.insert_log(%{
|
ModerationLog.insert_log(%{
|
||||||
actor: admin,
|
actor: admin,
|
||||||
@ -204,7 +204,7 @@ defmodule Pleroma.Web.AdminAPI.UserController do
|
|||||||
|
|
||||||
def deactivate(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do
|
def deactivate(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames}) do
|
||||||
users = Enum.map(nicknames, &User.get_cached_by_nickname/1)
|
users = Enum.map(nicknames, &User.get_cached_by_nickname/1)
|
||||||
{:ok, updated_users} = User.deactivate(users, true)
|
{:ok, updated_users} = User.set_activation(users, false)
|
||||||
|
|
||||||
ModerationLog.insert_log(%{
|
ModerationLog.insert_log(%{
|
||||||
actor: admin,
|
actor: admin,
|
||||||
|
@ -73,7 +73,7 @@ defmodule Pleroma.Web.AdminAPI.AccountView do
|
|||||||
"avatar" => avatar,
|
"avatar" => avatar,
|
||||||
"nickname" => user.nickname,
|
"nickname" => user.nickname,
|
||||||
"display_name" => display_name,
|
"display_name" => display_name,
|
||||||
"deactivated" => user.deactivated,
|
"is_active" => user.is_active,
|
||||||
"local" => user.local,
|
"local" => user.local,
|
||||||
"roles" => User.roles(user),
|
"roles" => User.roles(user),
|
||||||
"tags" => user.tags || [],
|
"tags" => user.tags || [],
|
||||||
|
@ -182,7 +182,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.ReportOperation do
|
|||||||
properties:
|
properties:
|
||||||
Map.merge(Account.schema().properties, %{
|
Map.merge(Account.schema().properties, %{
|
||||||
nickname: %Schema{type: :string},
|
nickname: %Schema{type: :string},
|
||||||
deactivated: %Schema{type: :boolean},
|
is_active: %Schema{type: :boolean},
|
||||||
local: %Schema{type: :boolean},
|
local: %Schema{type: :boolean},
|
||||||
roles: %Schema{
|
roles: %Schema{
|
||||||
type: :object,
|
type: :object,
|
||||||
|
@ -132,7 +132,7 @@ defmodule Pleroma.Web.ApiSpec.Admin.StatusOperation do
|
|||||||
avatar: %Schema{type: :string},
|
avatar: %Schema{type: :string},
|
||||||
nickname: %Schema{type: :string},
|
nickname: %Schema{type: :string},
|
||||||
display_name: %Schema{type: :string},
|
display_name: %Schema{type: :string},
|
||||||
deactivated: %Schema{type: :boolean},
|
is_active: %Schema{type: :boolean},
|
||||||
local: %Schema{type: :boolean},
|
local: %Schema{type: :boolean},
|
||||||
roles: %Schema{
|
roles: %Schema{
|
||||||
type: :object,
|
type: :object,
|
||||||
|
@ -376,7 +376,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
|
|||||||
defp maybe_put_allow_following_move(data, _, _), do: data
|
defp maybe_put_allow_following_move(data, _, _), do: data
|
||||||
|
|
||||||
defp maybe_put_activation_status(data, user, %User{is_admin: true}) do
|
defp maybe_put_activation_status(data, user, %User{is_admin: true}) do
|
||||||
Kernel.put_in(data, [:pleroma, :deactivated], user.deactivated)
|
Kernel.put_in(data, [:pleroma, :deactivated], !user.is_active)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp maybe_put_activation_status(data, _, _), do: data
|
defp maybe_put_activation_status(data, _, _), do: data
|
||||||
|
@ -491,7 +491,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
|
|||||||
def build_tags(object_tags) when is_list(object_tags) do
|
def build_tags(object_tags) when is_list(object_tags) do
|
||||||
object_tags
|
object_tags
|
||||||
|> Enum.filter(&is_binary/1)
|
|> Enum.filter(&is_binary/1)
|
||||||
|> Enum.map(&%{name: &1, url: "/tag/#{URI.encode(&1)}"})
|
|> Enum.map(&%{name: &1, url: "#{Pleroma.Web.base_url()}/tag/#{URI.encode(&1)}"})
|
||||||
end
|
end
|
||||||
|
|
||||||
def build_tags(_), do: []
|
def build_tags(_), do: []
|
||||||
|
@ -14,7 +14,7 @@ defmodule Pleroma.Web.MongooseIM.MongooseIMController do
|
|||||||
plug(RateLimiter, [name: :authentication, params: ["user"]] when action == :check_password)
|
plug(RateLimiter, [name: :authentication, params: ["user"]] when action == :check_password)
|
||||||
|
|
||||||
def user_exists(conn, %{"user" => username}) do
|
def user_exists(conn, %{"user" => username}) do
|
||||||
with %User{} <- Repo.get_by(User, nickname: username, local: true, deactivated: false) do
|
with %User{} <- Repo.get_by(User, nickname: username, local: true, is_active: true) do
|
||||||
conn
|
conn
|
||||||
|> json(true)
|
|> json(true)
|
||||||
else
|
else
|
||||||
@ -26,7 +26,7 @@ defmodule Pleroma.Web.MongooseIM.MongooseIMController do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def check_password(conn, %{"user" => username, "pass" => password}) do
|
def check_password(conn, %{"user" => username, "pass" => password}) do
|
||||||
with %User{password_hash: password_hash, deactivated: false} <-
|
with %User{password_hash: password_hash, is_active: true} <-
|
||||||
Repo.get_by(User, nickname: username, local: true),
|
Repo.get_by(User, nickname: username, local: true),
|
||||||
true <- AuthenticationPlug.checkpw(password, password_hash) do
|
true <- AuthenticationPlug.checkpw(password, password_hash) do
|
||||||
conn
|
conn
|
||||||
|
@ -26,7 +26,7 @@ defmodule Pleroma.Web.PleromaAPI.EmojiReactionView do
|
|||||||
user_ap_ids
|
user_ap_ids
|
||||||
|> Enum.map(&Pleroma.User.get_cached_by_ap_id/1)
|
|> Enum.map(&Pleroma.User.get_cached_by_ap_id/1)
|
||||||
|> Enum.filter(fn
|
|> Enum.filter(fn
|
||||||
%{deactivated: false} -> true
|
%{is_active: true} -> true
|
||||||
_ -> false
|
_ -> false
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
@ -150,7 +150,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do
|
|||||||
def disable_account(%{assigns: %{user: user}} = conn, params) do
|
def disable_account(%{assigns: %{user: user}} = conn, params) do
|
||||||
case CommonAPI.Utils.confirm_current_password(user, params["password"]) do
|
case CommonAPI.Utils.confirm_current_password(user, params["password"]) do
|
||||||
{:ok, user} ->
|
{:ok, user} ->
|
||||||
User.deactivate_async(user)
|
User.set_activation_async(user, false)
|
||||||
json(conn, %{status: "success"})
|
json(conn, %{status: "success"})
|
||||||
|
|
||||||
{:error, msg} ->
|
{:error, msg} ->
|
||||||
|
@ -59,7 +59,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
|
|||||||
|
|
||||||
def password_reset(nickname_or_email) do
|
def password_reset(nickname_or_email) do
|
||||||
with true <- is_binary(nickname_or_email),
|
with true <- is_binary(nickname_or_email),
|
||||||
%User{local: true, email: email, deactivated: false} = user when is_binary(email) <-
|
%User{local: true, email: email, is_active: true} = user when is_binary(email) <-
|
||||||
User.get_by_nickname_or_email(nickname_or_email),
|
User.get_by_nickname_or_email(nickname_or_email),
|
||||||
{:ok, token_record} <- Pleroma.PasswordResetToken.create_token(user) do
|
{:ok, token_record} <- Pleroma.PasswordResetToken.create_token(user) do
|
||||||
user
|
user
|
||||||
|
@ -9,9 +9,9 @@ defmodule Pleroma.Workers.BackgroundWorker do
|
|||||||
|
|
||||||
@impl Oban.Worker
|
@impl Oban.Worker
|
||||||
|
|
||||||
def perform(%Job{args: %{"op" => "deactivate_user", "user_id" => user_id, "status" => status}}) do
|
def perform(%Job{args: %{"op" => "user_activation", "user_id" => user_id, "status" => status}}) do
|
||||||
user = User.get_cached_by_id(user_id)
|
user = User.get_cached_by_id(user_id)
|
||||||
User.perform(:deactivate_async, user, status)
|
User.perform(:set_activation_async, user, status)
|
||||||
end
|
end
|
||||||
|
|
||||||
def perform(%Job{args: %{"op" => "delete_user", "user_id" => user_id}}) do
|
def perform(%Job{args: %{"op" => "delete_user", "user_id" => user_id}}) do
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Repo.Migrations.RefactorDeactivatedUserField do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def up do
|
||||||
|
# Flip the values before we change the meaning of the column
|
||||||
|
execute("UPDATE users SET deactivated = NOT deactivated;")
|
||||||
|
execute("ALTER TABLE users RENAME COLUMN deactivated TO is_active;")
|
||||||
|
execute("ALTER TABLE users ALTER COLUMN is_active SET DEFAULT true;")
|
||||||
|
execute("ALTER INDEX users_deactivated_index RENAME TO users_is_active_index;")
|
||||||
|
end
|
||||||
|
|
||||||
|
def down do
|
||||||
|
execute("UPDATE users SET is_active = NOT is_active;")
|
||||||
|
execute("ALTER TABLE users RENAME COLUMN is_active TO deactivated;")
|
||||||
|
execute("ALTER TABLE users ALTER COLUMN deactivated SET DEFAULT false;")
|
||||||
|
execute("ALTER INDEX users_is_active_index RENAME TO users_deactivated_index;")
|
||||||
|
end
|
||||||
|
end
|
@ -1 +1 @@
|
|||||||
.actions-button[data-v-758e95f2]{text-align:left;width:350px;padding:10px}.actions-button-container[data-v-758e95f2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-dropdown[data-v-758e95f2]{float:right}.el-icon-edit[data-v-758e95f2]{margin-right:5px}.tag-container[data-v-758e95f2]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tag-text[data-v-758e95f2]{padding-right:20px}.no-hover[data-v-758e95f2]:hover{color:#606266;background-color:#fff;cursor:auto}
|
.actions-button[data-v-6d7c9d64]{text-align:left;width:350px;padding:10px}.actions-button-container[data-v-6d7c9d64]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-dropdown[data-v-6d7c9d64]{float:right}.el-icon-edit[data-v-6d7c9d64]{margin-right:5px}.tag-container[data-v-6d7c9d64]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.tag-text[data-v-6d7c9d64]{padding-right:20px}.no-hover[data-v-6d7c9d64]:hover{color:#606266;background-color:#fff;cursor:auto}
|
@ -1 +1 @@
|
|||||||
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=renderer content=webkit><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>Admin FE</title><link rel="shortcut icon" href=favicon.ico><link href=chunk-elementUI.f77689d7.css rel=stylesheet><link href=chunk-libs.5cf7f50a.css rel=stylesheet><link href=app.6fb984d1.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=static/js/runtime.5c1034c4.js></script><script type=text/javascript src=static/js/chunk-elementUI.21957ec8.js></script><script type=text/javascript src=static/js/chunk-libs.5ca2c8e8.js></script><script type=text/javascript src=static/js/app.01bfc983.js></script></body></html>
|
<!DOCTYPE html><html><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1"><meta name=renderer content=webkit><meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"><title>Admin FE</title><link rel="shortcut icon" href=favicon.ico><link href=chunk-elementUI.f77689d7.css rel=stylesheet><link href=chunk-libs.5cf7f50a.css rel=stylesheet><link href=app.6fb984d1.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=static/js/runtime.6b30c658.js></script><script type=text/javascript src=static/js/chunk-elementUI.21957ec8.js></script><script type=text/javascript src=static/js/chunk-libs.5ca2c8e8.js></script><script type=text/javascript src=static/js/app.1428845f.js></script></body></html>
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
priv/static/adminfe/static/js/app.1428845f.js
Normal file
2
priv/static/adminfe/static/js/app.1428845f.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/adminfe/static/js/app.1428845f.js.map
Normal file
1
priv/static/adminfe/static/js/app.1428845f.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
priv/static/adminfe/static/js/chunk-35b1.50c1449b.js
Normal file
2
priv/static/adminfe/static/js/chunk-35b1.50c1449b.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/adminfe/static/js/chunk-35b1.50c1449b.js.map
Normal file
1
priv/static/adminfe/static/js/chunk-35b1.50c1449b.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
priv/static/adminfe/static/js/chunk-606c.8ac52179.js
Normal file
2
priv/static/adminfe/static/js/chunk-606c.8ac52179.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/adminfe/static/js/chunk-606c.8ac52179.js.map
Normal file
1
priv/static/adminfe/static/js/chunk-606c.8ac52179.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
priv/static/adminfe/static/js/chunk-7041.390b2ec4.js.map
Normal file
1
priv/static/adminfe/static/js/chunk-7041.390b2ec4.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
priv/static/adminfe/static/js/chunk-7968.88218960.js.map
Normal file
1
priv/static/adminfe/static/js/chunk-7968.88218960.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
priv/static/adminfe/static/js/chunk-bc60.79f8c7e7.js
Normal file
2
priv/static/adminfe/static/js/chunk-bc60.79f8c7e7.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/adminfe/static/js/chunk-bc60.79f8c7e7.js.map
Normal file
1
priv/static/adminfe/static/js/chunk-bc60.79f8c7e7.js.map
Normal file
File diff suppressed because one or more lines are too long
2
priv/static/adminfe/static/js/chunk-f364.a5927f18.js
Normal file
2
priv/static/adminfe/static/js/chunk-f364.a5927f18.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/adminfe/static/js/chunk-f364.a5927f18.js.map
Normal file
1
priv/static/adminfe/static/js/chunk-f364.a5927f18.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,2 +1,2 @@
|
|||||||
!function(e){function n(n){for(var t,r,a=n[0],h=n[1],f=n[2],i=0,k=[];i<a.length;i++)r=a[i],Object.prototype.hasOwnProperty.call(u,r)&&u[r]&&k.push(u[r][0]),u[r]=0;for(t in h)Object.prototype.hasOwnProperty.call(h,t)&&(e[t]=h[t]);for(d&&d(n);k.length;)k.shift()();return o.push.apply(o,f||[]),c()}function c(){for(var e,n=0;n<o.length;n++){for(var c=o[n],t=!0,r=1;r<c.length;r++){var h=c[r];0!==u[h]&&(t=!1)}t&&(o.splice(n--,1),e=a(a.s=c[0]))}return e}var t={},r={runtime:0},u={runtime:0},o=[];function a(n){if(t[n])return t[n].exports;var c=t[n]={i:n,l:!1,exports:{}};return e[n].call(c.exports,c,c.exports,a),c.l=!0,c.exports}a.e=function(e){var n=[];r[e]?n.push(r[e]):0!==r[e]&&{"chunk-68ea9":1,"chunk-6e81":1,"chunk-commons":1,"chunk-03c5":1,"chunk-0537":1,"chunk-1e46":1,"chunk-606c":1,"chunk-4770":1,"chunk-7c6b":1,"chunk-170f":1,"chunk-1e1e":1,"chunk-176e":1,"chunk-35b1":1,"chunk-7041":1,"chunk-7968":1,"chunk-f364":1,"chunk-e660":1}[e]&&n.push(r[e]=new Promise(function(n,c){for(var t=({"chunk-commons":"chunk-commons"}[e]||e)+"."+{"7zzA":"31d6cfe0",JEtC:"31d6cfe0","chunk-68ea9":"892994aa","chunk-6e81":"687d5046","chunk-commons":"f7c3d390","chunk-03c5":"3368e00c","chunk-0537":"76929cff","chunk-1e46":"0411a9b2","chunk-606c":"7c5b0a08","chunk-68ea":"31d6cfe0","chunk-4770":"20caaae1","chunk-7c6b":"b633878a","chunk-d55e":"31d6cfe0","chunk-170f":"fea927c5","chunk-1e1e":"5980e665","chunk-176e":"d9a630b2","chunk-35b1":"949db050","chunk-7041":"c5f6eab7","chunk-7968":"613084d0","chunk-f364":"4fd16c53",oAJy:"31d6cfe0","chunk-16d0":"31d6cfe0","chunk-e660":"62c077ac"}[e]+".css",r=a.p+t,u=document.getElementsByTagName("link"),o=0;o<u.length;o++){var h=(i=u[o]).getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(h===t||h===r))return n()}var f=document.getElementsByTagName("style");for(o=0;o<f.length;o++){var i;if((h=(i=f[o]).getAttribute("data-href"))===t||h===r)return n()}var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onload=n,d.onerror=function(n){var t=n&&n.target&&n.target.src||r,u=new Error("Loading CSS chunk "+e+" failed.\n("+t+")");u.request=t,c(u)},d.href=r,document.getElementsByTagName("head")[0].appendChild(d)}).then(function(){r[e]=0}));var c=u[e];if(0!==c)if(c)n.push(c[2]);else{var t=new Promise(function(n,t){c=u[e]=[n,t]});n.push(c[2]=t);var o,h=document.createElement("script");h.charset="utf-8",h.timeout=120,a.nc&&h.setAttribute("nonce",a.nc),h.src=function(e){return a.p+"static/js/"+({"chunk-commons":"chunk-commons"}[e]||e)+"."+{"7zzA":"e1ae1c94",JEtC:"f9ba4594","chunk-68ea9":"5a11341a","chunk-6e81":"6c4f2ce1","chunk-commons":"4ae74caa","chunk-03c5":"1b0ab243","chunk-0537":"d0eef370","chunk-1e46":"7c2ee531","chunk-606c":"35588dea","chunk-68ea":"6d56674a","chunk-4770":"1c1fff97","chunk-7c6b":"34152862","chunk-d55e":"f9bab96d","chunk-170f":"e1d6aac3","chunk-1e1e":"37f6f555","chunk-176e":"f64cb745","chunk-35b1":"ddb9524c","chunk-7041":"1495e01c","chunk-7968":"d6317b83","chunk-f364":"f22b0eee",oAJy:"2d5429b2","chunk-16d0":"fef0ce65","chunk-e660":"2101cafc"}[e]+".js"}(e);var f=new Error;o=function(n){h.onerror=h.onload=null,clearTimeout(i);var c=u[e];if(0!==c){if(c){var t=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;f.message="Loading chunk "+e+" failed.\n("+t+": "+r+")",f.name="ChunkLoadError",f.type=t,f.request=r,c[1](f)}u[e]=void 0}};var i=setTimeout(function(){o({type:"timeout",target:h})},12e4);h.onerror=h.onload=o,document.head.appendChild(h)}return Promise.all(n)},a.m=e,a.c=t,a.d=function(e,n,c){a.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:c})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,n){if(1&n&&(e=a(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var c=Object.create(null);if(a.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var t in e)a.d(c,t,function(n){return e[n]}.bind(null,t));return c},a.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(n,"a",n),n},a.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},a.p="",a.oe=function(e){throw console.error(e),e};var h=window.webpackJsonp=window.webpackJsonp||[],f=h.push.bind(h);h.push=n,h=h.slice();for(var i=0;i<h.length;i++)n(h[i]);var d=f;c()}([]);
|
!function(e){function n(n){for(var t,r,a=n[0],h=n[1],f=n[2],i=0,d=[];i<a.length;i++)r=a[i],Object.prototype.hasOwnProperty.call(u,r)&&u[r]&&d.push(u[r][0]),u[r]=0;for(t in h)Object.prototype.hasOwnProperty.call(h,t)&&(e[t]=h[t]);for(k&&k(n);d.length;)d.shift()();return o.push.apply(o,f||[]),c()}function c(){for(var e,n=0;n<o.length;n++){for(var c=o[n],t=!0,r=1;r<c.length;r++){var h=c[r];0!==u[h]&&(t=!1)}t&&(o.splice(n--,1),e=a(a.s=c[0]))}return e}var t={},r={runtime:0},u={runtime:0},o=[];function a(n){if(t[n])return t[n].exports;var c=t[n]={i:n,l:!1,exports:{}};return e[n].call(c.exports,c,c.exports,a),c.l=!0,c.exports}a.e=function(e){var n=[];r[e]?n.push(r[e]):0!==r[e]&&{"chunk-68ea9":1,"chunk-6e81":1,"chunk-commons":1,"chunk-03c5":1,"chunk-0537":1,"chunk-4770":1,"chunk-7c6b":1,"chunk-bc60":1,"chunk-606c":1,"chunk-170f":1,"chunk-1e1e":1,"chunk-35b1":1,"chunk-7041":1,"chunk-7968":1,"chunk-176e":1,"chunk-f364":1,"chunk-e660":1}[e]&&n.push(r[e]=new Promise(function(n,c){for(var t=({"chunk-commons":"chunk-commons"}[e]||e)+"."+{"7zzA":"31d6cfe0",JEtC:"31d6cfe0","chunk-68ea9":"892994aa","chunk-6e81":"687d5046","chunk-commons":"f7c3d390","chunk-03c5":"3368e00c","chunk-0537":"76929cff","chunk-68ea":"31d6cfe0","chunk-4770":"20caaae1","chunk-7c6b":"b633878a","chunk-bc60":"4417dd06","chunk-606c":"7c5b0a08","chunk-d55e":"31d6cfe0","chunk-170f":"fea927c5","chunk-1e1e":"5980e665","chunk-35b1":"949db050","chunk-7041":"c5f6eab7","chunk-7968":"613084d0","chunk-176e":"d9a630b2","chunk-f364":"4fd16c53",oAJy:"31d6cfe0","chunk-16d0":"31d6cfe0","chunk-e660":"62c077ac"}[e]+".css",r=a.p+t,u=document.getElementsByTagName("link"),o=0;o<u.length;o++){var h=(i=u[o]).getAttribute("data-href")||i.getAttribute("href");if("stylesheet"===i.rel&&(h===t||h===r))return n()}var f=document.getElementsByTagName("style");for(o=0;o<f.length;o++){var i;if((h=(i=f[o]).getAttribute("data-href"))===t||h===r)return n()}var k=document.createElement("link");k.rel="stylesheet",k.type="text/css",k.onload=n,k.onerror=function(n){var t=n&&n.target&&n.target.src||r,u=new Error("Loading CSS chunk "+e+" failed.\n("+t+")");u.request=t,c(u)},k.href=r,document.getElementsByTagName("head")[0].appendChild(k)}).then(function(){r[e]=0}));var c=u[e];if(0!==c)if(c)n.push(c[2]);else{var t=new Promise(function(n,t){c=u[e]=[n,t]});n.push(c[2]=t);var o,h=document.createElement("script");h.charset="utf-8",h.timeout=120,a.nc&&h.setAttribute("nonce",a.nc),h.src=function(e){return a.p+"static/js/"+({"chunk-commons":"chunk-commons"}[e]||e)+"."+{"7zzA":"e1ae1c94",JEtC:"f9ba4594","chunk-68ea9":"5a11341a","chunk-6e81":"6c4f2ce1","chunk-commons":"4ae74caa","chunk-03c5":"1b0ab243","chunk-0537":"d0eef370","chunk-68ea":"6d56674a","chunk-4770":"1c1fff97","chunk-7c6b":"34152862","chunk-bc60":"79f8c7e7","chunk-606c":"8ac52179","chunk-d55e":"f9bab96d","chunk-170f":"e1d6aac3","chunk-1e1e":"37f6f555","chunk-35b1":"50c1449b","chunk-7041":"390b2ec4","chunk-7968":"88218960","chunk-176e":"f64cb745","chunk-f364":"a5927f18",oAJy:"2d5429b2","chunk-16d0":"fef0ce65","chunk-e660":"2101cafc"}[e]+".js"}(e);var f=new Error;o=function(n){h.onerror=h.onload=null,clearTimeout(i);var c=u[e];if(0!==c){if(c){var t=n&&("load"===n.type?"missing":n.type),r=n&&n.target&&n.target.src;f.message="Loading chunk "+e+" failed.\n("+t+": "+r+")",f.name="ChunkLoadError",f.type=t,f.request=r,c[1](f)}u[e]=void 0}};var i=setTimeout(function(){o({type:"timeout",target:h})},12e4);h.onerror=h.onload=o,document.head.appendChild(h)}return Promise.all(n)},a.m=e,a.c=t,a.d=function(e,n,c){a.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:c})},a.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.t=function(e,n){if(1&n&&(e=a(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var c=Object.create(null);if(a.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var t in e)a.d(c,t,function(n){return e[n]}.bind(null,t));return c},a.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(n,"a",n),n},a.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},a.p="",a.oe=function(e){throw console.error(e),e};var h=window.webpackJsonp=window.webpackJsonp||[],f=h.push.bind(h);h.push=n,h=h.slice();for(var i=0;i<h.length;i++)n(h[i]);var k=f;c()}([]);
|
||||||
//# sourceMappingURL=runtime.5c1034c4.js.map
|
//# sourceMappingURL=runtime.6b30c658.js.map
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,user-scalable=no"><title>Pleroma</title><!--server-generated-meta--><link rel=icon type=image/png href=/favicon.png><link href=/static/css/app.9a4c5ede37b2f0230836.css rel=stylesheet></head><body class=hidden><noscript>To use Pleroma, please enable JavaScript.</noscript><div id=app></div><script type=text/javascript src=/static/js/vendors~app.952124344a84613dbac0.js></script><script type=text/javascript src=/static/js/app.45547c05212c403dd77c.js></script></body></html>
|
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,user-scalable=no"><!--server-generated-meta--><link rel=icon type=image/png href=/favicon.png><link href=/static/css/app.9a4c5ede37b2f0230836.css rel=stylesheet></head><body class=hidden><noscript>To use Pleroma, please enable JavaScript.</noscript><div id=app></div><script type=text/javascript src=/static/js/vendors~app.54838a79dee084ec3dad.js></script><script type=text/javascript src=/static/js/app.eb8f7164fc75862a251d.js></script></body></html>
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
2
priv/static/static/js/10.a11a612e4c1ef51ded17.js
Normal file
2
priv/static/static/js/10.a11a612e4c1ef51ded17.js
Normal file
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/10.46f441b948010eda4403.js","sourceRoot":""}
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/10.a11a612e4c1ef51ded17.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/11.8ff1ed54814f2d34cb3e.js","sourceRoot":""}
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/11.22872a1f83121e70a148.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/12.13204bdd0ad5703a3ea3.js","sourceRoot":""}
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/12.c6df5166dc6cdcf749e5.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
@ -1 +1 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/13.e27c3eeddcc4b11c1f54.js","sourceRoot":""}
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/13.77214c18c6d2a9865281.js","sourceRoot":""}
|
@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/14.273855b3e4e27ce80219.js","sourceRoot":""}
|
|
File diff suppressed because one or more lines are too long
1
priv/static/static/js/14.e560f5e2f902b9ad2d0d.js.map
Normal file
1
priv/static/static/js/14.e560f5e2f902b9ad2d0d.js.map
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/14.e560f5e2f902b9ad2d0d.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
1
priv/static/static/js/15.2893c12f1ca2bcdc3cbf.js.map
Normal file
1
priv/static/static/js/15.2893c12f1ca2bcdc3cbf.js.map
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/15.2893c12f1ca2bcdc3cbf.js","sourceRoot":""}
|
@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/15.afbe29b6665fcd015b2d.js","sourceRoot":""}
|
|
@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/16.5e3f20da470591d0cabf.js","sourceRoot":""}
|
|
File diff suppressed because one or more lines are too long
1
priv/static/static/js/16.be7f4b788716bec25023.js.map
Normal file
1
priv/static/static/js/16.be7f4b788716bec25023.js.map
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/16.be7f4b788716bec25023.js","sourceRoot":""}
|
@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/17.44e90ef82ee2ef12dc3f.js","sourceRoot":""}
|
|
@ -1,2 +1,2 @@
|
|||||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{583:function(e){e.exports={finder:{error_fetching_user:"Hiba felhasználó beszerzésével",find_user:"Felhasználó keresése"},general:{submit:"Elküld"},login:{login:"Bejelentkezés",logout:"Kijelentkezés",password:"Jelszó",placeholder:"e.g. lain",register:"Feliratkozás",username:"Felhasználó név"},nav:{mentions:"Említéseim",public_tl:"Publikus Idővonal",timeline:"Idővonal",twkn:"Az Egész Ismert Hálózat"},notifications:{followed_you:"követ téged",notifications:"Értesítések",read:"Olvasva!"},post_status:{default:"Most érkeztem L.A.-be",posting:"Küldés folyamatban"},registration:{bio:"Bio",email:"Email",fullname:"Teljes név",password_confirm:"Jelszó megerősítése",registration:"Feliratkozás"},settings:{attachments:"Csatolmányok",avatar:"Avatár",bio:"Bio",current_avatar:"Jelenlegi avatár",current_profile_banner:"Jelenlegi profil banner",filtering:"Szűrés",filtering_explanation:"Minden tartalom mely ezen szavakat tartalmazza némítva lesz, soronként egy",hide_attachments_in_convo:"Csatolmányok elrejtése a társalgásokban",hide_attachments_in_tl:"Csatolmányok elrejtése az idővonalon",name:"Név",name_bio:"Név és Bio",nsfw_clickthrough:"NSFW átkattintási tartalom elrejtésének engedélyezése",profile_background:"Profil háttérkép",profile_banner:"Profil Banner",set_new_avatar:"Új avatár",set_new_profile_background:"Új profil háttér beállítása",set_new_profile_banner:"Új profil banner",settings:"Beállítások",theme:"Téma",user_settings:"Felhasználói beállítások"},timeline:{conversation:"Társalgás",error_fetching:"Hiba a frissítések beszerzésénél",load_older:"Régebbi állapotok betöltése",show_new:"Újak mutatása",up_to_date:"Naprakész"},user_card:{block:"Letilt",blocked:"Letiltva!",follow:"Követ",followees:"Követettek",followers:"Követők",following:"Követve!",follows_you:"Követ téged!",mute:"Némít",muted:"Némított",per_day:"naponta",statuses:"Állapotok"}}}}]);
|
(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{584:function(e){e.exports={finder:{error_fetching_user:"Hiba felhasználó beszerzésével",find_user:"Felhasználó keresése"},general:{submit:"Elküld"},login:{login:"Bejelentkezés",logout:"Kijelentkezés",password:"Jelszó",placeholder:"e.g. lain",register:"Feliratkozás",username:"Felhasználó név"},nav:{mentions:"Említéseim",public_tl:"Publikus Idővonal",timeline:"Idővonal",twkn:"Az Egész Ismert Hálózat"},notifications:{followed_you:"követ téged",notifications:"Értesítések",read:"Olvasva!"},post_status:{default:"Most érkeztem L.A.-be",posting:"Küldés folyamatban"},registration:{bio:"Bio",email:"Email",fullname:"Teljes név",password_confirm:"Jelszó megerősítése",registration:"Feliratkozás"},settings:{attachments:"Csatolmányok",avatar:"Avatár",bio:"Bio",current_avatar:"Jelenlegi avatár",current_profile_banner:"Jelenlegi profil banner",filtering:"Szűrés",filtering_explanation:"Minden tartalom mely ezen szavakat tartalmazza némítva lesz, soronként egy",hide_attachments_in_convo:"Csatolmányok elrejtése a társalgásokban",hide_attachments_in_tl:"Csatolmányok elrejtése az idővonalon",name:"Név",name_bio:"Név és Bio",nsfw_clickthrough:"NSFW átkattintási tartalom elrejtésének engedélyezése",profile_background:"Profil háttérkép",profile_banner:"Profil Banner",set_new_avatar:"Új avatár",set_new_profile_background:"Új profil háttér beállítása",set_new_profile_banner:"Új profil banner",settings:"Beállítások",theme:"Téma",user_settings:"Felhasználói beállítások"},timeline:{conversation:"Társalgás",error_fetching:"Hiba a frissítések beszerzésénél",load_older:"Régebbi állapotok betöltése",show_new:"Újak mutatása",up_to_date:"Naprakész"},user_card:{block:"Letilt",blocked:"Letiltva!",follow:"Követ",followees:"Követettek",followers:"Követők",following:"Követve!",follows_you:"Követ téged!",mute:"Némít",muted:"Némított",per_day:"naponta",statuses:"Állapotok"}}}}]);
|
||||||
//# sourceMappingURL=17.44e90ef82ee2ef12dc3f.js.map
|
//# sourceMappingURL=17.4ddba89b4f8c284f6392.js.map
|
1
priv/static/static/js/17.4ddba89b4f8c284f6392.js.map
Normal file
1
priv/static/static/js/17.4ddba89b4f8c284f6392.js.map
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/17.4ddba89b4f8c284f6392.js","sourceRoot":""}
|
2
priv/static/static/js/18.990b88b57bf3a6809098.js
Normal file
2
priv/static/static/js/18.990b88b57bf3a6809098.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/18.990b88b57bf3a6809098.js.map
Normal file
1
priv/static/static/js/18.990b88b57bf3a6809098.js.map
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/18.990b88b57bf3a6809098.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/18.9a5b877f94b2b53065e1.js","sourceRoot":""}
|
|
@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/19.1fd4da643df0abf89122.js","sourceRoot":""}
|
|
File diff suppressed because one or more lines are too long
1
priv/static/static/js/19.783715f17e3f98e8898e.js.map
Normal file
1
priv/static/static/js/19.783715f17e3f98e8898e.js.map
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/19.783715f17e3f98e8898e.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
priv/static/static/js/2.88fa7ac80b2020ac2b46.js
Normal file
2
priv/static/static/js/2.88fa7ac80b2020ac2b46.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/2.88fa7ac80b2020ac2b46.js.map
Normal file
1
priv/static/static/js/2.88fa7ac80b2020ac2b46.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
priv/static/static/js/20.96c40f6c9db8c08633bd.js.map
Normal file
1
priv/static/static/js/20.96c40f6c9db8c08633bd.js.map
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/20.96c40f6c9db8c08633bd.js","sourceRoot":""}
|
@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/20.a64fd29da59076399a27.js","sourceRoot":""}
|
|
@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/21.243d9e6ebf469a2dc740.js","sourceRoot":""}
|
|
File diff suppressed because one or more lines are too long
1
priv/static/static/js/21.5a9f8e39a7833c1aa117.js.map
Normal file
1
priv/static/static/js/21.5a9f8e39a7833c1aa117.js.map
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/21.5a9f8e39a7833c1aa117.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
1
priv/static/static/js/22.d65671b9e5e00a0eb625.js.map
Normal file
1
priv/static/static/js/22.d65671b9e5e00a0eb625.js.map
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/22.d65671b9e5e00a0eb625.js","sourceRoot":""}
|
@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/22.e20ef7e5fefc0964cdd1.js","sourceRoot":""}
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user