From 774ac473736cbf348827cf6d861e7fbbb72d7623 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 7 Oct 2018 23:44:58 +0200 Subject: Add conversations API (#8832) * Add conversations API * Add web UI for conversations * Add test for conversations API * Add tests for ConversationAccount * Improve web UI * Rename ConversationAccount to AccountConversation * Remove conversations on block and mute * Change last_status_id to be a denormalization of status_ids * Add optimistic locking --- app/controllers/api/v1/conversations_controller.rb | 55 ++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 app/controllers/api/v1/conversations_controller.rb (limited to 'app/controllers') diff --git a/app/controllers/api/v1/conversations_controller.rb b/app/controllers/api/v1/conversations_controller.rb new file mode 100644 index 000000000..736cb21ca --- /dev/null +++ b/app/controllers/api/v1/conversations_controller.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +class Api::V1::ConversationsController < Api::BaseController + LIMIT = 20 + + before_action -> { doorkeeper_authorize! :read, :'read:statuses' } + before_action :require_user! + after_action :insert_pagination_headers + + respond_to :json + + def index + @conversations = paginated_conversations + render json: @conversations, each_serializer: REST::ConversationSerializer + end + + private + + def paginated_conversations + AccountConversation.where(account: current_account) + .paginate_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id)) + end + + def insert_pagination_headers + set_pagination_headers(next_path, prev_path) + end + + def next_path + if records_continue? + api_v1_conversations_url pagination_params(max_id: pagination_max_id) + end + end + + def prev_path + unless @conversations.empty? + api_v1_conversations_url pagination_params(min_id: pagination_since_id) + end + end + + def pagination_max_id + @conversations.last.last_status_id + end + + def pagination_since_id + @conversations.first.last_status_id + end + + def records_continue? + @conversations.size == limit_param(LIMIT) + end + + def pagination_params(core_params) + params.slice(:limit).permit(:limit).merge(core_params) + end +end -- cgit From 2dba313100e2a5077df3ff4b00d12f9ed9f0bd72 Mon Sep 17 00:00:00 2001 From: ashleyhull-versent Date: Mon, 8 Oct 2018 09:20:45 +1100 Subject: Replace SVG asset with Custom mascot (#8766) --- app/controllers/admin/settings_controller.rb | 2 ++ app/presenters/instance_presenter.rb | 4 ++++ app/views/about/more.html.haml | 2 +- app/views/about/show.html.haml | 4 ++-- app/views/admin/settings/edit.html.haml | 2 ++ config/locales/en.yml | 3 +++ spec/views/about/show.html.haml_spec.rb | 1 + 7 files changed, 15 insertions(+), 3 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/admin/settings_controller.rb b/app/controllers/admin/settings_controller.rb index 7d38f76ae..d9f261489 100644 --- a/app/controllers/admin/settings_controller.rb +++ b/app/controllers/admin/settings_controller.rb @@ -19,6 +19,7 @@ module Admin theme thumbnail hero + mascot min_invite_role activity_api_enabled peers_api_enabled @@ -41,6 +42,7 @@ module Admin UPLOAD_SETTINGS = %w( thumbnail hero + mascot ).freeze def edit diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb index a4e4af889..9a9157f1b 100644 --- a/app/presenters/instance_presenter.rb +++ b/app/presenters/instance_presenter.rb @@ -44,4 +44,8 @@ class InstancePresenter def hero @hero ||= Rails.cache.fetch('site_uploads/hero') { SiteUpload.find_by(var: 'hero') } end + + def mascot + @mascot ||= Rails.cache.fetch('site_uploads/mascot') { SiteUpload.find_by(var: 'mascot') } + end end diff --git a/app/views/about/more.html.haml b/app/views/about/more.html.haml index ac7010986..f94c7c06f 100644 --- a/app/views/about/more.html.haml +++ b/app/views/about/more.html.haml @@ -25,7 +25,7 @@ %span= t 'about.status_count_after', count: @instance_presenter.status_count .row__mascot .landing-page__mascot - = image_tag asset_pack_path('elephant_ui_plane.svg'), alt: '' + = image_tag @instance_presenter.mascot&.file&.url || asset_pack_path('elephant_ui_plane.svg'), alt: '' .column-2 .landing-page__information.contact-widget diff --git a/app/views/about/show.html.haml b/app/views/about/show.html.haml index 8c7baa054..f5a78665d 100644 --- a/app/views/about/show.html.haml +++ b/app/views/about/show.html.haml @@ -63,7 +63,7 @@ %span= t 'about.status_count_after', count: @instance_presenter.status_count .row__mascot .landing-page__mascot - = image_tag asset_pack_path('elephant_ui_plane.svg'), alt: '' + = image_tag @instance_presenter.mascot&.file&.url || asset_pack_path('elephant_ui_plane.svg'), alt: '' - else .column-2.non-preview @@ -95,7 +95,7 @@ %span= t 'about.status_count_after', count: @instance_presenter.status_count .row__mascot .landing-page__mascot - = image_tag asset_pack_path('elephant_ui_plane.svg'), alt: '' + = image_tag @instance_presenter.mascot&.file&.url || asset_pack_path('elephant_ui_plane.svg'), alt: '' - if Setting.timeline_preview .column-3 diff --git a/app/views/admin/settings/edit.html.haml b/app/views/admin/settings/edit.html.haml index c5a606693..f3f9bdaf0 100644 --- a/app/views/admin/settings/edit.html.haml +++ b/app/views/admin/settings/edit.html.haml @@ -26,6 +26,8 @@ = f.input :thumbnail, as: :file, wrapper: :with_block_label, label: t('admin.settings.thumbnail.title'), hint: t('admin.settings.thumbnail.desc_html') .fields-row__column.fields-row__column-6.fields-group = f.input :hero, as: :file, wrapper: :with_block_label, label: t('admin.settings.hero.title'), hint: t('admin.settings.hero.desc_html') + .fields-row__column.fields-row__column-6.fields-group + = f.input :mascot, as: :file, wrapper: :with_block_label, label: t('admin.settings.mascot.title'), hint: t('admin.settings.mascot.desc_html') %hr.spacer/ diff --git a/config/locales/en.yml b/config/locales/en.yml index 51be1ad4a..e771496a1 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -368,6 +368,9 @@ en: hero: desc_html: Displayed on the frontpage. At least 600x100px recommended. When not set, falls back to instance thumbnail title: Hero image + mascot: + desc_html: Displayed on multiple pages. At least 293px × 205px recommended. When not set, falls back to instance thumbnail + title: Mascot image peers_api_enabled: desc_html: Domain names this instance has encountered in the fediverse title: Publish list of discovered instances diff --git a/spec/views/about/show.html.haml_spec.rb b/spec/views/about/show.html.haml_spec.rb index 12efc06fd..eb81090b5 100644 --- a/spec/views/about/show.html.haml_spec.rb +++ b/spec/views/about/show.html.haml_spec.rb @@ -18,6 +18,7 @@ describe 'about/show.html.haml', without_verify_partial_doubles: true do open_registrations: false, thumbnail: nil, hero: nil, + mascot: nil, user_count: 0, status_count: 0, contact_account: nil, -- cgit From a00ce8c92c06f42109aad5cfe65d46862cf037bb Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 8 Oct 2018 04:48:54 +0200 Subject: Remove dead code (#8919) SignatureVerification#matches_time_window? is not called anywhere. --- app/controllers/concerns/signature_verification.rb | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'app/controllers') diff --git a/app/controllers/concerns/signature_verification.rb b/app/controllers/concerns/signature_verification.rb index 4d77fa432..5f95fa346 100644 --- a/app/controllers/concerns/signature_verification.rb +++ b/app/controllers/concerns/signature_verification.rb @@ -87,16 +87,6 @@ module SignatureVerification end.join("\n") end - def matches_time_window? - begin - time_sent = DateTime.httpdate(request.headers['Date']) - rescue ArgumentError - return false - end - - (Time.now.utc - time_sent).abs <= 30 - end - def body_digest "SHA-256=#{Digest::SHA256.base64digest(request_body)}" end -- cgit