gcontini
2019-10-19 8bbef2865455754425a84b86680a89bff8aa7691
src/library/locate/ExternalDefinition.cpp
@@ -5,36 +5,72 @@
 *      Author: Gabriele Contini
 */
#include "../base/StringUtils.h"
#include <stdlib.h>
#include <cstring>
#include <string>
#include <vector>
#include "../api/datatypes.h"
#include "../base/base64.h"
#include "../base/EventRegistry.h"
#include "../base/FileUtils.hpp"
#include "../base/StringUtils.h"
#include "ExternalDefinition.hpp"
namespace license {
namespace locate {
using namespace std;
ExternalDefinition::ExternalDefinition(const char *location) :
ExternalDefinition::ExternalDefinition(const LicenseLocation *location) :
      LocatorStrategy("ExternalDefinition"), m_location(location) {
}
ExternalDefinition::~ExternalDefinition() {
}
const std::vector<std::string> ExternalDefinition::licenseLocations(
      EventRegistry &eventRegistry) const {
   const vector<string> declared_positions = license::split_string(m_location,
         ';');
   const vector<string> existing_pos = license::filter_existing_files(
         declared_positions);
   if (existing_pos.size() > 0) {
      for (auto it = existing_pos.begin(); it != existing_pos.end(); ++it) {
         eventRegistry.addEvent(LICENSE_FILE_FOUND, SVRT_INFO, *it);
const std::vector<std::string> ExternalDefinition::license_locations(
      EventRegistry &eventRegistry) {
   vector<string> existing_pos;
   if (m_location->licenseData != nullptr
         && m_location->licenseData[0] != '\0') {
      eventRegistry.addEvent(LICENSE_SPECIFIED, get_strategy_name());
      FILE_FORMAT licenseFormat = identify_format(m_location->licenseData);
      if (licenseFormat == UNKNOWN) {
         eventRegistry.addEvent(LICENSE_MALFORMED, get_strategy_name());
      } else {
         existing_pos.push_back(get_strategy_name());
         licenseDataIsBase64 = (licenseFormat == BASE64);
      }
   } else {
      eventRegistry.addEvent(LICENSE_FILE_NOT_FOUND, SVRT_WARN, m_location);
   }
   if (m_location->licenseFileLocation != nullptr
         && strlen(m_location->licenseFileLocation) > 0) {
      const vector<string> declared_positions = license::split_string(
            m_location->licenseFileLocation, ';');
      existing_pos = license::filter_existing_files(declared_positions,
            eventRegistry, get_strategy_name().c_str());
   }
   return existing_pos;
}
const std::string ExternalDefinition::retrieve_license_content(
      const std::string &licenseLocation) const {
   if (licenseLocation == get_strategy_name()) {
      if (licenseDataIsBase64) {
         int flen = 0;
         unsigned char *raw = unbase64(m_location->licenseData,
               strlen(m_location->licenseData), &flen);
         string str = string(reinterpret_cast<char*>(raw));
         free(raw);
         return str;
      } else {
         return m_location->licenseData;
      }
   } else {
      return LocatorStrategy::retrieve_license_content(licenseLocation);
   }
}
} /* namespace locate */
} /* namespace license */