add a parser to read the UID per user
This commit is contained in:
		
							
								
								
									
										94
									
								
								src/config/IdentifierFileFormat.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								src/config/IdentifierFileFormat.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| /* | ||||
|  * Author: | ||||
|  *   Sven Czarnian <devel@svcz.de> | ||||
|  * Brief: | ||||
|  *   Implements the identifier file format | ||||
|  * Copyright: | ||||
|  *   2021 Sven Czarnian | ||||
|  * License: | ||||
|  *   GNU General Public License v3 (GPLv3) | ||||
|  */ | ||||
|  | ||||
| #include <fstream> | ||||
|  | ||||
| #include <gsl/gsl> | ||||
|  | ||||
| #include <aman/config/IdentifierFileFormat.h> | ||||
| #include <aman/helper/String.h> | ||||
|  | ||||
| using namespace aman; | ||||
|  | ||||
| IdentifierFileFormat::IdentifierFileFormat() : | ||||
|         FileFormat() { } | ||||
|  | ||||
| bool IdentifierFileFormat::parse(const std::string& filename, Communication& config) { | ||||
|     config.valid = true; | ||||
|  | ||||
|     std::ifstream stream(filename); | ||||
|     if (false == stream.is_open()) { | ||||
|         this->m_errorMessage = "Unable to open the configuration file: " + filename; | ||||
|         this->m_errorLine = 0; | ||||
|         config.valid = false; | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     std::string line; | ||||
|     std::uint32_t lineOffset = 0; | ||||
|     while (std::getline(stream, line)) { | ||||
|         std::string value; | ||||
|  | ||||
|         lineOffset += 1; | ||||
|  | ||||
|         /* skip a new line */ | ||||
|         if (0 == line.length()) | ||||
|             continue; | ||||
|  | ||||
|         /* trimm the line and check if a comment line is used */ | ||||
|         std::string trimmed = String::trim(line); | ||||
|         if (0 == trimmed.find_first_of('#', 0)) | ||||
|             continue; | ||||
|  | ||||
|         auto entry = String::splitString(trimmed, "="); | ||||
|         if (2 > entry.size()) { | ||||
|             this->m_errorLine = lineOffset; | ||||
|             this->m_errorMessage = "Invalid configuration entry"; | ||||
|             config.valid = false; | ||||
|             return false; | ||||
|         } | ||||
|         else if (2 < entry.size()) { | ||||
|             for (std::size_t idx = 1; idx < entry.size() - 1; ++idx) | ||||
|                 value += gsl::at(entry, idx) + "="; | ||||
|             value += entry.back(); | ||||
|         } | ||||
|         else { | ||||
|             value = gsl::at(entry, 1); | ||||
|         } | ||||
|  | ||||
|         /* found an invalid line */ | ||||
|         if (0 == value.length()) { | ||||
|             this->m_errorLine = lineOffset; | ||||
|             this->m_errorMessage = "Invalid entry"; | ||||
|             config.valid = false; | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         if ("UID" == gsl::at(entry, 0)) { | ||||
|             config.identifier = gsl::at(entry, 1); | ||||
|         } | ||||
|         else { | ||||
|             this->m_errorLine = lineOffset; | ||||
|             this->m_errorMessage = "Unknown entry: " + gsl::at(entry, 0); | ||||
|             config.valid = false; | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     if (0 == lineOffset) { | ||||
|         this->m_errorLine = 0; | ||||
|         this->m_errorMessage = "No data found in " + filename; | ||||
|         config.valid = false; | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     return true; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user