717 lines
18 KiB
Ruby
717 lines
18 KiB
Ruby
Rails.application.routes.draw do
|
|
devise_scope :admin do
|
|
get "admin/logout" => "admin/sessions#confirm_logout"
|
|
|
|
# Rails emulates some HTTP methods over POST, so password resets (PUT /admin/password)
|
|
# look the same as password reset requests (POST /admin/password).
|
|
#
|
|
# To rate limit them differently at nginx, we set up an alias for
|
|
# the first request type.
|
|
put "admin/password/reset" => "admin/passwords#update"
|
|
end
|
|
|
|
devise_for :admin,
|
|
module: "admin",
|
|
only: [:sessions, :passwords],
|
|
controllers: {
|
|
sessions: "admin/sessions",
|
|
passwords: "admin/passwords"
|
|
},
|
|
path_names: {
|
|
sign_in: "login",
|
|
sign_out: "logout"
|
|
}
|
|
|
|
devise_scope :user do
|
|
get "signup(/:invitation_token)" => "users/registrations#new", as: "signup"
|
|
get "users/logout" => "users/sessions#confirm_logout"
|
|
|
|
# Rails emulate some HTTP methods over POST, so password resets (PUT /users/password)
|
|
# look the same as password reset requests (POST /users/password).
|
|
#
|
|
# To rate limit them differently at nginx, we set up an alias for
|
|
# the first request type.
|
|
put "users/password/reset" => "users/passwords#update"
|
|
end
|
|
|
|
devise_for :users,
|
|
module: "users",
|
|
controllers: {
|
|
sessions: "users/sessions",
|
|
registrations: "users/registrations",
|
|
passwords: "users/passwords"
|
|
},
|
|
path_names: {
|
|
sign_in: "login",
|
|
sign_out: "logout"
|
|
}
|
|
|
|
#### ERRORS ####
|
|
|
|
get '/403', to: 'errors#403'
|
|
get '/404', to: 'errors#404'
|
|
get '/422', to: 'errors#422'
|
|
get '/500', to: 'errors#500'
|
|
get '/auth_error', to: 'errors#auth_error'
|
|
get "/timeout_error", to: "errors#timeout_error"
|
|
get '/statuses', to: 'statuses#redirect_to_current_user'
|
|
get '/statuses/new', to: 'statuses#redirect_to_current_user_new' #### DOWNLOADS ####
|
|
|
|
get 'downloads/:id/:download_title.:format' => 'downloads#show', as: 'download'
|
|
|
|
#### OPEN DOORS ####
|
|
namespace :opendoors do
|
|
resources :tools, only: [:index] do
|
|
collection do
|
|
post :url_update
|
|
end
|
|
end
|
|
resources :external_authors do
|
|
member do
|
|
post :forward
|
|
end
|
|
end
|
|
end
|
|
|
|
#### INVITATIONS ####
|
|
|
|
resources :invitations
|
|
resources :user_invite_requests
|
|
resources :invite_requests, only: [:index, :create, :destroy] do
|
|
collection do
|
|
get :manage
|
|
get :status
|
|
post :resend
|
|
end
|
|
end
|
|
|
|
get 'claim/:invitation_token' => 'external_authors#claim', as: 'claim'
|
|
post 'complete_claim/:invitation_token' => 'external_authors#complete_claim', as: 'complete_claim'
|
|
|
|
#### TAGS ####
|
|
|
|
resources :media do
|
|
resources :fandoms
|
|
end
|
|
resources :fandoms do
|
|
collection do
|
|
get :unassigned
|
|
end
|
|
get :show
|
|
end
|
|
resources :tag_wranglings do
|
|
collection do
|
|
post :wrangle
|
|
end
|
|
end
|
|
resources :tag_wranglers do
|
|
member do
|
|
get :report_csv
|
|
end
|
|
end
|
|
resources :unsorted_tags do
|
|
collection do
|
|
post :mass_update
|
|
end
|
|
end
|
|
resources :tags do
|
|
member do
|
|
get :feed
|
|
post :mass_update
|
|
get :remove_association
|
|
get :wrangle
|
|
end
|
|
collection do
|
|
get :show_hidden
|
|
get :search
|
|
end
|
|
resources :works
|
|
resources :bookmarks
|
|
resources :comments
|
|
resource :troubleshooting, controller: :troubleshooting, only: [:show, :update]
|
|
end
|
|
|
|
resources :tag_sets, controller: 'owned_tag_sets' do
|
|
resources :nominations, controller: 'tag_set_nominations' do
|
|
collection do
|
|
put :update_multiple
|
|
delete :destroy_multiple
|
|
get :confirm_destroy_multiple
|
|
end
|
|
member do
|
|
get :confirm_delete
|
|
end
|
|
end
|
|
resources :associations, controller: 'tag_set_associations', only: [:index] do
|
|
collection do
|
|
put :update_multiple
|
|
end
|
|
end
|
|
member do
|
|
get :batch_load
|
|
put :do_batch_load
|
|
get :confirm_delete
|
|
end
|
|
collection do
|
|
get :show_options
|
|
end
|
|
end
|
|
resources :tag_nominations, only: [:update]
|
|
|
|
resources :tag_wrangling_requests, only: [:index] do
|
|
collection do
|
|
patch :update_multiple
|
|
end
|
|
end
|
|
|
|
#### ADMIN ####
|
|
resources :admin_posts do
|
|
resources :comments do
|
|
collection do
|
|
get :unreviewed
|
|
put :review_all
|
|
end
|
|
end
|
|
end
|
|
|
|
namespace :admin do
|
|
resources :activities, only: [:index, :show]
|
|
resources :banners do
|
|
member do
|
|
get :confirm_delete
|
|
end
|
|
end
|
|
resources :blacklisted_emails, only: [:index, :create, :destroy]
|
|
resources :settings
|
|
resources :skins do
|
|
collection do
|
|
get :index_rejected
|
|
get :index_approved
|
|
end
|
|
end
|
|
resources :spam, only: [:index] do
|
|
collection do
|
|
post :bulk_update
|
|
end
|
|
end
|
|
resources :user_creations, only: [:destroy] do
|
|
member do
|
|
put :hide
|
|
put :set_spam
|
|
get :confirm_remove_pseud
|
|
put :remove_pseud
|
|
end
|
|
end
|
|
resources :users, controller: "admin_users", only: [:index, :show] do
|
|
member do
|
|
get :confirm_delete_user_creations
|
|
post :destroy_user_creations
|
|
post :activate
|
|
get :check_user
|
|
get :creations
|
|
end
|
|
collection do
|
|
get :bulk_search
|
|
post :bulk_search
|
|
post :update
|
|
post :update_status
|
|
post :update_next_of_kin
|
|
end
|
|
end
|
|
resources :invitations, controller: 'admin_invitations' do
|
|
collection do
|
|
post :invite_from_queue
|
|
post :grant_invites_to_users
|
|
get :find
|
|
end
|
|
end
|
|
resources :api
|
|
end
|
|
resources :admins, only: [:index]
|
|
|
|
post '/admin/api/new', to: 'admin/api#create'
|
|
|
|
#### USERS ####
|
|
|
|
resources :people, only: [:index] do
|
|
collection do
|
|
get :search
|
|
end
|
|
end
|
|
|
|
# When adding new nested resources, please keep them in alphabetical order
|
|
resources :users, except: [:new, :create] do
|
|
member do
|
|
get :change_email
|
|
put :confirm_change_email
|
|
post :changed_email
|
|
get :change_password
|
|
post :changed_password
|
|
get :change_username
|
|
post :changed_username
|
|
post :end_first_login
|
|
post :end_banner
|
|
post :end_tos_prompt
|
|
get :reconfirm_email
|
|
end
|
|
resources :assignments, controller: "challenge_assignments", only: [:index]
|
|
resources :claims, controller: "challenge_claims", only: [:index]
|
|
resources :bookmarks
|
|
resources :collection_items, only: [:index, :update] do
|
|
collection do
|
|
patch :update_multiple
|
|
end
|
|
end
|
|
resources :collections, only: [:index]
|
|
resources :comments do
|
|
member do
|
|
put :approve
|
|
put :reject
|
|
end
|
|
end
|
|
resource :creatorships, controller: "creatorships", only: [:show, :update]
|
|
resources :external_authors do
|
|
resources :external_author_names
|
|
end
|
|
resources :favorite_tags, only: [:create, :destroy]
|
|
resources :gifts, only: [:index]
|
|
resource :inbox, controller: "inbox" do
|
|
member do
|
|
get :reply
|
|
post :delete
|
|
end
|
|
end
|
|
resources :invitations do
|
|
collection do
|
|
post :invite_friend
|
|
end
|
|
collection do
|
|
get :manage
|
|
end
|
|
end
|
|
resources :nominations, controller: "tag_set_nominations", only: [:index]
|
|
resources :preferences, only: [:index, :update]
|
|
resource :profile, only: [:show], controller: "profile" do
|
|
collection do
|
|
get :pseuds
|
|
end
|
|
end
|
|
resources :pseuds do
|
|
resources :works
|
|
resources :series
|
|
resources :bookmarks
|
|
end
|
|
resources :readings do
|
|
collection do
|
|
post :clear
|
|
end
|
|
end
|
|
resources :related_works
|
|
resources :series do
|
|
member do
|
|
get :manage
|
|
end
|
|
resources :serial_works
|
|
end
|
|
resources :signups, controller: "challenge_signups", only: [:index]
|
|
resources :skins, only: [:index]
|
|
resources :stats, only: [:index]
|
|
resources :statuses
|
|
resources :subscriptions, only: [:index, :create, :destroy] do
|
|
collection do
|
|
get :confirm_delete_all
|
|
post :delete_all
|
|
end
|
|
end
|
|
resources :tag_sets, controller: "owned_tag_sets", only: [:index]
|
|
resources :works do
|
|
collection do
|
|
get :drafts
|
|
get :collected
|
|
get :show_multiple
|
|
post :edit_multiple
|
|
patch :update_multiple
|
|
post :delete_multiple
|
|
end
|
|
end
|
|
namespace :blocked do
|
|
resources :users, only: [:index, :create, :destroy] do
|
|
collection do
|
|
get :confirm_block
|
|
end
|
|
member do
|
|
get :confirm_unblock
|
|
end
|
|
end
|
|
end
|
|
namespace :muted do
|
|
resources :users, only: [:index, :create, :destroy] do
|
|
collection do
|
|
get :confirm_mute
|
|
end
|
|
member do
|
|
get :confirm_unmute
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
#### WORKS ####
|
|
|
|
resources :works do
|
|
collection do
|
|
post :import
|
|
get :search
|
|
end
|
|
member do
|
|
get :preview
|
|
post :post
|
|
put :post_draft
|
|
get :navigate
|
|
get :edit_tags
|
|
get :preview_tags
|
|
patch :update_tags
|
|
get :mark_for_later
|
|
get :mark_as_read
|
|
get :confirm_delete
|
|
get :share
|
|
end
|
|
resources :bookmarks
|
|
resources :chapters do
|
|
collection do
|
|
get :manage
|
|
post :update_positions
|
|
end
|
|
member do
|
|
get :preview
|
|
post :post
|
|
get :confirm_delete
|
|
end
|
|
resources :comments
|
|
end
|
|
resources :collections
|
|
resources :collection_items
|
|
resources :comments do
|
|
member do
|
|
put :approve
|
|
put :reject
|
|
end
|
|
collection do
|
|
get :unreviewed
|
|
put :review_all
|
|
end
|
|
end
|
|
resource :hit_count, controller: :hit_count, only: [:create]
|
|
resources :kudos, only: [:index]
|
|
resource :troubleshooting, controller: :troubleshooting, only: [:show, :update]
|
|
end
|
|
|
|
resources :chapters do
|
|
member do
|
|
get :preview
|
|
post :post
|
|
end
|
|
resources :comments
|
|
end
|
|
|
|
resources :external_works do
|
|
collection do
|
|
get :fetch
|
|
end
|
|
resources :bookmarks
|
|
resources :related_works
|
|
end
|
|
|
|
resources :related_works
|
|
resources :serial_works
|
|
resources :series do
|
|
member do
|
|
get :confirm_delete
|
|
get :manage
|
|
post :update_positions
|
|
end
|
|
resources :bookmarks
|
|
end
|
|
|
|
#### COLLECTIONS ####
|
|
|
|
resources :gifts, only: [:index] do
|
|
member do
|
|
post :toggle_rejected
|
|
end
|
|
end
|
|
|
|
resources :collections do
|
|
collection do
|
|
get :list_challenges
|
|
get :list_ge_challenges
|
|
get :list_pm_challenges
|
|
end
|
|
member do
|
|
get :confirm_delete
|
|
end
|
|
resource :profile, controller: "collection_profile"
|
|
resources :collections
|
|
resources :works
|
|
resources :gifts
|
|
resources :bookmarks
|
|
resources :media
|
|
resources :fandoms
|
|
resources :people
|
|
resources :prompts
|
|
resources :tags do
|
|
resources :works
|
|
end
|
|
resources :participants, controller: "collection_participants", only: [:index, :update, :destroy] do
|
|
collection do
|
|
get :add
|
|
get :join
|
|
end
|
|
end
|
|
resources :items, controller: "collection_items" do
|
|
collection do
|
|
patch :update_multiple
|
|
end
|
|
end
|
|
resources :signups, controller: "challenge_signups" do
|
|
collection do
|
|
get :summary
|
|
end
|
|
member do
|
|
get :confirm_delete
|
|
end
|
|
end
|
|
resources :assignments, controller: "challenge_assignments", only: [:index, :show] do
|
|
collection do
|
|
get :confirm_purge
|
|
get :generate
|
|
put :set
|
|
post :purge
|
|
get :send_out
|
|
put :update_multiple
|
|
get :default_all
|
|
end
|
|
member do
|
|
get :default
|
|
end
|
|
end
|
|
resources :claims, controller: "challenge_claims" do
|
|
collection do
|
|
patch :set
|
|
get :purge
|
|
end
|
|
end
|
|
resources :potential_matches do
|
|
collection do
|
|
get :generate
|
|
get :cancel_generate
|
|
get :regenerate_for_signup
|
|
end
|
|
end
|
|
resources :requests, controller: "challenge_requests"
|
|
# challenge types
|
|
resource :gift_exchange, controller: "challenge/gift_exchange" do
|
|
member do
|
|
get :confirm_delete
|
|
end
|
|
end
|
|
resource :prompt_meme, controller: "challenge/prompt_meme" do
|
|
member do
|
|
get :confirm_delete
|
|
end
|
|
end
|
|
end
|
|
|
|
#### I18N ####
|
|
|
|
# should stay below the main works mapping
|
|
resources :languages, except: [:show] do
|
|
resources :works
|
|
resources :admin_posts
|
|
end
|
|
get "/languages/:id", to: redirect("/languages/%{id}/works", status: 302)
|
|
resources :locales, except: :destroy
|
|
|
|
#### API ####
|
|
|
|
namespace :api do
|
|
namespace :v2 do
|
|
resources :bookmarks, only: [:create], defaults: { format: :json }
|
|
resources :works, only: [:create], defaults: { format: :json }
|
|
post 'bookmarks/search', to: 'bookmarks#search'
|
|
post 'works/search', to: 'works#search'
|
|
end
|
|
end
|
|
|
|
#### MISC ####
|
|
|
|
resources :comments do
|
|
member do
|
|
put :approve
|
|
put :freeze
|
|
put :hide
|
|
put :reject
|
|
put :review
|
|
put :unfreeze
|
|
put :unhide
|
|
end
|
|
collection do
|
|
get :hide_comments
|
|
get :show_comments
|
|
get :add_comment_reply
|
|
get :cancel_comment_reply
|
|
get :cancel_comment_edit
|
|
get :delete_comment
|
|
get :cancel_comment_delete
|
|
end
|
|
resources :comments
|
|
end
|
|
resources :bookmarks do
|
|
collection do
|
|
get :search
|
|
end
|
|
member do
|
|
get :confirm_delete
|
|
get :share
|
|
end
|
|
resources :collection_items
|
|
end
|
|
|
|
resources :kudos, only: [:create]
|
|
|
|
resources :skins do
|
|
member do
|
|
get :preview
|
|
get :set
|
|
get :confirm_delete
|
|
end
|
|
collection do
|
|
get :unset
|
|
end
|
|
end
|
|
resources :known_issues
|
|
resources :archive_faqs, path: "faq" do
|
|
member do
|
|
get :confirm_delete
|
|
end
|
|
collection do
|
|
get :manage
|
|
post :update_positions
|
|
end
|
|
resources :questions do
|
|
collection do
|
|
get :manage
|
|
post :update_positions
|
|
end
|
|
end
|
|
end
|
|
resources :wrangling_guidelines do
|
|
member do
|
|
get :confirm_delete
|
|
end
|
|
collection do
|
|
get :manage
|
|
post :update_positions
|
|
end
|
|
end
|
|
|
|
resource :redirect, controller: "redirect", only: [:show] do
|
|
member do
|
|
get :do_redirect
|
|
end
|
|
end
|
|
|
|
resources :abuse_reports, only: [:new, :create]
|
|
resources :external_authors do
|
|
resources :external_author_names
|
|
end
|
|
resources :orphans, only: [:index, :new, :create]
|
|
|
|
get 'search' => 'works#search'
|
|
post 'support' => 'feedbacks#create', as: 'feedbacks'
|
|
get 'support' => 'feedbacks#new', as: 'new_feedback_report'
|
|
get "content" => "home#content"
|
|
get "privacy" => "home#privacy"
|
|
get "tos" => "home#tos"
|
|
get "tos_faq" => "home#tos_faq"
|
|
get 'unicorn_test' => 'home#unicorn_test'
|
|
get 'dmca' => 'home#dmca'
|
|
get 'diversity' => 'home#diversity'
|
|
get 'site_map' => 'home#site_map'
|
|
get 'site_pages' => 'home#site_pages'
|
|
get 'first_login_help' => 'home#first_login_help'
|
|
get 'token_dispenser' => 'home#token_dispenser'
|
|
get 'delete_confirmation' => 'users#delete_confirmation'
|
|
get 'activate/:id' => 'users#activate', as: 'activate'
|
|
get 'devmode' => 'devmode#index'
|
|
get 'donate' => 'home#donate'
|
|
get 'lost_cookie' => 'home#lost_cookie'
|
|
get 'about' => 'home#about'
|
|
get 'menu/browse' => 'menu#browse'
|
|
get 'menu/fandoms' => 'menu#fandoms'
|
|
get 'menu/search' => 'menu#search'
|
|
get 'menu/about' => 'menu#about'
|
|
|
|
# The priority is based upon order of creation:
|
|
# first created -> highest priority.
|
|
root to: "home#index"
|
|
|
|
# See how all your routes lay out with "rake routes"
|
|
|
|
# These are allowlisted routes that are proven to be used throughout the
|
|
# application, which previously relied on a deprecated catch-all route definition
|
|
# (`get ':controller(/:action(/:id(.:format)))'`) to work.
|
|
#
|
|
# They are generally not RESTful and in some cases are *almost* duplicates of
|
|
# existing routes defined above, but due to how extensively they are used
|
|
# throughout the application must exist until forms, controllers, and tests
|
|
# can be refactored to not rely on their existence.
|
|
#
|
|
# Note written on August 1, 2017 during upgrade to Rails 5.1.
|
|
get '/invite_requests/show' => 'invite_requests#show', as: :show_invite_request
|
|
get '/user_invite_requests/update' => 'user_invite_requests#update'
|
|
|
|
patch '/admin/skins/update' => 'admin_skins#update', as: :update_admin_skin
|
|
|
|
get "/admin/admin_users/troubleshoot/:id" => "admin/admin_users#troubleshoot", as: :troubleshoot_admin_user
|
|
|
|
# TODO: rewrite the autocomplete controller to deal with the fact that
|
|
# there are 21 different actions going on in there
|
|
%w[
|
|
pseud
|
|
tag
|
|
fandom
|
|
character
|
|
relationship
|
|
freeform
|
|
character_in_fandom
|
|
relationship_in_fandom
|
|
tags_in_sets
|
|
associated_tags
|
|
noncanonical_tag
|
|
collection_fullname
|
|
open_collection_names
|
|
collection_parent_name
|
|
external_work
|
|
potential_offers
|
|
potential_requests
|
|
owned_tag_sets
|
|
site_skins
|
|
admin_posts
|
|
admin_post_tags
|
|
].each do |action|
|
|
get "/autocomplete/#{action}" => "autocomplete##{action}"
|
|
end
|
|
get 'timeline', to: 'statuses#timeline', as: :timeline
|
|
get '/challenges/no_collection' => 'challenges#no_collection'
|
|
get '/challenges/no_challenge' => 'challenges#no_challenge'
|
|
|
|
get '/works/clean_work_search_params' => 'works#clean_work_search_params'
|
|
get '/works/collected' => 'works#collected'
|
|
get '/works/drafts' => 'works#drafts'
|
|
|
|
post '/works/edit_multiple/:id' => 'works#edit_multiple'
|
|
post '/works/confirm_delete_multiple/:id' => 'works#confirm_delete_multiple'
|
|
post '/works/delete_multiple/:id' => 'works#delete_multiple'
|
|
put '/works/update_multiple' => 'works#update_multiple'
|
|
end
|