From 8bbef2865455754425a84b86680a89bff8aa7691 Mon Sep 17 00:00:00 2001
From: gcontini <1121667+gcontini@users.noreply.github.com>
Date: 周六, 19 10月 2019 08:50:45 +0800
Subject: [PATCH] issue #64 , issue #56 (part)

---
 src/library/locate/EnvironmentVarData.cpp |   44 +++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/src/library/locate/EnvironmentVarData.cpp b/src/library/locate/EnvironmentVarData.cpp
index 844470e..616b948 100644
--- a/src/library/locate/EnvironmentVarData.cpp
+++ b/src/library/locate/EnvironmentVarData.cpp
@@ -6,6 +6,18 @@
  */
 
 #include "EnvironmentVarData.hpp"
+
+#include <build_properties.h>
+#include <cstdlib>
+#include <regex>
+#include <string>
+#include <vector>
+
+#include "../api/datatypes.h"
+#include "../base/base64.h"
+#include "../base/EventRegistry.h"
+#include "../base/StringUtils.h"
+
 namespace license {
 namespace locate {
 
@@ -18,15 +30,37 @@
 EnvironmentVarData::~EnvironmentVarData() {
 }
 
-const vector<string> EnvironmentVarData::licenseLocations(
-		EventRegistry &eventRegistry) const {
+const vector<string> EnvironmentVarData::license_locations(
+		EventRegistry &eventRegistry) {
 	vector<string> diskFiles;
-
+	char *env_var_value = getenv(LICENSE_DATA_ENV_VAR);
+	if (env_var_value != nullptr && env_var_value[0] != '\0') {
+		eventRegistry.addEvent(LICENSE_SPECIFIED, LICENSE_LOCATION_ENV_VAR);
+		FILE_FORMAT licenseFormat = identify_format(env_var_value);
+		if (licenseFormat == UNKNOWN) {
+			eventRegistry.addEvent(LICENSE_MALFORMED, LICENSE_LOCATION_ENV_VAR);
+		} else {
+			diskFiles.push_back(LICENSE_LOCATION_ENV_VAR);
+			isBase64 = (licenseFormat == BASE64);
+		}
+	} else {
+		eventRegistry.addEvent(ENVIRONMENT_VARIABLE_NOT_DEFINED,
+		LICENSE_LOCATION_ENV_VAR);
+	}
 	return diskFiles;
 }
 
-const std::string EnvironmentVarData::retrieveLicense(const std::string &licenseLocation) const{
-	return "";
+const std::string EnvironmentVarData::retrieve_license_content(
+		const std::string &licenseLocation) const {
+	string tmpVal = getenv(LICENSE_LOCATION_ENV_VAR);
+	if (isBase64) {
+		int flen = 0;
+		unsigned char *raw = unbase64(tmpVal.c_str(), tmpVal.length(), &flen);
+		string str = string(reinterpret_cast<char*>(raw));
+		free(raw);
+		return str;
+	}
+	return tmpVal;
 }
 
 }

--
Gitblit v1.9.1