Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
bb51f5b
Remove duplicate simplified layout check (#40060)
FFederi Aug 10, 2026
1a529e6
Use bundler version 4.0.18 (#40062)
mjankowski Aug 10, 2026
0776050
Force all NPM packages to their exact versions (#40111)
renchap Aug 11, 2026
167d86a
Fix domain block impact queries being rejected (#40122)
ClearlyClaire Aug 11, 2026
64117a9
Fix mobile navigation scrolling to top while opening (#40042)
sharlayan Aug 11, 2026
8fbac71
Fix image preview too dark in alt text editor dialog (#40126)
diondiondion Aug 11, 2026
821b049
Update dependency simplecov to v1.1.0 (#40115)
renovate[bot] Aug 12, 2026
3560830
Update dependency pghero to v4 (#40066)
renovate[bot] Aug 12, 2026
984650b
Update dependency doorkeeper to v5.9.6 (#40128)
renovate[bot] Aug 12, 2026
fddd374
Update dependency FFmpeg/FFmpeg to v9 (#40036)
renovate[bot] Aug 12, 2026
d9d3e49
Update DefinitelyTyped types (non-major) (#40109)
renovate[bot] Aug 12, 2026
5663c06
Fix selected account being lost when creating a collection (#39897)
sharlayan Aug 12, 2026
4996793
Change design of "New collection" button in "Add to collection" dialo…
diondiondion Aug 12, 2026
5006064
Fix semitransparent background of picture-in-picture video player (#4…
diondiondion Aug 12, 2026
4eae0d9
Fix title tooltip appearing for fullscreen videos (#40127)
diondiondion Aug 12, 2026
c7c96dd
Wrap connection errors in `Webfinger#perform` (#40135)
ClearlyClaire Aug 12, 2026
4ebd3e5
Fix Web UI being inaccessible with URLs ending with `.zip` (#40134)
ClearlyClaire Aug 12, 2026
54b1dd7
Update eslint (non-major) (#39797)
renovate[bot] Aug 12, 2026
9279218
Remove redundant index `index_keypairs_on_account_id` (#40138)
ClearlyClaire Aug 13, 2026
edfbec5
Update `mastodon:setup` task warning about trademark to match `masto`…
ClearlyClaire Aug 13, 2026
e722057
New Crowdin translations
web-flow Aug 13, 2026
bbdde20
Bump version to v4.7.0-rc.1
ClearlyClaire Aug 13, 2026
63777d5
Remove reference to tmp/cache/vite/last-build*.json file in test-ruby…
jhbabon Aug 13, 2026
26660e0
New Crowdin translations
web-flow Aug 18, 2026
77a3c53
Removes typescript-plugin-css-modules (#40165)
ChaosExAnima Aug 14, 2026
3b9ebd1
Update dependency brakeman to v8.0.6 (#40140)
renovate[bot] Aug 17, 2026
b177938
Update dependency simplecov to v1.1.1 (#40141)
renovate[bot] Aug 17, 2026
d687870
Automatically update JS transitive dependencies (#40121)
renchap Aug 17, 2026
a664e75
Update Renovate to wait 3 days after package release before opening a…
renchap Aug 17, 2026
9024af4
Update dependency terser to v5.50.0 (#40130)
renovate[bot] Aug 17, 2026
d99780e
Update dependency rollup-plugin-visualizer to v7.1.1 (#40168)
renovate[bot] Aug 17, 2026
0184521
Update dependency postcss-preset-env to v11.4.0 (#40177)
renovate[bot] Aug 17, 2026
38feeb6
Update dependency pg to v8.23.0 (#40120)
renovate[bot] Aug 17, 2026
5d8db83
Update dependency @formatjs/unplugin to v1.2.4 (#40119)
renovate[bot] Aug 17, 2026
0528694
Update dependency eslint-plugin-jsdoc to v64 (#40104)
renovate[bot] Aug 17, 2026
84d75eb
Update dependency @unhead/react to v3.3.2 (#40144)
renovate[bot] Aug 17, 2026
6288f9e
Fix `/deck` being removed from path when resizing window (#40180)
ClearlyClaire Aug 17, 2026
42f7b02
Convert admin/disputes/appeals controller to system spec (#40124)
mjankowski Aug 17, 2026
cdb675d
Update dependency js-yaml to v5.3.0 (#40167)
renovate[bot] Aug 18, 2026
fe189ec
Update dependency pghero to v4.0.1 (#40174)
renovate[bot] Aug 18, 2026
17bc047
Update RuboCop (non-major) to v1.27.0 (#40179)
renovate[bot] Aug 18, 2026
45b1c2e
Fix various off-by-one errors in statistics time ranges (#40193)
ClearlyClaire Aug 18, 2026
e8ae44f
Fix error when processing remote actors with `null` public keys (#40194)
ClearlyClaire Aug 18, 2026
3aa5582
Switch APT repos to canonical ubuntu repos rather than Azure mirror (…
ClearlyClaire Aug 19, 2026
b770730
Fix autosuggestions overstaying their welcome in languages that don't…
Gargron Aug 20, 2026
303c885
Update changelog
ClearlyClaire Aug 19, 2026
c5b3651
Bump version to v4.7.0
ClearlyClaire Aug 20, 2026
af8bc2a
Merge remote-tracking branch 'parent/stable-4.7' into kb-draft-25.0-lts
kmycode Aug 21, 2026
bf60f8a
Fix version
kmycode Aug 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/actions/setup-ruby/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ runs:
- name: Install system dependencies
shell: bash
run: |
sudo sed -i s:azure\.archive\.ubuntu\.com:archive.ubuntu.com:g /etc/apt/apt-mirrors.txt
sudo apt-get update
sudo apt-get install --no-install-recommends -y \
libicu-dev \
Expand Down
14 changes: 13 additions & 1 deletion .github/renovate.json5
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
':enableVulnerabilityAlertsWithLabel(security)',
],
rebaseWhen: 'conflicted',
minimumReleaseAge: '3', // Wait 3 days after the package has been published before upgrading it
minimumReleaseAge: '3 days', // Wait 3 days after the package has been published before upgrading it
prCreation: 'not-pending',
// packageRules order is important, they are applied from top to bottom and are merged,
// meaning the most important ones must be at the bottom, for example grouping rules
// If we do not want a package to be grouped with others, we need to set its groupName
Expand All @@ -24,7 +25,18 @@
},
// The types are now included in recent versions,we ignore them here until we upgrade and remove the dependency
ignoreDeps: ['@types/emoji-mart'],
lockFileMaintenance: {
enabled: true,
schedule: ['before 8am on monday'],
},
packageRules: [
{
// Disable lock file maintenance for bundler for now, as we do not yet pin gems to their exact versions
matchManagers: ['bundler'],
lockFileMaintenance: {
enabled: false,
},
},
{
// Require Dependency Dashboard Approval for major version bumps of these node packages
matchManagers: ['npm'],
Expand Down
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

All notable changes to this project will be documented in this file.

## [4.7.0] - UNRELEASED
## [4.7.0] - 2026-08-20

### Added

Expand Down Expand Up @@ -39,6 +39,10 @@ All notable changes to this project will be documented in this file.

### Fixed

- Fix autosuggestions overstaying their welcome in languages that don't use spaces (#40217 by @Gargron)
- Fix error when processing remote actors with `null` public keys (#40194 by @ClearlyClaire)
- Fix various off-by-one errors in statistics time ranges (#40193 by @ClearlyClaire)
- Fix `/deck` being removed from path when resizing window (#40180 by @ClearlyClaire)
- Fix error in `tootctl media refresh` when cleaning some incompletely processed files (#40056 by @shleeable)
- Fix plain-text formatter not treating `<BR>` as newline (#40079 by @shleeable)
- Fix performance of listing follow requests by adding appropriate index (#40033 by @ClearlyClaire)
Expand Down
12 changes: 6 additions & 6 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -592,7 +592,7 @@ GEM
pastel (0.8.0)
tty-color (~> 0.5)
pg (1.6.3)
pghero (4.0.0)
pghero (4.0.1)
activerecord (>= 7.2)
playwright-ruby-client (1.62.0)
base64
Expand Down Expand Up @@ -623,7 +623,7 @@ GEM
activesupport (>= 3.0.0)
raabro (1.5.0)
racc (1.8.1)
rack (3.2.6)
rack (3.2.7)
rack-attack (6.8.0)
rack (>= 1.0, < 4)
rack-cors (3.0.0)
Expand Down Expand Up @@ -774,15 +774,15 @@ GEM
rubocop-i18n (3.3.0)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
rubocop-performance (1.26.1)
rubocop-performance (1.27.0)
lint_roller (~> 1.1)
rubocop (>= 1.75.0, < 2.0)
rubocop (>= 1.89.0, < 2.0)
rubocop-ast (>= 1.47.1, < 2.0)
rubocop-rails (2.36.0)
rubocop-rails (2.37.0)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
rubocop (>= 1.75.0, < 2.0)
rubocop (>= 1.89.0, < 2.0)
rubocop-ast (>= 1.44.0, < 2.0)
rubocop-rspec (3.10.2)
lint_roller (~> 1.1)
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/admin/dashboard_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def index
@pending_tags_count = pending_tags.async_count
@pending_users_count = User.pending.async_count
@system_checks = Admin::SystemCheck.perform(current_user)
@time_period = (29.days.ago.to_date...Time.now.utc.to_date)
@time_period = (29.days.ago.to_date..Time.now.utc.to_date)
end

private
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def create
redirect_to admin_instance_path(@instance.domain, anchor: helpers.dom_id(@instance_moderation_note)), notice: I18n.t('admin.instances.moderation_notes.created_msg')
else
@instance_moderation_notes = @instance.moderation_notes.includes(:account).chronological
@time_period = (6.days.ago.to_date...Time.now.utc.to_date)
@time_period = (6.days.ago.to_date..Time.now.utc.to_date)
@action_logs = Admin::ActionLogFilter.new(target_domain: @instance.domain).results.limit(5)

render 'admin/instances/show'
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/admin/instances_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def show

@instance_moderation_note = @instance.moderation_notes.new
@instance_moderation_notes = @instance.moderation_notes.includes(:account).chronological
@time_period = (6.days.ago.to_date...Time.now.utc.to_date)
@time_period = (6.days.ago.to_date..Time.now.utc.to_date)
@action_logs = Admin::ActionLogFilter.new(target_domain: @instance.domain).results.limit(LOGS_LIMIT)
end

Expand Down
2 changes: 1 addition & 1 deletion app/controllers/admin/tags_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def set_tag
end

def report_range
(PERIOD_DAYS.ago.to_date...Time.now.utc.to_date)
(PERIOD_DAYS.ago.to_date..Time.now.utc.to_date)
end

def tag_params
Expand Down
38 changes: 37 additions & 1 deletion app/javascript/mastodon/components/autosuggest/utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,14 @@ describe('textAtCursorMatchesToken', () => {
['#hashtag', 7, ['#']],
[1, '#hashtag'],
],
[
['@alice', 6, ['@']],
[1, '@alice'],
],
[
['@alice', 6, ['@']],
[1, '@alice'],
],
[
['#hash tag', 8, ['#']],
[1, '#hash tag'],
Expand All @@ -24,7 +32,35 @@ describe('textAtCursorMatchesToken', () => {
],
[
['#ハッシュ タグ', 7, ['#']],
[1, '#ハッシュ タグ'],
[null, null],
],
[
['@alice reply', 12, ['@']],
[1, '@alice reply'],
],
[
['@alice 这是我输入的回复内容', 17, ['@']],
[null, null],
],
[
['@alice これは本文', 12, ['@']],
[null, null],
],
[
['@alice 이것은답변입니다', 15, ['@']],
[null, null],
],
[
['@alice これは本文', 12, ['@']],
[null, null],
],
[
['@алиса', 6, ['@']],
[1, '@алиса'],
],
[
['@алиса пример', 13, ['@']],
[1, '@алиса пример'],
],
] as const)(
'textAtCursorMatchesToken(%s) is %o',
Expand Down
2 changes: 1 addition & 1 deletion app/javascript/mastodon/components/autosuggest/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ export const textAtCursorMatchesToken = (
let word: string;

const regex = new RegExp(
`[${searchTokens.join('')}${WORD}+-]+(\\s[${WORD}]+)?$`,
`[${searchTokens.join('')}${WORD}+-]+(\\s[\\p{Script=Latin}\\p{Script=Cyrillic}\\p{M}]+)?$`,
'iu',
);
const left = str.slice(0, caretPosition).search(regex);
Expand Down
6 changes: 4 additions & 2 deletions app/javascript/mastodon/components/router.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ import type {
} from 'history';
import { createBrowserHistory } from 'history';

import { layoutFromWindow } from 'mastodon/is_mobile';
import { isDevelopment } from 'mastodon/utils/environment';

import { forceSingleColumn, hasMultiColumnPath } from '../initial_state';

import type { FocusTarget } from './navigation_focus_target';

interface MastodonLocationState {
Expand Down Expand Up @@ -63,7 +64,8 @@ function normalizePath(
}

if (
layoutFromWindow() === 'multi-column' &&
!forceSingleColumn &&
hasMultiColumnPath &&
location.pathname &&
!location.pathname.startsWith('/deck')
) {
Expand Down
8 changes: 4 additions & 4 deletions app/javascript/mastodon/features/ui/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { Hotkeys } from 'mastodon/components/hotkeys';
import { HoverCardController } from 'mastodon/components/hover_card_controller';
import { PictureInPicture } from 'mastodon/features/picture_in_picture';
import { identityContextPropShape, withIdentity } from 'mastodon/identity_context';
import { layoutFromWindow } from 'mastodon/is_mobile';
import { layoutFromWindow, transientSingleColumn } from 'mastodon/is_mobile';
import { WithRouterPropTypes } from 'mastodon/utils/react_router';
import { isRedesignEnabled } from '@/mastodon/utils/environment';
import { checkAnnualReport } from '@/mastodon/reducers/slices/annual_report';
Expand All @@ -30,7 +30,7 @@ import { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../act
import { clearHeight } from '../../actions/height_cache';
import { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';
import { expandHomeTimeline } from '../../actions/timelines';
import { initialState, me, owner, singleUserMode, trendsEnabled, landingPage, localLiveFeedAccess, disableHoverCards, domain } from '../../initial_state';
import { initialState, forceSingleColumn, me, owner, singleUserMode, trendsEnabled, landingPage, localLiveFeedAccess, disableHoverCards, domain } from '../../initial_state';

import BundleColumnError from './components/bundle_column_error';
import { NavigationBar } from './components/navigation_bar';
Expand Down Expand Up @@ -209,8 +209,8 @@ class SwitchingColumnsArea extends PureComponent {
<WrappedSwitch>
<Redirect from='/' to={{pathname: rootRedirect, state: {...this.props.location.state, focusTarget: false}}} exact />

{singleColumn ? <Redirect from='/deck' to='/home' exact /> : null}
{singleColumn && pathName.startsWith('/deck/') ? <Redirect from={pathName} to={{...this.props.location, pathname: pathName.slice(5)}} /> : null}
{forceSingleColumn || transientSingleColumn ? <Redirect from='/deck' to='/home' exact /> : null}
{(forceSingleColumn || transientSingleColumn) && pathName.startsWith('/deck/') ? <Redirect from={pathName} to={{...this.props.location, pathname: pathName.slice(5)}} /> : null}
{/* Redirect old bookmarks (without /deck) with home-like routes to the advanced interface */}
{!singleColumn && pathName === '/home' ? <Redirect from='/home' to='/deck/getting-started' exact /> : null}
{pathName === '/getting-started' ? <Redirect from='/getting-started' to={singleColumn ? '/home' : '/deck/getting-started'} exact /> : null}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ import StackTrace from 'stacktrace-js';
import Bundle from '../components/bundle';
import BundleColumnError from '../components/bundle_column_error';
import { ColumnLoading } from '../components/column_loading';
import { forceSingleColumn, hasMultiColumnPath } from '@/mastodon/initial_state';

// Small wrapper to pass multiColumn to the route components
export const WrappedSwitch = ({ multiColumn, children }) => {
const location = useLocation();

const decklessLocation = multiColumn && location.pathname.startsWith('/deck')
const decklessLocation = !forceSingleColumn && hasMultiColumnPath && location.pathname.startsWith('/deck')
? {...location, pathname: location.pathname.slice(5)}
: location;

Expand Down
11 changes: 10 additions & 1 deletion app/javascript/mastodon/locales/gd.json
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
"account.follows.empty": "Chan eil an cleachdaiche seo a’ leantainn neach sam bith fhathast.",
"account.follows_you": "’Gad leantainn",
"account.go_to_profile": "Tadhail air a’ phròifil",
"account.hame.invalid_handle": "Chan eil an t-aithnichear ri fhaighinn",
"account.hide_reblogs": "Falaich na brosnachaidhean o @{name}",
"account.in_memoriam": "Mar chuimhneachan.",
"account.join_modal.day": "Latha",
Expand Down Expand Up @@ -98,6 +99,7 @@
"account.menu.mute": "Mùch an cunntas",
"account.menu.note.description": "Chan fhaic ach thu fhèin seo",
"account.menu.open_original_page": "Seall air {domain}",
"account.menu.open_original_page_no_domain": "Seall air an fhrithealaiche tùsail",
"account.menu.remove_follower": "Thoir an neach-leantainn air falbh",
"account.menu.report": "Dèan gearan mun chunntas",
"account.menu.share": "Co-roinn…",
Expand All @@ -116,6 +118,8 @@
"account.name.help.domain_self": "Is {domain} am frithealaiche agad-sa a tha ag òstadh pròifil ’s postaichean agad-sa.",
"account.name.help.footer": "Air an aon dòigh ’s a chuireas tu puist-d gu daoine le solaraichean puist-d eadar-dhealaichte, ’s urrainn dhut conaltradh le daoine air frithealaichean Mastodon eile ’s air aplacaidean eile a’ cho-shaoghail.",
"account.name.help.header": "Tha aithnichear coltach ri seòladh puist-d",
"account.name.help.invalid_explanation": "Faodaidh seo tachairt nuair a dh’atharraicheas cuideigin ainm-cleachdaiche ’s cha mhair e sann fharsaingeachd. Ma mhaireas e, dh’fhaoidte gu cheil frithealaiche ann nach eil ri fhaighinn no droch-rèiteachadh ud thall.",
"account.name.help.invalid_header": "Tha aithnichear a’ chleachdaiche seo ’ga ùrachadh.",
"account.name.help.username": "Is {username} ainm-cleachdaiche a’ chunntais seo air an fhrithealaiche aca-san. Dh’fhaoidte gu bheil an t-aon ainm-cleachdaiche le cuideigin air frithealaiche eile.",
"account.name.help.username_self": "Is {username} d’ ainm-cleachdaiche air an fhrithealaiche seo. Dh’fhaoidte gu bheil an t-aon ainm-cleachdaiche le cuideigin air frithealaiche eile.",
"account.name_info": "Dè ’s ciall dha seo?",
Expand Down Expand Up @@ -267,6 +271,7 @@
"admin.impact_report.instance_followers": "An luchd-leantainn a chailleadh na cleachdaichean againn",
"admin.impact_report.instance_follows": "An luchd-leantainn a chailleadh na cleachdaichean aca-san",
"admin.impact_report.title": "Geàrr-chunntas na buaidhe",
"alert.need_reload.message": "Chaidh Mastodon ùrachadh. Dh’fhaoidte nach obraich a h-uile càil mar bu chòir gus an ath-luchdaich thu an duilleag.",
"alert.rate_limited.message": "Feuch ris a-rithist às dèidh {retry_time, time, medium}.",
"alert.rate_limited.title": "Cuingeachadh ùine",
"alert.unexpected.message": "Thachair mearachd ris nach robh dùil.",
Expand Down Expand Up @@ -390,6 +395,7 @@
"collections.create.basic_details_title": "Bun-fhiosrachadh",
"collections.create.steps": "Ceum {step}/{total}",
"collections.create_collection": "Cruthaich cruinneachadh",
"collections.create_new_collection": "Cruthaich cruinneachadh ùr",
"collections.delete_collection": "Sguab an cruinneachadh às",
"collections.description_length_hint": "Crìoch de 100 caractar",
"collections.detail.author_added_you_on_date": "Chuir {author} ris thu {date}",
Expand Down Expand Up @@ -485,7 +491,7 @@
"community.column_settings.local_only": "Feadhainn ionadail a-mhàin",
"community.column_settings.media_only": "Meadhanan a-mhàin",
"community.column_settings.remote_only": "Feadhainn chèin a-mhàin",
"compose.error.blank_post": "Chan urrrainn dho phost a bhith bàn.",
"compose.error.blank_post": "Chan urrainn dho phost a bhith bàn.",
"compose.language.change": "Atharraich an cànan",
"compose.language.search": "Lorg cànan…",
"compose.published.body": "Chaidh am post fhoillseachadh.",
Expand Down Expand Up @@ -1230,6 +1236,7 @@
"status.block": "Bac @{name}",
"status.bookmark": "Cuir ris na comharran-lìn",
"status.cancel_reblog_private": "Na brosnaich tuilleadh",
"status.cannot_edit": "Chan fhaod thu am post seo a dheasachadh",
"status.cannot_quote": "Chan fhaod thu am post seo a luaidh",
"status.cannot_reblog": "Cha ghabh am post seo brosnachadh",
"status.contains_quote": "Tha luaidh na bhroinn",
Expand Down Expand Up @@ -1263,8 +1270,10 @@
"status.more": "Barrachd",
"status.mute": "Mùch @{name}",
"status.mute_conversation": "Mùch an còmhradh",
"status.not_quoted": "Cha deach do luaidh sa phost seo",
"status.open": "Leudaich am post seo",
"status.pin": "Prìnich ris a’ phròifil",
"status.public_only": "Tha am post seo prìobhaideach",
"status.quote": "Luaidh",
"status.quote.cancel": "Sguir dhen luaidh",
"status.quote_error.blocked_account_hint.title": "Tha am post seo falaichte on a bhac thu @{name}.",
Expand Down
2 changes: 1 addition & 1 deletion app/javascript/mastodon/utils/hashtags.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const HASHTAG_SEPARATORS = '_\\u00b7\\u200c';
const ALPHA = '\\p{L}\\p{M}';
export const ALPHA = '\\p{L}\\p{M}';
export const WORD = '\\p{L}\\p{M}\\p{N}\\p{Pc}';

const buildHashtagPatternRegex = () => {
Expand Down
2 changes: 1 addition & 1 deletion app/lib/activity_tracker.rb
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def get(start_at, end_at = Time.now.utc)
end

def sum(start_at, end_at = Time.now.utc)
keys = (start_at.to_date...end_at.to_date).flat_map { |date| [key_at(date.to_time(:utc)), legacy_key_at(date)] }.uniq
keys = (start_at.to_date..end_at.to_date).flat_map { |date| [key_at(date.to_time(:utc)), legacy_key_at(date)] }.uniq

case @type
when :basic
Expand Down
2 changes: 1 addition & 1 deletion app/lib/admin/metrics/measure/base_measure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def time_period
end

def previous_time_period
((@start_at.to_date - length_of_period)..(@end_at.to_date - length_of_period))
((@start_at.to_date - (length_of_period + 1))..(@end_at.to_date - (length_of_period + 1)))
end

def length_of_period
Expand Down
4 changes: 3 additions & 1 deletion app/services/activitypub/process_account_service.rb
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,8 @@ def legacy_public_keys
next unless value['owner'] == @account.uri

key = value['publicKeyPem']
next if key.nil?

{ type: :rsa, public_key: key, uri: key_id }
end
end
Expand Down Expand Up @@ -474,7 +476,7 @@ def fep_521a_public_keys
next unless value['type'] == 'Multikey' && value['controller'] == @account.uri

key_type, key = key_from_multikey(value['publicKeyMultibase'])
next if key_type.nil?
next if key_type.nil? || key.nil?

{ type: key_type, public_key: key, uri: key_id }
end
Expand Down
3 changes: 2 additions & 1 deletion config/locales/doorkeeper.be.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,10 @@ be:
credential_flow_not_configured: Resource Owner Password Credentials flow не прайшоў з-за таго, што ўласцівасць Doorkeeper.configure.resource_owner_from_credentials была не вызначана.
invalid_client: Збой аўтэнтыфікацыі кліента з-за невядомага кліента, адсутнасці аўтэнтыфікацыі кліента або метаду аўтэнтыфікацыі, які не падтрымліваецца.
invalid_code_challenge_method:
few: code_challenge_method павінен быць адным з %{challenge_methods}.
many: code_challenge_method павінен быць адным з %{challenge_methods}.
one: code_challenge_method павінен быць %{challenge_methods}.
other: code_challenge_method павінен быць адным з %{challenge_methods}.
zero: Сервер аўтарызацыі не падтрымлівае PKCE, паколькі няма прынятых значэнняў у code_challenge_method.
invalid_grant: Прадастаўлены дазвол на аўтарызацыю несапраўдны, пратэрмінованы, быў адкліканы, не адпавядае URI перанакіравання, які выкарыстоўваецца ў запыце аўтарызацыі або быў выдадзены іншаму кліенту.
invalid_redirect_uri: Прадстаўлены URI перанакіравання не сапраўдны.
invalid_request:
Expand Down
3 changes: 2 additions & 1 deletion config/locales/doorkeeper.cs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,10 @@ cs:
credential_flow_not_configured: Proud Resource Owner Password Credentials selhal, protože Doorkeeper.configure.resource_owner_from_credentials nebylo nakonfigurováno.
invalid_client: Ověření klienta selhalo kvůli neznámému klientovi, chybějící klientské autentizaci či nepodporované autentizační metodě.
invalid_code_challenge_method:
few: code_challenge_method musí být jedna z %{challenge_methods}.
many: code_challenge_method musí být jedna z %{challenge_methods}.
one: code_challenge_method musí být %{challenge_methods}.
other: code_challenge_method musí být jedna z %{challenge_methods}.
zero: Autorizační server nepodporuje PKCE, protože neexistují žádné akceptované hodnoty kode_challenge_method.
invalid_grant: Poskytnuté oprávnění je neplatné, vypršela jeho platnost, bylo odvoláno, neshoduje se s URI přesměrování použitým v požadavku o autorizaci, nebo bylo uděleno jinému klientu.
invalid_redirect_uri: Zahrnutá přesměrovací URI není platná.
invalid_request:
Expand Down
Loading
Loading