diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2018-01-04 01:21:38 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-04 01:21:38 +0100 |
commit | c10f4bdb037d87444a76e52e85f046e7e59d753a (patch) | |
tree | 52298920f6f4bae47bf6ef5f23f1d43b7e4d0997 /app/controllers/statuses_controller.rb | |
parent | d907d4352e9b6cb22bc1fabd42ca3fc60aef8a37 (diff) |
Cache JSON of immutable ActivityPub representations (#6171)
Diffstat (limited to 'app/controllers/statuses_controller.rb')
-rw-r--r-- | app/controllers/statuses_controller.rb | 24 |
1 files changed, 10 insertions, 14 deletions
diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb index c00b9f034..1a440fd59 100644 --- a/app/controllers/statuses_controller.rb +++ b/app/controllers/statuses_controller.rb @@ -10,7 +10,7 @@ class StatusesController < ApplicationController before_action :set_link_headers before_action :check_account_suspension before_action :redirect_to_original, only: [:show] - before_action { response.headers['Vary'] = 'Accept' } + before_action :set_cache_headers def show respond_to do |format| @@ -22,25 +22,21 @@ class StatusesController < ApplicationController end format.json do - render json: @status, - serializer: ActivityPub::NoteSerializer, - adapter: ActivityPub::Adapter, - content_type: 'application/activity+json' - - # Allow HTTP caching for 3 minutes if the status is public - unless @stream_entry.hidden? - request.session_options[:skip] = true - expires_in(3.minutes, public: true) + skip_session! unless @stream_entry.hidden? + + render_cached_json(['activitypub', 'note', @status.cache_key], content_type: 'application/activity+json') do + ActiveModelSerializers::SerializableResource.new(@status, serializer: ActivityPub::NoteSerializer, adapter: ActivityPub::Adapter) end end end end def activity - render json: @status, - serializer: ActivityPub::ActivitySerializer, - adapter: ActivityPub::Adapter, - content_type: 'application/activity+json' + skip_session! + + render_cached_json(['activitypub', 'activity', @status.cache_key], content_type: 'application/activity+json') do + ActiveModelSerializers::SerializableResource.new(@status, serializer: ActivityPub::ActivitySerializer, adapter: ActivityPub::Adapter) + end end def embed |