version 0.3.0
[fms.git] / src / http / identityexportxml.cpp
1 #include "../../include/http/identityexportxml.h"\r
2 \r
3 #ifdef XMEM\r
4         #include <xmem.h>\r
5 #endif\r
6 \r
7 IdentityExportXML::IdentityExportXML()\r
8 {\r
9         Initialize();\r
10 }\r
11 \r
12 void IdentityExportXML::AddIdentity(const std::string &name, const std::string &publickey, const std::string &privatekey, const bool singleuse, const bool publishtrustlist, const bool publishboardlist, const bool publishfreesite)\r
13 {\r
14         m_identities.push_back(identity(name,publickey,privatekey,singleuse,publishtrustlist,publishboardlist,publishfreesite));\r
15 }\r
16 \r
17 const std::string IdentityExportXML::GetName(const long index)\r
18 {\r
19         if(index>=0 && index<GetCount())\r
20         {\r
21                 return m_identities[index].m_name;\r
22         }\r
23         else\r
24         {\r
25                 return "";\r
26         }\r
27 }\r
28 \r
29 const std::string IdentityExportXML::GetPrivateKey(const long index)\r
30 {\r
31         if(index>=0 && index<GetCount())\r
32         {\r
33                 return m_identities[index].m_privatekey;\r
34         }\r
35         else\r
36         {\r
37                 return "";\r
38         }\r
39 }\r
40 \r
41 const std::string IdentityExportXML::GetPublicKey(const long index)\r
42 {\r
43         if(index>=0 && index<GetCount())\r
44         {\r
45                 return m_identities[index].m_publickey;\r
46         }\r
47         else\r
48         {\r
49                 return "";\r
50         }\r
51 }\r
52 \r
53 const bool IdentityExportXML::GetPublishBoardList(const long index)\r
54 {\r
55         if(index>=0 && index<GetCount())\r
56         {\r
57                 return m_identities[index].m_publishboardlist;\r
58         }\r
59         else\r
60         {\r
61                 return false;\r
62         }\r
63 }\r
64 \r
65 const bool IdentityExportXML::GetPublishFreesite(const long index)\r
66 {\r
67         if(index>=0 && index<GetCount())\r
68         {\r
69                 return m_identities[index].m_publishfreesite;\r
70         }\r
71         else\r
72         {\r
73                 return false;\r
74         }\r
75 }\r
76 \r
77 const bool IdentityExportXML::GetPublishTrustList(const long index)\r
78 {\r
79         if(index>=0 && index<GetCount())\r
80         {\r
81                 return m_identities[index].m_publishtrustlist;\r
82         }\r
83         else\r
84         {\r
85                 return false;\r
86         }\r
87 }\r
88 \r
89 const bool IdentityExportXML::GetSingleUse(const long index)\r
90 {\r
91         if(index>=0 && index<GetCount())\r
92         {\r
93                 return m_identities[index].m_singleuse;\r
94         }\r
95         else\r
96         {\r
97                 return false;\r
98         }\r
99 }\r
100 \r
101 std::string IdentityExportXML::GetXML()\r
102 {\r
103         Poco::AutoPtr<Poco::XML::Document> doc=new Poco::XML::Document;\r
104         Poco::XML::Element *root=doc->createElement("IdentityExport");\r
105         Poco::XML::Element *el=NULL;\r
106         //TiXmlDocument td;\r
107         //TiXmlDeclaration *tdec=new TiXmlDeclaration("1.0","UTF-8","");\r
108         //TiXmlElement *tid;\r
109         //TiXmlPrinter tp;\r
110 \r
111         doc->appendChild(root);\r
112         //td.LinkEndChild(tdec);\r
113         //tid=new TiXmlElement("IdentityExport");\r
114         //td.LinkEndChild(tid);\r
115 \r
116         for(std::vector<identity>::iterator i=m_identities.begin(); i!=m_identities.end(); i++)\r
117         {\r
118                 el=doc->createElement("Identity");\r
119                 //TiXmlElement *tr=new TiXmlElement("Identity");\r
120                 root->appendChild(el);\r
121                 //tid->LinkEndChild(tr);\r
122 \r
123                 el->appendChild(XMLCreateCDATAElement(doc,"Name",(*i).m_name));\r
124                 el->appendChild(XMLCreateTextElement(doc,"PublicKey",(*i).m_publickey));\r
125                 el->appendChild(XMLCreateTextElement(doc,"PrivateKey",(*i).m_privatekey));\r
126                 el->appendChild(XMLCreateBooleanElement(doc,"SingleUse",(*i).m_singleuse));\r
127                 el->appendChild(XMLCreateBooleanElement(doc,"PublishTrustList",(*i).m_publishtrustlist));\r
128                 el->appendChild(XMLCreateBooleanElement(doc,"PublishBoardList",(*i).m_publishboardlist));\r
129                 el->appendChild(XMLCreateBooleanElement(doc,"PublishFreesite",(*i).m_publishfreesite));\r
130 \r
131                 //tr->LinkEndChild(XMLCreateCDATAElement("Name",(*i).m_name));\r
132                 //tr->LinkEndChild(XMLCreateTextElement("PublicKey",(*i).m_publickey));\r
133                 //tr->LinkEndChild(XMLCreateTextElement("PrivateKey",(*i).m_privatekey));\r
134                 //tr->LinkEndChild(XMLCreateBooleanElement("SingleUse",(*i).m_singleuse));\r
135                 //tr->LinkEndChild(XMLCreateBooleanElement("PublishTrustList",(*i).m_publishtrustlist));\r
136                 //tr->LinkEndChild(XMLCreateBooleanElement("PublishBoardList",(*i).m_publishboardlist));\r
137                 //tr->LinkEndChild(XMLCreateBooleanElement("PublishFreesite",(*i).m_publishfreesite));\r
138         }\r
139 \r
140         //td.Accept(&tp);\r
141         //return std::string(tp.CStr());\r
142 \r
143         std::string xml;\r
144         xml=GenerateXML(doc);\r
145 \r
146         return xml;\r
147 }\r
148 \r
149 void IdentityExportXML::Initialize()\r
150 {\r
151         m_identities.clear();\r
152 }\r
153 \r
154 const bool IdentityExportXML::ParseXML(const std::string &xml)\r
155 {\r
156         bool parsed=false;\r
157         Poco::XML::DOMParser dp;\r
158 \r
159         Initialize();\r
160 \r
161         try\r
162         {\r
163                 Poco::AutoPtr<Poco::XML::Document> doc=dp.parseString(FixCDATA(xml));\r
164                 Poco::XML::Element *root=XMLGetFirstChild(doc,"IdentityExport");\r
165                 Poco::XML::Element *node=XMLGetFirstChild(root,"Identity");\r
166 \r
167                 while(node)\r
168                 {\r
169                         std::string name="";\r
170                         std::string publickey="";\r
171                         std::string privatekey="";\r
172                         bool singleuse=false;\r
173                         bool publishtrustlist=false;\r
174                         bool publishboardlist=false;\r
175                         bool publishfreesite=false;     \r
176 \r
177                         Poco::XML::Element *text=XMLGetFirstChild(node,"Name");\r
178                         if(text)\r
179                         {\r
180                                 if(text->firstChild())\r
181                                 {\r
182                                         std::string asdf=text->innerText();\r
183                                         asdf=text->firstChild()->innerText();\r
184                                         name=text->firstChild()->getNodeValue();\r
185                                 }\r
186                         }\r
187                         text=XMLGetFirstChild(node,"PublicKey");\r
188                         if(text)\r
189                         {\r
190                                 if(text->firstChild())\r
191                                 {\r
192                                         publickey=text->firstChild()->getNodeValue();\r
193                                 }\r
194                         }\r
195                         text=XMLGetFirstChild(node,"PrivateKey");\r
196                         if(text)\r
197                         {\r
198                                 if(text->firstChild())\r
199                                 {\r
200                                         privatekey=text->firstChild()->getNodeValue();\r
201                                 }\r
202                         }\r
203 \r
204                         singleuse=XMLGetBooleanElement(node,"SingleUse");\r
205                         publishtrustlist=XMLGetBooleanElement(node,"PublishTrustList");\r
206                         publishboardlist=XMLGetBooleanElement(node,"PublishBoardList");\r
207                         publishfreesite=XMLGetBooleanElement(node,"PublishFreesite");\r
208 \r
209                         if(name!="" && publickey!="" && privatekey!="")\r
210                         {\r
211                                 m_identities.push_back(identity(name,publickey,privatekey,singleuse,publishtrustlist,publishboardlist,publishfreesite));\r
212                         }\r
213 \r
214                         node=XMLGetNextSibling(node,"Identity");\r
215                 }\r
216 \r
217                 parsed=true;\r
218         }\r
219         catch(...)\r
220         {\r
221         }\r
222 \r
223         return parsed;\r
224 \r
225         //TiXmlDocument td;\r
226         //td.Parse(xml.c_str());\r
227 /*\r
228         if(!td.Error())\r
229         {\r
230                 std::string name;\r
231                 std::string publickey;\r
232                 std::string privatekey;\r
233                 bool singleuse=false;\r
234                 bool publishtrustlist=false;\r
235                 bool publishboardlist=false;\r
236                 bool publishfreesite=false;\r
237                 TiXmlText *txt;\r
238                 TiXmlHandle hnd(&td);\r
239                 TiXmlNode *node;\r
240 \r
241                 Initialize();\r
242 \r
243                 node=hnd.FirstChild("IdentityExport").FirstChild("Identity").ToElement();\r
244                 while(node)\r
245                 {\r
246                         name="";\r
247                         publickey="";\r
248                         privatekey="";\r
249                         singleuse=false;\r
250                         publishtrustlist=false;\r
251                         publishboardlist=false;\r
252                         publishfreesite=false;\r
253 \r
254                         TiXmlHandle hnd2(node);\r
255                         txt=hnd2.FirstChild("Name").FirstChild().ToText();\r
256                         if(txt)\r
257                         {\r
258                                 name=txt->ValueStr();\r
259                         }\r
260                         txt=hnd2.FirstChild("PublicKey").FirstChild().ToText();\r
261                         if(txt)\r
262                         {\r
263                                 publickey=txt->ValueStr();\r
264                         }\r
265                         txt=hnd2.FirstChild("PrivateKey").FirstChild().ToText();\r
266                         if(txt)\r
267                         {\r
268                                 privatekey=txt->ValueStr();\r
269                         }\r
270 \r
271                         singleuse=XMLGetBooleanElement(node->ToElement(),"SingleUse");\r
272                         publishtrustlist=XMLGetBooleanElement(node->ToElement(),"PublishTrustList");\r
273                         publishboardlist=XMLGetBooleanElement(node->ToElement(),"PublishBoardList");\r
274                         publishfreesite=XMLGetBooleanElement(node->ToElement(),"PublishFreesite");\r
275 \r
276                         if(name!="" && publickey!="" && privatekey!="")\r
277                         {\r
278                                 m_identities.push_back(identity(name,publickey,privatekey,singleuse,publishtrustlist,publishboardlist,publishfreesite));\r
279                         }\r
280                         \r
281                         node=node->NextSibling("Identity");\r
282                 }\r
283                 return true;\r
284 \r
285         }\r
286         else\r
287         {\r
288                 return false;\r
289         }\r
290 */\r
291 }\r