This commit is contained in:
aggie 2025-11-14 16:57:46 -05:00
commit 82c1c20d8b

717
routes.rb Normal file
View file

@ -0,0 +1,717 @@
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