discourse/config/routes.rb

585 lines
27 KiB
Ruby
Raw Normal View History

2013-12-24 07:50:36 +08:00
require "sidekiq/web"
require_dependency "scheduler/web"
2013-12-24 07:50:36 +08:00
require_dependency "admin_constraint"
require_dependency "staff_constraint"
require_dependency "homepage_constraint"
2014-08-29 23:28:16 +08:00
require_dependency "permalink_constraint"
2013-02-06 03:16:51 +08:00
# This used to be User#username_format, but that causes a preload of the User object
# and makes Guard not work properly.
USERNAME_ROUTE_FORMAT = /[A-Za-z0-9\_.\-]+/ unless defined? USERNAME_ROUTE_FORMAT
BACKUP_ROUTE_FORMAT = /[a-zA-Z0-9\-_]*\d{4}(-\d{2}){2}-\d{6}\.(tar\.gz|t?gz)/i unless defined? BACKUP_ROUTE_FORMAT
2013-02-06 03:16:51 +08:00
Discourse::Application.routes.draw do
match "/404", to: "exceptions#not_found", via: [:get, :post]
2014-04-30 03:17:40 +08:00
get "/404-body" => "exceptions#not_found_body"
2013-02-06 03:16:51 +08:00
if Rails.env.development?
mount Sidekiq::Web => "/sidekiq"
mount Logster::Web => "/logs"
else
mount Sidekiq::Web => "/sidekiq", constraints: AdminConstraint.new
mount Logster::Web => "/logs", constraints: AdminConstraint.new
end
resources :about do
collection do
get "live_post_counts"
end
end
2014-08-12 04:59:00 +08:00
resources :directory_items
get "site" => "site#site"
namespace :site do
get "settings"
get "custom_html"
get "banner"
get "emoji"
end
get "site_customizations/:key" => "site_customizations#show"
2013-02-06 03:16:51 +08:00
resources :forums
2013-12-24 07:50:36 +08:00
get "srv/status" => "forums#status"
2013-02-06 03:16:51 +08:00
namespace :admin, constraints: StaffConstraint.new do
2013-12-24 07:50:36 +08:00
get "" => "admin#index"
2013-02-06 03:16:51 +08:00
get 'plugins' => 'plugins#index'
2013-11-14 03:02:47 +08:00
resources :site_settings, constraints: AdminConstraint.new do
collection do
2013-12-24 07:50:36 +08:00
get "category/:id" => "site_settings#index"
2013-11-14 03:02:47 +08:00
end
end
2013-12-24 07:50:36 +08:00
get "reports/:type" => "reports#show"
2013-05-08 13:20:38 +08:00
resources :groups, constraints: AdminConstraint.new do
collection do
2013-12-24 07:50:36 +08:00
post "refresh_automatic_groups" => "groups#refresh_automatic_groups"
get 'bulk'
get 'bulk-complete' => 'groups#bulk'
put 'bulk' => 'groups#bulk_perform'
2013-05-08 13:20:38 +08:00
end
member do
put "owners" => "groups#add_owners"
delete "owners" => "groups#remove_owner"
end
2013-05-08 13:20:38 +08:00
end
get "groups/:type" => "groups#show", constraints: AdminConstraint.new
get "groups/:type/:id" => "groups#show", constraints: AdminConstraint.new
get "users/:id.json" => 'users#show' , id: USERNAME_ROUTE_FORMAT, defaults: {format: 'json'}
2013-02-06 03:16:51 +08:00
resources :users, id: USERNAME_ROUTE_FORMAT do
collection do
2013-12-24 07:50:36 +08:00
get "list/:query" => "users#index"
get "ip-info" => "users#ip_info"
delete "delete-others-with-same-ip" => "users#delete_other_accounts_with_same_ip"
get "total-others-with-same-ip" => "users#total_other_accounts_with_same_ip"
2013-12-24 07:50:36 +08:00
put "approve-bulk" => "users#approve_bulk"
delete "reject-bulk" => "users#reject_bulk"
2013-02-06 03:16:51 +08:00
end
2013-12-24 07:50:36 +08:00
put "suspend"
put "delete_all_posts"
put "unsuspend"
put "revoke_admin", constraints: AdminConstraint.new
put "grant_admin", constraints: AdminConstraint.new
post "generate_api_key", constraints: AdminConstraint.new
delete "revoke_api_key", constraints: AdminConstraint.new
put "revoke_moderation", constraints: AdminConstraint.new
put "grant_moderation", constraints: AdminConstraint.new
put "approve"
post "refresh_browsers", constraints: AdminConstraint.new
2014-06-06 11:02:52 +08:00
post "log_out", constraints: AdminConstraint.new
2013-12-24 07:50:36 +08:00
put "activate"
put "deactivate"
put "block"
put "unblock"
put "trust_level"
put "trust_level_lock"
put "primary_group"
post "groups" => "users#add_group", constraints: AdminConstraint.new
delete "groups/:group_id" => "users#remove_group", constraints: AdminConstraint.new
get "badges"
2014-09-25 08:19:26 +08:00
get "leader_requirements" => "users#tl3_requirements"
get "tl3_requirements"
put "anonymize"
2013-02-06 03:16:51 +08:00
end
post "users/sync_sso" => "users#sync_sso", constraints: AdminConstraint.new
post "users/invite_admin" => "users#invite_admin", constraints: AdminConstraint.new
resources :impersonate, constraints: AdminConstraint.new
resources :email, constraints: AdminConstraint.new do
2013-02-06 03:16:51 +08:00
collection do
2013-12-24 07:50:36 +08:00
post "test"
2014-02-15 08:17:13 +08:00
get "all"
2014-02-15 07:50:08 +08:00
get "sent"
get "skipped"
2013-12-24 07:50:36 +08:00
get "preview-digest" => "email#preview_digest"
post "handle_mail"
2013-02-06 03:16:51 +08:00
end
end
2013-12-24 07:50:36 +08:00
scope "/logs" do
resources :staff_action_logs, only: [:index]
resources :screened_emails, only: [:index, :destroy]
resources :screened_ip_addresses, only: [:index, :create, :update, :destroy] do
collection do
post "roll_up"
end
end
resources :screened_urls, only: [:index]
2013-08-02 09:30:13 +08:00
end
get "/logs" => "staff_action_logs#index"
get "customize" => "color_schemes#index", constraints: AdminConstraint.new
get "customize/css_html" => "site_customizations#index", constraints: AdminConstraint.new
get "customize/css_html/:id/:section" => "site_customizations#index", constraints: AdminConstraint.new
get "customize/colors" => "color_schemes#index", constraints: AdminConstraint.new
2015-07-15 20:54:28 +08:00
get "customize/permalinks" => "permalinks#index", constraints: AdminConstraint.new
get "customize/embedding" => "embedding#show", constraints: AdminConstraint.new
put "customize/embedding" => "embedding#update", constraints: AdminConstraint.new
2013-12-24 07:50:36 +08:00
get "flags" => "flags#index"
get "flags/:filter" => "flags#index"
post "flags/agree/:id" => "flags#agree"
post "flags/disagree/:id" => "flags#disagree"
post "flags/defer/:id" => "flags#defer"
resources :site_customizations, constraints: AdminConstraint.new
scope "/customize" do
resources :user_fields, constraints: AdminConstraint.new
2014-12-23 08:12:26 +08:00
resources :emojis, constraints: AdminConstraint.new
# They have periods in their URLs often:
get 'site_texts' => 'site_texts#index'
match 'site_texts/(:id)' => 'site_texts#show', :constraints => { :id => /[0-9a-z\_\.\-]+/ }, via: :get
match 'site_texts/(:id)' => 'site_texts#update', :constraints => { :id => /[0-9a-z\_\.\-]+/ }, via: :put
match 'site_texts/(:id)' => 'site_texts#revert', :constraints => { :id => /[0-9a-z\_\.\-]+/ }, via: :delete
get 'email_templates' => 'email_templates#index'
match 'email_templates/(:id)' => 'email_templates#show', :constraints => { :id => /[0-9a-z\_\.]+/ }, via: :get
match 'email_templates/(:id)' => 'email_templates#update', :constraints => { :id => /[0-9a-z\_\.]+/ }, via: :put
2015-11-21 01:30:04 +08:00
match 'email_templates/(:id)' => 'email_templates#revert', :constraints => { :id => /[0-9a-z\_\.]+/ }, via: :delete
end
resources :embeddable_hosts, constraints: AdminConstraint.new
resources :color_schemes, constraints: AdminConstraint.new
2014-02-13 12:33:40 +08:00
2015-07-15 20:54:28 +08:00
resources :permalinks, constraints: AdminConstraint.new
2013-12-24 07:50:36 +08:00
get "version_check" => "versions#show"
2014-02-13 12:33:40 +08:00
resources :dashboard, only: [:index] do
collection do
2013-12-24 07:50:36 +08:00
get "problems"
end
end
2014-02-13 12:33:40 +08:00
resources :api, only: [:index], constraints: AdminConstraint.new do
2013-03-26 09:04:28 +08:00
collection do
2013-12-24 07:50:36 +08:00
post "key" => "api#create_master_key"
put "key" => "api#regenerate_key"
delete "key" => "api#revoke_key"
2013-03-26 09:04:28 +08:00
end
end
2014-02-13 12:33:40 +08:00
resources :backups, only: [:index, :create], constraints: AdminConstraint.new do
member do
get "" => "backups#show", constraints: { id: BACKUP_ROUTE_FORMAT }
delete "" => "backups#destroy", constraints: { id: BACKUP_ROUTE_FORMAT }
post "restore" => "backups#restore", constraints: { id: BACKUP_ROUTE_FORMAT }
end
collection do
get "logs" => "backups#logs"
get "status" => "backups#status"
get "cancel" => "backups#cancel"
get "rollback" => "backups#rollback"
put "readonly" => "backups#readonly"
2014-05-28 04:14:37 +08:00
get "upload" => "backups#check_backup_chunk"
post "upload" => "backups#upload_backup_chunk"
2014-02-13 12:33:40 +08:00
end
end
2014-02-15 07:50:08 +08:00
2014-03-05 20:52:20 +08:00
resources :badges, constraints: AdminConstraint.new do
collection do
get "types" => "badges#badge_types"
2014-07-27 16:22:01 +08:00
post "badge_groupings" => "badges#save_badge_groupings"
post "preview" => "badges#preview"
2014-03-05 20:52:20 +08:00
end
end
get "memory_stats"=> "diagnostics#memory_stats", constraints: AdminConstraint.new
get "dump_heap"=> "diagnostics#dump_heap", constraints: AdminConstraint.new
get "dump_statement_cache"=> "diagnostics#dump_statement_cache", constraints: AdminConstraint.new
2014-02-13 12:33:40 +08:00
end # admin namespace
2013-02-06 03:16:51 +08:00
2013-12-24 07:50:36 +08:00
get "email_preferences" => "email#preferences_redirect", :as => "email_preferences_redirect"
get "email/unsubscribe/:key" => "email#unsubscribe", as: "email_unsubscribe"
post "email/resubscribe/:key" => "email#resubscribe", as: "email_resubscribe"
2013-02-06 03:16:51 +08:00
resources :session, id: USERNAME_ROUTE_FORMAT, only: [:create, :destroy, :become] do
get 'become'
collection do
2013-12-24 07:50:36 +08:00
post "forgot_password"
2013-02-06 03:16:51 +08:00
end
end
2013-02-06 03:16:51 +08:00
get "session/sso" => "session#sso"
get "session/sso_login" => "session#sso_login"
get "session/sso_provider" => "session#sso_provider"
get "session/current" => "session#current"
2013-12-24 07:50:36 +08:00
get "session/csrf" => "session#csrf"
get "composer-messages" => "composer_messages#index"
resources :users, except: [:show, :update, :destroy] do
collection do
2013-12-24 07:50:36 +08:00
get "check_username"
get "is_local_username"
2013-02-06 03:16:51 +08:00
end
end
resources :static
2013-12-24 07:50:36 +08:00
post "login" => "static#enter"
get "login" => "static#show", id: "login"
get "password-reset" => "static#show", id: "password_reset"
2013-12-24 07:50:36 +08:00
get "faq" => "static#show", id: "faq"
get "guidelines" => "static#show", id: "guidelines", as: 'guidelines'
get "tos" => "static#show", id: "tos", as: 'tos'
get "privacy" => "static#show", id: "privacy", as: 'privacy'
get "signup" => "list#latest"
get "login-preferences" => "static#show", id: "login"
2013-12-24 07:50:36 +08:00
get "users/admin-login" => "users#admin_login"
put "users/admin-login" => "users#admin_login"
get "users/admin-login/:token" => "users#admin_login"
post "users/toggle-anon" => "users#toggle_anon"
2014-07-11 15:32:29 +08:00
post "users/read-faq" => "users#read_faq"
2013-12-24 07:50:36 +08:00
get "users/search/users" => "users#search_users"
get "users/account-created/" => "users#account_created"
2013-12-24 07:50:36 +08:00
get "users/password-reset/:token" => "users#password_reset"
put "users/password-reset/:token" => "users#password_reset"
get "users/activate-account/:token" => "users#activate_account"
put "users/activate-account/:token" => "users#perform_account_activation", as: 'perform_activate_account'
2013-12-24 07:50:36 +08:00
get "users/authorize-email/:token" => "users#authorize_email"
get "users/hp" => "users#get_honeypot_value"
get "my/*path", to: 'users#my_redirect'
2013-12-24 07:50:36 +08:00
get "user_preferences" => "users#user_preferences_redirect"
get "users/:username/private-messages" => "user_actions#private_messages", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/private-messages/:filter" => "user_actions#private_messages", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/messages" => "user_actions#private_messages", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/messages/:filter" => "user_actions#private_messages", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/messages/group/:group_name" => "user_actions#private_messages", constraints: {username: USERNAME_ROUTE_FORMAT, group_name: USERNAME_ROUTE_FORMAT}
get "users/:username.json" => "users#show", constraints: {username: USERNAME_ROUTE_FORMAT}, defaults: {format: :json}
get "users/:username" => "users#show", as: 'user', constraints: {username: USERNAME_ROUTE_FORMAT}
2013-12-24 07:50:36 +08:00
put "users/:username" => "users#update", constraints: {username: USERNAME_ROUTE_FORMAT}
put "users/:username/emails" => "users#check_emails", constraints: {username: USERNAME_ROUTE_FORMAT}
2013-12-24 07:50:36 +08:00
get "users/:username/preferences" => "users#preferences", constraints: {username: USERNAME_ROUTE_FORMAT}, as: :email_preferences
get "users/:username/preferences/email" => "users#preferences", constraints: {username: USERNAME_ROUTE_FORMAT}
put "users/:username/preferences/email" => "users#change_email", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/preferences/about-me" => "users#preferences", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/preferences/badge_title" => "users#preferences", constraints: {username: USERNAME_ROUTE_FORMAT}
put "users/:username/preferences/badge_title" => "users#badge_title", constraints: {username: USERNAME_ROUTE_FORMAT}
2013-12-24 07:50:36 +08:00
get "users/:username/preferences/username" => "users#preferences", constraints: {username: USERNAME_ROUTE_FORMAT}
put "users/:username/preferences/username" => "users#username", constraints: {username: USERNAME_ROUTE_FORMAT}
delete "users/:username/preferences/user_image" => "users#destroy_user_image", constraints: {username: USERNAME_ROUTE_FORMAT}
put "users/:username/preferences/avatar/pick" => "users#pick_avatar", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/preferences/card-badge" => "users#card_badge", constraints: {username: USERNAME_ROUTE_FORMAT}
put "users/:username/preferences/card-badge" => "users#update_card_badge", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/staff-info" => "users#staff_info", constraints: {username: USERNAME_ROUTE_FORMAT}
2013-12-24 07:50:36 +08:00
get "users/:username/invited" => "users#invited", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/invited_count" => "users#invited_count", constraints: {username: USERNAME_ROUTE_FORMAT}
2015-07-11 20:09:12 +08:00
get "users/:username/invited/:filter" => "users#invited", constraints: {username: USERNAME_ROUTE_FORMAT}
post "users/action/send_activation_email" => "users#send_activation_email"
2013-12-24 07:50:36 +08:00
get "users/:username/activity" => "users#show", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/activity/:filter" => "users#show", constraints: {username: USERNAME_ROUTE_FORMAT}
2014-04-17 02:49:28 +08:00
get "users/:username/badges" => "users#show", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/notifications" => "users#show", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/notifications/:filter" => "users#show", constraints: {username: USERNAME_ROUTE_FORMAT}
2015-04-22 02:36:46 +08:00
get "users/:username/pending" => "users#show", constraints: {username: USERNAME_ROUTE_FORMAT}
delete "users/:username" => "users#destroy", constraints: {username: USERNAME_ROUTE_FORMAT}
# The external_id constraint is to allow periods to be used in the value without becoming part of the format. ie: foo.bar.json
get "users/by-external/:external_id" => "users#show", constraints: {external_id: /[^\/]+/}
get "users/:username/flagged-posts" => "users#show", constraints: {username: USERNAME_ROUTE_FORMAT}
get "users/:username/deleted-posts" => "users#show", constraints: {username: USERNAME_ROUTE_FORMAT}
get "user-badges/:username.json" => "user_badges#username", constraints: {username: USERNAME_ROUTE_FORMAT}, defaults: {format: :json}
get "user-badges/:username" => "user_badges#username", constraints: {username: USERNAME_ROUTE_FORMAT}
2013-12-24 07:50:36 +08:00
post "user_avatar/:username/refresh_gravatar" => "user_avatars#refresh_gravatar", constraints: {username: USERNAME_ROUTE_FORMAT}
get "letter_avatar/:username/:size/:version.png" => "user_avatars#show_letter", format: false, constraints: { hostname: /[\w\.-]+/, size: /\d+/, username: USERNAME_ROUTE_FORMAT}
get "user_avatar/:hostname/:username/:size/:version.png" => "user_avatars#show", format: false, constraints: { hostname: /[\w\.-]+/, size: /\d+/, username: USERNAME_ROUTE_FORMAT }
# in most production settings this is bypassed
get "letter_avatar_proxy/:version/letter/:letter/:color/:size.png" => "user_avatars#show_proxy_letter"
get "highlight-js/:hostname/:version.js" => "highlight_js#show", format: false, constraints: { hostname: /[\w\.-]+/ }
get "stylesheets/:name.css" => "stylesheets#show", constraints: { name: /[a-z0-9_]+/ }
2013-12-24 07:50:36 +08:00
post "uploads" => "uploads#create"
# used to download original images
get "uploads/:site/:sha" => "uploads#show", constraints: { site: /\w+/, sha: /[a-f0-9]{40}/ }
2015-06-01 05:06:36 +08:00
# used to dowwload attachments
get "uploads/:site/original/:tree:sha" => "uploads#show", constraints: { site: /\w+/, tree: /(\w+\/)+/i, sha: /[a-f0-9]{40}/ }
2015-05-20 20:55:42 +08:00
# used to download attachments (old route)
get "uploads/:site/:id/:sha" => "uploads#show", constraints: { site: /\w+/, id: /\d+/, sha: /[a-f0-9]{16}/ }
get "posts" => "posts#latest"
2013-12-24 07:50:36 +08:00
get "posts/by_number/:topic_id/:post_number" => "posts#by_number"
get "posts/:id/reply-history" => "posts#reply_history"
get "posts/:username/deleted" => "posts#deleted_posts", constraints: {username: USERNAME_ROUTE_FORMAT}
get "posts/:username/flagged" => "posts#flagged_posts", constraints: {username: USERNAME_ROUTE_FORMAT}
2013-12-24 07:50:36 +08:00
2014-02-07 02:06:19 +08:00
resources :groups do
get 'members'
get 'posts'
get 'topics'
get 'mentions'
get 'messages'
2014-02-19 05:17:04 +08:00
get 'counts'
member do
put "members" => "groups#add_members"
delete "members" => "groups#remove_member"
post "notifications" => "groups#set_notifications"
end
2014-02-07 02:06:19 +08:00
end
# aliases so old API code works
delete "admin/groups/:id/members" => "groups#remove_member", constraints: AdminConstraint.new
put "admin/groups/:id/members" => "groups#add_members", constraints: AdminConstraint.new
# In case people try the wrong URL
get '/group/:id', to: redirect('/groups/%{id}')
get '/group/:id/members', to: redirect('/groups/%{id}/members')
2013-02-06 03:16:51 +08:00
resources :posts do
2013-12-24 07:50:36 +08:00
put "bookmark"
2014-05-13 20:53:11 +08:00
put "wiki"
put "post_type"
put "rebake"
2014-09-23 00:55:13 +08:00
put "unhide"
2013-12-24 07:50:36 +08:00
get "replies"
get "revisions/latest" => "posts#latest_revision"
get "revisions/:revision" => "posts#revisions", constraints: { revision: /\d+/ }
put "revisions/:revision/hide" => "posts#hide_revision", constraints: { revision: /\d+/ }
put "revisions/:revision/show" => "posts#show_revision", constraints: { revision: /\d+/ }
2013-12-24 07:50:36 +08:00
put "recover"
2013-02-06 03:16:51 +08:00
collection do
2013-12-24 07:50:36 +08:00
delete "destroy_many"
2013-02-06 03:16:51 +08:00
end
end
get 'notifications' => 'notifications#index'
put 'notifications/mark-read' => 'notifications#mark_read'
match "/auth/:provider/callback", to: "users/omniauth_callbacks#complete", via: [:get, :post]
match "/auth/failure", to: "users/omniauth_callbacks#failure", via: [:get, :post]
2013-02-06 03:16:51 +08:00
resources :clicks do
collection do
2013-12-24 07:50:36 +08:00
get "track"
2013-02-06 03:16:51 +08:00
end
end
2013-12-24 07:50:36 +08:00
get "excerpt" => "excerpt#show"
2013-02-06 03:16:51 +08:00
resources :post_action_users
2013-02-06 03:16:51 +08:00
resources :post_actions do
collection do
2013-12-24 07:50:36 +08:00
get "users"
post "defer_flags"
2013-02-06 03:16:51 +08:00
end
end
resources :user_actions
resources :badges, only: [:index]
2014-04-16 22:56:11 +08:00
get "/badges/:id(/:slug)" => "badges#show"
2014-03-05 20:52:20 +08:00
resources :user_badges, only: [:index, :create, :destroy]
get '/c', to: redirect('/categories')
2013-07-02 13:21:26 +08:00
resources :categories, :except => :show
post "category/:category_id/move" => "categories#move"
2015-08-28 01:14:59 +08:00
post "categories/reorder" => "categories#reorder"
2014-04-17 17:17:39 +08:00
post "category/:category_id/notifications" => "categories#set_notifications"
2014-12-20 22:07:29 +08:00
put "category/:category_id/slug" => "categories#update_slug"
get "c/:id/show" => "categories#show"
get "c/:category.rss" => "list#category_feed", format: :rss
get "c/:parent_category/:category.rss" => "list#category_feed", format: :rss
get "c/:category" => "list#category_latest"
get "c/:category/none" => "list#category_none_latest"
get "c/:parent_category/:category" => "list#parent_category_category_latest"
get "c/:category/l/top" => "list#category_top", as: "category_top"
get "c/:category/none/l/top" => "list#category_none_top", as: "category_none_top"
get "c/:parent_category/:category/l/top" => "list#parent_category_category_top", as: "parent_category_category_top"
2014-01-14 08:02:14 +08:00
TopTopic.periods.each do |period|
get "top/#{period}" => "list#top_#{period}"
get "c/:category/l/top/#{period}" => "list#category_top_#{period}", as: "category_top_#{period}"
get "c/:category/none/l/top/#{period}" => "list#category_none_top_#{period}", as: "category_none_top_#{period}"
get "c/:parent_category/:category/l/top/#{period}" => "list#parent_category_category_top_#{period}", as: "parent_category_category_top_#{period}"
2013-07-06 04:49:06 +08:00
end
2014-10-16 11:52:21 +08:00
Discourse.anonymous_filters.each do |filter|
get "#{filter}.rss" => "list##{filter}_feed", format: :rss
end
2013-12-24 07:50:36 +08:00
Discourse.filters.each do |filter|
get "#{filter}" => "list##{filter}", constraints: { format: /(json|html)/ }
get "c/:category/l/#{filter}" => "list#category_#{filter}", as: "category_#{filter}"
get "c/:category/none/l/#{filter}" => "list#category_none_#{filter}", as: "category_none_#{filter}"
get "c/:parent_category/:category/l/#{filter}" => "list#parent_category_category_#{filter}", as: "parent_category_category_#{filter}"
end
2013-02-06 03:16:51 +08:00
get "category/*path" => "categories#redirect"
get "top" => "list#top"
2015-04-04 04:55:32 +08:00
get "search/query" => "search#query"
get "search" => "search#show"
2013-02-06 03:16:51 +08:00
# Topics resource
2013-12-24 07:50:36 +08:00
get "t/:id" => "topics#show"
post "t" => "topics#create"
2014-01-14 08:02:14 +08:00
put "t/:id" => "topics#update"
delete "t/:id" => "topics#destroy"
put "topics/bulk"
2014-03-04 04:46:38 +08:00
put "topics/reset-new" => 'topics#reset_new'
2013-12-24 07:50:36 +08:00
post "topics/timings"
get 'topics/similar_to' => 'similar_topics#index'
resources :similar_topics
get "topics/feature_stats"
2013-12-24 07:50:36 +08:00
get "topics/created-by/:username" => "list#topics_by", as: "topics_by", constraints: {username: USERNAME_ROUTE_FORMAT}
get "topics/private-messages/:username" => "list#private_messages", as: "topics_private_messages", constraints: {username: USERNAME_ROUTE_FORMAT}
get "topics/private-messages-sent/:username" => "list#private_messages_sent", as: "topics_private_messages_sent", constraints: {username: USERNAME_ROUTE_FORMAT}
get "topics/private-messages-unread/:username" => "list#private_messages_unread", as: "topics_private_messages_unread", constraints: {username: USERNAME_ROUTE_FORMAT}
get "topics/private-messages-group/:username/:group_name.json" => "list#private_messages_group", as: "topics_private_messages_group", constraints: {
username: USERNAME_ROUTE_FORMAT,
group_name: USERNAME_ROUTE_FORMAT
}
2013-02-06 03:16:51 +08:00
2014-01-04 01:52:24 +08:00
get 'embed/comments' => 'embed#comments'
get 'embed/count' => 'embed#count'
get 'embed/info' => 'embed#info'
get "new-topic" => "list#latest"
get "new-message" => "list#latest"
# Topic routes
get "t/id_for/:slug" => "topics#id_for_slug"
2013-12-24 07:50:36 +08:00
get "t/:slug/:topic_id/wordpress" => "topics#wordpress", constraints: {topic_id: /\d+/}
get "t/:topic_id/wordpress" => "topics#wordpress", constraints: {topic_id: /\d+/}
get "t/:slug/:topic_id/moderator-liked" => "topics#moderator_liked", constraints: {topic_id: /\d+/}
get "t/:slug/:topic_id/summary" => "topics#show", defaults: {summary: true}, constraints: {topic_id: /\d+/}
get "t/:slug/:topic_id/unsubscribe" => "topics#unsubscribe", constraints: {topic_id: /\d+/}
get "t/:topic_id/unsubscribe" => "topics#unsubscribe", constraints: {topic_id: /\d+/}
get "t/:topic_id/summary" => "topics#show", constraints: {topic_id: /\d+/}
2013-12-24 07:50:36 +08:00
put "t/:slug/:topic_id" => "topics#update", constraints: {topic_id: /\d+/}
put "t/:slug/:topic_id/star" => "topics#star", constraints: {topic_id: /\d+/}
put "t/:topic_id/star" => "topics#star", constraints: {topic_id: /\d+/}
put "t/:slug/:topic_id/status" => "topics#status", constraints: {topic_id: /\d+/}
put "t/:topic_id/status" => "topics#status", constraints: {topic_id: /\d+/}
put "t/:topic_id/clear-pin" => "topics#clear_pin", constraints: {topic_id: /\d+/}
put "t/:topic_id/re-pin" => "topics#re_pin", constraints: {topic_id: /\d+/}
2013-12-24 07:50:36 +08:00
put "t/:topic_id/mute" => "topics#mute", constraints: {topic_id: /\d+/}
put "t/:topic_id/unmute" => "topics#unmute", constraints: {topic_id: /\d+/}
put "t/:topic_id/autoclose" => "topics#autoclose", constraints: {topic_id: /\d+/}
2014-06-17 00:28:07 +08:00
put "t/:topic_id/make-banner" => "topics#make_banner", constraints: {topic_id: /\d+/}
put "t/:topic_id/remove-banner" => "topics#remove_banner", constraints: {topic_id: /\d+/}
2013-12-24 07:50:36 +08:00
put "t/:topic_id/remove-allowed-user" => "topics#remove_allowed_user", constraints: {topic_id: /\d+/}
put "t/:topic_id/recover" => "topics#recover", constraints: {topic_id: /\d+/}
get "t/:topic_id/:post_number" => "topics#show", constraints: {topic_id: /\d+/, post_number: /\d+/}
get "t/:topic_id/last" => "topics#show", post_number: 99999999, constraints: {topic_id: /\d+/}
2013-12-24 07:50:36 +08:00
get "t/:slug/:topic_id.rss" => "topics#feed", format: :rss, constraints: {topic_id: /\d+/}
get "t/:slug/:topic_id" => "topics#show", constraints: {topic_id: /\d+/}
get "t/:slug/:topic_id/:post_number" => "topics#show", constraints: {topic_id: /\d+/, post_number: /\d+/}
get "t/:slug/:topic_id/last" => "topics#show", post_number: 99999999, constraints: {topic_id: /\d+/}
2013-12-24 07:50:36 +08:00
get "t/:topic_id/posts" => "topics#posts", constraints: {topic_id: /\d+/}
post "t/:topic_id/timings" => "topics#timings", constraints: {topic_id: /\d+/}
post "t/:topic_id/invite" => "topics#invite", constraints: {topic_id: /\d+/}
post "t/:topic_id/move-posts" => "topics#move_posts", constraints: {topic_id: /\d+/}
post "t/:topic_id/merge-topic" => "topics#merge_topic", constraints: {topic_id: /\d+/}
post "t/:topic_id/change-owner" => "topics#change_post_owners", constraints: {topic_id: /\d+/}
put "t/:topic_id/change-timestamp" => "topics#change_timestamps", constraints: {topic_id: /\d+/}
2013-12-24 07:50:36 +08:00
delete "t/:topic_id/timings" => "topics#destroy_timings", constraints: {topic_id: /\d+/}
2015-01-12 19:10:15 +08:00
put "t/:topic_id/bookmark" => "topics#bookmark", constraints: {topic_id: /\d+/}
put "t/:topic_id/remove_bookmarks" => "topics#remove_bookmarks", constraints: {topic_id: /\d+/}
2013-12-24 07:50:36 +08:00
post "t/:topic_id/notifications" => "topics#set_notifications" , constraints: {topic_id: /\d+/}
get "p/:post_id(/:user_id)" => "posts#short_link"
get "/posts/:id/cooked" => "posts#cooked"
2014-04-02 05:45:16 +08:00
get "/posts/:id/expand-embed" => "posts#expand_embed"
get "/posts/:id/raw" => "posts#markdown_id"
2014-10-18 03:18:29 +08:00
get "/posts/:id/raw-email" => "posts#raw_email"
get "raw/:topic_id(/:post_number)" => "posts#markdown_num"
2015-04-11 05:00:50 +08:00
resources :queued_posts, constraints: StaffConstraint.new
get 'queued-posts' => 'queued_posts#index'
2014-05-28 04:14:37 +08:00
resources :invites do
collection do
get "upload" => "invites#check_csv_chunk"
post "upload" => "invites#upload_csv_chunk"
end
end
2014-10-07 02:48:56 +08:00
post "invites/reinvite" => "invites#resend_invite"
2015-08-26 09:41:52 +08:00
post "invites/link" => "invites#create_invite_link"
2014-07-14 23:56:26 +08:00
post "invites/disposable" => "invites#create_disposable_invite"
get "invites/redeem/:token" => "invites#redeem_disposable_invite"
2013-12-24 07:50:36 +08:00
delete "invites" => "invites#destroy"
2014-12-23 00:17:04 +08:00
resources :export_csv do
collection do
post "export_entity" => "export_csv#export_entity"
2014-12-23 00:17:04 +08:00
end
member do
get "" => "export_csv#show", constraints: { id: /[^\/]+/ }
end
2014-12-23 00:17:04 +08:00
end
2013-12-24 07:50:36 +08:00
get "onebox" => "onebox#show"
2013-02-06 03:16:51 +08:00
2013-12-24 07:50:36 +08:00
get "error" => "forums#error"
2014-06-17 02:25:33 +08:00
get "exception" => "list#latest"
2013-02-06 03:16:51 +08:00
2013-12-24 07:50:36 +08:00
get "message-bus/poll" => "message_bus#poll"
2013-02-06 03:16:51 +08:00
2013-12-24 07:50:36 +08:00
get "draft" => "draft#show"
post "draft" => "draft#update"
delete "draft" => "draft#destroy"
2013-02-06 03:16:51 +08:00
get "cdn_asset/:site/*path" => "static#cdn_asset", format: false
get "favicon/proxied" => "static#favicon", format: false
2013-12-24 07:50:36 +08:00
get "robots.txt" => "robots_txt#index"
get "manifest.json" => "manifest_json#index", as: :manifest
2013-12-24 07:50:36 +08:00
Discourse.filters.each do |filter|
root to: "list##{filter}", constraints: HomePageConstraint.new("#{filter}"), :as => "list_#{filter}"
end
# special case for categories
root to: "categories#index", constraints: HomePageConstraint.new("categories"), :as => "categories_index"
2014-01-04 02:36:49 +08:00
# special case for top
root to: "list#top", constraints: HomePageConstraint.new("top"), :as => "top_lists"
2013-02-06 03:16:51 +08:00
2014-08-29 23:28:16 +08:00
get "*url", to: 'permalinks#show', constraints: PermalinkConstraint.new
2013-02-06 03:16:51 +08:00
end