import React, { useState, useEffect } from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; import { useUserAuthentication } from '@ohif/ui'; import { Icons } from '@ohif/ui-next'; const Login = () => { const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const [isLoading, setIsLoading] = useState(false); const navigate = useNavigate(); const location = useLocation(); const [, authContext] = useUserAuthentication(); // Get the intended destination from URL query params or default to home const searchParams = new URLSearchParams(location.search); const redirectPath = searchParams.get('redirect') || '/'; // Check if already authenticated useEffect(() => { const token = window.sessionStorage.getItem('ohif-auth-token'); if (token) { // Already logged in, redirect to destination navigate(redirectPath, { replace: true }); } }, [redirectPath, navigate]); const handleLogin = async e => { e.preventDefault(); setError(''); setIsLoading(true); try { // Use window.config.goProxyHost for authentication endpoint const proxyHost = window.config?.goProxyHost || `https://${window.location.hostname}:5555`; const authEndpoint = `${proxyHost}/auth/login`; // Call go-ohif-proxy login endpoint const response = await fetch(authEndpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ email, password }), }); if (!response.ok) { throw new Error('Login failed. Please check your credentials.'); } const data = await response.json(); // Store token in sessionStorage window.sessionStorage.setItem('ohif-auth-token', data.access_token); // Decode token to extract role and user information let userInfo = data.user; // Update the auth context authContext.setUser({ ...userInfo, token: data.access_token, }); // Set window.config.sasGetToken for the injectAuth function if (window.config) { window.config.sasGetToken = () => window.sessionStorage.getItem('ohif-auth-token'); } // Handle role-specific redirects if specified in response if (data.redirect_url) { navigate(data.redirect_url, { replace: true }); } else { // Redirect to the original destination navigate(redirectPath, { replace: true }); } } catch (error) { console.error('Login error:', error); setError(error.message || 'Failed to log in. Please try again.'); } finally { setIsLoading(false); } }; return (