craft_license 0.1.0
craft_license: ^0.1.0 copied to clipboard
Dart client for CraftLicense activation codes, device-bound buyout licenses, online renewal and offline Ed25519 certificate verification.
example/craft_license_example.dart
import 'dart:convert';
import 'dart:io';
import 'package:craft_license/craft_license.dart';
/// 使用宿主提供的环境配置进行真实激活,不打印激活码、令牌或凭证。
Future<void> main() async {
final Map<String, String> env = Platform.environment;
final String? url = env['LICENSE_BASE_URL'];
final String? appId = env['LICENSE_APP_ID'];
final String? code = env['LICENSE_ACTIVATION_CODE'];
final String? deviceId = env['LICENSE_DEVICE_ID'];
final String? keyFile = env['LICENSE_TRUSTED_KEY_FILE'];
if (<String?>[url, appId, code, deviceId, keyFile].contains(null)) {
stderr.writeln(
'Provide LICENSE_BASE_URL, LICENSE_APP_ID, LICENSE_ACTIVATION_CODE, LICENSE_DEVICE_ID and LICENSE_TRUSTED_KEY_FILE.',
);
exitCode = 2;
return;
}
final LicenseDevice device = LicenseDevice(
deviceId: deviceId!,
platform: env['LICENSE_PLATFORM'] ?? 'windows',
clientVersion: 'example-0.1.0',
);
final CraftLicenseClient client = CraftLicenseClient(
baseUrl: Uri.parse(url!),
appId: appId!,
allowLocalHttp: env['LICENSE_ALLOW_LOCAL_HTTP'] == 'true',
);
try {
final Map<String, Object?> jwk =
jsonDecode(await File(keyFile!).readAsString()) as Map<String, Object?>;
final LicenseCertificateVerifier verifier = LicenseCertificateVerifier(
trustedKeys: <LicenseVerificationKey>[
LicenseVerificationKey.fromJwk(jwk),
],
);
final LicenseGrant grant = await client.activate(
activationCode: code!,
device: device,
);
await verifier.verify(
certificate: grant.certificate,
appId: appId,
device: device,
);
final LicenseStatus current = await client.status(
deviceToken: grant.deviceToken!,
);
final LicenseGrant renewed = await client.renew(
deviceToken: grant.deviceToken!,
);
await verifier.verify(
certificate: renewed.certificate,
appId: appId,
device: device,
);
stdout.writeln(
'PASS activation, online status, renewal and pinned-key offline verification. Devices: ${current.activeDeviceCount}.',
);
} on CraftLicenseException catch (error) {
stderr.writeln(error);
exitCode = 1;
} finally {
client.close();
}
}