about summary refs log tree commit diff
path: root/app
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-09-15 00:57:08 +0200
committerGitHub <noreply@github.com>2017-09-15 00:57:08 +0200
commit472df245799949631646f90d894486e4dbeaaaf9 (patch)
tree84065454306a2b2b6f5c5cc6aaa51fa31cb2b005 /app
parent0d1215e82f42cd5a7b7bb992e4423d69acb813ed (diff)
When web UI URL used while logged out, redirect to static page (#4954)
Diffstat (limited to 'app')
-rw-r--r--app/controllers/home_controller.rb35
1 files changed, 34 insertions, 1 deletions
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index 1585bc810..21dde20ce 100644
--- 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