From 897303206e87db7616b8c5f11b894c94b1047e7c Mon Sep 17 00:00:00 2001 From: open-license-manager <rillf@maildrop.cc> Date: 周一, 08 9月 2014 05:59:02 +0800 Subject: [PATCH] Merge branch 'master' of https://github.com/open-license-manager/open-license-manager.git --- src/license-generator/license-generator.cpp | 52 ++++++++++++++++++++++++++++++---------------------- 1 files changed, 30 insertions(+), 22 deletions(-) diff --git a/src/license-generator/license-generator.cpp b/src/license-generator/license-generator.cpp index a967e6f..466d5d7 100644 --- a/src/license-generator/license-generator.cpp +++ b/src/license-generator/license-generator.cpp @@ -1,6 +1,7 @@ #include <build_properties.h> #include "LicenseSigner.h" #include "license-generator.h" +#include "../library/base/StringUtils.h" #include <stdlib.h> #include <stdio.h> #include <iostream> @@ -49,12 +50,12 @@ ("begin_date,b", po::value<string>(), "Specify the start of the validity for this license. " " Format YYYYMMDD. If not specified defaults to today") // - ("end_date,e", po::value<string>(), + ("expire_date,e", po::value<string>(), "Specify the expire date for this license. " " Format YYYYMMDD. If not specified the license won't expire") // ("client_signature,s", po::value<string>(), "The signature of the pc that requires the license. " - "It should be in the format XXX-XXXX-XXXX." + "It should be in the format XXXX-XXXX-XXXX-XXXX." " If not specified the license " "won't be linked to a specific pc.") // ("start_version,t", po::value<unsigned int>()->default_value(0 @@ -70,13 +71,16 @@ vector<FullLicenseInfo> LicenseGenerator::parseLicenseInfo( po::variables_map vm) { - time_t begin_date = FullLicenseInfo::UNUSED_TIME; - time_t end_date = FullLicenseInfo::UNUSED_TIME; - if (vm.count("end_date")) { - const std::string dt_end = vm["end_date"].as<string>(); + string begin_date = FullLicenseInfo::UNUSED_TIME; + string end_date = FullLicenseInfo::UNUSED_TIME; + if (vm.count("expire_date")) { + const std::string dt_end = vm["expire_date"].as<string>(); try { - end_date = seconds_from_epoch(dt_end); - begin_date = time(NULL); + end_date = normalize_date(dt_end.c_str()); + char curdate[20]; + time_t curtime = time(NULL); + strftime(curdate, 20, "%Y-%m-%d", localtime(&curtime)); + begin_date.assign(curdate); } catch (invalid_argument &e) { cerr << endl << "End date not recognized: " << dt_end << " Please enter a valid date in format YYYYMMDD" << endl; @@ -86,7 +90,7 @@ if (vm.count("begin_date")) { const std::string begin_date_str = vm["begin_date"].as<string>(); try { - begin_date = seconds_from_epoch(begin_date_str); + begin_date = normalize_date(begin_date_str.c_str()); } catch (invalid_argument &e) { cerr << endl << "Begin date not recognized: " << begin_date_str << " Please enter a valid date in format YYYYMMDD" << endl; @@ -97,22 +101,23 @@ string client_signature = ""; if (vm.count("client_signature")) { client_signature = vm["client_signature"].as<string>(); - regex e("\\d{3}-[:alnum:]{4}-[:alnum:]{4}"); + //fixme match + and / + /*regex e("(A-Za-z0-9){4}-(A-Za-z0-9){4}-(A-Za-z0-9){4}-(A-Za-z0-9){4}"); if (!regex_match(client_signature, e)) { cerr << endl << "Client signature not recognized: " << client_signature - << " Please enter a valid signature in format XXX-XXXX-XXX" + << " Please enter a valid signature in format XXXX-XXXX-XXXX-XXXX" << endl; exit(2); - } + }*/ } string extra_data = ""; if (vm.count("extra_data")) { extra_data = vm["extra_data"].as<string>(); } - unsigned int from_sw_version = end_date = vm["start_version"].as< + unsigned int from_sw_version = vm["start_version"].as< unsigned int>(); - unsigned int to_sw_version = end_date = + unsigned int to_sw_version = vm["end_version"].as<unsigned int>(); if (vm.count("product") == 0) { cerr << endl << "Parameter [product] not found. " << endl; @@ -132,7 +137,7 @@ return licInfo; } -void LicenseGenerator::generateAndOutptuLicenses(const po::variables_map& vm, +void LicenseGenerator::generateAndOutputLicenses(const po::variables_map& vm, ostream& outputFile) { vector<FullLicenseInfo> licenseInfo = parseLicenseInfo(vm); license::LicenseSigner licSigner = @@ -175,13 +180,14 @@ << " error: " << strerror( errno); exit(3); } - generateAndOutptuLicenses(vm, ofstream); + generateAndOutputLicenses(vm, ofstream); ofstream.close(); } else { - generateAndOutptuLicenses(vm, cout); + generateAndOutputLicenses(vm, cout); } return 0; } + const std::locale formats[] = { std::locale(std::locale::classic(), new bt::time_input_facet("%Y-%m-%d")), // @@ -189,7 +195,7 @@ std::locale(std::locale::classic(), new bt::time_input_facet("%Y%m%d")) }; const size_t formats_n = sizeof(formats) / sizeof(formats[0]); -time_t LicenseGenerator::seconds_from_epoch(const std::string& s) { +string LicenseGenerator::normalize_date(const std::string& s) { bt::ptime pt; for (size_t i = 0; i < formats_n; ++i) { std::istringstream is(s); @@ -202,9 +208,11 @@ if (pt == bt::ptime()) { throw invalid_argument(string("Date not regognized") + s); } - bt::ptime timet_start(boost::gregorian::date(1970, 1, 1)); - bt::time_duration diff = pt - timet_start; - return diff.ticks() / bt::time_duration::rep_type::ticks_per_second; + ostringstream oss; + bt::time_facet *facet = new bt::time_facet("%Y-%m-%d"); + oss.imbue(locale(cout.getloc(), facet)); + oss << pt; + //delete (facet); + return oss.str(); } - } -- Gitblit v1.9.1