@prosopo/user-access-policy 3.5.27 → 3.5.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/package.json +11 -11
  3. package/coverage/base.css +0 -224
  4. package/coverage/block-navigation.js +0 -87
  5. package/coverage/clover.xml +0 -786
  6. package/coverage/coverage-final.json +0 -15
  7. package/coverage/favicon.png +0 -0
  8. package/coverage/index.html +0 -146
  9. package/coverage/prettify.css +0 -1
  10. package/coverage/prettify.js +0 -2
  11. package/coverage/sort-arrow-sprite.png +0 -0
  12. package/coverage/sorter.js +0 -210
  13. package/coverage/src/accessPolicy.ts.html +0 -457
  14. package/coverage/src/accessPolicyResolver.ts.html +0 -211
  15. package/coverage/src/accessRules.ts.html +0 -265
  16. package/coverage/src/api/accessRuleApiRoutes.ts.html +0 -379
  17. package/coverage/src/api/accessRulesApiClient.ts.html +0 -274
  18. package/coverage/src/api/deleteAllRulesEndpoint.ts.html +0 -229
  19. package/coverage/src/api/deleteRulesEndpoint.ts.html +0 -301
  20. package/coverage/src/api/index.html +0 -176
  21. package/coverage/src/api/insertRulesEndpoint.ts.html +0 -436
  22. package/coverage/src/index.html +0 -176
  23. package/coverage/src/index.ts.html +0 -277
  24. package/coverage/src/redis/index.html +0 -161
  25. package/coverage/src/redis/redisRulesIndex.ts.html +0 -769
  26. package/coverage/src/redis/redisRulesReader.ts.html +0 -652
  27. package/coverage/src/redis/redisRulesStorage.ts.html +0 -229
  28. package/coverage/src/redis/redisRulesWriter.ts.html +0 -424
  29. package/coverage/src/util.ts.html +0 -136
  30. package/dist/.export.d.ts +0 -6
  31. package/dist/.export.d.ts.map +0 -1
  32. package/dist/.export.js.map +0 -1
  33. package/dist/accessPolicy.d.ts +0 -169
  34. package/dist/accessPolicy.d.ts.map +0 -1
  35. package/dist/accessPolicy.js +0 -80
  36. package/dist/accessPolicy.js.map +0 -1
  37. package/dist/accessPolicyResolver.d.ts +0 -110
  38. package/dist/accessPolicyResolver.d.ts.map +0 -1
  39. package/dist/accessPolicyResolver.js +0 -31
  40. package/dist/accessPolicyResolver.js.map +0 -1
  41. package/dist/accessRules.d.ts +0 -16
  42. package/dist/accessRules.d.ts.map +0 -1
  43. package/dist/accessRules.js +0 -11
  44. package/dist/accessRules.js.map +0 -1
  45. package/dist/api/.export.d.ts +0 -7
  46. package/dist/api/.export.d.ts.map +0 -1
  47. package/dist/api/.export.js.map +0 -1
  48. package/dist/api/accessRuleApiRoutes.d.ts +0 -27
  49. package/dist/api/accessRuleApiRoutes.d.ts.map +0 -1
  50. package/dist/api/accessRuleApiRoutes.js +0 -79
  51. package/dist/api/accessRuleApiRoutes.js.map +0 -1
  52. package/dist/api/accessRulesApiClient.d.ts +0 -10
  53. package/dist/api/accessRulesApiClient.d.ts.map +0 -1
  54. package/dist/api/accessRulesApiClient.js +0 -38
  55. package/dist/api/accessRulesApiClient.js.map +0 -1
  56. package/dist/api/delete/.export.d.ts +0 -2
  57. package/dist/api/delete/.export.d.ts.map +0 -1
  58. package/dist/api/delete/.export.js.map +0 -1
  59. package/dist/api/delete/deleteAllRules.d.ts +0 -11
  60. package/dist/api/delete/deleteAllRules.d.ts.map +0 -1
  61. package/dist/api/delete/deleteAllRules.js.map +0 -1
  62. package/dist/api/delete/deleteRuleGroups.d.ts +0 -19
  63. package/dist/api/delete/deleteRuleGroups.d.ts.map +0 -1
  64. package/dist/api/delete/deleteRuleGroups.js.map +0 -1
  65. package/dist/api/delete/deleteRules.d.ts +0 -15
  66. package/dist/api/delete/deleteRules.d.ts.map +0 -1
  67. package/dist/api/delete/deleteRules.js.map +0 -1
  68. package/dist/api/deleteAllRulesEndpoint.d.ts +0 -12
  69. package/dist/api/deleteAllRulesEndpoint.d.ts.map +0 -1
  70. package/dist/api/deleteAllRulesEndpoint.js +0 -24
  71. package/dist/api/deleteAllRulesEndpoint.js.map +0 -1
  72. package/dist/api/deleteRulesEndpoint.d.ts +0 -116
  73. package/dist/api/deleteRulesEndpoint.d.ts.map +0 -1
  74. package/dist/api/deleteRulesEndpoint.js +0 -34
  75. package/dist/api/deleteRulesEndpoint.js.map +0 -1
  76. package/dist/api/insertRulesEndpoint.d.ts +0 -22
  77. package/dist/api/insertRulesEndpoint.d.ts.map +0 -1
  78. package/dist/api/insertRulesEndpoint.js +0 -62
  79. package/dist/api/insertRulesEndpoint.js.map +0 -1
  80. package/dist/api/read/.export.d.ts +0 -4
  81. package/dist/api/read/.export.d.ts.map +0 -1
  82. package/dist/api/read/.export.js.map +0 -1
  83. package/dist/api/read/fetchRules.d.ts +0 -53
  84. package/dist/api/read/fetchRules.d.ts.map +0 -1
  85. package/dist/api/read/fetchRules.js.map +0 -1
  86. package/dist/api/read/findRuleIds.d.ts +0 -28
  87. package/dist/api/read/findRuleIds.d.ts.map +0 -1
  88. package/dist/api/read/findRuleIds.js.map +0 -1
  89. package/dist/api/read/getMissingIds.d.ts +0 -28
  90. package/dist/api/read/getMissingIds.d.ts.map +0 -1
  91. package/dist/api/read/getMissingIds.js.map +0 -1
  92. package/dist/api/ruleApiRoutes.d.ts +0 -43
  93. package/dist/api/ruleApiRoutes.d.ts.map +0 -1
  94. package/dist/api/ruleApiRoutes.js.map +0 -1
  95. package/dist/api/rulesApiClient.d.ts +0 -20
  96. package/dist/api/rulesApiClient.d.ts.map +0 -1
  97. package/dist/api/rulesApiClient.js.map +0 -1
  98. package/dist/api/write/.export.d.ts +0 -2
  99. package/dist/api/write/.export.d.ts.map +0 -1
  100. package/dist/api/write/.export.js.map +0 -1
  101. package/dist/api/write/insertRules.d.ts +0 -29
  102. package/dist/api/write/insertRules.d.ts.map +0 -1
  103. package/dist/api/write/insertRules.js.map +0 -1
  104. package/dist/api/write/rehashRules.d.ts +0 -11
  105. package/dist/api/write/rehashRules.d.ts.map +0 -1
  106. package/dist/api/write/rehashRules.js.map +0 -1
  107. package/dist/cjs/accessPolicy.cjs +0 -80
  108. package/dist/cjs/accessPolicyResolver.cjs +0 -31
  109. package/dist/cjs/accessRules.cjs +0 -11
  110. package/dist/cjs/api/accessRuleApiRoutes.cjs +0 -79
  111. package/dist/cjs/api/deleteAllRulesEndpoint.cjs +0 -24
  112. package/dist/cjs/api/deleteRulesEndpoint.cjs +0 -34
  113. package/dist/cjs/api/insertRulesEndpoint.cjs +0 -62
  114. package/dist/cjs/index.cjs +0 -29
  115. package/dist/cjs/redis/redisAccessRules.cjs +0 -152
  116. package/dist/cjs/redis/redisAccessRulesIndex.cjs +0 -171
  117. package/dist/cjs/redis/redisIndex.cjs +0 -22
  118. package/dist/cjs/util.cjs +0 -5
  119. package/dist/index.d.ts +0 -15
  120. package/dist/index.d.ts.map +0 -1
  121. package/dist/index.js +0 -32
  122. package/dist/index.js.map +0 -1
  123. package/dist/mongoose/.export.d.ts +0 -2
  124. package/dist/mongoose/.export.d.ts.map +0 -1
  125. package/dist/mongoose/.export.js.map +0 -1
  126. package/dist/mongoose/mongooseRuleSchema.d.ts +0 -4
  127. package/dist/mongoose/mongooseRuleSchema.d.ts.map +0 -1
  128. package/dist/mongoose/mongooseRuleSchema.js.map +0 -1
  129. package/dist/redis/.export.d.ts +0 -3
  130. package/dist/redis/.export.d.ts.map +0 -1
  131. package/dist/redis/.export.js.map +0 -1
  132. package/dist/redis/reader/redisAggregate.d.ts +0 -4
  133. package/dist/redis/reader/redisAggregate.d.ts.map +0 -1
  134. package/dist/redis/reader/redisAggregate.js.map +0 -1
  135. package/dist/redis/reader/redisRulesQuery.d.ts +0 -4
  136. package/dist/redis/reader/redisRulesQuery.d.ts.map +0 -1
  137. package/dist/redis/reader/redisRulesQuery.js.map +0 -1
  138. package/dist/redis/reader/redisRulesReader.d.ts +0 -26
  139. package/dist/redis/reader/redisRulesReader.d.ts.map +0 -1
  140. package/dist/redis/reader/redisRulesReader.js.map +0 -1
  141. package/dist/redis/redisAccessRules.d.ts +0 -7
  142. package/dist/redis/redisAccessRules.d.ts.map +0 -1
  143. package/dist/redis/redisAccessRules.js +0 -119
  144. package/dist/redis/redisAccessRules.js.map +0 -1
  145. package/dist/redis/redisAccessRulesIndex.d.ts +0 -13
  146. package/dist/redis/redisAccessRulesIndex.d.ts.map +0 -1
  147. package/dist/redis/redisAccessRulesIndex.js +0 -140
  148. package/dist/redis/redisAccessRulesIndex.js.map +0 -1
  149. package/dist/redis/redisClient.d.ts +0 -11
  150. package/dist/redis/redisClient.d.ts.map +0 -1
  151. package/dist/redis/redisClient.js.map +0 -1
  152. package/dist/redis/redisIndex.d.ts +0 -9
  153. package/dist/redis/redisIndex.d.ts.map +0 -1
  154. package/dist/redis/redisIndex.js +0 -23
  155. package/dist/redis/redisIndex.js.map +0 -1
  156. package/dist/redis/redisRuleIndex.d.ts +0 -13
  157. package/dist/redis/redisRuleIndex.d.ts.map +0 -1
  158. package/dist/redis/redisRuleIndex.js.map +0 -1
  159. package/dist/redis/redisRulesIndex.d.ts +0 -9
  160. package/dist/redis/redisRulesIndex.d.ts.map +0 -1
  161. package/dist/redis/redisRulesIndex.js +0 -138
  162. package/dist/redis/redisRulesIndex.js.map +0 -1
  163. package/dist/redis/redisRulesReader.d.ts +0 -6
  164. package/dist/redis/redisRulesReader.d.ts.map +0 -1
  165. package/dist/redis/redisRulesReader.js +0 -125
  166. package/dist/redis/redisRulesReader.js.map +0 -1
  167. package/dist/redis/redisRulesStorage.d.ts +0 -5
  168. package/dist/redis/redisRulesStorage.d.ts.map +0 -1
  169. package/dist/redis/redisRulesStorage.js.map +0 -1
  170. package/dist/redis/redisRulesWriter.d.ts +0 -22
  171. package/dist/redis/redisRulesWriter.d.ts.map +0 -1
  172. package/dist/redis/redisRulesWriter.js.map +0 -1
  173. package/dist/rule.d.ts +0 -34
  174. package/dist/rule.d.ts.map +0 -1
  175. package/dist/rule.js.map +0 -1
  176. package/dist/ruleInput/.export.d.ts +0 -4
  177. package/dist/ruleInput/.export.d.ts.map +0 -1
  178. package/dist/ruleInput/.export.js.map +0 -1
  179. package/dist/ruleInput/policyInput.d.ts +0 -38
  180. package/dist/ruleInput/policyInput.d.ts.map +0 -1
  181. package/dist/ruleInput/policyInput.js.map +0 -1
  182. package/dist/ruleInput/ruleInput.d.ts +0 -145
  183. package/dist/ruleInput/ruleInput.d.ts.map +0 -1
  184. package/dist/ruleInput/ruleInput.js.map +0 -1
  185. package/dist/ruleInput/userScopeInput.d.ts +0 -93
  186. package/dist/ruleInput/userScopeInput.d.ts.map +0 -1
  187. package/dist/ruleInput/userScopeInput.js.map +0 -1
  188. package/dist/ruleRecord.d.ts +0 -18
  189. package/dist/ruleRecord.d.ts.map +0 -1
  190. package/dist/ruleRecord.js.map +0 -1
  191. package/dist/rulesStorage.d.ts +0 -30
  192. package/dist/rulesStorage.d.ts.map +0 -1
  193. package/dist/rulesStorage.js.map +0 -1
  194. package/dist/tests/accessPolicy.test.d.ts +0 -2
  195. package/dist/tests/accessPolicy.test.d.ts.map +0 -1
  196. package/dist/tests/accessPolicy.test.js +0 -27
  197. package/dist/tests/accessPolicy.test.js.map +0 -1
  198. package/dist/tests/redis/reader/redisRulesQuery.unit.test.d.ts +0 -2
  199. package/dist/tests/redis/reader/redisRulesQuery.unit.test.d.ts.map +0 -1
  200. package/dist/tests/redis/reader/redisRulesQuery.unit.test.js +0 -101
  201. package/dist/tests/redis/reader/redisRulesQuery.unit.test.js.map +0 -1
  202. package/dist/tests/redis/redisAccessRules.integration.test.d.ts +0 -2
  203. package/dist/tests/redis/redisAccessRules.integration.test.d.ts.map +0 -1
  204. package/dist/tests/redis/redisAccessRules.integration.test.js +0 -586
  205. package/dist/tests/redis/redisAccessRules.integration.test.js.map +0 -1
  206. package/dist/tests/redis/redisAccessRules.unit.test.d.ts +0 -2
  207. package/dist/tests/redis/redisAccessRules.unit.test.d.ts.map +0 -1
  208. package/dist/tests/redis/redisAccessRules.unit.test.js +0 -198
  209. package/dist/tests/redis/redisAccessRules.unit.test.js.map +0 -1
  210. package/dist/tests/redis/redisIndex.integration.test.d.ts +0 -2
  211. package/dist/tests/redis/redisIndex.integration.test.d.ts.map +0 -1
  212. package/dist/tests/redis/redisIndex.integration.test.js +0 -80
  213. package/dist/tests/redis/redisIndex.integration.test.js.map +0 -1
  214. package/dist/tests/redis/redisRulesIndex.unit.test.d.ts +0 -2
  215. package/dist/tests/redis/redisRulesIndex.unit.test.d.ts.map +0 -1
  216. package/dist/tests/redis/redisRulesIndex.unit.test.js +0 -101
  217. package/dist/tests/redis/redisRulesIndex.unit.test.js.map +0 -1
  218. package/dist/tests/redis/redisRulesStorage.integration.test.d.ts +0 -2
  219. package/dist/tests/redis/redisRulesStorage.integration.test.d.ts.map +0 -1
  220. package/dist/tests/redis/redisRulesStorage.integration.test.js +0 -611
  221. package/dist/tests/redis/redisRulesStorage.integration.test.js.map +0 -1
  222. package/dist/tests/redis/testRedisClient.d.ts +0 -3
  223. package/dist/tests/redis/testRedisClient.d.ts.map +0 -1
  224. package/dist/tests/redis/testRedisClient.js +0 -8
  225. package/dist/tests/redis/testRedisClient.js.map +0 -1
  226. package/dist/tests/testLogger.d.ts +0 -4
  227. package/dist/tests/testLogger.d.ts.map +0 -1
  228. package/dist/tests/testLogger.js +0 -22
  229. package/dist/tests/testLogger.js.map +0 -1
  230. package/dist/tests/transformRule.unit.test.d.ts +0 -2
  231. package/dist/tests/transformRule.unit.test.d.ts.map +0 -1
  232. package/dist/tests/transformRule.unit.test.js +0 -188
  233. package/dist/tests/transformRule.unit.test.js.map +0 -1
  234. package/dist/transformRule.d.ts +0 -7
  235. package/dist/transformRule.d.ts.map +0 -1
  236. package/dist/transformRule.js.map +0 -1
  237. package/dist/util.d.ts +0 -2
  238. package/dist/util.d.ts.map +0 -1
  239. package/dist/util.js +0 -5
  240. package/dist/util.js.map +0 -1
@@ -1,611 +0,0 @@
1
- import { LogLevel, chunkIntoBatches, executeBatchesSequentially, getLogger, } from "@prosopo/common";
2
- import { createTestRedisConnection, setupRedisIndex, } from "@prosopo/redis-client";
3
- import { randomAsHex } from "@prosopo/util-crypto";
4
- import { afterAll, beforeAll, beforeEach, describe, expect, test, } from "vitest";
5
- import { RedisRulesReader } from "#policy/redis/reader/redisRulesReader.js";
6
- import { ACCESS_RULE_REDIS_KEY_PREFIX, accessRulesRedisIndex, getAccessRuleRedisKey, } from "#policy/redis/redisRuleIndex.js";
7
- import { RedisRulesWriter, getRedisRuleValue, } from "#policy/redis/redisRulesWriter.js";
8
- import { AccessPolicyType } from "#policy/rule.js";
9
- import { FilterScopeMatch, } from "#policy/rulesStorage.js";
10
- describe("redisAccessRulesStorage", () => {
11
- let redisConnection;
12
- let redisClient;
13
- let indexName;
14
- const mockLogger = new Proxy({}, {
15
- get: () => () => { },
16
- });
17
- const getUniqueString = () => Math.random().toString(36).substring(2, 15);
18
- const getIndexRecordsCount = async (indexName) => (await redisClient.ft.info(indexName)).num_docs;
19
- const insertRules = async (rules) => {
20
- const ruleBatches = chunkIntoBatches(rules, 1000);
21
- await executeBatchesSequentially(ruleBatches, async (batchRules) => {
22
- const queries = redisClient.multi();
23
- batchRules.map((rule) => {
24
- const ruleKey = getAccessRuleRedisKey(rule);
25
- const ruleValue = getRedisRuleValue(rule);
26
- queries.hSet(ruleKey, ruleValue);
27
- });
28
- await queries.exec();
29
- });
30
- };
31
- beforeAll(async () => {
32
- redisConnection = createTestRedisConnection();
33
- redisClient = await setupRedisIndex(redisConnection, accessRulesRedisIndex, mockLogger).getClient();
34
- });
35
- beforeEach(async () => {
36
- const keys = await redisClient.keys("*");
37
- if (keys.length > 0) {
38
- await redisClient.del(keys);
39
- }
40
- indexName = randomAsHex(16);
41
- redisClient = await setupRedisIndex(redisConnection, { ...accessRulesRedisIndex, name: indexName }, mockLogger).getClient();
42
- });
43
- describe("writer", () => {
44
- let accessRulesWriter;
45
- beforeAll(() => {
46
- accessRulesWriter = new RedisRulesWriter(redisClient, mockLogger);
47
- });
48
- test("inserts rule", async () => {
49
- const accessRule = {
50
- type: AccessPolicyType.Block,
51
- clientId: "clientId",
52
- };
53
- const accessRuleKey = getAccessRuleRedisKey(accessRule);
54
- await accessRulesWriter.insertRules([
55
- {
56
- rule: accessRule,
57
- },
58
- ]);
59
- const insertedAccessRule = await redisClient.hGetAll(accessRuleKey);
60
- const indexRecordsCount = await getIndexRecordsCount(indexName);
61
- expect(insertedAccessRule).toEqual(accessRule);
62
- expect(indexRecordsCount).toEqual(1);
63
- });
64
- test("inserts time limited rule", async () => {
65
- const accessRule = {
66
- type: AccessPolicyType.Block,
67
- clientId: "clientId",
68
- };
69
- const accessRuleKey = getAccessRuleRedisKey(accessRule);
70
- const expireIn = 60 * 60;
71
- const expirationTimestamp = new Date(Date.now() + expireIn * 1000).getTime();
72
- const expirationTimestampInSeconds = Math.floor(expirationTimestamp / 1000);
73
- await accessRulesWriter.insertRules([
74
- {
75
- rule: accessRule,
76
- expiresUnixTimestamp: expirationTimestamp,
77
- },
78
- ]);
79
- const ruleKey = getAccessRuleRedisKey(accessRule);
80
- const insertedAccessRule = await redisClient.hGetAll(accessRuleKey);
81
- const insertedExpirationResult = await redisClient.expireAt(ruleKey, expirationTimestampInSeconds);
82
- const indexRecordsCount = await getIndexRecordsCount(indexName);
83
- const recordExpirySeconds = await redisClient.ttl(ruleKey);
84
- expect(insertedAccessRule).toEqual(accessRule);
85
- expect(insertedExpirationResult).toBe(1);
86
- expect(recordExpirySeconds).toBeLessThanOrEqual(expirationTimestampInSeconds);
87
- expect(indexRecordsCount).toBe(1);
88
- });
89
- test("deletes rules", async () => {
90
- const johnAccessRule = {
91
- type: AccessPolicyType.Block,
92
- clientId: getUniqueString(),
93
- };
94
- const johnAccessRuleKey = getAccessRuleRedisKey(johnAccessRule);
95
- const doeAccessRule = {
96
- type: AccessPolicyType.Block,
97
- clientId: getUniqueString(),
98
- };
99
- const doeAccessRuleKey = getAccessRuleRedisKey(doeAccessRule);
100
- await insertRules([johnAccessRule, doeAccessRule]);
101
- await accessRulesWriter.deleteRules([
102
- johnAccessRuleKey.slice(ACCESS_RULE_REDIS_KEY_PREFIX.length),
103
- ]);
104
- const presentAccessRule = await redisClient.hGetAll(doeAccessRuleKey);
105
- const indexRecordsCount = await getIndexRecordsCount(indexName);
106
- expect(presentAccessRule).toEqual(doeAccessRule);
107
- expect(indexRecordsCount).toBe(1);
108
- });
109
- test("deletes all rules", async () => {
110
- const johnAccessRule = {
111
- type: AccessPolicyType.Block,
112
- clientId: getUniqueString(),
113
- };
114
- const doeAccessRule = {
115
- type: AccessPolicyType.Block,
116
- clientId: getUniqueString(),
117
- };
118
- await insertRules([johnAccessRule, doeAccessRule]);
119
- await accessRulesWriter.deleteAllRules();
120
- const indexRecordsCount = await getIndexRecordsCount(indexName);
121
- expect(indexRecordsCount).toBe(0);
122
- });
123
- test("deletes all rules when there is 1 million of rules", async () => {
124
- const rulesCount = 1_000_000;
125
- const accessRules = Array.from({ length: rulesCount }, () => ({
126
- type: AccessPolicyType.Block,
127
- clientId: getUniqueString(),
128
- }));
129
- await insertRules(accessRules);
130
- await accessRulesWriter.deleteAllRules();
131
- const indexRecordsCount = await getIndexRecordsCount(indexName);
132
- expect(indexRecordsCount).toBe(0);
133
- });
134
- }, {
135
- timeout: 120_000,
136
- });
137
- describe("reader", () => {
138
- let accessRulesReader;
139
- beforeAll(async () => {
140
- accessRulesReader = new RedisRulesReader(redisClient, getLogger(LogLevel.enum.info, "RedisAccessRulesReader"));
141
- });
142
- test("finds client and global rules by greedy policy scope match", async () => {
143
- const johnId = getUniqueString();
144
- const johnAccessRule = {
145
- type: AccessPolicyType.Block,
146
- clientId: johnId,
147
- };
148
- const doeAccessRule = {
149
- type: AccessPolicyType.Block,
150
- clientId: getUniqueString(),
151
- };
152
- const globalAccessRule = {
153
- type: AccessPolicyType.Block,
154
- };
155
- await insertRules([johnAccessRule, doeAccessRule, globalAccessRule]);
156
- const foundByClientAccessRules = await accessRulesReader.findRules({
157
- policyScope: {
158
- clientId: johnId,
159
- },
160
- policyScopeMatch: FilterScopeMatch.Greedy,
161
- });
162
- const foundAccessRules = await accessRulesReader.findRules({
163
- policyScopeMatch: FilterScopeMatch.Greedy,
164
- });
165
- const indexRecordsCount = await getIndexRecordsCount(indexName);
166
- expect(indexRecordsCount).toBe(3);
167
- expect(foundByClientAccessRules).toEqual([
168
- johnAccessRule,
169
- globalAccessRule,
170
- ]);
171
- expect(foundAccessRules).toEqual([
172
- johnAccessRule,
173
- doeAccessRule,
174
- globalAccessRule,
175
- ]);
176
- });
177
- test("finds client or global rules by exact policy scope match", async () => {
178
- const johnId = getUniqueString();
179
- const johnAccessRule = {
180
- type: AccessPolicyType.Block,
181
- clientId: johnId,
182
- };
183
- const doeAccessRule = {
184
- type: AccessPolicyType.Block,
185
- clientId: getUniqueString(),
186
- };
187
- const globalAccessRule = {
188
- type: AccessPolicyType.Block,
189
- };
190
- await insertRules([johnAccessRule, doeAccessRule, globalAccessRule]);
191
- const foundClientAccessRules = await accessRulesReader.findRules({
192
- policyScope: {
193
- clientId: johnId,
194
- },
195
- policyScopeMatch: FilterScopeMatch.Exact,
196
- });
197
- const foundGlobalAccessRules = await accessRulesReader.findRules({
198
- policyScopeMatch: FilterScopeMatch.Exact,
199
- }, false, false);
200
- const indexRecordsCount = await getIndexRecordsCount(indexName);
201
- expect(indexRecordsCount).toBe(3);
202
- expect(foundClientAccessRules).toEqual([johnAccessRule]);
203
- expect(foundGlobalAccessRules).toEqual([globalAccessRule]);
204
- });
205
- test("finds rules by greedy user scope match", async () => {
206
- const johnId = getUniqueString();
207
- const johnIpAccessRule = {
208
- type: AccessPolicyType.Block,
209
- clientId: johnId,
210
- numericIp: BigInt(100),
211
- };
212
- const doeIpAccessRule = {
213
- type: AccessPolicyType.Block,
214
- clientId: getUniqueString(),
215
- numericIp: BigInt(100),
216
- };
217
- const johnHeaderAccessRule = {
218
- type: AccessPolicyType.Block,
219
- headersHash: "chrome",
220
- };
221
- const globalJa4AccessRule = {
222
- type: AccessPolicyType.Block,
223
- ja4Hash: "windows",
224
- };
225
- await insertRules([
226
- johnIpAccessRule,
227
- doeIpAccessRule,
228
- johnHeaderAccessRule,
229
- globalJa4AccessRule,
230
- ]);
231
- const foundAccessRules = await accessRulesReader.findRules({
232
- policyScope: {
233
- clientId: johnId,
234
- },
235
- userScope: {
236
- numericIp: BigInt(100),
237
- ja4Hash: "windows",
238
- },
239
- userScopeMatch: FilterScopeMatch.Greedy,
240
- });
241
- const indexRecordsCount = await getIndexRecordsCount(indexName);
242
- expect(indexRecordsCount).toBe(4);
243
- expect(foundAccessRules).toEqual([johnIpAccessRule, globalJa4AccessRule]);
244
- });
245
- test("finds rules by exact user scope match", async () => {
246
- const johnId = getUniqueString();
247
- const johnTargetAccessRule = {
248
- type: AccessPolicyType.Block,
249
- clientId: johnId,
250
- numericIp: BigInt(100),
251
- ja4Hash: "windows",
252
- };
253
- const doeTargetAccessRule = {
254
- type: AccessPolicyType.Block,
255
- clientId: getUniqueString(),
256
- numericIp: BigInt(100),
257
- ja4Hash: "windows",
258
- };
259
- const johnHeaderAccessRule = {
260
- type: AccessPolicyType.Block,
261
- headersHash: "chrome",
262
- };
263
- const globalTargetAccessRule = {
264
- type: AccessPolicyType.Block,
265
- numericIp: BigInt(100),
266
- ja4Hash: "windows",
267
- };
268
- const globalJa4AccessRule = {
269
- type: AccessPolicyType.Block,
270
- ja4Hash: "windows",
271
- };
272
- await insertRules([
273
- johnTargetAccessRule,
274
- doeTargetAccessRule,
275
- johnHeaderAccessRule,
276
- globalTargetAccessRule,
277
- globalJa4AccessRule,
278
- ]);
279
- const foundAccessRules = await accessRulesReader.findRules({
280
- policyScope: {
281
- clientId: johnId,
282
- },
283
- userScope: {
284
- numericIp: BigInt(100),
285
- ja4Hash: "windows",
286
- },
287
- userScopeMatch: FilterScopeMatch.Exact,
288
- });
289
- const indexRecordsCount = await getIndexRecordsCount(indexName);
290
- expect(indexRecordsCount).toBe(5);
291
- expect(foundAccessRules).toEqual([
292
- johnTargetAccessRule,
293
- globalTargetAccessRule,
294
- ]);
295
- });
296
- test("finds rules by greedy ip match", async () => {
297
- const johnId = getUniqueString();
298
- const johnIpMask_0_100_AccessRule = {
299
- clientId: johnId,
300
- type: AccessPolicyType.Block,
301
- numericIpMaskMin: BigInt(0),
302
- numericIpMaskMax: BigInt(100),
303
- };
304
- const johnIp_100_AccessRule = {
305
- clientId: johnId,
306
- type: AccessPolicyType.Block,
307
- numericIp: BigInt(100),
308
- };
309
- const globalIpMask_100_200_AccessRule = {
310
- type: AccessPolicyType.Block,
311
- numericIpMaskMin: BigInt(100),
312
- numericIpMaskMax: BigInt(200),
313
- };
314
- const doeIpMask_200_300AccessRule = {
315
- clientId: getUniqueString(),
316
- type: AccessPolicyType.Block,
317
- numericIpMaskMin: BigInt(200),
318
- numericIpMaskMax: BigInt(300),
319
- };
320
- await insertRules([
321
- johnIpMask_0_100_AccessRule,
322
- johnIp_100_AccessRule,
323
- globalIpMask_100_200_AccessRule,
324
- doeIpMask_200_300AccessRule,
325
- ]);
326
- const ip_0_accessRules = await accessRulesReader.findRules({
327
- policyScope: {
328
- clientId: johnId,
329
- },
330
- userScope: {
331
- numericIp: BigInt(0),
332
- },
333
- userScopeMatch: FilterScopeMatch.Greedy,
334
- });
335
- const ip_99_accessRules = await accessRulesReader.findRules({
336
- policyScope: {
337
- clientId: johnId,
338
- },
339
- userScope: {
340
- numericIp: BigInt(99),
341
- },
342
- userScopeMatch: FilterScopeMatch.Greedy,
343
- });
344
- const ip_100_accessRules = await accessRulesReader.findRules({
345
- policyScope: {
346
- clientId: johnId,
347
- },
348
- userScope: {
349
- numericIp: BigInt(100),
350
- },
351
- userScopeMatch: FilterScopeMatch.Greedy,
352
- });
353
- const ip_101_accessRules = await accessRulesReader.findRules({
354
- policyScope: {
355
- clientId: johnId,
356
- },
357
- userScope: {
358
- numericIp: BigInt(101),
359
- },
360
- userScopeMatch: FilterScopeMatch.Greedy,
361
- });
362
- const ip_201_accessRules = await accessRulesReader.findRules({
363
- policyScope: {
364
- clientId: johnId,
365
- },
366
- userScope: {
367
- numericIp: BigInt(201),
368
- },
369
- userScopeMatch: FilterScopeMatch.Greedy,
370
- });
371
- const indexRecordsCount = await getIndexRecordsCount(indexName);
372
- expect(indexRecordsCount).toBe(4);
373
- expect(ip_0_accessRules).toEqual([johnIpMask_0_100_AccessRule]);
374
- expect(ip_99_accessRules).toEqual([johnIpMask_0_100_AccessRule]);
375
- expect(ip_100_accessRules).toEqual([
376
- johnIpMask_0_100_AccessRule,
377
- johnIp_100_AccessRule,
378
- globalIpMask_100_200_AccessRule,
379
- ]);
380
- expect(ip_101_accessRules).toEqual([globalIpMask_100_200_AccessRule]);
381
- expect(ip_201_accessRules).toEqual([]);
382
- });
383
- test("finds rules by exact ip match with exact policy match", async () => {
384
- const johnId = getUniqueString();
385
- const johnIpMask_0_100_AccessRule = {
386
- clientId: johnId,
387
- type: AccessPolicyType.Block,
388
- numericIpMaskMin: BigInt(0),
389
- numericIpMaskMax: BigInt(100),
390
- };
391
- const johnIp_100_AccessRule = {
392
- clientId: johnId,
393
- type: AccessPolicyType.Block,
394
- numericIp: BigInt(100),
395
- };
396
- const globalIpMask_100_200_AccessRule = {
397
- type: AccessPolicyType.Block,
398
- numericIpMaskMin: BigInt(100),
399
- numericIpMaskMax: BigInt(200),
400
- };
401
- const globalIp_100_AccessRule = {
402
- type: AccessPolicyType.Block,
403
- numericIp: BigInt(100),
404
- };
405
- await insertRules([
406
- johnIpMask_0_100_AccessRule,
407
- johnIp_100_AccessRule,
408
- globalIpMask_100_200_AccessRule,
409
- globalIp_100_AccessRule,
410
- ]);
411
- const ip_0_accessRules = await accessRulesReader.findRules({
412
- policyScope: {
413
- clientId: johnId,
414
- },
415
- policyScopeMatch: FilterScopeMatch.Exact,
416
- userScope: {
417
- numericIp: BigInt(0),
418
- },
419
- userScopeMatch: FilterScopeMatch.Exact,
420
- });
421
- const ip_100_accessRules = await accessRulesReader.findRules({
422
- policyScope: {
423
- clientId: johnId,
424
- },
425
- policyScopeMatch: FilterScopeMatch.Exact,
426
- userScope: {
427
- numericIp: BigInt(100),
428
- },
429
- userScopeMatch: FilterScopeMatch.Exact,
430
- });
431
- const indexRecordsCount = await getIndexRecordsCount(indexName);
432
- expect(indexRecordsCount).toBe(4);
433
- expect(ip_0_accessRules).toEqual([johnIpMask_0_100_AccessRule]);
434
- expect(ip_100_accessRules).toEqual([
435
- johnIpMask_0_100_AccessRule,
436
- johnIp_100_AccessRule,
437
- ]);
438
- });
439
- test("finds rules by exact ip match with exact policy match 2", async () => {
440
- const johnId = getUniqueString();
441
- const johnIp = BigInt(100);
442
- const johnIpMask_0_100_AccessRule = {
443
- clientId: johnId,
444
- type: AccessPolicyType.Block,
445
- numericIpMaskMin: BigInt(0),
446
- numericIpMaskMax: johnIp,
447
- };
448
- const johnIp_100_AccessRule = {
449
- clientId: johnId,
450
- type: AccessPolicyType.Block,
451
- numericIp: johnIp,
452
- };
453
- const globalIpMask_100_200_AccessRule = {
454
- type: AccessPolicyType.Block,
455
- numericIpMaskMin: johnIp,
456
- numericIpMaskMax: BigInt(200),
457
- };
458
- const globalIp_100_AccessRule = {
459
- type: AccessPolicyType.Block,
460
- numericIp: johnIp,
461
- };
462
- await insertRules([
463
- johnIpMask_0_100_AccessRule,
464
- johnIp_100_AccessRule,
465
- globalIpMask_100_200_AccessRule,
466
- globalIp_100_AccessRule,
467
- ]);
468
- const ip_0_accessRules = await accessRulesReader.findRules({
469
- policyScope: {
470
- clientId: johnId,
471
- },
472
- policyScopeMatch: FilterScopeMatch.Exact,
473
- userScope: {
474
- numericIp: BigInt(0),
475
- },
476
- userScopeMatch: FilterScopeMatch.Exact,
477
- });
478
- const ip_100_accessRules = await accessRulesReader.findRules({
479
- policyScopeMatch: FilterScopeMatch.Exact,
480
- userScope: {
481
- numericIp: johnIp,
482
- },
483
- userScopeMatch: FilterScopeMatch.Exact,
484
- });
485
- const indexRecordsCount = await getIndexRecordsCount(indexName);
486
- expect(indexRecordsCount).toBe(4);
487
- expect(ip_0_accessRules).toEqual([johnIpMask_0_100_AccessRule]);
488
- expect(ip_100_accessRules).toEqual([
489
- globalIpMask_100_200_AccessRule,
490
- globalIp_100_AccessRule,
491
- ]);
492
- });
493
- test("does not find rules when some criteria do not match and user scope match is exact", async () => {
494
- const accessRule = {
495
- type: AccessPolicyType.Restrict,
496
- clientId: "clientId",
497
- userAgentHash: "userAgentHash1",
498
- ja4Hash: "ja4Hash",
499
- };
500
- await insertRules([accessRule]);
501
- const query = {
502
- policyScope: {
503
- clientId: "clientId",
504
- },
505
- policyScopeMatch: FilterScopeMatch.Exact,
506
- userScope: {
507
- ja4Hash: "ja4Hash",
508
- userAgentHash: "userAgentHash2",
509
- },
510
- userScopeMatch: FilterScopeMatch.Exact,
511
- };
512
- const foundAccessRules = await accessRulesReader.findRules(query);
513
- expect(foundAccessRules).toEqual([]);
514
- });
515
- test("does not find rules when query is more exact than rule and user scope match is exact", async () => {
516
- const accessRule = {
517
- type: AccessPolicyType.Restrict,
518
- clientId: "clientId",
519
- ja4Hash: "ja4Hash",
520
- };
521
- await insertRules([accessRule]);
522
- const query = {
523
- policyScope: {
524
- clientId: "clientId",
525
- },
526
- policyScopeMatch: FilterScopeMatch.Exact,
527
- userScope: {
528
- ja4Hash: "ja4Hash",
529
- userAgentHash: "userAgentHash",
530
- },
531
- userScopeMatch: FilterScopeMatch.Exact,
532
- };
533
- const foundAccessRules = await accessRulesReader.findRules(query);
534
- expect(foundAccessRules).toEqual([]);
535
- });
536
- test("does find rules when query is more exact than rule and user scope match is greedy", async () => {
537
- const accessRule = {
538
- type: AccessPolicyType.Restrict,
539
- clientId: "clientId",
540
- ja4Hash: "ja4Hash",
541
- };
542
- await insertRules([accessRule]);
543
- const query = {
544
- policyScope: {
545
- clientId: "clientId",
546
- },
547
- policyScopeMatch: FilterScopeMatch.Exact,
548
- userScope: {
549
- ja4Hash: "ja4Hash",
550
- userAgentHash: "userAgentHash",
551
- },
552
- userScopeMatch: FilterScopeMatch.Greedy,
553
- };
554
- const foundAccessRules = await accessRulesReader.findRules(query);
555
- expect(foundAccessRules).toEqual([accessRule]);
556
- });
557
- test("does find rules when some criteria do not match and user scope match is exact", async () => {
558
- const accessRule = {
559
- type: AccessPolicyType.Restrict,
560
- clientId: "clientId",
561
- userAgentHash: "userAgentHash",
562
- ja4Hash: "ja4Hash",
563
- };
564
- getAccessRuleRedisKey(accessRule);
565
- await insertRules([accessRule]);
566
- const query = {
567
- policyScope: {
568
- clientId: "clientId",
569
- },
570
- policyScopeMatch: FilterScopeMatch.Exact,
571
- userScope: {
572
- ja4Hash: "ja4Hash",
573
- userAgentHash: "userAgentHash",
574
- },
575
- userScopeMatch: FilterScopeMatch.Greedy,
576
- };
577
- const foundAccessRules = await accessRulesReader.findRules(query);
578
- expect(foundAccessRules).toEqual([accessRule]);
579
- });
580
- test("if an ip rule and an ip mask rule is applied for a single IP at client level, both rules are returned with the more specific IP rule being first in the list", async () => {
581
- const accessRule = {
582
- type: AccessPolicyType.Restrict,
583
- clientId: "clientId",
584
- numericIp: BigInt(10),
585
- };
586
- const ipRangeAccessRule = {
587
- type: AccessPolicyType.Restrict,
588
- clientId: "clientId",
589
- numericIpMaskMin: BigInt(10),
590
- numericIpMaskMax: BigInt(20),
591
- };
592
- await insertRules([accessRule, ipRangeAccessRule]);
593
- const query = {
594
- policyScope: {
595
- clientId: "clientId",
596
- },
597
- policyScopeMatch: FilterScopeMatch.Exact,
598
- userScope: {
599
- numericIp: BigInt(10),
600
- },
601
- userScopeMatch: FilterScopeMatch.Exact,
602
- };
603
- const foundAccessRules = await accessRulesReader.findRules(query);
604
- expect(foundAccessRules).toEqual([accessRule, ipRangeAccessRule]);
605
- });
606
- });
607
- afterAll(async () => {
608
- await redisClient.flushAll();
609
- });
610
- });
611
- //# sourceMappingURL=redisRulesStorage.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redisRulesStorage.integration.test.js","sourceRoot":"","sources":["../../../src/tests/redis/redisRulesStorage.integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { type RedisClientType } from "redis";
2
- export declare const createTestRedisClient: () => Promise<RedisClientType>;
3
- //# sourceMappingURL=testRedisClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testRedisClient.d.ts","sourceRoot":"","sources":["../../../src/tests/redis/testRedisClient.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,eAAe,EAAgB,MAAM,OAAO,CAAC;AAE3D,eAAO,MAAM,qBAAqB,QAAa,OAAO,CAAC,eAAe,CAOtC,CAAC"}
@@ -1,8 +0,0 @@
1
- import { createClient } from "redis";
2
- export const createTestRedisClient = async () => (await createClient({
3
- url: "redis://localhost:6379",
4
- password: "root",
5
- })
6
- .on("error", (err) => console.log("Redis Client Error", err))
7
- .connect());
8
- //# sourceMappingURL=testRedisClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testRedisClient.js","sourceRoot":"","sources":["../../../src/tests/redis/testRedisClient.ts"],"names":[],"mappings":"AAaA,OAAO,EAAwB,YAAY,EAAE,MAAM,OAAO,CAAC;AAE3D,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAA8B,EAAE,CACzE,CAAC,MAAM,YAAY,CAAC;IAEnB,GAAG,EAAE,wBAAwB;IAC7B,QAAQ,EAAE,MAAM;CAChB,CAAC;KACA,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;KAC5D,OAAO,EAAE,CAAoB,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { Logger } from "@prosopo/common";
2
- declare const loggerMockedInstance: Logger;
3
- export { loggerMockedInstance };
4
- //# sourceMappingURL=testLogger.d.ts.map