diff --git a/app/controllers/signup_controller.rb b/app/controllers/signup_controller.rb index a115403f98..e42c554686 100644 --- a/app/controllers/signup_controller.rb +++ b/app/controllers/signup_controller.rb @@ -155,8 +155,18 @@ class SignupController < ApplicationController end def load_organization - subdomain = CartoDB.subdomainless_urls? ? request.host.to_s.gsub(".#{CartoDB.session_domain}", '') : CartoDB.subdomain_from_request(request) - @organization = ::Organization.where(name: subdomain).first if subdomain + if CartoDB.subdomainless_urls? + subdomain = request.host.to_s.gsub(".#{CartoDB.session_domain}", '') + if subdomain == CartoDB.session_domain + subdomain = params[:user_domain] + end + else + subdomain = CartoDB.subdomain_from_request(request) + end + + if subdomain && subdomain != CartoDB.session_domain + @organization = ::Organization.where(name: subdomain).first + end end def check_organization_quotas diff --git a/config/routes.rb b/config/routes.rb index b720a5578a..5b7b9f7c1f 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -14,7 +14,9 @@ CartoDB::Application.routes.draw do root to: 'admin/pages#index' get '/signup' => 'signup#signup', as: :signup - post '/signup' => 'signup#create', as: :signup_organization_user + post '/signup' => 'signup#create', as: :signup_organization_user + get '(/user/:user_domain)(/u/:user_domain)/signup' => 'signup#signup', as: :signup_subdomainless + post '(/user/:user_domain)(/u/:user_domain)/signup' => 'signup#create', as: :signup_subdomainless_organization_user get '(/user/:user_domain)(/u/:user_domain)/signup_http_authentication' => 'signup#create_http_authentication', as: :signup_http_authentication get '(/user/:user_domain)(/u/:user_domain)/signup_http_authentication_in_progress' => 'signup#create_http_authentication_in_progress', as: :signup_http_authentication_in_progress diff --git a/spec/requests/signup_controller_spec.rb b/spec/requests/signup_controller_spec.rb index b95779fecf..e599b9ed3a 100644 --- a/spec/requests/signup_controller_spec.rb +++ b/spec/requests/signup_controller_spec.rb @@ -15,6 +15,26 @@ describe SignupController do @fake_organization.delete if @fake_organization end + it 'returns 200 when subdomainless and route is signup_subdomainless' do + @fake_organization = FactoryGirl.create(:organization_whitelist_carto) + CartoDB.stubs(:subdomainless_urls?).returns(true) + CartoDB.stubs(:session_domain).returns('localhost.lan') + Organization.stubs(:where).returns([@fake_organization]) + host! "localhost.lan" + get signup_subdomainless_url(user_domain: 'organization') + response.status.should == 200 + end + + it 'returns 404 when subdomainless and route is signup' do + @fake_organization = FactoryGirl.create(:organization_whitelist_carto) + CartoDB.stubs(:subdomainless_urls?).returns(true) + CartoDB.stubs(:session_domain).returns('localhost.lan') + Organization.stubs(:where).returns([@fake_organization]) + host! "localhost.lan" + get signup_url + response.status.should == 404 + end + it 'returns 404 outside organization subdomains' do get signup_url response.status.should == 404