2
0

lockoutSettings.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. import { ReactiveCache } from '/imports/reactiveCache';
  2. LockoutSettings = new Mongo.Collection('lockoutSettings');
  3. LockoutSettings.attachSchema(
  4. new SimpleSchema({
  5. _id: {
  6. type: String,
  7. },
  8. value: {
  9. type: Number,
  10. decimal: false,
  11. },
  12. category: {
  13. type: String,
  14. },
  15. sort: {
  16. type: Number,
  17. decimal: true,
  18. },
  19. createdAt: {
  20. type: Date,
  21. optional: true,
  22. // eslint-disable-next-line consistent-return
  23. autoValue() {
  24. if (this.isInsert) {
  25. return new Date();
  26. } else if (this.isUpsert) {
  27. return { $setOnInsert: new Date() };
  28. } else {
  29. this.unset();
  30. }
  31. },
  32. },
  33. modifiedAt: {
  34. type: Date,
  35. denyUpdate: false,
  36. // eslint-disable-next-line consistent-return
  37. autoValue() {
  38. if (this.isInsert || this.isUpsert || this.isUpdate) {
  39. return new Date();
  40. } else {
  41. this.unset();
  42. }
  43. },
  44. },
  45. }),
  46. );
  47. LockoutSettings.allow({
  48. update(userId) {
  49. const user = ReactiveCache.getUser(userId);
  50. return user && user.isAdmin;
  51. },
  52. });
  53. if (Meteor.isServer) {
  54. Meteor.startup(() => {
  55. LockoutSettings._collection.createIndex({ modifiedAt: -1 });
  56. // Known users settings
  57. LockoutSettings.upsert(
  58. { _id: 'known-failuresBeforeLockout' },
  59. {
  60. $setOnInsert: {
  61. value: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE
  62. ? parseInt(process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE, 10) : 3,
  63. category: 'known',
  64. sort: 0,
  65. },
  66. },
  67. );
  68. LockoutSettings.upsert(
  69. { _id: 'known-lockoutPeriod' },
  70. {
  71. $setOnInsert: {
  72. value: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD
  73. ? parseInt(process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD, 10) : 60,
  74. category: 'known',
  75. sort: 1,
  76. },
  77. },
  78. );
  79. LockoutSettings.upsert(
  80. { _id: 'known-failureWindow' },
  81. {
  82. $setOnInsert: {
  83. value: process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW
  84. ? parseInt(process.env.ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW, 10) : 15,
  85. category: 'known',
  86. sort: 2,
  87. },
  88. },
  89. );
  90. // Unknown users settings
  91. const typoVar = process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE;
  92. const correctVar = process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BEFORE;
  93. LockoutSettings.upsert(
  94. { _id: 'unknown-failuresBeforeLockout' },
  95. {
  96. $setOnInsert: {
  97. value: (correctVar || typoVar)
  98. ? parseInt(correctVar || typoVar, 10) : 3,
  99. category: 'unknown',
  100. sort: 0,
  101. },
  102. },
  103. );
  104. LockoutSettings.upsert(
  105. { _id: 'unknown-lockoutPeriod' },
  106. {
  107. $setOnInsert: {
  108. value: process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD
  109. ? parseInt(process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD, 10) : 60,
  110. category: 'unknown',
  111. sort: 1,
  112. },
  113. },
  114. );
  115. LockoutSettings.upsert(
  116. { _id: 'unknown-failureWindow' },
  117. {
  118. $setOnInsert: {
  119. value: process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW
  120. ? parseInt(process.env.ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW, 10) : 15,
  121. category: 'unknown',
  122. sort: 2,
  123. },
  124. },
  125. );
  126. });
  127. }
  128. LockoutSettings.helpers({
  129. getKnownConfig() {
  130. return {
  131. failuresBeforeLockout: LockoutSettings.findOne('known-failuresBeforeLockout')?.value || 3,
  132. lockoutPeriod: LockoutSettings.findOne('known-lockoutPeriod')?.value || 60,
  133. failureWindow: LockoutSettings.findOne('known-failureWindow')?.value || 15
  134. };
  135. },
  136. getUnknownConfig() {
  137. return {
  138. failuresBeforeLockout: LockoutSettings.findOne('unknown-failuresBeforeLockout')?.value || 3,
  139. lockoutPeriod: LockoutSettings.findOne('unknown-lockoutPeriod')?.value || 60,
  140. failureWindow: LockoutSettings.findOne('unknown-failureWindow')?.value || 15
  141. };
  142. }
  143. });
  144. export default LockoutSettings;