forked from treehouse/mastodon
Spelling (#17705)
* spelling: account Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: affiliated Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: appearance Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: autosuggest Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: cacheable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: component Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: conversations Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: domain.example Clarify what's distinct and use RFC friendly domain space. Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: environment Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: exceeds Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: functional Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: inefficiency Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: not Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: notifications Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: occurring Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: position Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: progress Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: promotable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: reblogging Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: repetitive Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: resolve Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: saturated Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: similar Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: strategies Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: success Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: targeting Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: thumbnails Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unauthorized Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unsensitizes Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: validations Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: various Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>rebase/4.0.0rc2
parent
87a55e2cd6
commit
b5329e0035
|
@ -153,7 +153,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
command: ./bin/rails db:migrate
|
command: ./bin/rails db:migrate
|
||||||
name: Run all pre-deployment migrations
|
name: Run all pre-deployment migrations
|
||||||
evironment:
|
environment:
|
||||||
SKIP_POST_DEPLOYMENT_MIGRATIONS: true
|
SKIP_POST_DEPLOYMENT_MIGRATIONS: true
|
||||||
- run:
|
- run:
|
||||||
command: ./bin/rails db:migrate
|
command: ./bin/rails db:migrate
|
||||||
|
|
|
@ -58,7 +58,7 @@ SMTP_SERVER=smtp.mailgun.org
|
||||||
SMTP_PORT=587
|
SMTP_PORT=587
|
||||||
SMTP_LOGIN=
|
SMTP_LOGIN=
|
||||||
SMTP_PASSWORD=
|
SMTP_PASSWORD=
|
||||||
SMTP_FROM_ADDRESS=notificatons@example.com
|
SMTP_FROM_ADDRESS=notifications@example.com
|
||||||
|
|
||||||
# File storage (optional)
|
# File storage (optional)
|
||||||
# -----------------------
|
# -----------------------
|
||||||
|
|
20
CHANGELOG.md
20
CHANGELOG.md
|
@ -87,7 +87,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Fix suspended accounts statuses being merged back into timelines ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16628))
|
- Fix suspended accounts statuses being merged back into timelines ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16628))
|
||||||
- Fix crash when encountering invalid account fields ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16598))
|
- Fix crash when encountering invalid account fields ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16598))
|
||||||
- Fix invalid blurhash handling for remote activities ([noellabo](https://github.com/mastodon/mastodon/pull/16583))
|
- Fix invalid blurhash handling for remote activities ([noellabo](https://github.com/mastodon/mastodon/pull/16583))
|
||||||
- Fix newlines being added to accout notes when an account moves ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16415), [noellabo](https://github.com/mastodon/mastodon/pull/16576))
|
- Fix newlines being added to account notes when an account moves ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16415), [noellabo](https://github.com/mastodon/mastodon/pull/16576))
|
||||||
- Fix crash when creating an announcement with links ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16941))
|
- Fix crash when creating an announcement with links ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16941))
|
||||||
- Fix logging out from one browser logging out all other sessions ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16943))
|
- Fix logging out from one browser logging out all other sessions ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/16943))
|
||||||
|
|
||||||
|
@ -420,7 +420,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/mastodon/mastodon/pull/14674))
|
- Fix inefficiency when fetching bookmarks ([akihikodaki](https://github.com/mastodon/mastodon/pull/14674))
|
||||||
- Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/mastodon/mastodon/pull/14673))
|
- Fix inefficiency when fetching favourites ([akihikodaki](https://github.com/mastodon/mastodon/pull/14673))
|
||||||
- Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/mastodon/mastodon/pull/14675))
|
- Fix inefficiency when fetching media-only account timeline ([akihikodaki](https://github.com/mastodon/mastodon/pull/14675))
|
||||||
- Fix inefficieny when deleting accounts ([Gargron](https://github.com/mastodon/mastodon/pull/15387), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15409), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15407), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15408), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15402), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15416), [Gargron](https://github.com/mastodon/mastodon/pull/15421))
|
- Fix inefficiency when deleting accounts ([Gargron](https://github.com/mastodon/mastodon/pull/15387), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15409), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15407), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15408), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15402), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/15416), [Gargron](https://github.com/mastodon/mastodon/pull/15421))
|
||||||
- Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/mastodon/mastodon/pull/14534))
|
- Fix redundant query when processing batch actions on custom emojis ([niwatori24](https://github.com/mastodon/mastodon/pull/14534))
|
||||||
- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/mastodon/mastodon/pull/15287))
|
- Fix slow distinct queries where grouped queries are faster ([Gargron](https://github.com/mastodon/mastodon/pull/15287))
|
||||||
- Fix performance on instances list in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/15282))
|
- Fix performance on instances list in admin UI ([Gargron](https://github.com/mastodon/mastodon/pull/15282))
|
||||||
|
@ -507,7 +507,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Add blurhash to link previews ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13984), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14143), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13985), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/14267), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/14278), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14126), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14261), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14260))
|
- Add blurhash to link previews ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13984), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14143), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13985), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/14267), [Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/14278), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14126), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14261), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14260))
|
||||||
- In web UI, toots cannot be marked as sensitive unless there is media attached
|
- In web UI, toots cannot be marked as sensitive unless there is media attached
|
||||||
- However, it's possible to do via API or ActivityPub
|
- However, it's possible to do via API or ActivityPub
|
||||||
- Thumnails of link previews of such posts now use blurhash in web UI
|
- Thumbnails of link previews of such posts now use blurhash in web UI
|
||||||
- The Card entity in REST API has a new `blurhash` attribute
|
- The Card entity in REST API has a new `blurhash` attribute
|
||||||
- Add support for `summary` field for media description in ActivityPub ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13763))
|
- Add support for `summary` field for media description in ActivityPub ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13763))
|
||||||
- Add hints about incomplete remote content to web UI ([Gargron](https://github.com/mastodon/mastodon/pull/14031), [noellabo](https://github.com/mastodon/mastodon/pull/14195))
|
- Add hints about incomplete remote content to web UI ([Gargron](https://github.com/mastodon/mastodon/pull/14031), [noellabo](https://github.com/mastodon/mastodon/pull/14195))
|
||||||
|
@ -530,7 +530,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- The `meta` attribute on the Media Attachment entity in REST API can now have a `colors` attribute which in turn contains three hex colors: `background`, `foreground`, and `accent`
|
- The `meta` attribute on the Media Attachment entity in REST API can now have a `colors` attribute which in turn contains three hex colors: `background`, `foreground`, and `accent`
|
||||||
- The background color is chosen from the most dominant color around the edges of the thumbnail
|
- The background color is chosen from the most dominant color around the edges of the thumbnail
|
||||||
- The foreground and accent colors are chosen from the colors that are the most different from the background color using the CIEDE2000 algorithm
|
- The foreground and accent colors are chosen from the colors that are the most different from the background color using the CIEDE2000 algorithm
|
||||||
- The most satured color of the two is designated as the accent color
|
- The most saturated color of the two is designated as the accent color
|
||||||
- The one with the highest W3C contrast is designated as the foreground color
|
- The one with the highest W3C contrast is designated as the foreground color
|
||||||
- If there are not enough colors in the thumbnail, new ones are generated using a monochrome pattern
|
- If there are not enough colors in the thumbnail, new ones are generated using a monochrome pattern
|
||||||
- Add a visibility indicator to toots in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/14123), [highemerly](https://github.com/mastodon/mastodon/pull/14292))
|
- Add a visibility indicator to toots in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/14123), [highemerly](https://github.com/mastodon/mastodon/pull/14292))
|
||||||
|
@ -556,7 +556,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Change boost button to no longer serve as visibility indicator in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/14132), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14373))
|
- Change boost button to no longer serve as visibility indicator in web UI ([noellabo](https://github.com/mastodon/mastodon/pull/14132), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14373))
|
||||||
- Change contrast of flash messages ([cchoi12](https://github.com/mastodon/mastodon/pull/13892))
|
- Change contrast of flash messages ([cchoi12](https://github.com/mastodon/mastodon/pull/13892))
|
||||||
- Change wording from "Hide media" to "Hide image/images" in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13834))
|
- Change wording from "Hide media" to "Hide image/images" in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13834))
|
||||||
- Change appearence of settings pages to be more consistent ([ariasuni](https://github.com/mastodon/mastodon/pull/13938))
|
- Change appearance of settings pages to be more consistent ([ariasuni](https://github.com/mastodon/mastodon/pull/13938))
|
||||||
- Change "Add media" tooltip to not include long list of formats in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13954))
|
- Change "Add media" tooltip to not include long list of formats in web UI ([ariasuni](https://github.com/mastodon/mastodon/pull/13954))
|
||||||
- Change how badly contrasting emoji are rendered in web UI ([leo60228](https://github.com/mastodon/mastodon/pull/13773), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13772), [mfmfuyu](https://github.com/mastodon/mastodon/pull/14020), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14015))
|
- Change how badly contrasting emoji are rendered in web UI ([leo60228](https://github.com/mastodon/mastodon/pull/13773), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13772), [mfmfuyu](https://github.com/mastodon/mastodon/pull/14020), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/14015))
|
||||||
- Change structure of unavailable content section on about page ([ariasuni](https://github.com/mastodon/mastodon/pull/13930))
|
- Change structure of unavailable content section on about page ([ariasuni](https://github.com/mastodon/mastodon/pull/13930))
|
||||||
|
@ -578,8 +578,8 @@ All notable changes to this project will be documented in this file.
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- Fix `following` param not working when exact match is found in account search ([noellabo](https://github.com/mastodon/mastodon/pull/14394))
|
- Fix `following` param not working when exact match is found in account search ([noellabo](https://github.com/mastodon/mastodon/pull/14394))
|
||||||
- Fix sometimes occuring duplicate mention notifications ([noellabo](https://github.com/mastodon/mastodon/pull/14378))
|
- Fix sometimes occurring duplicate mention notifications ([noellabo](https://github.com/mastodon/mastodon/pull/14378))
|
||||||
- Fix RSS feeds not being cachable ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14368))
|
- Fix RSS feeds not being cacheable ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14368))
|
||||||
- Fix lack of locking around processing of Announce activities in ActivityPub ([noellabo](https://github.com/mastodon/mastodon/pull/14365))
|
- Fix lack of locking around processing of Announce activities in ActivityPub ([noellabo](https://github.com/mastodon/mastodon/pull/14365))
|
||||||
- Fix boosted toots from blocked account not being retroactively removed from TL ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14339))
|
- Fix boosted toots from blocked account not being retroactively removed from TL ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/14339))
|
||||||
- Fix large shortened numbers (like 1.2K) using incorrect pluralization ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/14061))
|
- Fix large shortened numbers (like 1.2K) using incorrect pluralization ([Sasha-Sorokin](https://github.com/mastodon/mastodon/pull/14061))
|
||||||
|
@ -706,7 +706,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Fix poll refresh button not being debounced in web UI ([rasjonell](https://github.com/mastodon/mastodon/pull/13485), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13490))
|
- Fix poll refresh button not being debounced in web UI ([rasjonell](https://github.com/mastodon/mastodon/pull/13485), [ClearlyClaire](https://github.com/mastodon/mastodon/pull/13490))
|
||||||
- Fix confusing error when failing to add an alias to an unknown account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13480))
|
- Fix confusing error when failing to add an alias to an unknown account ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13480))
|
||||||
- Fix "Email changed" notification sometimes having wrong e-mail ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13475))
|
- Fix "Email changed" notification sometimes having wrong e-mail ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13475))
|
||||||
- Fix varioues issues on the account aliases page ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13452))
|
- Fix various issues on the account aliases page ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13452))
|
||||||
- Fix API footer link in web UI ([bubblineyuri](https://github.com/mastodon/mastodon/pull/13441))
|
- Fix API footer link in web UI ([bubblineyuri](https://github.com/mastodon/mastodon/pull/13441))
|
||||||
- Fix pagination of following, followers, follow requests, blocks and mutes lists in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13445))
|
- Fix pagination of following, followers, follow requests, blocks and mutes lists in web UI ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13445))
|
||||||
- Fix styling of polls in JS-less fallback on public pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13436))
|
- Fix styling of polls in JS-less fallback on public pages ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/13436))
|
||||||
|
@ -1496,7 +1496,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Change Docker image to use Ubuntu with jemalloc ([Sir-Boops](https://github.com/mastodon/mastodon/pull/10100), [BenLubar](https://github.com/mastodon/mastodon/pull/10212))
|
- Change Docker image to use Ubuntu with jemalloc ([Sir-Boops](https://github.com/mastodon/mastodon/pull/10100), [BenLubar](https://github.com/mastodon/mastodon/pull/10212))
|
||||||
- Change public pages to be cacheable by proxies ([BenLubar](https://github.com/mastodon/mastodon/pull/9059))
|
- Change public pages to be cacheable by proxies ([BenLubar](https://github.com/mastodon/mastodon/pull/9059))
|
||||||
- Change the 410 gone response for suspended accounts to be cacheable by proxies ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10339))
|
- Change the 410 gone response for suspended accounts to be cacheable by proxies ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10339))
|
||||||
- Change web UI to not not empty timeline of blocked users on block ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10359))
|
- Change web UI to not empty timeline of blocked users on block ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/10359))
|
||||||
- Change JSON serializer to remove unused `@context` values ([Gargron](https://github.com/mastodon/mastodon/pull/10378))
|
- Change JSON serializer to remove unused `@context` values ([Gargron](https://github.com/mastodon/mastodon/pull/10378))
|
||||||
- Change GIFV file size limit to be the same as for other videos ([rinsuki](https://github.com/mastodon/mastodon/pull/9924))
|
- Change GIFV file size limit to be the same as for other videos ([rinsuki](https://github.com/mastodon/mastodon/pull/9924))
|
||||||
- Change Webpack to not use @babel/preset-env to compile node_modules ([ykzts](https://github.com/mastodon/mastodon/pull/10289))
|
- Change Webpack to not use @babel/preset-env to compile node_modules ([ykzts](https://github.com/mastodon/mastodon/pull/10289))
|
||||||
|
@ -1673,7 +1673,7 @@ All notable changes to this project will be documented in this file.
|
||||||
- Limit maximum visibility of local silenced users to unlisted ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9583))
|
- Limit maximum visibility of local silenced users to unlisted ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9583))
|
||||||
- Change API error message for unconfirmed accounts ([noellabo](https://github.com/mastodon/mastodon/pull/9625))
|
- Change API error message for unconfirmed accounts ([noellabo](https://github.com/mastodon/mastodon/pull/9625))
|
||||||
- Change the icon to "reply-all" when it's a reply to other accounts ([mayaeh](https://github.com/mastodon/mastodon/pull/9378))
|
- Change the icon to "reply-all" when it's a reply to other accounts ([mayaeh](https://github.com/mastodon/mastodon/pull/9378))
|
||||||
- Do not ignore federated reports targetting already-reported accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9534))
|
- Do not ignore federated reports targeting already-reported accounts ([ClearlyClaire](https://github.com/mastodon/mastodon/pull/9534))
|
||||||
- Upgrade default Ruby version to 2.6.0 ([Gargron](https://github.com/mastodon/mastodon/pull/9688))
|
- Upgrade default Ruby version to 2.6.0 ([Gargron](https://github.com/mastodon/mastodon/pull/9688))
|
||||||
- Change e-mail digest frequency ([Gargron](https://github.com/mastodon/mastodon/pull/9689))
|
- Change e-mail digest frequency ([Gargron](https://github.com/mastodon/mastodon/pull/9689))
|
||||||
- Change Docker images for Tor support in docker-compose.yml ([Sir-Boops](https://github.com/mastodon/mastodon/pull/9438))
|
- Change Docker images for Tor support in docker-compose.yml ([Sir-Boops](https://github.com/mastodon/mastodon/pull/9438))
|
||||||
|
|
|
@ -151,7 +151,7 @@ class ScrollableList extends PureComponent {
|
||||||
|
|
||||||
attachFullscreenListener(this.onFullScreenChange);
|
attachFullscreenListener(this.onFullScreenChange);
|
||||||
|
|
||||||
// Handle initial scroll posiiton
|
// Handle initial scroll position
|
||||||
this.handleScroll();
|
this.handleScroll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -43,7 +43,7 @@ export default class MediaContainer extends PureComponent {
|
||||||
|
|
||||||
handleOpenVideo = (options) => {
|
handleOpenVideo = (options) => {
|
||||||
const { components } = this.props;
|
const { components } = this.props;
|
||||||
const { media } = JSON.parse(components[options.componetIndex].getAttribute('data-props'));
|
const { media } = JSON.parse(components[options.componentIndex].getAttribute('data-props'));
|
||||||
const mediaList = fromJS(media);
|
const mediaList = fromJS(media);
|
||||||
|
|
||||||
document.body.classList.add('with-modals--active');
|
document.body.classList.add('with-modals--active');
|
||||||
|
@ -87,7 +87,7 @@ export default class MediaContainer extends PureComponent {
|
||||||
...(hashtag ? { hashtag: fromJS(hashtag) } : {}),
|
...(hashtag ? { hashtag: fromJS(hashtag) } : {}),
|
||||||
|
|
||||||
...(componentName === 'Video' ? {
|
...(componentName === 'Video' ? {
|
||||||
componetIndex: i,
|
componentIndex: i,
|
||||||
onOpenVideo: this.handleOpenVideo,
|
onOpenVideo: this.handleOpenVideo,
|
||||||
} : {
|
} : {
|
||||||
onOpenMedia: this.handleOpenMedia,
|
onOpenMedia: this.handleOpenMedia,
|
||||||
|
|
|
@ -8,7 +8,7 @@ const messages = defineMessages({
|
||||||
dislike: { id: 'report.reasons.dislike', defaultMessage: 'I don\'t like it' },
|
dislike: { id: 'report.reasons.dislike', defaultMessage: 'I don\'t like it' },
|
||||||
dislike_description: { id: 'report.reasons.dislike_description', defaultMessage: 'It is not something you want to see' },
|
dislike_description: { id: 'report.reasons.dislike_description', defaultMessage: 'It is not something you want to see' },
|
||||||
spam: { id: 'report.reasons.spam', defaultMessage: 'It\'s spam' },
|
spam: { id: 'report.reasons.spam', defaultMessage: 'It\'s spam' },
|
||||||
spam_description: { id: 'report.reasons.spam_description', defaultMessage: 'Malicious links, fake engagement, or repetetive replies' },
|
spam_description: { id: 'report.reasons.spam_description', defaultMessage: 'Malicious links, fake engagement, or repetitive replies' },
|
||||||
violation: { id: 'report.reasons.violation', defaultMessage: 'It violates server rules' },
|
violation: { id: 'report.reasons.violation', defaultMessage: 'It violates server rules' },
|
||||||
violation_description: { id: 'report.reasons.violation_description', defaultMessage: 'You are aware that it breaks specific rules' },
|
violation_description: { id: 'report.reasons.violation_description', defaultMessage: 'You are aware that it breaks specific rules' },
|
||||||
other: { id: 'report.reasons.other', defaultMessage: 'It\'s something else' },
|
other: { id: 'report.reasons.other', defaultMessage: 'It\'s something else' },
|
||||||
|
|
|
@ -121,7 +121,7 @@ class Video extends React.PureComponent {
|
||||||
autoPlay: PropTypes.bool,
|
autoPlay: PropTypes.bool,
|
||||||
volume: PropTypes.number,
|
volume: PropTypes.number,
|
||||||
muted: PropTypes.bool,
|
muted: PropTypes.bool,
|
||||||
componetIndex: PropTypes.number,
|
componentIndex: PropTypes.number,
|
||||||
};
|
};
|
||||||
|
|
||||||
static defaultProps = {
|
static defaultProps = {
|
||||||
|
@ -502,7 +502,7 @@ class Video extends React.PureComponent {
|
||||||
startTime: this.video.currentTime,
|
startTime: this.video.currentTime,
|
||||||
autoPlay: !this.state.paused,
|
autoPlay: !this.state.paused,
|
||||||
defaultVolume: this.state.volume,
|
defaultVolume: this.state.volume,
|
||||||
componetIndex: this.props.componetIndex,
|
componentIndex: this.props.componentIndex,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -409,7 +409,7 @@
|
||||||
"report.reasons.other": "It's something else",
|
"report.reasons.other": "It's something else",
|
||||||
"report.reasons.other_description": "The issue does not fit into other categories",
|
"report.reasons.other_description": "The issue does not fit into other categories",
|
||||||
"report.reasons.spam": "It's spam",
|
"report.reasons.spam": "It's spam",
|
||||||
"report.reasons.spam_description": "Malicious links, fake engagement, or repetetive replies",
|
"report.reasons.spam_description": "Malicious links, fake engagement, or repetitive replies",
|
||||||
"report.reasons.violation": "It violates server rules",
|
"report.reasons.violation": "It violates server rules",
|
||||||
"report.reasons.violation_description": "You are aware that it breaks specific rules",
|
"report.reasons.violation_description": "You are aware that it breaks specific rules",
|
||||||
"report.rules.subtitle": "Select all that apply",
|
"report.rules.subtitle": "Select all that apply",
|
||||||
|
|
|
@ -4315,7 +4315,7 @@ a.status-card.compact:hover {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.upload-progess__message {
|
.upload-progress__message {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.autossugest-input {
|
.autosuggest-input {
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@ class UserPolicy < ApplicationPolicy
|
||||||
end
|
end
|
||||||
|
|
||||||
def promote?
|
def promote?
|
||||||
admin? && promoteable?
|
admin? && promotable?
|
||||||
end
|
end
|
||||||
|
|
||||||
def demote?
|
def demote?
|
||||||
|
@ -51,7 +51,7 @@ class UserPolicy < ApplicationPolicy
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def promoteable?
|
def promotable?
|
||||||
record.approved? && (!record.staff? || !record.admin?)
|
record.approved? && (!record.staff? || !record.admin?)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Rails.application.config.middleware.use OmniAuth::Builder do
|
Rails.application.config.middleware.use OmniAuth::Builder do
|
||||||
# Vanilla omniauth stategies
|
# Vanilla omniauth strategies
|
||||||
end
|
end
|
||||||
|
|
||||||
Devise.setup do |config|
|
Devise.setup do |config|
|
||||||
|
|
|
@ -986,7 +986,7 @@ en_GB:
|
||||||
enabled: Two-factor authentication is enabled
|
enabled: Two-factor authentication is enabled
|
||||||
enabled_success: Two-factor authentication successfully enabled
|
enabled_success: Two-factor authentication successfully enabled
|
||||||
generate_recovery_codes: Generate recovery codes
|
generate_recovery_codes: Generate recovery codes
|
||||||
instructions_html: "<strong>Scan this QR code into Google Authenticator or a similiar TOTP app on your phone</strong>. From now on, that app will generate tokens that you will have to enter when logging in."
|
instructions_html: "<strong>Scan this QR code into Google Authenticator or a similar TOTP app on your phone</strong>. From now on, that app will generate tokens that you will have to enter when logging in."
|
||||||
lost_recovery_codes: Recovery codes allow you to regain access to your account if you lose your phone. If you've lost your recovery codes, you can regenerate them here. Your old recovery codes will be invalidated.
|
lost_recovery_codes: Recovery codes allow you to regain access to your account if you lose your phone. If you've lost your recovery codes, you can regenerate them here. Your old recovery codes will be invalidated.
|
||||||
manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:'
|
manual_instructions: 'If you can''t scan the QR code and need to enter it manually, here is the plain-text secret:'
|
||||||
recovery_codes: Backup recovery codes
|
recovery_codes: Backup recovery codes
|
||||||
|
|
|
@ -16,7 +16,7 @@ class FixReblogsInFeeds < ActiveRecord::Migration[5.1]
|
||||||
# is once again set to the reblogging status' ID, and the value
|
# is once again set to the reblogging status' ID, and the value
|
||||||
# is set to the reblogged status' ID). This is safe for Redis'
|
# is set to the reblogged status' ID). This is safe for Redis'
|
||||||
# float conversion because in this reblog tracking zset, we only
|
# float conversion because in this reblog tracking zset, we only
|
||||||
# need the rebloggging status' ID to be able to stop tracking
|
# need the reblogging status' ID to be able to stop tracking
|
||||||
# entries after they have gotten too far down the feed, which
|
# entries after they have gotten too far down the feed, which
|
||||||
# does not require an exact value.
|
# does not require an exact value.
|
||||||
|
|
||||||
|
|
|
@ -22,13 +22,13 @@ class RejectFollowingBlockedUsers < ActiveRecord::Migration[5.2]
|
||||||
|
|
||||||
follows.each do |follow|
|
follows.each do |follow|
|
||||||
blocked_account = follow.account
|
blocked_account = follow.account
|
||||||
followed_acccount = follow.target_account
|
followed_account = follow.target_account
|
||||||
|
|
||||||
next follow.destroy! if blocked_account.local?
|
next follow.destroy! if blocked_account.local?
|
||||||
|
|
||||||
reject_follow_json = Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(follow, serializer: ActivityPub::RejectFollowSerializer, adapter: ActivityPub::Adapter).as_json).sign!(followed_acccount))
|
reject_follow_json = Oj.dump(ActivityPub::LinkedDataSignature.new(ActiveModelSerializers::SerializableResource.new(follow, serializer: ActivityPub::RejectFollowSerializer, adapter: ActivityPub::Adapter).as_json).sign!(followed_account))
|
||||||
|
|
||||||
ActivityPub::DeliveryWorker.perform_async(reject_follow_json, followed_acccount, blocked_account.inbox_url)
|
ActivityPub::DeliveryWorker.perform_async(reject_follow_json, followed_account, blocked_account.inbox_url)
|
||||||
|
|
||||||
follow.destroy!
|
follow.destroy!
|
||||||
end
|
end
|
||||||
|
|
|
@ -510,7 +510,7 @@ module Mastodon
|
||||||
accounts = accounts.sort_by(&:id).reverse
|
accounts = accounts.sort_by(&:id).reverse
|
||||||
|
|
||||||
@prompt.warn "Multiple local accounts were found for username '#{accounts.first.username}'."
|
@prompt.warn "Multiple local accounts were found for username '#{accounts.first.username}'."
|
||||||
@prompt.warn 'All those accounts are distinct accounts but only the most recently-created one is fully-functionnal.'
|
@prompt.warn 'All those accounts are distinct accounts but only the most recently-created one is fully-functional.'
|
||||||
|
|
||||||
accounts.each_with_index do |account, idx|
|
accounts.each_with_index do |account, idx|
|
||||||
@prompt.say '%2d. %s: created at: %s; updated at: %s; last logged in at: %s; statuses: %5d; last status at: %s' % [idx, account.username, account.created_at, account.updated_at, account.user&.last_sign_in_at&.to_s || 'N/A', account.account_stat&.statuses_count || 0, account.account_stat&.last_status_at || 'N/A']
|
@prompt.say '%2d. %s: created at: %s; updated at: %s; last logged in at: %s; statuses: %5d; last status at: %s' % [idx, account.username, account.created_at, account.updated_at, account.user&.last_sign_in_at&.to_s || 'N/A', account.account_stat&.statuses_count || 0, account.account_stat&.last_status_at || 'N/A']
|
||||||
|
|
|
@ -156,7 +156,7 @@ module Mastodon
|
||||||
|
|
||||||
ActiveRecord::Base.connection.add_index(:statuses, :conversation_id, name: :index_statuses_conversation_id, algorithm: :concurrently, if_not_exists: true)
|
ActiveRecord::Base.connection.add_index(:statuses, :conversation_id, name: :index_statuses_conversation_id, algorithm: :concurrently, if_not_exists: true)
|
||||||
|
|
||||||
say('Extract the deletion target from coversations... This might take a while...')
|
say('Extract the deletion target from conversations... This might take a while...')
|
||||||
|
|
||||||
ActiveRecord::Base.connection.create_table('conversations_to_be_deleted', force: true)
|
ActiveRecord::Base.connection.create_table('conversations_to_be_deleted', force: true)
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@ RSpec.describe AccountsController, type: :controller do
|
||||||
|
|
||||||
let(:account) { Fabricate(:account) }
|
let(:account) { Fabricate(:account) }
|
||||||
|
|
||||||
shared_examples 'cachable response' do
|
shared_examples 'cacheable response' do
|
||||||
it 'does not set cookies' do
|
it 'does not set cookies' do
|
||||||
expect(response.cookies).to be_empty
|
expect(response.cookies).to be_empty
|
||||||
expect(response.headers['Set-Cookies']).to be nil
|
expect(response.headers['Set-Cookies']).to be nil
|
||||||
|
@ -374,7 +374,7 @@ RSpec.describe AccountsController, type: :controller do
|
||||||
expect(response.media_type).to eq 'application/activity+json'
|
expect(response.media_type).to eq 'application/activity+json'
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'cachable response'
|
it_behaves_like 'cacheable response'
|
||||||
|
|
||||||
it 'renders account' do
|
it 'renders account' do
|
||||||
json = body_as_json
|
json = body_as_json
|
||||||
|
@ -432,7 +432,7 @@ RSpec.describe AccountsController, type: :controller do
|
||||||
expect(response.media_type).to eq 'application/activity+json'
|
expect(response.media_type).to eq 'application/activity+json'
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'cachable response'
|
it_behaves_like 'cacheable response'
|
||||||
|
|
||||||
it 'renders account' do
|
it 'renders account' do
|
||||||
json = body_as_json
|
json = body_as_json
|
||||||
|
@ -499,7 +499,7 @@ RSpec.describe AccountsController, type: :controller do
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'cachable response'
|
it_behaves_like 'cacheable response'
|
||||||
end
|
end
|
||||||
|
|
||||||
context do
|
context do
|
||||||
|
|
|
@ -7,7 +7,7 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do
|
||||||
let!(:private_pinned) { Fabricate(:status, account: account, text: 'secret private stuff', visibility: :private) }
|
let!(:private_pinned) { Fabricate(:status, account: account, text: 'secret private stuff', visibility: :private) }
|
||||||
let(:remote_account) { nil }
|
let(:remote_account) { nil }
|
||||||
|
|
||||||
shared_examples 'cachable response' do
|
shared_examples 'cacheable response' do
|
||||||
it 'does not set cookies' do
|
it 'does not set cookies' do
|
||||||
expect(response.cookies).to be_empty
|
expect(response.cookies).to be_empty
|
||||||
expect(response.headers['Set-Cookies']).to be nil
|
expect(response.headers['Set-Cookies']).to be nil
|
||||||
|
@ -48,7 +48,7 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do
|
||||||
expect(response.media_type).to eq 'application/activity+json'
|
expect(response.media_type).to eq 'application/activity+json'
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'cachable response'
|
it_behaves_like 'cacheable response'
|
||||||
|
|
||||||
it 'returns orderedItems with pinned statuses' do
|
it 'returns orderedItems with pinned statuses' do
|
||||||
expect(body[:orderedItems]).to be_an Array
|
expect(body[:orderedItems]).to be_an Array
|
||||||
|
@ -101,7 +101,7 @@ RSpec.describe ActivityPub::CollectionsController, type: :controller do
|
||||||
expect(response.media_type).to eq 'application/activity+json'
|
expect(response.media_type).to eq 'application/activity+json'
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'cachable response'
|
it_behaves_like 'cacheable response'
|
||||||
|
|
||||||
it 'returns orderedItems with pinned statuses' do
|
it 'returns orderedItems with pinned statuses' do
|
||||||
json = body_as_json
|
json = body_as_json
|
||||||
|
|
|
@ -3,7 +3,7 @@ require 'rails_helper'
|
||||||
RSpec.describe ActivityPub::OutboxesController, type: :controller do
|
RSpec.describe ActivityPub::OutboxesController, type: :controller do
|
||||||
let!(:account) { Fabricate(:account) }
|
let!(:account) { Fabricate(:account) }
|
||||||
|
|
||||||
shared_examples 'cachable response' do
|
shared_examples 'cacheable response' do
|
||||||
it 'does not set cookies' do
|
it 'does not set cookies' do
|
||||||
expect(response.cookies).to be_empty
|
expect(response.cookies).to be_empty
|
||||||
expect(response.headers['Set-Cookies']).to be nil
|
expect(response.headers['Set-Cookies']).to be nil
|
||||||
|
@ -53,7 +53,7 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do
|
||||||
expect(body[:totalItems]).to eq 4
|
expect(body[:totalItems]).to eq 4
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'cachable response'
|
it_behaves_like 'cacheable response'
|
||||||
|
|
||||||
it 'does not have a Vary header' do
|
it 'does not have a Vary header' do
|
||||||
expect(response.headers['Vary']).to be_nil
|
expect(response.headers['Vary']).to be_nil
|
||||||
|
@ -98,7 +98,7 @@ RSpec.describe ActivityPub::OutboxesController, type: :controller do
|
||||||
expect(body[:orderedItems].all? { |item| item[:to].include?(ActivityPub::TagManager::COLLECTIONS[:public]) || item[:cc].include?(ActivityPub::TagManager::COLLECTIONS[:public]) }).to be true
|
expect(body[:orderedItems].all? { |item| item[:to].include?(ActivityPub::TagManager::COLLECTIONS[:public]) || item[:cc].include?(ActivityPub::TagManager::COLLECTIONS[:public]) }).to be true
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'cachable response'
|
it_behaves_like 'cacheable response'
|
||||||
|
|
||||||
it 'returns Vary header with Signature' do
|
it 'returns Vary header with Signature' do
|
||||||
expect(response.headers['Vary']).to include 'Signature'
|
expect(response.headers['Vary']).to include 'Signature'
|
||||||
|
|
|
@ -8,7 +8,7 @@ RSpec.describe ActivityPub::RepliesController, type: :controller do
|
||||||
let(:remote_reply_id) { 'https://foobar.com/statuses/1234' }
|
let(:remote_reply_id) { 'https://foobar.com/statuses/1234' }
|
||||||
let(:remote_querier) { nil }
|
let(:remote_querier) { nil }
|
||||||
|
|
||||||
shared_examples 'cachable response' do
|
shared_examples 'cacheable response' do
|
||||||
it 'does not set cookies' do
|
it 'does not set cookies' do
|
||||||
expect(response.cookies).to be_empty
|
expect(response.cookies).to be_empty
|
||||||
expect(response.headers['Set-Cookies']).to be nil
|
expect(response.headers['Set-Cookies']).to be nil
|
||||||
|
@ -93,7 +93,7 @@ RSpec.describe ActivityPub::RepliesController, type: :controller do
|
||||||
expect(response.media_type).to eq 'application/activity+json'
|
expect(response.media_type).to eq 'application/activity+json'
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'cachable response'
|
it_behaves_like 'cacheable response'
|
||||||
|
|
||||||
context 'without only_other_accounts' do
|
context 'without only_other_accounts' do
|
||||||
it "returns items with thread author's replies" do
|
it "returns items with thread author's replies" do
|
||||||
|
|
|
@ -31,7 +31,7 @@ describe Api::V1::Accounts::NotesController do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when account note exceends allowed length' do
|
context 'when account note exceeds allowed length' do
|
||||||
let(:comment) { 'a' * 2_001 }
|
let(:comment) { 'a' * 2_001 }
|
||||||
|
|
||||||
it 'returns 422' do
|
it 'returns 422' do
|
||||||
|
|
|
@ -140,7 +140,7 @@ RSpec.describe Api::V1::Admin::AccountsController, type: :controller do
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'unsensitives account' do
|
it 'unsensitizes account' do
|
||||||
expect(account.reload.sensitized?).to be false
|
expect(account.reload.sensitized?).to be false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -56,7 +56,7 @@ RSpec.describe Api::V1::Statuses::FavouritedByAccountsController, type: :control
|
||||||
Fabricate(:favourite, status: status)
|
Fabricate(:favourite, status: status)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns http unautharized' do
|
it 'returns http unauthorized' do
|
||||||
get :index, params: { status_id: status.id }
|
get :index, params: { status_id: status.id }
|
||||||
expect(response).to have_http_status(404)
|
expect(response).to have_http_status(404)
|
||||||
end
|
end
|
||||||
|
|
|
@ -56,7 +56,7 @@ RSpec.describe Api::V1::Statuses::RebloggedByAccountsController, type: :controll
|
||||||
Fabricate(:status, reblog_of_id: status.id)
|
Fabricate(:status, reblog_of_id: status.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns http unautharized' do
|
it 'returns http unauthorized' do
|
||||||
get :index, params: { status_id: status.id }
|
get :index, params: { status_id: status.id }
|
||||||
expect(response).to have_http_status(404)
|
expect(response).to have_http_status(404)
|
||||||
end
|
end
|
||||||
|
|
|
@ -130,7 +130,7 @@ RSpec.describe Api::V1::StatusesController, type: :controller do
|
||||||
let(:status) { Fabricate(:status, account: user.account, visibility: :private) }
|
let(:status) { Fabricate(:status, account: user.account, visibility: :private) }
|
||||||
|
|
||||||
describe 'GET #show' do
|
describe 'GET #show' do
|
||||||
it 'returns http unautharized' do
|
it 'returns http unauthorized' do
|
||||||
get :show, params: { id: status.id }
|
get :show, params: { id: status.id }
|
||||||
expect(response).to have_http_status(404)
|
expect(response).to have_http_status(404)
|
||||||
end
|
end
|
||||||
|
@ -141,7 +141,7 @@ RSpec.describe Api::V1::StatusesController, type: :controller do
|
||||||
Fabricate(:status, account: user.account, thread: status)
|
Fabricate(:status, account: user.account, thread: status)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns http unautharized' do
|
it 'returns http unauthorized' do
|
||||||
get :context, params: { id: status.id }
|
get :context, params: { id: status.id }
|
||||||
expect(response).to have_http_status(404)
|
expect(response).to have_http_status(404)
|
||||||
end
|
end
|
||||||
|
|
|
@ -187,30 +187,30 @@ describe ApplicationController, type: :controller do
|
||||||
controller do
|
controller do
|
||||||
before_action :require_admin!
|
before_action :require_admin!
|
||||||
|
|
||||||
def sucesss
|
def success
|
||||||
head 200
|
head 200
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
routes.draw { get 'sucesss' => 'anonymous#sucesss' }
|
routes.draw { get 'success' => 'anonymous#success' }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a 403 if current user is not admin' do
|
it 'returns a 403 if current user is not admin' do
|
||||||
sign_in(Fabricate(:user, admin: false))
|
sign_in(Fabricate(:user, admin: false))
|
||||||
get 'sucesss'
|
get 'success'
|
||||||
expect(response).to have_http_status(403)
|
expect(response).to have_http_status(403)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a 403 if current user is only a moderator' do
|
it 'returns a 403 if current user is only a moderator' do
|
||||||
sign_in(Fabricate(:user, moderator: true))
|
sign_in(Fabricate(:user, moderator: true))
|
||||||
get 'sucesss'
|
get 'success'
|
||||||
expect(response).to have_http_status(403)
|
expect(response).to have_http_status(403)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does nothing if current user is admin' do
|
it 'does nothing if current user is admin' do
|
||||||
sign_in(Fabricate(:user, admin: true))
|
sign_in(Fabricate(:user, admin: true))
|
||||||
get 'sucesss'
|
get 'success'
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -219,30 +219,30 @@ describe ApplicationController, type: :controller do
|
||||||
controller do
|
controller do
|
||||||
before_action :require_staff!
|
before_action :require_staff!
|
||||||
|
|
||||||
def sucesss
|
def success
|
||||||
head 200
|
head 200
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
before do
|
before do
|
||||||
routes.draw { get 'sucesss' => 'anonymous#sucesss' }
|
routes.draw { get 'success' => 'anonymous#success' }
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns a 403 if current user is not admin or moderator' do
|
it 'returns a 403 if current user is not admin or moderator' do
|
||||||
sign_in(Fabricate(:user, admin: false, moderator: false))
|
sign_in(Fabricate(:user, admin: false, moderator: false))
|
||||||
get 'sucesss'
|
get 'success'
|
||||||
expect(response).to have_http_status(403)
|
expect(response).to have_http_status(403)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does nothing if current user is moderator' do
|
it 'does nothing if current user is moderator' do
|
||||||
sign_in(Fabricate(:user, moderator: true))
|
sign_in(Fabricate(:user, moderator: true))
|
||||||
get 'sucesss'
|
get 'success'
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does nothing if current user is admin' do
|
it 'does nothing if current user is admin' do
|
||||||
sign_in(Fabricate(:user, admin: true))
|
sign_in(Fabricate(:user, admin: true))
|
||||||
get 'sucesss'
|
get 'success'
|
||||||
expect(response).to have_http_status(200)
|
expect(response).to have_http_status(200)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,7 +5,7 @@ require 'rails_helper'
|
||||||
describe StatusesController do
|
describe StatusesController do
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
shared_examples 'cachable response' do
|
shared_examples 'cacheable response' do
|
||||||
it 'does not set cookies' do
|
it 'does not set cookies' do
|
||||||
expect(response.cookies).to be_empty
|
expect(response.cookies).to be_empty
|
||||||
expect(response.headers['Set-Cookies']).to be nil
|
expect(response.headers['Set-Cookies']).to be nil
|
||||||
|
@ -108,7 +108,7 @@ describe StatusesController do
|
||||||
expect(response.headers['Vary']).to eq 'Accept'
|
expect(response.headers['Vary']).to eq 'Accept'
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'cachable response'
|
it_behaves_like 'cacheable response'
|
||||||
|
|
||||||
it 'returns Content-Type header' do
|
it 'returns Content-Type header' do
|
||||||
expect(response.headers['Content-Type']).to include 'application/activity+json'
|
expect(response.headers['Content-Type']).to include 'application/activity+json'
|
||||||
|
@ -496,7 +496,7 @@ describe StatusesController do
|
||||||
expect(response.headers['Vary']).to eq 'Accept'
|
expect(response.headers['Vary']).to eq 'Accept'
|
||||||
end
|
end
|
||||||
|
|
||||||
it_behaves_like 'cachable response'
|
it_behaves_like 'cacheable response'
|
||||||
|
|
||||||
it 'returns Content-Type header' do
|
it 'returns Content-Type header' do
|
||||||
expect(response.headers['Content-Type']).to include 'application/activity+json'
|
expect(response.headers['Content-Type']).to include 'application/activity+json'
|
||||||
|
|
|
@ -60,7 +60,7 @@ describe ApplicationHelper do
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'favicon_path' do
|
describe 'favicon_path' do
|
||||||
it 'returns /favicon.ico on production enviromnent' do
|
it 'returns /favicon.ico on production environment' do
|
||||||
expect(Rails.env).to receive(:production?).and_return(true)
|
expect(Rails.env).to receive(:production?).and_return(true)
|
||||||
expect(helper.favicon_path).to eq '/favicon.ico'
|
expect(helper.favicon_path).to eq '/favicon.ico'
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,7 +6,7 @@ RSpec.describe TagManager do
|
||||||
|
|
||||||
around do |example|
|
around do |example|
|
||||||
original_local_domain = Rails.configuration.x.local_domain
|
original_local_domain = Rails.configuration.x.local_domain
|
||||||
Rails.configuration.x.local_domain = 'domain.test'
|
Rails.configuration.x.local_domain = 'domain.example.com'
|
||||||
|
|
||||||
example.run
|
example.run
|
||||||
|
|
||||||
|
@ -18,11 +18,11 @@ RSpec.describe TagManager do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true if the slash-stripped string equals to local domain' do
|
it 'returns true if the slash-stripped string equals to local domain' do
|
||||||
expect(TagManager.instance.local_domain?('DoMaIn.Test/')).to eq true
|
expect(TagManager.instance.local_domain?('DoMaIn.Example.com/')).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns false for irrelevant string' do
|
it 'returns false for irrelevant string' do
|
||||||
expect(TagManager.instance.local_domain?('DoMaIn.Test!')).to eq false
|
expect(TagManager.instance.local_domain?('DoMaIn.Example.com!')).to eq false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ RSpec.describe TagManager do
|
||||||
|
|
||||||
around do |example|
|
around do |example|
|
||||||
original_web_domain = Rails.configuration.x.web_domain
|
original_web_domain = Rails.configuration.x.web_domain
|
||||||
Rails.configuration.x.web_domain = 'domain.test'
|
Rails.configuration.x.web_domain = 'domain.example.com'
|
||||||
|
|
||||||
example.run
|
example.run
|
||||||
|
|
||||||
|
@ -43,11 +43,11 @@ RSpec.describe TagManager do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true if the slash-stripped string equals to web domain' do
|
it 'returns true if the slash-stripped string equals to web domain' do
|
||||||
expect(TagManager.instance.web_domain?('DoMaIn.Test/')).to eq true
|
expect(TagManager.instance.web_domain?('DoMaIn.Example.com/')).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns false for string with irrelevant characters' do
|
it 'returns false for string with irrelevant characters' do
|
||||||
expect(TagManager.instance.web_domain?('DoMaIn.Test!')).to eq false
|
expect(TagManager.instance.web_domain?('DoMaIn.Example.com!')).to eq false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ RSpec.describe TagManager do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns normalized domain' do
|
it 'returns normalized domain' do
|
||||||
expect(TagManager.instance.normalize_domain('DoMaIn.Test/')).to eq 'domain.test'
|
expect(TagManager.instance.normalize_domain('DoMaIn.Example.com/')).to eq 'domain.example.com'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -69,18 +69,18 @@ RSpec.describe TagManager do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true if the normalized string with port is local URL' do
|
it 'returns true if the normalized string with port is local URL' do
|
||||||
Rails.configuration.x.web_domain = 'domain.test:42'
|
Rails.configuration.x.web_domain = 'domain.example.com:42'
|
||||||
expect(TagManager.instance.local_url?('https://DoMaIn.Test:42/')).to eq true
|
expect(TagManager.instance.local_url?('https://DoMaIn.Example.com:42/')).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns true if the normalized string without port is local URL' do
|
it 'returns true if the normalized string without port is local URL' do
|
||||||
Rails.configuration.x.web_domain = 'domain.test'
|
Rails.configuration.x.web_domain = 'domain.example.com'
|
||||||
expect(TagManager.instance.local_url?('https://DoMaIn.Test/')).to eq true
|
expect(TagManager.instance.local_url?('https://DoMaIn.Example.com/')).to eq true
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'returns false for string with irrelevant characters' do
|
it 'returns false for string with irrelevant characters' do
|
||||||
Rails.configuration.x.web_domain = 'domain.test'
|
Rails.configuration.x.web_domain = 'domain.example.com'
|
||||||
expect(TagManager.instance.local_url?('https://domainn.test/')).to eq false
|
expect(TagManager.instance.local_url?('https://domain.example.net/')).to eq false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -119,7 +119,7 @@ describe Report do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'validatiions' do
|
describe 'validations' do
|
||||||
it 'has a valid fabricator' do
|
it 'has a valid fabricator' do
|
||||||
report = Fabricate(:report)
|
report = Fabricate(:report)
|
||||||
report.valid?
|
report.valid?
|
||||||
|
|
|
@ -114,13 +114,13 @@ RSpec.describe UserPolicy do
|
||||||
|
|
||||||
permissions :promote? do
|
permissions :promote? do
|
||||||
context 'admin?' do
|
context 'admin?' do
|
||||||
context 'promoteable?' do
|
context 'promotable?' do
|
||||||
it 'permits' do
|
it 'permits' do
|
||||||
expect(subject).to permit(admin, john.user)
|
expect(subject).to permit(admin, john.user)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context '!promoteable?' do
|
context '!promotable?' do
|
||||||
it 'denies' do
|
it 'denies' do
|
||||||
expect(subject).to_not permit(admin, admin.user)
|
expect(subject).to_not permit(admin, admin.user)
|
||||||
end
|
end
|
||||||
|
|
|
@ -63,20 +63,20 @@ RSpec.describe UnsuspendAccountService, type: :service do
|
||||||
describe 'unsuspending a remote account' do
|
describe 'unsuspending a remote account' do
|
||||||
include_examples 'common behavior' do
|
include_examples 'common behavior' do
|
||||||
let!(:account) { Fabricate(:account, domain: 'bob.com', uri: 'https://bob.com', inbox_url: 'https://bob.com/inbox', protocol: :activitypub) }
|
let!(:account) { Fabricate(:account, domain: 'bob.com', uri: 'https://bob.com', inbox_url: 'https://bob.com/inbox', protocol: :activitypub) }
|
||||||
let!(:reslove_account_service) { double }
|
let!(:resolve_account_service) { double }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
allow(ResolveAccountService).to receive(:new).and_return(reslove_account_service)
|
allow(ResolveAccountService).to receive(:new).and_return(resolve_account_service)
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'when the account is not remotely suspended' do
|
context 'when the account is not remotely suspended' do
|
||||||
before do
|
before do
|
||||||
allow(reslove_account_service).to receive(:call).with(account).and_return(account)
|
allow(resolve_account_service).to receive(:call).with(account).and_return(account)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 're-fetches the account' do
|
it 're-fetches the account' do
|
||||||
subject.call
|
subject.call
|
||||||
expect(reslove_account_service).to have_received(:call).with(account)
|
expect(resolve_account_service).to have_received(:call).with(account)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "merges back into local followers' feeds" do
|
it "merges back into local followers' feeds" do
|
||||||
|
@ -92,7 +92,7 @@ RSpec.describe UnsuspendAccountService, type: :service do
|
||||||
|
|
||||||
context 'when the account is remotely suspended' do
|
context 'when the account is remotely suspended' do
|
||||||
before do
|
before do
|
||||||
allow(reslove_account_service).to receive(:call).with(account) do |account|
|
allow(resolve_account_service).to receive(:call).with(account) do |account|
|
||||||
account.suspend!(origin: :remote)
|
account.suspend!(origin: :remote)
|
||||||
account
|
account
|
||||||
end
|
end
|
||||||
|
@ -100,7 +100,7 @@ RSpec.describe UnsuspendAccountService, type: :service do
|
||||||
|
|
||||||
it 're-fetches the account' do
|
it 're-fetches the account' do
|
||||||
subject.call
|
subject.call
|
||||||
expect(reslove_account_service).to have_received(:call).with(account)
|
expect(resolve_account_service).to have_received(:call).with(account)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does not merge back into local followers' feeds" do
|
it "does not merge back into local followers' feeds" do
|
||||||
|
@ -116,12 +116,12 @@ RSpec.describe UnsuspendAccountService, type: :service do
|
||||||
|
|
||||||
context 'when the account is remotely deleted' do
|
context 'when the account is remotely deleted' do
|
||||||
before do
|
before do
|
||||||
allow(reslove_account_service).to receive(:call).with(account).and_return(nil)
|
allow(resolve_account_service).to receive(:call).with(account).and_return(nil)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 're-fetches the account' do
|
it 're-fetches the account' do
|
||||||
subject.call
|
subject.call
|
||||||
expect(reslove_account_service).to have_received(:call).with(account)
|
expect(resolve_account_service).to have_received(:call).with(account)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "does not merge back into local followers' feeds" do
|
it "does not merge back into local followers' feeds" do
|
||||||
|
|
|
@ -22,7 +22,7 @@ module ProfileStories
|
||||||
def with_alice_as_local_user
|
def with_alice_as_local_user
|
||||||
@alice_bio = '@alice and @bob are fictional characters commonly used as'\
|
@alice_bio = '@alice and @bob are fictional characters commonly used as'\
|
||||||
'placeholder names in #cryptology, as well as #science and'\
|
'placeholder names in #cryptology, as well as #science and'\
|
||||||
'engineering 📖 literature. Not affilated with @pepe.'
|
'engineering 📖 literature. Not affiliated with @pepe.'
|
||||||
|
|
||||||
@alice = Fabricate(
|
@alice = Fabricate(
|
||||||
:user,
|
:user,
|
||||||
|
|
Loading…
Reference in New Issue