FEATURE: CORS settings per-site in a multisite env

This commit is contained in:
Neil Lalonde 2011-10-15 14:00:00 -04:00
parent bb59798066
commit f88075cbba
4 changed files with 19 additions and 9 deletions

View File

@ -93,7 +93,7 @@ asset_redis_url =
# enable Cross-origin Resource Sharing (CORS) directly at the application level # enable Cross-origin Resource Sharing (CORS) directly at the application level
enable_cors = false enable_cors = false
cors_origin = '*' cors_origin = ''
# enable if you really need to serve assets in prd # enable if you really need to serve assets in prd
serve_static_assets = false serve_static_assets = false

View File

@ -1,24 +1,30 @@
if GlobalSetting.enable_cors && GlobalSetting.cors_origin.present? if GlobalSetting.enable_cors
class Discourse::Cors class Discourse::Cors
def initialize(app, options = nil) def initialize(app, options = nil)
@app = app @app = app
@origins = GlobalSetting.cors_origin.split(',').map(&:strip) if GlobalSetting.enable_cors && GlobalSetting.cors_origin.present?
@global_origins = GlobalSetting.cors_origin.split(',').map(&:strip)
end
end end
def call(env) def call(env)
status, headers, body = @app.call(env) status, headers, body = @app.call(env)
origin = nil origin = nil
cors_origins = @global_origins || []
cors_origins += SiteSetting.cors_origins.split('|') if SiteSetting.cors_origins
if origin = env['HTTP_ORIGIN'] if cors_origins
origin = nil unless @origins.include? origin if origin = env['HTTP_ORIGIN']
origin = nil unless cors_origins.include?(origin)
end
headers['Access-Control-Allow-Origin'] = origin || cors_origins[0]
headers['Access-Control-Allow-Credentials'] = "true"
end end
headers['Access-Control-Allow-Origin'] = origin || @origins[0]
headers['Access-Control-Allow-Credentials'] = "true"
[status,headers,body] [status,headers,body]
end end
end end
Rails.configuration.middleware.insert 0, Discourse::Cors Rails.configuration.middleware.use Discourse::Cors
end end

View File

@ -726,6 +726,7 @@ en:
enable_escaped_fragments: "Fall back to Google's Ajax-Crawling API if no webcrawler is detected. See https://support.google.com/webmasters/answer/174992?hl=en" enable_escaped_fragments: "Fall back to Google's Ajax-Crawling API if no webcrawler is detected. See https://support.google.com/webmasters/answer/174992?hl=en"
enable_noscript_support: "Enable standard webcrawler search engine support via the noscript tag" enable_noscript_support: "Enable standard webcrawler search engine support via the noscript tag"
allow_moderators_to_create_categories: "Allow moderators to create new categories" allow_moderators_to_create_categories: "Allow moderators to create new categories"
cors_origins: "Allowed origins for cross-origin requests (CORS). Each origin must include http:// or https://. The DISCOURSE_ENABLE_CORS env variable must be set to true to enable CORS."
top_menu: "Determine which items appear in the homepage navigation, and in what order. Example latest|new|unread|starred|categories|top|read|posted" top_menu: "Determine which items appear in the homepage navigation, and in what order. Example latest|new|unread|starred|categories|top|read|posted"
post_menu: "Determine which items appear on the post menu, and in what order. Example like|edit|flag|delete|share|bookmark|reply" post_menu: "Determine which items appear on the post menu, and in what order. Example like|edit|flag|delete|share|bookmark|reply"
post_menu_hidden_items: "The menu items to hide by default in the post menu unless an expansion ellipsis is clicked on." post_menu_hidden_items: "The menu items to hide by default in the post menu unless an expansion ellipsis is clicked on."

View File

@ -542,6 +542,9 @@ security:
allow_index_in_robots_txt: true allow_index_in_robots_txt: true
enable_noscript_support: true enable_noscript_support: true
allow_moderators_to_create_categories: false allow_moderators_to_create_categories: false
cors_origins:
default: ''
type: list
onebox: onebox:
enable_flash_video_onebox: false enable_flash_video_onebox: false