Calum H.
b46f6d0141
feat: moderation locking ( #5070 )
...
* feat: base locking impl
* feat: lock logic in place in rev endpoint + fetch rev
* feat: frontend impl and finalize
* feat: auto skip if using the moderation queue page
* fix: qa issues
* fix: async state + locking fix
* fix: lint
* fix: fmt
* fix: qa issue
* fix: qa + redirect bug
* fix: lint
* feat: delete all locks endpoint for admins
* fix: dedupe
* fix: fmt
* fix: project redirect move to middleware
* fix: lint
2026-01-12 17:08:30 +00:00
François-Xavier Talbot
ff222aa168
PG/RedisPool configuration/o11y improvements ( #5032 )
...
* Don't retain Redis connections while doing database queries
* Optional REDIS_WAIT_TIMEOUT_MS
* Attach more data to CacheTimeout errrors
* Fix locks_released
* Fmt
* Set default REDIS_WAIT_TIMEOUT_MS to 15s
* Fix lint
* Close Redis connections idle for > 5 minutes
* Exponential backoff on cache spin lock
2026-01-08 20:47:13 +01:00
aecsocket
39f2b0ecb6
Technical review queue ( #4775 )
...
* chore: fix typo in status message
* feat(labrinth): overhaul malware scanner report storage and routes
* chore: address some review comments
* feat: add Delphi to Docker Compose `with-delphi` profile
* chore: fix unused import Clippy lint
* feat(labrinth/delphi): use PAT token authorization with project read scopes
* chore: expose file IDs in version queries
* fix: accept null decompiled source payloads from Delphi
* tweak(labrinth): expose base62 file IDs more consistently for Delphi
* feat(labrinth/delphi): support new Delphi report severity field
* chore(labrinth): run `cargo sqlx prepare` to fix Docker build errors
* tweak: add route for fetching Delphi issue type schema, abstract Labrinth away from issue types
* chore: run `cargo sqlx prepare`
* chore: fix typo on frontend generated state file message
* feat: update to use new Delphi issue schema
* wip: tech review endpoints
* wip: add ToSchema for dependent types
* wip: report issues return
* wip
* wip: returning more data
* wip
* Fix up db query
* Delphi configuration to talk to Labrinth
* Get Delphi working with Labrinth
* Add Delphi dummy fixture
* Better Delphi logging
* Improve utoipa for tech review routes
* Add more sorting options for tech review queue
* Oops join
* New routes for fetching issues and reports
* Fix which kind of ID is returned in tech review endpoints
* Deduplicate tech review report rows
* Reduce info sent for projects
* Fetch more thread info
* Address PR comments
* fix ci
* fix postgres version mismatch
* fix version creation
* Implement routes
* fix up tech review
* Allow adding a moderation comment to Delphi rejections
* fix up rebase
* exclude rejected projects from tech review
* add status change msg to tech review thread
* cargo sqlx prepare
* also ignore withheld projects
* More filtering on issue search
* wip: report routes
* Fix up for build
* cargo sqlx prepare
* fix thread message privacy
* New tech review search route
* submit route
* details have statuses now
* add default to drid status
* dedup issue details
* fix sqlx query on empty files
* fixes
* Dedupe issue detail statuses and message on entering tech rev
* Fix qa issues
* Fix qa issues
* fix review comments
* typos
* fix ci
* feat: tech review frontend (#4781 )
* chore: fix typo in status message
* feat(labrinth): overhaul malware scanner report storage and routes
* chore: address some review comments
* feat: add Delphi to Docker Compose `with-delphi` profile
* chore: fix unused import Clippy lint
* feat(labrinth/delphi): use PAT token authorization with project read scopes
* chore: expose file IDs in version queries
* fix: accept null decompiled source payloads from Delphi
* tweak(labrinth): expose base62 file IDs more consistently for Delphi
* feat(labrinth/delphi): support new Delphi report severity field
* chore(labrinth): run `cargo sqlx prepare` to fix Docker build errors
* tweak: add route for fetching Delphi issue type schema, abstract Labrinth away from issue types
* chore: run `cargo sqlx prepare`
* chore: fix typo on frontend generated state file message
* feat: update to use new Delphi issue schema
* wip: tech review endpoints
* wip: add ToSchema for dependent types
* wip: report issues return
* wip
* wip: returning more data
* wip
* Fix up db query
* Delphi configuration to talk to Labrinth
* Get Delphi working with Labrinth
* Add Delphi dummy fixture
* Better Delphi logging
* Improve utoipa for tech review routes
* Add more sorting options for tech review queue
* Oops join
* New routes for fetching issues and reports
* Fix which kind of ID is returned in tech review endpoints
* Deduplicate tech review report rows
* Reduce info sent for projects
* Fetch more thread info
* Address PR comments
* fix ci
* fix ci
* fix postgres version mismatch
* fix version creation
* Implement routes
* feat: batch scan alert
* feat: layout
* feat: introduce surface variables
* fix: theme selector
* feat: rough draft of tech review card
* feat: tab switcher
* feat: batch scan btn
* feat: api-client module for tech review
* draft: impl
* feat: auto icons
* fix: layout issues
* feat: fixes to code blocks + flag labels
* feat: temp remove mock data
* fix: search sort types
* fix: intl & lint
* chore: re-enable mock data
* fix: flag badges + auto open first issue in file tab
* feat: update for new routes
* fix: more qa issues
* feat: lazy load sources
* fix: re-enable auth middleware
* feat: impl threads
* fix: lint & severity
* feat: download btn + switch to using NavTabs with new local mode option
* feat: re-add toplevel btns
* feat: reports page consistency
* fix: consistency on project queue
* fix: icons + sizing
* fix: colors and gaps
* fix: impl endpoints
* feat: load all flags on file tab
* feat: thread generics changes
* feat: more qa
* feat: fix collapse
* fix: qa
* feat: msg modal
* fix: ISO import
* feat: qa fixes
* fix: empty state basic
* fix: collapsible region
* fix: collapse thread by default
* feat: rough draft of new process/flow
* fix labrinth build
* fix thread message privacy
* New tech review search route
* feat: qa fixes
* feat: QA changes
* fix: verdict on detail not whole issue
* fix: lint + intl
* fix: lint
* fix: thread message for tech rev verdict
* feat: use anim frames
* fix: exports + typecheck
* polish: qa changes
* feat: qa
* feat: qa polish
* feat: fix malic modal
* fix: lint
* fix: qa + lint
* fix: pagination
* fix: lint
* fix: qa
* intl extract
* fix ci
---------
Signed-off-by: Calum H. <contact@cal.engineer >
Co-authored-by: Alejandro González <me@alegon.dev >
Co-authored-by: aecsocket <aecsocket@tutanota.com >
---------
Signed-off-by: Calum H. <contact@cal.engineer >
Co-authored-by: Alejandro González <me@alegon.dev >
Co-authored-by: Calum H. <contact@cal.engineer >
2025-12-20 11:43:04 +00:00
aecsocket
783aaa6553
Add revenue split to affiliate codes v2 ( #4672 )
...
* wip: affiliate payouts again
* Implement affiliate payout queue
* Deactivate subscription affiliations on cancellation
* Remove a test that never compiled in the first place
* Update sqlx cache
* address some PR comments
* more comments
* wip: handle refund charges
* cargo sqlx prepare
* Address PR comments
* cargo sqlx prepare
2025-12-02 00:01:24 +00:00
François-Xavier Talbot
eeed4e572d
Credit subscriptions ( #4575 )
...
* Implement subscription crediting
* chore: query cache, clippy, fmt
* Improve code, improve query for next open charge
* chore: query cache, clippy, fmt
* Move server ID copy button up
* Node + region crediting
* Make it less ugly
* chore: query cache, clippy, fmt
* Bugfixes
* Fix lint
* Adjust migration
* Adjust migration
* Remove billing change
* Move DEFAULT_CREDIT_EMAIL_MESSAGE to utils.ts
* Lint
* Merge
* bump clickhouse, disable validation
* tombi fmt
* Update cargo lock
2025-10-20 17:35:44 +00:00
aecsocket
f466470d06
Hard caps on creating projects/orgs/collections ( #4430 )
...
* implement backend limits on project creation
* implement collection, org creation hard caps
* Fix limit api
* Fix clippy
* Fix limits
* Update sqlx queries
* Address PR comments on user limit structure
* sqlx prepare and clippy
* fix test maybe
2025-09-28 10:01:00 +00:00
François-Xavier Talbot
4228a193e9
Charge tax on products ( #4361 )
...
* Initial Anrok integration
* Query cache, fmt, clippy
* Fmt
* Use payment intent function in edit_subscription
* Attach Anrok client, use payments in index_billing
* Integrate Anrok with refunds
* Bug fixes
* More bugfixes
* Fix resubscriptions
* Medal promotion bugfixes
* Use stripe metadata constants everywhere
* Pre-fill values in products_tax_identifiers
* Cleanup billing route module
* Cleanup
* Email notification for tax charge
* Don't charge tax on users which haven't been notified of tax change
* Fix taxnotification.amount templates
* Update .env.docker-compose
* Update .env.local
* Clippy
* Fmt
* Query cache
* Periodically update tax amount on upcoming charges
* Fix queries
* Skip indexing tax amount on charges if no charges to process
* chore: query cache, clippy, fmt
* Fix a lot of things
* Remove test code
* chore: query cache, clippy, fmt
* Fix money formatting
* Fix conflicts
* Extra documentation, handle tax association properly
* Track loss in tax drift
* chore: query cache, clippy, fmt
* Add subscription.id variable
* chore: query cache, clippy, fmt
* chore: query cache, clippy, fmt
2025-09-25 11:29:29 +00:00
aecsocket
4def0e8407
Initial affiliate codes implementation ( #4382 )
...
* Initial affiliate codes implementation
* some more docs to codes
* sqlx prepare
* Address PR comments
* Address more PR comments
* fix clippy
* Switch to using Json<T> for type-safe responses
2025-09-18 15:43:34 +00:00
François-Xavier Talbot
6da190ed01
New Creator Notifications ( #4383 )
...
* Some new notification types
* Fix error
* Use existing DB models rather than inline queries
* Fix template fillout
* Fix ModerationThreadMessageReceived
* Insert more notifications, fix some formatting
* chore: query cache, clippy, fmt
* chore: query cache, clippy, fmt
* Use outer transactions to insert notifications instead of creating a new one
* Join futures
2025-09-17 19:37:21 +00:00
François-Xavier Talbot
902d749293
[DO NOT MERGE] Email notification system ( #4338 )
...
* Migration
* Fixup db models
* Redis
* Stuff
* Switch PKs to BIGSERIALs, insert to notifications_deliveries when inserting notifications
* Queue, templates
* Query cache
* Fixes, fixtures
* Perf, cache template data & HTML bodies
* Notification type configuration, ResetPassword notification type
* Reset password
* Query cache
* Clippy + fmt
* Traces, fix typo, fix user email in ResetPassword
* send_email
* Models, db
* Remove dead code, adjust notification settings in migration
* Clippy fmt
* Delete dead code, fixes
* Fmt
* Update apps/labrinth/src/queue/email.rs
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com >
* Remove old fixtures
* Unify email retry delay
* Fix type
* External notifications
* Remove `notifications_types_preference_restrictions`, as user notification preferences is out of scope for this PR
* Query cache, fmt, clippy
* Fix join in get_many_user_exposed_on_site
* Remove migration comment
* Query cache
* Update html body urls
* Remove comment
* Add paymentfailed.service variable to PaymentFailed notification variant
* Fix compile error
* Fix deleting notifications
* Update apps/labrinth/src/database/models/user_item.rs
Co-authored-by: Josiah Glosson <soujournme@gmail.com >
Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com >
* Update apps/labrinth/src/database/models/user_item.rs
Co-authored-by: Josiah Glosson <soujournme@gmail.com >
Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com >
* Update Cargo.toml
Co-authored-by: Josiah Glosson <soujournme@gmail.com >
Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com >
* Update apps/labrinth/migrations/20250902133943_notification-extension.sql
Co-authored-by: Josiah Glosson <soujournme@gmail.com >
Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com >
* Address review comments
* Fix compliation
* Update apps/labrinth/src/database/models/users_notifications_preferences_item.rs
Co-authored-by: Josiah Glosson <soujournme@gmail.com >
Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com >
* Use strfmt to format emails
* Configurable Reply-To
* Configurable Reply-To
* Refactor for email background task
* Send some emails inline
* Fix account creation email check
* Revert "Use strfmt to format emails"
This reverts commit e0d6614afe51fa6349918377e953ba294c34ae0b.
* Reintroduce fill_template
* Set password reset email inline
* Process more emails per index
* clippy fmt
* Query cache
---------
Signed-off-by: François-Xavier Talbot <108630700+fetchfern@users.noreply.github.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
Co-authored-by: Josiah Glosson <soujournme@gmail.com >
2025-09-15 19:02:29 +00:00
François-Xavier Talbot
006b19e3c9
Creator tax compliance ( #4254 )
...
* Initial implementation
* Remove test code
* Query cache
* Appease clippy
* Precise TIN/SSN
* Make tax threshold customizable via env variable
* Address review comments
2025-08-25 16:34:58 +00:00
François-Xavier Talbot
9497ba70a4
Offers, redemption, preview subscriptions ( #4121 )
...
* Initial db migration/impl, guarded partner routes
* Add guard to /redeem
* Add `public` column to products prices, only expose public prices
* Query cache
* Add partner subscription type
* 5 days subscription interval, metadata
* Create server on redeem
* Query cache
* Fix race condition
* Unprovision Medal subscriptions
* Consider due expiring charge as unprovisionable
* Query cache
* Use a queue
* Promote to full subscription, fmt + clippy
* Patch expiring charge on promotion, comments
* Additional comments
* Add `tags` field to Archon /create request
* Address review comments
* Query cache
* Final fixes to edit_subscription
* Appease clippy
* fmt
2025-08-11 21:40:58 +00:00
Josiah Glosson
cc34e69524
Initial shared instances backend ( #3800 )
...
* Create base shared instance migration and initial routes
* Fix build
* Add version uploads
* Add permissions field for shared instance users
* Actually use permissions field
* Add "public" flag to shared instances that allow GETing them without authorization
* Add the ability to get and list shared instance versions
* Add the ability to delete shared instance versions
* Fix build after merge
* Secured file hosting (#3784 )
* Remove Backblaze-specific file-hosting backend
* Added S3_USES_PATH_STYLE_BUCKETS
* Remove unused file_id parameter from delete_file_version
* Add support for separate public and private buckets in labrinth::file_hosting
* Rename delete_file_version to delete_file
* Add (untested) get_url_for_private_file
* Remove url field from shared instance routes
* Remove url field from shared instance routes
* Use private bucket for shared instance versions
* Make S3 environment variables fully separate between public and private buckets
* Change file host expiry for shared instances to 180 seconds
* Fix lint
* Merge shared instance migrations into a single migration
* Replace shared instance owners with Ghost instead of deleting the instance
2025-06-19 19:46:12 +00:00
Josiah Glosson
4e4a7be7ef
Commonize and distinguish a lot of struct names in labrinth::database::models ( #3691 )
2025-05-24 09:38:43 +00:00
Geometrically
47b0ccdf78
Friends system for app ( #2958 )
...
* Friends system for app
* Fix impl issues
* move friends to in-memory store
2024-11-26 18:23:29 -07:00
Jai A
e3a3379615
move to monorepo dir
2024-10-16 14:11:42 -07:00