otsdaq  v2_04_02
CodeEditor.h
1 #ifndef _ots_CodeEditor_h_
2 #define _ots_CodeEditor_h_
3 
4 #include "otsdaq/Macros/CoutMacros.h"
5 #include "otsdaq/Macros/StringMacros.h"
6 #include "otsdaq/MessageFacility/MessageFacility.h"
7 #include "otsdaq/SOAPUtilities/SOAPMessenger.h"
8 #include "xgi/Method.h" //for cgicc::Cgicc
9 
10 #include <iostream>
11 #include <string>
12 #include <unordered_map>
13 #include <vector>
14 
15 namespace ots
16 {
17 class HttpXmlDocument;
18 
19 // CodeEditor
20 // This class provides the functionality for editing, saving, and building code
22 {
23  public:
24  CodeEditor();
25 
26  // request are handled here
27  void xmlRequest(const std::string& option,
28  bool readOnlyMode,
29  cgicc::Cgicc& cgiIn,
30  HttpXmlDocument* xmlOut,
31  const std::string& username);
32 
33  private:
34  void getDirectoryContent(cgicc::Cgicc& cgiIn, HttpXmlDocument* xmlOut);
35  void getPathContent(const std::string& basepath,
36  const std::string& path,
37  HttpXmlDocument* xmlOut);
38  void getFileContent(cgicc::Cgicc& cgiIn, HttpXmlDocument* xmlOut);
39  void saveFileContent(cgicc::Cgicc& cgiIn,
40  HttpXmlDocument* xmlOut,
41  const std::string& username);
42  void build(cgicc::Cgicc& cgiIn, HttpXmlDocument* xmlOut, const std::string& username);
43 
44  std::string safePathString(const std::string& path);
45  std::string safeExtensionString(const std::string& extension);
46 
47  public:
48  static const std::string SPECIAL_TYPE_FEInterface, SPECIAL_TYPE_DataProcessor,
49  SPECIAL_TYPE_Table, SPECIAL_TYPE_ControlsInterface, SPECIAL_TYPE_Tools,
50  SPECIAL_TYPE_UserData, SPECIAL_TYPE_OutputData;
51 
52  static const std::string SOURCE_BASE_PATH, USER_DATA_PATH, OTSDAQ_DATA_PATH;
53 
54  static std::map<std::string /*special type*/,
55  std::set<std::string> /*special file paths*/>
56  getSpecialsMap(void);
57 
58  static void readFile(const std::string& basepath,
59  const std::string& path,
60  std::string& contents);
61  static void writeFile(const std::string& basepath,
62  const std::string& path,
63  const std::string& contents,
64  const std::string& username,
65  const unsigned long long& insertPos = -1,
66  const std::string& insertString = "");
67 
68  const std::set<std::string> ALLOWED_FILE_EXTENSIONS_;
69 };
70 
71 } // namespace ots
72 
73 #endif