/GrinGlobal.Business/ConnectionInfo.cs

https://gitlab.com/GRIN-Global/GRIN-Global-server · C# · 238 lines · 187 code · 39 blank · 12 comment · 10 complexity · fa82a47d976d5ed57e14410629bfc7cd MD5 · raw file

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.ServiceModel.Channels;
  6. using GrinGlobal.Core;
  7. using GrinGlobal.Core.Xml;
  8. using System.Net;
  9. using System.Runtime.Serialization;
  10. using System.Runtime.Serialization.Formatters.Binary;
  11. using System.IO;
  12. namespace GrinGlobal.Business {
  13. /// <summary>
  14. /// Houses properties for connecting to either a database directly or the GRIN-Global web service / WCF service.
  15. /// </summary>
  16. [Serializable()]
  17. public class ConnectionInfo {
  18. public ConnectionInfo() {
  19. DatabaseEngineProviderName = "sqlserver";
  20. DatabaseEngineServerName = @"localhost\sqlexpress";
  21. DatabaseEngineDatabaseName = "gringlobal";
  22. DatabaseEngineSID = "";
  23. SearchEngineBindingType = "pipe";
  24. SearchEngineBindingUrl = "net.pipe://localhost/searchhost";
  25. WebAppPhysicalPath = Toolkit.GetIISPhysicalPath("gringlobal");
  26. }
  27. public DateTime LastUsed;
  28. public string DatabaseEngineServerName;
  29. public string DatabaseEngineProviderName;
  30. public string DatabaseEngineDatabaseName;
  31. public string DatabaseEngineSID;
  32. public string DatabaseEngineUserName;
  33. public string DatabaseEnginePassword;
  34. public bool DatabaseEngineRememberPassword;
  35. public string GrinGlobalUserName;
  36. public string GrinGlobalPassword;
  37. public bool GrinGlobalRememberPassword;
  38. public string GrinGlobalLoginToken;
  39. public string GrinGlobalHashedPassword {
  40. get {
  41. return Crypto.HashText(GrinGlobalPassword);
  42. }
  43. }
  44. public string SearchEngineBindingType;
  45. public string SearchEngineBindingUrl;
  46. public string WebAppPhysicalPath;
  47. public bool UseWebService;
  48. public string GrinGlobalUrl;
  49. public bool UseWindowsAuthentication;
  50. // get {
  51. // return String.IsNullOrEmpty(DatabaseEngineUserName) && DatabaseEngineProviderName.ToLower() == "sqlserver";
  52. // }
  53. // set {
  54. // DatabaseEngineProviderName = "sqlserver";
  55. // DatabaseEngineUserName = null;
  56. // DatabaseEnginePassword = null;
  57. // }
  58. //}
  59. public string ServerName {
  60. get {
  61. if (String.IsNullOrEmpty(GrinGlobalUrl)) {
  62. return DatabaseEngineServerName;
  63. } else {
  64. return GrinGlobalUrl;
  65. }
  66. }
  67. }
  68. public bool IsLocal {
  69. get {
  70. return DatabaseEngineServerName.ToLower().Contains("localhost")
  71. || DatabaseEngineServerName.Contains("127.0.0.1")
  72. || DatabaseEngineServerName.StartsWith(".")
  73. || DatabaseEngineServerName.ToLower().StartsWith("(local)")
  74. || DatabaseEngineServerName.ToLower().Contains(Dns.GetHostName().ToLower());
  75. }
  76. }
  77. public static ConnectionInfo FromXmlNode(Node nd) {
  78. var ci = new ConnectionInfo();
  79. ci.DatabaseEngineServerName = nd.Attributes.GetValue("DatabaseEngineName");
  80. ci.DatabaseEngineProviderName = nd.Attributes.GetValue("DatabaseEngineProvider", "sqlserver");
  81. ci.UseWindowsAuthentication = Toolkit.ToBoolean(nd.Attributes.GetValue("UseWindowsAuthentication", "true"), true);
  82. ci.DatabaseEngineRememberPassword = Toolkit.ToBoolean(nd.Attributes.GetValue("DatabaseEngineRememberPassword", "true"), true);
  83. ci.DatabaseEngineDatabaseName = nd.Attributes.GetValue("DatabaseEngineDatabaseName", "gringlobal");
  84. ci.DatabaseEngineUserName = nd.Attributes.GetValue("DatabaseEngineUserName");
  85. ci.DatabaseEnginePassword = Crypto.DecryptText(nd.Attributes.GetValue("DatabaseEnginePassword"));
  86. ci.DatabaseEngineSID = nd.Attributes.GetValue("DatabaseEngineSID", "");
  87. ci.GrinGlobalUserName = nd.Attributes.GetValue("GrinGlobalUserName");
  88. ci.GrinGlobalPassword = Crypto.DecryptText(nd.Attributes.GetValue("GrinGlobalPassword"));
  89. ci.GrinGlobalRememberPassword = Toolkit.ToBoolean(nd.Attributes.GetValue("GrinGlobalRememberPassword", "true"), true);
  90. ci.GrinGlobalUrl = nd.Attributes.GetValue("GrinGlobalUrl");
  91. ci.SearchEngineBindingType = nd.Attributes.GetValue("SearchEngineBindingType", "pipe");
  92. ci.SearchEngineBindingUrl = nd.Attributes.GetValue("SearchEngineBindingUrl", "net.pipe://localhost/searchhost");
  93. ci.WebAppPhysicalPath = nd.Attributes.GetValue("WebAppPhysicalPath", Toolkit.GetIISPhysicalPath("gringlobal"));
  94. ci.UseWebService = Toolkit.ToBoolean(nd.Attributes.GetValue("UseWebService", (String.IsNullOrEmpty(ci.GrinGlobalUrl) ? "false" : "true")), false);
  95. ci.LastUsed = Toolkit.ToDateTime(nd.Attributes.GetValue("LastUsed", ""), DateTime.UtcNow.AddDays(-30));
  96. if (ci.UseWebService) {
  97. return null;
  98. } else {
  99. return ci;
  100. }
  101. }
  102. public Node ToXmlNode() {
  103. var nd = new Node("Server");
  104. nd.Attributes.SetValue("DatabaseEngineName", DatabaseEngineServerName);
  105. nd.Attributes.SetValue("DatabaseEngineProvider", DatabaseEngineProviderName);
  106. nd.Attributes.SetValue("UseWindowsAuthentication", UseWindowsAuthentication.ToString());
  107. nd.Attributes.SetValue("DatabaseEngineRememberPassword", DatabaseEngineRememberPassword.ToString());
  108. nd.Attributes.SetValue("DatabaseEngineDatabaseName", DatabaseEngineDatabaseName);
  109. nd.Attributes.SetValue("DatabaseEngineUserName", DatabaseEngineUserName);
  110. if (DatabaseEngineRememberPassword) {
  111. nd.Attributes.SetValue("DatabaseEnginePassword", Crypto.EncryptText(DatabaseEnginePassword));
  112. }
  113. nd.Attributes.SetValue("DatabaseEngineSID", DatabaseEngineSID);
  114. nd.Attributes.SetValue("GrinGlobalUserName", GrinGlobalUserName);
  115. nd.Attributes.SetValue("GrinGlobalRememberPassword", GrinGlobalRememberPassword.ToString());
  116. if (GrinGlobalRememberPassword) {
  117. nd.Attributes.SetValue("GrinGlobalPassword", Crypto.EncryptText(GrinGlobalPassword));
  118. }
  119. nd.Attributes.SetValue("GrinGlobalUrl", GrinGlobalUrl);
  120. nd.Attributes.SetValue("SearchEngineBindingType", SearchEngineBindingType);
  121. nd.Attributes.SetValue("SearchEngineBindingUrl", SearchEngineBindingUrl);
  122. nd.Attributes.SetValue("WebAppPhysicalPath", WebAppPhysicalPath);
  123. nd.Attributes.SetValue("UseWebService", UseWebService.ToString());
  124. nd.Attributes.SetValue("LastUsed", LastUsed.ToString());
  125. return nd;
  126. }
  127. public ConnectionInfo(SerializationInfo info, StreamingContext ctx) {
  128. DatabaseEngineServerName = info.GetString("DatabaseEngineServerName");
  129. DatabaseEngineProviderName = info.GetString("DatabaseEngineProvider");
  130. UseWindowsAuthentication = info.GetBoolean("UseWindowsAuthentication");
  131. DatabaseEngineRememberPassword = info.GetBoolean("DatabaseEngineRememberPassword");
  132. DatabaseEngineDatabaseName = info.GetString("DatabaseEngineDatabaseName");
  133. DatabaseEngineUserName = info.GetString("DatabaseEngineUserName");
  134. DatabaseEnginePassword = info.GetString("DatabaseEnginePassword");
  135. DatabaseEngineSID = info.GetString("DatabaseEngineSID");
  136. GrinGlobalUserName = info.GetString("GrinGlobalUserName");
  137. GrinGlobalRememberPassword = info.GetBoolean("GrinGlobalRememberPassword");
  138. GrinGlobalPassword = info.GetString("GrinGlobalPassword");
  139. GrinGlobalUrl = info.GetString("GrinGlobalUrl");
  140. SearchEngineBindingType = info.GetString("SearchEngineBindingType");
  141. SearchEngineBindingUrl = info.GetString("SearchEngineBindingUrl");
  142. WebAppPhysicalPath = info.GetString("WebAppPhysicalPath");
  143. UseWebService = info.GetBoolean("UseWebService");
  144. try {
  145. LastUsed = info.GetDateTime("LastUsed");
  146. } catch {
  147. LastUsed = DateTime.UtcNow.AddDays(-30);
  148. }
  149. }
  150. public void GetObjectData(SerializationInfo info, StreamingContext ctx) {
  151. info.AddValue("DatabaseEngineServerName", DatabaseEngineServerName);
  152. info.AddValue("DatabaseEngineProviderName", DatabaseEngineProviderName);
  153. info.AddValue("UseWindowsAuthentication", UseWindowsAuthentication);
  154. info.AddValue("DatabaseEngineRememberPassword", DatabaseEngineRememberPassword);
  155. info.AddValue("DatabaseEngineDatabaseName", DatabaseEngineDatabaseName);
  156. info.AddValue("DatabaseEngineUserName", DatabaseEngineUserName);
  157. info.AddValue("DatabaseEnginePassword", DatabaseEnginePassword);
  158. info.AddValue("DatabaseEngineSID", DatabaseEngineSID);
  159. info.AddValue("GrinGlobalUserName", GrinGlobalUserName);
  160. info.AddValue("GrinGlobalRememberPassword", GrinGlobalRememberPassword);
  161. info.AddValue("GrinGlobalPassword", GrinGlobalPassword);
  162. info.AddValue("GrinGlobalUrl", GrinGlobalUrl);
  163. info.AddValue("SearchEngineBindingType", SearchEngineBindingType);
  164. info.AddValue("SearchEngineBindingUrl", SearchEngineBindingUrl);
  165. info.AddValue("WebAppPhysicalPath", WebAppPhysicalPath);
  166. info.AddValue("UseWebService", UseWebService);
  167. try {
  168. info.AddValue("LastUsed", LastUsed);
  169. } catch {
  170. LastUsed = DateTime.UtcNow.AddDays(-30);
  171. }
  172. }
  173. public DataConnectionSpec GenerateDataConnectionSpec() {
  174. var dcs = new DataConnectionSpec {
  175. ProviderName = DatabaseEngineProviderName,
  176. ServerName = DatabaseEngineServerName,
  177. DatabaseName = DatabaseEngineDatabaseName,
  178. UserName = DatabaseEngineUserName,
  179. Password = DatabaseEnginePassword,
  180. UseWindowsAuthentication = UseWindowsAuthentication,
  181. SID = DatabaseEngineSID
  182. };
  183. return dcs;
  184. }
  185. public string Serialize() {
  186. var ms = new MemoryStream();
  187. var fmtr = new BinaryFormatter();
  188. fmtr.Serialize(ms, this);
  189. var output = Convert.ToBase64String(ms.ToArray());
  190. return output;
  191. }
  192. public static ConnectionInfo Deserialize(string b64ConnectionInfo) {
  193. var ms = new MemoryStream(Convert.FromBase64String(b64ConnectionInfo));
  194. var fmtr = new BinaryFormatter();
  195. var rv = (ConnectionInfo)fmtr.Deserialize(ms);
  196. return rv;
  197. }
  198. }
  199. }