Commit Graph

34 Commits

Author SHA1 Message Date
Copilot 7d1247848b Add organization transfer feature (#240)
* Initial plan

* Initial plan for organization transfer feature

Co-authored-by: ribtoks <505555+ribtoks@users.noreply.github.com>

* Add organization transfer feature with UI, DB layer, and integration test

Co-authored-by: ribtoks <505555+ribtoks@users.noreply.github.com>

* Address PR feedback: verify old owner in property transfer, swap org membership, show masked email in audit, add negative tests

Co-authored-by: ribtoks <505555+ribtoks@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: ribtoks <505555+ribtoks@users.noreply.github.com>
2026-01-08 20:25:09 +02:00
Taras Kushnir cbdc994e0d Add Org scope to API keys. closes PrivateCaptcha/issues#237 2025-12-22 18:54:47 +01:00
Taras Kushnir 1478f7a376 Add read-only attribute to the scope of API key 2025-12-22 14:33:26 +01:00
Taras Kushnir 3475c9c1e2 Add API to batch-update properties. related PrivateCaptcha/issues#45 2025-12-18 14:28:55 +01:00
Taras Kushnir 05e653631e Add pagination support for org properties. related PrivateCaptcha/issues#45 2025-12-17 18:32:41 +01:00
Taras Kushnir b0c7b4c957 Cosmetic improvement 2025-12-17 18:16:02 +01:00
Taras Kushnir 653b91f86e Add API support to delete properties. related PrivateCaptcha/issues#45 2025-12-17 12:55:49 +01:00
Taras Kushnir b959c00af8 Add create properties bulk API. related PrivateCaptcha/issues#45 2025-12-15 15:43:05 +01:00
Taras Kushnir f0db3be14d Add audit log source 2025-12-08 13:34:20 +01:00
Taras Kushnir 57636bbf48 Add API key scope 2025-12-08 12:44:42 +01:00
Taras Kushnir 567c7ddb00 Bump sqlc to 1.30.0 2025-12-06 14:04:04 +01:00
Taras Kushnir e03bf4f5ae Check if lock exists before trying to obtain it
Fixes infra warning about percent of rolled back transactions in PG
2025-12-06 14:03:30 +01:00
Taras Kushnir fa8422d1c7 Add basic auditlogs implementation. closes PrivateCaptcha/issues#204 2025-11-22 19:39:18 +02:00
Taras Kushnir 6726ec7723 Remove unused code 2025-11-20 09:33:33 +02:00
Taras Kushnir 73346ec4f6 Add external_email column to subscriptions 2025-11-11 18:38:35 +02:00
Taras Kushnir 9b3aa0ea94 Add functionality to move property. closes PrivateCaptcha/issues#151 2025-11-11 18:16:40 +02:00
Taras Kushnir 98cd19d104 Add functionality to rotate API keys. closes PrivateCaptcha/issues#188 2025-10-08 14:32:48 +03:00
Taras Kushnir 67e0937d0d Remove unused code 2025-09-15 08:57:07 +03:00
Taras Kushnir 2a5b525806 Remove query leftovers 2025-09-15 08:53:13 +03:00
Taras Kushnir affbb60a43 Drop allow_replay column for properties 2025-08-23 20:04:31 +03:00
Taras Kushnir 1d62e7f150 Start migration from allow_replay to max_replay_count logic 2025-08-23 14:53:32 +03:00
Taras Kushnir 2e64113005 Remove unused code 2025-08-22 09:44:47 +03:00
Taras Kushnir 8c8cfaf485 Add maintenance job to expire internal trials 2025-08-17 14:57:43 +03:00
Taras Kushnir 945100be86 Add circuit breaker for notifications processing 2025-08-17 12:50:00 +03:00
Taras Kushnir 2aabb90d66 Add requires_subscription flag for notifications 2025-08-16 17:01:12 +03:00
Taras Kushnir 1484d3c3d4 Add from parameter to expired trials query 2025-08-16 13:35:30 +03:00
Taras Kushnir 6c76c34df0 Add maintenance job to delete trial accounts 2025-08-16 10:42:46 +03:00
Taras Kushnir 335ea6dcb6 Store also plain-text version of notification template in DB 2025-08-16 09:01:03 +03:00
Taras Kushnir 92b35ebb91 Introduce concept of persistent user notifications
Fix tests
2025-08-15 17:40:51 +03:00
Taras Kushnir ff00d6fa1f Add notifications for expiring API keys. closes PrivateCaptcha/issues#1 2025-08-14 20:16:49 +03:00
Taras Kushnir fc8c04f686 Add notifications support 2025-08-14 10:52:45 +03:00
Taras Kushnir bf0598c1a9 Make siteverify API more resilient for unauthorized access
- more aggressive caching of API keys and added cache warmup
- remove direct DB access in APIkey() middleware immediately
- decrease resources usage for test puzzles
- decrease cache collision possibility for cached solved puzzles
- cosmetic improvement in rate limiter and leaky bucket Updater logic
- move user limits check and API key backfill to a separate goroutine
2025-06-21 14:16:28 +03:00
Taras Kushnir 9ec1ef8d65 Refactor caching layer
Main reason being otter/v2 release with APIs for sliding expiration.

- added new cache API to use Loader logic from otter/v2 (fetch from DB)
- main direction of work is improving "negative caching" performance
  (currently it is still intertwined with the main cache)
- expose new Prometheus metric for cache hit ratio
2025-06-21 14:16:28 +03:00
Taras Kushnir 4951055189 Initial commit 2025-05-31 10:56:00 +03:00