diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 95bb979b..c8943667 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -131,10 +131,21 @@ class ApplicationController < ActionController::Base
end
def set_user_domain
- @user_domain = if Rails.env.test? || !Rails.configuration.loadbalanced_configuration
- "greenlight"
+ if Rails.env.test? || !Rails.configuration.loadbalanced_configuration
+ @user_domain = "greenlight"
else
- parse_user_domain(request.host)
+ @user_domain = parse_user_domain(request.host)
+
+ # Checks to see if the user exists
+ begin
+ retrieve_provider_info(@user_domain, 'api2', 'getUserGreenlightCredentials')
+ rescue => e
+ if e.message.eql? "No user with that id exists"
+ render "errors/not_found", locals: { user_not_found: true }
+ else
+ render "errors/internal_error"
+ end
+ end
end
end
helper_method :set_user_domain
diff --git a/app/views/errors/not_found.html.erb b/app/views/errors/not_found.html.erb
index 647e34c8..95bdcbbb 100644
--- a/app/views/errors/not_found.html.erb
+++ b/app/views/errors/not_found.html.erb
@@ -15,9 +15,14 @@
404
-
<%= t("errors.not_found.message") %>
-
<%= t("errors.not_found.help") %>
-
- <%= t("go_back") %>
-
+ <% if defined?(user_not_found) %>
+
<%= t("errors.not_found.user_message") %>
+
<%= t("errors.not_found.user_help") %>
+ <% else %>
+
<%= t("errors.not_found.message") %>
+
<%= t("errors.not_found.help") %>
+
+ <%= t("go_back") %>
+
+ <% end %>
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 1e444d3c..375f164c 100755
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -140,6 +140,8 @@ en:
not_found:
message: Whoops! Looks like we can't find that.
help: Is it possible its been removed?
+ user_message: User Not Found.
+ user_help: Sorry, this user is not registered.
title: Errors
unauthorized:
message: You do not have access to this application
diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb
index 0d5e9550..14bf1f65 100644
--- a/spec/controllers/application_controller_spec.rb
+++ b/spec/controllers/application_controller_spec.rb
@@ -31,6 +31,10 @@ describe ApplicationController do
def error
raise BigBlueButton::BigBlueButtonException
end
+
+ def user_not_found
+ set_user_domain
+ end
end
context "roles" do
@@ -66,5 +70,29 @@ describe ApplicationController do
get :error
expect(response).to render_template("errors/bigbluebutton_error")
end
+
+ it "renders a 404 error if user is not found" do
+ allow(Rails.configuration).to receive(:loadbalanced_configuration).and_return(true)
+ allow(Rails.env).to receive(:test?).and_return(false)
+ allow_any_instance_of(SessionsHelper).to receive(:parse_user_domain).and_return("")
+ allow_any_instance_of(BbbApi).to receive(:retrieve_provider_info).and_raise("No user with that id exists")
+
+ routes.draw { get "user_not_found" => "anonymous#user_not_found" }
+
+ get :user_not_found
+ expect(response).to render_template("errors/not_found")
+ end
+
+ it "renders a 500 error if any other error is not found" do
+ allow(Rails.configuration).to receive(:loadbalanced_configuration).and_return(true)
+ allow(Rails.env).to receive(:test?).and_return(false)
+ allow_any_instance_of(SessionsHelper).to receive(:parse_user_domain).and_return("")
+ allow_any_instance_of(BbbApi).to receive(:retrieve_provider_info).and_raise("Other error")
+
+ routes.draw { get "user_not_found" => "anonymous#user_not_found" }
+
+ get :user_not_found
+ expect(response).to render_template("errors/internal_error")
+ end
end
end