Merge branch 'develop' into refactor/gun-pool-registry
This commit is contained in:
commit
b2d398b1d0
159 changed files with 309 additions and 746 deletions
|
@ -25,6 +25,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Mastodon API: Added `pleroma.metadata.fields_limits` to /api/v1/instance
|
- Mastodon API: Added `pleroma.metadata.fields_limits` to /api/v1/instance
|
||||||
- Mastodon API: On deletion, returns the original post text.
|
- Mastodon API: On deletion, returns the original post text.
|
||||||
- Mastodon API: Add `pleroma.unread_count` to the Marker entity.
|
- Mastodon API: Add `pleroma.unread_count` to the Marker entity.
|
||||||
|
- **Breaking:** Notification Settings API for suppressing notifications
|
||||||
|
has been simplified down to `block_from_strangers`.
|
||||||
|
- **Breaking:** Notification Settings API option for hiding push notification
|
||||||
|
contents has been renamed to `hide_notification_contents`
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
|
@ -512,6 +512,7 @@ config :pleroma, Oban,
|
||||||
attachments_cleanup: 5,
|
attachments_cleanup: 5,
|
||||||
new_users_digest: 1
|
new_users_digest: 1
|
||||||
],
|
],
|
||||||
|
plugins: [Oban.Plugins.Pruner],
|
||||||
crontab: [
|
crontab: [
|
||||||
{"0 0 * * *", Pleroma.Workers.Cron.ClearOauthTokenWorker},
|
{"0 0 * * *", Pleroma.Workers.Cron.ClearOauthTokenWorker},
|
||||||
{"0 * * * *", Pleroma.Workers.Cron.StatsWorker},
|
{"0 * * * *", Pleroma.Workers.Cron.StatsWorker},
|
||||||
|
|
|
@ -287,11 +287,8 @@ See [Admin-API](admin_api.md)
|
||||||
* Method `PUT`
|
* Method `PUT`
|
||||||
* Authentication: required
|
* Authentication: required
|
||||||
* Params:
|
* Params:
|
||||||
* `followers`: BOOLEAN field, receives notifications from followers
|
* `block_from_strangers`: BOOLEAN field, blocks notifications from accounts you do not follow
|
||||||
* `follows`: BOOLEAN field, receives notifications from people the user follows
|
* `hide_notification_contents`: BOOLEAN field. When set to true, it removes the contents of a message from the push notification.
|
||||||
* `remote`: BOOLEAN field, receives notifications from people on remote instances
|
|
||||||
* `local`: BOOLEAN field, receives notifications from people on the local instance
|
|
||||||
* `privacy_option`: BOOLEAN field. When set to true, it removes the contents of a message from the push notification.
|
|
||||||
* Response: JSON. Returns `{"status": "success"}` if the update was successful, otherwise returns `{"error": "error_msg"}`
|
* Response: JSON. Returns `{"status": "success"}` if the update was successful, otherwise returns `{"error": "error_msg"}`
|
||||||
|
|
||||||
## `/api/pleroma/healthcheck`
|
## `/api/pleroma/healthcheck`
|
||||||
|
|
|
@ -3,8 +3,8 @@ defmodule Mix.Tasks.Pleroma.NotificationSettings do
|
||||||
@moduledoc """
|
@moduledoc """
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
> mix pleroma.notification_settings --privacy-option=false --nickname-users="parallel588" # set false only for parallel588 user
|
> mix pleroma.notification_settings --hide-notification-contents=false --nickname-users="parallel588" # set false only for parallel588 user
|
||||||
> mix pleroma.notification_settings --privacy-option=true # set true for all users
|
> mix pleroma.notification_settings --hide-notification-contents=true # set true for all users
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -19,16 +19,16 @@ defmodule Mix.Tasks.Pleroma.NotificationSettings do
|
||||||
OptionParser.parse(
|
OptionParser.parse(
|
||||||
args,
|
args,
|
||||||
strict: [
|
strict: [
|
||||||
privacy_option: :boolean,
|
hide_notification_contents: :boolean,
|
||||||
email_users: :string,
|
email_users: :string,
|
||||||
nickname_users: :string
|
nickname_users: :string
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
privacy_option = Keyword.get(options, :privacy_option)
|
hide_notification_contents = Keyword.get(options, :hide_notification_contents)
|
||||||
|
|
||||||
if not is_nil(privacy_option) do
|
if not is_nil(hide_notification_contents) do
|
||||||
privacy_option
|
hide_notification_contents
|
||||||
|> build_query(options)
|
|> build_query(options)
|
||||||
|> Pleroma.Repo.update_all([])
|
|> Pleroma.Repo.update_all([])
|
||||||
end
|
end
|
||||||
|
@ -36,15 +36,15 @@ defmodule Mix.Tasks.Pleroma.NotificationSettings do
|
||||||
shell_info("Done")
|
shell_info("Done")
|
||||||
end
|
end
|
||||||
|
|
||||||
defp build_query(privacy_option, options) do
|
defp build_query(hide_notification_contents, options) do
|
||||||
query =
|
query =
|
||||||
from(u in Pleroma.User,
|
from(u in Pleroma.User,
|
||||||
update: [
|
update: [
|
||||||
set: [
|
set: [
|
||||||
notification_settings:
|
notification_settings:
|
||||||
fragment(
|
fragment(
|
||||||
"jsonb_set(notification_settings, '{privacy_option}', ?)",
|
"jsonb_set(notification_settings, '{hide_notification_contents}', ?)",
|
||||||
^privacy_option
|
^hide_notification_contents
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
|
@ -571,10 +571,7 @@ defmodule Pleroma.Notification do
|
||||||
[
|
[
|
||||||
:self,
|
:self,
|
||||||
:invisible,
|
:invisible,
|
||||||
:followers,
|
:block_from_strangers,
|
||||||
:follows,
|
|
||||||
:non_followers,
|
|
||||||
:non_follows,
|
|
||||||
:recently_followed,
|
:recently_followed,
|
||||||
:filtered
|
:filtered
|
||||||
]
|
]
|
||||||
|
@ -595,45 +592,15 @@ defmodule Pleroma.Notification do
|
||||||
end
|
end
|
||||||
|
|
||||||
def skip?(
|
def skip?(
|
||||||
:followers,
|
:block_from_strangers,
|
||||||
%Activity{} = activity,
|
%Activity{} = activity,
|
||||||
%User{notification_settings: %{followers: false}} = user
|
%User{notification_settings: %{block_from_strangers: true}} = user
|
||||||
) do
|
|
||||||
actor = activity.data["actor"]
|
|
||||||
follower = User.get_cached_by_ap_id(actor)
|
|
||||||
User.following?(follower, user)
|
|
||||||
end
|
|
||||||
|
|
||||||
def skip?(
|
|
||||||
:non_followers,
|
|
||||||
%Activity{} = activity,
|
|
||||||
%User{notification_settings: %{non_followers: false}} = user
|
|
||||||
) do
|
) do
|
||||||
actor = activity.data["actor"]
|
actor = activity.data["actor"]
|
||||||
follower = User.get_cached_by_ap_id(actor)
|
follower = User.get_cached_by_ap_id(actor)
|
||||||
!User.following?(follower, user)
|
!User.following?(follower, user)
|
||||||
end
|
end
|
||||||
|
|
||||||
def skip?(
|
|
||||||
:follows,
|
|
||||||
%Activity{} = activity,
|
|
||||||
%User{notification_settings: %{follows: false}} = user
|
|
||||||
) do
|
|
||||||
actor = activity.data["actor"]
|
|
||||||
followed = User.get_cached_by_ap_id(actor)
|
|
||||||
User.following?(user, followed)
|
|
||||||
end
|
|
||||||
|
|
||||||
def skip?(
|
|
||||||
:non_follows,
|
|
||||||
%Activity{} = activity,
|
|
||||||
%User{notification_settings: %{non_follows: false}} = user
|
|
||||||
) do
|
|
||||||
actor = activity.data["actor"]
|
|
||||||
followed = User.get_cached_by_ap_id(actor)
|
|
||||||
!User.following?(user, followed)
|
|
||||||
end
|
|
||||||
|
|
||||||
# To do: consider defining recency in hours and checking FollowingRelationship with a single SQL
|
# To do: consider defining recency in hours and checking FollowingRelationship with a single SQL
|
||||||
def skip?(:recently_followed, %Activity{data: %{"type" => "Follow"}} = activity, %User{} = user) do
|
def skip?(:recently_followed, %Activity{data: %{"type" => "Follow"}} = activity, %User{} = user) do
|
||||||
actor = activity.data["actor"]
|
actor = activity.data["actor"]
|
||||||
|
|
|
@ -10,21 +10,15 @@ defmodule Pleroma.User.NotificationSetting do
|
||||||
@primary_key false
|
@primary_key false
|
||||||
|
|
||||||
embedded_schema do
|
embedded_schema do
|
||||||
field(:followers, :boolean, default: true)
|
field(:block_from_strangers, :boolean, default: false)
|
||||||
field(:follows, :boolean, default: true)
|
field(:hide_notification_contents, :boolean, default: false)
|
||||||
field(:non_follows, :boolean, default: true)
|
|
||||||
field(:non_followers, :boolean, default: true)
|
|
||||||
field(:privacy_option, :boolean, default: false)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def changeset(schema, params) do
|
def changeset(schema, params) do
|
||||||
schema
|
schema
|
||||||
|> cast(prepare_attrs(params), [
|
|> cast(prepare_attrs(params), [
|
||||||
:followers,
|
:block_from_strangers,
|
||||||
:follows,
|
:hide_notification_contents
|
||||||
:non_follows,
|
|
||||||
:non_followers,
|
|
||||||
:privacy_option
|
|
||||||
])
|
])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -60,7 +60,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy do
|
||||||
if score < 0.8 do
|
if score < 0.8 do
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
else
|
else
|
||||||
{:reject, nil}
|
{:reject, "[AntiFollowbotPolicy] Scored #{actor_id} as #{score}"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -39,14 +39,13 @@ defmodule Pleroma.Web.ActivityPub.MRF.AntiLinkSpamPolicy do
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
|
|
||||||
{:old_user, false} ->
|
{:old_user, false} ->
|
||||||
{:reject, nil}
|
{:reject, "[AntiLinkSpamPolicy] User has no posts nor followers"}
|
||||||
|
|
||||||
{:error, _} ->
|
{:error, _} ->
|
||||||
{:reject, nil}
|
{:reject, "[AntiLinkSpamPolicy] Failed to get or fetch user by ap_id"}
|
||||||
|
|
||||||
e ->
|
e ->
|
||||||
Logger.warn("[MRF anti-link-spam] WTF: unhandled error #{inspect(e)}")
|
{:reject, "[AntiLinkSpamPolicy] Unhandled error #{inspect(e)}"}
|
||||||
{:reject, nil}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicy do
|
||||||
defp reject_message(message, threshold) when threshold > 0 do
|
defp reject_message(message, threshold) when threshold > 0 do
|
||||||
with {_, recipients} <- get_recipient_count(message) do
|
with {_, recipients} <- get_recipient_count(message) do
|
||||||
if recipients > threshold do
|
if recipients > threshold do
|
||||||
{:reject, nil}
|
{:reject, "[HellthreadPolicy] #{recipients} recipients is over the limit of #{threshold}"}
|
||||||
else
|
else
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
end
|
end
|
||||||
|
@ -87,7 +87,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicy do
|
||||||
{:ok, message} <- delist_message(message, delist_threshold) do
|
{:ok, message} <- delist_message(message, delist_threshold) do
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
else
|
else
|
||||||
_e -> {:reject, nil}
|
e -> e
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do
|
||||||
if Enum.any?(Pleroma.Config.get([:mrf_keyword, :reject]), fn pattern ->
|
if Enum.any?(Pleroma.Config.get([:mrf_keyword, :reject]), fn pattern ->
|
||||||
string_matches?(content, pattern) or string_matches?(summary, pattern)
|
string_matches?(content, pattern) or string_matches?(summary, pattern)
|
||||||
end) do
|
end) do
|
||||||
{:reject, nil}
|
{:reject, "[KeywordPolicy] Matches with rejected keyword"}
|
||||||
else
|
else
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
end
|
end
|
||||||
|
@ -89,8 +89,9 @@ defmodule Pleroma.Web.ActivityPub.MRF.KeywordPolicy do
|
||||||
{:ok, message} <- check_replace(message) do
|
{:ok, message} <- check_replace(message) do
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
else
|
else
|
||||||
_e ->
|
{:reject, nil} -> {:reject, "[KeywordPolicy] "}
|
||||||
{:reject, nil}
|
{:reject, _} = e -> e
|
||||||
|
_e -> {:reject, "[KeywordPolicy] "}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -12,8 +12,9 @@ defmodule Pleroma.Web.ActivityPub.MRF.MentionPolicy do
|
||||||
reject_actors = Pleroma.Config.get([:mrf_mention, :actors], [])
|
reject_actors = Pleroma.Config.get([:mrf_mention, :actors], [])
|
||||||
recipients = (message["to"] || []) ++ (message["cc"] || [])
|
recipients = (message["to"] || []) ++ (message["cc"] || [])
|
||||||
|
|
||||||
if Enum.any?(recipients, fn recipient -> Enum.member?(reject_actors, recipient) end) do
|
if rejected_mention =
|
||||||
{:reject, nil}
|
Enum.find(recipients, fn recipient -> Enum.member?(reject_actors, recipient) end) do
|
||||||
|
{:reject, "[MentionPolicy] Rejected for mention of #{rejected_mention}"}
|
||||||
else
|
else
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
end
|
end
|
||||||
|
|
|
@ -28,7 +28,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy do
|
||||||
|
|
||||||
defp check_reject(message, actions) do
|
defp check_reject(message, actions) do
|
||||||
if :reject in actions do
|
if :reject in actions do
|
||||||
{:reject, nil}
|
{:reject, "[ObjectAgePolicy]"}
|
||||||
else
|
else
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
end
|
end
|
||||||
|
@ -47,9 +47,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy do
|
||||||
|
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
else
|
else
|
||||||
# Unhandleable error: somebody is messing around, just drop the message.
|
|
||||||
_e ->
|
_e ->
|
||||||
{:reject, nil}
|
{:reject, "[ObjectAgePolicy] Unhandled error"}
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
|
@ -69,9 +68,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy do
|
||||||
|
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
else
|
else
|
||||||
# Unhandleable error: somebody is messing around, just drop the message.
|
|
||||||
_e ->
|
_e ->
|
||||||
{:reject, nil}
|
{:reject, "[ObjectAgePolicy] Unhandled error"}
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
|
|
|
@ -38,7 +38,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.RejectNonPublic do
|
||||||
{:ok, object}
|
{:ok, object}
|
||||||
|
|
||||||
true ->
|
true ->
|
||||||
{:reject, nil}
|
{:reject, "[RejectNonPublic] visibility: #{visibility}"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
|
||||||
accepts == [] -> {:ok, object}
|
accepts == [] -> {:ok, object}
|
||||||
actor_host == Config.get([Pleroma.Web.Endpoint, :url, :host]) -> {:ok, object}
|
actor_host == Config.get([Pleroma.Web.Endpoint, :url, :host]) -> {:ok, object}
|
||||||
MRF.subdomain_match?(accepts, actor_host) -> {:ok, object}
|
MRF.subdomain_match?(accepts, actor_host) -> {:ok, object}
|
||||||
true -> {:reject, nil}
|
true -> {:reject, "[SimplePolicy] host not in accept list"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
|
||||||
|> MRF.subdomains_regex()
|
|> MRF.subdomains_regex()
|
||||||
|
|
||||||
if MRF.subdomain_match?(rejects, actor_host) do
|
if MRF.subdomain_match?(rejects, actor_host) do
|
||||||
{:reject, nil}
|
{:reject, "[SimplePolicy] host in reject list"}
|
||||||
else
|
else
|
||||||
{:ok, object}
|
{:ok, object}
|
||||||
end
|
end
|
||||||
|
@ -114,7 +114,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
|
||||||
|> MRF.subdomains_regex()
|
|> MRF.subdomains_regex()
|
||||||
|
|
||||||
if MRF.subdomain_match?(report_removal, actor_host) do
|
if MRF.subdomain_match?(report_removal, actor_host) do
|
||||||
{:reject, nil}
|
{:reject, "[SimplePolicy] host in report_removal list"}
|
||||||
else
|
else
|
||||||
{:ok, object}
|
{:ok, object}
|
||||||
end
|
end
|
||||||
|
@ -159,7 +159,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
|
||||||
|> MRF.subdomains_regex()
|
|> MRF.subdomains_regex()
|
||||||
|
|
||||||
if MRF.subdomain_match?(reject_deletes, actor_host) do
|
if MRF.subdomain_match?(reject_deletes, actor_host) do
|
||||||
{:reject, nil}
|
{:reject, "[SimplePolicy] host in reject_deletes list"}
|
||||||
else
|
else
|
||||||
{:ok, object}
|
{:ok, object}
|
||||||
end
|
end
|
||||||
|
@ -177,7 +177,9 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
|
||||||
{:ok, object} <- check_report_removal(actor_info, object) do
|
{:ok, object} <- check_report_removal(actor_info, object) do
|
||||||
{:ok, object}
|
{:ok, object}
|
||||||
else
|
else
|
||||||
_e -> {:reject, nil}
|
{:reject, nil} -> {:reject, "[SimplePolicy]"}
|
||||||
|
{:reject, _} = e -> e
|
||||||
|
_ -> {:reject, "[SimplePolicy]"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -191,7 +193,9 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicy do
|
||||||
{:ok, object} <- check_banner_removal(actor_info, object) do
|
{:ok, object} <- check_banner_removal(actor_info, object) do
|
||||||
{:ok, object}
|
{:ok, object}
|
||||||
else
|
else
|
||||||
_e -> {:reject, nil}
|
{:reject, nil} -> {:reject, "[SimplePolicy]"}
|
||||||
|
{:reject, _} = e -> e
|
||||||
|
_ -> {:reject, "[SimplePolicy]"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -134,12 +134,13 @@ defmodule Pleroma.Web.ActivityPub.MRF.TagPolicy do
|
||||||
if user.local == true do
|
if user.local == true do
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
else
|
else
|
||||||
{:reject, nil}
|
{:reject,
|
||||||
|
"[TagPolicy] Follow from #{actor} tagged with mrf_tag:disable-remote-subscription"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp process_tag("mrf_tag:disable-any-subscription", %{"type" => "Follow"}),
|
defp process_tag("mrf_tag:disable-any-subscription", %{"type" => "Follow", "actor" => actor}),
|
||||||
do: {:reject, nil}
|
do: {:reject, "[TagPolicy] Follow from #{actor} tagged with mrf_tag:disable-any-subscription"}
|
||||||
|
|
||||||
defp process_tag(_, message), do: {:ok, message}
|
defp process_tag(_, message), do: {:ok, message}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.UserAllowListPolicy do
|
||||||
if actor in allow_list do
|
if actor in allow_list do
|
||||||
{:ok, object}
|
{:ok, object}
|
||||||
else
|
else
|
||||||
{:reject, nil}
|
{:reject, "[UserAllowListPolicy] #{actor} not in the list"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -11,22 +11,26 @@ defmodule Pleroma.Web.ActivityPub.MRF.VocabularyPolicy do
|
||||||
with {:ok, _} <- filter(child_message) do
|
with {:ok, _} <- filter(child_message) do
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
else
|
else
|
||||||
{:reject, nil} ->
|
{:reject, _} = e -> e
|
||||||
{:reject, nil}
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def filter(%{"type" => message_type} = message) do
|
def filter(%{"type" => message_type} = message) do
|
||||||
with accepted_vocabulary <- Pleroma.Config.get([:mrf_vocabulary, :accept]),
|
with accepted_vocabulary <- Pleroma.Config.get([:mrf_vocabulary, :accept]),
|
||||||
rejected_vocabulary <- Pleroma.Config.get([:mrf_vocabulary, :reject]),
|
rejected_vocabulary <- Pleroma.Config.get([:mrf_vocabulary, :reject]),
|
||||||
true <-
|
{_, true} <-
|
||||||
Enum.empty?(accepted_vocabulary) || Enum.member?(accepted_vocabulary, message_type),
|
{:accepted,
|
||||||
false <-
|
Enum.empty?(accepted_vocabulary) || Enum.member?(accepted_vocabulary, message_type)},
|
||||||
length(rejected_vocabulary) > 0 && Enum.member?(rejected_vocabulary, message_type),
|
{_, false} <-
|
||||||
|
{:rejected,
|
||||||
|
length(rejected_vocabulary) > 0 && Enum.member?(rejected_vocabulary, message_type)},
|
||||||
{:ok, _} <- filter(message["object"]) do
|
{:ok, _} <- filter(message["object"]) do
|
||||||
{:ok, message}
|
{:ok, message}
|
||||||
else
|
else
|
||||||
_ -> {:reject, nil}
|
{:reject, _} = e -> e
|
||||||
|
{:accepted, _} -> {:reject, "[VocabularyPolicy] #{message_type} not in accept list"}
|
||||||
|
{:rejected, _} -> {:reject, "[VocabularyPolicy] #{message_type} in reject list"}
|
||||||
|
_ -> {:reject, "[VocabularyPolicy]"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,8 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
|
||||||
"""
|
"""
|
||||||
def publish_one(%{inbox: inbox, json: json, actor: %User{} = actor, id: id} = params) do
|
def publish_one(%{inbox: inbox, json: json, actor: %User{} = actor, id: id} = params) do
|
||||||
Logger.debug("Federating #{id} to #{inbox}")
|
Logger.debug("Federating #{id} to #{inbox}")
|
||||||
%{host: host, path: path} = URI.parse(inbox)
|
|
||||||
|
uri = URI.parse(inbox)
|
||||||
|
|
||||||
digest = "SHA-256=" <> (:crypto.hash(:sha256, json) |> Base.encode64())
|
digest = "SHA-256=" <> (:crypto.hash(:sha256, json) |> Base.encode64())
|
||||||
|
|
||||||
|
@ -57,8 +58,8 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
|
||||||
|
|
||||||
signature =
|
signature =
|
||||||
Pleroma.Signature.sign(actor, %{
|
Pleroma.Signature.sign(actor, %{
|
||||||
"(request-target)": "post #{path}",
|
"(request-target)": "post #{uri.path}",
|
||||||
host: host,
|
host: signature_host(uri),
|
||||||
"content-length": byte_size(json),
|
"content-length": byte_size(json),
|
||||||
digest: digest,
|
digest: digest,
|
||||||
date: date
|
date: date
|
||||||
|
@ -76,8 +77,9 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
|
||||||
{"digest", digest}
|
{"digest", digest}
|
||||||
]
|
]
|
||||||
) do
|
) do
|
||||||
if !Map.has_key?(params, :unreachable_since) || params[:unreachable_since],
|
if not Map.has_key?(params, :unreachable_since) || params[:unreachable_since] do
|
||||||
do: Instances.set_reachable(inbox)
|
Instances.set_reachable(inbox)
|
||||||
|
end
|
||||||
|
|
||||||
result
|
result
|
||||||
else
|
else
|
||||||
|
@ -96,6 +98,14 @@ defmodule Pleroma.Web.ActivityPub.Publisher do
|
||||||
|> publish_one()
|
|> publish_one()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp signature_host(%URI{port: port, scheme: scheme, host: host}) do
|
||||||
|
if port == URI.default_port(scheme) do
|
||||||
|
host
|
||||||
|
else
|
||||||
|
"#{host}:#{port}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
defp should_federate?(inbox, public) do
|
defp should_federate?(inbox, public) do
|
||||||
if public do
|
if public do
|
||||||
true
|
true
|
||||||
|
|
|
@ -90,11 +90,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do
|
||||||
notification_settings: %Schema{
|
notification_settings: %Schema{
|
||||||
type: :object,
|
type: :object,
|
||||||
properties: %{
|
properties: %{
|
||||||
followers: %Schema{type: :boolean},
|
block_from_strangers: %Schema{type: :boolean},
|
||||||
follows: %Schema{type: :boolean},
|
hide_notification_contents: %Schema{type: :boolean}
|
||||||
non_followers: %Schema{type: :boolean},
|
|
||||||
non_follows: %Schema{type: :boolean},
|
|
||||||
privacy_option: %Schema{type: :boolean}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
relationship: AccountRelationship,
|
relationship: AccountRelationship,
|
||||||
|
@ -182,11 +179,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do
|
||||||
"unread_conversation_count" => 0,
|
"unread_conversation_count" => 0,
|
||||||
"tags" => [],
|
"tags" => [],
|
||||||
"notification_settings" => %{
|
"notification_settings" => %{
|
||||||
"followers" => true,
|
"block_from_strangers" => false,
|
||||||
"follows" => true,
|
"hide_notification_contents" => false
|
||||||
"non_followers" => true,
|
|
||||||
"non_follows" => true,
|
|
||||||
"privacy_option" => false
|
|
||||||
},
|
},
|
||||||
"relationship" => %{
|
"relationship" => %{
|
||||||
"blocked_by" => false,
|
"blocked_by" => false,
|
||||||
|
|
|
@ -172,6 +172,11 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do
|
||||||
with_direct_conversation_id: true
|
with_direct_conversation_id: true
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
|
{:error, {:reject, message}} ->
|
||||||
|
conn
|
||||||
|
|> put_status(:unprocessable_entity)
|
||||||
|
|> json(%{error: message})
|
||||||
|
|
||||||
{:error, message} ->
|
{:error, message} ->
|
||||||
conn
|
conn
|
||||||
|> put_status(:unprocessable_entity)
|
|> put_status(:unprocessable_entity)
|
||||||
|
|
|
@ -104,7 +104,7 @@ defmodule Pleroma.Web.Push.Impl do
|
||||||
|
|
||||||
def build_content(
|
def build_content(
|
||||||
%{
|
%{
|
||||||
user: %{notification_settings: %{privacy_option: true}}
|
user: %{notification_settings: %{hide_notification_contents: true}}
|
||||||
} = notification,
|
} = notification,
|
||||||
_actor,
|
_actor,
|
||||||
_object,
|
_object,
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
defmodule Pleroma.Repo.Migrations.RenameNotificationPrivacyOption do
|
||||||
|
use Ecto.Migration
|
||||||
|
|
||||||
|
def up do
|
||||||
|
execute(
|
||||||
|
"UPDATE users SET notification_settings = notification_settings - 'privacy_option' || jsonb_build_object('hide_notification_contents', notification_settings->'privacy_option')
|
||||||
|
where notification_settings ? 'privacy_option'
|
||||||
|
and local"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def down do
|
||||||
|
execute(
|
||||||
|
"UPDATE users SET notification_settings = notification_settings - 'hide_notification_contents' || jsonb_build_object('privacy_option', notification_settings->'hide_notification_contents')
|
||||||
|
where notification_settings ? 'hide_notification_contents'
|
||||||
|
and local"
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
|
@ -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.77b1644622e3bae24b6b.css rel=stylesheet><link href=/static/fontello.1594374054351.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.247dc52c7abe6a0dab87.js></script><script type=text/javascript src=/static/js/app.1e68e208590653dab5aa.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"><title>Pleroma</title><!--server-generated-meta--><link rel=icon type=image/png href=/favicon.png><link href=/static/css/app.6dbc7dea4fc148c85860.css rel=stylesheet><link href=/static/fontello.1594823398494.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.9e24ed238da5a8538f50.js></script><script type=text/javascript src=/static/js/app.31bba9f1e242ff273dcb.js></script></body></html>
|
|
@ -243,4 +243,4 @@
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*# sourceMappingURL=app.77b1644622e3bae24b6b.css.map*/
|
/*# sourceMappingURL=app.6dbc7dea4fc148c85860.css.map*/
|
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Binary file not shown.
Binary file not shown.
BIN
priv/static/static/font/fontello.1594823398494.woff2
Normal file
BIN
priv/static/static/font/fontello.1594823398494.woff2
Normal file
Binary file not shown.
144
priv/static/static/fontello.1589385935077.css
vendored
144
priv/static/static/fontello.1589385935077.css
vendored
|
@ -1,144 +0,0 @@
|
||||||
@font-face {
|
|
||||||
font-family: "Icons";
|
|
||||||
src: url("./font/fontello.1589385935077.eot");
|
|
||||||
src: url("./font/fontello.1589385935077.eot") format("embedded-opentype"),
|
|
||||||
url("./font/fontello.1589385935077.woff2") format("woff2"),
|
|
||||||
url("./font/fontello.1589385935077.woff") format("woff"),
|
|
||||||
url("./font/fontello.1589385935077.ttf") format("truetype"),
|
|
||||||
url("./font/fontello.1589385935077.svg") format("svg");
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
[class^="icon-"]::before,
|
|
||||||
[class*=" icon-"]::before {
|
|
||||||
font-family: "Icons";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
speak: none;
|
|
||||||
display: inline-block;
|
|
||||||
text-decoration: inherit;
|
|
||||||
width: 1em;
|
|
||||||
margin-right: .2em;
|
|
||||||
text-align: center;
|
|
||||||
font-variant: normal;
|
|
||||||
text-transform: none;
|
|
||||||
line-height: 1em;
|
|
||||||
margin-left: .2em;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-spin4::before { content: "\e834"; }
|
|
||||||
|
|
||||||
.icon-cancel::before { content: "\e800"; }
|
|
||||||
|
|
||||||
.icon-upload::before { content: "\e801"; }
|
|
||||||
|
|
||||||
.icon-spin3::before { content: "\e832"; }
|
|
||||||
|
|
||||||
.icon-reply::before { content: "\f112"; }
|
|
||||||
|
|
||||||
.icon-star::before { content: "\e802"; }
|
|
||||||
|
|
||||||
.icon-star-empty::before { content: "\e803"; }
|
|
||||||
|
|
||||||
.icon-retweet::before { content: "\e804"; }
|
|
||||||
|
|
||||||
.icon-eye-off::before { content: "\e805"; }
|
|
||||||
|
|
||||||
.icon-binoculars::before { content: "\f1e5"; }
|
|
||||||
|
|
||||||
.icon-cog::before { content: "\e807"; }
|
|
||||||
|
|
||||||
.icon-user-plus::before { content: "\f234"; }
|
|
||||||
|
|
||||||
.icon-menu::before { content: "\f0c9"; }
|
|
||||||
|
|
||||||
.icon-logout::before { content: "\e808"; }
|
|
||||||
|
|
||||||
.icon-down-open::before { content: "\e809"; }
|
|
||||||
|
|
||||||
.icon-attach::before { content: "\e80a"; }
|
|
||||||
|
|
||||||
.icon-link-ext::before { content: "\f08e"; }
|
|
||||||
|
|
||||||
.icon-link-ext-alt::before { content: "\f08f"; }
|
|
||||||
|
|
||||||
.icon-picture::before { content: "\e80b"; }
|
|
||||||
|
|
||||||
.icon-video::before { content: "\e80c"; }
|
|
||||||
|
|
||||||
.icon-right-open::before { content: "\e80d"; }
|
|
||||||
|
|
||||||
.icon-left-open::before { content: "\e80e"; }
|
|
||||||
|
|
||||||
.icon-up-open::before { content: "\e80f"; }
|
|
||||||
|
|
||||||
.icon-comment-empty::before { content: "\f0e5"; }
|
|
||||||
|
|
||||||
.icon-mail-alt::before { content: "\f0e0"; }
|
|
||||||
|
|
||||||
.icon-lock::before { content: "\e811"; }
|
|
||||||
|
|
||||||
.icon-lock-open-alt::before { content: "\f13e"; }
|
|
||||||
|
|
||||||
.icon-globe::before { content: "\e812"; }
|
|
||||||
|
|
||||||
.icon-brush::before { content: "\e813"; }
|
|
||||||
|
|
||||||
.icon-search::before { content: "\e806"; }
|
|
||||||
|
|
||||||
.icon-adjust::before { content: "\e816"; }
|
|
||||||
|
|
||||||
.icon-thumbs-up-alt::before { content: "\f164"; }
|
|
||||||
|
|
||||||
.icon-attention::before { content: "\e814"; }
|
|
||||||
|
|
||||||
.icon-plus-squared::before { content: "\f0fe"; }
|
|
||||||
|
|
||||||
.icon-plus::before { content: "\e815"; }
|
|
||||||
|
|
||||||
.icon-edit::before { content: "\e817"; }
|
|
||||||
|
|
||||||
.icon-play-circled::before { content: "\f144"; }
|
|
||||||
|
|
||||||
.icon-pencil::before { content: "\e818"; }
|
|
||||||
|
|
||||||
.icon-chart-bar::before { content: "\e81b"; }
|
|
||||||
|
|
||||||
.icon-smile::before { content: "\f118"; }
|
|
||||||
|
|
||||||
.icon-bell-alt::before { content: "\f0f3"; }
|
|
||||||
|
|
||||||
.icon-wrench::before { content: "\e81a"; }
|
|
||||||
|
|
||||||
.icon-pin::before { content: "\e819"; }
|
|
||||||
|
|
||||||
.icon-ellipsis::before { content: "\f141"; }
|
|
||||||
|
|
||||||
.icon-bell-ringing-o::before { content: "\e810"; }
|
|
||||||
|
|
||||||
.icon-zoom-in::before { content: "\e81c"; }
|
|
||||||
|
|
||||||
.icon-gauge::before { content: "\f0e4"; }
|
|
||||||
|
|
||||||
.icon-users::before { content: "\e81d"; }
|
|
||||||
|
|
||||||
.icon-info-circled::before { content: "\e81f"; }
|
|
||||||
|
|
||||||
.icon-home-2::before { content: "\e821"; }
|
|
||||||
|
|
||||||
.icon-chat::before { content: "\e81e"; }
|
|
||||||
|
|
||||||
.icon-login::before { content: "\e820"; }
|
|
||||||
|
|
||||||
.icon-arrow-curved::before { content: "\e822"; }
|
|
||||||
|
|
||||||
.icon-link::before { content: "\e823"; }
|
|
||||||
|
|
||||||
.icon-share::before { content: "\f1e0"; }
|
|
||||||
|
|
||||||
.icon-user::before { content: "\e824"; }
|
|
||||||
|
|
||||||
.icon-ok::before { content: "\e827"; }
|
|
152
priv/static/static/fontello.1594030805019.css
vendored
152
priv/static/static/fontello.1594030805019.css
vendored
|
@ -1,152 +0,0 @@
|
||||||
@font-face {
|
|
||||||
font-family: "Icons";
|
|
||||||
src: url("./font/fontello.1594030805019.eot");
|
|
||||||
src: url("./font/fontello.1594030805019.eot") format("embedded-opentype"),
|
|
||||||
url("./font/fontello.1594030805019.woff2") format("woff2"),
|
|
||||||
url("./font/fontello.1594030805019.woff") format("woff"),
|
|
||||||
url("./font/fontello.1594030805019.ttf") format("truetype"),
|
|
||||||
url("./font/fontello.1594030805019.svg") format("svg");
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
[class^="icon-"]::before,
|
|
||||||
[class*=" icon-"]::before {
|
|
||||||
font-family: "Icons";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
speak: none;
|
|
||||||
display: inline-block;
|
|
||||||
text-decoration: inherit;
|
|
||||||
width: 1em;
|
|
||||||
margin-right: .2em;
|
|
||||||
text-align: center;
|
|
||||||
font-variant: normal;
|
|
||||||
text-transform: none;
|
|
||||||
line-height: 1em;
|
|
||||||
margin-left: .2em;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-spin4::before { content: "\e834"; }
|
|
||||||
|
|
||||||
.icon-cancel::before { content: "\e800"; }
|
|
||||||
|
|
||||||
.icon-upload::before { content: "\e801"; }
|
|
||||||
|
|
||||||
.icon-spin3::before { content: "\e832"; }
|
|
||||||
|
|
||||||
.icon-reply::before { content: "\f112"; }
|
|
||||||
|
|
||||||
.icon-star::before { content: "\e802"; }
|
|
||||||
|
|
||||||
.icon-star-empty::before { content: "\e803"; }
|
|
||||||
|
|
||||||
.icon-retweet::before { content: "\e804"; }
|
|
||||||
|
|
||||||
.icon-eye-off::before { content: "\e805"; }
|
|
||||||
|
|
||||||
.icon-binoculars::before { content: "\f1e5"; }
|
|
||||||
|
|
||||||
.icon-cog::before { content: "\e807"; }
|
|
||||||
|
|
||||||
.icon-user-plus::before { content: "\f234"; }
|
|
||||||
|
|
||||||
.icon-menu::before { content: "\f0c9"; }
|
|
||||||
|
|
||||||
.icon-logout::before { content: "\e808"; }
|
|
||||||
|
|
||||||
.icon-down-open::before { content: "\e809"; }
|
|
||||||
|
|
||||||
.icon-attach::before { content: "\e80a"; }
|
|
||||||
|
|
||||||
.icon-link-ext::before { content: "\f08e"; }
|
|
||||||
|
|
||||||
.icon-link-ext-alt::before { content: "\f08f"; }
|
|
||||||
|
|
||||||
.icon-picture::before { content: "\e80b"; }
|
|
||||||
|
|
||||||
.icon-video::before { content: "\e80c"; }
|
|
||||||
|
|
||||||
.icon-right-open::before { content: "\e80d"; }
|
|
||||||
|
|
||||||
.icon-left-open::before { content: "\e80e"; }
|
|
||||||
|
|
||||||
.icon-up-open::before { content: "\e80f"; }
|
|
||||||
|
|
||||||
.icon-comment-empty::before { content: "\f0e5"; }
|
|
||||||
|
|
||||||
.icon-mail-alt::before { content: "\f0e0"; }
|
|
||||||
|
|
||||||
.icon-lock::before { content: "\e811"; }
|
|
||||||
|
|
||||||
.icon-lock-open-alt::before { content: "\f13e"; }
|
|
||||||
|
|
||||||
.icon-globe::before { content: "\e812"; }
|
|
||||||
|
|
||||||
.icon-brush::before { content: "\e813"; }
|
|
||||||
|
|
||||||
.icon-search::before { content: "\e806"; }
|
|
||||||
|
|
||||||
.icon-adjust::before { content: "\e816"; }
|
|
||||||
|
|
||||||
.icon-thumbs-up-alt::before { content: "\f164"; }
|
|
||||||
|
|
||||||
.icon-attention::before { content: "\e814"; }
|
|
||||||
|
|
||||||
.icon-plus-squared::before { content: "\f0fe"; }
|
|
||||||
|
|
||||||
.icon-plus::before { content: "\e815"; }
|
|
||||||
|
|
||||||
.icon-edit::before { content: "\e817"; }
|
|
||||||
|
|
||||||
.icon-play-circled::before { content: "\f144"; }
|
|
||||||
|
|
||||||
.icon-pencil::before { content: "\e818"; }
|
|
||||||
|
|
||||||
.icon-chart-bar::before { content: "\e81b"; }
|
|
||||||
|
|
||||||
.icon-smile::before { content: "\f118"; }
|
|
||||||
|
|
||||||
.icon-bell-alt::before { content: "\f0f3"; }
|
|
||||||
|
|
||||||
.icon-wrench::before { content: "\e81a"; }
|
|
||||||
|
|
||||||
.icon-pin::before { content: "\e819"; }
|
|
||||||
|
|
||||||
.icon-ellipsis::before { content: "\f141"; }
|
|
||||||
|
|
||||||
.icon-bell-ringing-o::before { content: "\e810"; }
|
|
||||||
|
|
||||||
.icon-zoom-in::before { content: "\e81c"; }
|
|
||||||
|
|
||||||
.icon-gauge::before { content: "\f0e4"; }
|
|
||||||
|
|
||||||
.icon-users::before { content: "\e81d"; }
|
|
||||||
|
|
||||||
.icon-info-circled::before { content: "\e81f"; }
|
|
||||||
|
|
||||||
.icon-home-2::before { content: "\e821"; }
|
|
||||||
|
|
||||||
.icon-chat::before { content: "\e81e"; }
|
|
||||||
|
|
||||||
.icon-login::before { content: "\e820"; }
|
|
||||||
|
|
||||||
.icon-arrow-curved::before { content: "\e822"; }
|
|
||||||
|
|
||||||
.icon-link::before { content: "\e823"; }
|
|
||||||
|
|
||||||
.icon-share::before { content: "\f1e0"; }
|
|
||||||
|
|
||||||
.icon-user::before { content: "\e824"; }
|
|
||||||
|
|
||||||
.icon-ok::before { content: "\e827"; }
|
|
||||||
|
|
||||||
.icon-filter::before { content: "\f0b0"; }
|
|
||||||
|
|
||||||
.icon-download::before { content: "\e825"; }
|
|
||||||
|
|
||||||
.icon-bookmark::before { content: "\e826"; }
|
|
||||||
|
|
||||||
.icon-bookmark-empty::before { content: "\f097"; }
|
|
156
priv/static/static/fontello.1594134783339.css
vendored
156
priv/static/static/fontello.1594134783339.css
vendored
|
@ -1,156 +0,0 @@
|
||||||
@font-face {
|
|
||||||
font-family: "Icons";
|
|
||||||
src: url("./font/fontello.1594134783339.eot");
|
|
||||||
src: url("./font/fontello.1594134783339.eot") format("embedded-opentype"),
|
|
||||||
url("./font/fontello.1594134783339.woff2") format("woff2"),
|
|
||||||
url("./font/fontello.1594134783339.woff") format("woff"),
|
|
||||||
url("./font/fontello.1594134783339.ttf") format("truetype"),
|
|
||||||
url("./font/fontello.1594134783339.svg") format("svg");
|
|
||||||
font-weight: normal;
|
|
||||||
font-style: normal;
|
|
||||||
}
|
|
||||||
|
|
||||||
[class^="icon-"]::before,
|
|
||||||
[class*=" icon-"]::before {
|
|
||||||
font-family: "Icons";
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: normal;
|
|
||||||
speak: none;
|
|
||||||
display: inline-block;
|
|
||||||
text-decoration: inherit;
|
|
||||||
width: 1em;
|
|
||||||
margin-right: .2em;
|
|
||||||
text-align: center;
|
|
||||||
font-variant: normal;
|
|
||||||
text-transform: none;
|
|
||||||
line-height: 1em;
|
|
||||||
margin-left: .2em;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
-moz-osx-font-smoothing: grayscale;
|
|
||||||
}
|
|
||||||
|
|
||||||
.icon-spin4::before { content: "\e834"; }
|
|
||||||
|
|
||||||
.icon-cancel::before { content: "\e800"; }
|
|
||||||
|
|
||||||
.icon-upload::before { content: "\e801"; }
|
|
||||||
|
|
||||||
.icon-spin3::before { content: "\e832"; }
|
|
||||||
|
|
||||||
.icon-reply::before { content: "\f112"; }
|
|
||||||
|
|
||||||
.icon-star::before { content: "\e802"; }
|
|
||||||
|
|
||||||
.icon-star-empty::before { content: "\e803"; }
|
|
||||||
|
|
||||||
.icon-retweet::before { content: "\e804"; }
|
|
||||||
|
|
||||||
.icon-eye-off::before { content: "\e805"; }
|
|
||||||
|
|
||||||
.icon-binoculars::before { content: "\f1e5"; }
|
|
||||||
|
|
||||||
.icon-cog::before { content: "\e807"; }
|
|
||||||
|
|
||||||
.icon-user-plus::before { content: "\f234"; }
|
|
||||||
|
|
||||||
.icon-menu::before { content: "\f0c9"; }
|
|
||||||
|
|
||||||
.icon-logout::before { content: "\e808"; }
|
|
||||||
|
|
||||||
.icon-down-open::before { content: "\e809"; }
|
|
||||||
|
|
||||||
.icon-attach::before { content: "\e80a"; }
|
|
||||||
|
|
||||||
.icon-link-ext::before { content: "\f08e"; }
|
|
||||||
|
|
||||||
.icon-link-ext-alt::before { content: "\f08f"; }
|
|
||||||
|
|
||||||
.icon-picture::before { content: "\e80b"; }
|
|
||||||
|
|
||||||
.icon-video::before { content: "\e80c"; }
|
|
||||||
|
|
||||||
.icon-right-open::before { content: "\e80d"; }
|
|
||||||
|
|
||||||
.icon-left-open::before { content: "\e80e"; }
|
|
||||||
|
|
||||||
.icon-up-open::before { content: "\e80f"; }
|
|
||||||
|
|
||||||
.icon-comment-empty::before { content: "\f0e5"; }
|
|
||||||
|
|
||||||
.icon-mail-alt::before { content: "\f0e0"; }
|
|
||||||
|
|
||||||
.icon-lock::before { content: "\e811"; }
|
|
||||||
|
|
||||||
.icon-lock-open-alt::before { content: "\f13e"; }
|
|
||||||
|
|
||||||
.icon-globe::before { content: "\e812"; }
|
|
||||||
|
|
||||||
.icon-brush::before { content: "\e813"; }
|
|
||||||
|
|
||||||
.icon-search::before { content: "\e806"; }
|
|
||||||
|
|
||||||
.icon-adjust::before { content: "\e816"; }
|
|
||||||
|
|
||||||
.icon-thumbs-up-alt::before { content: "\f164"; }
|
|
||||||
|
|
||||||
.icon-attention::before { content: "\e814"; }
|
|
||||||
|
|
||||||
.icon-plus-squared::before { content: "\f0fe"; }
|
|
||||||
|
|
||||||
.icon-plus::before { content: "\e815"; }
|
|
||||||
|
|
||||||
.icon-edit::before { content: "\e817"; }
|
|
||||||
|
|
||||||
.icon-play-circled::before { content: "\f144"; }
|
|
||||||
|
|
||||||
.icon-pencil::before { content: "\e818"; }
|
|
||||||
|
|
||||||
.icon-chart-bar::before { content: "\e81b"; }
|
|
||||||
|
|
||||||
.icon-smile::before { content: "\f118"; }
|
|
||||||
|
|
||||||
.icon-bell-alt::before { content: "\f0f3"; }
|
|
||||||
|
|
||||||
.icon-wrench::before { content: "\e81a"; }
|
|
||||||
|
|
||||||
.icon-pin::before { content: "\e819"; }
|
|
||||||
|
|
||||||
.icon-ellipsis::before { content: "\f141"; }
|
|
||||||
|
|
||||||
.icon-bell-ringing-o::before { content: "\e810"; }
|
|
||||||
|
|
||||||
.icon-zoom-in::before { content: "\e81c"; }
|
|
||||||
|
|
||||||
.icon-gauge::before { content: "\f0e4"; }
|
|
||||||
|
|
||||||
.icon-users::before { content: "\e81d"; }
|
|
||||||
|
|
||||||
.icon-info-circled::before { content: "\e81f"; }
|
|
||||||
|
|
||||||
.icon-home-2::before { content: "\e821"; }
|
|
||||||
|
|
||||||
.icon-chat::before { content: "\e81e"; }
|
|
||||||
|
|
||||||
.icon-login::before { content: "\e820"; }
|
|
||||||
|
|
||||||
.icon-arrow-curved::before { content: "\e822"; }
|
|
||||||
|
|
||||||
.icon-link::before { content: "\e823"; }
|
|
||||||
|
|
||||||
.icon-share::before { content: "\f1e0"; }
|
|
||||||
|
|
||||||
.icon-user::before { content: "\e824"; }
|
|
||||||
|
|
||||||
.icon-ok::before { content: "\e827"; }
|
|
||||||
|
|
||||||
.icon-filter::before { content: "\f0b0"; }
|
|
||||||
|
|
||||||
.icon-download::before { content: "\e825"; }
|
|
||||||
|
|
||||||
.icon-bookmark::before { content: "\e826"; }
|
|
||||||
|
|
||||||
.icon-bookmark-empty::before { content: "\f097"; }
|
|
||||||
|
|
||||||
.icon-music::before { content: "\e828"; }
|
|
||||||
|
|
||||||
.icon-doc::before { content: "\e829"; }
|
|
|
@ -1,11 +1,11 @@
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: "Icons";
|
font-family: "Icons";
|
||||||
src: url("./font/fontello.1594374054351.eot");
|
src: url("./font/fontello.1594823398494.eot");
|
||||||
src: url("./font/fontello.1594374054351.eot") format("embedded-opentype"),
|
src: url("./font/fontello.1594823398494.eot") format("embedded-opentype"),
|
||||||
url("./font/fontello.1594374054351.woff2") format("woff2"),
|
url("./font/fontello.1594823398494.woff2") format("woff2"),
|
||||||
url("./font/fontello.1594374054351.woff") format("woff"),
|
url("./font/fontello.1594823398494.woff") format("woff"),
|
||||||
url("./font/fontello.1594374054351.ttf") format("truetype"),
|
url("./font/fontello.1594823398494.ttf") format("truetype"),
|
||||||
url("./font/fontello.1594374054351.svg") format("svg");
|
url("./font/fontello.1594823398494.svg") format("svg");
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
}
|
}
|
0
priv/static/static/fontello.json
Executable file → Normal file
0
priv/static/static/fontello.json
Executable file → Normal file
File diff suppressed because one or more lines are too long
2
priv/static/static/js/10.5ef4671883649cf93524.js
Normal file
2
priv/static/static/js/10.5ef4671883649cf93524.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.2823375ec309b971aaea.js","sourceRoot":""}
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/10.5ef4671883649cf93524.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
2
priv/static/static/js/11.c5b938b4349f87567338.js
Normal file
2
priv/static/static/js/11.c5b938b4349f87567338.js
Normal file
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/11.2cb4b0f72a4654070a58.js","sourceRoot":""}
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/11.c5b938b4349f87567338.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
2
priv/static/static/js/12.ab82f9512fa85e78c114.js
Normal file
2
priv/static/static/js/12.ab82f9512fa85e78c114.js
Normal file
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/12.500b3e4676dd47599a58.js","sourceRoot":""}
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/12.ab82f9512fa85e78c114.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
2
priv/static/static/js/13.40e59c5015d3307b94ad.js
Normal file
2
priv/static/static/js/13.40e59c5015d3307b94ad.js
Normal file
File diff suppressed because one or more lines are too long
|
@ -1 +1 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/13.3ef79a2643680080d28f.js","sourceRoot":""}
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/13.40e59c5015d3307b94ad.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/14.b7f6eb3ea71d2ac2bb41.js","sourceRoot":""}
|
|
2
priv/static/static/js/14.de791a47ee5249a526b1.js
Normal file
2
priv/static/static/js/14.de791a47ee5249a526b1.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/14.de791a47ee5249a526b1.js.map
Normal file
1
priv/static/static/js/14.de791a47ee5249a526b1.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/14.de791a47ee5249a526b1.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/15.d814a29a970070494722.js","sourceRoot":""}
|
|
2
priv/static/static/js/15.e24854297ad682aec45a.js
Normal file
2
priv/static/static/js/15.e24854297ad682aec45a.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/15.e24854297ad682aec45a.js.map
Normal file
1
priv/static/static/js/15.e24854297ad682aec45a.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/15.e24854297ad682aec45a.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/16.017fa510b293035ac370.js","sourceRoot":""}
|
|
2
priv/static/static/js/16.b7b0e4b8227a50fcb9bb.js
Normal file
2
priv/static/static/js/16.b7b0e4b8227a50fcb9bb.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/16.b7b0e4b8227a50fcb9bb.js.map
Normal file
1
priv/static/static/js/16.b7b0e4b8227a50fcb9bb.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/16.b7b0e4b8227a50fcb9bb.js","sourceRoot":""}
|
|
@ -1,2 +0,0 @@
|
||||||
(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{568: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",autoload:"Autoatikus betöltés engedélyezése lap aljára görgetéskor",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",reply_link_preview:"Válasz-link előzetes mutatása egér rátételkor",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.c63932b65417ee7346a3.js.map
|
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/17.c63932b65417ee7346a3.js","sourceRoot":""}
|
|
2
priv/static/static/js/17.c98118b6bb84ee3b5b08.js
Normal file
2
priv/static/static/js/17.c98118b6bb84ee3b5b08.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{568: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.c98118b6bb84ee3b5b08.js.map
|
1
priv/static/static/js/17.c98118b6bb84ee3b5b08.js.map
Normal file
1
priv/static/static/js/17.c98118b6bb84ee3b5b08.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/17.c98118b6bb84ee3b5b08.js","sourceRoot":""}
|
2
priv/static/static/js/18.89c20aa67a4dd067ea37.js
Normal file
2
priv/static/static/js/18.89c20aa67a4dd067ea37.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/18.89c20aa67a4dd067ea37.js.map
Normal file
1
priv/static/static/js/18.89c20aa67a4dd067ea37.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/18.89c20aa67a4dd067ea37.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.fd12f9746a55aa24a8b7.js","sourceRoot":""}
|
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/19.3adebd64964c92700074.js","sourceRoot":""}
|
|
2
priv/static/static/js/19.6e13bad8131c4501c1c5.js
Normal file
2
priv/static/static/js/19.6e13bad8131c4501c1c5.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/19.6e13bad8131c4501c1c5.js.map
Normal file
1
priv/static/static/js/19.6e13bad8131c4501c1c5.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/19.6e13bad8131c4501c1c5.js","sourceRoot":""}
|
2
priv/static/static/js/2.78a48aa26599b00c3b8d.js
Normal file
2
priv/static/static/js/2.78a48aa26599b00c3b8d.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/2.78a48aa26599b00c3b8d.js.map
Normal file
1
priv/static/static/js/2.78a48aa26599b00c3b8d.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/static/js/20.3615c3cea2e1c2707a4f.js
Normal file
2
priv/static/static/js/20.3615c3cea2e1c2707a4f.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/20.3615c3cea2e1c2707a4f.js.map
Normal file
1
priv/static/static/js/20.3615c3cea2e1c2707a4f.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/20.3615c3cea2e1c2707a4f.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/20.e0c3ad29d59470506c04.js","sourceRoot":""}
|
|
2
priv/static/static/js/21.64dedfc646e13e6f7915.js
Normal file
2
priv/static/static/js/21.64dedfc646e13e6f7915.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/21.64dedfc646e13e6f7915.js.map
Normal file
1
priv/static/static/js/21.64dedfc646e13e6f7915.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/21.64dedfc646e13e6f7915.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/21.849ecc09a1d58bdc64c6.js","sourceRoot":""}
|
|
2
priv/static/static/js/22.6fa63bc6a054b7638e9e.js
Normal file
2
priv/static/static/js/22.6fa63bc6a054b7638e9e.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/22.6fa63bc6a054b7638e9e.js.map
Normal file
1
priv/static/static/js/22.6fa63bc6a054b7638e9e.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/22.6fa63bc6a054b7638e9e.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/22.8782f133c9f66d3f2bbe.js","sourceRoot":""}
|
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/23.2653bf91bc77c2ed0160.js","sourceRoot":""}
|
|
2
priv/static/static/js/23.e0ddea2b6e049d221ee7.js
Normal file
2
priv/static/static/js/23.e0ddea2b6e049d221ee7.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/23.e0ddea2b6e049d221ee7.js.map
Normal file
1
priv/static/static/js/23.e0ddea2b6e049d221ee7.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/23.e0ddea2b6e049d221ee7.js","sourceRoot":""}
|
2
priv/static/static/js/24.38e3b9d44e9ee703ebf6.js
Normal file
2
priv/static/static/js/24.38e3b9d44e9ee703ebf6.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/24.38e3b9d44e9ee703ebf6.js.map
Normal file
1
priv/static/static/js/24.38e3b9d44e9ee703ebf6.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/24.38e3b9d44e9ee703ebf6.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/24.f931d864a2297d880a9a.js","sourceRoot":""}
|
|
2
priv/static/static/js/25.696b41c0a8660e1f85af.js
Normal file
2
priv/static/static/js/25.696b41c0a8660e1f85af.js
Normal file
File diff suppressed because one or more lines are too long
1
priv/static/static/js/25.696b41c0a8660e1f85af.js.map
Normal file
1
priv/static/static/js/25.696b41c0a8660e1f85af.js.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/25.696b41c0a8660e1f85af.js","sourceRoot":""}
|
File diff suppressed because one or more lines are too long
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":[],"names":[],"mappings":"","file":"static/js/25.886acc9ba83c64659279.js","sourceRoot":""}
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue