Merge remote-tracking branch 'soapbox/develop' into polls
|
@ -9,3 +9,65 @@ test/
|
|||
|
||||
# Required to get version
|
||||
!.git
|
||||
|
||||
# App artifacts
|
||||
/_build
|
||||
/db
|
||||
/deps
|
||||
/*.ez
|
||||
/test/instance
|
||||
/test/uploads
|
||||
/.elixir_ls
|
||||
/test/fixtures/DSCN0010_tmp.jpg
|
||||
/test/fixtures/test_tmp.txt
|
||||
/test/fixtures/image_tmp.jpg
|
||||
/test/tmp/
|
||||
/test/frontend_static_test/
|
||||
/doc
|
||||
/instance
|
||||
/priv/ssh_keys
|
||||
|
||||
# Prevent committing custom emojis
|
||||
/priv/static/emoji/custom/*
|
||||
|
||||
# Generated on crash by the VM
|
||||
erl_crash.dump
|
||||
|
||||
# Files matching config/*.secret.exs pattern contain sensitive
|
||||
# data and you should not commit them into version control.
|
||||
#
|
||||
# Alternatively, you may comment the line below and commit the
|
||||
# secrets files as long as you replace their contents by environment
|
||||
# variables.
|
||||
/config/*.secret.exs
|
||||
/config/generated_config.exs
|
||||
/config/runtime.exs
|
||||
/config/*.env
|
||||
|
||||
|
||||
# Database setup file, some may forget to delete it
|
||||
/config/setup_db*.psql
|
||||
|
||||
# Whitelist Landing FE
|
||||
!/instance/static/frontends/landing-fe/vendor/**
|
||||
|
||||
.DS_Store
|
||||
.env
|
||||
|
||||
# Editor config
|
||||
/.vscode/
|
||||
|
||||
# Prevent committing docs files
|
||||
/priv/static/doc/*
|
||||
docs/generated_config.md
|
||||
|
||||
# Code test coverage
|
||||
/cover
|
||||
/Elixir.*.coverdata
|
||||
|
||||
.idea
|
||||
pleroma.iml
|
||||
|
||||
# Editor temp files
|
||||
/*~
|
||||
/*#
|
||||
|
|
3
.gitignore
vendored
|
@ -36,9 +36,6 @@ erl_crash.dump
|
|||
# Database setup file, some may forget to delete it
|
||||
/config/setup_db*.psql
|
||||
|
||||
# Whitelist Landing FE
|
||||
!/instance/static/frontends/landing-fe/vendor/**
|
||||
|
||||
.DS_Store
|
||||
.env
|
||||
|
||||
|
|
|
@ -91,7 +91,6 @@ unit-testing:
|
|||
|
||||
unit-testing-erratic:
|
||||
stage: test
|
||||
retry: 2
|
||||
allow_failure: true
|
||||
only:
|
||||
changes: *build_changes_policy
|
||||
|
@ -210,6 +209,7 @@ review_app:
|
|||
script: dokku-deploy
|
||||
after_script: [dokku-unlock]
|
||||
before_script: []
|
||||
allow_failure: true
|
||||
|
||||
spec-deploy:
|
||||
stage: deploy
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
FROM ubuntu:22.04 as build
|
||||
|
||||
ENV MIX_ENV=prod
|
||||
ARG MIX_ENV=prod \
|
||||
OAUTH_CONSUMER_STRATEGIES="twitter facebook google microsoft slack github keycloak:ueberauth_keycloak_strategy"
|
||||
|
||||
WORKDIR /src
|
||||
|
||||
RUN apt-get update &&\
|
||||
|
|
|
@ -189,7 +189,7 @@
|
|||
description: "Pleroma: An efficient and flexible fediverse server",
|
||||
short_description: "",
|
||||
background_image: "/images/city.jpg",
|
||||
instance_thumbnail: "/instance/thumbnail.jpeg",
|
||||
instance_thumbnail: "/instance/thumbnail.png",
|
||||
limit: 5_000,
|
||||
description_limit: 5_000,
|
||||
remote_limit: 100_000,
|
||||
|
@ -629,7 +629,14 @@
|
|||
for strategy <- oauth_consumer_strategies do
|
||||
strategy_module_name = "Elixir.Ueberauth.Strategy.#{String.capitalize(strategy)}"
|
||||
strategy_module = String.to_atom(strategy_module_name)
|
||||
{String.to_atom(strategy), {strategy_module, [callback_params: ["state"]]}}
|
||||
|
||||
params =
|
||||
case strategy do
|
||||
"keycloak" -> [uid_field: :email, default_scope: "openid profile"]
|
||||
_ -> [callback_params: ["state"]]
|
||||
end
|
||||
|
||||
{String.to_atom(strategy), {strategy_module, params}}
|
||||
end
|
||||
|
||||
config :ueberauth,
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
http: [ip: {0, 0, 0, 0}, port: System.get_env("PORT", "5000")]
|
||||
|
||||
config :pleroma, :instance,
|
||||
name: System.get_env("INSTANCE_NAME", "Pleroma"),
|
||||
name: System.get_env("INSTANCE_NAME", "Soapbox"),
|
||||
email: System.get_env("ADMIN_EMAIL"),
|
||||
notify_email: System.get_env("NOTIFY_EMAIL"),
|
||||
limit: 5000,
|
||||
|
@ -19,9 +19,9 @@
|
|||
|
||||
_ ->
|
||||
config :pleroma, Pleroma.Repo,
|
||||
username: System.get_env("DB_USER", "pleroma"),
|
||||
password: System.fetch_env!("DB_PASS"),
|
||||
database: System.get_env("DB_NAME", "pleroma"),
|
||||
username: System.get_env("DB_USER", "postgres"),
|
||||
password: System.get_env("DB_PASS", "postgres"),
|
||||
database: System.get_env("DB_NAME", "postgres"),
|
||||
hostname: System.get_env("DB_HOST", "db")
|
||||
end
|
||||
|
||||
|
|
|
@ -6,9 +6,6 @@
|
|||
# Twitter-like block behavior
|
||||
config :pleroma, :activitypub, blockers_visible: false
|
||||
|
||||
# Set the default frontend to an instructions page
|
||||
config :pleroma, :frontends, primary: %{"name" => "landing-fe", "ref" => "vendor"}
|
||||
|
||||
# Sane default upload filters
|
||||
config :pleroma, Pleroma.Upload,
|
||||
filters: [
|
||||
|
@ -37,6 +34,9 @@
|
|||
# Allow privileged staff
|
||||
config :pleroma, :instance, privileged_staff: true
|
||||
|
||||
# Enable instance favicons
|
||||
config :pleroma, :instances_favicons, enabled: true
|
||||
|
||||
# Hellthread limits
|
||||
config :pleroma, :mrf_hellthread,
|
||||
delist_threshold: 15,
|
||||
|
|
|
@ -122,6 +122,8 @@
|
|||
|
||||
config :pleroma, :mrf, policies: []
|
||||
|
||||
config :pleroma, :instances_favicons, enabled: false
|
||||
|
||||
config :pleroma, :pipeline,
|
||||
object_validator: Pleroma.Web.ActivityPub.ObjectValidatorMock,
|
||||
mrf: Pleroma.Web.ActivityPub.MRFMock,
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
set -e
|
||||
|
||||
DATABASE_URL=${DATABASE_URL:"postgres://${DB_HOST:-db}:5432/${DB_NAME:-pleroma}"}
|
||||
DATABASE_URL=${DATABASE_URL:-"postgres://${DB_USER:-postgres}:${DB_PASS:-postgres}@${DB_HOST:-db}:5432/${DB_NAME:-postgres}"}
|
||||
|
||||
echo "-- Waiting for database..."
|
||||
while ! pg_isready -U ${DB_USER:-pleroma} -d $DATABASE_URL -t 1; do
|
||||
while ! pg_isready -d $DATABASE_URL -t 1; do
|
||||
sleep 1s
|
||||
done
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# Recommended varnishncsa logging format: '%h %l %u %t "%m %{X-Forwarded-Proto}i://%{Host}i%U%q %H" %s %b "%{Referer}i" "%{User-agent}i"'
|
||||
# Please use Varnish 7.0+ for proper Range Requests / Chunked encoding support
|
||||
vcl 4.1;
|
||||
import std;
|
||||
|
||||
|
@ -22,11 +23,6 @@ sub vcl_recv {
|
|||
set req.http.X-Forwarded-Proto = "https";
|
||||
}
|
||||
|
||||
# CHUNKED SUPPORT
|
||||
if (req.http.Range ~ "bytes=") {
|
||||
set req.http.x-range = req.http.Range;
|
||||
}
|
||||
|
||||
# Pipe if WebSockets request is coming through
|
||||
if (req.http.upgrade ~ "(?i)websocket") {
|
||||
return (pipe);
|
||||
|
@ -35,9 +31,9 @@ sub vcl_recv {
|
|||
# Allow purging of the cache
|
||||
if (req.method == "PURGE") {
|
||||
if (!client.ip ~ purge) {
|
||||
return(synth(405,"Not allowed."));
|
||||
return (synth(405,"Not allowed."));
|
||||
}
|
||||
return(purge);
|
||||
return (purge);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -53,17 +49,11 @@ sub vcl_backend_response {
|
|||
return (retry);
|
||||
}
|
||||
|
||||
# CHUNKED SUPPORT
|
||||
if (bereq.http.x-range ~ "bytes=" && beresp.status == 206) {
|
||||
set beresp.ttl = 10m;
|
||||
set beresp.http.CR = beresp.http.content-range;
|
||||
}
|
||||
|
||||
# Bypass cache for large files
|
||||
# 50000000 ~ 50MB
|
||||
if (std.integer(beresp.http.content-length, 0) > 50000000) {
|
||||
set beresp.uncacheable = true;
|
||||
return(deliver);
|
||||
return (deliver);
|
||||
}
|
||||
|
||||
# Don't cache objects that require authentication
|
||||
|
@ -94,7 +84,7 @@ sub vcl_synth {
|
|||
if (resp.status == 750) {
|
||||
set resp.status = 301;
|
||||
set resp.http.Location = req.http.x-redir;
|
||||
return(deliver);
|
||||
return (deliver);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -106,25 +96,12 @@ sub vcl_pipe {
|
|||
}
|
||||
}
|
||||
|
||||
sub vcl_hash {
|
||||
# CHUNKED SUPPORT
|
||||
if (req.http.x-range ~ "bytes=") {
|
||||
hash_data(req.http.x-range);
|
||||
unset req.http.Range;
|
||||
}
|
||||
}
|
||||
|
||||
sub vcl_backend_fetch {
|
||||
# Be more lenient for slow servers on the fediverse
|
||||
if (bereq.url ~ "^/proxy/") {
|
||||
set bereq.first_byte_timeout = 300s;
|
||||
}
|
||||
|
||||
# CHUNKED SUPPORT
|
||||
if (bereq.http.x-range) {
|
||||
set bereq.http.Range = bereq.http.x-range;
|
||||
}
|
||||
|
||||
if (bereq.retries == 0) {
|
||||
# Clean up the X-Varnish-Backend-503 flag that is used internally
|
||||
# to mark broken backend responses that should be retried.
|
||||
|
@ -143,14 +120,6 @@ sub vcl_backend_fetch {
|
|||
}
|
||||
}
|
||||
|
||||
sub vcl_deliver {
|
||||
# CHUNKED SUPPORT
|
||||
if (resp.http.CR) {
|
||||
set resp.http.Content-Range = resp.http.CR;
|
||||
unset resp.http.CR;
|
||||
}
|
||||
}
|
||||
|
||||
sub vcl_backend_error {
|
||||
# Retry broken backend responses.
|
||||
set bereq.http.X-Varnish-Backend-503 = "1";
|
||||
|
|
Before Width: | Height: | Size: 981 B |
Before Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 81 B |
Before Width: | Height: | Size: 8.6 KiB |
|
@ -1,74 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Welcome to Soapbox</title>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover,user-scalable=no">
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
<style type="text/css">
|
||||
:root {
|
||||
--brand-color: #0482d8;
|
||||
--background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: var(--background-color);
|
||||
font-family: 'Lato', sans-serif;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
main {
|
||||
max-width: 500px;
|
||||
margin: 0 auto;
|
||||
padding: 30px;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 100%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: normal;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--brand-color);
|
||||
}
|
||||
|
||||
code {
|
||||
display: block;
|
||||
color: white;
|
||||
background-color: black;
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
code.inline {
|
||||
display: inline;
|
||||
border-radius: 4px;
|
||||
padding: 4px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<img class="logo" src="/assets/soapbox-logo-wide.svg" alt="Soapbox" />
|
||||
<h2>Almost done...</h2>
|
||||
<p>Congrats! 🎉 You've installed Soapbox BE. Now you just need to install a frontend.</p>
|
||||
<h2>Installing Soapbox FE</h2>
|
||||
<p>To install <a href="https://gitlab.com/soapbox-pub/soapbox-fe" target="_blank">Soapbox FE</a>, SSH into the server and download a .zip of the latest build:</p>
|
||||
<code>curl -L https://gitlab.com/soapbox-pub/soapbox-fe/-/jobs/artifacts/develop/download?job=build-production -o soapbox-fe.zip</code>
|
||||
<p>Then unpack it into the <code class="inline">instance</code> directory:</p>
|
||||
<code>busybox unzip soapbox-fe.zip -o -d /opt/pleroma/instance</code>
|
||||
<p><strong>That's it!</strong> Just refresh this page.</p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
|
@ -421,6 +421,38 @@ def run(["list"]) do
|
|||
|> Stream.run()
|
||||
end
|
||||
|
||||
def run(["fix_follow_state", local_user, remote_user]) do
|
||||
start_pleroma()
|
||||
|
||||
with {:local, %User{} = local} <- {:local, User.get_by_nickname(local_user)},
|
||||
{:remote, %User{} = remote} <- {:remote, User.get_by_nickname(remote_user)},
|
||||
{:follow_data, %{data: %{"state" => request_state}}} <-
|
||||
{:follow_data, Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(local, remote)} do
|
||||
calculated_state = User.following?(local, remote)
|
||||
|
||||
shell_info(
|
||||
"Request state is #{request_state}, vs calculated state of following=#{calculated_state}"
|
||||
)
|
||||
|
||||
if calculated_state == false && request_state == "accept" do
|
||||
shell_info("Discrepancy found, fixing")
|
||||
Pleroma.Web.CommonAPI.reject_follow_request(local, remote)
|
||||
shell_info("Relationship fixed")
|
||||
else
|
||||
shell_info("No discrepancy found")
|
||||
end
|
||||
else
|
||||
{:local, _} ->
|
||||
shell_error("No local user #{local_user}")
|
||||
|
||||
{:remote, _} ->
|
||||
shell_error("No remote user #{remote_user}")
|
||||
|
||||
{:follow_data, _} ->
|
||||
shell_error("No follow data for #{local_user} and #{remote_user}")
|
||||
end
|
||||
end
|
||||
|
||||
defp set_moderator(user, value) do
|
||||
{:ok, user} =
|
||||
user
|
||||
|
|
|
@ -112,7 +112,17 @@ def start(_type, _args) do
|
|||
|
||||
# See http://elixir-lang.org/docs/stable/elixir/Supervisor.html
|
||||
# for other strategies and supported options
|
||||
opts = [strategy: :one_for_one, name: Pleroma.Supervisor]
|
||||
# If we have a lot of caches, default max_restarts can cause test
|
||||
# resets to fail.
|
||||
# Go for the default 3 unless we're in test
|
||||
max_restarts =
|
||||
if @mix_env == :test do
|
||||
100
|
||||
else
|
||||
3
|
||||
end
|
||||
|
||||
opts = [strategy: :one_for_one, name: Pleroma.Supervisor, max_restarts: max_restarts]
|
||||
result = Supervisor.start_link(children, opts)
|
||||
|
||||
set_postgres_server_version()
|
||||
|
|
|
@ -1587,13 +1587,19 @@ def block(%User{} = blocker, %User{} = blocked) do
|
|||
blocker
|
||||
end
|
||||
|
||||
# clear any requested follows as well
|
||||
# clear any requested follows from both sides as well
|
||||
blocked =
|
||||
case CommonAPI.reject_follow_request(blocked, blocker) do
|
||||
{:ok, %User{} = updated_blocked} -> updated_blocked
|
||||
nil -> blocked
|
||||
end
|
||||
|
||||
blocker =
|
||||
case CommonAPI.reject_follow_request(blocker, blocked) do
|
||||
{:ok, %User{} = updated_blocker} -> updated_blocker
|
||||
nil -> blocker
|
||||
end
|
||||
|
||||
unsubscribe(blocked, blocker)
|
||||
|
||||
unfollowing_blocked = Config.get([:activitypub, :unfollow_blocked], true)
|
||||
|
|
|
@ -54,7 +54,8 @@ def render("show.json", _) do
|
|||
birthday_min_age: Config.get([:instance, :birthday_min_age])
|
||||
},
|
||||
stats: %{mau: Pleroma.User.active_user_count()},
|
||||
vapid_public_key: Keyword.get(Pleroma.Web.Push.vapid_config(), :public_key)
|
||||
vapid_public_key: Keyword.get(Pleroma.Web.Push.vapid_config(), :public_key),
|
||||
oauth_consumer_strategies: Pleroma.Config.oauth_consumer_strategies()
|
||||
},
|
||||
configuration: configuration(),
|
||||
soapbox: %{
|
||||
|
|
|
@ -54,7 +54,7 @@ defp handle_preview(conn, url) do
|
|||
media_proxy_url = MediaProxy.url(url)
|
||||
|
||||
with {:ok, %{status: status} = head_response} when status in 200..299 <-
|
||||
Pleroma.HTTP.request("head", media_proxy_url, [], [], pool: :media) do
|
||||
Pleroma.HTTP.request("HEAD", media_proxy_url, [], [], pool: :media) do
|
||||
content_type = Tesla.get_header(head_response, "content-type")
|
||||
content_length = Tesla.get_header(head_response, "content-length")
|
||||
content_length = content_length && String.to_integer(content_length)
|
||||
|
|
|
@ -9,6 +9,12 @@ defmodule Pleroma.Workers.ReceiverWorker do
|
|||
|
||||
@impl Oban.Worker
|
||||
def perform(%Job{args: %{"op" => "incoming_ap_doc", "params" => params}}) do
|
||||
Federator.perform(:incoming_ap_doc, params)
|
||||
with {:ok, res} <- Federator.perform(:incoming_ap_doc, params) do
|
||||
{:ok, res}
|
||||
else
|
||||
{:error, :origin_containment_failed} -> {:cancel, :origin_containment_failed}
|
||||
{:error, {:reject, reason}} -> {:cancel, reason}
|
||||
e -> e
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
9
mix.lock
|
@ -90,6 +90,8 @@
|
|||
"nimble_parsec": {:hex, :nimble_parsec, "0.5.0", "90e2eca3d0266e5c53f8fbe0079694740b9c91b6747f2b7e3c5d21966bba8300", [:mix], [], "hexpm", "5c040b8469c1ff1b10093d3186e2e10dbe483cd73d79ec017993fb3985b8a9b3"},
|
||||
"nimble_pool": {:hex, :nimble_pool, "0.2.4", "1db8e9f8a53d967d595e0b32a17030cdb6c0dc4a451b8ac787bf601d3f7704c3", [:mix], [], "hexpm", "367e8071e137b787764e6a9992ccb57b276dc2282535f767a07d881951ebeac6"},
|
||||
"nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]},
|
||||
"oauth2": {:hex, :oauth2, "0.9.4", "632e8e8826a45e33ac2ea5ac66dcc019ba6bb5a0d2ba77e342d33e3b7b252c6e", [:mix], [{:hackney, "~> 1.7", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "407c6b9f60aa0d01b915e2347dc6be78adca706a37f0c530808942da3b62e7af"},
|
||||
"oauther": {:hex, :oauther, "1.3.0", "82b399607f0ca9d01c640438b34d74ebd9e4acd716508f868e864537ecdb1f76", [:mix], [], "hexpm", "78eb888ea875c72ca27b0864a6f550bc6ee84f2eeca37b093d3d833fbcaec04e"},
|
||||
"oban": {:hex, :oban, "2.3.4", "ec7509b9af2524d55f529cb7aee93d36131ae0bf0f37706f65d2fe707f4d9fd8", [:mix], [{:ecto_sql, ">= 3.4.3", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c70ca0434758fd1805422ea4446af5e910ddc697c0c861549c8f0eb0cfbd2fdf"},
|
||||
"oembed_providers": {:hex, :oembed_providers, "0.1.0", "9b336ee5f3ca20ee4ed005383c74b154d30d0abeb98e95828855c0e2841ae46b", [:mix], [{:glob, "~> 1.0", [hex: :glob, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "ac1dda0f743aa6fdead3eef59decfefc9de91d550bf0805b8fce16ed10d421ba"},
|
||||
"open_api_spex": {:hex, :open_api_spex, "3.10.0", "94e9521ad525b3fcf6dc77da7c45f87fdac24756d4de588cb0816b413e7c1844", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.1", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm", "2dbb2bde3d2b821f06936e8dfaf3284331186556291946d84eeba3750ac28765"},
|
||||
|
@ -135,6 +137,13 @@
|
|||
"trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bd4fde4c15f3e993a999e019d64347489b91b7a9096af68b2bdadd192afa693f"},
|
||||
"tzdata": {:hex, :tzdata, "1.0.5", "69f1ee029a49afa04ad77801febaf69385f3d3e3d1e4b56b9469025677b89a28", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "55519aa2a99e5d2095c1e61cc74c9be69688f8ab75c27da724eb8279ff402a5a"},
|
||||
"ueberauth": {:hex, :ueberauth, "0.6.3", "d42ace28b870e8072cf30e32e385579c57b9cc96ec74fa1f30f30da9c14f3cc0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "afc293d8a1140d6591b53e3eaf415ca92842cb1d32fad3c450c6f045f7f91b60"},
|
||||
"ueberauth_facebook": {:hex, :ueberauth_facebook, "0.8.0", "9ec8571f804dd5c06f4e305d70606b39fc0ac8a8f43ed56ebb76012a97d14729", [:mix], [{:oauth2, "~> 0.9", [hex: :oauth2, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.4", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "6d0c88d6ea4cc40cf99b3abcf8aaa435a31f836dc8921e8b4015d760e183f7ba"},
|
||||
"ueberauth_github": {:hex, :ueberauth_github, "0.7.0", "637067c5500f7b13c18caca3db66d09eba661524e0d0e9518b54151e99484bad", [:mix], [{:oauth2, "~> 0.9", [hex: :oauth2, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.4", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "05d5ec9ac501a8ca82c41275436d1d0cf05f5c380ab194c5d79414a02de2645e"},
|
||||
"ueberauth_google": {:hex, :ueberauth_google, "0.8.0", "dc0e8417061c74107a3ba1419943cc930d3403b5c536b3757886964a3a70c333", [:mix], [{:oauth2, "~> 0.9", [hex: :oauth2, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.4", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "72cd7710cd721ec340a2eda418658e77254ab516ddcb52257db834055878cdc7"},
|
||||
"ueberauth_keycloak_strategy": {:hex, :ueberauth_keycloak_strategy, "0.2.0", "5ed0471a1cbb2ad4c0b371ab9f2a8e413070d9f307a2e55925a613254e7be619", [:mix], [{:oauth2, "~> 0.9", [hex: :oauth2, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.4", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "9db30c00fe7e55f032254e6220d7c9b260e14367bfd0dba6c29760ce05a0131c"},
|
||||
"ueberauth_microsoft": {:hex, :ueberauth_microsoft, "0.4.0", "1c0be9c218e93c426e32c416421e9d41ea59fdf1e3b24310ed5be41df46ddcc1", [:mix], [{:oauth2, "~> 0.8", [hex: :oauth2, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.4", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "0b124367853a9becd265639f9eaa0c5318a313feb8ebd51464c8c68be1353e20"},
|
||||
"ueberauth_slack": {:hex, :ueberauth_slack, "0.3.0", "ec8f6c96e1d41a458a00b5d8cd918c1f387998884fe4636e67dd88b1bd06f928", [:mix], [{:oauth2, "~> 0.5", [hex: :oauth2, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.2", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "b4012b2cf1664dc80eda5762c5d3a495a819456186ab789da8ce4e7b9c0fa22f"},
|
||||
"ueberauth_twitter": {:hex, :ueberauth_twitter, "0.4.0", "4b98620341bc91bac90459093bba093c650823b6e2df35b70255c493c17e9227", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:oauther, "~> 1.1", [hex: :oauther, repo: "hexpm", optional: false]}, {:ueberauth, "~> 0.6", [hex: :ueberauth, repo: "hexpm", optional: false]}], "hexpm", "fb29c9047ca263038c0c61f5a0ec8597e8564aba3f2b4cb02704b60205fd4468"},
|
||||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"},
|
||||
"unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"},
|
||||
"web_push_encryption": {:hex, :web_push_encryption, "0.3.1", "76d0e7375142dfee67391e7690e89f92578889cbcf2879377900b5620ee4708d", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.11.1", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "4f82b2e57622fb9337559058e8797cb0df7e7c9790793bdc4e40bc895f70e2a2"},
|
||||
|
|
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 95 B |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 981 B |
Before Width: | Height: | Size: 1 KiB After Width: | Height: | Size: 4 KiB |
Before Width: | Height: | Size: 124 B After Width: | Height: | Size: 81 B |
Before Width: | Height: | Size: 2.8 MiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 1,014 KiB |
Before Width: | Height: | Size: 854 KiB |
Before Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 533 KiB |
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.7 KiB |
|
@ -1 +1,75 @@
|
|||
<!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.7d2d223f75c3a14b0991.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.cea10ab53f3aa19fc30e.js></script><script type=text/javascript src=/static/js/app.6c972d84b60f601b01f8.js></script></body></html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Welcome to Soapbox</title>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover,user-scalable=no">
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
<style type="text/css">
|
||||
:root {
|
||||
--brand-color: #0482d8;
|
||||
--background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: var(--background-color);
|
||||
font-family: 'Lato', sans-serif;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
main {
|
||||
max-width: 500px;
|
||||
margin: 0 auto;
|
||||
padding: 30px;
|
||||
}
|
||||
|
||||
.logo {
|
||||
width: 100%;
|
||||
display: block;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
font-weight: normal;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--brand-color);
|
||||
}
|
||||
|
||||
code {
|
||||
display: block;
|
||||
color: white;
|
||||
background-color: black;
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
code.inline {
|
||||
display: inline;
|
||||
border-radius: 4px;
|
||||
padding: 4px;
|
||||
}
|
||||
</style>
|
||||
<!--server-generated-meta-->
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<img class="logo" src="/images/soapbox-logo-wide.svg" alt="Soapbox" />
|
||||
<h2>Almost done...</h2>
|
||||
<p>Congrats! 🎉 You've installed Soapbox BE. Now you just need to install a frontend.</p>
|
||||
<h2>Installing Soapbox FE</h2>
|
||||
<p>To install <a href="https://gitlab.com/soapbox-pub/soapbox-fe" target="_blank">Soapbox FE</a>, SSH into the server and download a .zip of the latest build:</p>
|
||||
<code>curl -L https://gitlab.com/soapbox-pub/soapbox-fe/-/jobs/artifacts/develop/download?job=build-production -o soapbox-fe.zip</code>
|
||||
<p>Then unpack it into the <code class="inline">instance</code> directory:</p>
|
||||
<code>busybox unzip soapbox-fe.zip -o -d /opt/pleroma/instance</code>
|
||||
<p><strong>That's it!</strong> Just refresh this page.</p>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Before Width: | Height: | Size: 30 KiB |
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 628 KiB |
|
@ -1,28 +0,0 @@
|
|||
{
|
||||
"alwaysShowSubjectInput": true,
|
||||
"background": "/static/aurora_borealis.jpg",
|
||||
"collapseMessageWithSubject": false,
|
||||
"greentext": false,
|
||||
"hideFilteredStatuses": false,
|
||||
"hideMutedPosts": false,
|
||||
"hidePostStats": false,
|
||||
"hideSitename": false,
|
||||
"hideUserStats": false,
|
||||
"loginMethod": "password",
|
||||
"logo": "/static/logo.svg",
|
||||
"logoMargin": ".1em",
|
||||
"logoMask": true,
|
||||
"logoLeft": false,
|
||||
"minimalScopesMode": false,
|
||||
"nsfwCensorImage": "",
|
||||
"postContentType": "text/plain",
|
||||
"redirectRootLogin": "/main/friends",
|
||||
"redirectRootNoLogin": "/main/all",
|
||||
"scopeCopy": true,
|
||||
"showFeaturesPanel": true,
|
||||
"showInstanceSpecificPanel": false,
|
||||
"sidebarRight": false,
|
||||
"subjectLineBehavior": "email",
|
||||
"theme": "pleroma-dark",
|
||||
"webPushNotifications": false
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
{"version":3,"sources":["webpack:///./src/hocs/with_subscription/with_subscription.scss"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,C","file":"static/css/2.0778a6a864a1307a6c41.css","sourcesContent":[".with-subscription-loading {\n padding: 10px;\n text-align: center;\n}\n.with-subscription-loading .error {\n font-size: 14px;\n}"],"sourceRoot":""}
|
Before Width: | Height: | Size: 34 KiB |