You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

224 lines
6.8 KiB

8 years ago
7 years ago
7 years ago
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
7 years ago
8 years ago
  1. # frozen_string_literal: true
  2. require 'sidekiq/web'
  3. require 'sidekiq-scheduler/web'
  4. Rails.application.routes.draw do
  5. mount LetterOpenerWeb::Engine, at: 'letter_opener' if Rails.env.development?
  6. authenticate :user, lambda { |u| u.admin? } do
  7. mount Sidekiq::Web, at: 'sidekiq', as: :sidekiq
  8. mount PgHero::Engine, at: 'pghero', as: :pghero
  9. end
  10. use_doorkeeper do
  11. controllers authorizations: 'oauth/authorizations', authorized_applications: 'oauth/authorized_applications'
  12. end
  13. get '.well-known/host-meta', to: 'well_known/host_meta#show', as: :host_meta, defaults: { format: 'xml' }
  14. get '.well-known/webfinger', to: 'well_known/webfinger#show', as: :webfinger
  15. get 'manifest', to: 'manifests#show', defaults: { format: 'json' }
  16. devise_for :users, path: 'auth', controllers: {
  17. sessions: 'auth/sessions',
  18. registrations: 'auth/registrations',
  19. passwords: 'auth/passwords',
  20. confirmations: 'auth/confirmations',
  21. }
  22. get '/users/:username', to: redirect('/@%{username}'), constraints: { format: :html }
  23. resources :accounts, path: 'users', only: [:show], param: :username do
  24. resources :stream_entries, path: 'updates', only: [:show] do
  25. member do
  26. get :embed
  27. end
  28. end
  29. get :remote_follow, to: 'remote_follow#new'
  30. post :remote_follow, to: 'remote_follow#create'
  31. resources :followers, only: [:index], controller: :follower_accounts
  32. resources :following, only: [:index], controller: :following_accounts
  33. resource :follow, only: [:create], controller: :account_follow
  34. resource :unfollow, only: [:create], controller: :account_unfollow
  35. end
  36. get '/@:username', to: 'accounts#show', as: :short_account
  37. get '/@:account_username/:id', to: 'statuses#show', as: :short_account_status
  38. namespace :settings do
  39. resource :profile, only: [:show, :update]
  40. resource :preferences, only: [:show, :update]
  41. resource :import, only: [:show, :create]
  42. resource :export, only: [:show]
  43. namespace :exports, constraints: { format: :csv } do
  44. resources :follows, only: :index, controller: :following_accounts
  45. resources :blocks, only: :index, controller: :blocked_accounts
  46. resources :mutes, only: :index, controller: :muted_accounts
  47. end
  48. resource :two_factor_authentication, only: [:show, :create, :destroy]
  49. namespace :two_factor_authentication do
  50. resources :recovery_codes, only: [:create]
  51. resource :confirmation, only: [:new, :create]
  52. end
  53. resource :follower_domains, only: [:show, :update]
  54. end
  55. resources :media, only: [:show]
  56. resources :tags, only: [:show]
  57. # Remote follow
  58. resource :authorize_follow, only: [:show, :create]
  59. namespace :admin do
  60. resources :subscriptions, only: [:index]
  61. resources :domain_blocks, only: [:index, :new, :create, :show, :destroy]
  62. resource :settings, only: [:edit, :update]
  63. resources :instances, only: [:index]
  64. resources :reports, only: [:index, :show, :update] do
  65. resources :reported_statuses, only: [:update, :destroy]
  66. end
  67. resources :accounts, only: [:index, :show] do
  68. member do
  69. post :subscribe
  70. post :unsubscribe
  71. post :redownload
  72. end
  73. resource :reset, only: [:create]
  74. resource :silence, only: [:create, :destroy]
  75. resource :suspension, only: [:create, :destroy]
  76. resource :confirmation, only: [:create]
  77. end
  78. resources :users, only: [] do
  79. resource :two_factor_authentication, only: [:destroy]
  80. end
  81. end
  82. get '/admin', to: redirect('/admin/settings/edit', status: 302)
  83. namespace :api do
  84. # PubSubHubbub outgoing subscriptions
  85. resources :subscriptions, only: [:show]
  86. post '/subscriptions/:id', to: 'subscriptions#update'
  87. # PubSubHubbub incoming subscriptions
  88. post '/push', to: 'push#update', as: :push
  89. # Salmon
  90. post '/salmon/:id', to: 'salmon#update', as: :salmon
  91. # OEmbed
  92. get '/oembed', to: 'oembed#show', as: :oembed
  93. # ActivityPub
  94. namespace :activitypub do
  95. get '/users/:id/outbox', to: 'outbox#show', as: :outbox
  96. get '/statuses/:id', to: 'activities#show_status', as: :status
  97. resources :notes, only: [:show]
  98. end
  99. # JSON / REST API
  100. namespace :v1 do
  101. resources :statuses, only: [:create, :show, :destroy] do
  102. scope module: :statuses do
  103. with_options only: :index do
  104. resources :reblogged_by, controller: :reblogged_by_accounts
  105. resources :favourited_by, controller: :favourited_by_accounts
  106. end
  107. end
  108. member do
  109. get :context
  110. get :card
  111. post :reblog
  112. post :unreblog
  113. post :favourite
  114. post :unfavourite
  115. post :mute
  116. post :unmute
  117. end
  118. end
  119. namespace :timelines do
  120. resource :home, only: :show, controller: :home
  121. resource :public, only: :show, controller: :public
  122. resources :tag, only: :show
  123. end
  124. resources :streaming, only: [:index]
  125. get '/search', to: 'search#index', as: :search
  126. resources :follows, only: [:create]
  127. resources :media, only: [:create]
  128. resources :apps, only: [:create]
  129. resources :blocks, only: [:index]
  130. resources :mutes, only: [:index]
  131. resources :favourites, only: [:index]
  132. resources :reports, only: [:index, :create]
  133. resource :instance, only: [:show]
  134. resource :domain_blocks, only: [:show, :create, :destroy]
  135. resources :follow_requests, only: [:index] do
  136. member do
  137. post :authorize
  138. post :reject
  139. end
  140. end
  141. resources :notifications, only: [:index, :show] do
  142. collection do
  143. post :clear
  144. post :dismiss
  145. end
  146. end
  147. namespace :accounts do
  148. get :verify_credentials, to: 'credentials#show'
  149. patch :update_credentials, to: 'credentials#update'
  150. resource :search, only: :show, controller: :search
  151. resources :relationships, only: :index
  152. end
  153. resources :accounts, only: [:show] do
  154. resources :statuses, only: :index, controller: 'accounts/statuses'
  155. resources :followers, only: :index, controller: 'accounts/follower_accounts'
  156. resources :following, only: :index, controller: 'accounts/following_accounts'
  157. member do
  158. post :follow
  159. post :unfollow
  160. post :block
  161. post :unblock
  162. post :mute
  163. post :unmute
  164. end
  165. end
  166. end
  167. namespace :web do
  168. resource :settings, only: [:update]
  169. end
  170. end
  171. get '/web/(*any)', to: 'home#index', as: :web
  172. get '/about', to: 'about#show'
  173. get '/about/more', to: 'about#more'
  174. get '/terms', to: 'about#terms'
  175. root 'home#index'
  176. match '*unmatched_route',
  177. via: :all,
  178. to: 'application#raise_not_found',
  179. format: false
  180. end