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.9 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. resource :delete, only: [:show, :destroy]
  55. end
  56. resources :media, only: [:show]
  57. resources :tags, only: [:show]
  58. # Remote follow
  59. resource :authorize_follow, only: [:show, :create]
  60. namespace :admin do
  61. resources :subscriptions, only: [:index]
  62. resources :domain_blocks, only: [:index, :new, :create, :show, :destroy]
  63. resource :settings, only: [:edit, :update]
  64. resources :instances, only: [:index]
  65. resources :reports, only: [:index, :show, :update] do
  66. resources :reported_statuses, only: [:update, :destroy]
  67. end
  68. resources :accounts, only: [:index, :show] do
  69. member do
  70. post :subscribe
  71. post :unsubscribe
  72. post :redownload
  73. end
  74. resource :reset, only: [:create]
  75. resource :silence, only: [:create, :destroy]
  76. resource :suspension, only: [:create, :destroy]
  77. resource :confirmation, only: [:create]
  78. end
  79. resources :users, only: [] do
  80. resource :two_factor_authentication, only: [:destroy]
  81. end
  82. end
  83. get '/admin', to: redirect('/admin/settings/edit', status: 302)
  84. namespace :api do
  85. # PubSubHubbub outgoing subscriptions
  86. resources :subscriptions, only: [:show]
  87. post '/subscriptions/:id', to: 'subscriptions#update'
  88. # PubSubHubbub incoming subscriptions
  89. post '/push', to: 'push#update', as: :push
  90. # Salmon
  91. post '/salmon/:id', to: 'salmon#update', as: :salmon
  92. # OEmbed
  93. get '/oembed', to: 'oembed#show', as: :oembed
  94. # ActivityPub
  95. namespace :activitypub do
  96. get '/users/:id/outbox', to: 'outbox#show', as: :outbox
  97. get '/statuses/:id', to: 'activities#show_status', as: :status
  98. resources :notes, only: [:show]
  99. end
  100. # JSON / REST API
  101. namespace :v1 do
  102. resources :statuses, only: [:create, :show, :destroy] do
  103. scope module: :statuses do
  104. resources :reblogged_by, controller: :reblogged_by_accounts, only: :index
  105. resources :favourited_by, controller: :favourited_by_accounts, only: :index
  106. resource :reblog, only: :create
  107. post :unreblog, to: 'reblogs#destroy'
  108. resource :favourite, only: :create
  109. post :unfavourite, to: 'favourites#destroy'
  110. resource :mute, only: :create
  111. post :unmute, to: 'mutes#destroy'
  112. end
  113. member do
  114. get :context
  115. get :card
  116. end
  117. end
  118. namespace :timelines do
  119. resource :home, only: :show, controller: :home
  120. resource :public, only: :show, controller: :public
  121. resources :tag, only: :show
  122. end
  123. resources :streaming, only: [:index]
  124. get '/search', to: 'search#index', as: :search
  125. resources :follows, only: [:create]
  126. resources :media, only: [:create]
  127. resources :apps, only: [:create]
  128. resources :blocks, only: [:index]
  129. resources :mutes, only: [:index]
  130. resources :favourites, only: [:index]
  131. resources :reports, only: [:index, :create]
  132. resource :instance, only: [:show]
  133. resource :domain_blocks, only: [:show, :create, :destroy]
  134. resources :follow_requests, only: [:index] do
  135. member do
  136. post :authorize
  137. post :reject
  138. end
  139. end
  140. resources :notifications, only: [:index, :show] do
  141. collection do
  142. post :clear
  143. post :dismiss
  144. end
  145. end
  146. namespace :accounts do
  147. get :verify_credentials, to: 'credentials#show'
  148. patch :update_credentials, to: 'credentials#update'
  149. resource :search, only: :show, controller: :search
  150. resources :relationships, only: :index
  151. end
  152. resources :accounts, only: [:show] do
  153. resources :statuses, only: :index, controller: 'accounts/statuses'
  154. resources :followers, only: :index, controller: 'accounts/follower_accounts'
  155. resources :following, only: :index, controller: 'accounts/following_accounts'
  156. member do
  157. post :follow
  158. post :unfollow
  159. post :block
  160. post :unblock
  161. post :mute
  162. post :unmute
  163. end
  164. end
  165. end
  166. namespace :web do
  167. resource :settings, only: [:update]
  168. end
  169. end
  170. get '/web/(*any)', to: 'home#index', as: :web
  171. get '/about', to: 'about#show'
  172. get '/about/more', to: 'about#more'
  173. get '/terms', to: 'about#terms'
  174. root 'home#index'
  175. match '*unmatched_route',
  176. via: :all,
  177. to: 'application#raise_not_found',
  178. format: false
  179. end