Skip to content

Commit bac7a73

Browse files
committed
chore: extract whitelabel detection into middleware
1 parent a90cd06 commit bac7a73

7 files changed

+59
-24
lines changed

app/controllers/admin/application_controller.rb

-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
# you're free to overwrite the RESTful controller actions.
77
module Admin
88
class ApplicationController < Administrate::ApplicationController
9-
include WhitelabelDetection
109
include UserHandling
1110
include LocaleDetection
1211
include TimeZoneDetection
@@ -26,7 +25,6 @@ class ApplicationController < Administrate::ApplicationController
2625
private
2726

2827
def setup
29-
switch_label
3028
switch_locale
3129
switch_time_zone
3230
end

app/controllers/application_controller.rb

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# frozen_string_literal: true
22

33
class ApplicationController < ActionController::Base
4-
include WhitelabelDetection
54
include LocaleDetection
65
include TimeZoneDetection
76
include UserHandling
@@ -23,7 +22,6 @@ class ApplicationController < ActionController::Base
2322
protected
2423

2524
def setup
26-
switch_label
2725
switch_locale
2826
switch_time_zone
2927
end

app/controllers/concerns/whitelabel_detection.rb

-18
This file was deleted.

app/controllers/super_admin/application_controller.rb

-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
# you're free to overwrite the RESTful controller actions.
77
module SuperAdmin
88
class ApplicationController < Administrate::ApplicationController
9-
include WhitelabelDetection
109
include UserHandling
1110
include LocaleDetection
1211
include TimeZoneDetection
@@ -26,7 +25,6 @@ class ApplicationController < Administrate::ApplicationController
2625
private
2726

2827
def setup
29-
switch_label
3028
switch_locale
3129
switch_time_zone
3230
end
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# frozen_string_literal: true
2+
3+
class WhitelabelDetectionMiddleware
4+
def initialize(app)
5+
@app = app
6+
end
7+
8+
def call(env)
9+
Whitelabel.reset!
10+
request = ActionDispatch::Request.new(env)
11+
Whitelabel.label = detect_label(request)
12+
@app.call(env)
13+
end
14+
15+
private
16+
17+
def detect_label(request)
18+
Whitelabel.label_for(request.subdomains.first).tap { |label| return label unless label.nil? }
19+
20+
Whitelabel.labels.find do |label|
21+
label.domains&.any? do |custom_domain|
22+
return label if request.host =~ /#{custom_domain}/
23+
end
24+
end
25+
26+
Whitelabel.labels.first
27+
end
28+
end

config/initializers/whitelabel.rb

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
Usergroup.initialize!
22

33
I18n.extend WhitelabelTranslation
4+
5+
Rails.application.config.middleware.insert_before OmniAuth::Builder, WhitelabelDetectionMiddleware
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
require 'spec_helper'
2+
require 'whitelabel_detection_middleware'
3+
4+
describe WhitelabelDetectionMiddleware do
5+
subject(:middleware) { described_class.new(dummy_app) }
6+
7+
let(:dummy_app) { ->(_env) { response } }
8+
let(:host) { 'localhost' }
9+
let(:rack_env) { { 'HTTP_HOST' => host } }
10+
let(:response) { [418, { 'Content-Type' => 'text/plain' }, ['418 No coffee here.']] }
11+
12+
before { middleware.call(rack_env) }
13+
14+
{
15+
'hamburg.onruby.de' => 'hamburg',
16+
'onruby.eu' => 'hamburg',
17+
'dresdenrb.onruby.de' => 'dresdenrb',
18+
'tallinn.ruby.ee' => 'tallinn_rug',
19+
'www.rug-b.de' => 'berlin',
20+
}.each do |host, label|
21+
context "with host '#{host}'" do
22+
let(:host) { host }
23+
24+
it "uses Whitelabel '#{label}'" do
25+
expect(Whitelabel[:label_id]).to eq(label)
26+
end
27+
end
28+
end
29+
end

0 commit comments

Comments
 (0)