| | |
| | | " 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 |
| | |
| | | time_t curtime = time(NULL); |
| | | strftime(curdate, 20, "%Y-%m-%d", localtime(&curtime)); |
| | | begin_date.assign(curdate); |
| | | } catch (invalid_argument &e) { |
| | | } catch (const invalid_argument &e) { |
| | | cerr << endl << "End date not recognized: " << dt_end |
| | | << " Please enter a valid date in format YYYYMMDD" << endl; |
| | | exit(2); |
| | |
| | | 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")) { |
| | |
| | | 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 = |
| | |
| | | << " 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")), // |
| | | std::locale(std::locale::classic(), new bt::time_input_facet("%Y/%m/%d")), // |
| | | std::locale(std::locale::classic(), new bt::time_input_facet("%Y%m%d")) }; |
| | | const size_t formats_n = sizeof(formats) / sizeof(formats[0]); |
| | | const std::string formats[] = { "%4u-%2u-%2u","%4u/%2u/%2u","%4u%2u%2u" }; |
| | | const size_t formats_n = 3; |
| | | |
| | | string LicenseGenerator::normalize_date(const std::string& s) { |
| | | bt::ptime pt; |
| | | for (size_t i = 0; i < formats_n; ++i) { |
| | | std::istringstream is(s); |
| | | is.imbue(formats[i]); |
| | | is >> pt; |
| | | if (pt != bt::ptime()) { |
| | | break; |
| | | string LicenseGenerator::normalize_date(const char * s) { |
| | | unsigned int year, month, day; |
| | | int chread; |
| | | bool found = false; |
| | | for (size_t i = 0; i < formats_n &&!found; ++i) { |
| | | chread = sscanf(s, formats[i].c_str(),&year, &month, &day); |
| | | if (chread == 3){ |
| | | found = true; |
| | | } |
| | | } |
| | | if (pt == bt::ptime()) { |
| | | throw invalid_argument(string("Date not regognized") + s); |
| | | if (!found){ |
| | | throw invalid_argument("Date not recognized."); |
| | | } |
| | | ostringstream oss; |
| | | bt::time_facet *facet = new bt::time_facet("%Y-%m-%d"); |
| | | oss.imbue(locale(cout.getloc(), facet)); |
| | | oss << pt; |
| | | oss << year << "-"<<setfill('0') << std::setw(2)<< month<<"-"<<day; |
| | | //delete (facet); |
| | | return oss.str(); |
| | | } |