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 ShortlinkLogin = () => { const [dob, setDob] = useState(''); const [shortToken, setShortToken] = useState(''); const [error, setError] = useState(''); const [isLoading, setIsLoading] = useState(false); const navigate = useNavigate(); const location = useLocation(); const [, authContext] = useUserAuthentication(); // Parse the short token from URL query params useEffect(() => { const searchParams = new URLSearchParams(location.search); const token = searchParams.get('short'); if (token) { setShortToken(token); } else { // No short token found, redirect to regular login setError('No shortlink token found in URL'); setTimeout(() => { navigate('/', { replace: true }); }, 3000); } }, [location.search, navigate]); // Handle form submission const handleSubmit = 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/shortlink`; // Call the shortlink authentication endpoint const response = await fetch(authEndpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ short_token: shortToken, dob }), }); if (!response.ok) { throw new Error('Authentication failed. Please check your date of birth and try again.'); } const data = await response.json(); // Store token in sessionStorage window.sessionStorage.setItem('ohif-auth-token', data.access_token); // Decode token to extract user information (if available in token) 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'); } // Navigate to the viewer page with the authenticated patient's study // The actual URL would depend on how studies are loaded in your OHIF instance if (data.redirect_url) { navigate(data.redirect_url, { replace: true }); } else { // Default navigation if no specific redirect is provided navigate('/', { replace: true }); } } catch (error) { console.error('Authentication error:', error); setError(error.message || 'Failed to authenticate. Please try again.'); } finally { setIsLoading(false); } }; const handleDateChange = e => { // Format date input as YYYY-MM-DD setDob(e.target.value); }; return (