2022-07-23 03:06:05 -07:00
# frozen_string_literal: true
require " sidekiq/web "
2014-08-01 02:23:47 -07:00
Rails . application . routes . draw do
2022-07-23 03:06:05 -07:00
start = Time . zone . now
2014-12-04 22:02:23 -08:00
2022-07-03 14:50:17 -07:00
# Routes only accessible by admins (admin panels, sidekiq, pghero)
authenticate :user , - > ( user ) { user . has_role? ( :administrator ) } do
2020-04-19 13:35:58 -07:00
# Admin panel
2022-07-23 03:06:05 -07:00
mount RailsAdmin :: Engine = > " /justask_admin " , :as = > " rails_admin "
2020-04-19 13:35:58 -07:00
2014-12-12 09:35:14 -08:00
mount Sidekiq :: Web , at : " /sidekiq "
2020-04-19 13:35:58 -07:00
mount PgHero :: Engine , at : " /pghero " , as : " pghero "
2020-04-19 14:58:47 -07:00
2022-11-20 08:58:44 -08:00
get " /admin " , to : " admin/dashboard # index " , as : :admin_dashboard
2022-11-20 09:58:19 -08:00
get " /admin/announcements " , to : " admin/announcement # index " , as : :announcement_index
post " /admin/announcements " , to : " admin/announcement # create " , as : :announcement_create
get " /admin/announcements/new " , to : " admin/announcement # new " , as : :announcement_new
get " /admin/announcements/:id/edit " , to : " admin/announcement # edit " , as : :announcement_edit
patch " /admin/announcements/:id " , to : " admin/announcement # update " , as : :announcement_update
delete " /admin/announcements/:id " , to : " admin/announcement # destroy " , as : :announcement_destroy
2014-12-12 09:35:14 -08:00
end
2022-07-03 14:50:17 -07:00
# Routes only accessible by moderators (moderation panel)
authenticate :user , - > ( user ) { user . mod? } do
2022-07-23 03:06:05 -07:00
post " /moderation/unmask " , to : " moderation # toggle_unmask " , as : :moderation_toggle_unmask
2022-08-13 11:01:22 -07:00
get " /moderation/blocks " , to : " moderation/anonymous_block # index " , as : :mod_anon_block_index
2022-09-04 14:22:51 -07:00
match " /moderation/inbox/:user " , to : " moderation/inbox # index " , via : [ :get , :post ] , as : :mod_inbox_index
2022-09-04 12:17:10 -07:00
match " /moderation/reports(/:type) " , to : " moderation/reports # index " , via : [ :get , :post ] , as : :moderation_reports , defaults : { type : " all " }
2022-08-21 03:58:58 -07:00
get " /moderation/questions/:author_identifier " , to : " moderation/questions # show " , as : :moderation_questions
2014-12-28 14:26:16 -08:00
namespace :ajax do
2022-07-23 03:06:05 -07:00
post " /mod/destroy_report " , to : " moderation # destroy_report " , as : :mod_destroy_report
post " /mod/privilege " , to : " moderation # privilege " , as : :mod_privilege
post " /mod/ban " , to : " moderation # ban " , as : :mod_ban
2014-12-28 14:26:16 -08:00
end
2014-12-26 04:46:47 -08:00
end
2022-07-18 07:26:11 -07:00
unauthenticated :user do
2022-07-23 03:06:05 -07:00
root to : " about # index "
2022-07-18 07:26:11 -07:00
end
authenticate :user do
2022-09-08 13:41:32 -07:00
root to : " timeline # index " , via : [ :get , :post ] , as : :timeline
2022-07-18 07:26:11 -07:00
end
2014-08-01 02:23:47 -07:00
2022-07-23 03:06:05 -07:00
get " /about " , to : " about # about "
get " /privacy " , to : " about # privacy_policy " , as : :privacy_policy
get " /terms " , to : " about # terms " , as : :terms
get " /linkfilter " , to : " link_filter # index " , as : :linkfilter
get " /manifest.json " , to : " manifests # show " , as : :webapp_manifest
2014-11-02 08:58:27 -08:00
# Devise routes
2022-07-23 03:06:05 -07:00
devise_for :users , path : " user " , skip : % i [ sessions registrations ]
2014-11-02 08:58:27 -08:00
as :user do
# :sessions
2022-07-23 03:06:05 -07:00
get " sign_in " = > " user/sessions # new " , :as = > :new_user_session
post " sign_in " = > " user/sessions # create " , :as = > :user_session
delete " sign_out " = > " devise/sessions # destroy " , :as = > :destroy_user_session
2014-11-02 08:58:27 -08:00
# :registrations
2022-07-23 03:06:05 -07:00
get " settings/delete_account " = > " devise/registrations # cancel " , :as = > :cancel_user_registration
post " /user/create " = > " user/registrations # create " , :as = > :user_registration
get " /sign_up " = > " devise/registrations # new " , :as = > :new_user_registration
get " /settings/account " = > " devise/registrations # edit " , :as = > :edit_user_registration
patch " /settings/account " = > " devise/registrations # update " , :as = > :update_user_registration
put " /settings/account " = > " devise/registrations # update "
delete " /settings/account " = > " user/registrations # destroy "
2014-11-02 08:58:27 -08:00
end
2022-06-26 04:28:35 -07:00
namespace :settings do
2022-07-23 03:06:05 -07:00
get :theme , to : redirect ( " /settings/theme/edit " )
2022-06-26 04:36:30 -07:00
resource :theme , controller : :theme , only : % i [ edit update destroy ]
2022-06-26 10:16:31 -07:00
2022-07-23 03:06:05 -07:00
get :profile , to : redirect ( " /settings/profile/edit " )
2022-06-26 10:45:31 -07:00
resource :profile , controller : :profile , only : % i [ edit update ]
resource :profile_picture , controller : :profile_picture , only : % i [ update ]
2022-06-27 16:50:20 -07:00
2022-07-23 03:06:05 -07:00
get :privacy , to : redirect ( " /settings/privacy/edit " )
2022-06-27 16:50:20 -07:00
resource :privacy , controller : :privacy , only : % i [ edit update ]
2022-07-01 21:15:00 -07:00
2022-07-23 03:06:05 -07:00
get :export , to : " export # index "
post :export , to : " export # create "
2022-07-02 14:35:58 -07:00
2022-07-23 03:06:05 -07:00
get :muted , to : " mutes # index "
2022-11-18 12:48:12 -08:00
post :muted , to : " mutes # create "
delete " muted/:id " , to : " mutes # destroy " , as : :muted_destroy
2022-07-03 12:11:17 -07:00
2022-07-23 03:06:05 -07:00
get :blocks , to : " blocks # index "
2022-07-03 12:31:39 -07:00
2022-07-23 03:06:05 -07:00
get :data , to : " data # index "
2022-07-03 12:41:50 -07:00
2022-07-02 14:35:58 -07:00
namespace :two_factor_authentication do
2022-07-23 03:06:05 -07:00
get :otp_authentication , to : " otp_authentication # index "
patch :otp_authentication , to : " otp_authentication # update "
delete :otp_authentication , to : " otp_authentication # destroy "
delete " otp_authentication/reset " , to : " otp_authentication # reset "
2022-07-02 14:35:58 -07:00
end
2022-06-26 04:28:35 -07:00
end
2022-07-23 03:06:05 -07:00
resolve ( " Theme " ) { [ :settings_theme ] } # to make link_to/form_for work nicely when passing a `Theme` object to it, see also: https://api.rubyonrails.org/v6.1.5.1/classes/ActionDispatch/Routing/Mapper/CustomUrls.html#method-i-resolve
resolve ( " Profile " ) { [ :settings_profile ] }
2015-08-25 01:26:36 -07:00
2014-12-12 12:43:09 -08:00
# resources :services, only: [:index, :destroy]
2022-07-23 03:06:05 -07:00
get " /settings/services " , to : " services # index " , as : :services
patch " /settings/services/:id " , to : " services # update " , as : :update_service
delete " /settings/services/:id " , to : " services # destroy " , as : :service
2014-12-12 12:43:09 -08:00
controller :services do
scope " /auth " , as : " auth " do
2022-07-23 03:06:05 -07:00
get " :provider/callback " = > :create
2014-12-12 12:43:09 -08:00
get :failure
end
end
2014-11-10 04:04:10 -08:00
namespace :ajax do
2022-07-23 03:06:05 -07:00
post " /ask " , to : " question # create " , as : :ask
post " /destroy_question " , to : " question # destroy " , as : :destroy_question
post " /delete_inbox " , to : " inbox # remove " , as : :delete_inbox
post " /delete_all_inbox " , to : " inbox # remove_all " , as : :delete_all_inbox
post " /delete_all_inbox/:author " , to : " inbox # remove_all_author " , as : :delete_all_author
post " /answer " , to : " answer # create " , as : :answer
post " /destroy_answer " , to : " answer # destroy " , as : :destroy_answer
post " /create_relationship " , to : " relationship # create " , as : :create_relationship
post " /destroy_relationship " , to : " relationship # destroy " , as : :destroy_relationship
post " /create_smile " , to : " smile # create " , as : :create_smile
post " /destroy_smile " , to : " smile # destroy " , as : :destroy_smile
post " /create_comment_smile " , to : " smile # create_comment " , as : :create_comment_smile
post " /destroy_comment_smile " , to : " smile # destroy_comment " , as : :destroy_comment_smile
post " /create_comment " , to : " comment # create " , as : :create_comment
post " /destroy_comment " , to : " comment # destroy " , as : :destroy_comment
post " /report " , to : " report # create " , as : :report
post " /create_list " , to : " list # create " , as : :create_list
post " /destroy_list " , to : " list # destroy " , as : :destroy_list
post " /list_membership " , to : " list # membership " , as : :list_membership
post " /subscribe " , to : " subscription # subscribe " , as : :subscribe_answer
post " /unsubscribe " , to : " subscription # unsubscribe " , as : :unsubscribe_answer
post " /block_anon " , to : " anonymous_block # create " , as : :block_anon
delete " /block_anon/:id " , to : " anonymous_block # destroy " , as : :unblock_anon
2014-11-10 04:04:10 -08:00
end
2014-11-03 04:21:41 -08:00
2022-07-23 03:06:05 -07:00
get " /discover " , to : " discover # index " , as : :discover
2022-09-08 13:41:32 -07:00
match " /public " , to : " timeline # public " , via : [ :get , :post ] , as : :public_timeline if APP_CONFIG . dig ( :features , :public , :enabled )
match " /list/:list_name " , to : " timeline # list " , via : [ :get , :post ] , as : :list_timeline
2022-07-23 03:06:05 -07:00
2022-09-05 12:40:26 -07:00
match " /notifications(/:type) " , to : " notifications # index " , via : [ :get , :post ] , as : :notifications , defaults : { type : " new " }
2022-07-23 03:06:05 -07:00
2022-11-17 12:55:01 -08:00
post " /inbox/create " , to : " inbox # create " , as : :inbox_create
2022-09-04 11:24:32 -07:00
match " /inbox(/:author) " , via : [ :get , :post ] , to : " inbox # show " , as : :inbox
2022-07-23 03:06:05 -07:00
2022-09-07 14:20:03 -07:00
match " /user/:username(/p/:page) " , to : " user # show " , via : [ :get , :post ] , defaults : { page : 1 }
match " /@:username(/p/:page) " , to : " user # show " , via : [ :get , :post ] , as : :user , defaults : { page : 1 }
2022-07-23 03:06:05 -07:00
get " /@:username/a/:id " , to : " answer # show " , via : " get " , as : :answer
2022-09-08 14:09:59 -07:00
match " /@:username/q/:id " , to : " question # show " , via : [ :get , :post ] , as : :question
2022-09-07 14:21:18 -07:00
match " /@:username/followers(/p/:page) " , to : " user # followers " , via : [ :get , :post ] , as : :show_user_followers , defaults : { page : 1 }
match " /@:username/followings(/p/:page) " , to : " user # followings " , via : [ :get , :post ] , as : :show_user_followings , defaults : { page : 1 }
match " /@:username/friends(/p/:page) " , to : redirect ( " /@%{username}/followings/p/%{page} " ) , via : [ :get , :post ] , defaults : { page : 1 }
2022-09-07 14:20:47 -07:00
match " /@:username/questions(/p/:page) " , to : " user # questions " , via : [ :get , :post ] , as : :show_user_questions , defaults : { page : 1 }
2022-07-23 03:06:05 -07:00
get " /:username(/p/:page) " , to : " user # show " , as : :user_alt , defaults : { page : 1 }
get " /:username/a/:id " , to : " answer # show " , as : :answer_alt
get " /:username/q/:id " , to : " question # show " , as : :question_alt
get " /:username/followers(/p/:page) " , to : " user # followers " , as : :show_user_followers_alt , defaults : { page : 1 }
get " /:username/followings(/p/:page) " , to : " user # followings " , as : :show_user_followings_alt , defaults : { page : 1 }
get " /:username/friends(/p/:page) " , to : redirect ( " /%{username}/followings/p/%{page} " ) , defaults : { page : 1 }
get " /:username/questions(/p/:page) " , to : " user # questions " , as : :show_user_questions_alt , defaults : { page : 1 }
get " /feedback/consent " , to : " feedback # consent " , as : " feedback_consent "
post " /feedback/consent/update " , to : " feedback # update " , as : " feedback_consent_update "
get " /feedback/bugs(/*any) " , to : " feedback # bugs " , as : " feedback_bugs "
get " /feedback/feature_requests(/*any) " , to : " feedback # features " , as : " feedback_features "
get " /.well-known/change-password " , to : redirect ( " /settings/account " )
puts " processing time of routes.rb: #{ " #{ ( Time . zone . now - start ) . round ( 3 ) . to_s . ljust ( 5 , '0' ) } s " . light_green } "
2014-08-01 02:23:47 -07:00
end