When web UI URL used while logged out, redirect to static page (#4954)
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user