Commit Graph

4730 Commits (5ebc1af91e96ca065ea55f20e94de5d874a442c8)

Author SHA1 Message Date
Daniel Supernault 9e69d449d5
Update NotificationService 2 weeks ago
Your Name 7a420112bf Normalize cropped story images to the 1080x1920 canvas (#7215)
cropPhoto() used coverDown(1080, 1920), which only downscales, so an
undersized crop was stored at its original size (e.g. 110x196). Remote
servers then dropped the image story for not matching expected story
dimensions while videos federated. Use cover() so small crops are scaled
up to fill the canvas.

Note: the complementary remote-side validator relaxation (StoryFetch
validateImageFile) is tracked separately and not included here.
2 weeks ago
Your Name c0f29d4a4b Fix web notifications not loading (#7195)
Notification status hydration compared item_type strictly against
Status::class (App\Models\Status). Rows created before the App\ ->
App\Models\ namespace migration store the legacy 'App\Status' morph-map
alias, so the comparison failed and favourite/comment/mention
notifications came back with no attached status. The web UI filters those
out client-side but keeps paginating (response never empty), leaving the
infinite-scroll loader spinning forever.

- NotificationTransformer + Mastodon NotificationTransformer: match both
  the legacy alias and the current FQCN when hydrating status.
- NotificationService::buildNotification: same alias-aware deleted-item guard.
- NotificationService::getMaxPage/getMinPage: filter out unrenderable
  notifications (status-type without a hydrated status) so the endpoint
  never returns rows the UI discards, fixing pagination termination; warn
  on unexpected notification types.
- Tests for transformer hydration (legacy + current), renderable filtering,
  the unexpected-type warning, and pagination termination.
2 weeks ago
Your Name 341351c47e Remove sha256 verification from MediaMoveStorageLocalToCloud
original_sha256 is the pre-optimization upload hash and can never match the
optimized local file, so comparing against it is not a valid integrity
check for migration. Drop the --verify-sha256 option and the checksum step
entirely; verify now relies on cloud-object existence and size parity.
2 weeks ago
Your Name 438560415a Revert debug-by-default in MediaMoveStorageLocalToCloud
The cloud migration failure (stale original_sha256 verify) is resolved, so
the temporary default-on debug is no longer needed. Restore --debug to a
bare, off-by-default flag and remove the debugEnabled() string-parsing
helper.
2 weeks ago
Your Name 441a94e731 Make original_sha256 verify opt-in in MediaMoveStorageLocalToCloud
original_sha256 is the hash of the file as originally uploaded, but the
async optimize pipeline (ImageResize/ImageUpdate) rewrites the local file
in place and never updates that column. Verifying the current local bytes
against it made every optimized image fail with sha256_mismatch, so the
migration reported moved=0 and exited 1.

Add a --verify-sha256 flag (off by default) that gates the checksum step.
By default verify relies on cloud-object existence and size parity, which
is the only signal that actually describes the uploaded copy. Add tests
covering both the default (migrates) and opt-in (fails) paths.
2 weeks ago
Your Name b2a068b934 polish 2 weeks ago
Your Name 0c68b6a680 Add failure logging to admin:MediaMoveStorageLocalToCloud and enable debug by default
The scheduled command only surfaced 'exit code 1' with no cause. Add
structured Log::error entries at every failure path (cloud disk
unresolvable/unconfigured, cloud storage disabled, invalid --before-id,
candidate fetch failure, per-media failure with full context, and a
run-level summary when failures occur).

Also make --debug default to true (now a valued option) so production
runs emit verbose routing detail while this is investigated; pass
--debug=false to silence.
2 weeks ago
Your Name 8aa3144745 Fix story video upload probe path (#7203)
apiV1Add passed an absolute path to FFMpeg::open(), which laravel-ffmpeg
resolves relative to the local disk root, producing a doubled path and an
ffprobe 'Unable to probe / No such file or directory' failure.

Open the file via the disk instead: FFMpeg::fromDisk('local')->open($path)
for local storage, and an on-demand local disk rooted at the temp dir for
cloud storage.

Adds feature tests that pin the disk-relative path resolution.
2 weeks ago
Shlee ad686571bf
Change storage size calculation from floor to ceil 2 weeks ago
Shlee caffc40a45
Fix URL construction for API timeline request 2 weeks ago
Shlee 289251985a
Merge pull request #7199 from pixelfed/fix/story-publish-validation-exception
Laravel 13 Prep: Stop swallowing overlay ValidationException into a generic 500
2 weeks ago
Your Name 62d3bc8406 Stop swallowing overlay ValidationException into a generic 500
publishNext() throws ValidationException::withMessages() for invalid
story overlays (bad text/hashtag/mention/url/type), but the enclosing
catch (\Exception $e) caught it too, since ValidationException extends
Exception. Clients got a generic 500 "Failed to create story" instead
of the intended 422 with field-level errors, and the log was flooded
with ordinary user-input validation failures logged as server errors.
Catch ValidationException separately, roll back, and rethrow it so
Laravel's exception handler renders the normal 422 response.
2 weeks ago
Your Name 8fa18ff8c6 Fix dangling DB transactions in CustomFilterController
store() and update() open a manual DB::beginTransaction() but had early
return paths (duplicate keyword, keyword not found, per-filter keyword
limit) that hit neither DB::commit() nor the catch block's rollback,
leaving the transaction open past the end of the request. Add the
missing DB::rollBack() call on each early-exit branch, matching the
manual-transaction pattern used elsewhere in the app.
2 weeks ago
Your Name bbe7cfa8e1 Split Horizon into priority-based supervisors, add balanceCooldown
and notification routing

All 15 queues previously ran through one auto-balanced supervisor.
Horizon's `balance: auto` does not honor queue array order for
priority, so despite queue names implying priority ('high' vs 'low'),
a burst on any one queue could starve any other sharing that
supervisor - e.g. a burst of mmo (image/video optimization, 23
dispatch sites, CPU/IO heavy) could delay high-queue DM/follow
delivery just as easily as it could delay low-queue background work.

Split into 4 supervisors grouped by actual job characteristics
(checked via grep across every ->onQueue() call site, not guessed):
- supervisor-priority: high, inbox, pushnotify, follow, default,
  shared - user-facing federation/DM/notification delivery.
- supervisor-fanout: feed, story, groups - bursty timeline/story
  fanout writes triggered by posts, likes, and follows.
- supervisor-media: mmo - image/video optimize/resize/thumbnail.
  Runs a fixed worker pool (balance: false) instead of auto-scaling,
  so it can't claim workers away from the other pools under load.
- supervisor-background: low, delete, adelete, move, intbg - imports,
  crawling, account deletion/migration; not time-sensitive.

Moved the shared supervisor shape into `defaults` (keyed per
supervisor name, per Horizon's own merge behavior) so `environments`
only needs to override what actually differs, instead of each
environment fully redefining supervisor-1 from scratch. Existing env
vars (HORIZON_MAX_PROCESSES, HORIZON_MIN_PROCESSES,
HORIZON_BALANCE_STRATEGY, HORIZON_SUPERVISOR_*) keep governing the
priority supervisor for continuity with existing deployments; the
three new supervisors get their own HORIZON_*_MAX_PROCESSES vars
with conservative defaults.

Also:
- Added balanceCooldown: 3 explicitly (previously relied on
  SupervisorOptions' own constructor default of the same value -
  behavior is unchanged, just no longer implicit).
- Wired LongWaitDetected notification routing
  (Horizon::routeMailNotificationsTo/routeSlackNotificationsTo) to
  new optional config('horizon.notification_routing') keys, sourced
  from env vars. Previously these were hardcoded, commented-out
  examples with nowhere to actually alert on the `waits` thresholds
  already configured below.

Verified by actually starting `php artisan horizon` and inspecting
`horizon:supervisors`: all 4 supervisors registered with exactly the
intended queues, supervisor-media correctly running fixed (non-auto)
balancing. Cross-checked every ->onQueue() call site in app/ against
the new supervisor queue lists - exact match, no queue dropped or
duplicated. Full test suite (715/715) and Larastan clean.
2 weeks ago
Shlee 140221fe90
Merge pull request #7192 from pixelfed/refactor/str-of-to-native
Laravel 13 Prep: Replace Str::of() fluent chains with static Str::/native calls
2 weeks ago
Your Name a424493420 Replace Str::of() fluent chains with static Str::/native calls
Aligns with the app's dominant convention (171 static Str:: calls vs
24 Str::of() chains). Uses Str::afterLast() for the repeated
"segment after last slash" pattern, Str::matchAll() where a
Collection return is needed, and native explode()/substr() where a
plain array/string suffices.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2 weeks ago
Your Name 277b8aa970 Use now() helper instead of Carbon::now() for current-time access
Aligns with the app's dominant convention (413 now()/today() call
sites vs 12 Carbon::now()). Carbon::parse() calls are untouched since
they parse arbitrary date strings, not current-time access.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2 weeks ago
Daniel Supernault 6ddc803ae1
Fix SoftwareUpdate notices 2 weeks ago
Daniel Supernault bbd7618c46
Update StoryService and add has_story to AccountTransformer 2 weeks ago
Daniel Supernault 7975ba9c75
Fix StoryCarousel cache invalidation 2 weeks ago
Daniel Supernault 915879ff57
Update account suggestions 2 weeks ago
Daniel Supernault 9aafa37364
Update ApiV1Controller.php 2 weeks ago
Daniel Supernault 6a33716870
Update ApiV1Controller, fix account suggestions 2 weeks ago
Your Name ce073ffc92 Merge remote-tracking branch 'origin/staging' into feature/honeypot-spam-protection
# Conflicts:
#	routes/web.php
2 weeks ago
Your Name 5a9c235922 Backfill storage_used on upgrade via queued job + data migration
Repair accounts whose storage counter drifted before the self-heal logic
existed (#7169). A data migration dispatches RecalculateAllUserStoragePipeline
to the low queue so the deploy is not blocked while every user is recomputed
from source. The job is unique and idempotent, so re-runs are harmless.

- RecalculateAllUserStoragePipeline: chunked recalc of all active users
- Migration dispatches the job (no inline heavy work during deploy)
- Test covers bulk recalculation from actual media
2 weeks ago
Your Name 61a1c30756 Self-heal stale storage_used on read to unblock stuck accounts
UserStorageService::get() now recalculates from source when the cached
counter is missing or older than STALE_AFTER_HOURS, instead of returning a
possibly-inflated cached value. This is what unblocks a user stuck at the
account size limit: the limit check on their next upload attempt reads the
freshly recalculated real usage rather than the drifted value (#7169).

The upload flow reads get() and enforces the limit BEFORE the write-path
heal runs, so a blocked user could never self-heal via upload/delete alone.
Healing on read closes that gap and makes the scheduled reconciler a
belt-and-suspenders safety net rather than a requirement.

A fresh counter is still trusted as-is (no per-read SUM). Adds tests for the
stale-get recompute and fresh-get trust paths.
2 weeks ago
Your Name 10559c23e3 Fix larastan noAuthFacadeInRequestScope in LoginController
Replace Auth::check() with $request->user() !== null in confirmEmail(),
which already has the request in scope, and drop the now-unused Auth
facade import. Resolves the 2 remaining project-wide larastan errors.
2 weeks ago
Your Name f467dc04d5 Remove unused CACHE_KEY constant from UserStorageService
The constant was never referenced; the service reads and writes the
storage_used column directly on the User model rather than via cache.
2 weeks ago
Your Name 26d3e8bb8e Self-heal stale storage_used on upload/delete hot path
Make increaseStorageUsed/decrementStorageUsed recalculate from source when
the cached counter is older than STALE_AFTER_HOURS (168h) or never
calculated, so an affected user is corrected the next time they upload or
delete without waiting for the nightly reconciler. Callers save/delete the
media row before calling these, so the from-source recalc already reflects
the change and the incremental delta is skipped on the recalc path.

- Add UserStorageService::STALE_AFTER_HOURS and isStale() helper (no extra
  query: reads the already-loaded model), with defensive Carbon parsing
- Cast users.storage_used_updated_at to datetime so freshness comparisons
  work on a Carbon instance
- Add tests for stale/fresh/never-calculated increase and decrement paths
2 weeks ago
Your Name 6496904293 Fix account storage limit not freeing on media deletion (#7169)
users.storage_used only ever grew: uploads incremented it but no deletion
path decremented it, so users hit the account size limit even when their
real media usage was well below it.

- Decrement storage_used in MediaDeletePipeline when media is removed
- Add UserStorageService::increaseStorageUsed / decrementStorageUsed as the
  fast, symmetric hot-path counter updates (floor-based, clamped at zero)
- Refactor the 6 upload call sites to use increaseStorageUsed instead of
  duplicated inline writes (also fixes ceil/floor drift vs the reconciler)
- Add (user_id, size) covering index so per-user SUM(size) is not a full
  table scan (INPLACE/LOCK=NONE, skipped on sqlite)
- Add user:storage:recalculate command to repair affected accounts, with a
  daily --stale=168 scheduled reconciler to correct any drift
- Add regression tests for the pipeline and UserStorageService
2 weeks ago
Daniel Supernault edcf978755
Update AccountTransformer.php 2 weeks ago
Daniel Supernault 194c881cb2
Update ResetPasswordController 2 weeks ago
Daniel Supernault 1d96c94054
Refactor Auth, remove expensive middleware 2 weeks ago
Daniel Supernault 57e7eef082
Fix StoryIndexService 2 weeks ago
Daniel Supernault 13aa36efb4
Update ApiV1Controller.php 2 weeks ago
Shlee 519b1b94dc
Refactor comments in DangerZone middleware
Removed redundant comments to clarify code functionality.
2 weeks ago
Shlee 5d38faa257
Merge pull request #7166 from shleeable/fix/dangerzone-logout-clear-2fa-session
Invalidate session on DangerZone forced logout to clear 2FA state
2 weeks ago
Your Name 58e8a4922d Invalidate session on DangerZone forced logout to clear 2FA state 2 weeks ago
Shlee e60082b9b9
Merge pull request #7165 from shleeable/fix/media-blocklist-indexed-lookup
Use indexed query for media blocklist lookups and allow removing inactive hashes
2 weeks ago
Your Name e8f2b06afe Use indexed query for media blocklist lookups and allow removing inactive hashes 2 weeks ago
Shlee 9cf879d375
Merge pull request #7163 from shleeable/fix/status-lexer-no-autolink-fanout
Deliver posts regardless of profile no_autolink flag
2 weeks ago
Your Name 9e14151228 Deliver posts regardless of profile no_autolink flag 2 weeks ago
Your Name 742c1a6bc8 Require dangerzone sudo mode on curated register, shadow filter and page admin controllers 2 weeks ago
Shlee 97b5d2f180
Merge pull request #7159 from shleeable/fix/directory-exclude-private-profiles
Exclude private profiles from public directory and clear suggestable on going private
2 weeks ago
Your Name 1581863093 Exclude private profiles from public directory and clear suggestable on going private 2 weeks ago
Shlee 903c191f10
Merge pull request #7158 from shleeable/fix/2fa-logout-session-cleanup
Clear 2FA session state on forced logout after failed attempts
2 weeks ago
Your Name 97f1a097ff Clear 2FA session state on forced logout after failed attempts 2 weeks ago
Shlee eaadf425f2
Merge pull request #7157 from shleeable/fix/dangerzone-oidc-per-user
Scope DangerZone OIDC sudo bypass to OIDC-registered users
2 weeks ago
Your Name 7483a4b05b Scope DangerZone OIDC sudo bypass to OIDC-registered users 2 weeks ago
Shlee 72f0990dd8
Merge pull request #7156 from shleeable/fix/network-timeline-null-account
Filter null-account statuses from non-cached network timeline
2 weeks ago
Shlee e65a17c175
Merge pull request #7155 from shleeable/fix/get-or-fetch-remote-profile-fallback
Fall back to stored profile when remote refresh fails
2 weeks ago
Your Name 917a13d4a7 Filter null-account statuses from non-cached network timeline 2 weeks ago
Your Name 73fb5ed696 Fall back to stored profile when remote refresh fails 2 weeks ago
Your Name 444c796bac Trigger StatusHashtag observer on deletion to keep cached_count accurate 2 weeks ago
Shlee fc80bce460
Update StoryApiV1Controller.php 2 weeks ago
Shlee 5bd33640fe
Merge pull request #7151 from shleeable/fix/status-dedupe-deterministic
Deterministically keep earliest status per uri in dedupe command
2 weeks ago
Your Name e360fab619 Deterministically keep earliest status per uri in dedupe command 2 weeks ago
Shlee 189408edf0
Merge pull request #7149 from shleeable/fix/authorize-interaction-intended-redirect
Use intended-redirect session for authorize_interaction guest login
2 weeks ago
Your Name 0234a305ae Use intended-redirect session for authorize_interaction guest login 2 weeks ago
Your Name 1ffda3eba9 Federate unlike before deleting Like so retries can deliver 2 weeks ago
Shlee 46fb9613e3
Merge pull request #7146 from shleeable/fix/2fa-checkpoint-throttle
Rate limit and audit-log 2FA checkpoint verification
2 weeks ago
Your Name 8cebb24c04 Rate limit and audit-log 2FA checkpoint verification 2 weeks ago
Shlee 0ebe1f8fb1
Merge pull request #7145 from shleeable/fix/media-blocklist-check-before-store
Check media blocklist before storing uploads to prevent orphaned files
2 weeks ago
Your Name ec6827bae2 Check media blocklist before storing uploads to prevent orphaned files 2 weeks ago
Shlee cecdad5b53
Merge pull request #7143 from shleeable/fix/search-controller-pgsql-ilike
Use ILIKE for case-insensitive search on PostgreSQL
2 weeks ago
Your Name 613cf413de Use ILIKE for case-insensitive search on PostgreSQL 2 weeks ago
Shlee 173abef5c5
Merge pull request #7142 from shleeable/fix/reblog-duplicate-dispatch
Only dispatch SharePipeline for newly-created reblogs
2 weeks ago
Your Name d190ba7b66 Only dispatch SharePipeline for newly-created reblogs 2 weeks ago
Shlee 0fc121b685
Merge pull request #7134 from shleeable/fix/storyfetch-ssrf
Route StoryFetch outbound requests through SSRF-hardened fetch service
2 weeks ago
Shlee 58c83a2c6b
Merge pull request #7141 from shleeable/fix/import-instagram-missing-profile
Drop Instagram import job when profile is missing instead of crashing
2 weeks ago
Your Name 922d7f766e Drop Instagram import job when profile is missing instead of crashing 2 weeks ago
Shlee ee64de9df4
Merge pull request #7140 from shleeable/fix/user-account-delete-user-agent
Send Pixelfed User-Agent on federated account deletion deliveries
2 weeks ago
Shlee a5cbea834f
Merge pull request #7138 from shleeable/fix/oob-authorize-omitted-redirect-uri
Detect OOB oauth client when redirect_uri omitted on authorize
2 weeks ago
Shlee ae31ed8e66
Merge pull request #7137 from shleeable/fix/story-remote-expiry-cache
Invalidate latest-story cache on remote story expiry and null-guard l…
2 weeks ago
Your Name 327348be02 Send Pixelfed User-Agent on federated account deletion deliveries 2 weeks ago
Your Name 53ad34b321 Ignore own row when validating email update uniqueness 2 weeks ago
Your Name 462b4bc0da Detect OOB oauth client when redirect_uri omitted on authorize 2 weeks ago
Your Name 9850aac676 Invalidate latest-story cache on remote story expiry and null-guard latest() 2 weeks ago
Shlee 9c5be0e271
Merge pull request #7136 from shleeable/fix/custom-filter-rate-limit-ttl
Fix custom filter rate-limit counter never expiring
2 weeks ago
Your Name 63e3c95fae Fix custom filter rate-limit counter never expiring 2 weeks ago
Your Name afcb68c183 Fix registration form redirecting when max_users is falsy 2 weeks ago
Your Name 9e84ad261d Route StoryFetch outbound requests through SSRF-hardened fetch service 2 weeks ago
Shlee daf83fd564
Merge pull request #7132 from shleeable/fix/pat-renew-kill-switch
Enforce pat_enabled kill-switch on personal access token renew
2 weeks ago
Shlee a546c4982a
Merge pull request #7133 from shleeable/fix/remote-auth-domain-compatible-guard
Fix isDomainCompatible throwing on non-json beagle response
2 weeks ago
Your Name d51cf4ccc9 Fix isDomainCompatible throwing on non-json beagle response 2 weeks ago
Your Name d2b11a71b3 Enforce pat_enabled kill-switch on personal access token renew 2 weeks ago
Shlee 13a441af93
Merge pull request #7131 from shleeable/fix/login-activity-groupby
Fix login activity groupBy returning stale rows and 500 on strict DBs
2 weeks ago
Your Name 3cb5b6e1ff Fix login activity groupBy returning stale rows and 500 on strict DBs 2 weeks ago
Your Name fe70cd1155 Fix directory listing reporting oauth and activitypub flags always true 2 weeks ago
Shlee aa152372c9
Merge pull request #7121 from shleeable/fix/status-remote-update-ssrf
Harden remote status update media fetch against SSRF
2 weeks ago
Shlee 18ba2dc932
Merge pull request #7119 from shleeable/fix/hashtag-follow-null-profile
Guard hashtag follow against null profile for soft-deleted accounts
2 weeks ago
Shlee 1cb56f0ba0
Merge pull request #7120 from shleeable/fix/inbox-keyid-host-validation
Validate publicKey.id host on inbox actor ingest
2 weeks ago
Shlee b30b711097
Merge pull request #7122 from shleeable/fix/reclaim-username-orphan-profile
Scope reclaim-username profile deletion and fail on surviving orphan
2 weeks ago
Shlee 3b8d7b8d1f
Merge pull request #7123 from shleeable/fix/poll-vote-scope-authz
Enforce poll scope authorization on vote endpoint
2 weeks ago
Shlee 0900509c27
Merge pull request #7124 from shleeable/fix/collection-store-visibility-required
Require visibility on collection store to match NOT NULL schema
2 weeks ago
Shlee b43a5f99d7
Merge pull request #7125 from shleeable/fix/statusdelete-trashed-profile
Fix StatusDelete crashing on soft-deleted owning profile
2 weeks ago
Shlee 3f63b245bc
Merge pull request #7126 from shleeable/fix/admin-instance-stats-postgres-guard
Fix admin instance stats endpoint 404 on Postgres via strict is_admin boolean check
2 weeks ago
Shlee fe8c53ddd7
Merge pull request #7127 from shleeable/fix/favourites-pagination-off-by-one
Fix favourites pagination skipping one favourite per page
2 weeks ago
Shlee 602e498f0a
Update ApiV1Controller.php 2 weeks ago
Your Name a286509622 Require visibility on collection store to match NOT NULL schema 2 weeks ago
Your Name a8a7a430d7 Enforce poll scope authorization on vote endpoint 2 weeks ago
Your Name a1724a4b1c Scope reclaim-username profile deletion and fail on surviving orphan 2 weeks ago
Your Name e79135a771 Fix favourites pagination skipping one favourite per page boundary 2 weeks ago
Your Name 856f2f8f2d Harden remote status update media fetch against SSRF 2 weeks ago
Your Name 8258a5a5f8 Guard hashtag follow against null profile for soft-deleted accounts 2 weeks ago
Your Name 1905da723d Validate publicKey.id host on inbox actor ingest to prevent key_id poisoning 2 weeks ago
Your Name df1e771f93 Fix admin instance stats endpoint 404 on Postgres via strict is_admin check 2 weeks ago
Your Name 6e7419bb96 Fix StatusDelete crashing on soft-deleted owning profile 2 weeks ago
Your Name 3b951d41d8 Fix accounts statuses max_id pagination returning duplicate boundary status 2 weeks ago
dansup c40814d9b3
Merge pull request #7115 from pixelfed/shleeable-patch-1
Dead code?: Remove blindKeyRotation
2 weeks ago
Daniel Supernault 94b8fea32a
Update AccountTransformer 2 weeks ago
Shlee 4acc0dd528
Update DeleteWorker.php 2 weeks ago
Shlee 56251cb05f
Update InboxValidator.php 2 weeks ago
Shlee 767c6ec201
Remove blindKeyRotation method from InboxWorker
Removed the blindKeyRotation method and its associated logic.
2 weeks ago
Daniel Supernault 7376a007a5
Update ApiV1Controller.php 3 weeks ago
Daniel Supernault 085eabccf9
Update account statuses endpoint 3 weeks ago
Daniel Supernault c558724e47
Update AP Helpers 3 weeks ago
Daniel Supernault e57f7ccd3a
Update Helpers.php 3 weeks ago
Daniel Supernault 40fedfca4f
Fix DeleteAccountPipeline 3 weeks ago
Your Name ce4343e3e2 Replace custom register token with spatie/laravel-honeypot
Swap the custom 'rt' register token anti-spam mechanism for
spatie/laravel-honeypot on the registration and parental-controls
invite flows.

- Add spatie/laravel-honeypot and publish config/honeypot.php
- Remove getRegisterToken() and the rt validation rule from RegisterController
- Replace the rt hidden field with the @honeypot directive in both forms
- Attach ProtectAgainstSpam middleware to POST /register and the
  parental-controls invite register route
- Update RegisterTest to disable honeypot for the valid registration case
3 weeks ago
Daniel Supernault f37c5fc95c
Add notification gc 3 weeks ago
Your Name 8b4a7d4e3c fix: correct SiteController view return types, drop ViewContract alias
An automated return-type pass aliased the view contract as ViewContract
to avoid clashing with the imported View facade, but left four methods
(curatedOnboarding, language, redirectUrl, followIntent) typed against
the facade instead of the contract. That threw a TypeError on
/auth/sign_up.

Convert the four View::make() calls to the view() helper, drop the
facade import, and use a single Illuminate\Contracts\View\View import
for all return types.
3 weeks ago
Daniel Supernault 896342a57f
Update MediaMoveStorageLocalToCloud.php 3 weeks ago
Shlee 3673cf30e4
Update SiteController.php 3 weeks ago
Shlee 99a013accc
Update SiteController.php 3 weeks ago
Daniel Supernault 764a98437d
Fix media gc 3 weeks ago
Daniel Supernault 85fec3ac82
Create PruneOldNotifications.php 3 weeks ago
Daniel Supernault 6f688a31d7
Lint 3 weeks ago
dansup c71c470680
Merge pull request #7089 from pixelfed/shleeable-patch-1
Update UpdatePersonValidator.php
3 weeks ago
dansup 4c2ccc7ee7
Merge pull request #7088 from pixelfed/shleeable-patch-4
Change 2FA code validation to require 6 digits
3 weeks ago
dansup bbe27e8de4
Merge pull request #7087 from pixelfed/shleeable-patch-3
Update password validation rule to include string and min length
3 weeks ago
dansup f6bdb32f48
Merge pull request #7086 from pixelfed/shleeable-patch-2
Update MediaStorageService.php
3 weeks ago
Shlee b62eafd054
Update UpdatePersonValidator.php 3 weeks ago
Shlee 76d4e1ab23
Change 2FA code validation to require 6 digits 3 weeks ago
Shlee c2a568a5cc
Update password validation rule to include string and min length 3 weeks ago
Shlee ce4df00921
Update MediaStorageService.php 3 weeks ago
Shlee 0a39ccef98
Update redirect route for 2FA setup 3 weeks ago
Daniel Supernault d7cfd07204
Fix PostEditModal. Closes #7084 3 weeks ago
Shlee c86a82b857
Merge pull request #7059 from pixelfed/chore/convert-string-refs-to-class
Laravel 13 Prep: Convert string class references to ::class
3 weeks ago
Shlee 8d375aed8a
Update DeleteAccountPipeline.php 3 weeks ago
Your Name 95e316e86f Apply staged formatting and session config changes 3 weeks ago
Shlee f51f1ef0db
Update DeleteAccountPipeline.php 3 weeks ago
Your Name 042ab0a6e4 Convert optional() to nullsafe operator
Applies patch 2/21 from pixelfed-staging PR #9: replaces optional($x)->y
with $x?->y across 16 files. Pint-clean.
3 weeks ago
Your Name 6d8ad3885a Convert string class references to ::class
Applies the ::class conversion from pixelfed-staging PR #9 (patch 1/21),
formatted with Pint (short imported ::class form). Excludes the
ModelNamespaceMigrationTest namespace assertions, which intentionally
compare against literal namespace strings.
3 weeks ago
Shlee 7cf6e77148
Update Localization.php 3 weeks ago
Your Name 9db2218ca6 chore: move resources/lang to top-level lang/ per Laravel 9+ convention
- Relocate translation files from resources/lang to lang/ via git mv
- Update PHP references to use the lang_path() helper
- Update crowdin.yml source/translation paths
- Update phpstan.neon translationDirectories
3 weeks ago
Your Name b8ca4da3a6 Add per-file transfer output and --debug detail to MediaMoveStorageLocalToCloud 3 weeks ago
Your Name 6b14b229d1 Fix media storage migration crash when no .env file exists
The media storage migration commands read/parsed the .env file directly to
check and flip PF_ENABLE_CLOUD. In containerized deploys there is no .env on
disk (config is injected via env vars), so updateEnvFile() threw
'file_get_contents(.env): Failed to open stream' and the scheduled command
exited 1.

- Check the live setting via config_cache('pixelfed.cloud_storage') like the
  rest of the app, instead of parsing .env.
- Make the .env write best-effort in ManagesMediaStorageEnv: skip gracefully
  when the file is missing or read-only, and still apply the runtime + DB
  config-cache updates (the load-bearing changes on a hot server).
- Apply the same fix to the sibling unstable:MediaMoveStorageCloudToLocal.
- Add a regression test covering the no-.env container scenario.
3 weeks ago
Your Name ef7e485e7d Fix Larastan error: correct Status import in NotificationService
Use App\Models\Status instead of the non-existent App\Status class.
3 weeks ago