Newer
Older
smart-home-server / webclient / src / api / navigation.js
import { buildServerUrl, isNativeApp } from "./server-config";

/**
 * Redirect the user to the OAuth login endpoint.
 *
 * Web: full page redirect to /auth/login; server redirects back after OAuth.
 * Native: Capacitor BridgeWebViewClient intercepts navigation to external host
 * and opens it via Intent.ACTION_VIEW (full Chrome), not Custom Tabs.
 *
 * @param {string} returnTo — path/URL to return to after OAuth
 */
export function redirectToOAuth(returnTo) {
  const url = buildServerUrl(
    `/auth/login?return_to=${encodeURIComponent(returnTo)}`
  );
  window.location.href = url;
}

/**
 * Redirect to the app login page.
 * Used when a 401 is received and we need to force re-authentication.
 */
export function redirectToLoginPage() {
  window.location.href = "/#/login";
}

/**
 * Determine the appropriate OAuth return_to value based on platform.
 * - Web: current page URL (so server redirects back exactly where we were)
 * - Native: /auth/mobile-bridge (server page that fires intent:// back to app)
 * @returns {string}
 */
export function getOAuthReturnTo() {
  if (isNativeApp()) {
    return "/auth/mobile-bridge";
  }
  return window.location.href;
}