Vai al contenuto
LICENTIVO / INTEGRATION

Licenze software in Rust: attivazione e controlli delle funzionalità

Aggiungi la crate Rust a un'applicazione Cargo e proteggi un'esportazione reale utilizzando una callback tipizzata. Il core nativo in bundle gestisce autorizzazioni, credenziali memorizzate nella cache, heartbeat e postazioni mobili.

Rust 1.77+Aggiornato

1. Preparare il prodotto e la licenza

Inizia con una licenza con nodo bloccato e una normale funzionalità di esportazione. Aggiungi l'utilizzo misurato solo dopo il funzionamento del flusso di autorizzazione di base.

La quota conta le attivazioni correnti e viene restituita al rilascio. Le licenze ordinarie contano anche offline; quelle flottanti restituiscono la quota anche alla scadenza del lease.

  1. Copia l’ID prodotto da Console > Prodotti. Apri le chiavi pubbliche di firma dello stesso prodotto e inserisci tutte le coppie ID chiave/chiave pubblica nel codice di inizializzazione, sostituendo YOUR_PRODUCT_ID, YOUR_KEY_ID e YOUR_PUBLIC_KEY. L’integrazione rapida può generare il codice. Non serve un file di configurazione; l’SDK usa https://www.licentivo.com per impostazione predefinita.
  2. In Integrazione rapida, crea o seleziona un prodotto. Abilita una funzionalità denominata esportazione nella sua policy e prepara una licenza di prova.

2. Installare SDK

Installa SDK 0.11.6 eseguendo il comando seguente nel tuo progetto o aggiungendo la dipendenza di compilazione. Il gestore di pacchetti scarica SDK; non servono archivi sorgente, estrazione manuale o percorsi locali.

Gli errori di build nativi di solito indicano intestazioni C11 o libcurl mancanti, architetture non corrispondenti o target Windows sbagliato. L'attuale core nativo di Windows richiede GNU/MinGW; MSVC l'accettazione è in sospeso.

Terminal · new Cargo application
cargo new licensed_app
cd licensed_app
cargo add licentivo@=0.11.6
Ubuntu / Debian · native dependencies
sudo apt-get update
sudo apt-get install build-essential libcurl4-openssl-dev libssl-dev pkg-config
Windows x64 · PowerShell · GNU/MinGW
rustup toolchain install stable-x86_64-pc-windows-gnu --profile minimal
$env:LICENTIVO_CURL_ROOT = "C:/path/to/curl-mingw"
$env:PATH = "$env:LICENTIVO_CURL_ROOT/bin;$env:PATH"
cargo +stable-x86_64-pc-windows-gnu build

3. Tutelare un'esportazione reale

Inizializza l’SDK all’avvio o nel gestore di attivazione della tua applicazione. Leggi la chiave cliente dal modulo e passa ID prodotto e chiavi attendibili. Mantieni il client fino alla chiusura. Inserisci run_feature nell’operazione reale e sostituisci l’esportazione con la tua funzione.

Rust 1.77+ · src/main.rs
use licentivo::{Client, Error};
use std::{env, fs};

// BEGIN LICENTIVO PRODUCT
// Copy Product ID and all key ID/public key pairs from Console > Products > Signing public keys.
const PRODUCT_ID: &str = "YOUR_PRODUCT_ID";
const TRUSTED_KEYS_JSON: &str = r#"{"YOUR_KEY_ID":"YOUR_PUBLIC_KEY"}"#;
// END LICENTIVO PRODUCT

fn setting(name: &str, fallback: &str) -> String {
    env::var(name).ok().filter(|value| !value.is_empty()).unwrap_or_else(|| fallback.into())
}

fn export_report(path: &str) -> Result<(), Error> {
    // Replace this write with your existing export operation.
    fs::write(path, "A report generated by the licensed application.\n")?;
    Ok(())
}

fn run() -> Result<(), Error> {
    // A GUI supplies the activation input. Later starts use an empty key.
    let mut client = Client::open_product(
        PRODUCT_ID, TRUSTED_KEYS_JSON,
        &setting("LICENTIVO_LICENSE_KEY", ""),
    )?;
    let feature = setting("LICENTIVO_FEATURE", "export");
    let path = setting("LICENTIVO_OUTPUT", "licensed-report.txt");
    if setting("LICENTIVO_METERED", "0") == "1" {
        client.run_metered_feature(&feature, 1, &setting("LICENTIVO_OPERATION_ID", ""), || export_report(&path))?;
    } else {
        client.run_feature(&feature, || export_report(&path))?;
    }
    println!("License OK: {feature} is available\nExport completed: {path}");
    // Real app: keep client alive until shutdown. Drop returns floating seats;
    // do not deactivate a device on a normal application exit.
    Ok(())
}

fn main() {
    if let Err(error) = run() { eprintln!("{error}"); std::process::exit(2); }
}

4. Mantenere il client attivo fino all'arresto

Questo esempio di riga di comando esegue un'operazione e termina. In un'applicazione desktop, apri un client all'avvio, richiama la funzione di callback dall'azione di esportazione e chiudi il client solo alla chiusura dell'applicazione.

Dopo l'attivazione, gli avvii successivi possono lasciare vuoto LICENTIVO_LICENSE_KEY e ripristinare la credenziale privata con lo stesso utente e percorso cache. Conserva le credenziali nella directory application-data dell'utente. La chiusura ferma i heartbeat e restituisce i posti fluttuanti; l'uscita normale non dovrebbe disattivare un dispositivo con nodo bloccato.

L'accesso offline è disponibile solo quando la policy lo consente e la concessione firmata rimane valida. Una funzionalità scaduta o negata deve rimanere bloccata. Le operazioni a consumo richiedono una connessione di rete.

Mantieni il client modificabile nello stato dell'applicazione proprietaria. Si tratta di Invia ma non di sincronizzazione: spostalo su un lavoratore anziché condividere chiamate simultanee. Drop interrompe il lavoro in background e restituisce i posti fluttuanti. Close consuma il client; l'uscita normale preserva l'associazione del dispositivo.

5. Esegui e verifica il risultato

Copia l’ID prodotto da Console > Prodotti. Apri le chiavi pubbliche di firma dello stesso prodotto e inserisci tutte le coppie ID chiave/chiave pubblica nel codice di inizializzazione, sostituendo YOUR_PRODUCT_ID, YOUR_KEY_ID e YOUR_PUBLIC_KEY. L’integrazione rapida può generare il codice. Non serve un file di configurazione; l’SDK usa https://www.licentivo.com per impostazione predefinita.

  1. Confermare che una licenza valida con accesso all'esportazione crei licensed-report.txt.
  2. Cancella LICENTIVO_LICENSE_KEY ed esegui nuovamente utilizzando lo stesso account utente: le credenziali salvate dovrebbero essere ripristinate.
  3. Imposta LICENTIVO_FEATURE su una funzionalità assente nella licenza e LICENTIVO_OUTPUT su un nuovo nome file. Il programma deve segnalare un rifiuto senza creare quel file.
  4. Testare un riavvio offline solo con una concessione firmata consentita e non scaduta. Non ignorare un controllo delle funzionalità non riuscito dopo un errore di aggiornamento in background.
Windows · PowerShell
$env:LICENTIVO_LICENSE_KEY = 'YOUR_LICENSE_KEY'
cargo +stable-x86_64-pc-windows-gnu run
Linux · Bash
LICENTIVO_LICENSE_KEY=YOUR_LICENSE_KEY cargo run

Problemi comuni di integrazione

Controlla ID prodotto, tutte le coppie ID chiave/chiave pubblica e la licenza del cliente. Le chiavi pubbliche appartengono al prodotto; licenze e credenziali dei dispositivi sono separate. Non distribuire chiavi di test o API Key di gestione.

Funzionalità negata, limite dispositivo raggiunto o licenza scaduta: controlla la licenza e la policy nella console, quindi mostra l'errore SDK al cliente. Un'autorizzazione fallita non deve richiamare la funzione di esportazione.

run_feature controlla l'accesso alle funzionalità; la variante a consumo prenota e liquida l'utilizzo configurato. Utilizza un ID operazione stabile per un lavoro aziendale reale e controllane il risultato duraturo prima di ripristinare un lavoro interrotto.

Gli errori di build nativi di solito indicano intestazioni C11 o libcurl mancanti, architetture non corrispondenti o target Windows sbagliato. L'attuale core nativo di Windows richiede GNU/MinGW; MSVC l'accettazione è in sospeso.