PageRenderTime 45ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/BlogEngine/BlogEngine.NET/App_Code/Extensions/Recaptcha/RecaptchaLogger.cs

#
C# | 93 lines | 67 code | 11 blank | 15 comment | 4 complexity | 24d8e82b533a88ff3f3b17571889c7f5 MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0, BSD-3-Clause
  1. namespace Recaptcha
  2. {
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using BlogEngine.Core.Web.Extensions;
  8. /// <summary>
  9. /// Methods to save and retrieve reCaptcha logs
  10. /// </summary>
  11. public static class RecaptchaLogger
  12. {
  13. #region Public Methods
  14. /// <summary>
  15. /// Read log data from data store
  16. /// </summary>
  17. /// <returns>
  18. /// List of log items
  19. /// </returns>
  20. public static List<RecaptchaLogItem> ReadLogItems()
  21. {
  22. var settings = ExtensionManager.GetSettings("Recaptcha", "RecaptchaLog");
  23. var table = settings.GetDataTable();
  24. var log = new List<RecaptchaLogItem>();
  25. if (table.Rows.Count > 0)
  26. {
  27. log.AddRange(
  28. table.Rows.Cast<DataRow>().Select(
  29. row =>
  30. new RecaptchaLogItem
  31. {
  32. Response = (string)row["Response"],
  33. Challenge = (string)row["Challenge"],
  34. CommentId = new Guid((string)row["CommentID"]),
  35. Enabled = bool.Parse(row["Enabled"].ToString()),
  36. Necessary = bool.Parse(row["Necessary"].ToString()),
  37. NumberOfAttempts = ushort.Parse(row["NumberOfAttempts"].ToString()),
  38. TimeToComment = double.Parse(row["TimeToComment"].ToString()),
  39. TimeToSolveCapcha = double.Parse(row["TimeToSolveCapcha"].ToString())
  40. }));
  41. }
  42. return log;
  43. }
  44. /// <summary>
  45. /// Saves log data to datastore as extension settings
  46. /// </summary>
  47. /// <param name="items">
  48. /// List of log items
  49. /// </param>
  50. public static void SaveLogItems(List<RecaptchaLogItem> items)
  51. {
  52. if (items.Count <= 0)
  53. {
  54. return;
  55. }
  56. var settings = ExtensionManager.GetSettings("Recaptcha", "RecaptchaLog");
  57. var table = settings.GetDataTable();
  58. if (table.Rows.Count > 0)
  59. {
  60. for (var i = table.Rows.Count - 1; i > -1; i--)
  61. {
  62. foreach (var par in settings.Parameters)
  63. {
  64. par.DeleteValue(i);
  65. }
  66. }
  67. }
  68. foreach (var item in items)
  69. {
  70. settings.AddValues(
  71. new[]
  72. {
  73. item.Response, item.Challenge, item.CommentId.ToString(), item.TimeToComment.ToString(),
  74. item.TimeToSolveCapcha.ToString(), item.NumberOfAttempts.ToString(),
  75. item.Enabled.ToString(), item.Necessary.ToString()
  76. });
  77. }
  78. ExtensionManager.SaveSettings("Recaptcha", settings);
  79. }
  80. #endregion
  81. }
  82. }