This repository has been archived by the owner on Dec 21, 2023. It is now read-only.
forked from mastodon/mastodon
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix media attachments enumeration (mastodon#14254)
* Fix media attachment enumeration * Switch media_attachments id to snowflake ids Co-authored-by: Thibaut Girka <[email protected]>
- Loading branch information
1 parent
81a3db1
commit 6e25574
Showing
5 changed files
with
77 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
db/migrate/20200622213645_media_attachment_ids_to_timestamp_ids.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
class MediaAttachmentIdsToTimestampIds < ActiveRecord::Migration[5.1] | ||
def up | ||
# Set up the media_attachments.id column to use our timestamp-based IDs. | ||
safety_assured do | ||
execute("ALTER TABLE media_attachments ALTER COLUMN id SET DEFAULT timestamp_id('media_attachments')") | ||
end | ||
|
||
# Make sure we have a sequence to use. | ||
Mastodon::Snowflake.ensure_id_sequences_exist | ||
end | ||
|
||
def down | ||
execute("LOCK media_attachments") | ||
execute("SELECT setval('media_attachments_id_seq', (SELECT MAX(id) FROM media_attachments))") | ||
execute("ALTER TABLE media_attachments ALTER COLUMN id SET DEFAULT nextval('media_attachments_id_seq')") | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
# frozen_string_literal: true | ||
|
||
require 'rails_helper' | ||
|
||
describe MediaProxyController do | ||
render_views | ||
|
||
before do | ||
stub_request(:get, 'http://example.com/attachment.png').to_return(request_fixture('avatar.txt')) | ||
end | ||
|
||
describe '#show' do | ||
it 'redirects when attached to a status' do | ||
status = Fabricate(:status) | ||
media_attachment = Fabricate(:media_attachment, status: status, remote_url: 'http://example.com/attachment.png') | ||
get :show, params: { id: media_attachment.id } | ||
|
||
expect(response).to have_http_status(302) | ||
end | ||
|
||
it 'responds with missing when there is not an attached status' do | ||
media_attachment = Fabricate(:media_attachment, status: nil, remote_url: 'http://example.com/attachment.png') | ||
get :show, params: { id: media_attachment.id } | ||
|
||
expect(response).to have_http_status(404) | ||
end | ||
|
||
it 'raises when id cant be found' do | ||
get :show, params: { id: 'missing' } | ||
|
||
expect(response).to have_http_status(404) | ||
end | ||
|
||
it 'raises when not permitted to view' do | ||
status = Fabricate(:status, visibility: :direct) | ||
media_attachment = Fabricate(:media_attachment, status: status, remote_url: 'http://example.com/attachment.png') | ||
get :show, params: { id: media_attachment.id } | ||
|
||
expect(response).to have_http_status(404) | ||
end | ||
end | ||
end |