Separate login redirect utility from MenuFilter

Used for the followup change which uses the same login redirect
utility.

Change-Id: Ib5e6d3ba8827b7fb419b943650ba26372c4fece9
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginRedirectUtil.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginRedirectUtil.java
new file mode 100644
index 0000000..43d4bdd
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/LoginRedirectUtil.java
@@ -0,0 +1,49 @@
+// Copyright (C) 2025 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.googlesource.gerrit.plugins.gitiles;
+
+import com.google.gerrit.extensions.restapi.Url;
+import com.google.gitiles.GitilesUrls;
+import javax.servlet.http.HttpServletRequest;
+
+public final class LoginRedirectUtil {
+  private LoginRedirectUtil() {}
+
+  public static String getLoginRedirectUrl(HttpServletRequest req, GitilesUrls urls) {
+    String baseUrl = urls.getBaseGerritUrl(req);
+    String token = getRequestUrl(req);
+    if (baseUrl == null) {
+      baseUrl = "";
+    }
+    if (!baseUrl.isEmpty() && token.startsWith(baseUrl)) {
+      token = token.substring(baseUrl.length());
+    }
+    String queryString = req.getQueryString();
+    if (queryString != null && !queryString.isEmpty()) {
+      token = token.concat("?" + queryString);
+    }
+    String loginUrl = baseUrl + "login/";
+    return loginUrl + Url.encode(token);
+  }
+
+
+  @SuppressWarnings("JdkObsolete")
+  private static String getRequestUrl(HttpServletRequest req) {
+    if (req.getRequestURL() == null) {
+      return "";
+    }
+    return req.getRequestURL().toString();
+  }
+}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java b/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java
index 263fd70..ed43f03 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/gitiles/MenuFilter.java
@@ -15,7 +15,6 @@
 package com.googlesource.gerrit.plugins.gitiles;
 
 import com.google.common.collect.Lists;
-import com.google.gerrit.extensions.restapi.Url;
 import com.google.gerrit.server.CurrentUser;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gitiles.BaseServlet;
@@ -53,7 +52,8 @@
       entries.add(BaseServlet.menuEntry(((IdentifiedUser) user).getName(), null));
       entries.add(BaseServlet.menuEntry("Sign Out", urls.getBaseGerritUrl(req) + "logout"));
     } else {
-      entries.add(BaseServlet.menuEntry("Sign In", getLoginRedirectUrl(req)));
+      entries.add(
+          BaseServlet.menuEntry("Sign In", LoginRedirectUtil.getLoginRedirectUrl(req, urls)));
     }
     BaseServlet.putSoyData(req, "menuEntries", entries);
     chain.doFilter(request, response);
@@ -64,24 +64,4 @@
 
   @Override
   public void destroy() {}
-
-  private String getLoginRedirectUrl(HttpServletRequest req) {
-    String baseUrl = urls.getBaseGerritUrl(req);
-    String loginUrl = baseUrl + "login/";
-    String token = getRequestUrl(req);
-    if (!baseUrl.isEmpty()) {
-      token = token.substring(baseUrl.length());
-    }
-
-    String queryString = req.getQueryString();
-    if (queryString != null && !queryString.isEmpty()) {
-      token = token.concat("?" + queryString);
-    }
-    return (loginUrl + Url.encode(token));
-  }
-
-  @SuppressWarnings("JdkObsolete")
-  private static String getRequestUrl(HttpServletRequest req) {
-    return req.getRequestURL().toString();
-  }
 }