Skip to content
Snippets Groups Projects
Commit 9d555293 authored by Eugen Rochko's avatar Eugen Rochko
Browse files

Fix text color in dashboard inputs, sanitize remote status content in UI,

simplify FanOutOnWriteService, add /api/accounts/lookup method
parent bf08d46e
No related branches found
No related tags found
No related merge requests found
Showing
with 85 additions and 13 deletions
# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://coffeescript.org/
...@@ -243,6 +243,7 @@ ...@@ -243,6 +243,7 @@
padding-bottom: 6px; padding-bottom: 6px;
font-size: 14px; font-size: 14px;
font-family: 'Roboto', sans-serif; font-family: 'Roboto', sans-serif;
color: #282c37;
&:focus, &:active { &:focus, &:active {
border-bottom: 2px solid #2b90d9; border-bottom: 2px solid #2b90d9;
......
class Api::Accounts::LookupController < ApplicationController
def index
@accounts = Account.where(domain: nil).where(username: lookup_params)
end
private
def lookup_params
(params[:usernames] || '').split(',').map(&:strip)
end
end
module Api::Accounts::LookupHelper
end
...@@ -27,4 +27,12 @@ module StreamEntriesHelper ...@@ -27,4 +27,12 @@ module StreamEntriesHelper
def favourited_by_me_class(status) def favourited_by_me_class(status)
user_signed_in? && current_user.account.favourited?(status) ? 'favourited' : '' user_signed_in? && current_user.account.favourited?(status) ? 'favourited' : ''
end end
def content_for_status(actual_status)
if actual_status.local?
linkify(actual_status)
else
sanitize(actual_status.content, tags: %w(a br p), attributes: %w(href rel))
end
end
end end
class BaseService class BaseService
include RoutingHelper
include ActionView::Helpers::TextHelper include ActionView::Helpers::TextHelper
include ActionView::Helpers::SanitizeHelper
include RoutingHelper
include ApplicationHelper include ApplicationHelper
include AtomBuilderHelper include AtomBuilderHelper
end end
...@@ -4,18 +4,25 @@ class FanOutOnWriteService < BaseService ...@@ -4,18 +4,25 @@ class FanOutOnWriteService < BaseService
# Push a status into home and mentions feeds # Push a status into home and mentions feeds
# @param [Status] status # @param [Status] status
def call(status) def call(status)
replied_to_user = status.reply? ? status.thread.account : nil deliver_to_self(status) if status.account.local?
deliver_to_followers(status, status.reply? ? status.thread.account : nil)
deliver_to_mentioned(status)
end
private
# Deliver to local self def deliver_to_self(status)
push(:home, status.account.id, status) if status.account.local? push(:home, status.account.id, status)
end
# Deliver to local followers def deliver_to_followers(status, replied_to_user)
status.account.followers.each do |follower| status.account.followers.each do |follower|
next if (status.reply? && !(follower.id = replied_to_user.id || follower.following?(replied_to_user))) || !follower.local? next if (status.reply? && !(follower.id = replied_to_user.id || follower.following?(replied_to_user))) || !follower.local?
push(:home, follower.id, status) push(:home, follower.id, status)
end end
end
# Deliver to local mentioned def deliver_to_mentioned(status)
status.mentioned_accounts.each do |mention| status.mentioned_accounts.each do |mention|
mentioned_account = mention.account mentioned_account = mention.account
next unless mentioned_account.local? next unless mentioned_account.local?
...@@ -23,8 +30,6 @@ class FanOutOnWriteService < BaseService ...@@ -23,8 +30,6 @@ class FanOutOnWriteService < BaseService
end end
end end
private
def push(type, receiver_id, status) def push(type, receiver_id, status)
redis.zadd(key(type, receiver_id), status.created_at.to_i, status.id) redis.zadd(key(type, receiver_id), status.created_at.to_i, status.id)
trim(type, receiver_id) trim(type, receiver_id)
......
class SendInteractionService < BaseService class SendInteractionService < BaseService
include AtomBuilderHelper
# Send an Atom representation of an interaction to a remote Salmon endpoint # Send an Atom representation of an interaction to a remote Salmon endpoint
# @param [StreamEntry] stream_entry # @param [StreamEntry] stream_entry
# @param [Account] target_account # @param [Account] target_account
......
...@@ -5,4 +5,4 @@ ...@@ -5,4 +5,4 @@
= link_to url_for_target(account) do = link_to url_for_target(account) do
%span.display_name= display_name(account) %span.display_name= display_name(account)
%span.username= "@#{account.acct}" %span.username= "@#{account.acct}"
%p.note= truncate(account.note, length: 150) %p.note= truncate(strip_tags(account.note), length: 150)
collection @accounts
extends('api/accounts/show')
...@@ -33,8 +33,7 @@ ...@@ -33,8 +33,7 @@
.counter-btn{ class: favourited_by_me_class(status) } .counter-btn{ class: favourited_by_me_class(status) }
%i.fa.fa-star %i.fa.fa-star
%span.counter-number= status.reblog? ? status.reblog.favourites_count : status.favourites_count %span.counter-number= status.reblog? ? status.reblog.favourites_count : status.favourites_count
.content .content= content_for_status(status.reblog? ? status.reblog : status)
= status.reblog? ? (status.reblog.local? ? linkify(status.reblog) : status.reblog.content.html_safe) : (status.local? ? linkify(status) : status.content.html_safe)
- if include_threads - if include_threads
- status.descendants.with_includes.with_counters.each do |status| - status.descendants.with_includes.with_counters.each do |status|
......
...@@ -47,6 +47,10 @@ Rails.application.routes.draw do ...@@ -47,6 +47,10 @@ Rails.application.routes.draw do
resources :follows, only: [:create] resources :follows, only: [:create]
resources :accounts, only: [:show] do resources :accounts, only: [:show] do
collection do
get :lookup, to: 'accounts/lookup#index', as: :lookup
end
member do member do
get :statuses get :statuses
get :followers get :followers
......
require 'rails_helper'
RSpec.describe Api::Accounts::LookupController, type: :controller do
let(:user) { Fabricate(:user, account: Fabricate(:account, username: 'alice')) }
let(:token) { double acceptable?: true, resource_owner_id: user.id }
before do
allow(controller).to receive(:doorkeeper_token) { token }
end
describe 'GET #index' do
before do
Fabricate(:account, username: 'alice')
Fabricate(:account, username: 'bob')
get :index, usernames: 'alice,bob'
end
it 'returns http success' do
expect(response).to have_http_status(:success)
end
end
end
require 'rails_helper'
# Specs in this file have access to a helper object that includes
# the Api::Accounts::LookupHelper. For example:
#
# describe Api::Accounts::LookupHelper do
# describe "string concat" do
# it "concats two strings with spaces" do
# expect(helper.concat_strings("this","that")).to eq("this that")
# end
# end
# end
RSpec.describe Api::Accounts::LookupHelper, type: :helper do
pending "add some examples to (or delete) #{__FILE__}"
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment