Commit Graph

1172 Commits (e870c00c68b3ea6ec54544ecf3ca548e2b9cfe60)

Author SHA1 Message Date
Your Name fcea9dc34b polish 2 weeks ago
Your Name a14fba166f Fix cached-page 500s and flaky smoke/API tests
- terms/privacy/community-guidelines views accessed the cached page as an
  object ($page->title), but cachedPage() returns an array, causing a 500
  whenever a custom Page row existed. Switch to array access.
- PublicRouteSmokeTest: enable open_registration before hitting /register,
  which 404s by default when registration is disabled.
- Api/AccountTest: derive sanctum.stateful domain from app.url instead of
  hardcoding pixelfed.test, so the first-party auth test is environment
  independent.
2 weeks ago
Your Name f4dbddd8b5 Use locale_get_display_name for language labels
locale_get_display_language reads only the language subtag and ignores
the region, so zh-cn and zh-tw both rendered as 'Chinese - 中文'.
Switching to locale_get_display_name disambiguates region variants
(Chinese (China) / Chinese (Taiwan)) while leaving all region-less
locales unchanged.

Updated the settings language dropdown and the /i/lang picker.
2 weeks ago
Arnaud 6537787c4e More translatable strings : landing, privacy policy, terms 2 weeks ago
Arnaud ac790b1d8a Fix last untranslated strings on the login + explore pages 2 weeks ago
Shlee 2f9f8ecd1b
Merge pull request #7244 from pixelfed/fix/curated-register-details-xss
Escape message in curated register details email to fix reflected XSS
2 weeks ago
Daniel Supernault 1cead5cf60
Update in-app registration 2 weeks ago
Your Name 623f03bb68 Escape message in curated register details email to fix reflected XSS 2 weeks ago
Your Name 9d839f7b5a Fix missing email verification dispatch on settings email change 2 weeks ago
Your Name ce073ffc92 Merge remote-tracking branch 'origin/staging' into feature/honeypot-spam-protection
# Conflicts:
#	routes/web.php
2 weeks ago
Daniel Supernault 1d96c94054
Refactor Auth, remove expensive middleware 3 weeks ago
Your Name 4df40cb772 Escape user-provided content in curated register admin emails 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
Shlee b1422f7a6a
Merge pull request #7063 from pixelfed/chore/rename-bootstrap3-pagination
Laravel 13 Prep: Rename Bootstrap 3 pagination templates
3 weeks ago
Shift 938f0cf205 Rename Bootstrap 3 pagination templates 4 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.
4 weeks ago
Your Name 40b323bca4 revert: remove emoji local-to-cloud storage changes
Back out all emoji cloud-storage work from staging so it can be reworked and
re-landed separately (the URL resolution flips to cloud on a global config
flag, which created a broken-URL window, and the migration approach needs
revisiting).

Reverts to pre-emoji state:
- CustomEmoji model URL/storage helpers (urlForPath, storageTarget, storeMedia,
  storeMediaFromFile, deleteMedia, url) and callers in ImportEmojis,
  CustomEmojiService, AdminController
- admin custom-emoji blade views back to local /storage URLs
- Remove admin:EmojiMoveStorageLocalToCloud command
- Remove the deploy migration and its scheduler entry

Media (and the already-reverted story) scheduler entries are untouched.
4 weeks ago
Your Name aa9bb868dd fix: emoji admin URLs and cloud-migration guard
Two issues prevented emoji from serving/migrating correctly on cloud:

- Admin custom-emoji views hardcoded url('storage/'.media_path), so they
  always showed local URLs and bypassed cloud resolution. Use $emoji->url().
- The migration/command guard relied solely on config_cache('pixelfed.cloud_storage'),
  which is DB/12h-cached and can read stale-false right after cloud is
  enabled, causing the migration to silently no-op. Treat cloud as enabled
  when either live config() or config_cache() is true.
4 weeks ago
Shlee fc89c156b1
Merge pull request #6919 from pixelfed/fix/csrf-token-guest-pages
Fix CSRF token not found error on guest pages (login/register)
4 weeks ago
Your Name ea1a629b1a Add csrf-token meta to anon and app-guest layouts
These guest layouts also load app.js, which reads the csrf-token meta
tag to set the axios X-CSRF-TOKEN header. Without it, they logged the
same 'CSRF token not found' console error and had no CSRF header for
AJAX requests. Adds the meta tag to match the other layouts.
4 weeks ago
Your Name 32e391d267 Fix CSRF token not found error on guest pages (login/register)
The app layout renders separate head blocks for auth vs guest users.
The guest block was missing the <meta name="csrf-token"> tag that
app.js reads to set the axios X-CSRF-TOKEN header, causing a console
error on the login and register pages. Add the meta tag to the guest
head to match the authenticated head block.
4 weeks ago
Your Name f0e951dcce fix: stop caching raw Eloquent models to prevent incomplete-object 500s
Caching an Eloquent model in a Cache::remember closure could deserialize
into a __PHP_Incomplete_Class on read, throwing 'attempt to access a
property on an incomplete object' and returning a 500. This surfaced on
guest profile pages (ProfileController::buildProfile reading
$user->user->settings) and affected several other latent call sites.

Changes:
- ProfileController: cache a plain settings array instead of the
  UserSetting model; fall back to defaults when the settings row is missing
- StoryService::getById: fetch a live model instead of caching it
- InstanceService::getByDomain, CustomEmoji::scan: cache arrays
- Site/MobileController: cache Page data as an array via a shared
  ManagesCachedPages trait; update blade views to array access
- Add public-route smoke/regression tests covering the cache-read path
4 weeks ago
Your Name 26b8a0a6b0 fix: replace deprecated starts_with() with str_starts_with()
The starts_with() helper was removed in Laravel 6. Use PHP 8's native
str_starts_with() instead.
1 month ago
Your Name 5a364be58b fix: remove deprecated Passport::personalAccessClientId() and enableImplicitGrant()
- Remove Passport::personalAccessClientId() (removed in Passport v13, auto-discovers now)
- Remove Passport::enableImplicitGrant() (legacy grant, no clients use it)
- Flatten config instance.oauth.pat to pat_enabled (remove dead pat.id key)
- Add OAUTH_PAT_ENABLED=false to .env.example and .env.docker.example
- Show swal alert when PATs disabled instead of hidden API error
- Improve store() error handling to surface 403 messages in the UI
- Remove OAUTH_PAT_ID row from admin diagnostics blade
1 month ago
Your Name 8a2649b3ff feat: add critical path test suite and fix auth/config issues
Test Infrastructure:
- Modernize phpunit.xml (bootstrap, source block, Laravel 12 env vars)
- Configure tests/Pest.php with pest()->extend(TestCase::class)->in('Feature')
- Add docker-compose.test.yml (Redis for test suite)
- Add composer test/test:quick scripts
- Rename CACHE_DRIVER to CACHE_STORE across config (backwards compatible)
- Update .env.testing for in-memory SQLite + Docker Redis

Test Coverage (190 tests):
- CriticalRoutes: public routes, auth routes, API endpoints, middleware, schedule
- Auth/LoginTest: login, logout, rate limiting, redirect behavior
- Auth/RegisterTest: registration flow, validation, disabled registration
- Auth/PasswordResetTest: reset request, token validation, password update
- Auth/TwoFactorTest: 2FA checkpoint, setup behind password confirmation
- Auth/PasswordConfirmationTest: sudo mode flow via Laravel password.confirm
- Api/ScopeTest: scope enforcement, public endpoints, admin access

Bugs Fixed:
- Fix unauthenticated API returning 500 instead of 401 (AuthenticationException
  not handled in custom exception renderer in bootstrap/app.php)
- Replace custom DangerZone middleware with Laravel password.confirm
- Add HasFactory trait to Profile model for test factories

Bugs Documented (known-bugs group):
- Registration crashes with str_ends_with TypeError (RegisterController:82)
- OAuth routes use legacy array syntax causing ReflectionFunction TypeError
1 month ago
Your Name 30db57448f fix: replace str_random/str_limit/str_slug in Blade templates and tests
These deprecated helpers will throw 'undefined function' errors at
runtime since laravel/helpers was removed. Replace with Str::random(),
Str::limit(), and Str::slug() respectively.
1 month ago
dansup 4c0c6bdec0
Merge pull request #6577 from shleeable/remove-exp-lc
Remove deprecated EXP_LC (hidden like counts) config
1 month ago
dansup ec38262338
Merge pull request #6576 from shleeable/covidremove
Clean up Covid/WHO
1 month ago
dansup 24697b77fc
Merge pull request #6579 from shleeable/remove-exp-loops
Remove deprecated legacy loops feature entirely
1 month ago
dansup dcb3ffa04b
Merge pull request #6684 from pixelfed/shleeable-patch-18
missing parentheses
1 month ago
dansup 5cccd4937a
Merge pull request #6679 from pixelfed/shleeable-patch-14
OAuth: Cancel/Deny on authorization screen fails with 403 due to missing auth_token
1 month ago
Shlee a600981820
Update show.blade.php 2 months ago
Shlee 5913b031c8
Update authorize.blade.php 2 months ago
Shlee 28c8772186
Update index.blade.php 2 months ago
Daniel Supernault ef3fdeeca3
Update profile view 4 months ago
Daniel Supernault 3a71cda51f
Prevent og:image on sensitive posts 5 months ago
Your Name 715c671712 Remove deprecated Loops feature entirely
- Remove 'loops' from config/exp.php and instance.discover.loops from config/instance.php
- Remove loops API routes (loopsApi, loopWatch) from web-api.php
- Delete LoopComponent.vue, loops.js entry point, and loops blade view
- Remove EXP_LOOPS diagnostic row from admin diagnostics page

The Loops feature was deprecated and hardcoded to disabled.
5 months ago
Your Name 1f01a15e64 Remove deprecated EXP_LC (hidden like counts) config
Remove the EXP_LC env var from config/exp.php and its diagnostic
row from the admin diagnostics page. This feature was already
marked as deprecated and unused.
5 months ago
Your Name 41089fcccd Remove COVID label feature flag and related code
Remove ENABLE_COVID_LABEL, COVID_LABEL_URL, and COVID_LABEL_ORG env
vars and all associated backend/frontend code:

- config/instance.php: remove label.covid config block
- StatusLabelService: remove keyword matching, return static false
- Site/Config.php: remove label.covid from API response
- StatusCard.vue: remove COVID banner and labelRedirect method
- GroupStatus.vue: remove COVID banner and labelRedirect method
- diagnostics blade: remove COVID diagnostic rows
5 months ago
Daniel Supernault 0a41c9e387
Fix typo 5 months ago
Daniel Supernault 14b325641f
Update Password Change with new Revoke Sessions option
As requested in https://lgbtqia.space/@serigala_tropis/116412473982617371
6 months ago
dansup 06521c38df
Merge pull request #6398 from nove-b/feat/embed-color-schemes
feat(embed): add color theme support
6 months ago
dansup edcda57e7a
Merge pull request #6387 from rm-yakovenko/issues/6376
[Server Bug]: app.logo is not used in code
6 months ago
Daniel Supernault 86de07e146
Fix oauth authorize form 7 months ago
Daniel Supernault 695e851026
Fix oauth 7 months ago
dansup 3959257a53
Merge pull request #6439 from pixelfed/shleeable-patch-24
Update redirect.blade.php - Use HTML-escaped URL
8 months ago
dansup 90d2fba597
Merge pull request #6411 from pixelfed/shleeable-patch-10
typo
8 months ago
dansup 2da38b1150
Merge pull request #6409 from pixelfed/shleeable-patch-8
Bugfix: lint confirm_email.blade.php
8 months ago
Shlee d1f8fff739
Update redirect.blade.php 8 months ago
Shlee eb0bb9e81f
Update step-1.blade.php 9 months ago