Merge pull request #2971 from ClearlyClaire/glitch-soc/merge-upstream

Merge upstream changes up to f1d4be1e7509f795706ff2310c5fc36e0e79bf4d
This commit is contained in:
Claire 2025-02-21 00:14:29 +01:00 committed by GitHub
commit 4a7fc25221
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
48 changed files with 1053 additions and 896 deletions

View File

@ -26,9 +26,11 @@ inherit_mode:
merge:
- Exclude
require:
plugins:
- rubocop-rails
- rubocop-rspec
- rubocop-rspec_rails
- rubocop-performance
require:
- rubocop-rspec_rails
- rubocop-capybara

View File

@ -2,6 +2,9 @@
Rails/BulkChangeTable:
Enabled: false # Conflicts with strong_migrations features
Rails/Delegate:
Enabled: false
Rails/FilePath:
EnforcedStyle: arguments

View File

@ -1,6 +1,6 @@
# This configuration was generated by
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-offense-counts --no-auto-gen-timestamp`
# using RuboCop version 1.70.0.
# using RuboCop version 1.72.2.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new

View File

@ -1 +1 @@
3.4.1
3.4.2

View File

@ -13,7 +13,7 @@ ARG BASE_REGISTRY="docker.io"
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.4.x"]
# renovate: datasource=docker depName=docker.io/ruby
ARG RUBY_VERSION="3.4.1"
ARG RUBY_VERSION="3.4.2"
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
# renovate: datasource=node-version depName=node
ARG NODE_MAJOR_VERSION="22"

View File

@ -90,7 +90,7 @@ GEM
public_suffix (>= 2.0.2, < 7.0)
aes_key_wrap (1.1.0)
android_key_attestation (0.3.0)
annotaterb (4.13.0)
annotaterb (4.14.0)
ast (2.4.2)
attr_required (1.0.2)
aws-eventstream (1.3.0)
@ -383,10 +383,11 @@ GEM
railties (>= 6.1)
rexml
link_header (0.0.8)
lint_roller (1.1.0)
llhttp-ffi (0.5.0)
ffi-compiler (~> 1.0)
rake (~> 13.0)
logger (1.6.5)
logger (1.6.6)
lograge (0.14.0)
actionpack (>= 4)
activesupport (>= 4)
@ -722,9 +723,10 @@ GEM
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 8)
rspec-support (3.13.2)
rubocop (1.71.2)
rubocop (1.72.2)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
@ -736,16 +738,19 @@ GEM
parser (>= 3.3.1.0)
rubocop-capybara (2.21.0)
rubocop (~> 1.41)
rubocop-performance (1.23.1)
rubocop (>= 1.48.1, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rails (2.29.1)
rubocop-performance (1.24.0)
lint_roller (~> 1.1)
rubocop (>= 1.72.1, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
rubocop-rails (2.30.1)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
rubocop (>= 1.52.0, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rspec (3.4.0)
rubocop (~> 1.61)
rubocop (>= 1.72.1, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
rubocop-rspec (3.5.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-rspec_rails (2.30.0)
rubocop (~> 1.61)
rubocop-rspec (~> 3, >= 3.0.1)
@ -863,7 +868,7 @@ GEM
public_suffix
warden (1.2.9)
rack (>= 2.0.9)
webauthn (3.3.0)
webauthn (3.4.0)
android_key_attestation (~> 0.3.0)
bindata (~> 2.4)
cbor (~> 0.5.9)

View File

@ -305,6 +305,9 @@
"empty_column.explore_statuses": "Hal-hazırda trenddə heç yoxdur. Daha sonra yenidən yoxlayın!",
"empty_column.favourited_statuses": "Bəyəndiyiniz paylaşımlar yoxdur. Birini bəyəndikdə burada görünəcək.",
"empty_column.favourites": "Bu paylaşımı hələ ki, heç kim bəyənməyib. Bəyənildikdə burada görünəcək.",
"empty_column.follow_requests": "İzləmə sorğularınız yoxdur. Qəbul etdikdə burada görəcəksiniz.",
"empty_column.followed_tags": "Heç bir heşteq izləmirsiniz. İzlədikdə burada görünəcək.",
"empty_column.hashtag": "Bu heşteqdə hələ ki, heç nə yoxdur.",
"follow_suggestions.hints.friends_of_friends": "Bu profil izlədiyiniz insanlar arasında populyardır.",
"follow_suggestions.hints.most_followed": "Bu profil {domain} serverində ən çox izlənilənlərdən biridir."
}

View File

@ -212,6 +212,7 @@
"confirmations.logout.confirm": "Выйсці",
"confirmations.logout.message": "Вы ўпэўненыя, што хочаце выйсці?",
"confirmations.logout.title": "Выйсці?",
"confirmations.missing_alt_text.title": "Дадаць апісаньне?",
"confirmations.mute.confirm": "Ігнараваць",
"confirmations.redraft.confirm": "Выдаліць і перапісаць",
"confirmations.redraft.message": "Вы ўпэўнены, што хочаце выдаліць допіс і перапісаць яго? Упадабанні і пашырэнні згубяцца, а адказы да арыгінальнага допісу асірацеюць.",

View File

@ -1,5 +1,5 @@
{
"about.blocks": "Administritaj serviloj",
"about.blocks": "Reguligitaj serviloj",
"about.contact": "Kontakto:",
"about.disclaimer": "Mastodon estas libera, malfermitkoda programo kaj varmarko de la firmao Mastodon gGmbH.",
"about.domain_blocks.no_reason_available": "Kialo ne disponeblas",
@ -26,7 +26,7 @@
"account.domain_blocked": "Domajno blokita",
"account.edit_profile": "Redakti la profilon",
"account.enable_notifications": "Sciigu min kiam @{name} afiŝos",
"account.endorse": "Rekomendi ĉe via profilo",
"account.endorse": "Prezenti ĉe via profilo",
"account.featured_tags.last_status_at": "Lasta afîŝo je {date}",
"account.featured_tags.last_status_never": "Neniu afiŝo",
"account.featured_tags.title": "Rekomendataj kradvortoj de {name}",
@ -219,8 +219,8 @@
"confirmations.logout.message": "Ĉu vi certas, ke vi volas elsaluti?",
"confirmations.logout.title": "Ĉu elsaluti?",
"confirmations.missing_alt_text.confirm": "Aldoni alttekston",
"confirmations.missing_alt_text.message": "Via afiŝo enhavas amaskomunikilaron sen altteksto. Aldono de priskriboj helpas fari vian enhavon alirebla por pli da homoj.",
"confirmations.missing_alt_text.secondary": "Afiŝu ĉiukaze",
"confirmations.missing_alt_text.message": "Via afiŝo enhavas aŭdvidaĵon sen alternativa teksto. Aldono de priskriboj helpas fari vian enhavon alirebla por pli da homoj.",
"confirmations.missing_alt_text.secondary": "Afiŝi ĉiuokaze",
"confirmations.missing_alt_text.title": "Ĉu aldoni alttekston?",
"confirmations.mute.confirm": "Silentigi",
"confirmations.redraft.confirm": "Forigi kaj reskribi",

View File

@ -35,8 +35,8 @@
"account.followers": "Seuraajat",
"account.followers.empty": "Kukaan ei seuraa tätä käyttäjää vielä.",
"account.followers_counter": "{count, plural, one {{counter} seuraaja} other {{counter} seuraajaa}}",
"account.following": "Seuratut",
"account.following_counter": "{count, plural, one {{counter} seurattu} other {{counter} seurattua}}",
"account.following": "Seurattavat",
"account.following_counter": "{count, plural, one {{counter} seurattava} other {{counter} seurattavaa}}",
"account.follows.empty": "Tämä käyttäjä ei vielä seuraa ketään.",
"account.go_to_profile": "Siirry profiiliin",
"account.hide_reblogs": "Piilota käyttäjän @{name} tehostukset",
@ -260,8 +260,8 @@
"domain_block_modal.they_cant_follow": "Kukaan tältä palvelimelta ei voi seurata sinua.",
"domain_block_modal.they_wont_know": "Hän ei saa tietää tulleensa estetyksi.",
"domain_block_modal.title": "Estetäänkö verkkotunnus?",
"domain_block_modal.you_will_lose_num_followers": "Menetät {followersCount, plural, one {{followersCountDisplay} seuraajasi} other {{followersCountDisplay} seuraajaasi}} ja {followingCount, plural, one {{followingCountDisplay} seurattusi} other {{followingCountDisplay} seurattuasi}}.",
"domain_block_modal.you_will_lose_relationships": "Menetät kaikki tämän palvelimen seuraajasi ja seurattusi.",
"domain_block_modal.you_will_lose_num_followers": "Menetät {followersCount, plural, one {{followersCountDisplay} seuraajasi} other {{followersCountDisplay} seuraajaasi}} ja {followingCount, plural, one {{followingCountDisplay} seurattavasi} other {{followingCountDisplay} seurattavaasi}}.",
"domain_block_modal.you_will_lose_relationships": "Menetät kaikki tämän palvelimen seuraajasi ja seurattavasi.",
"domain_block_modal.you_wont_see_posts": "Et enää näe julkaisuja etkä ilmoituksia tämän palvelimen käyttäjiltä.",
"domain_pill.activitypub_lets_connect": "Sen avulla voit muodostaa yhteyden ja olla vuorovaikutuksessa ihmisten kanssa, ei vain Mastodonissa vaan myös muissa sosiaalisissa sovelluksissa.",
"domain_pill.activitypub_like_language": "ActivityPub on kuin kieli, jota Mastodon puhuu muiden sosiaalisten verkostojen kanssa.",
@ -365,7 +365,7 @@
"follow_suggestions.similar_to_recently_followed_longer": "Samankaltainen kuin äskettäin seuraamasi profiilit",
"follow_suggestions.view_all": "Näytä kaikki",
"follow_suggestions.who_to_follow": "Ehdotuksia seurattavaksi",
"followed_tags": "Seuratut aihetunnisteet",
"followed_tags": "Seurattavat aihetunnisteet",
"footer.about": "Tietoja",
"footer.directory": "Profiilihakemisto",
"footer.get_app": "Hanki sovellus",
@ -393,10 +393,10 @@
"hashtag.unfollow": "Lopeta aihetunnisteen seuraaminen",
"hashtags.and_other": "…ja {count, plural, other {# lisää}}",
"hints.profiles.followers_may_be_missing": "Tämän profiilin seuraajia saattaa puuttua.",
"hints.profiles.follows_may_be_missing": "Tämän profiilin seurattuja saattaa puuttua.",
"hints.profiles.follows_may_be_missing": "Tämän profiilin seurattavia saattaa puuttua.",
"hints.profiles.posts_may_be_missing": "Tämän profiilin julkaisuja saattaa puuttua.",
"hints.profiles.see_more_followers": "Näytä lisää seuraajia palvelimella {domain}",
"hints.profiles.see_more_follows": "Näytä lisää seurattuja palvelimella {domain}",
"hints.profiles.see_more_follows": "Näytä lisää seurattavia palvelimella {domain}",
"hints.profiles.see_more_posts": "Näytä lisää julkaisuja palvelimella {domain}",
"hints.threads.replies_may_be_missing": "Muiden palvelinten vastauksia saattaa puuttua.",
"hints.threads.see_more": "Näytä lisää vastauksia palvelimella {domain}",
@ -503,7 +503,7 @@
"lists.no_members_yet": "Ei vielä jäseniä.",
"lists.no_results_found": "Tuloksia ei löytynyt.",
"lists.remove_member": "Poista",
"lists.replies_policy.followed": "Jokaiselle seuratulle käyttäjälle",
"lists.replies_policy.followed": "Jokaiselle seurattavalle käyttäjälle",
"lists.replies_policy.list": "Listan jäsenille",
"lists.replies_policy.none": "Ei kellekään",
"lists.save": "Tallenna",
@ -536,8 +536,8 @@
"navigation_bar.favourites": "Suosikit",
"navigation_bar.filters": "Mykistetyt sanat",
"navigation_bar.follow_requests": "Seurantapyynnöt",
"navigation_bar.followed_tags": "Seuratut aihetunnisteet",
"navigation_bar.follows_and_followers": "Seuratut ja seuraajat",
"navigation_bar.followed_tags": "Seurattavat aihetunnisteet",
"navigation_bar.follows_and_followers": "Seurattavat ja seuraajat",
"navigation_bar.lists": "Listat",
"navigation_bar.logout": "Kirjaudu ulos",
"navigation_bar.moderation": "Moderointi",
@ -588,9 +588,9 @@
"notification.reblog.name_and_others_with_link": "{name} ja <a>{count, plural, one {# muu} other {# muuta}}</a> tehostivat julkaisuasi",
"notification.relationships_severance_event": "Menetettiin yhteydet palvelimeen {name}",
"notification.relationships_severance_event.account_suspension": "Palvelimen {from} ylläpitäjä on jäädyttänyt palvelimen {target} vuorovaikutuksen. Enää et voi siis vastaanottaa päivityksiä heiltä tai olla yhteyksissä heidän kanssaan.",
"notification.relationships_severance_event.domain_block": "Palvelimen {from} ylläpitäjä on estänyt palvelimen {target} vuorovaikutuksen mukaan lukien {followersCount} seuraajistasi ja {followingCount, plural, one {# seuratuistasi} other {# seuratuistasi}}.",
"notification.relationships_severance_event.domain_block": "Palvelimen {from} ylläpitäjä on estänyt palvelimen {target} vuorovaikutuksen mukaan lukien {followersCount} seuraajistasi ja {followingCount, plural, one {# seurattavistasi} other {# seurattavistasi}}.",
"notification.relationships_severance_event.learn_more": "Lue lisää",
"notification.relationships_severance_event.user_domain_block": "Olet estänyt verkkotunnuksen {target}, mikä poisti {followersCount} seuraajistasi ja {followingCount, plural, one {# seuratuistasi} other {# seuratuistasi}}.",
"notification.relationships_severance_event.user_domain_block": "Olet estänyt palvelimen {target}, mikä poisti {followersCount} seuraajistasi ja {followingCount, plural, one {# seurattavistasi} other {# seurattavistasi}}.",
"notification.status": "{name} julkaisi juuri",
"notification.update": "{name} muokkasi julkaisua",
"notification_requests.accept": "Hyväksy",

View File

@ -11,13 +11,16 @@
"about.not_available": "Ev zanyarî li ser vê rajekarê nehatine peydakirin.",
"about.powered_by": "Medyaya civakî ya nenavendî bi hêzdariya {mastodon}",
"about.rules": "Rêbazên rajekar",
"account.account_note_header": "Nîşeyên kesane",
"account.add_or_remove_from_list": "Li lîsteyan zêde bike yan jî rake",
"account.badges.bot": "Bot",
"account.badges.group": "Kom",
"account.block": "@{name} asteng bike",
"account.block_domain": "Navpera {domain} asteng bike",
"account.block_short": "Asteng bike",
"account.blocked": "Astengkirî",
"account.cancel_follow_request": "Daxwaza şopandinê vekişîne",
"account.copy": "Girêdanê bo profîlê jê bigire",
"account.direct": "Bi taybetî qale @{name} bike",
"account.disable_notifications": "Êdî min agahdar neke gava @{name} diweşîne",
"account.domain_blocked": "Navper hate astengkirin",
@ -28,9 +31,12 @@
"account.featured_tags.last_status_never": "Şandî tune ne",
"account.featured_tags.title": "{name}'s hashtagên taybet",
"account.follow": "Bişopîne",
"account.follow_back": "Bişopîne",
"account.followers": "Şopîner",
"account.followers.empty": "Kesekî hin ev bikarhêner neşopandiye.",
"account.followers_counter": "{count, plural, one {{counter} şopîner} other {{counter} şopîner}}",
"account.following": "Dişopîne",
"account.following_counter": "{count, plural, one {{counter} dişopîne} other {{counter} dişopîne}}",
"account.follows.empty": "Ev bikarhêner hin kesekî heya niha neşopandiye.",
"account.go_to_profile": "Biçe bo profîlê",
"account.hide_reblogs": "Bilindkirinên ji @{name} veşêre",
@ -43,7 +49,11 @@
"account.mention": "Qal @{name} bike",
"account.moved_to": "{name} diyar kir ku ajimêra nû ya wan niha ev e:",
"account.mute": "@{name} bêdeng bike",
"account.mute_notifications_short": "Agahdariyan bêdeng bike",
"account.mute_short": "Bêdeng bike",
"account.muted": "Bêdengkirî",
"account.mutual": "Hevpar",
"account.no_bio": "Ti danasîn nehatiye tevlîkirin.",
"account.open_original_page": "Rûpela resen veke",
"account.posts": "Şandî",
"account.posts_with_replies": "Şandî û bersiv",
@ -52,12 +62,14 @@
"account.requested_follow": "{name} dixwaze te bişopîne",
"account.share": "Profîla @{name} parve bike",
"account.show_reblogs": "Bilindkirinên ji @{name} nîşan bike",
"account.statuses_counter": "{count, plural,one {{counter} şandî}other {{counter} şandî}}",
"account.unblock": "Astengê li ser @{name} rake",
"account.unblock_domain": "Astengê li ser navperê {domain} rake",
"account.unblock_short": "Astengiyê rake",
"account.unendorse": "Li ser profîl nîşan neke",
"account.unfollow": "Neşopîne",
"account.unmute": "@{name} bêdeng neke",
"account.unmute_notifications_short": "Agahdariyan bêdeng bike",
"account.unmute_short": "Bêdeng neke",
"account_note.placeholder": "Bitikîne bo nîşeyekê tevlî bikî",
"admin.dashboard.daily_retention": "Rêjeya ragirtina bikarhêner bi roj piştî tomarkirinê",
@ -69,9 +81,18 @@
"alert.rate_limited.title": "Rêje sînorkirî ye",
"alert.unexpected.message": "Çewtiyeke bêhêvî çê bû.",
"alert.unexpected.title": "Wey li min!",
"alt_text_modal.cancel": "Têk bibe",
"alt_text_modal.change_thumbnail": "Wêneyê biçûk biguherîne",
"alt_text_modal.done": "Qediya",
"announcement.announcement": "Daxuyanî",
"annual_report.summary.followers.followers": "şopîner",
"annual_report.summary.followers.total": "{count} tevahî",
"annual_report.summary.new_posts.new_posts": "şandiyên nû",
"attachments_list.unprocessed": "(bêpêvajo)",
"audio.hide": "Dengê veşêre",
"block_modal.show_less": "Kêmtir nîşan bide",
"block_modal.show_more": "Bêtir nîşan bide",
"block_modal.title": "Bikarhêner asteng bike?",
"boost_modal.combo": "Ji bo derbas bî carekî din de pêlê {combo} bike",
"bundle_column_error.copy_stacktrace": "Rapora çewtiyê jê bigire",
"bundle_column_error.error.body": "Rûpela xwestî nehate pêşkêşkirin. Dibe ku ew ji ber şaşetiyeke koda me, an jî pirsgirêkeke lihevhatina gerokê be.",
@ -141,10 +162,12 @@
"confirmations.logout.message": "Ma tu dixwazî ku derkevî?",
"confirmations.mute.confirm": "Bêdeng bike",
"confirmations.redraft.confirm": "Jê bibe & ji nû ve serrast bike",
"confirmations.redraft.message": "Bi rastî tu dixwazî şandî ye jê bibî û ji nû ve reşnivîsek çê bikî? Bijarte û şandî wê wenda bibin û bersivên ji bo şandiyê resen wê sêwî bimînin.",
"confirmations.reply.confirm": "Bersivê bide",
"confirmations.reply.message": "Bersiva niha li ser peyama ku tu niha berhev dikî dê binivsîne. Ma pê bawer î ku tu dixwazî bidomînî?",
"confirmations.unfollow.confirm": "Neşopîne",
"confirmations.unfollow.message": "Ma tu dixwazî ku dev ji şopa {name} berdî?",
"content_warning.show_more": "Bêtir nîşan bide",
"conversation.delete": "Axaftinê jê bibe",
"conversation.mark_as_read": "Wekî xwendî nîşan bide",
"conversation.open": "Axaftinê nîşan bide",
@ -158,6 +181,9 @@
"disabled_account_banner.text": "Ajimêrê te {disabledAccount} niha neçalak e.",
"dismissable_banner.community_timeline": "Ev şandiyên giştî yên herî dawî ji kesên ku ajimêrê wan ji aliyê {domain} ve têne pêşkêşkirin.",
"dismissable_banner.dismiss": "Paşguh bike",
"domain_block_modal.block": "Rajekar asteng bike",
"domain_pill.server": "Rajekar",
"domain_pill.username": "Navê bikarhêner",
"embed.instructions": "Bi jêgirtina koda jêrîn vê şandiyê li ser malpera xwe bi cih bike.",
"embed.preview": "Ew ê çawa xuya bibe li vir tê nîşandan:",
"emoji_button.activity": "Çalakî",

View File

@ -250,9 +250,27 @@
"disabled_account_banner.text": "Lí ê口座 {disabledAccount} tsit-má hōo lâng停止使用。",
"dismissable_banner.community_timeline": "Tsia sī uì 口座hē tī {domain} ê lâng最近所公開PO ê。",
"dismissable_banner.dismiss": "Mài kā tshah",
"dismissable_banner.explore_links": "Tsiah ê新聞故事是kín-á日tī Fediverse hōo lâng分享上tsē pái ê。Hōo koh khah tsē lâng 分享ê khah新ê新聞故事名次koh khah kuân。",
"dismissable_banner.explore_statuses": "Tsiah ê tuì Fediverse來ê PO文kín-á日有真tsē關注。Khah新ê有khah tsē轉送kap收藏ê名次koh khah kuân。",
"dismissable_banner.explore_tags": "Tsiah ê hashtag kín-á日tī Fediverse 有真tsē關注。Khah tsē無kâng ê lâng leh用ê hashtag名次koh khah kuân。",
"dismissable_banner.public_timeline": "Tsiah ê是 {domain} 內底ê lâng 佇 Fediverse所跟tuè ê ê上新ê公開PO文。.",
"domain_block_modal.block": "封鎖服侍器",
"domain_block_modal.block_account_instead": "改做封鎖 @{name}",
"domain_block_modal.they_can_interact_with_old_posts": "Uì tsit ê服侍器來ê通kap lí khah早ê PO交流。",
"domain_block_modal.they_cant_follow": "Tuì tsit ê服侍器來ê 通跟tuè lí。",
"domain_block_modal.they_wont_know": "In buē知影in受封鎖。",
"domain_block_modal.title": "Kám beh封鎖域名",
"domain_block_modal.you_will_lose_num_followers": "Lí ē失去 {followersCount, plural, other {{followersCountDisplay} ê lâng跟tuè}} kap {followingCount, plural, other {{followingCountDisplay} ê lí所tuè ê 口座}}。",
"domain_block_modal.you_will_lose_relationships": "Lí ē失去逐ê佇tsit ê服侍器跟tuè lí êkap lí所跟tuè ê。",
"domain_block_modal.you_wont_see_posts": "Lí buē看見tsit ê服侍器ê用者所送ê PO文kap通知。",
"domain_pill.activitypub_lets_connect": "伊ē hōo lí kap Mastodon ê lâng連結kap互動其他社交應用程式ê lâng mā ē使。",
"domain_pill.activitypub_like_language": "ActivityPub親像Mastodon kap其他社交應用程式所講ê語言。",
"domain_pill.server": "服侍器",
"domain_pill.their_handle": "In ê口座:",
"domain_pill.their_server": "In數位ê tauin所有ê PO文lóng tī tsia。",
"domain_pill.their_username": "In佇tsit ê服侍器獨一ê稱呼。佇無kâng ê服侍器有可能tshuē著kāng名ê用者。",
"domain_pill.username": "用者ê名",
"domain_pill.whats_in_a_handle": "口座是siánn-mih",
"embed.preview": "伊e án-ne顯示\n",
"emoji_button.activity": "活動",
"emoji_button.clear": "清掉",
@ -273,6 +291,52 @@
"empty_column.account_suspended": "口座已經受停止",
"empty_column.account_timeline": "Tsia無PO文",
"empty_column.account_unavailable": "個人資料bē當看",
"errors.unexpected_crash.copy_stacktrace": "Khóo-pih stacktrace kàu剪貼pang-á",
"errors.unexpected_crash.report_issue": "報告問題",
"explore.suggested_follows": "用者",
"explore.title": "探索",
"explore.trending_links": "新聞",
"firehose.remote": "別ê服侍器",
"follow_request.authorize": "授權",
"follow_request.reject": "拒絕",
"follow_requests.unlocked_explanation": "就算lí ê口座無hőng鎖{domain} ê管理員leh想lí可能beh手動審查tuì tsiah ê口座送ê跟tuè請求。",
"follow_suggestions.curated_suggestion": "精選ê內容",
"follow_suggestions.dismiss": "Mài koh顯示。",
"follow_suggestions.featured_longer": "{domain} 團隊所揀ê",
"follow_suggestions.friends_of_friends_longer": "時行佇lí所tuè ê lâng",
"follow_suggestions.personalized_suggestion": "個人化ê推薦",
"follow_suggestions.popular_suggestion": "流行ê推薦",
"follow_suggestions.popular_suggestion_longer": "佇{domain} 足有lâng緣",
"follow_suggestions.similar_to_recently_followed_longer": "Kap lí最近跟tuè ê相siâng",
"follow_suggestions.view_all": "看全部",
"follow_suggestions.who_to_follow": "Thang tuè ê",
"followed_tags": "跟tuè ê hashtag",
"footer.about": "概要",
"footer.directory": "個人資料ê目錄",
"footer.get_app": "The̍h著app",
"footer.keyboard_shortcuts": "鍵盤kiu-té khí (shortcut)",
"footer.privacy_policy": "隱私權政策",
"footer.source_code": "看原始碼",
"footer.status": "狀態",
"footer.terms_of_service": "服務規定",
"generic.saved": "儲存ah",
"getting_started.heading": "開始用",
"hashtag.admin_moderation": "Phah開 #{name} ê管理界面",
"hashtag.column_header.tag_mode.all": "kap {additional}",
"hashtag.column_header.tag_mode.any": "á是 {additional}",
"hashtag.column_header.tag_mode.none": "無需要 {additional}",
"hashtag.column_settings.select.no_options_message": "Tshuē無建議",
"hashtag.column_settings.select.placeholder": "請輸入hashtag……",
"hashtag.column_settings.tag_mode.all": "Kui ê",
"hashtag.column_settings.tag_mode.any": "任何tsi̍t ê",
"hashtag.column_settings.tag_mode.none": "Lóng mài",
"hashtag.column_settings.tag_toggle": "Kā追加ê標籤加添kàu tsit ê欄",
"hashtag.counter_by_accounts": "{count, plural, one {{counter} ê} other {{counter} ê}}參與ê",
"hashtag.counter_by_uses": "{count, plural, one {{counter} ê} other {{counter} ê}} PO文",
"hashtag.counter_by_uses_today": "Kin-á日有 {count, plural, one {{counter} ê} other {{counter} ê}} PO文",
"hashtag.follow": "跟tuè hashtag",
"hashtag.unfollow": "取消跟tuè hashtag",
"hashtags.and_other": "……kap 其他 {count, plural, other {# ê}}",
"notification.favourite_pm": "{name} kah意lí ê私人提起",
"notification.favourite_pm.name_and_others_with_link": "{name} kap<a>{count, plural, other {另外 # ê lâng}}</a>kah意lí ê私人提起",
"search_popout.language_code": "ISO語言代碼",

File diff suppressed because it is too large Load Diff

View File

@ -219,6 +219,9 @@
"confirmations.logout.message": "Är du säker på att du vill logga ut?",
"confirmations.logout.title": "Logga ut?",
"confirmations.missing_alt_text.confirm": "Lägg till alt-text",
"confirmations.missing_alt_text.message": "Ditt inlägg innehåller media utan alt-text. Om du lägger till beskrivningar blir ditt innehåll tillgängligt för fler personer.",
"confirmations.missing_alt_text.secondary": "Posta ändå",
"confirmations.missing_alt_text.title": "Lägg till alt-text?",
"confirmations.mute.confirm": "Tysta",
"confirmations.redraft.confirm": "Radera & gör om",
"confirmations.redraft.message": "Är du säker på att du vill radera detta inlägg och göra om det? Favoritmarkeringar, boostar och svar till det ursprungliga inlägget kommer förlora sitt sammanhang.",
@ -416,6 +419,7 @@
"ignore_notifications_modal.not_following_title": "Vill du blockera aviseringar från personer som du inte följer dig?",
"ignore_notifications_modal.private_mentions_title": "Vill du ignorera aviseringar från oombedda privata omnämnanden?",
"info_button.label": "Hjälp",
"info_button.what_is_alt_text": "<h1>Vad är alt-text?</h1> <p>alt-text ger bildbeskrivningar för personer med synnedsättning, anslutningar med låg bandbredd eller de som söker extra sammanhang.</p> <p>Du kan förbättra tillgängligheten och förståelsen för alla genom att skriva en tydlig, koncis och objektiv alt-text.</p> <ul> <li>Fånga viktiga element</li> <li>Sammanfatta text i bilder</li> <li>Använd vanlig meningsstruktur</li> <li>Undvik överflödig information</li> <li>Fokus på trender och viktiga resultat i komplexa bilder (som diagram eller kartor)</li> </ul>",
"interaction_modal.action.favourite": "För att fortsätta, måste du favoritmarkera från ditt konto.",
"interaction_modal.action.follow": "För att fortsätta, måste du följa från ditt konto.",
"interaction_modal.action.reblog": "För att fortsätta, måste du boosta från ditt konto.",

View File

@ -86,6 +86,13 @@
"alert.unexpected.message": "เกิดข้อผิดพลาดที่ไม่คาดคิด",
"alert.unexpected.title": "อุปส์!",
"alt_text_badge.title": "ข้อความแสดงแทน",
"alt_text_modal.add_alt_text": "เพิ่มข้อความแสดงแทน",
"alt_text_modal.add_text_from_image": "เพิ่มข้อความจากภาพ",
"alt_text_modal.cancel": "ยกเลิก",
"alt_text_modal.change_thumbnail": "เปลี่ยนภาพขนาดย่อ",
"alt_text_modal.describe_for_people_with_hearing_impairments": "อธิบายสิ่งนี้สำหรับผู้คนที่มีความบกพร่องทางการได้ยิน…",
"alt_text_modal.describe_for_people_with_visual_impairments": "อธิบายสิ่งนี้สำหรับผู้คนที่มีความบกพร่องทางการมองเห็น…",
"alt_text_modal.done": "เสร็จสิ้น",
"announcement.announcement": "ประกาศ",
"annual_report.summary.archetype.booster": "ผู้ล่าความเจ๋ง",
"annual_report.summary.archetype.lurker": "ผู้ซุ่มอ่านข่าว",
@ -208,6 +215,10 @@
"confirmations.logout.confirm": "ออกจากระบบ",
"confirmations.logout.message": "คุณแน่ใจหรือไม่ว่าต้องการออกจากระบบ?",
"confirmations.logout.title": "ออกจากระบบ?",
"confirmations.missing_alt_text.confirm": "เพิ่มข้อความแสดงแทน",
"confirmations.missing_alt_text.message": "โพสต์ของคุณมีสื่อที่ไม่มีข้อความแสดงแทน การเพิ่มคำอธิบายช่วยทำให้เนื้อหาของคุณเข้าถึงผู้คนได้มากขึ้น",
"confirmations.missing_alt_text.secondary": "โพสต์ต่อไป",
"confirmations.missing_alt_text.title": "เพิ่มข้อความแสดงแทน?",
"confirmations.mute.confirm": "ซ่อน",
"confirmations.redraft.confirm": "ลบแล้วร่างใหม่",
"confirmations.redraft.message": "คุณแน่ใจหรือไม่ว่าต้องการลบโพสต์นี้แล้วร่างโพสต์ใหม่? รายการโปรดและการดันจะสูญหาย และการตอบกลับโพสต์ดั้งเดิมจะไม่มีความเกี่ยวพัน",
@ -400,6 +411,7 @@
"ignore_notifications_modal.not_followers_title": "เพิกเฉยการแจ้งเตือนจากผู้คนที่ไม่ได้ติดตามคุณ?",
"ignore_notifications_modal.not_following_title": "เพิกเฉยการแจ้งเตือนจากผู้คนที่คุณไม่ได้ติดตาม?",
"ignore_notifications_modal.private_mentions_title": "เพิกเฉยการแจ้งเตือนจากการกล่าวถึงแบบส่วนตัวที่ไม่พึงประสงค์?",
"info_button.label": "ช่วยเหลือ",
"interaction_modal.action.favourite": "เพื่อดำเนินการต่อ คุณจำเป็นต้องชื่นชอบจากบัญชีของคุณ",
"interaction_modal.action.follow": "เพื่อดำเนินการต่อ คุณจำเป็นต้องติดตามจากบัญชีของคุณ",
"interaction_modal.action.reblog": "เพื่อดำเนินการต่อ คุณจำเป็นต้องดันจากบัญชีของคุณ",

View File

@ -148,7 +148,7 @@
"column.bookmarks": "Yer İşaretleri",
"column.community": "Yerel ağ akışı",
"column.create_list": "Liste oluştur",
"column.direct": "Özel değinmeler",
"column.direct": "Özel mesajlar",
"column.directory": "Profillere göz at",
"column.domain_blocks": "Engellenen alan adları",
"column.edit_list": "Listeyi düzenle",
@ -444,7 +444,7 @@
"keyboard_shortcuts.column": "Sütunlardan birindeki duruma odaklanmak için",
"keyboard_shortcuts.compose": "Yazma alanına odaklanmak için",
"keyboard_shortcuts.description": "Açıklama",
"keyboard_shortcuts.direct": "özel değinmeler sütununu açmak için",
"keyboard_shortcuts.direct": "özel mesajlar sütununu açmak için",
"keyboard_shortcuts.down": "Listede aşağıya inmek için",
"keyboard_shortcuts.enter": "Gönderiyi açınız",
"keyboard_shortcuts.favourite": "Gönderiyi favorilerine ekle",
@ -529,7 +529,7 @@
"navigation_bar.bookmarks": "Yer İşaretleri",
"navigation_bar.community_timeline": "Yerel ağ akışı",
"navigation_bar.compose": "Yeni gönderi yaz",
"navigation_bar.direct": "Özel değinmeler",
"navigation_bar.direct": "Özel mesajlar",
"navigation_bar.discover": "Keşfet",
"navigation_bar.domain_blocks": "Engellenen alan adları",
"navigation_bar.explore": "Keşfet",
@ -662,10 +662,10 @@
"notifications.policy.filter_not_following_hint": "Onları manuel olarak onaylayana kadar",
"notifications.policy.filter_not_following_title": "Takip etmediğin kullanıcılar",
"notifications.policy.filter_private_mentions_hint": "Kendi değinmenize yanıt veya takip ettiğiniz kullanıcıdan değilse filtrelenir",
"notifications.policy.filter_private_mentions_title": "İstenmeyen özel değinmeler",
"notifications.policy.filter_private_mentions_title": "İstenmeyen özel mesajlar",
"notifications.policy.title": "Şundan bildirimleri yönet…",
"notifications_permission_banner.enable": "Masaüstü bildirimlerini etkinleştir",
"notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra yukarıdaki {icon} düğmesini kullanarak hangi etkileşim türlerinin masaüstü bildirimleri oluşturduğunu tam olarak kontrol edebilirsiniz.",
"notifications_permission_banner.how_to_control": "Mastodon açık olmadığında bildirim almak için masaüstü bildirimlerini etkinleştirin. Etkinleştirildikten sonra, yukarıdaki{icon} düğmesi aracılığıyla hangi etkileşim türlerinin masaüstü bildirimi oluşturacağını tam olarak kontrol edebilirsiniz.",
"notifications_permission_banner.title": "Hiçbir şeyi kaçırmayın",
"onboarding.follows.back": "Geri",
"onboarding.follows.done": "Tamamlandı",

View File

@ -78,8 +78,8 @@
"admin.dashboard.retention.cohort": "注册月份",
"admin.dashboard.retention.cohort_size": "新用户",
"admin.impact_report.instance_accounts": "将被删除的账号",
"admin.impact_report.instance_followers": "本实例用户即将丢失的关注者",
"admin.impact_report.instance_follows": "对方实例用户将会丢失的关注者",
"admin.impact_report.instance_followers": "本用户即将丢失的关注者",
"admin.impact_report.instance_follows": "对方站点用户即将丢失的关注者",
"admin.impact_report.title": "影响摘要",
"alert.rate_limited.message": "请在 {retry_time, time, medium} 后重试。",
"alert.rate_limited.title": "频率受限",
@ -219,7 +219,7 @@
"confirmations.logout.message": "确定要退出登录吗?",
"confirmations.logout.title": "确定要退出登录?",
"confirmations.missing_alt_text.confirm": "添加替代文本",
"confirmations.missing_alt_text.message": "您的帖子包含没有添加替代文本的媒体。添加描述有助于使更多人访问您的内容。",
"confirmations.missing_alt_text.message": "你的帖子包含没有替代文本的媒体。添加描述有助于使更多用户理解你的内容。",
"confirmations.missing_alt_text.secondary": "就这样发布",
"confirmations.missing_alt_text.title": "添加替代文本?",
"confirmations.mute.confirm": "隐藏",
@ -298,7 +298,7 @@
"empty_column.account_timeline": "这里没有嘟文!",
"empty_column.account_unavailable": "个人资料不可用",
"empty_column.blocks": "你还未屏蔽任何用户。",
"empty_column.bookmarked_statuses": "你还没有收藏任何嘟文。收藏后嘟文就会显示在这里。",
"empty_column.bookmarked_statuses": "你还没有给任何嘟文添加书签。添加书签后的嘟文会显示在这里。",
"empty_column.community": "本站时间线还没有内容,写点什么并公开发布,让它活跃起来吧!",
"empty_column.direct": "你还未使用过私下提及。当你发出或者收到私下提及时,它将显示在此。",
"empty_column.domain_blocks": "暂且没有被屏蔽的站点。",
@ -813,7 +813,7 @@
"status.admin_domain": "打开 {domain} 的管理界面",
"status.admin_status": "在管理界面查看此嘟文",
"status.block": "屏蔽 @{name}",
"status.bookmark": "收藏",
"status.bookmark": "添加到书签",
"status.cancel_reblog_private": "取消转嘟",
"status.cannot_reblog": "不能转嘟这条嘟文",
"status.continued_thread": "上接嘟文串",
@ -849,7 +849,7 @@
"status.reblogs": "{count, plural, other {次转嘟}}",
"status.reblogs.empty": "没有人转嘟过此条嘟文。如果有人转嘟了,就会显示在这里。",
"status.redraft": "删除并重新编辑",
"status.remove_bookmark": "取消收藏",
"status.remove_bookmark": "移除书签",
"status.remove_favourite": "从喜欢列表中移除",
"status.replied_in_thread": "回复嘟文串",
"status.replied_to": "回复 {name}",

View File

@ -260,7 +260,7 @@ class Request
outer_e = nil
port = args.first
addresses = [] # rubocop:disable Lint/UselessAssignment # TODO: https://github.com/rubocop/rubocop/issues/13395
addresses = [] # rubocop:disable Lint/UselessAssignment -- TODO: https://github.com/rubocop/rubocop/issues/13395
begin
addresses = [IPAddr.new(host)]
rescue IPAddr::InvalidAddressError

View File

@ -6,6 +6,8 @@ class BackupService < BaseService
include Payloadable
include ContextHelper
CHUNK_SIZE = 1.megabyte
attr_reader :account, :backup
def call(backup)
@ -182,8 +184,6 @@ class BackupService < BaseService
).as_json
end
CHUNK_SIZE = 1.megabyte
def download_to_zip(zipfile, attachment, filename)
adapter = Paperclip.io_adapters.for(attachment)

View File

@ -3,7 +3,7 @@
WebAuthn.configure do |config|
# This value needs to match `window.location.origin` evaluated by
# the User Agent during registration and authentication ceremonies.
config.origin = "#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}"
config.allowed_origins = ["#{Rails.configuration.x.use_https ? 'https' : 'http'}://#{Rails.configuration.x.web_domain}"]
# Relying Party name for display purposes
config.rp_name = 'Mastodon'

View File

@ -44,7 +44,7 @@ fi:
attributes:
account_id:
taken: on jo listassa
must_be_following: on oltava seurattu tili
must_be_following: on oltava seurattava tili
status:
attributes:
reblog:

View File

@ -1 +1,46 @@
---
az:
devise:
confirmations:
confirmed: E-poçt ünvanınız uğurla təsdiqləndi.
send_instructions: Bir neçə dəqiqə ərzində e-poçt ünvanınızı necə təsdiqləyəcəyinizə dair təlimatları olan bir e-məktub alacaqsınız. Bu e-məktubu almamısınızsa, spam qovluğunuzu yoxlayın.
send_paranoid_instructions: E-poçt ünvanınız verilənlər bazamızda varsa, bir neçə dəqiqədən sonra e-poçt ünvanınızı necə təsdiqləyəcəyinizə dair təlimatları olan bir e-məktub alacaqsınız. Bu e-məktubu almamısınızsa, spam qovluğunuzu yoxlayın.
failure:
already_authenticated: Siz artıq daxil olmusunuz.
inactive: Hesabınız hələ aktivləşdirilməyib.
invalid: Səhv %{authentication_keys} və ya parol.
last_attempt: Hesabınız blok olmamışdan əvvəl bir dəfə də cəhdiniz var.
locked: Hesabınız bloklandı.
not_found_in_database: Səhv %{authentication_keys} və ya parol.
omniauth_user_creation_failure: Bu kimlik üçün hesab yaradarkən xəta.
pending: Hesabınız hələ yoxlanışdadır.
timeout: Sessiyanın vaxtı bitdi. Xahiş edirik davam etmək üçün yenidən daxil olun.
unauthenticated: Davam etmək üçün daxil olmaq və ya qeydiyyatdan keçmək lazımdır.
unconfirmed: Davam etmək üçün e-poçt ünvanınızı təsdiqləməlisiniz.
mailer:
confirmation_instructions:
action: E-poçt ünvanını təsdiqlə
action_with_app: Təsdiqlə və %{app}-a geri qayıt
explanation: Siz %{host} saytında bu e-poçt ilə hesab yaratmısınız. Onu aktivləşdirməkdən bir klik uzaqlıqdasınız. Əgər bu siz olmamısınızsa, zəhmət olmasa, bu e-məktuba məhəl qoymayın.
explanation_when_pending: Bu e-poçt ünvanı ilə %{host} saytına dəvət üçün müraciət etmisiniz. Siz e-poçt ünvanınızı təsdiqlədikdən sonra müraciətinizi nəzərdən keçirəcəyik. Siz məlumatlarınızı dəyişdirmək və ya hesabınızı silmək üçün daxil ola bilərsiniz, lakin hesabınız təsdiqlənənə qədər əksər funksiyaları istifadə edə bilməzsiniz. Müraciətiniz rədd edilərsə, məlumatlarınız silinəcək, buna görə də sizdən heç bir tədbir tələb olunmayacaq. Əgər bu siz deyildinizsə, zəhmət, bu e-məktuba məhəl qoymayın.
extra_html: Həmçinin zəhmət olmasa, <a href="%{terms_path}">serverin qaydalarını</a> və <a href="%{policy_path}">istifadə şərtlərini</a> oxuyun.
subject: 'Mastodon: %{instance} üçün təsdiqlənmə təlimatları'
title: E-poçt ünvanını təsdiqlə
email_changed:
explanation: 'Hesabınız üçün e-poçt ünvanı buna dəyişdirilir:'
extra: E-poçtunuzu dəyişməmisinizsə, çox güman ki, kimsə hesabınıza giriş əldə edib. Zəhmət olmasa, parolunuzu dərhal dəyişdirin və ya hesabınıza daxil ola bilməyəcəksinizsə, server admini ilə əlaqə saxlayın.
subject: 'Mastodon: E-poçt dəyişdirildi'
title: Yeni e-poçt ünvanı
password_change:
explanation: Hesabınızın parolu dəyişdirilib.
extra: Parolunuzu dəyişməmisinizsə, çox güman ki, kimsə hesabınıza giriş əldə edib. Zəhmət olmasa, parolunuzu dərhal dəyişdirin və ya hesabınıza daxil ola bilməyəcəksinizsə, server admini ilə əlaqə saxlayın.
subject: 'Mastodon: Parol dəyişdirildi'
title: Parol dəyişdirildi
reconfirmation_instructions:
explanation: E-poçtunuzu dəyişdirmək üçün yeni ünvanı təsdiqləyin.
extra: Əgər bu dəyişiklik sizin tərəfinizdən deyilsə, zəhmət olmasa, bu e-məktuba məhəl qoymayın. Siz yuxarıdakı linkə daxil olana qədər Mastodon hesabının e-poçt ünvanı dəyişməyəcək.
subject: 'Mastodon: %{instance} üçün e-poçtu təsdiqlə'
title: E-poçt ünvanını təsdiqlə
reset_password_instructions:
action: Parolu dəyiş
explanation: Siz hesabınız üçün yeni parol tələb etmisiniz.

View File

@ -130,8 +130,8 @@ fi:
crypto: Päästä päähän -salaus
favourites: Suosikit
filters: Suodattimet
follow: Seuratut, mykistykset ja estot
follows: Seuratut
follow: Seurattavat, mykistykset ja estot
follows: Seurattavat
lists: Listat
media: Medialiitteet
mutes: Mykistykset
@ -175,7 +175,7 @@ fi:
read:bookmarks: katso kirjanmerkkejäsi
read:favourites: katso suosikkejasi
read:filters: katso suodattimiasi
read:follows: katso seurattujasi
read:follows: katso seurattaviasi
read:lists: katso listojasi
read:mutes: katso mykistyksiäsi
read:notifications: katso ilmoituksiasi

View File

@ -185,7 +185,7 @@ zh-CN:
write: 修改你的账号数据
write:accounts: 修改你的个人资料
write:blocks: 屏蔽账号与站点
write:bookmarks: 收藏嘟文
write:bookmarks: 将嘟文加入书签
write:conversations: 静音并删除会话
write:favourites: 喜欢嘟文
write:filters: 创建过滤规则

View File

@ -10,7 +10,7 @@ fi:
followers:
one: seuraaja
other: seuraajaa
following: seurattu(a)
following: Seurattavat
instance_actor_flash: Tämä tili on virtuaalinen toimija, jota käytetään edustamaan itse palvelinta eikä yksittäistä käyttäjää. Sitä käytetään federointitarkoituksiin, eikä sitä tule jäädyttää.
last_active: viimeksi aktiivinen
link_verified_on: Tämän linkin omistus on tarkastettu %{date}
@ -74,7 +74,7 @@ fi:
enabled: Käytössä
enabled_msg: Käyttäjän %{username} tilin jäädytys kumottiin onnistuneesti
followers: Seuraajat
follows: Seuratut
follows: Seurattavat
header: Otsakekuva
inbox_url: Postilaatikon osoite
invite_request_text: Syitä liittymiseen
@ -1466,18 +1466,18 @@ fi:
blocking: Tuodaan estettyjä tilejä
bookmarks: Tuodaan kirjanmerkkejä
domain_blocking: Tuodaan estettyjä verkkotunnuksia
following: Tuodaan seurattuja tilejä
following: Tuodaan seurattavia tilejä
lists: Tuodaan listoja
muting: Tuodaan mykistettyjä tilejä
type: Tuontityyppi
type_groups:
constructive: Seuratut ja kirjanmerkit
constructive: Seurattavat ja kirjanmerkit
destructive: Estot ja mykistykset
types:
blocking: Estoluettelo
bookmarks: Kirjanmerkit
domain_blocking: Verkkotunnusten estoluettelo
following: Seurattujen luettelo
following: Seurattavien luettelo
lists: Listat
muting: Mykistysluettelo
upload: Lähetä
@ -1683,7 +1683,7 @@ fi:
follow_failure: Joitain valittuja tilejä ei voitu seurata.
follow_selected_followers: Seuraa valittuja seuraajia
followers: Seuraajat
following: Seuratut
following: Seurattavat
invited: Kutsutut
last_active: Viimeksi aktiivinen
most_recent: Tuorein
@ -1776,7 +1776,7 @@ fi:
notifications: Sähköposti-ilmoitukset
preferences: Asetukset
profile: Julkinen profiili
relationships: Seuratut ja seuraajat
relationships: Seurattavat ja seuraajat
severed_relationships: Katkenneet suhteet
statuses_cleanup: Julkaisujen automaattipoisto
strikes: Moderointivaroitukset
@ -1789,8 +1789,8 @@ fi:
domain_block: Palvelimen jäädytys (%{target_name})
user_domain_block: Estit käyttäjän %{target_name}
lost_followers: Menetetyt seuraajat
lost_follows: Menetetyt seuratut
preamble: Voit menettää seurattusi ja seuraajasi, kun estät verkkotunnuksen tai kun moderaattorisi päättävät jäädyttää etäpalvelimen. Kun näin tapahtuu, voit ladata luetteloita katkenneista seurantasuhteista, jotta voit tarkastella niitä ja mahdollisesti viedä ne toiselle palvelimelle.
lost_follows: Menetetyt seurattavat
preamble: Voit menettää seurattavasi ja seuraajasi, kun estät verkkotunnuksen tai kun moderaattorisi päättävät jäädyttää etäpalvelimen. Kun näin tapahtuu, voit ladata luetteloita katkenneista seurantasuhteista, jotta voit tarkastella niitä ja mahdollisesti viedä ne toiselle palvelimelle.
purged: Palvelimesi ylläpitäjät ovat tyhjentäneet tämän palvelimen tiedot.
type: Tapahtuma
statuses:

View File

@ -194,7 +194,7 @@ ko:
destroy_domain_allow: 도메인 허용 삭제
destroy_domain_block: 도메인 차단 삭제
destroy_email_domain_block: 이메일 도메인 차단 삭제
destroy_instance: 도메인 퍼지하기
destroy_instance: 도메인 제거
destroy_ip_block: IP 규칙 삭제
destroy_relay: 릴레이 삭제
destroy_status: 게시물 삭제
@ -536,7 +536,7 @@ ko:
title: 중재
private_comment: 비공개 주석
public_comment: 공개 주석
purge: 퍼지
purge: 제거
purge_description_html: 이 도메인이 영구적으로 오프라인 상태라고 생각되면, 스토리지에서 이 도메인의 모든 계정 레코드와 관련 데이터를 삭제할 수 있습니다. 이 작업은 시간이 좀 걸릴 수 있습니다.
title: 연합
total_blocked_by_us: 우리에게 차단 됨
@ -1754,7 +1754,7 @@ ko:
lost_followers: 잃은 팔로워
lost_follows: 잃은 팔로우
preamble: 내가 도메인을 차단하거나 중재진이 다른 서버를 정지하기로 결정했다면 내 팔로우와 팔로워를 잃게 됩니다. 그런 일이 일어났다면 그로 인해 단절된 관계들의 목록을 다운로드 받아 확인하고 다른 서버에서 불러올 수 있습니다.
purged: 이 서버의 정보는 관리자가 퍼지하였습니다.
purged: 이 서버에 대한 정보는 관리자에 의해 제거되었습니다.
type: 이벤트
statuses:
attached:

View File

@ -56,7 +56,7 @@ eo:
scopes: Kiujn API-ojn la aplikaĵo permesiĝos atingi. Se vi elektas supran amplekson, vi ne bezonas elekti la individuajn.
setting_aggregate_reblogs: Ne montri novajn plusendojn de mesaĝoj lastatempe plusenditaj (nur efikas al nove ricevitaj plusendoj)
setting_always_send_emails: Normale, la sciigoj per retpoŝto ne estos senditaj kiam vi uzas Mastodon aktive
setting_default_sensitive: Tiklaj vidaŭdaĵoj estas implicite kaŝitaj, kaj povas esti montritaj per klako
setting_default_sensitive: Tiklaj vidaŭdaĵoj estas implicite kaŝitaj kaj povas esti montritaj per alklako
setting_display_media_default: Kaŝi plurmediojn markitajn kiel tiklaj
setting_display_media_hide_all: Ĉiam kaŝi la vidaŭdaĵojn
setting_display_media_show_all: Ĉiam montri la vidaŭdaĵojn

View File

@ -9,7 +9,7 @@ fi:
fields: Verkkosivustosi, pronominisi, ikäsi ja mitä ikinä haluatkaan ilmoittaa.
indexable: Julkiset julkaisusi voivat näkyä Mastodonin hakutuloksissa. Käyttäjät, jotka ovat olleet vuorovaikutuksessa julkaisujesi kanssa, voivat etsiä niitä asetuksesta riippumatta.
note: 'Voit @mainita muita käyttäjiä tai #aihetunnisteita.'
show_collections: Käyttäjät voivat selata seurattujasi ja seuraajiasi. Käyttäjät, joita seuraat, näkevät joka tapauksessa, että seuraat heitä.
show_collections: Käyttäjät voivat selata seurattaviasi ja seuraajiasi. Käyttäjät, joita seuraat, näkevät joka tapauksessa, että seuraat heitä.
unlocked: Käyttäjät voivat seurata sinua pyytämättä hyväksyntääsi. Poista valinta, jos haluat tarkistaa sekä hyväksyä tai hylätä vastaanottamasi seurantapyynnöt.
account_alias:
acct: Määrittele sen tilin käyttäjänimi@verkkotunnus, josta haluat muuttaa
@ -162,7 +162,7 @@ fi:
name: Nimike
value: Sisältö
indexable: Sisällytä julkiset julkaisut hakutuloksiin
show_collections: Näytä seuratut ja seuraajat profiilissa
show_collections: Näytä seurattavat ja seuraajat profiilissa
unlocked: Hyväksy uudet seuraajat automaattisesti
account_alias:
acct: Vanhan tilin käyttäjätunnus

View File

@ -7,7 +7,7 @@ pl:
discoverable: Twój profil i publiczne wpisy mogą być promowane lub polecane na Mastodonie i twój profil może być sugerowany innym użytkownikom.
display_name: Twoje imię lub pseudonim.
fields: Co ci się tylko podoba twoja strona domowa, zaimki, wiek…
indexable: Twoje publiczne wpisy mogą pojawiać się w wynikach wyszukiwania w Mastodonie. Użytkownicy, którzy wchodzili w interakcje z twoimi wpisami będą mogli je znaleźć niezależnie od tego ustawienia.
indexable: Twoje publiczne wpisy mogą pojawiać się w wynikach wyszukiwania w Mastodonie. Użytkownicy, którzy reagowali na Twoje wpisy, będą mogli je znaleźć niezależnie od tego ustawienia.
note: 'Możesz @wspomnieć użytkowników albo #hasztagi.'
show_collections: Twoja lista obserwowanych i obserwujących będzie widoczna dla wszystkich. Użytkownicy których obserwujesz będą jednak o tym wiedzieli.
unlocked: Inni użytkownicy będą mogli cię obserwować bez proszenia o zgodę. Odznacz, jeżeli chcesz aprobować obserwujących ręcznie po przejrzeniu próśb o obserwowanie.

View File

@ -3,6 +3,7 @@ sv:
simple_form:
hints:
account:
attribution_domains: En per rad. Skyddar mot falska attributioner.
discoverable: Dina offentliga inlägg och din profil kan komma att presenteras eller rekommenderas inom olika områden av Mastodon och din profil kan komma att föreslås till andra användare.
display_name: Ditt fullständiga namn eller ditt roliga namn.
fields: Din hemsida, ditt pronomen, din ålder, vadhelst du vill.

View File

@ -3,6 +3,7 @@ th:
simple_form:
hints:
account:
attribution_domains: หนึ่งรายการต่อบรรทัด ปกป้องจากการระบุแหล่งที่มาที่ผิด
discoverable: อาจแสดงหรือแนะนำโพสต์และโปรไฟล์สาธารณะของคุณในพื้นที่ต่าง ๆ ของ Mastodon และอาจเสนอแนะโปรไฟล์ของคุณให้กับผู้ใช้อื่น ๆ
display_name: ชื่อเต็มของคุณหรือชื่อแบบสนุกสนานของคุณ
fields: หน้าแรก, สรรพนาม, อายุของคุณ สิ่งใดก็ตามที่คุณต้องการ
@ -143,6 +144,7 @@ th:
url: ที่ซึ่งจะส่งเหตุการณ์ไปยัง
labels:
account:
attribution_domains: เว็บไซต์ที่ได้รับอนุญาตให้ให้เครดิตคุณ
discoverable: แสดงโปรไฟล์และโพสต์ในอัลกอริทึมการค้นพบ
fields:
name: ป้ายชื่อ
@ -219,6 +221,7 @@ th:
setting_display_media_show_all: แสดงทั้งหมด
setting_expand_spoilers: ขยายโพสต์ที่มีการทำเครื่องหมายด้วยคำเตือนเนื้อหาเสมอ
setting_hide_network: ซ่อนกราฟทางสังคมของคุณ
setting_missing_alt_text_modal: แสดงกล่องโต้ตอบการยืนยันก่อนที่จะโพสต์สื่อโดยไม่มีข้อความแสดงแทน
setting_reduce_motion: ลดการเคลื่อนไหวในภาพเคลื่อนไหว
setting_system_font_ui: ใช้แบบอักษรเริ่มต้นของระบบ
setting_system_scrollbars_ui: ใช้แถบเลื่อนเริ่มต้นของระบบ

View File

@ -1209,6 +1209,7 @@ sv:
too_fast: Formuläret har skickats för snabbt, försök igen.
use_security_key: Använd säkerhetsnyckel
user_agreement_html: Jag har läst och godkänner <a href="%{terms_of_service_path}" target="_blank">användarvillkoren</a> och <a href="%{privacy_policy_path}" target="_blank">integritetspolicy</a>
user_privacy_agreement_html: Jag har läst och godkänner <a href="%{privacy_policy_path}" target="_blank">integritetspolicyn</a>
author_attribution:
example_title: Exempeltext
hint_html: Skriver du nyheter eller bloggartiklar utanför Mastodon? Kontrollera hur du får krediteras när de delas på Mastodon.

View File

@ -1177,6 +1177,7 @@ th:
view_strikes: ดูการดำเนินการที่ผ่านมาต่อบัญชีของคุณ
too_fast: ส่งแบบฟอร์มเร็วเกินไป ลองอีกครั้ง
use_security_key: ใช้กุญแจความปลอดภัย
user_privacy_agreement_html: ฉันได้อ่านและเห็นด้วยกับ <a href="%{privacy_policy_path}" target="_blank">นโยบายความเป็นส่วนตัว</a>
author_attribution:
example_title: ข้อความตัวอย่าง
hint_html: คุณกำลังเขียนข่าวหรือบทความบล็อกภายนอก Mastodon หรือไม่? ควบคุมวิธีที่คุณได้รับเครดิตเมื่อมีการแบ่งปันข่าวหรือบทความบล็อกใน Mastodon

View File

@ -1303,7 +1303,7 @@ zh-CN:
request: 请求你的存档
size: 大小
blocks: 屏蔽的用户
bookmarks: 收藏
bookmarks: 书签
csv: CSV
domain_blocks: 站点屏蔽列表
lists: 列表
@ -1426,18 +1426,18 @@ zh-CN:
time_started: 开始于
titles:
blocking: 正在导入被屏蔽的账号
bookmarks: 正在导入收藏
bookmarks: 正在导入书签
domain_blocking: 正在导入站点屏蔽列表
following: 正在导入关注的账号
lists: 导入列表
muting: 正在导入隐藏的账号
type: 导入类型
type_groups:
constructive: 关注与收藏
constructive: 关注和书签
destructive: 屏蔽与隐藏
types:
blocking: 屏蔽列表
bookmarks: 收藏
bookmarks: 书签
domain_blocking: 站点屏蔽列表
following: 关注列表
lists: 列表
@ -1803,8 +1803,8 @@ zh-CN:
keep_pinned_hint: 不会删除你的任何置顶嘟文
keep_polls: 保留投票
keep_polls_hint: 不删除你的任何投票
keep_self_bookmark: 存被你加入书签的嘟文
keep_self_bookmark_hint: 如果你已将自己的嘟文添加书签,就不会删除这些嘟文
keep_self_bookmark: 你加入书签的嘟文
keep_self_bookmark_hint: 不删除书签中你自己的嘟文
keep_self_fav: 保留你喜欢的嘟文
keep_self_fav_hint: 如果你喜欢了自己的嘟文,则不会删除这些嘟文
min_age:

View File

@ -289,6 +289,16 @@ module Mastodon::CLI
fail_with_message 'Invalid URL'
end
PRELOADED_MODELS = %w(
Account
Backup
CustomEmoji
Import
MediaAttachment
PreviewCard
SiteUpload
).freeze
private
def object_storage_summary
@ -310,16 +320,6 @@ module Mastodon::CLI
SQL
end
PRELOADED_MODELS = %w(
Account
Backup
CustomEmoji
Import
MediaAttachment
PreviewCard
SiteUpload
).freeze
def preload_records_from_mixed_objects(objects)
preload_map = Hash.new { |hash, key| hash[key] = [] }

View File

@ -1,77 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Admin::Users::RolesController do
render_views
let(:current_role) { UserRole.create(name: 'Foo', permissions: UserRole::FLAGS[:manage_roles], position: 10) }
let(:current_user) { Fabricate(:user, role: current_role) }
let(:previous_role) { nil }
let(:user) { Fabricate(:user, role: previous_role) }
before do
sign_in current_user, scope: :user
end
describe 'GET #show' do
before do
get :show, params: { user_id: user.id }
end
it 'returns http success' do
expect(response).to have_http_status(:success)
end
context 'when target user is higher ranked than current user' do
let(:previous_role) { UserRole.create(name: 'Baz', permissions: UserRole::FLAGS[:administrator], position: 100) }
it 'returns http forbidden' do
expect(response).to have_http_status(403)
end
end
end
describe 'PUT #update' do
let(:selected_role) { UserRole.create(name: 'Bar', permissions: permissions, position: position) }
before do
put :update, params: { user_id: user.id, user: { role_id: selected_role.id } }
end
context 'with manage roles permissions' do
let(:permissions) { UserRole::FLAGS[:manage_roles] }
let(:position) { 1 }
it 'updates user role and redirects' do
expect(user.reload.role_id).to eq selected_role&.id
expect(response).to redirect_to(admin_account_path(user.account_id))
end
end
context 'when selected role has higher position than current user\'s role' do
let(:permissions) { UserRole::FLAGS[:administrator] }
let(:position) { 100 }
it 'does not update user role and renders edit' do
expect(user.reload.role_id).to eq previous_role&.id
expect(response).to render_template(:show)
end
end
context 'when target user is higher ranked than current user' do
let(:previous_role) { UserRole.create(name: 'Baz', permissions: UserRole::FLAGS[:administrator], position: 100) }
let(:permissions) { UserRole::FLAGS[:manage_roles] }
let(:position) { 1 }
it 'does not update user role and returns http forbidden' do
expect(user.reload.role_id).to eq previous_role&.id
expect(response).to have_http_status(403)
end
end
end
end

View File

@ -1,30 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Settings::TwoFactorAuthentication::RecoveryCodesController do
render_views
describe 'POST #create' do
it 'updates the codes and shows them on a view when signed in' do
user = Fabricate(:user)
otp_backup_codes = user.generate_otp_backup_codes!
allow(user).to receive(:generate_otp_backup_codes!).and_return(otp_backup_codes)
allow(controller).to receive(:current_user).and_return(user)
sign_in user, scope: :user
post :create, session: { challenge_passed_at: Time.now.utc }
expect(flash[:notice]).to eq 'Recovery codes successfully regenerated'
expect(response).to have_http_status(200)
expect(response).to render_template(:index)
expect(response.body)
.to include(*otp_backup_codes)
end
it 'redirects when not signed in' do
post :create
expect(response).to redirect_to '/auth/sign_in'
end
end
end

View File

@ -1,79 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe Settings::TwoFactorAuthenticationMethodsController do
render_views
context 'when not signed in' do
describe 'GET to #index' do
it 'redirects' do
get :index
expect(response).to redirect_to '/auth/sign_in'
end
end
end
context 'when signed in' do
let(:user) { Fabricate(:user) }
before do
sign_in user, scope: :user
end
describe 'GET #index' do
describe 'when user has enabled otp' do
before do
user.update(otp_required_for_login: true)
get :index
end
it 'returns http success with private cache control headers', :aggregate_failures do
expect(response).to have_http_status(200)
expect(response.headers['Cache-Control']).to include('private, no-store')
end
end
describe 'when user has not enabled otp' do
before do
user.update(otp_required_for_login: false)
get :index
end
it 'redirects to enable otp' do
expect(response).to redirect_to(settings_otp_authentication_path)
end
end
end
describe 'POST to #disable' do
before do
user.update(otp_required_for_login: true)
end
context 'when user has not passed challenge' do
it 'renders challenge page' do
post :disable
expect(response).to have_http_status(200)
expect(response).to render_template('auth/challenges/new')
end
end
context 'when user has passed challenge' do
before do
mailer = instance_double(ApplicationMailer::MessageDelivery, deliver_later!: true)
allow(UserMailer).to receive(:two_factor_disabled).with(user).and_return(mailer)
end
it 'redirects to settings page' do
post :disable, session: { challenge_passed_at: 10.minutes.ago }
expect(UserMailer).to have_received(:two_factor_disabled).with(user)
expect(response).to redirect_to(settings_otp_authentication_path)
end
end
end
end
end

View File

@ -1,192 +0,0 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe StatusesController do
render_views
describe 'GET #show' do
let(:account) { Fabricate(:account) }
let(:status) { Fabricate(:status, account: account) }
context 'when signed-in' do
let(:user) { Fabricate(:user) }
before do
sign_in(user)
end
context 'when status is public' do
before do
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
.and render_template(:show)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body).to include status.text
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when status is private' do
let(:status) { Fabricate(:status, account: account, visibility: :private) }
context 'when user is authorized to see it' do
before do
user.account.follow!(account)
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
.and render_template(:show)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body).to include status.text
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when user is not authorized to see it' do
before do
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with JSON' do
let(:format) { 'json' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
context 'with HTML' do
let(:format) { 'html' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
end
end
context 'when status is direct' do
let(:status) { Fabricate(:status, account: account, visibility: :direct) }
context 'when user is authorized to see it' do
before do
Fabricate(:mention, account: user.account, status: status)
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
expect(response)
.to have_http_status(200)
.and render_template(:show)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body).to include status.text
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully' do
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when user is not authorized to see it' do
before do
get :show, params: { account_username: status.account.username, id: status.id, format: format }
end
context 'with JSON' do
let(:format) { 'json' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
context 'with HTML' do
let(:format) { 'html' }
it 'returns http not found' do
expect(response).to have_http_status(404)
end
end
end
end
end
end
end

View File

@ -3,6 +3,34 @@
require 'rails_helper'
RSpec.describe 'Admin Users Roles' do
context 'when target user is higher ranked than current user' do
let(:current_role) { UserRole.create(name: 'Foo', permissions: UserRole::FLAGS[:manage_roles], position: 10) }
let(:current_user) { Fabricate(:user, role: current_role) }
let(:previous_role) { UserRole.create(name: 'Baz', permissions: UserRole::FLAGS[:administrator], position: 100) }
let(:user) { Fabricate(:user, role: previous_role) }
before { sign_in(current_user) }
describe 'GET /admin/users/:user_id/role' do
it 'returns http forbidden' do
get admin_user_role_path(user.id)
expect(response)
.to have_http_status(403)
end
end
describe 'PUT /admin/users/:user_id/role' do
it 'returns http forbidden' do
put admin_user_role_path(user.id)
expect(response)
.to have_http_status(403)
end
end
end
describe 'PUT /admin/users/:user_id/role' do
before { sign_in Fabricate(:admin_user) }

View File

@ -0,0 +1,16 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings TwoFactorAuthentication RecoveryCodes' do
describe 'POST /settings/two_factor_authentication/recovery_codes' do
context 'when signed out' do
it 'redirects to sign in page' do
post settings_two_factor_authentication_recovery_codes_path
expect(response)
.to redirect_to(new_user_session_path)
end
end
end
end

View File

@ -0,0 +1,35 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings TwoFactorAuthenticationMethods' do
context 'when not signed in' do
describe 'GET to /settings/two_factor_authentication_methods' do
it 'redirects to sign in page' do
get settings_two_factor_authentication_methods_path
expect(response)
.to redirect_to(new_user_session_path)
end
end
end
context 'when signed in' do
let(:user) { Fabricate(:user) }
before { sign_in user }
describe 'GET to /settings/two_factor_authentication_methods' do
describe 'when user has not enabled otp' do
before { user.update(otp_required_for_login: false) }
it 'redirects to enable otp' do
get settings_two_factor_authentication_methods_path
expect(response)
.to redirect_to(settings_otp_authentication_path)
end
end
end
end
end

View File

@ -59,7 +59,6 @@ RSpec.describe 'Statuses' do
expect(response)
.to have_http_status(200)
.and render_template(:show)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('public'),
@ -114,9 +113,11 @@ RSpec.describe 'Statuses' do
end
context 'when signed in' do
subject { get short_account_status_path(account_username: account.username, id: status.id, format: format) }
let(:user) { Fabricate(:user) }
before { sign_in(user) }
before { sign_in_with_session(user) }
context 'when account blocks user' do
before { account.block!(user.account) }
@ -128,6 +129,167 @@ RSpec.describe 'Statuses' do
.to have_http_status(404)
end
end
context 'when status is public' do
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body)
.to include(status.text)
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when status is private' do
let(:status) { Fabricate(:status, account: account, visibility: :private) }
context 'when user is authorized to see it' do
before { user.account.follow!(account) }
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body)
.to include(status.text)
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when user is not authorized to see it' do
let(:format) { 'html' }
it 'returns http not found' do
subject
expect(response)
.to have_http_status(404)
end
end
end
context 'when status is direct' do
let(:status) { Fabricate(:status, account: account, visibility: :direct) }
context 'when user is authorized to see it' do
before { Fabricate(:mention, account: user.account, status: status) }
context 'with HTML' do
let(:format) { 'html' }
it 'renders status successfully', :aggregate_failures do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Link' => include('activity+json')
)
expect(response.body)
.to include(status.text)
end
end
context 'with JSON' do
let(:format) { 'json' }
it 'renders ActivityPub Note object successfully' do
subject
expect(response)
.to have_http_status(200)
expect(response.headers).to include(
'Vary' => 'Accept, Accept-Language, Cookie',
'Cache-Control' => include('private'),
'Content-Type' => include('application/activity+json'),
'Link' => include('activity+json')
)
expect(response.parsed_body)
.to include(content: include(status.text))
end
end
end
context 'when user is not authorized to see it' do
let(:format) { 'html' }
it 'returns http not found' do
subject
expect(response)
.to have_http_status(404)
end
end
end
private
def sign_in_with_session(user)
# The regular `sign_in` helper does not actually set session cookies
# The endpoint responses here rely on cookie/session checks to set cache privacy headers
# To enable that, perform a full sign in which will establish those cookies for subsequent spec requests
post user_session_path, params: { user: { email: user.email, password: user.password } }
end
end
context 'with "HTTP Signature" access signed by a remote account' do

View File

@ -0,0 +1,38 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Admin Users Roles' do
let(:current_role) { UserRole.create(name: 'Foo', permissions: UserRole::FLAGS[:manage_roles], position: 10) }
let(:current_user) { Fabricate(:user, role: current_role) }
let(:previous_role) { nil }
let(:user) { Fabricate(:user, role: previous_role) }
before do
sign_in current_user, scope: :user
end
describe 'Managing user roles' do
let!(:too_high_role) { UserRole.create(name: 'TooHigh', permissions: UserRole::FLAGS[:administrator], position: 100) }
let!(:usable_role) { UserRole.create(name: 'Usable', permissions: UserRole::FLAGS[:manage_roles], position: 1) }
it 'selects and updates user roles' do
visit admin_user_role_path(user)
expect(page)
.to have_title I18n.t('admin.accounts.change_role.title', username: user.account.username)
# Fails to assign not allowed role
select too_high_role.name, from: 'user_role_id'
expect { click_on submit_button }
.to_not(change { user.reload.role_id })
expect(page)
.to have_title I18n.t('admin.accounts.change_role.title', username: user.account.username)
# Assigns allowed role
select usable_role.name, from: 'user_role_id'
expect { click_on submit_button }
.to(change { user.reload.role_id }.to(usable_role.id))
end
end
end

View File

@ -0,0 +1,37 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings TwoFactorAuthentication RecoveryCodes' do
describe 'Generating recovery codes' do
let(:user) { Fabricate :user, otp_required_for_login: true }
let(:backup_code) { +'147e7284c95bd260b91ed17820860019' }
before do
stub_code_generator
sign_in(user)
end
it 'updates the codes and includes them in the view' do
# Attempt to generate codes
visit settings_two_factor_authentication_methods_path
click_on I18n.t('two_factor_authentication.generate_recovery_codes')
# Fill in challenge password
fill_in 'form_challenge_current_password', with: user.password
expect { click_on I18n.t('challenge.confirm') }
.to(change { user.reload.otp_backup_codes })
expect(page)
.to have_content(I18n.t('two_factor_authentication.recovery_codes_regenerated'))
.and have_title(I18n.t('settings.two_factor_authentication'))
.and have_css('ol.recovery-codes')
.and have_content(backup_code)
end
def stub_code_generator
allow(SecureRandom).to receive(:hex).and_return(backup_code)
end
end
end

View File

@ -0,0 +1,41 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Settings TwoFactorAuthenticationMethods' do
context 'when signed in' do
let(:user) { Fabricate(:user) }
before { sign_in user }
describe 'Managing 2FA methods' do
before { user.update(otp_required_for_login: true) }
it 'disables 2FA with challenge confirmation', :inline_jobs do
visit settings_two_factor_authentication_methods_path
expect(page)
.to have_content(I18n.t('settings.two_factor_authentication'))
.and have_private_cache_control
# Attempt to disable
click_on I18n.t('two_factor_authentication.disable')
expect(page)
.to have_title(I18n.t('challenge.prompt'))
# Fill in challenge form
fill_in 'form_challenge_current_password', with: user.password
emails = capture_emails do
expect { click_on I18n.t('challenge.confirm') }
.to change { user.reload.otp_required_for_login }.to(false)
end
expect(page)
.to have_content(I18n.t('two_factor_authentication.disabled_success'))
expect(emails.first)
.to be_present
.and(deliver_to(user.email))
.and(have_subject(I18n.t('devise.mailer.two_factor_disabled.subject')))
end
end
end
end

View File

@ -0,0 +1,15 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe 'Status page' do
let(:status) { Fabricate :status }
it 'visits the status page and renders the web app' do
visit short_account_status_path(account_username: status.account.username, id: status.id)
expect(page)
.to have_css('noscript', text: /Mastodon/)
.and have_css('body', class: 'app-body')
end
end

164
yarn.lock
View File

@ -74,39 +74,38 @@ __metadata:
linkType: hard
"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.1, @babel/core@npm:^7.24.4, @babel/core@npm:^7.25.0":
version: 7.26.8
resolution: "@babel/core@npm:7.26.8"
version: 7.26.9
resolution: "@babel/core@npm:7.26.9"
dependencies:
"@ampproject/remapping": "npm:^2.2.0"
"@babel/code-frame": "npm:^7.26.2"
"@babel/generator": "npm:^7.26.8"
"@babel/generator": "npm:^7.26.9"
"@babel/helper-compilation-targets": "npm:^7.26.5"
"@babel/helper-module-transforms": "npm:^7.26.0"
"@babel/helpers": "npm:^7.26.7"
"@babel/parser": "npm:^7.26.8"
"@babel/template": "npm:^7.26.8"
"@babel/traverse": "npm:^7.26.8"
"@babel/types": "npm:^7.26.8"
"@types/gensync": "npm:^1.0.0"
"@babel/helpers": "npm:^7.26.9"
"@babel/parser": "npm:^7.26.9"
"@babel/template": "npm:^7.26.9"
"@babel/traverse": "npm:^7.26.9"
"@babel/types": "npm:^7.26.9"
convert-source-map: "npm:^2.0.0"
debug: "npm:^4.1.0"
gensync: "npm:^1.0.0-beta.2"
json5: "npm:^2.2.3"
semver: "npm:^6.3.1"
checksum: 10c0/fafbd083ed3f79973ae2a11a69eee3f13b3226a1d4907abc2c6f2fea21adf4a7c20e00fe0eaa33f44a3666eeaf414edb07460ec031d478ee5f6088eb38b2a011
checksum: 10c0/ed7212ff42a9453765787019b7d191b167afcacd4bd8fec10b055344ef53fa0cc648c9a80159ae4ecf870016a6318731e087042dcb68d1a2a9d34eb290dc014b
languageName: node
linkType: hard
"@babel/generator@npm:^7.26.8, @babel/generator@npm:^7.7.2":
version: 7.26.8
resolution: "@babel/generator@npm:7.26.8"
"@babel/generator@npm:^7.26.9, @babel/generator@npm:^7.7.2":
version: 7.26.9
resolution: "@babel/generator@npm:7.26.9"
dependencies:
"@babel/parser": "npm:^7.26.8"
"@babel/types": "npm:^7.26.8"
"@babel/parser": "npm:^7.26.9"
"@babel/types": "npm:^7.26.9"
"@jridgewell/gen-mapping": "npm:^0.3.5"
"@jridgewell/trace-mapping": "npm:^0.3.25"
jsesc: "npm:^3.0.2"
checksum: 10c0/9467f197d285ac315d1fa419138d36a3bfd69ca4baf763e914acab12f5f38e5d231497f6528e80613b28e73bb28c66fcc50b250b1f277b1a4d38ac14b03e9674
checksum: 10c0/6b78872128205224a9a9761b9ea7543a9a7902a04b82fc2f6801ead4de8f59056bab3fd17b1f834ca7b049555fc4c79234b9a6230dd9531a06525306050becad
languageName: node
linkType: hard
@ -304,24 +303,24 @@ __metadata:
languageName: node
linkType: hard
"@babel/helpers@npm:^7.26.7":
version: 7.26.7
resolution: "@babel/helpers@npm:7.26.7"
"@babel/helpers@npm:^7.26.9":
version: 7.26.9
resolution: "@babel/helpers@npm:7.26.9"
dependencies:
"@babel/template": "npm:^7.25.9"
"@babel/types": "npm:^7.26.7"
checksum: 10c0/37fec398e53a2dbbf24bc2a025c4d571b2556cef18d8116d05d04b153f13ef659cdfbaab96c8eed875e629d39bdf9b3ea5d099ccf80544537de224e2d94f9b11
"@babel/template": "npm:^7.26.9"
"@babel/types": "npm:^7.26.9"
checksum: 10c0/3d4dbc4a33fe4181ed810cac52318b578294745ceaec07e2f6ecccf6cda55d25e4bfcea8f085f333bf911c9e1fc13320248dd1d5315ab47ad82ce1077410df05
languageName: node
linkType: hard
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.26.8":
version: 7.26.8
resolution: "@babel/parser@npm:7.26.8"
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.26.9":
version: 7.26.9
resolution: "@babel/parser@npm:7.26.9"
dependencies:
"@babel/types": "npm:^7.26.8"
"@babel/types": "npm:^7.26.9"
bin:
parser: ./bin/babel-parser.js
checksum: 10c0/da04f26bae732a5b6790775a736b58c7876c28e62203c5097f043fd7273ef6debe5bfd7a4e670a6819f4549b215c7b9762c6358e44797b3c4d733defc8290781
checksum: 10c0/4b9ef3c9a0d4c328e5e5544f50fe8932c36f8a2c851e7f14a85401487cd3da75cad72c2e1bcec1eac55599a6bbb2fdc091f274c4fcafa6bdd112d4915ff087fc
languageName: node
linkType: hard
@ -771,15 +770,15 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-transform-for-of@npm:^7.25.9":
version: 7.25.9
resolution: "@babel/plugin-transform-for-of@npm:7.25.9"
"@babel/plugin-transform-for-of@npm:^7.26.9":
version: 7.26.9
resolution: "@babel/plugin-transform-for-of@npm:7.26.9"
dependencies:
"@babel/helper-plugin-utils": "npm:^7.25.9"
"@babel/helper-plugin-utils": "npm:^7.26.5"
"@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.9"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10c0/bf11abc71934a1f369f39cd7a33cf3d4dc5673026a53f70b7c1238c4fcc44e68b3ca1bdbe3db2076f60defb6ffe117cbe10b90f3e1a613b551d88f7c4e693bbe
checksum: 10c0/e28a521521cf9f84ddd69ca8da7c89fb9f7aa38e4dea35742fe973e4e1d7c23f9cee1a4861a2fdd9e9f18ff945886a44d7335cea1c603b96bfcb1c7c8791ef09
languageName: node
linkType: hard
@ -1138,8 +1137,8 @@ __metadata:
linkType: hard
"@babel/plugin-transform-runtime@npm:^7.22.4":
version: 7.26.8
resolution: "@babel/plugin-transform-runtime@npm:7.26.8"
version: 7.26.9
resolution: "@babel/plugin-transform-runtime@npm:7.26.9"
dependencies:
"@babel/helper-module-imports": "npm:^7.25.9"
"@babel/helper-plugin-utils": "npm:^7.26.5"
@ -1149,7 +1148,7 @@ __metadata:
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10c0/e206206fee262d2200763e6c427b27ca8a7a40a967dfe52f984f07a225952be0990fcce0acae6cee63fe92f5cadc94bb336fae2f3d687f0f2fcd2dadaf33029a
checksum: 10c0/2c4d77d0671badc7fd53dcd7015df5db892712436c7e9740ffb2f5b85e8591e5bfe208f78dff402b4ee2d55d0f7a3c0a1102c683f333f4ee0cfa62f68ea68842
languageName: node
linkType: hard
@ -1272,8 +1271,8 @@ __metadata:
linkType: hard
"@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.12.1, @babel/preset-env@npm:^7.22.4":
version: 7.26.8
resolution: "@babel/preset-env@npm:7.26.8"
version: 7.26.9
resolution: "@babel/preset-env@npm:7.26.9"
dependencies:
"@babel/compat-data": "npm:^7.26.8"
"@babel/helper-compilation-targets": "npm:^7.26.5"
@ -1304,7 +1303,7 @@ __metadata:
"@babel/plugin-transform-dynamic-import": "npm:^7.25.9"
"@babel/plugin-transform-exponentiation-operator": "npm:^7.26.3"
"@babel/plugin-transform-export-namespace-from": "npm:^7.25.9"
"@babel/plugin-transform-for-of": "npm:^7.25.9"
"@babel/plugin-transform-for-of": "npm:^7.26.9"
"@babel/plugin-transform-function-name": "npm:^7.25.9"
"@babel/plugin-transform-json-strings": "npm:^7.25.9"
"@babel/plugin-transform-literals": "npm:^7.25.9"
@ -1346,7 +1345,7 @@ __metadata:
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 10c0/314ab8c6173d1f14e40cf22e1e646c429acfd45195e2ddbadca81956aa2a670e37e4446658db65f1a669f82ef115a4a018f78448bc10789cacdaf4e995680db5
checksum: 10c0/6812ca76bd38165a58fe8354bab5e7204e1aa17d8b9270bd8f8babb08cc7fa94cd29525fe41b553f2ba0e84033d566f10da26012b8ee0f81897005c5225d0051
languageName: node
linkType: hard
@ -1404,47 +1403,47 @@ __metadata:
linkType: hard
"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.2.0, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.22.3, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2":
version: 7.26.7
resolution: "@babel/runtime@npm:7.26.7"
version: 7.26.9
resolution: "@babel/runtime@npm:7.26.9"
dependencies:
regenerator-runtime: "npm:^0.14.0"
checksum: 10c0/60199c049f90e5e41c687687430052a370aca60bac7859ff4ee761c5c1739b8ba1604d391d01588c22dc0e93828cbadb8ada742578ad1b1df240746bce98729a
checksum: 10c0/e8517131110a6ec3a7360881438b85060e49824e007f4a64b5dfa9192cf2bb5c01e84bfc109f02d822c7edb0db926928dd6b991e3ee460b483fb0fac43152d9b
languageName: node
linkType: hard
"@babel/template@npm:^7.25.9, @babel/template@npm:^7.26.8, @babel/template@npm:^7.3.3":
version: 7.26.8
resolution: "@babel/template@npm:7.26.8"
"@babel/template@npm:^7.25.9, @babel/template@npm:^7.26.9, @babel/template@npm:^7.3.3":
version: 7.26.9
resolution: "@babel/template@npm:7.26.9"
dependencies:
"@babel/code-frame": "npm:^7.26.2"
"@babel/parser": "npm:^7.26.8"
"@babel/types": "npm:^7.26.8"
checksum: 10c0/90bc1085cbc090cbdd43af7b9dbb98e6bda96e55e0f565f17ebb8e97c2dfce866dc727ca02b8e08bd2662ba4fd3851907ba3c48618162c291221af17fb258213
"@babel/parser": "npm:^7.26.9"
"@babel/types": "npm:^7.26.9"
checksum: 10c0/019b1c4129cc01ad63e17529089c2c559c74709d225f595eee017af227fee11ae8a97a6ab19ae6768b8aa22d8d75dcb60a00b28f52e9fa78140672d928bc1ae9
languageName: node
linkType: hard
"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.8":
version: 7.26.8
resolution: "@babel/traverse@npm:7.26.8"
"@babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.8, @babel/traverse@npm:^7.26.9":
version: 7.26.9
resolution: "@babel/traverse@npm:7.26.9"
dependencies:
"@babel/code-frame": "npm:^7.26.2"
"@babel/generator": "npm:^7.26.8"
"@babel/parser": "npm:^7.26.8"
"@babel/template": "npm:^7.26.8"
"@babel/types": "npm:^7.26.8"
"@babel/generator": "npm:^7.26.9"
"@babel/parser": "npm:^7.26.9"
"@babel/template": "npm:^7.26.9"
"@babel/types": "npm:^7.26.9"
debug: "npm:^4.3.1"
globals: "npm:^11.1.0"
checksum: 10c0/0771d1ce0351628ad2e8dac56f0d59f706eb125c83fbcc039bde83088ba0a1477244ad5fb060802f90366cc4d7fa871e5009a292aef6205bcf83f2e01d1a0a5d
checksum: 10c0/51dd57fa39ea34d04816806bfead04c74f37301269d24c192d1406dc6e244fea99713b3b9c5f3e926d9ef6aa9cd5c062ad4f2fc1caa9cf843d5e864484ac955e
languageName: node
linkType: hard
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.7, @babel/types@npm:^7.26.8, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
version: 7.26.8
resolution: "@babel/types@npm:7.26.8"
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.0.0-beta.49, @babel/types@npm:^7.12.6, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.9, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4":
version: 7.26.9
resolution: "@babel/types@npm:7.26.9"
dependencies:
"@babel/helper-string-parser": "npm:^7.25.9"
"@babel/helper-validator-identifier": "npm:^7.25.9"
checksum: 10c0/cd41ea47bb3d7baf2b3bf5e70e9c3a16f2eab699fab8575b2b31a7b1cb64166eb52c97124313863dde0581747bfc7a1810c838ad60b5b7ad1897d8004c7b95a9
checksum: 10c0/999c56269ba00e5c57aa711fbe7ff071cd6990bafd1b978341ea7572cc78919986e2aa6ee51dacf4b6a7a6fa63ba4eb3f1a03cf55eee31b896a56d068b895964
languageName: node
linkType: hard
@ -1658,12 +1657,12 @@ __metadata:
languageName: node
linkType: hard
"@csstools/postcss-initial@npm:^2.0.0":
version: 2.0.0
resolution: "@csstools/postcss-initial@npm:2.0.0"
"@csstools/postcss-initial@npm:^2.0.1":
version: 2.0.1
resolution: "@csstools/postcss-initial@npm:2.0.1"
peerDependencies:
postcss: ^8.4
checksum: 10c0/44c443cba84cc66367f2082bf20db06c8437338c02c244c38798c5bf5342932d89fed0dd13e4409f084ecf7fce47ae6394e9a7a006fd98a973decfa24ab1eb04
checksum: 10c0/dbff7084ef4f1c4647efe2b147001daf172003c15b5e22689f0540d03c8d362f2a332cd9cf136e6c8dcda7564ee30492a4267ea188f72cb9c1000fb9bcfbfef8
languageName: node
linkType: hard
@ -3777,13 +3776,6 @@ __metadata:
languageName: node
linkType: hard
"@types/gensync@npm:^1.0.0":
version: 1.0.4
resolution: "@types/gensync@npm:1.0.4"
checksum: 10c0/1daeb1693196a85ee68b82f3fb30906a1cccede69d492b190de80ff20cec2d528d98cad866d733fd83cb171096dfe8c26c9c02c50ffb93e1113d48bd79daa556
languageName: node
linkType: hard
"@types/glob@npm:^7.1.1":
version: 7.2.0
resolution: "@types/glob@npm:7.2.0"
@ -5774,7 +5766,7 @@ __metadata:
languageName: node
linkType: hard
"browserslist@npm:^4.0.0, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3, browserslist@npm:^4.24.0, browserslist@npm:^4.24.3":
"browserslist@npm:^4.0.0, browserslist@npm:^4.23.0, browserslist@npm:^4.23.3, browserslist@npm:^4.24.0, browserslist@npm:^4.24.3, browserslist@npm:^4.24.4":
version: 4.24.4
resolution: "browserslist@npm:4.24.4"
dependencies:
@ -9906,8 +9898,8 @@ __metadata:
linkType: hard
"ioredis@npm:^5.3.2":
version: 5.4.2
resolution: "ioredis@npm:5.4.2"
version: 5.5.0
resolution: "ioredis@npm:5.5.0"
dependencies:
"@ioredis/commands": "npm:^1.1.1"
cluster-key-slot: "npm:^1.1.0"
@ -9918,7 +9910,7 @@ __metadata:
redis-errors: "npm:^1.2.0"
redis-parser: "npm:^3.0.0"
standard-as-callback: "npm:^2.1.0"
checksum: 10c0/e59d2cceb43ed74b487d7b50fa91b93246e734e5d4835c7e62f64e44da072f12ab43b044248012e6f8b76c61a7c091a2388caad50e8ad69a8ce5515a730b23b8
checksum: 10c0/ba64502fc92d9e05465793fafcd0568cb668af6e2350462b61daadfd499e3a48239d9a723d3ce08b08c93f3f745d05dda91136cdc597d4d485604e6730305305
languageName: node
linkType: hard
@ -13162,8 +13154,8 @@ __metadata:
linkType: hard
"pg@npm:^8.5.0":
version: 8.13.2
resolution: "pg@npm:8.13.2"
version: 8.13.3
resolution: "pg@npm:8.13.3"
dependencies:
pg-cloudflare: "npm:^1.1.1"
pg-connection-string: "npm:^2.7.0"
@ -13179,7 +13171,7 @@ __metadata:
peerDependenciesMeta:
pg-native:
optional: true
checksum: 10c0/955615fc6db2849e047472b3a314ce6b70ecdef2de1ecdbb663ac2cd39f6e9ae25da5de4727baceb0b6e439075e6ad0ac8548fd150e38d9cda6514c43c840a31
checksum: 10c0/7296f0e5930b35faef471be2673210cda553b30f1b8e9d176fcc286aa43248e17e09336032bf5a6bba55d2cc2d03afb8a407b5a6e6bc56ebb331c02d1a7ccc05
languageName: node
linkType: hard
@ -13955,8 +13947,8 @@ __metadata:
linkType: hard
"postcss-preset-env@npm:^10.0.0":
version: 10.1.3
resolution: "postcss-preset-env@npm:10.1.3"
version: 10.1.4
resolution: "postcss-preset-env@npm:10.1.4"
dependencies:
"@csstools/postcss-cascade-layers": "npm:^5.0.1"
"@csstools/postcss-color-function": "npm:^4.0.7"
@ -13968,7 +13960,7 @@ __metadata:
"@csstools/postcss-gradients-interpolation-method": "npm:^5.0.7"
"@csstools/postcss-hwb-function": "npm:^4.0.7"
"@csstools/postcss-ic-unit": "npm:^4.0.0"
"@csstools/postcss-initial": "npm:^2.0.0"
"@csstools/postcss-initial": "npm:^2.0.1"
"@csstools/postcss-is-pseudo-class": "npm:^5.0.1"
"@csstools/postcss-light-dark-function": "npm:^2.0.7"
"@csstools/postcss-logical-float-and-clear": "npm:^3.0.0"
@ -13991,7 +13983,7 @@ __metadata:
"@csstools/postcss-trigonometric-functions": "npm:^4.0.6"
"@csstools/postcss-unset-value": "npm:^4.0.0"
autoprefixer: "npm:^10.4.19"
browserslist: "npm:^4.23.1"
browserslist: "npm:^4.24.4"
css-blank-pseudo: "npm:^7.0.1"
css-has-pseudo: "npm:^7.0.2"
css-prefers-color-scheme: "npm:^10.0.0"
@ -14023,7 +14015,7 @@ __metadata:
postcss-selector-not: "npm:^8.0.1"
peerDependencies:
postcss: ^8.4
checksum: 10c0/0ae02015ad3ac69e8ef26afc1a06cb9fbb400104eca5c69a4baa20925e06364712f05b5d87ec9cf9445256e62344e6c2bad8d261a09b35a0e982e055564e3ba8
checksum: 10c0/bd3ad0a32fa30e53f4fdfb980b77d4e86a53ad40681dd8f7d2d9fb00728730b426cd7d039b57f0849261014e4c9e5a55f72edfda1c70165c96a52f246d273ebb
languageName: node
linkType: hard
@ -15558,8 +15550,8 @@ __metadata:
linkType: hard
"sass@npm:^1.62.1":
version: 1.84.0
resolution: "sass@npm:1.84.0"
version: 1.85.0
resolution: "sass@npm:1.85.0"
dependencies:
"@parcel/watcher": "npm:^2.4.1"
chokidar: "npm:^4.0.0"
@ -15570,7 +15562,7 @@ __metadata:
optional: true
bin:
sass: sass.js
checksum: 10c0/4af28c12416b6f1fec2423677cfa8c48af7fb7652a50bd076e0cdd1ea260f0330948ddd6075368a734b8d6cfa16c9af5518292181334f47a9471cb542599bc7b
checksum: 10c0/a1af0c0596ae1904f66337d0c70a684db6e12210f97be4326cc3dcf18b0f956d7bc45ab2bcc7a8422d433d3eb3c9cb2cc8e60b2dafbdd01fb1ae5a23f5424690
languageName: node
linkType: hard