2016-11-15 16:56:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# frozen_string_literal: true 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 09:14:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# == Schema Information 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# Table name: accounts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-23 18:29:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  id                      :bigint(8)        not null, primary key 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 09:14:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  username                :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  domain                  :string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  secret                  :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  private_key             :text 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  public_key              :text             default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  remote_url              :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  salmon_url              :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  hub_url                 :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  created_at              :datetime         not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  updated_at              :datetime         not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  note                    :text             default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  display_name            :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  uri                     :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  url                     :string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  avatar_file_name        :string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  avatar_content_type     :string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  avatar_file_size        :integer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  avatar_updated_at       :datetime 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  header_file_name        :string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  header_content_type     :string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  header_file_size        :integer 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  header_updated_at       :datetime 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  avatar_remote_url       :string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  subscription_expires_at :datetime 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  locked                  :boolean          default(FALSE), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  header_remote_url       :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  last_webfingered_at     :datetime 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-19 17:06:46 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  inbox_url               :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  outbox_url              :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  shared_inbox_url        :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  followers_url           :string           default(""), not null 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  protocol                :integer          default("ostatus"), not null 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-07 19:06:44 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  memorial                :boolean          default(FALSE), not null 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-23 18:29:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  moved_to_account_id     :bigint(8) 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-04 09:19:11 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  featured_collection_url :string 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  fields                  :jsonb 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-07 09:31:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  actor_type              :string 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-06 17:36:11 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  discoverable            :boolean 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-29 02:24:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  also_known_as           :string           is an Array 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-14 19:05:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  silenced_at             :datetime 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								#  suspended_at            :datetime 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-13 16:45:50 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								#  trust_level             :integer 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-02 09:14:47 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-15 16:56:29 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-17 17:56:23 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								class  Account  <  ApplicationRecord 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-27 12:28:01 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  USERNAME_RE  =  / [a-z0-9_]+([a-z0-9_ \ .-]+[a-z0-9_]+)? /i 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-22 10:45:48 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  MENTION_RE   =  / (?<=^|[^ \/ [:word:]])@(( #{ USERNAME_RE } )(?:@[a-z0-9 \ . \ -]+[a-z0-9]+)?) /i 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-05 15:37:02 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-03 01:32:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  AccountAssociations 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-05 15:37:02 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  AccountAvatar 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-31 14:28:45 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  AccountFinderConcern 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-05 15:37:02 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  AccountHeader 
							 
						 
					
						
							
								
									
										
											 
										 
										
											
												Account domain blocks (#2381)
* Add <ostatus:conversation /> tag to Atom input/output
Only uses ref attribute (not href) because href would be
the alternate link that's always included also.
Creates new conversation for every non-reply status. Carries
over conversation for every reply. Keeps remote URIs verbatim,
generates local URIs on the fly like the rest of them.
* Conversation muting - prevents notifications that reference a conversation
(including replies, favourites, reblogs) from being created. API endpoints
/api/v1/statuses/:id/mute and /api/v1/statuses/:id/unmute
Currently no way to tell when a status/conversation is muted, so the web UI
only has a "disable notifications" button, doesn't work as a toggle
* Display "Dismiss notifications" on all statuses in notifications column, not just own
* Add "muted" as a boolean attribute on statuses JSON
For now always false on contained reblogs, since it's only relevant for
statuses returned from the notifications endpoint, which are not nested
Remove "Disable notifications" from detailed status view, since it's
only relevant in the notifications column
* Up max class length
* Remove pending test for conversation mute
* Add tests, clean up
* Rename to "mute conversation" and "unmute conversation"
* Raise validation error when trying to mute/unmute status without conversation
* Adding account domain blocks that filter notifications and public timelines
* Add tests for domain blocks in notifications, public timelines
Filter reblogs of blocked domains from home
* Add API for listing and creating account domain blocks
* API for creating/deleting domain blocks, tests for Status#ancestors
and Status#descendants, filter domain blocks from them
* Filter domains in streaming API
* Update account_domain_block_spec.rb
											 
										 
										
											2017-05-19 01:14:30 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  AccountInteractions 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-05 15:37:02 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  Attachmentable 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-18 00:16:48 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  Paginable 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-19 00:43:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  AccountCounters 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-26 14:38:42 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  include  DomainNormalizable 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-12 18:22:43 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-13 16:45:50 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  TRUST_LEVELS  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    untrusted :  0 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    trusted :  1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  } . freeze 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-19 17:06:46 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  enum  protocol :  [ :ostatus ,  :activitypub ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-07 23:40:57 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :username ,  presence :  true 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-08 15:22:01 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # Remote user validations 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-11 17:01:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :username ,  uniqueness :  {  scope :  :domain ,  case_sensitive :  true  } ,  if :  - >  {  ! local?  &&  will_save_change_to_username?  } 
							 
						 
					
						
							
								
									
										
										
										
											2018-07-30 22:29:52 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :username ,  format :  {  with :  / \ A #{ USERNAME_RE } \ z /i  } ,  if :  - >  {  ! local?  &&  will_save_change_to_username?  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-07 23:40:57 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  # Local user validations 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-19 01:44:42 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :username ,  format :  {  with :  / \ A[a-z0-9_]+ \ z /i  } ,  length :  {  maximum :  30  } ,  if :  - >  {  local?  &&  will_save_change_to_username?  &&  actor_type  !=  'Application'  } 
							 
						 
					
						
							
								
									
										
										
										
											2018-03-21 10:26:53 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates_with  UniqueUsernameValidator ,  if :  - >  {  local?  &&  will_save_change_to_username?  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-11 17:01:32 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates_with  UnreservedUsernameValidator ,  if :  - >  {  local?  &&  will_save_change_to_username?  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  validates  :display_name ,  length :  {  maximum :  30  } ,  if :  - >  {  local?  &&  will_save_change_to_display_name?  } 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-19 15:51:44 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :note ,  note_length :  {  maximum :  500  } ,  if :  - >  {  local?  &&  will_save_change_to_note?  } 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-05 21:11:19 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  validates  :fields ,  length :  {  maximum :  4  } ,  if :  - >  {  local?  &&  will_save_change_to_fields?  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-03-16 11:18:09 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-20 00:39:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :remote ,  - >  {  where . not ( domain :  nil )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :local ,  - >  {  where ( domain :  nil )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-21 17:32:41 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :expiring ,  - > ( time )  {  remote . where . not ( subscription_expires_at :  nil ) . where ( 'subscription_expires_at < ?' ,  time )  } 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-17 13:50:48 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :partitioned ,  - >  {  order ( Arel . sql ( 'row_number() over (partition by domain)' ) )  } 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-14 19:05:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :silenced ,  - >  {  where . not ( silenced_at :  nil )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :suspended ,  - >  {  where . not ( suspended_at :  nil )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :without_suspended ,  - >  {  where ( suspended_at :  nil )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :without_silenced ,  - >  {  where ( silenced_at :  nil )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-07 17:55:40 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :recent ,  - >  {  reorder ( id :  :desc )  } 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-26 15:53:27 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :bots ,  - >  {  where ( actor_type :  %w( Application Service ) )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-07 17:55:40 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :alphabetic ,  - >  {  order ( domain :  :asc ,  username :  :asc )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-18 15:09:07 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :by_domain_accounts ,  - >  {  group ( :domain ) . select ( :domain ,  'COUNT(*) AS accounts_count' ) . order ( 'accounts_count desc' )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-22 15:50:58 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :matches_username ,  - > ( value )  {  where ( arel_table [ :username ] . matches ( " #{ value } % " ) )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :matches_display_name ,  - > ( value )  {  where ( arel_table [ :display_name ] . matches ( " #{ value } % " ) )  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-13 19:30:07 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :matches_domain ,  - > ( value )  {  where ( arel_table [ :domain ] . matches ( " % #{ value } % " ) )  } 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-02 10:47:32 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :searchable ,  - >  {  without_suspended . where ( moved_to_account_id :  nil )  } 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-30 00:14:36 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :discoverable ,  - >  {  searchable . without_silenced . where ( discoverable :  true ) . left_outer_joins ( :account_stat )  } 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-06 17:36:11 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :tagged_with ,  - > ( tag )  {  joins ( :accounts_tags ) . where ( accounts_tags :  {  tag_id :  tag  } )  } 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-30 00:14:36 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :by_recent_status ,  - >  {  order ( Arel . sql ( '(case when account_stats.last_status_at is null then 1 else 0 end) asc, account_stats.last_status_at desc, accounts.id desc' ) )  } 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-17 04:32:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :popular ,  - >  {  order ( 'account_stats.followers_count desc' )  } 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-22 00:13:10 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :by_domain_and_subdomains ,  - > ( domain )  {  where ( domain :  domain ) . or ( where ( arel_table [ :domain ] . matches ( '%.'  +  domain ) ) )  } 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-30 00:14:36 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  scope  :not_excluded_by_account ,  - > ( account )  {  where . not ( id :  account . excluded_from_timeline_account_ids )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  scope  :not_domain_blocked_by_account ,  - > ( account )  {  where ( arel_table [ :domain ] . eq ( nil ) . or ( arel_table [ :domain ] . not_in ( account . excluded_from_timeline_domains ) ) )  } 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-16 18:57:54 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:12:37 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  delegate  :email , 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-10 09:16:06 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :unconfirmed_email , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-01 23:31:02 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :current_sign_in_ip , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								           :current_sign_in_at , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								           :confirmed? , 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-14 05:28:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :approved? , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								           :pending? , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-20 02:52:34 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :disabled? , 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-11 16:32:44 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :unconfirmed_or_pending? , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-20 02:52:34 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :role , 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-16 17:12:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :admin? , 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-17 01:22:38 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :moderator? , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								           :staff? , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-08 17:10:50 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :locale , 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-18 02:26:51 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :hides_network? , 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-02 19:18:15 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           :shows_application? , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-01 23:31:02 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								           to :  :user , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								           prefix :  true , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								           allow_nil :  true 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:12:37 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-06-17 13:54:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  delegate  :chosen_languages ,  to :  :user ,  prefix :  false ,  allow_nil :  true 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-01 11:42:13 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-16 01:24:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  update_index ( 'accounts#account' ,  :self )  if  Chewy . enabled? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 16:00:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  local? 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    domain . nil? 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 16:00:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-11-18 19:39:02 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  moved? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    moved_to_account_id . present? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-07 09:31:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  bot? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    %w( Application Service ) . include?  actor_type 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-19 01:44:42 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  instance_actor? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    id  ==  - 99 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-07 09:31:07 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  alias  bot  bot? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  bot = ( val ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    self . actor_type  =  ActiveModel :: Type :: Boolean . new . cast ( val )  ?  'Service'  :  'Person' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  acct 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    local?  ?  username  :  " #{ username } @ #{ domain } " 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-10 16:58:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  local_username_and_domain 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    " #{ username } @ #{ Rails . configuration . x . local_domain } " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												Add local followers page to admin account UI (#9610)
* Add local followers page to admin account UI
For moderation, I often find myself wondering who, locally, is following
a remote user. Currently, to see this, I have to go back to the web UI,
paste in their full handle, click their profile, and go to the
"Followers" tab (plus, this information is incidental, and if mastodon
ever decides to resolve all of the follower information, there will be
no place local followers are shown). This PR adds a new page which is
accessible via the "following" count on the admin's account view
page, which shows the local followers. (It has filter parameters for
account location to indicate that only local followers are shown, and
leave room for expansion if mastodon ever decides to store the entire
remote follow list).
* Normalize en.yml
											 
										 
										
											2018-12-27 04:15:39 -08:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  local_followers_count 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Follow . where ( target_account_id :  id ) . count 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-10 16:58:06 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  to_webfinger_s 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    " acct: #{ local_username_and_domain } " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  subscribed? 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-04 02:13:04 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    subscription_expires_at . present? 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 18:10:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-16 01:24:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  searchable? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ! ( suspended?  ||  moved? ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-28 17:50:14 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  possibly_stale? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    last_webfingered_at . nil?  ||  last_webfingered_at  < =  1 . day . ago 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-13 16:45:50 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  trust_level 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    self [ :trust_level ]  ||  0 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-28 17:50:14 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  refresh! 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-06 23:26:16 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    ResolveAccountService . new . call ( acct )  unless  local? 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-28 17:50:14 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-05-14 19:05:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  silenced? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    silenced_at . present? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-13 16:45:50 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  silence! ( date  =  Time . now . utc ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-14 19:05:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    update! ( silenced_at :  date ) 
							 
						 
					
						
							
								
									
										
										
											
												Add moderation warnings (#9519)
* Add moderation warnings
Replace individual routes for disabling, silencing, and suspending
a user, as well as the report update route, with a unified account
action controller that allows you to select an action (none,
disable, silence, suspend) as well as whether it should generate an
e-mail notification with optional custom text. That notification,
with the optional custom text, is saved as a warning.
Additionally, there are warning presets you can configure to save
time when performing the above.
* Use Account#local_username_and_domain
											 
										 
										
											2018-12-22 20:02:09 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  unsilence! 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-13 16:45:50 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    update! ( silenced_at :  nil ,  trust_level :  trust_level  ==  TRUST_LEVELS [ :untrusted ]  ?  TRUST_LEVELS [ :trusted ]  :  trust_level ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-14 19:05:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  suspended? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    suspended_at . present? 
							 
						 
					
						
							
								
									
										
										
											
												Add moderation warnings (#9519)
* Add moderation warnings
Replace individual routes for disabling, silencing, and suspending
a user, as well as the report update route, with a unified account
action controller that allows you to select an action (none,
disable, silence, suspend) as well as whether it should generate an
e-mail notification with optional custom text. That notification,
with the optional custom text, is saved as a warning.
Additionally, there are warning presets you can configure to save
time when performing the above.
* Use Account#local_username_and_domain
											 
										 
										
											2018-12-22 20:02:09 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-07-13 16:45:50 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  suspend! ( date  =  Time . now . utc ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-22 11:53:41 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    transaction  do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      user & . disable!  if  local? 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-14 19:05:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      update! ( suspended_at :  date ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-08-22 11:53:41 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-11-07 19:06:44 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  unsuspend! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    transaction  do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      user & . enable!  if  local? 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-14 19:05:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      update! ( suspended_at :  nil ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-11-07 19:06:44 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  memorialize! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    transaction  do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      user & . disable!  if  local? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      update! ( memorial :  true ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-04 23:11:18 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  sign? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    true 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 16:00:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  keypair 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-21 17:32:41 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    @keypair  || =  OpenSSL :: PKey :: RSA . new ( private_key  ||  public_key ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-22 16:00:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-06 17:36:11 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  tags_as_strings = ( tag_names ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-07 10:01:55 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    hashtags_map  =  Tag . find_or_create_by_names ( tag_names ) . each_with_object ( { } )  {  | tag ,  h |  h [ tag . name ]  =  tag  } 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-06 17:36:11 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    # Remove hashtags that are to be deleted 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    tags . each  do  | tag | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  hashtags_map . key? ( tag . name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        hashtags_map . delete ( tag . name ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        transaction  do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          tags . delete ( tag ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          tag . decrement_count! ( :accounts_count ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    # Add hashtags that were so far missing 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    hashtags_map . each_value  do  | tag | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      transaction  do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        tags  <<  tag 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        tag . increment_count! ( :accounts_count ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-29 02:24:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  also_known_as 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    self [ :also_known_as ]  ||  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  fields 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ( self [ :fields ]  ||  [ ] ) . map  {  | f |  Field . new ( self ,  f )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  fields_attributes = ( attributes ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    fields      =  [ ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    old_fields  =  self [ :fields ]  ||  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-05 15:19:54 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    old_fields  =  [ ]  if  old_fields . is_a? ( Hash ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-05 21:11:19 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    if  attributes . is_a? ( Hash ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      attributes . each_value  do  | attr | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        next  if  attr [ :name ] . blank? 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        previous  =  old_fields . find  {  | item |  item [ 'value' ]  ==  attr [ :value ]  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  previous  &&  previous [ 'verified_at' ] . present? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          attr [ :verified_at ]  =  previous [ 'verified_at' ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-05 21:11:19 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        fields  <<  attr 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    self [ :fields ]  =  fields 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  DEFAULT_FIELDS_SIZE  =  4 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  build_fields 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    return  if  fields . size  > =  DEFAULT_FIELDS_SIZE 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    tmp  =  self [ :fields ]  ||  [ ] 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-08 19:59:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    tmp  =  [ ]  if  tmp . is_a? ( Hash ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    ( DEFAULT_FIELDS_SIZE  -  tmp . size ) . times  do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      tmp  <<  {  name :  '' ,  value :  ''  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    self . fields  =  tmp 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-20 22:53:20 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								  def  subscription ( webhook_url ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-21 17:32:41 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    @subscription  || =  OStatus2 :: Subscription . new ( remote_url ,  secret :  secret ,  webhook :  webhook_url ,  hub :  hub_url ) 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-20 22:53:20 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-26 15:28:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-05 15:37:02 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  save_with_optional_media! 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-02 14:14:49 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    save! 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-19 02:14:57 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  rescue  ActiveRecord :: RecordInvalid 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-19 09:37:07 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    self . avatar               =  nil 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-18 22:51:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    self . header               =  nil 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-19 09:37:07 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    self [ :avatar_remote_url ]  =  '' 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-18 22:51:20 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    self [ :header_remote_url ]  =  '' 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-19 02:14:57 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    save! 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-28 14:33:13 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-25 02:13:30 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  object_type 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    :person 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-02-29 19:42:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  to_param 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-29 21:28:21 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    username 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-29 19:42:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-28 09:10:41 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  excluded_from_timeline_account_ids 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Rails . cache . fetch ( " exclude_account_ids_for: #{ id } " )  {  blocking . pluck ( :target_account_id )  +  blocked_by . pluck ( :account_id )  +  muting . pluck ( :target_account_id )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										 
										
											
												Account domain blocks (#2381)
* Add <ostatus:conversation /> tag to Atom input/output
Only uses ref attribute (not href) because href would be
the alternate link that's always included also.
Creates new conversation for every non-reply status. Carries
over conversation for every reply. Keeps remote URIs verbatim,
generates local URIs on the fly like the rest of them.
* Conversation muting - prevents notifications that reference a conversation
(including replies, favourites, reblogs) from being created. API endpoints
/api/v1/statuses/:id/mute and /api/v1/statuses/:id/unmute
Currently no way to tell when a status/conversation is muted, so the web UI
only has a "disable notifications" button, doesn't work as a toggle
* Display "Dismiss notifications" on all statuses in notifications column, not just own
* Add "muted" as a boolean attribute on statuses JSON
For now always false on contained reblogs, since it's only relevant for
statuses returned from the notifications endpoint, which are not nested
Remove "Disable notifications" from detailed status view, since it's
only relevant in the notifications column
* Up max class length
* Remove pending test for conversation mute
* Add tests, clean up
* Rename to "mute conversation" and "unmute conversation"
* Raise validation error when trying to mute/unmute status without conversation
* Adding account domain blocks that filter notifications and public timelines
* Add tests for domain blocks in notifications, public timelines
Filter reblogs of blocked domains from home
* Add API for listing and creating account domain blocks
* API for creating/deleting domain blocks, tests for Status#ancestors
and Status#descendants, filter domain blocks from them
* Filter domains in streaming API
* Update account_domain_block_spec.rb
											 
										 
										
											2017-05-19 01:14:30 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  excluded_from_timeline_domains 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Rails . cache . fetch ( " exclude_domains_for: #{ id } " )  {  domain_blocks . pluck ( :domain )  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-11-30 03:50:05 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  preferred_inbox_url 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    shared_inbox_url . presence  ||  inbox_url 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  class  Field  <  ActiveModelSerializers :: Model 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    attributes  :name ,  :value ,  :verified_at ,  :account ,  :errors 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  initialize ( account ,  attributes ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @account      =  account 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @attributes   =  attributes 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 15:47:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      @name         =  attributes [ 'name' ] . strip [ 0 ,  string_limit ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @value        =  attributes [ 'value' ] . strip [ 0 ,  string_limit ] 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      @verified_at  =  attributes [ 'verified_at' ] & . to_datetime 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @errors       =  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  verified? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      verified_at . present? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 15:47:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  value_for_verification 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @value_for_verification  || =  begin 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        if  account . local? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          value 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          ActionController :: Base . helpers . strip_tags ( value ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  verifiable? 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 15:47:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      value_for_verification . present?  &&  value_for_verification . start_with? ( 'http://' ,  'https://' ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  mark_verified! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @verified_at  =  Time . now . utc 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      @attributes [ 'verified_at' ]  =  @verified_at 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-02 15:57:37 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  to_h 
							 
						 
					
						
							
								
									
										
										
										
											2018-09-18 16:45:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      {  name :  @name ,  value :  @value ,  verified_at :  @verified_at  } 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-02 15:57:37 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 15:47:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    private 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    def  string_limit 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      if  account . local? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        255 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        2047 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-14 12:41:08 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-09 17:48:44 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  class  <<  self 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-12 00:16:03 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  readonly_attributes 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      super  -  %w( statuses_count following_count followers_count ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 01:34:27 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  domains 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-12 21:45:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      reorder ( nil ) . pluck ( Arel . sql ( 'distinct accounts.domain' ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-06-23 01:34:27 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-08-13 00:44:41 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  inboxes 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-12 21:45:17 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      urls  =  reorder ( nil ) . where ( protocol :  :activitypub ) . pluck ( Arel . sql ( " distinct coalesce(nullif(accounts.shared_inbox_url, ''), accounts.inbox_url) " ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-09-29 03:16:20 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      DeliveryFailureTracker . filter ( urls ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-08-13 00:44:41 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												Add type, limit, offset, min_id, max_id, account_id to search API (#10091)
* Add type, limit, offset, min_id, max_id, account_id to search API
Fix #8939
* Make the offset work on accounts and hashtags search as well
* Assure brakeman we are not doing mass assignment here
* Do not allow paginating unless a type is chosen
* Fix search query and index id field on statuses instead of created_at
											 
										 
										
											2019-02-26 15:21:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  search_for ( terms ,  limit  =  10 ,  offset  =  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-07 23:40:57 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      textsearch ,  query  =  generate_query_for_search ( terms ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 20:47:38 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-09 08:45:01 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      sql  =  <<-SQL.squish
 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 20:47:38 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SELECT 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          accounts . * , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          ts_rank_cd ( #{textsearch}, #{query}, 32) AS rank 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        FROM  accounts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        WHERE  #{query} @@ #{textsearch} 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-14 19:05:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								          AND  accounts . suspended_at  IS  NULL 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-12 02:14:33 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								          AND  accounts . moved_to_account_id  IS  NULL 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 20:47:38 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        ORDER  BY  rank  DESC 
							 
						 
					
						
							
								
									
										
										
											
												Add type, limit, offset, min_id, max_id, account_id to search API (#10091)
* Add type, limit, offset, min_id, max_id, account_id to search API
Fix #8939
* Make the offset work on accounts and hashtags search as well
* Assure brakeman we are not doing mass assignment here
* Do not allow paginating unless a type is chosen
* Fix search query and index id field on statuses instead of created_at
											 
										 
										
											2019-02-26 15:21:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        LIMIT  ?  OFFSET  ? 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-09 08:45:01 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      SQL 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 20:47:38 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												Add type, limit, offset, min_id, max_id, account_id to search API (#10091)
* Add type, limit, offset, min_id, max_id, account_id to search API
Fix #8939
* Make the offset work on accounts and hashtags search as well
* Assure brakeman we are not doing mass assignment here
* Do not allow paginating unless a type is chosen
* Fix search query and index id field on statuses instead of created_at
											 
										 
										
											2019-02-26 15:21:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      records  =  find_by_sql ( [ sql ,  limit ,  offset ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-19 00:43:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      ActiveRecord :: Associations :: Preloader . new . preload ( records ,  :account_stat ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      records 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 20:47:38 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												Add type, limit, offset, min_id, max_id, account_id to search API (#10091)
* Add type, limit, offset, min_id, max_id, account_id to search API
Fix #8939
* Make the offset work on accounts and hashtags search as well
* Assure brakeman we are not doing mass assignment here
* Do not allow paginating unless a type is chosen
* Fix search query and index id field on statuses instead of created_at
											 
										 
										
											2019-02-26 15:21:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  advanced_search_for ( terms ,  account ,  limit  =  10 ,  following  =  false ,  offset  =  0 ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-07 23:40:57 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      textsearch ,  query  =  generate_query_for_search ( terms ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 20:47:38 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-12-05 23:02:27 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      if  following 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        sql  =  <<-SQL.squish
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          WITH  first_degree  AS  ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            SELECT  target_account_id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            FROM  follows 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            WHERE  account_id  =  ? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          SELECT 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            accounts . * , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ( count ( f . id )  +  1 )  *  ts_rank_cd ( #{textsearch}, #{query}, 32) AS rank 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          FROM  accounts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          LEFT  OUTER  JOIN  follows  AS  f  ON  ( accounts . id  =  f . account_id  AND  f . target_account_id  =  ?)  OR  ( accounts . id  =  f . target_account_id  AND  f . account_id  =  ?) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          WHERE  accounts . id  IN  ( SELECT  *  FROM  first_degree ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            AND  #{query} @@ #{textsearch} 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-14 19:05:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            AND  accounts . suspended_at  IS  NULL 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-12 02:14:33 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            AND  accounts . moved_to_account_id  IS  NULL 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-05 23:02:27 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								          GROUP  BY  accounts . id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          ORDER  BY  rank  DESC 
							 
						 
					
						
							
								
									
										
										
											
												Add type, limit, offset, min_id, max_id, account_id to search API (#10091)
* Add type, limit, offset, min_id, max_id, account_id to search API
Fix #8939
* Make the offset work on accounts and hashtags search as well
* Assure brakeman we are not doing mass assignment here
* Do not allow paginating unless a type is chosen
* Fix search query and index id field on statuses instead of created_at
											 
										 
										
											2019-02-26 15:21:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								          LIMIT  ?  OFFSET  ? 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-05 23:02:27 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SQL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												Add type, limit, offset, min_id, max_id, account_id to search API (#10091)
* Add type, limit, offset, min_id, max_id, account_id to search API
Fix #8939
* Make the offset work on accounts and hashtags search as well
* Assure brakeman we are not doing mass assignment here
* Do not allow paginating unless a type is chosen
* Fix search query and index id field on statuses instead of created_at
											 
										 
										
											2019-02-26 15:21:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        records  =  find_by_sql ( [ sql ,  account . id ,  account . id ,  account . id ,  limit ,  offset ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-05 23:02:27 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        sql  =  <<-SQL.squish
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          SELECT 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            accounts . * , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								            ( count ( f . id )  +  1 )  *  ts_rank_cd ( #{textsearch}, #{query}, 32) AS rank 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          FROM  accounts 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          LEFT  OUTER  JOIN  follows  AS  f  ON  ( accounts . id  =  f . account_id  AND  f . target_account_id  =  ?)  OR  ( accounts . id  =  f . target_account_id  AND  f . account_id  =  ?) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          WHERE  #{query} @@ #{textsearch} 
							 
						 
					
						
							
								
									
										
										
										
											2019-05-14 19:05:02 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            AND  accounts . suspended_at  IS  NULL 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-12 02:14:33 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								            AND  accounts . moved_to_account_id  IS  NULL 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-05 23:02:27 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								          GROUP  BY  accounts . id 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								          ORDER  BY  rank  DESC 
							 
						 
					
						
							
								
									
										
										
											
												Add type, limit, offset, min_id, max_id, account_id to search API (#10091)
* Add type, limit, offset, min_id, max_id, account_id to search API
Fix #8939
* Make the offset work on accounts and hashtags search as well
* Assure brakeman we are not doing mass assignment here
* Do not allow paginating unless a type is chosen
* Fix search query and index id field on statuses instead of created_at
											 
										 
										
											2019-02-26 15:21:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								          LIMIT  ?  OFFSET  ? 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-05 23:02:27 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        SQL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
											
												Add type, limit, offset, min_id, max_id, account_id to search API (#10091)
* Add type, limit, offset, min_id, max_id, account_id to search API
Fix #8939
* Make the offset work on accounts and hashtags search as well
* Assure brakeman we are not doing mass assignment here
* Do not allow paginating unless a type is chosen
* Fix search query and index id field on statuses instead of created_at
											 
										 
										
											2019-02-26 15:21:36 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        records  =  find_by_sql ( [ sql ,  account . id ,  account . id ,  limit ,  offset ] ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-12-05 23:02:27 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
									
										
										
										
											2018-11-19 00:43:52 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      ActiveRecord :: Associations :: Preloader . new . preload ( records ,  :account_stat ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      records 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-17 20:47:38 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-08 19:12:54 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    private 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-07 23:40:57 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    def  generate_query_for_search ( terms ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      terms       =  Arel . sql ( connection . quote ( terms . gsub ( / ['? \\ :] / ,  ' ' ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      textsearch  =  " (setweight(to_tsvector('simple', accounts.display_name), 'A') || setweight(to_tsvector('simple', accounts.username), 'B') || setweight(to_tsvector('simple', coalesce(accounts.domain, '')), 'C')) " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      query       =  " to_tsquery('simple', ''' ' ||  #{ terms }  || ' ''' || ':*') " 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      [ textsearch ,  query ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-03 17:16:58 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-04-01 17:55:42 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  emojis 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-06 11:48:51 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    @emojis  || =  CustomEmoji . from_text ( emojifiable_text ,  domain ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-04-01 17:55:42 -04:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-25 02:47:31 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  before_create  :generate_keys 
							 
						 
					
						
							
								
									
										
										
										
											2017-07-14 19:47:53 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  before_validation  :prepare_contents ,  if :  :local? 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-11 20:48:24 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  before_validation  :prepare_username ,  on :  :create 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-03 01:32:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  before_destroy  :clean_feed_manager 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-18 23:15:44 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  private 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-07-14 19:47:53 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  prepare_contents 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    display_name & . strip! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    note & . strip! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-11 20:48:24 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  prepare_username 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    username & . squish! 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-04-25 02:47:31 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  def  generate_keys 
							 
						 
					
						
							
								
									
										
										
										
											2019-07-19 01:44:42 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    return  unless  local?  &&  private_key . blank?  &&  public_key . blank? 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-25 02:47:31 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-05-02 15:45:24 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    keypair  =  OpenSSL :: PKey :: RSA . new ( 2048 ) 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-25 02:47:31 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    self . private_key  =  keypair . to_pem 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    self . public_key   =  keypair . public_key . to_pem 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  normalize_domain 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    return  if  local? 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-26 14:38:42 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    super 
							 
						 
					
						
							
								
									
										
										
										
											2017-04-25 02:47:31 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-06 11:48:51 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  emojifiable_text 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-11 20:15:18 +09:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								    [ note ,  display_name ,  fields . map ( & :name ) ,  fields . map ( & :value ) ] . join ( ' ' ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-06 11:48:51 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-03 01:32:08 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  def  clean_feed_manager 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    reblog_key        =  FeedManager . instance . key ( :home ,  id ,  'reblogs' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    reblogged_id_set  =  Redis . current . zrange ( reblog_key ,  0 ,  - 1 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    Redis . current . pipelined  do 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Redis . current . del ( FeedManager . instance . key ( :home ,  id ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      Redis . current . del ( reblog_key ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      reblogged_id_set . each  do  | reblogged_id | 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        reblog_set_key  =  FeedManager . instance . key ( :home ,  id ,  " reblogs: #{ reblogged_id } " ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        Redis . current . del ( reblog_set_key ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								      end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								    end 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  end 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-20 22:53:20 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								end