From 90025fbec30a78e84794585bf93604d56b392267 Mon Sep 17 00:00:00 2001
From: "A. Wilcox" <AWilcox@Wilcox-Tech.com>
Date: Mon, 7 Oct 2019 17:48:21 -0500
Subject: hscript: Implement key validity test

---
 hscript/key.hh    |  2 +-
 hscript/script.cc | 29 ++++++++++++++++++++++-------
 2 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/hscript/key.hh b/hscript/key.hh
index 6a18466..4705c59 100644
--- a/hscript/key.hh
+++ b/hscript/key.hh
@@ -29,7 +29,7 @@ public:
     /*! Create the Key object with the specified data as the entire value.
      * @returns nullptr if data is unparsable, otherwise a pointer to a Key.
      */
-    static Key *parseFromData(std::string) { return nullptr; }
+    static Key *parseFromData(std::string, int*, int*) { return nullptr; }
 
     /*! Determines if the data associated with the Key is valid. */
     virtual bool validate() = 0;
diff --git a/hscript/script.cc b/hscript/script.cc
index 3196d9e..e53154b 100644
--- a/hscript/script.cc
+++ b/hscript/script.cc
@@ -13,6 +13,8 @@
 #include <algorithm>
 #include <fstream>
 #include <iostream>
+#include <set>
+
 #include "script.hh"
 #include "disk.hh"
 #include "meta.hh"
@@ -23,6 +25,26 @@
 
 #define LINE_MAX 512
 
+
+const std::set<std::string> valid_keys = {
+    "network", "hostname", "pkginstall", "rootpw",
+    "language", "keymap", "firmware",
+    "netaddress", "nameserver", "netssid",
+    "timezone", "repository", "signingkey",
+    "username", "useralias", "userpw", "usericon", "usergroups",
+    "diskid", "disklabel", "partition", "lvm_pv", "lvm_vg", "lvm_lv",
+    "encrypt", "fs", "mount"
+};
+
+
+/*! Determines if the specified +key+ has been defined in this version of
+ * HorizonScript.
+ */
+inline bool is_key(const std::string key) {
+    return valid_keys.find(key) != valid_keys.end();
+}
+
+
 namespace Horizon {
 
 struct Script::ScriptPrivate {
@@ -53,13 +75,6 @@ const Script *Script::load(const std::string path, const ScriptOptions opts) {
     return Script::load(file, opts);
 }
 
-/*! Determines if the specified +key+ has been defined in this version of
- * HorizonScript.
- */
-bool is_key(std::string key) {
-    return true;
-}
-
 #define PARSER_ERROR(err_str) \
     errors++;\
     output_error("installfile:" + std::to_string(lineno),\
-- 
cgit v1.2.3-70-g09d2