From 239851046dae4be5dce0e449cd01d0a6a835b708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renault?= Date: Thu, 5 Jun 2025 12:00:23 +0200 Subject: [PATCH] Send requests to Hubspot --- crates/meilisearch/src/main.rs | 61 +++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/crates/meilisearch/src/main.rs b/crates/meilisearch/src/main.rs index 87e3bf725..e8bff7997 100644 --- a/crates/meilisearch/src/main.rs +++ b/crates/meilisearch/src/main.rs @@ -20,12 +20,17 @@ use meilisearch::{ LogStderrType, Opt, SubscriberForSecondLayer, }; use meilisearch_auth::{generate_master_key, AuthController, MASTER_KEY_MIN_SIZE}; +use meilisearch_types::versioning::{VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH}; +use serde_json::json; use termcolor::{Color, ColorChoice, ColorSpec, StandardStream, WriteColor}; use tokio::io::{AsyncBufReadExt, BufReader}; use tracing::level_filters::LevelFilter; use tracing_subscriber::layer::SubscriberExt as _; use tracing_subscriber::Layer; +const PORTAL_ID: &str = "25945010"; +const FORM_GUID: &str = "991e2a09-77c2-4428-9242-ebf26bfc6c64"; + #[cfg(not(windows))] #[global_allocator] static ALLOC: mimalloc::MiMalloc = mimalloc::MiMalloc; @@ -96,10 +101,20 @@ async fn try_main() -> anyhow::Result<()> { opt.contact_email = match opt.contact_email.as_ref().map(|email| email.as_deref()) { Some(Some("false")) | None => prompt_for_contact_email().await.map(Some)?, + Some(Some("")) | Some(None) => None, Some(Some(email)) => Some(Some(email.to_string())), - Some(None) => None, }; + if let Some(Some(email)) = opt.contact_email.as_ref() { + let email = email.clone(); + let _ = tokio::spawn(async move { + dbg!(&email); + if let Err(err) = register_contact_email(&email).await { + eprintln!("Failed to register email: {}", err); + } + }); + } + anyhow::ensure!( !(cfg!(windows) && opt.experimental_reduce_indexing_memory_usage), "The `experimental-reduce-indexing-memory-usage` flag is not supported on Windows" @@ -172,6 +187,50 @@ async fn prompt_for_contact_email() -> anyhow::Result> { } } +async fn register_contact_email(email: &str) -> anyhow::Result<()> { + let url = format!( + "https://api.hsforms.com/submissions/v3/integration/submit/{PORTAL_ID}/{FORM_GUID}" + ); + + let page_name = format!( + "Meilisearch terminal prompt v{}.{}.{}", + VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH + ); + let response = reqwest::Client::new() + .post(url) + .json(&json!({ + "fields": [{ + "objectTypeId": "0-1", + "name": "email", + "value": email, + }], + "context": { + "pageName": page_name, + }, + "legalConsentOptions": { + "consent": { + "consentToProcess": true, + "text": "I agree to allow Meilisearch to store and process my personal data.", + "communications": [{ + "value": true, + "subscriptionTypeId": 999, + "text": "I agree to receive marketing communications from Meilisearch.", + }], + }, + }, + })) + .send() + .await?; + + let status = response.status(); + if status.is_client_error() || status.is_server_error() { + let response: serde_json::Value = response.json().await?; + eprintln!("Failed to register email: {response:?}"); + } + + Ok(()) +} + async fn run_http( index_scheduler: Arc, auth_controller: Arc,