commit: 472df245799949631646f90d894486e4dbeaaaf9
parent: 0d1215e82f42cd5a7b7bb992e4423d69acb813ed
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Fri, 15 Sep 2017 00:57:08 +0200
When web UI URL used while logged out, redirect to static page (#4954)
Diffstat:
2 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
@@ -11,7 +11,30 @@ class HomeController < ApplicationController
private
def authenticate_user!
- redirect_to(single_user_mode? ? account_path(Account.first) : about_path) unless user_signed_in?
+ return if user_signed_in?
+
+ matches = request.path.match(/\A\/web\/(statuses|accounts)\/([\d]+)\z/)
+
+ if matches
+ case matches[1]
+ when 'statuses'
+ status = Status.find_by(id: matches[2])
+
+ if status && (status.public_visibility? || status.unlisted_visibility?)
+ redirect_to(ActivityPub::TagManager.instance.url_for(status))
+ return
+ end
+ when 'accounts'
+ account = Account.find_by(id: matches[2])
+
+ if account
+ redirect_to(ActivityPub::TagManager.instance.url_for(account))
+ return
+ end
+ end
+ end
+
+ redirect_to(default_redirect_path)
end
def set_initial_state_json
@@ -28,4 +51,14 @@ class HomeController < ApplicationController
admin: Account.find_local(Setting.site_contact_username),
}
end
+
+ def default_redirect_path
+ if request.path.start_with?('/web')
+ new_user_session_path
+ elsif single_user_mode?
+ short_account_path(Account.first)
+ else
+ about_path
+ end
+ end
end
diff --git a/spec/controllers/home_controller_spec.rb b/spec/controllers/home_controller_spec.rb
@@ -6,6 +6,7 @@ RSpec.describe HomeController, type: :controller do
describe 'GET #index' do
context 'when not signed in' do
it 'redirects to about page' do
+ @request.path = '/'
get :index
expect(response).to redirect_to(about_path)
end
@@ -13,6 +14,7 @@ RSpec.describe HomeController, type: :controller do
context 'when signed in' do
let(:user) { Fabricate(:user) }
+
subject do
sign_in(user)
get :index