Commit Graph

1185 Commits (ccfd39fd908fd136b2e3fdbd11446c71ebef55a9)

Author SHA1 Message Date
Daniel Supernault d88f9b3918
Fix typo 1 week ago
Daniel Supernault 493b8de031
Add FeaturedCollections/Starter Kits support 1 week ago
Daniel Supernault 5a6bf8b805
Clean up oauth authorize view 1 week ago
Daniel Supernault 27de8852d5
Add Pixelfed logo to oauth screen 1 week ago
Daniel Supernault bdc088aef6
Clean up oauth authorize view 1 week ago
Daniel Supernault 933e24c9ba
Improve oAuth authorize screen, and only assign admin scopes to admin accounts 1 week ago
Shlee 715d539e7e
Enhance password visibility toggle functionality
Updated password toggle button functionality to reveal password on press and hold, and added accessibility features.
1 week ago
Your Name 7fe3eb141a feat(login): add show/hide password toggle (#7255) 1 week ago
Shlee 9ec46005df
Merge pull request #7309 from pixelfed/feature/laravel-cap
Refactor: Captcha provider - HCaptcha, Turnstile and Cap
1 week ago
Your Name fcea9dc34b polish 1 week ago
Your Name afe2bb6d1d polish 2 weeks ago
Your Name 136e79885b polish 2 weeks ago
Your Name abb2d8e5e9 polish 2 weeks ago
Your Name 163cd9f589 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 2 weeks ago
Your Name 4df40cb772 Escape user-provided content in curated register admin emails 2 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 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 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.
4 weeks 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
4 weeks 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
4 weeks 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.
4 weeks 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 1 month ago
Shlee 5913b031c8
Update authorize.blade.php 1 month ago
Shlee 28c8772186
Update index.blade.php 1 month 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