Winify – Diff between revs 14 and 15

Subversion Repositories:
Rev:
Show entire fileIgnore whitespace
Rev 14 Rev 15
Line 4... Line 4...
4 using System.Text; 4 using System.Text;
5 using System.Threading.Tasks; 5 using System.Threading.Tasks;
6 using System.Xml; 6 using System.Xml;
7 using System.Xml.Schema; 7 using System.Xml.Schema;
8 using System.Xml.Serialization; 8 using System.Xml.Serialization;
9 using Servers; -  
10 using Winify.Utilities; -  
Line 11... Line 9...
11   9  
12 namespace Winify.Servers.Serialization 10 namespace Winify.Servers.Serialization
13 { 11 {
14 public static class ServersSerialization 12 public static class ServersSerialization
15 { -  
16 #region Public Enums, Properties and Fields -  
17   -  
18 /// <summary> -  
19 /// Cached XML serializer for the configuration. -  
20 /// </summary> -  
21 public static XmlSerializer XmlSerializer { get; } = new XmlSerializer(typeof(global::Servers.Servers)); -  
22   -  
23 #endregion -  
24   13 {
Line 25... Line 14...
25 #region Public Methods 14 #region Public Methods
-   15  
26   16 public static async Task<SerializationState> Deserialize<T>(string file, string targetNamespace,
-   17 string schemeUri)
-   18 {
27 public static async Task<ServersSerializationState> Deserialize(string file) 19 var xmlSerializer = new XmlSerializer(typeof(T));
Line 28... Line 20...
28 { 20  
29 var validationEventArgs = new List<ValidationEventArgs>(); 21 var validationEventArgs = new List<ValidationEventArgs>();
30   22  
31 void XmlReaderSettingsValidationEventHandler(object sender, ValidationEventArgs e) 23 void XmlReaderSettingsValidationEventHandler(object sender, ValidationEventArgs e)
Line 32... Line 24...
32 { 24 {
Line 33... Line 25...
33 validationEventArgs.Add(e); 25 validationEventArgs.Add(e);
Line 34... Line 26...
34 } 26 }
35   27  
Line 50... Line 42...
50   42  
Line 51... Line 43...
51 settings.Schemas = new XmlSchemaSet(); 43 settings.Schemas = new XmlSchemaSet();
Line 52... Line 44...
52   44  
Line 53... Line 45...
53 settings.ValidationEventHandler += XmlReaderSettingsValidationEventHandler; 45 settings.ValidationEventHandler += XmlReaderSettingsValidationEventHandler;
54   46  
55 settings.Schemas.Add("urn:winify-servers-schema", "Servers.xsd"); 47 settings.Schemas.Add(targetNamespace, schemeUri);
56   48  
Line 71... Line 63...
71 } 63 }
Line 72... Line 64...
72   64  
73 using (var stringReader = new StringReader(stringBuilder.ToString())) 65 using (var stringReader = new StringReader(stringBuilder.ToString()))
74 { 66 {
75 servers = 67 servers =
76 (global::Servers.Servers) XmlSerializer 68 (T) xmlSerializer
77 .Deserialize(stringReader); 69 .Deserialize(stringReader);
78 } 70 }
79 } 71 }
80 } 72 }
81 } 73 }
82 catch (Exception ex) 74 catch (Exception ex)
83 { 75 {
84 return new ServersSerializationFailure(ex, validationEventArgs); 76 return new SerializationFailure(ex, validationEventArgs);
85 } 77 }
86 finally 78 finally
87 { 79 {
88 settings.ValidationEventHandler -= 80 settings.ValidationEventHandler -=
89 XmlReaderSettingsValidationEventHandler; 81 XmlReaderSettingsValidationEventHandler;
Line 90... Line -...
90 } -  
91   -  
92 // Decrypt password. -  
93 var deviceId = Miscellaneous.GetMachineGuid(); -  
94 var protectedServers = new global::Servers.Servers -  
95 { -  
96 Server = new BindingListWithCollectionChanged<Server>() -  
97 }; -  
98 foreach (var server in servers.Server) -  
99 { -  
100 var unarmored = Convert.FromBase64String(server.Password); -  
101 var decrypted = Encoding.UTF8.GetString(AES.Decrypt(unarmored, deviceId)); -  
102   -  
103 protectedServers.Server.Add(new Server(server.Name, server.Url, server.Username, decrypted)); -  
104 } 82 }
105   83  
Line 106... Line 84...
106 return new ServersSerializationSuccess(protectedServers, validationEventArgs); 84 return new SerializationSuccess<T>(servers, validationEventArgs);
107 } 85 }
-   86  
-   87 public static async Task<SerializationState> Serialize<T>(T servers, string file, string name, string subset)
108   88 {
109 public static async Task<ServersSerializationState> Serialize(global::Servers.Servers servers, string file) 89 var xmlSerializer = new XmlSerializer(typeof(T));
110 { 90  
111 try 91 try
112 { 92 {
Line 120... Line 100...
120 Indent = true, 100 Indent = true,
121 IndentChars = " ", 101 IndentChars = " ",
122 OmitXmlDeclaration = false 102 OmitXmlDeclaration = false
123 })) 103 }))
124 { 104 {
125 await xmlWriter.WriteDocTypeAsync("Servers", 105 await xmlWriter.WriteDocTypeAsync(name,
126 null, 106 null,
127 null, 107 null,
128 "<!ATTLIST Servers xmlns:xsi CDATA #IMPLIED xsi:noNamespaceSchemaLocation CDATA #IMPLIED>"); 108 subset);
Line 129... Line -...
129   -  
130 // Encrypt password for all servers. -  
131 var deviceId = Miscellaneous.GetMachineGuid(); -  
132 var protectedServers = new global::Servers.Servers -  
133 { -  
134 Server = new BindingListWithCollectionChanged<Server>() -  
135 }; -  
136 foreach (var server in servers.Server) -  
137 { -  
138 var encrypted = AES.Encrypt(Encoding.UTF8.GetBytes(server.Password), deviceId); -  
139 var armored = Convert.ToBase64String(encrypted); -  
140   -  
141 protectedServers.Server.Add(new Server(server.Name, server.Url, server.Username, armored)); -  
142 } -  
143   109  
Line 144... Line 110...
144 XmlSerializer.Serialize(xmlWriter, protectedServers); 110 xmlSerializer.Serialize(xmlWriter, servers);
145   111  
146 using (var fileStream = 112 using (var fileStream =
147 new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) 113 new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
Line 153... Line 119...
153 } 119 }
154 } 120 }
155 } 121 }
156 catch (Exception ex) 122 catch (Exception ex)
157 { 123 {
158 return new ServersSerializationFailure(ex); -  
159 } -  
160   -  
161 return new ServersSerializationSuccess(); -  
162 } -  
163   -  
164 public static async Task<ServersSerializationState> Serialize(global::Servers.Servers servers, -  
165 MemoryStream outputStream) -  
166 { -  
167 try -  
168 { -  
169 using (var memoryStream = new MemoryStream()) -  
170 { -  
171 using (var xmlWriter = -  
172 XmlWriter.Create(memoryStream, -  
173 new XmlWriterSettings -  
174 { -  
175 Async = true, -  
176 Indent = true, -  
177 IndentChars = " ", -  
178 OmitXmlDeclaration = false -  
179 })) -  
180 { -  
181 await xmlWriter.WriteDocTypeAsync("Servers", -  
182 null, -  
183 null, -  
184 "<!ATTLIST Servers xmlns:xsi CDATA #IMPLIED xsi:noNamespaceSchemaLocation CDATA #IMPLIED>"); -  
185   -  
186 // Encrypt password for all servers. -  
187 var deviceId = Miscellaneous.GetMachineGuid(); -  
188 var protectedServers = new global::Servers.Servers -  
189 { -  
190 Server = new BindingListWithCollectionChanged<Server>() -  
191 }; -  
192 foreach (var server in servers.Server) -  
193 { -  
194 var encrypted = AES.Encrypt(Encoding.UTF8.GetBytes(server.Password), deviceId); -  
195 var armored = Convert.ToBase64String(encrypted); -  
196   -  
197 protectedServers.Server.Add(new Server(server.Name, server.Url, server.Username, armored)); -  
198 } -  
199   -  
200 XmlSerializer.Serialize(xmlWriter, protectedServers); -  
201   -  
202 memoryStream.Position = 0L; -  
203   -  
204 await memoryStream.CopyToAsync(outputStream); -  
205 } -  
206 } -  
207 } -  
208 catch (Exception ex) -  
209 { -  
210 return new ServersSerializationFailure(ex); 124 return new SerializationFailure(ex);
211 } 125 }
Line 212... Line 126...
212   126  
213 return new ServersSerializationSuccess(); 127 return new SerializationSuccess<T>();
Line 214... Line 128...
214 } 128 }
215   129  
216 #endregion 130 #endregion
217 } 131 }