-
-
Notifications
You must be signed in to change notification settings - Fork 7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
pam authentication #5303
pam authentication #5303
Conversation
Should work now. Sry, I forgot to test. |
@devkral test suite is still failing pal! |
I will have a look. I ran the test suite without problems. I think its the deliberately missing schema.db update (MR conflicts are pre-programmed and many people hate updates there) |
I cannot install the hiredis-rb gem. It is delaying the fix. |
it was the missing schema.rb entry. |
Is everything ok now? |
I really like this feature, but I have not conceived that we should add a column for this. The configuration is helpful in certain uses, but such configuration should be still rare. |
I think about two-way logins (and registrations): you can either login or register the conventional way or with pam. If you don't have an extra column it opens security holes and complicates the implementation. |
Can someone explain what PAM is, where it is used, and what the importance of it is? |
Imagine PAM as local omniauth just much more powerful. You can have complex rulesets via servicefiles with multiple authentication providers (e.g. fingerprint, local password, ldap, kerberos), environment setup and much more. Just look it up. It would be very useful for all kinds of organisations or people who want to be able to login with their normal user account, e.g. shared servers, local computer. |
rebased |
I understand your concern and your solution would work perfectly to addres it. But my concern is not really about PAM configuration, but about other configurations not using PAM. The table ( |
How big is the bloat? Can the databases optimize it out? |
Further alternatives: switch between both modis with a special email domain or a pam flag for the user. |
Pawoo probably has the largest population (310,931 users). Adding an extra column is not so problematic for the scale. I admit that it is just not my preference. 😕 |
Ignore the deleted comment, I did misread it. But still if you have a better proposal just say :). |
I found a better solution without pam_name: We use my fork: |
here is the result (needs some tests) (I will switch to this later): differences:
|
app/models/user.rb
Outdated
|
||
# cannot use :validate because pam needs seperate validation | ||
validates :email, uniqueness: true | ||
if Devise.activerecord51? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We know we are on Rails >= 5.1, this shouldn't be necessary?
@@ -0,0 +1,5 @@ | |||
class AddPamNameToUsers < ActiveRecord::Migration[5.1] | |||
def change | |||
add_column :users, :pam_name, :string, null: true, default: nil |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You have a unique validation on this column, but it's not safe against race conditions. I suggest a unique index as a db-level constraint.
config/initializers/devise.rb
Outdated
module Strategies | ||
class PamUserAuthenticatable < Authenticatable | ||
def valid? | ||
Devise.pam_authentication && params[scope] && params[scope][:email] && !params[scope][:email].index('@') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
People could have e-mails as LDAP identifiers, couldn't they?
I am against having both registrations and PAM at the same time, if PAM is active all logins should go through it - at least that's the LDAP principle from other PRs if I remember correctly.
config/initializers/devise.rb
Outdated
@@ -298,4 +343,9 @@ | |||
# When using OmniAuth, Devise cannot automatically set OmniAuth path, | |||
# so you need to do it manually. For the users scope, it would be: | |||
# config.omniauth_path_prefix = '/my_engine/users/auth' | |||
|
|||
# authentification with pam possible | |||
#config.pam_authentication = true |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This and the one below should probably become ENV variables so people don't have to edit source code to configure it.
@@ -51,6 +51,7 @@ en: | |||
severity: Severity | |||
type: Import type | |||
username: Username | |||
username_or_email: Username or Email |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't see which form uses this label but it's again my concern about mixing PAM-users and registration-users.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you have to uncomment config.pam_authentication = true in initializers.
This feature is optional.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the login form uses it. It may wasn't there because of indentation issues.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
everything ok now? Or shall I change something?
sry for overwriting. This is a new version having nearly nothing in common with the old version |
c2c7344
to
99e1192
Compare
e2c5c49
to
41dedc2
Compare
for a clean solution I added the remember_token column. With it a password is not necessary anymore |
I hope I understood the http_authenticatable method correctly. Can please somebody check it? |
This reverts commit 8e7a083.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am approving this but I really want a second opinion. I am not entirely happy with PAM configuration being hardcoded into an initializer, since all other settings are controllable via environment variables. Docker deployments would not be able to easily configure these. I am expecting future PRs to modify some parts of this functionality before the next release.
This is a great job, thanks @devkral |
Turns out we need some kind of system level dependency for the rpam2 gem to install. We should make this optional as PAM users will be a minority... |
this is required for native extensions of gems to build after the addition of PAM support was added in mastodon#5303
* upgrade vagrant box to xenial this allows the redis version to be upgraded to support the new redis features used in the activity tracker * add libpam0g package to vagrant box this is required for native extensions of gems to build after the addition of PAM support was added in mastodon#5303
* fix ruby 2.5 rvm install in vagrant (#6396) RVM has a known issue with installing Ruby 2.5 on the version of Ubuntu the Vagrant box is using: https://github.com/rvm/rvm/issues/4291 This bug was preventing any gem installs in the vagrant box * Russian language updated (#6397) * Fix button hiding when header title is too long (#6406) * Upgrade Paperclip > 5.2.1 (#6404) Mitigation for CVE-2017-0889. https://www.cvedetails.com/cve/CVE-2017-0889/ https://medium.com/in-the-weeds/all-about-paperclips-cve-2017-0889-server-side-request-forgery-ssrf-vulnerability-8cb2b1c96fe8 * Fix mistake in cache deletion (#6408) * pam authentication (#5303) * add pam support, without extra column * bugfixes for pam login * document options * fix code style * fix codestyle * fix tests * don't call remember_me without password * fix codestyle * improve checks for pam usage (should fix tests) * fix remember_me part 1 * add remember_token column because :rememberable requires either a password or this column. * migrate db for remember_token * move pam_authentication to the right place, fix logic bug in edit.html.haml * fix tests * fix pam authentication, improve username lookup, add comment * valid? is sometimes not honored, return nil instead trying to authenticate with pam * update devise_pam_authenticatable2 and adjust code. Fixes sideeffects observed in tests * update devise_pam_authenticatable gem, fixes for codeconventions, fix finding user * codeconvention fixes * code convention fixes * fix idention * update dependency, explicit conflict check * fix disabled password updates if in pam mode * fix check password if password is present, fix templates * block registration if account is maintained by pam * Revert "block registration if account is maintained by pam" This reverts commit 8e7a083d650240b6fac414926744b4b90b435f20. * fix identation error introduced by rebase * block usernames maintained by pam * document pam settings better * fix code style * Allow retrieval of private statuses (single or in outbox) using HTTP signatures (#6225) * Accept ActivityPub announce from the author of the original note (#6236) * Unify links container implementation in about pages (#6382) They were redundant, and also had a inconsistency; the button for "other instances" had an icon for the external link in "more" page, but it didn't in the other pages. This unifies the implementation, and the external link icon is now shown in all the about pages. * Remove wave from list drawer (#6381) * moved save button (#3792) * moved save button * added save back to the bottom * Update show.html.haml * Allow HTTP caching of atom-rendered public toots (OStatus compatibility) (#6207) * Set minimum height for mastodon on drawer (#6142) * Fix saving of oEmbed image (#6409) * Fix column header button (#6411) * Require environment for generate_static_pages (#6420) It is required for ApplicationController. * fix ColumnBackButtonSlim should extended from ColumnBackButton (#6417) * Isolate internal services from external networks in Docker configuration (#6369) The database and Redis do not need external connections, so isolate them and prevent unauthorized access. * CAS + SAML authentication feature (#6425) * Cas authentication feature * Config * Remove class_eval + Omniauth initializer * Codeclimate review * Codeclimate review 2 * Codeclimate review 3 * Remove uid/email reconciliation * SAML authentication * Clean up code * Improve login form * Fix code style issues * Add locales * Add option to show only local toots in timeline preview (#6292) * Add option to show only local toots in timeline preview Right know, toots from all the known fediverse are shown in the main page of an instance. That however doesn't reflect the instance itself. With this option the admin may choose to display only local toots so that users checking the instance get a better idea of internal conversations. * Fix issues pointed by codeclimate and eslint * Add default message for community timeline * Update pl.yml * Upgrade Vagrant box to Xenial (#6421) * upgrade vagrant box to xenial this allows the redis version to be upgraded to support the new redis features used in the activity tracker * add libpam0g package to vagrant box this is required for native extensions of gems to build after the addition of PAM support was added in #5303 * Make sure status is not nil (#6428) * Exclude nil from relationships array (#6427) * Validation of count works even when text of status is nil (#6429) * Make PAM gem optional, allow configuration over environment (#6415) * match hashtag regex in js client with server (#6431) the slight mismatch in hashtag regex between js and ruby was causing hashtag warning to be displayed for unlisted tweets when an invalid hashtag was entered exact version of ruby regex not possible in js as POSIX bracket expressions are not supported, this version approximates and doesn't give same unicode support * Change user_id column non-nullable (#6435) * Added #link_header spec (#6439) * Fix response of signature_verification_failure_reason (#6441) * Clear account cache of notification target_status (#6442) * Perform request spec (#6446) * Added #link_header spec * Added #perform_request spec * Add preference to always display sensitive media (#6448) * Change web UI "posts" to "toots" on profile for consistency (#6447) * fix-indent (#6453) * Full-text search for authorized statuses (#6423) * Add full-text search for authorized statuses - Search API will return statuses that match the query - Only for logged in users - Only if you are author of the status, - Or you were mentioned in it - Or you favourited or reblogged it - Configuration over `ES_ENABLED`, `ES_HOST`, `ES_PORT`, `ES_PREFIX` - Run `rails chewy:deploy` to create & populate index Fix #5880 Fix #4293 Fix #1152 * Add commented out docker-compose configuration for ES container * Optimize index import, filter search results * Add basic normalization to the index * Add better stemming and normalization to the index * Skip webfinger request if search query includes both @ and a space * Fix code style * Visually separate search result sections * Fix code style issues * Added #call spec (#6455) * Added #link_header spec * Added #call spec * Delete spec of private methods * Fix password recovery (#6459) * Fix password recovery * Use “resource” instead of “current_user” * Added FetchRemoteAccountService spec (#6456) * Added #link_header spec * Added #call spec * Delete spec of private methods * Added #call spec * Interactive `rake mastodon:setup` task (#6451) * Add better CLI prompt * Add rake mastodon:setup interactive wizard * Test db/redis/smtp configurations and add admin user at the end * Test database connection even when database does not exist yet * Fix Chewy trying to update index with the wrong strategy (#6464) * Fix URLs incorrectly having trailing hyphen removed (#6465) In cases where a URL has a trailing hyphen the FetchLinkCardService incorrectly removes the hyphen when it is parsed The hyphen is not a reserved character in the URI spec https://tools.ietf.org/html/rfc3986#section-2.2 * i18n: Update Polish translation (#6470) Signed-off-by: Marcin Mikołajczak <[email protected]> * Fix media button type (#6478) * Fix #5173: Click card to embed external content (#6471) * After click to embed video, autoplay it (#6480) * Do not hide NSFW media/CW'd text in OpenGraph tags (#6479) Reasoning: HTML title tag affects everyone. But OpenGraph only affects when somebody is deliberately sharing the content, usually in an environment where such content is expected. Hiding the content in OpenGraph tags results in deceitful previews which inhibit the shareability of the post. Example: Somebody writes a clever post about politics but kindly puts a "uspol" content warning on it. Mastodon users are thankful, but sharing this post on another platform results in non-Mastodon users believing the entire contents of the post is "uspol" and not clicking through/reading and re-sharing. * Save video metadata and improve video OpenGraph tags (#6481) * Save metadata from video attachments, put correct dimensions into OG tags * Add twitter:player for videos * Fix code style and test * [Nanobox] Fix backups for file storage (#6483) * Fix Catalan translation of remote_follow acct (#6476) * Fix Spanish translation of remote_follow acct (#6475) * Limit the languages used for notification mailer test (#6487) Some available languages lack translations for notification mails. Now it tests for two languages which is certain to have required translations: German and English. German is the language the current project owner, Eugen Rochko speaks, and providing English translations for new messages is de facto mandatory. * Push discovered status through streaming API within a time window (#6484) Time window of 6 hours * Isolate each specs for cache store (#6450) The cache store is explicitly used by some specs, but they were not isolated and therefore not reliable. This fixes the issue by clearing the cache after each specs. * Cache relationships in API (#6482) * Cache relationships in API * Fetch relationships for search results in UI * Only save one account's maps in each cache item * Remove unnecessary g++ configuration (#6499) * Remove outline from body window (Fixes #6501) (#6502) * Added fetch_remote_status_service call spec case actibitypub (#6500) * Added #link_header spec * Added #call spec * Delete spec of private methods * Added call test case activitypub * add parameter locked to /api/v1/update_credentials (#6506) * Fix media spoiler design (#6507) - 4px rounded corners on media attachments - Better colors/contrast for CW/media spoiler on public pages - Fix vertical alignment of "Show more" button - Fix layout jump when unhiding standalone media * Don't resize avatars/headers if their dimensions are already right (#6508) Also don't apply "-quality 80" option which is probably the reason for slight color differences between original and remote image (because it would apply it twice, once on original instance, and again on the receiving instance) * Improve performance of feed_manager_spec (#6517) * Set Docker permissions during the build process (#6514) * Set Docker permissions during the build process * Remove docker_entrypoint.sh and use COPY with chown * Fix #6509: Use pull queue for chewy jobs (#6513) * Fix build error for missing variable interpolation in chown instruction (#6519) * Fix avatar and header issues by using custom geometry detector (#6515) * Fix avatar and header issues by using custom geometry detector Revert a part of #6508. The file passed to dynamic styles method was not actually a file, but an instance of Paperclip::Attachment, which broke all styles by always returning {} from the method. One problem with GIF avatars was that Paperclip::GeometryDetector reported wrong dimensions for them, e.g. 120x120 GIF avatar would for some reason be detected as 120x53. By writing our own geometry parser, we can use FastImage, which also happens to be faster than ImageMagick, to detect image dimensions, which are also correct. Unfortunately, this PR does not implement skipping a `convert` entirely if the dimensions are already correct, as I found no easy way to write that behaviour into Paperclip without rewriting the Paperclip::Thumbnail class. * Only invoke convert if dimension or format needs to be changed * fix purge_removed_accounts task should suspend account before delete it (#6521) * fix #6523 (#6524) * Account archive download (#6460) * Fix #201: Account archive download * Export actor and private key in the archive * Optimize BackupService - Add conversation to cached associations of status, because somehow it was forgotten and is source of N+1 queries - Explicitly call GC between batches of records being fetched (Model class allocations are the worst offender) - Stream media files into the tar in 1MB chunks (Do not allocate media file (up to 8MB) as string into memory) - Use #bytesize instead of #size to calculate file size for JSON (Fix FileOverflow error) - Segment media into subfolders by status ID because apparently GIF-to-MP4 media are all named "media.mp4" for some reason * Keep uniquely generated filename in Paperclip::GifTranscoder * Ensure dumped files do not overwrite each other by maintaing directory partitions * Give tar archives a good name * Add scheduler to remove week-old backups * Fix code style issue * Fix bug in relationships API introduced by #6482 (#6527) It was merge when it needed to be deep_merge. And added some tests * Fix #6525: Make sure file is opened in LazyThumbnail processor (#6529) * Focal points (#6520) * Add focus param to media API, center thumbnails on focus point * Add UI for setting a focal point * Improve focal point icon on upload item * Use focal point in upload preview * Add focalPoint property to ActivityPub * Don't show focal point button for non-image attachments * Fix #6526: Only store redirect location if not in JSON format (#6528) * Redesign landing page (again) (#6486) * Redesign landing page (again) * Move login form in small version to the right column * Display closed registrations message * Add site setting for the hero image * Fix test * Increase spacing, maximum width, change call to action section * fix typo in image serializer (#6530) respond to! * Fix container regression (#6531) * Update public.html.haml * Update auth.html.haml * Update modal.html.haml * Fix nil error in focal_point? (#6537) * New env variable: SAML_SECURITY_ASSUME_EMAIL_IS_VERIFIED + fixes #6533 (#6538) * i18n: Update Polish translation (#6539) Signed-off-by: Marcin Mikołajczak <[email protected]> * Update pam documentation (#6518) * document pam email extraction * remove superfluous newline * New variable OAUTH_REDIRECT_AT_SIGN_IN + Ref #6538 (not only SAML strategies) (#6540) * Do not push status to feed if its reblog is already inserted (#6488) A complemental change for precompute_feed_service_spec.rb also fixes its random failure which is caused by the Snowlake randomization of the order of an original status and its reblog. * i18n: Update Japanese translations (#6550) * Update Japanese translations. * Add quotation marks. * Do not use function name to track components (#6542) UglifyJS2 is allowed to mangle function names, and function names can also be duplicate if they are from different scopes. Therefore function names are not reliable as identifiers. Functions as keys for Map object is a cheaper and more reliable alternative. * Raise Mastodon::HostValidationError when host for HTTP request is private (#6410) * Fix #6536 (#6558) * Ensure the app does not even start if OTP_SECRET is not set (#6557) * Ensure the app does not even start if OTP_SECRET is not set * Remove PAPERCLIP_SECRET (it's not used by anything, actually) Imports are for internal consumption and the url option isn't even used correctly, so we can remove the hash stuff from them * Fix prev/next links on public profile page (#6497) * Fix prev/next links on public profile page * Don't make pagination urls if no available statuses * Fix empty check method * Put left chevron before prev page link * Add scope for pagination "starting at" a given id * Status pagination try 2: s/prev/older and s/next/newer "older" on left, "newer" on right Use new scope for "newer" link Extract magic 20 page size to constant Remove max_id from feed pagination as it's not respected * Reinstate max_id for accounts atom stream * normalize * Improve public account cards (#6559) - Add follow/unfollow/remote follow buttons - Format the bio properly - Always show username@domain, even for local accounts * Better grid layout for the landing page (#6543) * Use grid layout for the landing page * Fix column settings Set the ratio explicitly * Improve information board * remove-uglifier (#6561) * Add Liberapay link to README.md (#6563) Signed-off-by: Marcin Mikołajczak <[email protected]> * Grid layout for tag pages (#6545) * Use grid layout for the landing page * Use grid layout for tag pages * Set 2 columns width as explicit percentage for tag pages * Some images can cause `convert` to fail, which crashes this whole task (#6565) * Some images can cause `convert` to fail, which crashes this whole task * Add more specific exception * Specify AGPLv3+ (#6546) * Specify AGPLv3+ Since the documentation doesn't specify you can use Mastodon as AGPLv3 or any later version. * Use newest version of SPDX AGPLv3+ identifier * remove Uglifier call from production.rb (#6568) * Federated reports (#6570) * Fix #2176: Federated reports * UI for federated reports * Add spec for ActivityPub Flag handler * Add spec for ReportService * Fix #5708: Reject->Follow will remove the follow if it exists (#6571) * Fix #942: Seamless LDAP login (#6556) * Ensure that boolean params in the API are parsed for truthiness (#6575) Use Rails smart boolean cast to account for values such as "f", "0", "false", etc. Previously, if a param was present in the request, it would count as true. * Fix margin on top action button, fix width of counters on frontpage (#6573) * Add "Toots/Toots with replies/Media" tab below profile header (#6572) * Add "Toots/Toots with replies/Media" tab below profile header * Add focal point display to account gallery timeline * Fix visual glitch of standalone GIFV * Add only_media param to public and hashtag timelines API (#6576) * i18n: Update Polish translation (#6578) Signed-off-by: Marcin Mikołajczak <[email protected]> * Add contact_account and languages to instance API (#6574) * Bump version to 2.3.0rc1 * Fixes #6584 (#6585) * i18n: Update Japanese translations (#6581) * yarn manage:translations * Update Japanese translations. * Update omniauth-saml to 1.10 (#6587) Fixes CVE-2017-11428 * Improve style of web UI account tabs (#6589) * Fix #6586: Add close modal icon to report dialog (#6591) * Weblate translations (2018-03-02) (#6588) * Translated using Weblate (Galician) Currently translated at 100.0% (57 of 57 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/gl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (57 of 57 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/nl/ * Translated using Weblate (Swedish) Currently translated at 100.0% (57 of 57 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sv/ * Translated using Weblate (Catalan) Currently translated at 100.0% (57 of 57 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ca/ * Translated using Weblate (Slovak) Currently translated at 100.0% (57 of 57 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sk/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (75 of 75 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (56 of 56 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (559 of 559 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/hu/ * Translated using Weblate (Dutch) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/nl/ * Translated using Weblate (Arabic) Currently translated at 100.0% (75 of 75 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/ar/ * Translated using Weblate (Arabic) Currently translated at 98.2% (55 of 56 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/ * Translated using Weblate (Slovak) Currently translated at 61.1% (342 of 559 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Slovak) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (Swedish) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/sv/ * Translated using Weblate (Swedish) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/sv/ * Translated using Weblate (Portuguese) Currently translated at 96.4% (54 of 56 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/pt/ * Translated using Weblate (Portuguese) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/pt/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.8% (558 of 559 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/ * Translated using Weblate (Catalan) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ca/ * Translated using Weblate (Catalan) Currently translated at 99.8% (558 of 559 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Catalan) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/ca/ * Translated using Weblate (Japanese) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/ * Translated using Weblate (Arabic) Currently translated at 98.2% (55 of 56 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/ * Translated using Weblate (Arabic) Currently translated at 79.0% (49 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/ar/ * Translated using Weblate (Arabic) Currently translated at 52.9% (296 of 559 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/ * Translated using Weblate (Slovak) Currently translated at 61.1% (342 of 559 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Dutch) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/nl/ * Translated using Weblate (Slovak) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (Slovak) Currently translated at 100.0% (57 of 57 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sk/ * Translated using Weblate (Slovak) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sk/ * Translated using Weblate (Galician) Currently translated at 100.0% (565 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/ * Translated using Weblate (Galician) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/gl/ * Translated using Weblate (Galician) Currently translated at 100.0% (565 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/ * Translated using Weblate (Japanese) Currently translated at 99.2% (561 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/ * Translated using Weblate (Slovak) Currently translated at 60.5% (342 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Polish) Currently translated at 99.1% (560 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pl/ * Translated using Weblate (Slovak) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (Slovak) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (Slovak) Currently translated at 62.4% (353 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Swedish) Currently translated at 100.0% (565 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sv/ * Translated using Weblate (Japanese) Currently translated at 99.2% (561 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/ * Translated using Weblate (Catalan) Currently translated at 99.1% (560 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Finnish) Currently translated at 99.6% (263 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fi/ * Translated using Weblate (Slovak) Currently translated at 62.6% (354 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (French) Currently translated at 99.1% (560 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/ * Translated using Weblate (Japanese) Currently translated at 93.1% (54 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ja/ * Translated using Weblate (Galician) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/gl/ * Translated using Weblate (Polish) Currently translated at 99.2% (561 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pl/ * Translated using Weblate (Polish) Currently translated at 99.8% (564 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pl/ * Translated using Weblate (Polish) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/pl/ * Translated using Weblate (Slovak) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (Slovak) Currently translated at 72.5% (45 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/sk/ * Translated using Weblate (Finnish) Currently translated at 99.6% (263 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fi/ * Translated using Weblate (Finnish) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fi/ * Translated using Weblate (Finnish) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fi/ * Translated using Weblate (Catalan) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ca/ * Translated using Weblate (Catalan) Currently translated at 99.8% (564 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Dutch) Currently translated at 100.0% (565 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/ * Translated using Weblate (Catalan) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ca/ * Translated using Weblate (Arabic) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/ * Translated using Weblate (Slovak) Currently translated at 62.8% (355 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Arabic) Currently translated at 99.6% (263 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/ * Translated using Weblate (Finnish) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fi/ * Translated using Weblate (Polish) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pl/ * Translated using Weblate (Arabic) Currently translated at 96.0% (72 of 75 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/ar/ * Translated using Weblate (Slovak) Currently translated at 93.5% (58 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/sk/ * Translated using Weblate (Arabic) Currently translated at 98.2% (57 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/ * Translated using Weblate (German) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/de/ * Translated using Weblate (Catalan) Currently translated at 99.8% (564 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Finnish) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fi/ * Translated using Weblate (German) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/de/ * Translated using Weblate (French) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/fr/ * Translated using Weblate (Slovak) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/sk/ * Translated using Weblate (Slovak) Currently translated at 63.7% (360 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Arabic) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/ * Translated using Weblate (Slovak) Currently translated at 64.9% (367 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Arabic) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/ * Translated using Weblate (Arabic) Currently translated at 100.0% (2 of 2 strings) Translation: Mastodon/Activerecord Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/activerecord/ar/ * Translated using Weblate (Arabic) Currently translated at 98.6% (74 of 75 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/ar/ * Translated using Weblate (Catalan) Currently translated at 99.8% (564 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Catalan) Currently translated at 100.0% (565 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Catalan) Currently translated at 100.0% (565 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Catalan) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ca/ * Translated using Weblate (Slovak) Currently translated at 69.5% (393 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Japanese) Currently translated at 99.2% (561 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/ * Translated using Weblate (Arabic) Currently translated at 88.7% (55 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/ar/ * Translated using Weblate (Arabic) Currently translated at 92.0% (69 of 75 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/ar/ * Translated using Weblate (Arabic) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/ * Translated using Weblate (Slovak) Currently translated at 70.6% (399 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/ * Translated using Weblate (Slovak) Currently translated at 74.1% (419 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Arabic) Currently translated at 67.6% (382 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/ * Translated using Weblate (French) Currently translated at 99.4% (562 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/ * Translated using Weblate (Portuguese) Currently translated at 95.3% (539 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt/ * Translated using Weblate (Slovak) Currently translated at 75.3% (426 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/ * Translated using Weblate (Croatian) Currently translated at 58.0% (36 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/hr/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/hu/ * Translated using Weblate (Esperanto) Currently translated at 58.6% (34 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/ * Translated using Weblate (Occitan) Currently translated at 96.8% (547 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/oc/ * Translated using Weblate (Slovak) Currently translated at 76.2% (431 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (French) Currently translated at 99.6% (263 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/ * Translated using Weblate (Arabic) Currently translated at 93.5% (58 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/ar/ * Translated using Weblate (Slovak) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/ * Translated using Weblate (Esperanto) Currently translated at 77.8% (440 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (565 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (75 of 75 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (75 of 75 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (565 of 565 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (264 of 264 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/eo/ * When search enabled, display hint in search popout (#6593) * When advanced search is enabled, show different hint in search popout * Change "getting started" icon in tabs bar from asterisk to hamburger * Responsively enforce 16:9 ratio on all media thumbnails in web UI (#6590) * Responsively enforce 16:9 ratio on all media thumbnails in web UI Also change video player behaviour to "contain" rather than "cover" videos that don't fit the ratio, unlike images and GIFs, it's expected that a video is shown fully. * Fix spacing issues and remove floor * Remove floor * Move "compose" on mobile to floating action button (#6594) * Move "compose" on mobile to floating action button * Fix contrast on floating action button * Add LDAP options to .env.production.sample (#6592) * fix logic for pam_controlled_service (#6599) * Change "or" translatable (#6597) * Translate Korean (#6608) * Fix 500 while searching after deleting a post (#6604) Fixes #6602 * Fix missing focalPoint in ActivityPub JSON (#6609) * Finalize location on scrollable notifications when unmounting (#6614) The top of the scrollable notifications will be invisible after unmounting. The Redux state should be updated accordingly in such a case so that the unread notification counter will be updated later. * Federate pinned statuses over ActivityPub (#6610) * Federate pinned statuses over ActivityPub * Display pinned toots in web UI Fix #6117 * Fix migration * Fix tests * Update outbox_serializer.rb * Update remove_serializer.rb * Update add_serializer.rb * Update fetch_featured_collection_service.rb * Set the default locale in config (#6580) Previously the default locale was set by Localized concern for controllers, but it was not enforced for mailers. config is enforced throughout the application and an appropriate place to set the default locale. * Fix #6611: Typo in change password template (#6616) * Do not fetch environment variables to determine default locale (#6618) The default locale is now set by config. * Implement tag auto-completion by history (#6621) This is a functionality similar to one implemented in Pawoo: https://github.com/pixiv/mastodon/commit/21a3c70f8083b1347d2b8420ed7001b78c2c9620 * Do not require images in about.js and share.js (#6622) They are already required by common.js. * Provide default OTP_SECRET value for development environment (#6617) * Show media on report UI (#6619) * Do not default site_title with site_hostname in InstanceHelper (#6624) site_title is "Mastodon" by default configuration, and there is no need to default site_title with site_hostname in InstanceHelper. * [RFC] Improved media modal (#5956) * Improved media modal ImageLoader: Impliment pinch zoom by CSS `transform: scale(X)` ImageLoader: Impliment panning by CSS `overflow: scroll` ImageLoader: Larger image MediaModal: Larger close button MediaModal: Close the modal by swiping vertically MediaModal: Show/hide close button and right/left navigation on tapping image MediaModal: Change the `pointer-event` CSS prpp to get more blank space to close the modal ImageLoader: Zoom/reset zoom on double tap MediaModal: disable vertical swiping while horizontally swiped ImageLoader: prevent propagating touchmove event to MediaModal MediaModal: Adjust size and potision of buttons ImageLoader: Adjust scroll potision on pinch zoom * Remove "swipe to close" and "double tap to zoom" features * remove unused prop and functions removed `onScroll` prop and `handleScroll` func in ImageLoader * separate zoom functionary to ZoomableImage component adjust styling of ImageLoader add styling for ZoomableImage * adjust size and potision of close button of media modal * Fix for gif video add `onClick` prop to ExtendedVideoPlayer specify `onClick` prop to video tag for switching nav of `MediaModal` add `.video-modal` class to scss to separate styling for `VideoModal` * fix styling for centering specify height of `ZoomableImage` by pixel clean styling for `ImageLoader` * fix lint errors * small fix * fixed designated parts * Make more apparent that an account is blocked or muted (fixes #6544) (#6627) * Add button to unblock blocked accounts from their profile * Add “Blocked” badge in place of “Follows you” when the user is blocked * Add “Muted” badge (below “follows you” badge) * i18n: Update Polish translation (#6632) Signed-off-by: Marcin Mikołajczak <[email protected]> * Normalize translations (#6638) Ran i18n-tasks normalize && yarn manage:translations, so that the translation changes appear on weblate * Weblate translations (05-03-2018) (#6640) * Translated using Weblate (French) Currently translated at 100.0% (272 of 272 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/ * Translated using Weblate (Japanese) Currently translated at 98.9% (572 of 578 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/ * Translated using Weblate (Catalan) Currently translated at 98.4% (569 of 578 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Catalan) Currently translated at 100.0% (578 of 578 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Catalan) Currently translated at 100.0% (579 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ca/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.8% (577 of 578 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/pt_BR/ * Translated using Weblate (French) Currently translated at 99.8% (577 of 578 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/ * Translated using Weblate (French) Currently translated at 100.0% (272 of 272 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/ * Translated using Weblate (Esperanto) Currently translated at 99.6% (576 of 578 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/eo/ * Translated using Weblate (Esperanto) Currently translated at 100.0% (272 of 272 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/eo/ * Translated using Weblate (Arabic) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/ar/ * Translated using Weblate (Slovak) Currently translated at 100.0% (272 of 272 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (Slovak) Currently translated at 74.5% (431 of 578 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Dutch) Currently translated at 100.0% (272 of 272 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/nl/ * Translated using Weblate (Japanese) Currently translated at 100.0% (272 of 272 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/ * Translated using Weblate (Dutch) Currently translated at 100.0% (578 of 578 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (579 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/nl/ * Translated using Weblate (Arabic) Currently translated at 99.6% (271 of 272 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/ * Translated using Weblate (Japanese) Currently translated at 98.9% (573 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/ * Translated using Weblate (Japanese) Currently translated at 99.8% (578 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ja/ * Translated using Weblate (Arabic) Currently translated at 66.6% (386 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/ * Translated using Weblate (Galician) Currently translated at 100.0% (579 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/gl/ * Translated using Weblate (Catalan) Currently translated at 100.0% (272 of 272 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ca/ * Translated using Weblate (Slovak) Currently translated at 100.0% (58 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/sk/ * Translated using Weblate (Slovak) Currently translated at 100.0% (75 of 75 strings) Translation: Mastodon/Doorkeeper Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/doorkeeper/sk/ * Translated using Weblate (Slovak) Currently translated at 100.0% (272 of 272 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (Slovak) Currently translated at 100.0% (62 of 62 strings) Translation: Mastodon/Devise Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/devise/sk/ * Translated using Weblate (Slovak) Currently translated at 75.4% (437 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Polish) Currently translated at 99.8% (578 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pl/ * Translated using Weblate (Slovak) Currently translated at 83.5% (484 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Slovak) Currently translated at 100.0% (272 of 272 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Normalize translations Ran i18n-tasks normalize && yarn manage:translations * Fix permissions for volumes (#6637) When volumes are declared, but the corresponding directories don't exist, permissions for those directories will be root:root instead of mastodon:mastodon.. This changes makes sure the permissions of the volume directories are as expected. * Add “Domain hidden” badge (#6636) * Place dropdown menu top if it is closer to the bottom of the viewport (#6641) * Redirect from Web tag timeline to public tag timeline if not signed in (#6633) This is also implemented in Pawoo: https://github.com/pixiv/mastodon/commit/ceafdbd1bbf30fe20a2a814df0f8cae429a4e9db * Replace onScrollToBottom with onLoadMore (#6615) onScrollToBottom was a function to run instead of onScrollToTop and onScroll when scrolling to the bottom. The behavior to prevent onScrollToTop was inconvenient because the viewport can be at the bottom and at the top at the same time if the viewport is larger than the container. onScrollToBottom was also called when the button to load more is clicked on contray to the name suggests, which led notifications and status_list_container components to mark the scrolled location is not at the top mistakenly. onLoadMore is a replacement for onScrollToBottom. It will be called independently from onScrollToTop and onScroll. * Fix accounts' display name/bio not being set from initial state (#6644) * Upgrade chewy to version 5.0.0 (#6649) * Fix #3807: Increase avatars to 400x400 max (#6651) But do not upscale when they are smaller * Use withRouter for TabsBar (#6652) TabsBar refers to router, which is a private context property of react-router. withRouter is a recommended alternative. It also allows to track location changes even if React.PureComponent is used. * Use React.PureComponent instead of React.Component (#6653) * Extract columns area from UI component (#6650) UI component used to toggle isComposing state by directly manipulating the DOM element to avoid the expensive rendering. However, it is hacky, and is not effective for other states. Instead, this change makes the rendering cheaper by extracting the huge columns area. * Do not use npm (#6656) Both of yarn and npm are used in Mastodon, but the combined usage requires a redundant dependency and may lead to data inconsistency. Considering that yarn has autoclean feature which npm does not have, this change replaces all npm usage with yarn. This change requires documentation update. Most notably, the following command must be executed before assets precompilation if any system dependency of node-sass has changed: yarn install --force --pure-lockfile * [Nanobox] Tuning Update (#6660) Various preformance and stability enhancements for instances deployed via Nanobox. * Add headings to the security settings page (#6661) * Changes the headings' rank of the security settings section This commit changes the existing headings' rank of the security settings section from level 6 to level 4. * Renames the auth.change_password string into auth.security The "Security" preferences' section used to be called "Change password". When it was renamed, the string name wasn't changed. This commits changes auth.change_password to auth.security. * Adds a heading to the password change form There was previously no heading for the part of the "Security" page that contain the password change form. This commit adds a rank 4 heading to this section and reintroduces an "auth.change_password" string to be used inside it. * Removes useless HR elements The various sections of the "Security" settings page were previously separated by HR elements. Now that there is proper headings, they're not required anymore. * Updates CSS This commit updates CSS in such a way that the same style is applied to all the H4 elements of the settings. * Correct a mistake A character went missing on one of the previous commits, broking the CSS. This new commit fixes it. * Separate chown command in Dockerfile. Use tootsuite/mastodon image (#6662) Fix #6605 * Always install LDAP, CAS and SAML gems, because they don't require deps (#6663) Fix #6534 PAM requires a system dependency so... * Remove pointer events on the entire UI when a dropdown menu is open (#6648) * Remove pointer events on the entire UI when a dropdown menu is open This prevents operations to change the location of the menu such as scrolling. * Fix mistake from merge * Fix #6657 - Use target instead of origin in Remove activity (#6664) * Fix wrong target URIs in ActivityPub Add/Remove (#6668) * Add additional first_name and last_name SAML attribute statement options, and modify Omniauthable concern to use full_name or first_name + last_name if not available (#6669) * Don't escape statuses while truncating (#6671) * Remove text requirement when media attached from statuses (#6672) * In wide layout, columnize Mastodon features on landing page (#6674) * Fix focal point modals broken by #5956 (#6676) * Fix cover behaviour of thumbnails that are wider than taller (#6678) * Bump version to 2.3.0rc2 * fix validation error (media only status) (#6684) * fix validation error (media only status) * Incorporating review suggestions * Reflect similar fix to OStatus side * Fix not to include media in transaction * Restore the limit of the number of media * Fix not to return nil * Rescue when there's no extension in the remotable (#6358) * Rescue when there's no extension in the remotable Sometimes the remotable is pointing to a directory with no file extension. Maybe it should not be expecting to identify based on extensions to begin with, but since it's the case, it should be ready for it. * Fix codeclimate issue * Check if filename is nil instead of rescueing exception Suggestion made in the PR * Avoid concatenation issue if filename is nil If filename is nil, extname was undefined * Invert condition Address PR comments * Run tests with npm-run-all (#6688) * Display AttachmentList in timelines in compact style when media missing (#6680) * Weblate translations (2018-03-08) (#6690) * Translated using Weblate (French) Currently translated at 99.8% (578 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/ * Translated using Weblate (French) Currently translated at 99.8% (578 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/ * Translated using Weblate (French) Currently translated at 99.8% (578 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/fr/ * Translated using Weblate (French) Currently translated at 100.0% (275 of 275 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/fr/ * Translated using Weblate (Slovak) Currently translated at 85.3% (494 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/sk/ * Translated using Weblate (Slovak) Currently translated at 100.0% (275 of 275 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/sk/ * Translated using Weblate (Japanese) Currently translated at 100.0% (275 of 275 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (275 of 275 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/pt_BR/ * Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.8% (578 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/pt_BR/ * Translated using Weblate (Japanese) Currently translated at 100.0% (275 of 275 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/ * Translated using Weblate (Arabic) Currently translated at 99.2% (273 of 275 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ar/ * Translated using Weblate (Japanese) Currently translated at 100.0% (275 of 275 strings) Translation: Mastodon/React Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/frontend/ja/ * Translated using Weblate (Arabic) Currently translated at 66.8% (387 of 579 strings) Translation: Mastodon/Backend Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/backend/ar/ * Translated using Weblate (Arabic) Currently translated at 93.1% (54 of 58 strings) Translation: Mastodon/Preferences Translate-URL: https://weblate.joinmastodon.org/projects/mastodon/simple_form/ar/ * Translated using Weblate (French) Currently translate…
* add pam support, without extra column * bugfixes for pam login * document options * fix code style * fix codestyle * fix tests * don't call remember_me without password * fix codestyle * improve checks for pam usage (should fix tests) * fix remember_me part 1 * add remember_token column because :rememberable requires either a password or this column. * migrate db for remember_token * move pam_authentication to the right place, fix logic bug in edit.html.haml * fix tests * fix pam authentication, improve username lookup, add comment * valid? is sometimes not honored, return nil instead trying to authenticate with pam * update devise_pam_authenticatable2 and adjust code. Fixes sideeffects observed in tests * update devise_pam_authenticatable gem, fixes for codeconventions, fix finding user * codeconvention fixes * code convention fixes * fix idention * update dependency, explicit conflict check * fix disabled password updates if in pam mode * fix check password if password is present, fix templates * block registration if account is maintained by pam * Revert "block registration if account is maintained by pam" This reverts commit 8e7a083. * fix identation error introduced by rebase * block usernames maintained by pam * document pam settings better * fix code style
* upgrade vagrant box to xenial this allows the redis version to be upgraded to support the new redis features used in the activity tracker * add libpam0g package to vagrant box this is required for native extensions of gems to build after the addition of PAM support was added in mastodon#5303
* i18n: (zh-CN) #7532 * i18n: (zh-CN) #6984 * i18n: (zh-CN) #7391, #7507 * i18n: (zh-CN) #6998 * i18n: (zh-CN) #7074 * i18n: (zh-CN) #7000, #7032, #7131 (#7032, #7040) * i18n: (zh-CN) #7130, #7188 * i18n: (zh-CN) #6486 * i18n: (zh-CN) #6292 * i18n: (zh-CN) #7347 * i18n: (zh-CN) #6661 * i18n: (zh-CN) #6425 * i18n: (zh-CN) #6597 * i18n: (zh-CN) #6695 * i18n: (zh-CN) #6325 * i18n: (zh-CN) #6460, #7375 * i18n: (zh-CN) #6872 * i18n: (zh-CN) #6818 * i18n: (zh-CN) #7452 * i18n: (zh-CN) #7176 * i18n: (zh-CN) #6460 * i18n: (zh-CN) #7213 * i18n: (zh-CN) #7376 * i18n: (zh-CN) #6556 * i18n: (zh-CN) #6645 * i18n: (zh-CN) #6448 * i18n: (zh-CN) #5303 * i18n: (zh-CN) #7445 * i18n: (zh-CN) Normalization and improvements * i18n: (zh-CN) #7391 * i18n: (zh-CN) #6627 * i18n: (zh-CN) #6956, #7546 * i18n: (zh-CN) #6636 * i18n: (zh-CN) #6610, #6875 * i18n: (zh-CN) #6887 * i18n: (zh-CN) #4514 * i18n: (zh-CN) #6628 * i18n: (zh-CN) #6771 * i18n: (zh-CN) #6772 * i18n: (zh-CN) #7178 * i18n: (zh-CN) #7521 * i18n: (zh-CN) #6570 * i18n: (zh-CN) #6593 * i18n: (zh-CN) #6423 * i18n: (zh-CN) #6157 * i18n: (zh-CN) #7089 * i18n: (zh-CN) #6733 * i18n: (zh-CN) #7072 * i18n: (zh-CN) #6520 * i18n: (zh-CN) Improvment * i18n: (zh-CN) #6631
This pull request allows to authenticate against pam.
If in the pam environment a email address is found, it is used.
For the first login a user account with the pam password is created if pam allows login.
Elsewise the account data is updated. Login with the email is possible but neither email nor password are updated this way.
Pam login disables resetting password, password length check (this is why I removed validatable; every password allowed by pam should work for pam authentication)
I think this solution would be more general than using ldap,...