* @brief Get the current license activation state and customer info. */
| 258 | * @brief Get the current license activation state and customer info. |
| 259 | */ |
| 260 | API::CommandResponse API::Handlers::LicensingHandler::getStatus(const QString& id, |
| 261 | const QJsonObject&) |
| 262 | { |
| 263 | const auto& ls = Licensing::LemonSqueezy::instance(); |
| 264 | const auto& ol = Licensing::OfflineLicense::instance(); |
| 265 | const auto& tk = Licensing::CommercialToken::current(); |
| 266 | |
| 267 | QString tierName; |
| 268 | switch (tk.featureTier()) { |
| 269 | case Licensing::FeatureTier::Hobbyist: |
| 270 | tierName = QStringLiteral("Hobbyist"); |
| 271 | break; |
| 272 | case Licensing::FeatureTier::Trial: |
| 273 | tierName = QStringLiteral("Trial"); |
| 274 | break; |
| 275 | case Licensing::FeatureTier::Pro: |
| 276 | tierName = QStringLiteral("Pro"); |
| 277 | break; |
| 278 | case Licensing::FeatureTier::Enterprise: |
| 279 | tierName = QStringLiteral("Enterprise"); |
| 280 | break; |
| 281 | default: |
| 282 | tierName = QStringLiteral("None"); |
| 283 | break; |
| 284 | } |
| 285 | |
| 286 | QJsonObject result; |
| 287 | result[QStringLiteral("busy")] = ls.busy(); |
| 288 | result[QStringLiteral("isActivated")] = ls.isActivated(); |
| 289 | result[QStringLiteral("canActivate")] = ls.canActivate(); |
| 290 | result[QStringLiteral("appName")] = ls.appName(); |
| 291 | result[QStringLiteral("license")] = ls.license(); |
| 292 | result[QStringLiteral("instanceId")] = ls.instanceId(); |
| 293 | result[QStringLiteral("variantName")] = ls.variantName(); |
| 294 | result[QStringLiteral("instanceName")] = ls.instanceName(); |
| 295 | result[QStringLiteral("customerName")] = ls.customerName(); |
| 296 | result[QStringLiteral("customerEmail")] = ls.customerEmail(); |
| 297 | result[QStringLiteral("seatLimit")] = ls.seatLimit(); |
| 298 | result[QStringLiteral("seatUsage")] = ls.seatUsage(); |
| 299 | result[QStringLiteral("featureTier")] = tierName; |
| 300 | result[QStringLiteral("featureTierValue")] = static_cast<int>(tk.featureTier()); |
| 301 | |
| 302 | result[QStringLiteral("machineId")] = ol.machineId(); |
| 303 | result[QStringLiteral("offlineActivated")] = ol.isActivated(); |
| 304 | result[QStringLiteral("offlineDaysRemaining")] = ol.daysRemaining(); |
| 305 | result[QStringLiteral("offlineExpiresAt")] = |
| 306 | ol.isActivated() ? ol.expiresAt().toString(Qt::ISODate) : QString(); |
| 307 | |
| 308 | return CommandResponse::makeSuccess(id, result); |
| 309 | } |
| 310 | |
| 311 | /** |
| 312 | * @brief Runs every generated license guard and reports individual pass/fail. |
nothing calls this directly
no test coverage detected