diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 79bb2fd7e..dab52e4c6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,10 +26,10 @@ cache: &global_cache_policy - _build stages: - - check-changelog - build - lint - test + - check-changelog - benchmark - deploy - release diff --git a/changelog.d/bookmark-folders.skip b/changelog.d/bookmark-folders.skip new file mode 100644 index 000000000..e69de29bb diff --git a/changelog.d/fix-bookmark-folder-tests.skip b/changelog.d/fix-bookmark-folder-tests.skip new file mode 100644 index 000000000..e69de29bb diff --git a/changelog.d/transient-validators-defaults.change b/changelog.d/transient-validators-defaults.change new file mode 100644 index 000000000..225cf4d0c --- /dev/null +++ b/changelog.d/transient-validators-defaults.change @@ -0,0 +1 @@ +Set default values on validators for transient objects (attachment, poll options) diff --git a/config/config.exs b/config/config.exs index 32c8509be..56442f49f 100644 --- a/config/config.exs +++ b/config/config.exs @@ -64,7 +64,7 @@ config :pleroma, Pleroma.Upload, link_name: false, proxy_remote: false, filename_display_max_length: 30, - default_description: nil, + default_description: :filename, base_url: nil config :pleroma, Pleroma.Uploaders.Local, uploads: "uploads" @@ -157,18 +157,18 @@ config :pleroma, :http, adapter: [] config :pleroma, :instance, - name: "Pleroma", - email: "example@example.com", - notify_email: "noreply@example.com", - description: "Pleroma: An efficient and flexible fediverse server", - short_description: "", + name: "Shigusegubu", + email: "pleroma@hjkos.com", + notify_email: "pleroma@hjkos.com", + description: "SigSegV, a pleroma instance", + short_description: "HJ's semi-personal instance", background_image: "/images/city.jpg", instance_thumbnail: "/instance/thumbnail.jpeg", favicon: "/favicon.png", limit: 5_000, description_limit: 5_000, remote_limit: 100_000, - upload_limit: 16_000_000, + upload_limit: 200_000_000, avatar_upload_limit: 2_000_000, background_upload_limit: 4_000_000, banner_upload_limit: 4_000_000, @@ -187,18 +187,16 @@ config :pleroma, :instance, federation_reachability_timeout_days: 7, allow_relay: true, public: true, - quarantined_instances: [], + quarantined_instances: [{ "pleroma.rareome.ga", "leaks private posts or sumshit i dont rember" }], static_dir: "instance/static/", allowed_post_formats: [ "text/plain", - "text/html", - "text/markdown", "text/bbcode" ], autofollowed_nicknames: [], autofollowing_nicknames: [], max_pinned_statuses: 1, - attachment_links: false, + attachment_links: true, max_report_comment_size: 1000, report_strip_status: true, safe_dm_mentions: false, @@ -291,8 +289,8 @@ config :pleroma, :markup, config :pleroma, :frontend_configurations, pleroma_fe: %{ - alwaysShowSubjectInput: true, - background: "/images/city.jpg", + alwaysShowSubjectInput: false, + background: "/static/sigsegv_s.png", collapseMessageWithSubject: false, disableChat: false, greentext: false, @@ -305,18 +303,18 @@ config :pleroma, :frontend_configurations, logo: "/static/logo.svg", logoMargin: ".1em", logoMask: true, - minimalScopesMode: false, + minimalScopesMode: true, noAttachmentLinks: false, nsfwCensorImage: "", postContentType: "text/plain", redirectRootLogin: "/main/friends", redirectRootNoLogin: "/main/all", - scopeCopy: true, + scopeCopy: false, sidebarRight: false, showFeaturesPanel: true, - showInstanceSpecificPanel: false, - subjectLineBehavior: "email", - theme: "pleroma-dark", + showInstanceSpecificPanel: true, + subjectLineBehavior: "noop", + theme: "sigsegv2", webPushNotifications: false } @@ -372,8 +370,23 @@ config :pleroma, :mrf_hellthread, config :pleroma, :mrf_simple, media_removal: [], - media_nsfw: [], - federated_timeline_removal: [], + media_nsfw: [ + { "preteengirls.biz", "pron or even cp" }, + { "melalandia.tk", "i don't rember" }, + { "pl.smuglo.li", "instance is dead but i still remember, rip smuglo" }, + { "baraag.net", "pron" }, + { "humblr.social", "3dpd pron" }, + { "pawoo.net", "tasteful pron, mostly." }, + { "sinblr.com", "3dpd pron" } + ], + federated_timeline_removal: [ + { "preteengirls.biz", "pron or even cp" }, + { "melalandia.tk", "i don't rember" }, + { "baraag.net", "pron" }, + { "humblr.social", "3dpd pron" }, + { "pawoo.net", "tasteful pron, mostly." }, + { "sinblr.com", "3dpd pron" } + ], report_removal: [], reject: [], followers_only: [], @@ -466,7 +479,7 @@ config :pleroma, :media_preview_proxy, min_content_length: 100 * 1024 config :pleroma, :shout, - enabled: true, + enabled: false, limit: 5_000 config :phoenix, :format_encoders, json: Jason, "activity+json": Jason @@ -796,7 +809,7 @@ config :pleroma, :web_cache_ttl, config :pleroma, :modules, runtime_dir: "instance/modules" -config :pleroma, configurable_from_database: false +config :pleroma, configurable_from_database: true config :pleroma, Pleroma.Repo, parameters: [gin_fuzzy_search_limit: "500", jit: "off"], @@ -860,8 +873,11 @@ config :pleroma, Pleroma.Web.ApiSpec.CastAndValidate, strict: false config :pleroma, :mrf, policies: [ - Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy, + Pleroma.Web.ActivityPub.MRF.SimplePolicy, + Pleroma.Web.ActivityPub.MRF.HellthreadPolicy, + Pleroma.Web.ActivityPub.MRF.AntiFollowbotPolicy, Pleroma.Web.ActivityPub.MRF.TagPolicy, + Pleroma.Web.ActivityPub.MRF.ObjectAgePolicy, Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy ], transparency: true, diff --git a/config/custom_emoji.txt b/config/custom_emoji.txt new file mode 100644 index 000000000..c7a706630 --- /dev/null +++ b/config/custom_emoji.txt @@ -0,0 +1,115 @@ +Advanced_Sorcery, /emoji/sgsgb/Advanced_Sorcery.png +FACE_QUAD, /emoji/sgsgb/FACE_QUAD.png +Yukkuri_Reimu, /emoji/sgsgb/Yukkuri_Reimu.png +a_to, /emoji/sgsgb/a_to.png +angrypirds, /emoji/sgsgb/angrypirds.png +annoying_dog_hole, /emoji/sgsgb/annoying_dog_hole.png +award_bios, /emoji/sgsgb/award_bios.png +bananya, /emoji/sgsgb/bananya.png +bandits, /emoji/sgsgb/bandits.png +blobcatknife, /emoji/sgsgb/blobcatknife.png +cacolaugh, /emoji/sgsgb/cacolaugh.png +catboythink, /emoji/sgsgb/catboythink.png +cirno_run, /emoji/sgsgb/cirno_run.png +debian, /emoji/sgsgb/debian.png +denton, /emoji/sgsgb/denton.png +denton_laugh, /emoji/sgsgb/denton_laugh.png +dio, /emoji/sgsgb/dio.png +dogcited, /emoji/sgsgb/dogcited.png +dong, /emoji/sgsgb/dong.png +duane, /emoji/sgsgb/duane.png +e, /emoji/sgsgb/e.png +energy_star, /emoji/sgsgb/energy_star.png +flynn_smirk, /emoji/sgsgb/flynn_smirk.png +furrythink, /emoji/sgsgb/furrythink.png +granddad, /emoji/sgsgb/granddad.png +heavy_losingeh, /emoji/sgsgb/heavy_losingeh.png +heavy_winninggreat, /emoji/sgsgb/heavy_winninggreat.png +herrington, /emoji/sgsgb/herrington.png +hogan, /emoji/sgsgb/hogan.png +hyperjoy, /emoji/sgsgb/hyperjoy.png +itisamystery, /emoji/sgsgb/itisamystery.png +jacobson, /emoji/sgsgb/jacobson.png +jake, /emoji/sgsgb/jake.png +jyushimatsu_think, /emoji/sgsgb/jyushimatsu_think.png +kinzo, /emoji/sgsgb/kinzo.png +kms, /emoji/sgsgb/kms.png +kokoko, /emoji/sgsgb/kokoko.png +loss, /emoji/sgsgb/loss.png +luck, /emoji/sgsgb/luck.png +lucknorm, /emoji/sgsgb/lucknorm.png +marko, /emoji/sgsgb/marko.png +megaman, /emoji/sgsgb/megaman.png +miyanozoom, /emoji/sgsgb/miyanozoom.png +monster_energy_ultra, /emoji/sgsgb/monster_energy_ultra.png +moraledn, /emoji/sgsgb/moraledn.png +moraleup, /emoji/sgsgb/moraleup.png +multiply, /emoji/sgsgb/multiply.png +mycomputer, /emoji/sgsgb/mycomputer.png +necromancy1, /emoji/sgsgb/necromancy1.png +necromancy2, /emoji/sgsgb/necromancy2.png +necromancy3, /emoji/sgsgb/necromancy3.png +nice, /emoji/sgsgb/nice.png +nyoron, /emoji/sgsgb/nyoron.png +ohgno, /emoji/sgsgb/ohgno.png +ohyes, /emoji/sgsgb/ohyes.png +orangeman, /emoji/sgsgb/orangeman.png +payyap, /emoji/sgsgb/payyap.png +pooh, /emoji/sgsgb/pooh.png +poohington, /emoji/sgsgb/poohington.png +poptepipic1, /emoji/sgsgb/poptepipic1.png +poptepipic10, /emoji/sgsgb/poptepipic10.png +poptepipic11, /emoji/sgsgb/poptepipic11.png +poptepipic12, /emoji/sgsgb/poptepipic12.png +poptepipic13, /emoji/sgsgb/poptepipic13.png +poptepipic14, /emoji/sgsgb/poptepipic14.png +poptepipic15, /emoji/sgsgb/poptepipic15.png +poptepipic16, /emoji/sgsgb/poptepipic16.png +poptepipic17, /emoji/sgsgb/poptepipic17.png +poptepipic18, /emoji/sgsgb/poptepipic18.png +poptepipic19, /emoji/sgsgb/poptepipic19.png +poptepipic2, /emoji/sgsgb/poptepipic2.png +poptepipic20, /emoji/sgsgb/poptepipic20.png +poptepipic21, /emoji/sgsgb/poptepipic21.png +poptepipic22, /emoji/sgsgb/poptepipic22.png +poptepipic23, /emoji/sgsgb/poptepipic23.png +poptepipic3, /emoji/sgsgb/poptepipic3.png +poptepipic4, /emoji/sgsgb/poptepipic4.png +poptepipic5, /emoji/sgsgb/poptepipic5.png +poptepipic6, /emoji/sgsgb/poptepipic6.png +poptepipic7, /emoji/sgsgb/poptepipic7.png +poptepipic8, /emoji/sgsgb/poptepipic8.png +poptepipic9, /emoji/sgsgb/poptepipic9.png +puke, /emoji/sgsgb/puke.png +quake_net, /emoji/sgsgb/quake_net.png +quake_ram, /emoji/sgsgb/quake_ram.png +ranger, /emoji/sgsgb/ranger.png +ranger_none, /emoji/sgsgb/ranger_none.png +risitas1, /emoji/sgsgb/risitas1.png +risitas2, /emoji/sgsgb/risitas2.png +rokalife, /emoji/sgsgb/rokalife.png +sandro, /emoji/sgsgb/sandro.png +scut, /emoji/sgsgb/scut.png +serious, /emoji/sgsgb/serious.png +shag, /emoji/sgsgb/shag.png +shinitai_i, /emoji/sgsgb/shinitai_i.png +shinitai_ni, /emoji/sgsgb/shinitai_ni.png +shinitai_shi, /emoji/sgsgb/shinitai_shi.png +shinitai_ta, /emoji/sgsgb/shinitai_ta.png +shotging, /emoji/sgsgb/shotging.png +skelethor, /emoji/sgsgb/skelethor.png +smug_marisa, /emoji/sgsgb/smug_marisa.png +spurdo, /emoji/sgsgb/spurdo.png +stalkers, /emoji/sgsgb/stalkers.png +tenshi_eating_corndog, /emoji/sgsgb/tenshi_eating_corndog.png +thinkingwat, /emoji/sgsgb/thinkingwat.png +thnk, /emoji/sgsgb/thnk.png +tobdog, /emoji/sgsgb/tobdog.png +todd, /emoji/sgsgb/todd.png +trash, /emoji/sgsgb/trash.png +tuturu, /emoji/sgsgb/tuturu.png +tux, /emoji/sgsgb/tux.png +uwot, /emoji/sgsgb/uwot.png +uwot2, /emoji/sgsgb/uwot2.png +uwot3, /emoji/sgsgb/uwot3.png +vanpeek, /emoji/sgsgb/vanpeek.png diff --git a/installation/pleroma.service b/installation/pleroma.service index 8338228d8..9e959e1ac 100644 --- a/installation/pleroma.service +++ b/installation/pleroma.service @@ -6,6 +6,7 @@ After=network.target postgresql.service ExecReload=/bin/kill $MAINPID KillMode=process Restart=on-failure +StandardOutput=journal ; Name of the user that runs the Pleroma service. User=pleroma @@ -14,9 +15,11 @@ Environment="MIX_ENV=prod" ; Make sure that all paths fit your installation. ; Path to the home directory of the user running the Pleroma service. -Environment="HOME=/var/lib/pleroma" +Environment="HOME=/home/pleroma" ; Path to the folder containing the Pleroma installation. -WorkingDirectory=/opt/pleroma +WorkingDirectory=/home/pleroma/pleroma +; Path to the environment file. the file contains RELEASE_COOKIE and etc +;EnvironmentFile=/opt/pleroma/config/pleroma.env ; Path to the Mix binary. ExecStart=/usr/bin/mix phx.server @@ -24,7 +27,7 @@ ExecStart=/usr/bin/mix phx.server ; Use private /tmp and /var/tmp folders inside a new file system namespace, which are discarded after the process stops. PrivateTmp=true ; The /home, /root, and /run/user folders can not be accessed by this service anymore. If your Pleroma user has its home folder in one of the restricted places, or use one of these folders as its working directory, you have to set this to false. -ProtectHome=true +ProtectHome=false ; Mount /usr, /boot, and /etc as read-only for processes invoked by this service. ProtectSystem=full ; Sets up a new /dev mount for the process and only adds API pseudo devices like /dev/null, /dev/zero or /dev/random but not physical devices. Disabled by default because it may not work on devices like the Raspberry Pi. diff --git a/lib/pleroma/constants.ex b/lib/pleroma/constants.ex index d814b4931..190f543ba 100644 --- a/lib/pleroma/constants.ex +++ b/lib/pleroma/constants.ex @@ -90,6 +90,17 @@ defmodule Pleroma.Constants do do: ~r/^[^[:cntrl:] ()<>@,;:\\"\/\[\]?=]+\/[^[:cntrl:] ()<>@,;:\\"\/\[\]?=]+(; .*)?$/ ) + const(activity_json_canonical_mime_type, + do: "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"" + ) + + const(activity_json_mime_types, + do: [ + "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"", + "application/activity+json" + ] + ) + const(upload_object_types, do: ["Document", "Image"]) const(activity_json_canonical_mime_type, diff --git a/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex b/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex index 398020bff..72975f348 100644 --- a/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex @@ -12,13 +12,13 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator do @primary_key false embedded_schema do field(:id, :string) - field(:type, :string) + field(:type, :string, default: "Link") field(:mediaType, ObjectValidators.MIME, default: "application/octet-stream") field(:name, :string) field(:blurhash, :string) embeds_many :url, UrlObjectValidator, primary_key: false do - field(:type, :string) + field(:type, :string, default: "Link") field(:href, ObjectValidators.Uri) field(:mediaType, ObjectValidators.MIME, default: "application/octet-stream") field(:width, :integer) diff --git a/lib/pleroma/web/activity_pub/object_validators/question_options_validator.ex b/lib/pleroma/web/activity_pub/object_validators/question_options_validator.ex index 541945fa4..8d7f7b9fa 100644 --- a/lib/pleroma/web/activity_pub/object_validators/question_options_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/question_options_validator.ex @@ -14,10 +14,10 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.QuestionOptionsValidator do embeds_one :replies, Replies, primary_key: false do field(:totalItems, :integer) - field(:type, :string) + field(:type, :string, default: "Collection") end - field(:type, :string) + field(:type, :string, default: "Note") end def changeset(struct, data) do diff --git a/lib/pleroma/web/pleroma_api/views/bookmark_folder_view.ex b/lib/pleroma/web/pleroma_api/views/bookmark_folder_view.ex index fc6ad59d0..12decb816 100644 --- a/lib/pleroma/web/pleroma_api/views/bookmark_folder_view.ex +++ b/lib/pleroma/web/pleroma_api/views/bookmark_folder_view.ex @@ -13,10 +13,8 @@ defmodule Pleroma.Web.PleromaAPI.BookmarkFolderView do %{ id: folder.id |> to_string(), name: folder.name, - emoji: get_emoji(folder.emoji), - source: %{ - emoji: folder.emoji - } + emoji: folder.emoji, + emoji_url: get_emoji_url(folder.emoji) } end @@ -24,18 +22,18 @@ defmodule Pleroma.Web.PleromaAPI.BookmarkFolderView do render_many(folders, __MODULE__, "show.json", Map.delete(opts, :folders)) end - defp get_emoji(nil) do + defp get_emoji_url(nil) do nil end - defp get_emoji(emoji) do + defp get_emoji_url(emoji) do if Emoji.unicode?(emoji) do - emoji + nil else emoji = Emoji.get(emoji) if emoji != nil do - Endpoint.url() |> URI.merge(emoji.relative_url) |> to_string() + Endpoint.url() |> URI.merge(emoji.file) |> to_string() else nil end diff --git a/test/pleroma/web/pleroma_api/controllers/bookmark_folder_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/bookmark_folder_controller_test.exs index 71b850859..9bd90ed2e 100644 --- a/test/pleroma/web/pleroma_api/controllers/bookmark_folder_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/bookmark_folder_controller_test.exs @@ -33,9 +33,7 @@ defmodule Pleroma.Web.PleromaAPI.BookmarkFolderControllerTest do "id" => ^folder_id, "name" => "Bookmark folder", "emoji" => nil, - "source" => %{ - "emoji" => nil - } + "emoji_url" => nil } ] = result end @@ -57,9 +55,24 @@ defmodule Pleroma.Web.PleromaAPI.BookmarkFolderControllerTest do assert %{ "name" => "Bookmark folder", "emoji" => "📁", - "source" => %{ - "emoji" => "📁" - } + "emoji_url" => nil + } = result + end + + test "it creates a bookmark folder with custom emoji", %{conn: conn} do + result = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/pleroma/bookmark_folders", %{ + name: "Bookmark folder", + emoji: ":firefox:" + }) + |> json_response_and_validate_schema(200) + + assert %{ + "name" => "Bookmark folder", + "emoji" => ":firefox:", + "emoji_url" => "http://localhost:4001/emoji/Firefox.gif" } = result end