Merge remote-tracking branch 'personal/merge/tootsuite/master' into gs-master

main
David Yip 7 years ago
commit 0fa0836e63
No known key found for this signature in database
GPG Key ID: 7DA0036508FCC0CC

@ -158,8 +158,8 @@ STREAMING_CLUSTER_NUM=1
# The pam environment variable "email" is provided by: # The pam environment variable "email" is provided by:
# https://github.com/devkral/pam_email_extractor # https://github.com/devkral/pam_email_extractor
# PAM_ENABLED=true # PAM_ENABLED=true
# Fallback Suffix for email address generation (nil by default) # Fallback email domain for email address generation (LOCAL_DOMAIN by default)
# PAM_DEFAULT_SUFFIX=pam # PAM_EMAIL_DOMAIN=example.com
# Name of the pam service (pam "auth" section is evaluated) # Name of the pam service (pam "auth" section is evaluated)
# PAM_DEFAULT_SERVICE=rpam # PAM_DEFAULT_SERVICE=rpam
# Name of the pam service used for checking if an user can register (pam "account" section is evaluated) (nil (disabled) by default) # Name of the pam service used for checking if an user can register (pam "account" section is evaluated) (nil (disabled) by default)

@ -33,7 +33,9 @@ gem 'cld3', '~> 3.2.0'
gem 'devise', '~> 4.4' gem 'devise', '~> 4.4'
gem 'devise-two-factor', '~> 3.0' gem 'devise-two-factor', '~> 3.0'
gem 'devise_pam_authenticatable2', '~> 8.0', install_if: -> { ENV['PAM_ENABLED'] == 'true' } group :pam_authentication, optional: true do
gem 'devise_pam_authenticatable2', '~> 9.0'
end
gem 'net-ldap', '~> 0.10' gem 'net-ldap', '~> 0.10'
gem 'omniauth-cas', '~> 1.1' gem 'omniauth-cas', '~> 1.1'
gem 'omniauth-saml', '~> 1.10' gem 'omniauth-saml', '~> 1.10'

@ -141,7 +141,7 @@ GEM
devise (~> 4.0) devise (~> 4.0)
railties (< 5.2) railties (< 5.2)
rotp (~> 2.0) rotp (~> 2.0)
devise_pam_authenticatable2 (8.0.1) devise_pam_authenticatable2 (9.0.0)
devise (>= 4.0.0) devise (>= 4.0.0)
rpam2 (~> 3.0) rpam2 (~> 3.0)
diff-lcs (1.3) diff-lcs (1.3)
@ -634,7 +634,7 @@ DEPENDENCIES
climate_control (~> 0.2) climate_control (~> 0.2)
devise (~> 4.4) devise (~> 4.4)
devise-two-factor (~> 3.0) devise-two-factor (~> 3.0)
devise_pam_authenticatable2 (~> 8.0) devise_pam_authenticatable2 (~> 9.0)
doorkeeper (~> 4.2) doorkeeper (~> 4.2)
dotenv-rails (~> 2.2) dotenv-rails (~> 2.2)
fabrication (~> 2.18) fabrication (~> 2.18)

@ -60,10 +60,10 @@
"compose_form.placeholder": "فيمَ تفكّر؟", "compose_form.placeholder": "فيمَ تفكّر؟",
"compose_form.publish": "بوّق", "compose_form.publish": "بوّق",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.marked": "Media is marked as sensitive", "compose_form.sensitive.marked": "لقد تم تحديد هذه الصورة كحساسة",
"compose_form.sensitive.unmarked": "Media is not marked as sensitive", "compose_form.sensitive.unmarked": "Media is not marked as sensitive",
"compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.marked": "إنّ النص مخفي وراء تحذير",
"compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler.unmarked": "النص غير مخفي",
"compose_form.spoiler_placeholder": "تنبيه عن المحتوى", "compose_form.spoiler_placeholder": "تنبيه عن المحتوى",
"confirmation_modal.cancel": "إلغاء", "confirmation_modal.cancel": "إلغاء",
"confirmations.block.confirm": "حجب", "confirmations.block.confirm": "حجب",
@ -254,9 +254,9 @@
"status.sensitive_warning": "محتوى حساس", "status.sensitive_warning": "محتوى حساس",
"status.share": "مشاركة", "status.share": "مشاركة",
"status.show_less": "إعرض أقلّ", "status.show_less": "إعرض أقلّ",
"status.show_less_all": "Show less for all", "status.show_less_all": "طي الكل",
"status.show_more": "أظهر المزيد", "status.show_more": "أظهر المزيد",
"status.show_more_all": "Show more for all", "status.show_more_all": "توسيع الكل",
"status.unmute_conversation": "فك الكتم عن المحادثة", "status.unmute_conversation": "فك الكتم عن المحادثة",
"status.unpin": "فك التدبيس من الملف الشخصي", "status.unpin": "فك التدبيس من الملف الشخصي",
"tabs_bar.federated_timeline": "الموحَّد", "tabs_bar.federated_timeline": "الموحَّد",

@ -3,7 +3,7 @@
"account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}", "account.block_domain": "Piilota kaikki sisältö verkkotunnuksesta {domain}",
"account.blocked": "Estetty", "account.blocked": "Estetty",
"account.disclaimer_full": "Alla olevat käyttäjän profiilitiedot saattavat olla epätäydellisiä.", "account.disclaimer_full": "Alla olevat käyttäjän profiilitiedot saattavat olla epätäydellisiä.",
"account.domain_blocked": "Domain hidden", "account.domain_blocked": "Verkko-osoite piilotettu",
"account.edit_profile": "Muokkaa", "account.edit_profile": "Muokkaa",
"account.follow": "Seuraa", "account.follow": "Seuraa",
"account.followers": "Seuraajia", "account.followers": "Seuraajia",
@ -60,10 +60,10 @@
"compose_form.placeholder": "Mitä sinulla on mielessä?", "compose_form.placeholder": "Mitä sinulla on mielessä?",
"compose_form.publish": "Toot", "compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.marked": "Media is marked as sensitive", "compose_form.sensitive.marked": "Media on merkitty arkaluontoiseksi",
"compose_form.sensitive.unmarked": "Media is not marked as sensitive", "compose_form.sensitive.unmarked": "Mediaa ei ole merkitty arkaluontoiseksi",
"compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.marked": "Teksti on piilotettu varoituksen taakse",
"compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler.unmarked": "Teksti ei ole piilotettu",
"compose_form.spoiler_placeholder": "Content warning", "compose_form.spoiler_placeholder": "Content warning",
"confirmation_modal.cancel": "Peruuta", "confirmation_modal.cancel": "Peruuta",
"confirmations.block.confirm": "Estä", "confirmations.block.confirm": "Estä",
@ -182,13 +182,13 @@
"onboarding.page_four.notifications": "Ilmoitukset-sarake näyttää sinulle, kun joku on viestii kanssasi.", "onboarding.page_four.notifications": "Ilmoitukset-sarake näyttää sinulle, kun joku on viestii kanssasi.",
"onboarding.page_one.federation": "Mastodon on yhteisöpalvelu, joka toimii monen itsenäisen palvelimen muodostamassa verkossa. Me kutsumme näitä palvelimia instansseiksi.", "onboarding.page_one.federation": "Mastodon on yhteisöpalvelu, joka toimii monen itsenäisen palvelimen muodostamassa verkossa. Me kutsumme näitä palvelimia instansseiksi.",
"onboarding.page_one.full_handle": "Koko käyttäjänimesi", "onboarding.page_one.full_handle": "Koko käyttäjänimesi",
"onboarding.page_one.handle_hint": "This is what you would tell your friends to search for.", "onboarding.page_one.handle_hint": "Tämä on se, mitä voisit ehdottaa ystäviäsi etsimään.",
"onboarding.page_one.welcome": "Tervetuloa Mastodoniin!", "onboarding.page_one.welcome": "Tervetuloa Mastodoniin!",
"onboarding.page_six.admin": "Instanssisi ylläpitäjä on {admin}.", "onboarding.page_six.admin": "Instanssisi ylläpitäjä on {admin}.",
"onboarding.page_six.almost_done": "Melkein valmista...", "onboarding.page_six.almost_done": "Melkein valmista...",
"onboarding.page_six.appetoot": "Bon Appetööt!", "onboarding.page_six.appetoot": "Bon Appetööt!",
"onboarding.page_six.apps_available": "{apps} on saatavilla iOS:lle, Androidille ja muille alustoille.", "onboarding.page_six.apps_available": "{apps} on saatavilla iOS:lle, Androidille ja muille alustoille.",
"onboarding.page_six.github": "Mastodon is free open-source software. You can report bugs, request features, or contribute to the code on {github}.", "onboarding.page_six.github": "Mastodon on ilmainen, vapaan lähdekoodin ohjelma. Voit raportoida bugeja, pyytää ominaisuuksia tai osallistua kehittämiseen GitHub-palvelussa: {github}.",
"onboarding.page_six.guidelines": "yhteisön säännöt", "onboarding.page_six.guidelines": "yhteisön säännöt",
"onboarding.page_six.read_guidelines": "Ole hyvä ja lue {domain}:n {guidelines}!", "onboarding.page_six.read_guidelines": "Ole hyvä ja lue {domain}:n {guidelines}!",
"onboarding.page_six.various_app": "mobiilisovellukset", "onboarding.page_six.various_app": "mobiilisovellukset",
@ -254,12 +254,12 @@
"status.sensitive_warning": "Arkaluontoista sisältöä", "status.sensitive_warning": "Arkaluontoista sisältöä",
"status.share": "Jaa", "status.share": "Jaa",
"status.show_less": "Näytä vähemmän", "status.show_less": "Näytä vähemmän",
"status.show_less_all": "Show less for all", "status.show_less_all": "Näytä vähemmän kaikista",
"status.show_more": "Näytä lisää", "status.show_more": "Näytä lisää",
"status.show_more_all": "Show more for all", "status.show_more_all": "Näytä enemmän kaikista",
"status.unmute_conversation": "Poista mykistys keskustelulta", "status.unmute_conversation": "Poista mykistys keskustelulta",
"status.unpin": "Irrota profiilista", "status.unpin": "Irrota profiilista",
"tabs_bar.federated_timeline": "Federated", "tabs_bar.federated_timeline": "Yleinen",
"tabs_bar.home": "Koti", "tabs_bar.home": "Koti",
"tabs_bar.local_timeline": "Paikallinen", "tabs_bar.local_timeline": "Paikallinen",
"tabs_bar.notifications": "Ilmoitukset", "tabs_bar.notifications": "Ilmoitukset",

@ -18,7 +18,7 @@
"account.muted": "Utíšený/á", "account.muted": "Utíšený/á",
"account.posts": "Hlášky", "account.posts": "Hlášky",
"account.posts_with_replies": "Príspevky s odpoveďami", "account.posts_with_replies": "Príspevky s odpoveďami",
"account.report": "Nahlás @{name}", "account.report": "Nahlás @{name}",
"account.requested": "Čaká na schválenie. Kliknite pre zrušenie žiadosti", "account.requested": "Čaká na schválenie. Kliknite pre zrušenie žiadosti",
"account.share": "Zdieľať @{name} profil", "account.share": "Zdieľať @{name} profil",
"account.show_reblogs": "Zobraziť povýšenia od @{name}", "account.show_reblogs": "Zobraziť povýšenia od @{name}",
@ -35,13 +35,13 @@
"bundle_modal_error.close": "Zatvoriť", "bundle_modal_error.close": "Zatvoriť",
"bundle_modal_error.message": "Nastala chyba pri načítaní tohto komponentu.", "bundle_modal_error.message": "Nastala chyba pri načítaní tohto komponentu.",
"bundle_modal_error.retry": "Skúsiť znova", "bundle_modal_error.retry": "Skúsiť znova",
"column.blocks": "Blokovaní používatelia", "column.blocks": "Blokovaní užívatelia",
"column.community": "Lokálna časová os", "column.community": "Lokálna časová os",
"column.favourites": "Obľúbené", "column.favourites": "Obľúbené",
"column.follow_requests": "Žiadosti o sledovaní", "column.follow_requests": "Žiadosti o sledovaní",
"column.home": "Domov", "column.home": "Domov",
"column.lists": "Zoznamy", "column.lists": "Zoznamy",
"column.mutes": "Ignorovaní používatelia", "column.mutes": "Ignorovaní užívatelia",
"column.notifications": "Notifikácie", "column.notifications": "Notifikácie",
"column.pins": "Pripnuté toots", "column.pins": "Pripnuté toots",
"column.public": "Federovaná časová os", "column.public": "Federovaná časová os",
@ -50,20 +50,20 @@
"column_header.moveLeft_settings": "Presunúť stĺpec doľava", "column_header.moveLeft_settings": "Presunúť stĺpec doľava",
"column_header.moveRight_settings": "Presunúť stĺpec doprava", "column_header.moveRight_settings": "Presunúť stĺpec doprava",
"column_header.pin": "Pripnúť", "column_header.pin": "Pripnúť",
"column_header.show_settings": "Ukázať nastavenia", "column_header.show_settings": "Ukáž nastavenia",
"column_header.unpin": "Odopnúť", "column_header.unpin": "Odopnúť",
"column_subheading.navigation": "Navigácia", "column_subheading.navigation": "Navigácia",
"column_subheading.settings": "Nastavenia", "column_subheading.settings": "Nastavenia",
"compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné toots môžu byť nájdené podľa haštagu.", "compose_form.hashtag_warning": "Tento toot nebude zobrazený pod žiadným haštagom lebo nieje listovaný. Iba verejné tooty môžu byť nájdené podľa haštagu.",
"compose_form.lock_disclaimer": "Váš účet nie je zamknutý. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.", "compose_form.lock_disclaimer": "Váš účet nie je zamknutý. Ktokoľvek ťa môže nasledovať a vidieť tvoje správy pre sledujúcich.",
"compose_form.lock_disclaimer.lock": "zamknutý", "compose_form.lock_disclaimer.lock": "zamknutý",
"compose_form.placeholder": "Na čo myslíš?", "compose_form.placeholder": "Na čo myslíš?",
"compose_form.publish": "Toot", "compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.marked": "Media is marked as sensitive", "compose_form.sensitive.marked": "Médiálny obsah je označený ako chúlostivý",
"compose_form.sensitive.unmarked": "Media is not marked as sensitive", "compose_form.sensitive.unmarked": "Médiálny obsah nieje označený ako chúlostivý",
"compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.marked": "Text je ukrytý za varovaním",
"compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler.unmarked": "Text nieje ukrytý",
"compose_form.spoiler_placeholder": "Sem napíšte vaše varovanie", "compose_form.spoiler_placeholder": "Sem napíšte vaše varovanie",
"confirmation_modal.cancel": "Zrušiť", "confirmation_modal.cancel": "Zrušiť",
"confirmations.block.confirm": "Blokovať", "confirmations.block.confirm": "Blokovať",
@ -101,14 +101,14 @@
"empty_column.list": "Tento zoznam je ešte prázdny. Keď ale členovia tohoto zoznamu napíšu nové správy, tak tie sa objavia priamo tu.", "empty_column.list": "Tento zoznam je ešte prázdny. Keď ale členovia tohoto zoznamu napíšu nové správy, tak tie sa objavia priamo tu.",
"empty_column.notifications": "Nemáte ešte žiadne notifikácie. Napíšte niekomu, následujte niekoho a komunikujte s ostatnými aby diskusia mohla začať.", "empty_column.notifications": "Nemáte ešte žiadne notifikácie. Napíšte niekomu, následujte niekoho a komunikujte s ostatnými aby diskusia mohla začať.",
"empty_column.public": "Ešte tu nič nie je. Napíšte niečo verejne alebo začnite sledovať používateľov z iných Mastodon serverov aby tu niečo pribudlo", "empty_column.public": "Ešte tu nič nie je. Napíšte niečo verejne alebo začnite sledovať používateľov z iných Mastodon serverov aby tu niečo pribudlo",
"follow_request.authorize": "Povoliť prístup", "follow_request.authorize": "Povoľ prístup",
"follow_request.reject": "Odmietnúť", "follow_request.reject": "Odmietni",
"getting_started.appsshort": "Aplikácie", "getting_started.appsshort": "Aplikácie",
"getting_started.faq": "FAQ", "getting_started.faq": "Časté otázky",
"getting_started.heading": "Začíname", "getting_started.heading": "Začni tu",
"getting_started.open_source_notice": "Mastodon má otvorený kód. Nahlásiť chyby, alebo prispievať vlastným kódom môžete na GitHube v {github}.", "getting_started.open_source_notice": "Mastodon má otvorený kód. Nahlásiť chyby, alebo prispievať vlastným kódom môžete na GitHube v {github}.",
"getting_started.userguide": "Používateľská príručka", "getting_started.userguide": "Používateľská príručka",
"home.column_settings.advanced": "Rozšírené", "home.column_settings.advanced": "Pokročilé",
"home.column_settings.basic": "Základné", "home.column_settings.basic": "Základné",
"home.column_settings.filter_regex": "Filtrovať použitím regulárnych výrazov", "home.column_settings.filter_regex": "Filtrovať použitím regulárnych výrazov",
"home.column_settings.show_reblogs": "Zobraziť povýšené", "home.column_settings.show_reblogs": "Zobraziť povýšené",
@ -147,7 +147,7 @@
"missing_indicator.label": "Nenájdené", "missing_indicator.label": "Nenájdené",
"missing_indicator.sublabel": "Tento zdroj sa nepodarilo nájsť", "missing_indicator.sublabel": "Tento zdroj sa nepodarilo nájsť",
"mute_modal.hide_notifications": "Skryť notifikácie od tohoto užívateľa?", "mute_modal.hide_notifications": "Skryť notifikácie od tohoto užívateľa?",
"navigation_bar.blocks": "Blokovaní používatelia", "navigation_bar.blocks": "Blokovaní užívatelia",
"navigation_bar.community_timeline": "Lokálna časová os", "navigation_bar.community_timeline": "Lokálna časová os",
"navigation_bar.edit_profile": "Upraviť profil", "navigation_bar.edit_profile": "Upraviť profil",
"navigation_bar.favourites": "Obľúbené", "navigation_bar.favourites": "Obľúbené",
@ -156,9 +156,9 @@
"navigation_bar.keyboard_shortcuts": "Klávesové skratky", "navigation_bar.keyboard_shortcuts": "Klávesové skratky",
"navigation_bar.lists": "Zoznamy", "navigation_bar.lists": "Zoznamy",
"navigation_bar.logout": "Odhlásiť", "navigation_bar.logout": "Odhlásiť",
"navigation_bar.mutes": "Ignorovaní používatelia", "navigation_bar.mutes": "Ignorovaní užívatelia",
"navigation_bar.pins": "Pripnuté toots", "navigation_bar.pins": "Pripnuté toots",
"navigation_bar.preferences": "Možnosti", "navigation_bar.preferences": "Voľby",
"navigation_bar.public_timeline": "Federovaná časová os", "navigation_bar.public_timeline": "Federovaná časová os",
"notification.favourite": "{name} sa páči tvoj status", "notification.favourite": "{name} sa páči tvoj status",
"notification.follow": "{name} ťa začal/a následovať", "notification.follow": "{name} ťa začal/a následovať",
@ -254,9 +254,9 @@
"status.sensitive_warning": "Chúlostivý obsah", "status.sensitive_warning": "Chúlostivý obsah",
"status.share": "Zdieľať", "status.share": "Zdieľať",
"status.show_less": "Zobraz menej", "status.show_less": "Zobraz menej",
"status.show_less_all": "Show less for all", "status.show_less_all": "Všetkým ukáž menej",
"status.show_more": "Zobraz viac", "status.show_more": "Zobraz viac",
"status.show_more_all": "Show more for all", "status.show_more_all": "Všetkým ukáž viac",
"status.unmute_conversation": "Prestať ignorovať konverzáciu", "status.unmute_conversation": "Prestať ignorovať konverzáciu",
"status.unpin": "Odopnúť z profilu", "status.unpin": "Odopnúť z profilu",
"tabs_bar.federated_timeline": "Federovaná", "tabs_bar.federated_timeline": "Federovaná",

@ -60,10 +60,10 @@
"compose_form.placeholder": "Vad funderar du på?", "compose_form.placeholder": "Vad funderar du på?",
"compose_form.publish": "Toot", "compose_form.publish": "Toot",
"compose_form.publish_loud": "{publish}!", "compose_form.publish_loud": "{publish}!",
"compose_form.sensitive.marked": "Media is marked as sensitive", "compose_form.sensitive.marked": "Media har markerats som känsligt",
"compose_form.sensitive.unmarked": "Media is not marked as sensitive", "compose_form.sensitive.unmarked": "Media har inte markerats som känsligt",
"compose_form.spoiler.marked": "Text is hidden behind warning", "compose_form.spoiler.marked": "Texten har dolts bakom en varning",
"compose_form.spoiler.unmarked": "Text is not hidden", "compose_form.spoiler.unmarked": "Texten är inte dold",
"compose_form.spoiler_placeholder": "Skriv din varning här", "compose_form.spoiler_placeholder": "Skriv din varning här",
"confirmation_modal.cancel": "Ångra", "confirmation_modal.cancel": "Ångra",
"confirmations.block.confirm": "Blockera", "confirmations.block.confirm": "Blockera",
@ -254,9 +254,9 @@
"status.sensitive_warning": "Känsligt innehåll", "status.sensitive_warning": "Känsligt innehåll",
"status.share": "Dela", "status.share": "Dela",
"status.show_less": "Visa mindre", "status.show_less": "Visa mindre",
"status.show_less_all": "Show less for all", "status.show_less_all": "Visa mindre för alla",
"status.show_more": "Visa mer", "status.show_more": "Visa mer",
"status.show_more_all": "Show more for all", "status.show_more_all": "Visa mer för alla",
"status.unmute_conversation": "Öppna konversation", "status.unmute_conversation": "Öppna konversation",
"status.unpin": "Ångra fäst i profil", "status.unpin": "Ångra fäst i profil",
"tabs_bar.federated_timeline": "Förenad", "tabs_bar.federated_timeline": "Förenad",

@ -351,7 +351,7 @@ class OStatus::AtomSerializer
append_element(entry, 'summary', status.spoiler_text, 'xml:lang': status.language) if status.spoiler_text? append_element(entry, 'summary', status.spoiler_text, 'xml:lang': status.language) if status.spoiler_text?
append_element(entry, 'content', Formatter.instance.format(status).to_str, type: 'html', 'xml:lang': status.language) append_element(entry, 'content', Formatter.instance.format(status).to_str, type: 'html', 'xml:lang': status.language)
status.mentions.each do |mentioned| status.mentions.order(:id).each do |mentioned|
append_element(entry, 'link', nil, rel: :mentioned, 'ostatus:object-type': OStatus::TagManager::TYPES[:person], href: OStatus::TagManager.instance.uri_for(mentioned.account)) append_element(entry, 'link', nil, rel: :mentioned, 'ostatus:object-type': OStatus::TagManager::TYPES[:person], href: OStatus::TagManager.instance.uri_for(mentioned.account))
end end

@ -52,6 +52,8 @@ class User < ApplicationRecord
devise :registerable, :recoverable, :rememberable, :trackable, :validatable, devise :registerable, :recoverable, :rememberable, :trackable, :validatable,
:confirmable :confirmable
devise :pam_authenticatable if ENV['PAM_ENABLED'] == 'true'
devise :omniauthable devise :omniauthable
belongs_to :account, inverse_of: :user belongs_to :account, inverse_of: :user
@ -96,7 +98,7 @@ class User < ApplicationRecord
def pam_conflict? def pam_conflict?
return false unless Devise.pam_authentication return false unless Devise.pam_authentication
encrypted_password.present? && is_pam_account? encrypted_password.present? && pam_managed_user?
end end
def pam_get_name def pam_get_name
@ -267,7 +269,7 @@ class User < ApplicationRecord
end end
def self.pam_get_user(attributes = {}) def self.pam_get_user(attributes = {})
if attributes[:email] return nil unless attributes[:email]
resource = resource =
if Devise.check_at_sign && !attributes[:email].index('@') if Devise.check_at_sign && !attributes[:email].index('@')
joins(:account).find_by(accounts: { username: attributes[:email] }) joins(:account).find_by(accounts: { username: attributes[:email] })
@ -278,12 +280,12 @@ class User < ApplicationRecord
if resource.blank? if resource.blank?
resource = new(email: attributes[:email]) resource = new(email: attributes[:email])
if Devise.check_at_sign && !resource[:email].index('@') if Devise.check_at_sign && !resource[:email].index('@')
resource[:email] = "#{attributes[:email]}@#{resource.find_pam_suffix}" resource[:email] = Rpam2.getenv(resource.find_pam_service, attributes[:email], attributes[:password], 'email', false)
resource[:email] = "#{attributes[:email]}@#{resource.find_pam_suffix}" unless resource[:email]
end end
end end
resource resource
end end
end
def self.ldap_get_user(attributes = {}) def self.ldap_get_user(attributes = {})
resource = joins(:account).find_by(accounts: { username: attributes[Devise.ldap_uid.to_sym].first }) resource = joins(:account).find_by(accounts: { username: attributes[Devise.ldap_uid.to_sym].first })

@ -57,7 +57,7 @@ class ActivityPub::NoteSerializer < ActiveModel::Serializer
end end
def virtual_tags def virtual_tags
object.mentions + object.tags + object.emojis object.mentions.order(:id) + object.tags + object.emojis
end end
def atom_uri def atom_uri

@ -15,7 +15,7 @@ class REST::StatusSerializer < ActiveModel::Serializer
belongs_to :account, serializer: REST::AccountSerializer belongs_to :account, serializer: REST::AccountSerializer
has_many :media_attachments, serializer: REST::MediaAttachmentSerializer has_many :media_attachments, serializer: REST::MediaAttachmentSerializer
has_many :mentions has_many :ordered_mentions, key: :mentions
has_many :tags has_many :tags
has_many :emojis, serializer: REST::CustomEmojiSerializer has_many :emojis, serializer: REST::CustomEmojiSerializer
@ -86,6 +86,10 @@ class REST::StatusSerializer < ActiveModel::Serializer
%w(public unlisted).include?(object.visibility) %w(public unlisted).include?(object.visibility)
end end
def ordered_mentions
object.mentions.order(:id)
end
class ApplicationSerializer < ActiveModel::Serializer class ApplicationSerializer < ActiveModel::Serializer
attributes :name, :website attributes :name, :website
end end

@ -24,6 +24,11 @@
%bdi= display_name(status.account) %bdi= display_name(status.account)
= "@#{status.account.acct}" = "@#{status.account.acct}"
- if status.spoiler_text?
%div{ dir: rtl_status?(status) ? 'rtl' : 'ltr' }
%p
= Formatter.instance.format_spoiler(status)
%div{ dir: rtl_status?(status) ? 'rtl' : 'ltr' } %div{ dir: rtl_status?(status) ? 'rtl' : 'ltr' }
= Formatter.instance.format(status) = Formatter.instance.format(status)

@ -1,3 +1,8 @@
<% if status.spoiler_text? %>
<%= raw status.spoiler_text %>
----
<% end %>
<%= raw Formatter.instance.plaintext(status) %> <%= raw Formatter.instance.plaintext(status) %>
<%= raw t('application_mailer.view')%> <%= web_url("statuses/#{status.id}") %> <%= raw t('application_mailer.view')%> <%= web_url("statuses/#{status.id}") %>

@ -38,7 +38,7 @@
%table.input{ align: 'center', cellspacing: 0, cellpadding: 0 } %table.input{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody %tbody
%tr %tr
%td= @resource.unconfirmed_email %td= @resource.try(:unconfirmed_email) ? @resource.unconfirmed_email : @resource.email
%table.email-table{ cellspacing: 0, cellpadding: 0 } %table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody %tbody

@ -4,6 +4,6 @@
<%= t 'devise.mailer.email_changed.explanation' %> <%= t 'devise.mailer.email_changed.explanation' %>
<%= @resource.unconfirmed_email %> <%= @resource.try(:unconfirmed_email) ? @resource.unconfirmed_email : @resource.email %>
<%= t 'devise.mailer.email_changed.extra' %> <%= t 'devise.mailer.email_changed.extra' %>

@ -17,6 +17,8 @@ require_relative '../lib/devise/ldap_authenticatable'
Dotenv::Railtie.load Dotenv::Railtie.load
Bundler.require(:pam_authentication) if ENV['PAM_ENABLED'] == 'true'
require_relative '../lib/mastodon/redis_config' require_relative '../lib/mastodon/redis_config'
module Mastodon module Mastodon

@ -342,7 +342,7 @@ Devise.setup do |config|
config.usernamefield = nil config.usernamefield = nil
config.emailfield = 'email' config.emailfield = 'email'
config.check_at_sign = true config.check_at_sign = true
config.pam_default_suffix = ENV.fetch('PAM_DEFAULT_SUFFIX') { nil } config.pam_default_suffix = ENV.fetch('PAM_EMAIL_DOMAIN') { ENV['LOCAL_DOMAIN'] }
config.pam_default_service = ENV.fetch('PAM_DEFAULT_SERVICE') { 'rpam' } config.pam_default_service = ENV.fetch('PAM_DEFAULT_SERVICE') { 'rpam' }
config.pam_controlled_service = ENV.fetch('PAM_CONTROLLED_SERVICE') { nil } config.pam_controlled_service = ENV.fetch('PAM_CONTROLLED_SERVICE') { nil }
end end

@ -513,6 +513,8 @@ ar:
over_character_limit: تم تجاوز حد الـ %{max} حرف المسموح بها over_character_limit: تم تجاوز حد الـ %{max} حرف المسموح بها
pin_errors: pin_errors:
ownership: لا يمكن تدبيس تبويق نشره شخص آخر ownership: لا يمكن تدبيس تبويق نشره شخص آخر
private: لا يمكن تثبيت تبويق لم يُنشر للعامة
reblog: لا يمكن تثبيت ترقية
show_more: أظهر المزيد show_more: أظهر المزيد
title: '%{name} : "%{quote}"' title: '%{name} : "%{quote}"'
visibilities: visibilities:
@ -524,6 +526,7 @@ ar:
unlisted_long: يُمكن لأيٍ كان رُؤيتَه و لكن لن يُعرَض على الخيوط العامة unlisted_long: يُمكن لأيٍ كان رُؤيتَه و لكن لن يُعرَض على الخيوط العامة
stream_entries: stream_entries:
click_to_show: إضغط للعرض click_to_show: إضغط للعرض
pinned: تبويق مثبّت
reblogged: رقى reblogged: رقى
sensitive_content: محتوى حساس sensitive_content: محتوى حساس
terms: terms:

@ -275,6 +275,7 @@ es:
username: Nombre de usuario username: Nombre de usuario
hero: hero:
desc_html: Mostrado en la página principal. Recomendable al menos 600x100px. Por defecto se establece a la miniatura de la instancia desc_html: Mostrado en la página principal. Recomendable al menos 600x100px. Por defecto se establece a la miniatura de la instancia
title: Imagen de portada
peers_api_enabled: peers_api_enabled:
desc_html: Nombres de dominio que esta instancia ha encontrado en el fediverso desc_html: Nombres de dominio que esta instancia ha encontrado en el fediverso
title: Publicar lista de instancias descubiertas title: Publicar lista de instancias descubiertas

@ -4,13 +4,19 @@ fi:
hints: hints:
defaults: defaults:
avatar: PNG, GIF tai JPG. Korkeintaan 2MB. Skaalataan kokoon 400x400px avatar: PNG, GIF tai JPG. Korkeintaan 2MB. Skaalataan kokoon 400x400px
digest: Lähetetään vain pitkän poissaolon jälkeen, ja vain jos olet vastaanottanut yksityisviestejä poissaolosi aikana. digest: Lähetetään vain pitkän poissaolon jälkeen, ja vain jos olet vastaanottanut yksityisviestejä poissaolosi aikana
display_name: Korkeintaan 30 merkkiä display_name: Korkeintaan 30 merkkiä
header: PNG, GIF tai JPG. Korkeintaan 2MB. Skaalataan kokoon 700x335px header: PNG, GIF tai JPG. Korkeintaan 2MB. Skaalataan kokoon 700x335px
locked: Vaatii sinun manuaalisesti hyväksymään seuraajat, ja asettaa julkaisujen yksityisyyden vain seuraajille locked: Vaatii sinua manuaalisesti hyväksymään seuraajat
note: Korkeintaan 160 merkkiä note: Korkeintaan 160 merkkiä
setting_noindex: Vaikuttaa julkiseen profiiliisi ja statuspäivityksiisi
setting_theme: Vaikuttaa siihen, miltä Mastodon näyttää kun olet kirjautuneena milllä tahansa laitteella.
imports: imports:
data: CSV tiedosto tuotu toiselta Mastodon palvelimelta data: CSV tiedosto, joka on tuotu toiselta Mastodon-palvelimelta
sessions:
otp: Syötä kaksivaiheisen tunnistuksen koodi puhelimestasi tai käytä yhtä palautuskoodeistasi.
user:
filtered_languages: Valitut kielet suodatetaan julkisilta aikajanoilta
labels: labels:
defaults: defaults:
avatar: Profiilikuva avatar: Profiilikuva
@ -18,22 +24,37 @@ fi:
confirm_password: Varmista salasana confirm_password: Varmista salasana
current_password: Nykyinen salasana current_password: Nykyinen salasana
data: Data data: Data
display_name: Näykyvä nimi display_name: Nimimerkki
email: Sähköpostiosoite email: Sähköpostiosoite
header: Otsake expires_in: Vanhentuu
filtered_languages: Suodatetut kielet
header: Otsakekuva
locale: Kieli locale: Kieli
locked: Tee tilistä yksityinen locked: Tee tilistä yksityinen
max_uses: Max käyttökerrat max_uses: Max käyttökerrat
new_password: Uusi salasana new_password: Uusi salasana
note: Bio note: Kuvaus
otp_attempt: Kaksivaiheinen koodi otp_attempt: Kaksivaiheinen koodi
password: Salasana password: Salasana
setting_auto_play_gif: Animoitujen GIFfien automaattitoisto
setting_boost_modal: Näytä vahvistusikkuna ennen boostausta
setting_default_privacy: Julkaisun yksityisyys setting_default_privacy: Julkaisun yksityisyys
setting_default_sensitive: Merkitse media aina arkaluontoiseksi
setting_delete_modal: Näytä vahvistusikkuna ennen töötin poistamista
setting_display_sensitive_media: Näytä aina arkaluontoiseksi merkitty media
setting_noindex: Jättäydy pois hakukoneindeksoinnista
setting_reduce_motion: Vähennä liikettä animaatioissa
setting_system_font_ui: Käytä käyttöjärjestelmän oletusfonttia
setting_theme: Sivuston teema
setting_unfollow_modal: Näytä vahvistusikkuna ennen seuraamisen lopettamista
severity: Vakavuusaste
type: Tuontityyppi type: Tuontityyppi
username: Käyttäjänimi username: Käyttäjänimi
username_or_email: Käyttäjänimi tai sähköposti
interactions: interactions:
must_be_follower: Estä ilmoitukset käyttäjiltä jotka eivät seuraa sinua must_be_follower: Estä ilmoitukset käyttäjiltä, jotka eivät seuraa sinua
must_be_following: Estä ilmoitukset käyttäjiltä joita et seuraa must_be_following: Estä ilmoitukset käyttäjiltä, joita et seuraa
must_be_following_dm: Estä suorat viestit ihmisiltä, joita et seuraa
notification_emails: notification_emails:
digest: Lähetä koosteviestejä sähköpostilla digest: Lähetä koosteviestejä sähköpostilla
favourite: Lähetä sähköposti, kun joku tykkää statuksestasi favourite: Lähetä sähköposti, kun joku tykkää statuksestasi
@ -44,5 +65,5 @@ fi:
'no': Ei 'no': Ei
required: required:
mark: "*" mark: "*"
text: vaaditaan text: pakollinen tieto
'yes': Kyllä 'yes': Kyllä

@ -593,7 +593,7 @@ sk:
title: Sezóna title: Sezóna
settings: settings:
authorized_apps: Autorizované aplikácie authorized_apps: Autorizované aplikácie
back: Naspäť na stránku back: Späť do Mastodonu
delete: Zmazanie účtu delete: Zmazanie účtu
development: Vývoj development: Vývoj
edit_profile: Upraviť profil edit_profile: Upraviť profil
@ -630,8 +630,15 @@ sk:
title: Podmienky užívania, a pravidlá o súkromí pre %{instance} title: Podmienky užívania, a pravidlá o súkromí pre %{instance}
two_factor_authentication: two_factor_authentication:
enable: Povoliť enable: Povoliť
enabled: Dvoj-faktorové overovanie je povolené
enabled_success: Dvoj-faktorové overovanie bolo úspešne povolené
generate_recovery_codes: Vygeneruj zálohové kódy generate_recovery_codes: Vygeneruj zálohové kódy
lost_recovery_codes: Zálohové kódy ti umožnia dostať sa k svojmu účtu ak stratíš telefón. Pokiaľ si stratila svoje zálohové kódy, môžeš si ich tu znovu vygenerovať. Tvoje staré zálohové kódy budú zneplatnené.
manual_instructions: 'Pokiaľ nemôžeš oskenovať daný QR kód, a potrebuješ ho zadať ručne, tu je tajomstvo v textovom formáte:'
recovery_codes: Zálohuj kódy pre obnovu
recovery_codes_regenerated: Zálohové kódy boli úspešne zvova vygenerované
setup: Nastavenie setup: Nastavenie
wrong_code: Zadaný kód bol neplatný. Je serverový čas a čas na zariadení správny?
user_mailer: user_mailer:
backup_ready: backup_ready:
explanation: Vyžiadal/a si si úplnú zálohu tvojho Mastodon účtu. Táto záloha je teraz pripravená na stiahnutie! explanation: Vyžiadal/a si si úplnú zálohu tvojho Mastodon účtu. Táto záloha je teraz pripravená na stiahnutie!
@ -639,12 +646,17 @@ sk:
title: Odber archívu title: Odber archívu
welcome: welcome:
edit_profile_action: Nastav profil edit_profile_action: Nastav profil
edit_profile_step: Profil si môžeš prispôsobiť nahratím portrétu a hlavičky, môžeš upraviť svoje meno a viac. Pokiaľ chceš preverovať nových následovateľov predtým než ťa budú môcť sledovať, môžeš uzamknúť svoj účet.
explanation: Tu nájdeš nejaké tipy do začiatku explanation: Tu nájdeš nejaké tipy do začiatku
final_action: Začni prispievať final_action: Začni prispievať
final_step: 'Začnite písať! Aj bez následovníkov budú vaše verejné správy videné ostatnými, napríklad na lokálnej osi a pod haštagmi. Môžete sa ostatným predstaviť pod haštagom #introductions.' final_step: 'Začnite písať! Aj bez následovníkov budú vaše verejné správy videné ostatnými, napríklad na lokálnej osi a pod haštagmi. Môžete sa ostatným predstaviť pod haštagom #introductions.'
full_handle: Adresa tvojho profilu v celom formáte full_handle: Adresa tvojho profilu v celom formáte
full_handle_hint: Toto je čo musíš dať vedieť svojím priateľom aby ti mohli posielať správy, alebo ťa následovať z inej instancie.
review_preferences_action: Zmeniť nastavenia review_preferences_action: Zmeniť nastavenia
subject: Vitaj na Mastodone subject: Vitaj na Mastodone
tip_bridge_html: Ak prichádzaš z Twitteru, môžeš svojích priateľov nájsť na Mastodone pomocou tzv. <a href="%{bridge_url}">mostíkovej aplikácie</a>. Ale tá funguje iba ak ju aj oni niekedy použili!
tip_federated_timeline: Federovaná os zobrazuje sieť Mastodonu až po jej hranice. Ale zahŕňa iba ľúdí ktorých ostatní okolo teba sledujú, takže predsa nieje úplne celistvá.
tip_following: Správcu servera následuješ automaticky. Môžeš ale nájsť mnoho iných zaujímavých ľudí ak prezrieš tak lokálnu, ako aj globálne federovanú os.
tip_local_timeline: Lokálna os je celkový pohľad na aktivitu užívateľov %{instance}. Toto sú tvoji najbližší susedia! tip_local_timeline: Lokálna os je celkový pohľad na aktivitu užívateľov %{instance}. Toto sú tvoji najbližší susedia!
tip_mobile_webapp: Pokiaľ ti prehliadač ponúkne možnosť pridať Mastodon na tvoju obrazovku, môžeš potom dostávať notifikácie skoro ako z natívnej aplikácie! tip_mobile_webapp: Pokiaľ ti prehliadač ponúkne možnosť pridať Mastodon na tvoju obrazovku, môžeš potom dostávať notifikácie skoro ako z natívnej aplikácie!
tips: Tipy tips: Tipy

@ -21,7 +21,7 @@ module Mastodon
end end
def flags def flags
'rc2' 'rc3'
end end
def to_a def to_a

Loading…
Cancel
Save