$raceId, 'slug' => $raceSlug !== '' ? $raceSlug : $raceId, 'name' => $raceName !== '' ? $raceName : $raceId ); if ($raceYear !== '' || $raceMonthFolder !== '' || $raceFolder !== '' || $raceStorageRelativeDir !== '') { $racePayload['storage'] = array( 'year' => $raceYear, 'monthFolder' => $raceMonthFolder, 'raceFolder' => strtoupper(trim($raceFolder)), 'relativeDir' => $raceStorageRelativeDir ); } $payload = array( 'type' => 'handoff', 'user' => array( 'id' => $identity['id'], 'displayName' => $identity['displayName'], 'email' => $identity['email'], 'membershipStatus' => $identity['membershipStatus'] ), 'race' => $racePayload, 'lang' => $lang, 'returnUrl' => $returnUrl, 'expiresAt' => ((int) round(microtime(true) * 1000)) + (5 * 60 * 1000) ); $token = faceai_sign_payload($payload, $config['shared_secret']); $targetUrl = faceai_build_url($config['frontend_url'] . '/auth/callback', array('token' => $token)); header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); header('Pragma: no-cache'); header('Location: ' . $targetUrl, true, 302); exit; } catch (Throwable $error) { faceai_redirect_with_error(isset($returnUrl) ? $returnUrl : '', 'Il servizio Face ID non e al momento disponibile. Riprova piu tardi.'); }