diff --git a/lib/hostel/detectable.rb b/lib/hostel/detectable.rb index 3565871..3c36eae 100644 --- a/lib/hostel/detectable.rb +++ b/lib/hostel/detectable.rb @@ -11,7 +11,9 @@ module Detectable def current_site @current_site ||= begin - if site = Hostel.find(request.params[:pinned]) + if site = subdomain_override?(request) + site + elsif site = Hostel.find(request.params[:pinned]) cookies[:pinned] = site.key Hostel::Detector.new(site.domain).site elsif request.headers['X-PROXIED-FOR'] @@ -21,5 +23,13 @@ def current_site end end end + + private + def subdomain_override?(request) + ['cio', 'cco'].each do |sk| + return Hostel.find(sk) if request.subdomain.include?(sk) + end + nil + end end end diff --git a/lib/hostel/domain_constraint.rb b/lib/hostel/domain_constraint.rb index 5fdf362..20fb126 100644 --- a/lib/hostel/domain_constraint.rb +++ b/lib/hostel/domain_constraint.rb @@ -5,12 +5,26 @@ def initialize(*site_keys) end def matches?(request) - if request.headers['X-PROXIED-FOR'] - current_site = Hostel::Detector.new(request.headers['X-PROXIED-FOR'], request.cookies['pinned']).site + current_site = if subdomain_override?(request) + subdomain_override(request) + elsif request.headers['X-PROXIED-FOR'] + Hostel::Detector.new(request.headers['X-PROXIED-FOR'], request.cookies['pinned']).site else - current_site = Hostel::Detector.new(request.host_with_port, request.cookies['pinned']).site + Hostel::Detector.new(request.host_with_port, request.cookies['pinned']).site end @site_keys.include?(current_site.key) end + + def subdomain_override?(request) + ['cio', 'cco'].each do |sk| + return Hostel.find(sk) if request.subdomain.include?(sk) + end + nil + end + + # method delegation to express that this can also be used to retrive the value + def subdomain_override(request) + subdomain_override?(request) + end end end