浏览代码

Merge branch 'staging' into dev

Daniel Supernault 3 年之前
父节点
当前提交
d48e6c5d67
共有 53 个文件被更改,包括 860 次插入151 次删除
  1. 4 0
      CHANGELOG.md
  2. 7 2
      app/Http/Controllers/Api/ApiV1Controller.php
  3. 5 0
      app/Http/Controllers/ComposeController.php
  4. 2 2
      app/Http/Controllers/SettingsController.php
  5. 1 1
      app/Services/HashidService.php
  6. 1 1
      app/Transformer/ActivityPub/Verb/CreateNote.php
  7. 1 1
      app/Transformer/ActivityPub/Verb/Note.php
  8. 4 4
      app/Util/ActivityPub/Helpers.php
  9. 二进制
      public/css/app.css
  10. 二进制
      public/css/appdark.css
  11. 二进制
      public/css/landing.css
  12. 二进制
      public/css/spa.css
  13. 二进制
      public/js/compose-mh8cayo8d.js
  14. 二进制
      public/js/compose-ojtjadoml.js
  15. 二进制
      public/js/compose.js
  16. 二进制
      public/js/daci-mh8cayo8d.js
  17. 二进制
      public/js/daci-ojtjadoml.js
  18. 二进制
      public/js/dffc-ojtjadoml.js
  19. 二进制
      public/js/direct.js
  20. 二进制
      public/js/discover-ojtjadoml.js
  21. 二进制
      public/js/dms-ojtjadoml.js
  22. 二进制
      public/js/dmsg-mh8cayo8d.js
  23. 二进制
      public/js/dmsg-ojtjadoml.js
  24. 二进制
      public/js/dmyh-ojtjadoml.js
  25. 二进制
      public/js/dmym-ojtjadoml.js
  26. 二进制
      public/js/dsfc-ojtjadoml.js
  27. 二进制
      public/js/dssc-ojtjadoml.js
  28. 二进制
      public/js/home-mh8cayo8d.js
  29. 二进制
      public/js/home-ojtjadoml.js
  30. 二进制
      public/js/manifest.js
  31. 二进制
      public/js/notifications-ojtjadoml.js
  32. 二进制
      public/js/post-ojtjadoml.js
  33. 二进制
      public/js/profile-ojtjadoml.js
  34. 二进制
      public/js/profile.js
  35. 二进制
      public/js/rempos.js
  36. 二进制
      public/js/rempro.js
  37. 二进制
      public/js/spa.js
  38. 二进制
      public/js/status.js
  39. 二进制
      public/js/timeline.js
  40. 二进制
      public/mix-manifest.json
  41. 32 11
      resources/assets/js/components/ComposeModal.vue
  42. 1 1
      resources/assets/js/components/Direct.vue
  43. 1 1
      resources/assets/js/components/presenter/PhotoAlbumPresenter.vue
  44. 1 1
      resources/assets/js/components/presenter/PhotoPresenter.vue
  45. 1 1
      resources/assets/js/components/presenter/VideoPresenter.vue
  46. 1 1
      resources/assets/js/lib/argon.js
  47. 15 0
      resources/assets/sass/custom.scss
  48. 37 0
      resources/assets/sass/spa.scss
  49. 2 2
      resources/lang/cs/helpcenter.php
  50. 740 118
      resources/views/admin/diagnostics/home.blade.php
  51. 1 1
      resources/views/admin/profiles/home.blade.php
  52. 2 2
      resources/views/settings/privacy/blocked-instances.blade.php
  53. 1 1
      resources/views/settings/security/2fa/edit.blade.php

+ 4 - 0
CHANGELOG.md

@@ -2,6 +2,9 @@
 
 ## [Unreleased](https://github.com/pixelfed/pixelfed/compare/v0.11.3...dev)
 
+### New Features
+- Custom content warnings/spoiler text ([d4864213](https://github.com/pixelfed/pixelfed/commit/d4864213))
+
 ### Breaking
 - Replaced `predis` with `phpredis` as default redis driver due to predis being deprecated, install [phpredis](https://github.com/phpredis/phpredis/blob/develop/INSTALL.markdown) if you're still using predis.
 
@@ -18,6 +21,7 @@
 - Update exp config, enforce mastoapi compatibility by default ([a160b233](https://github.com/pixelfed/pixelfed/commit/a160b233))
 - Update home timeline, redirect to /i/web unless force_old_ui is present ([5ff4730f](https://github.com/pixelfed/pixelfed/commit/5ff4730f))
 - Update adminReportController, fix mail verification request 500 bug by changing filter precedence to catch deleted users that may still be cached in AccountService ([3f322e29](https://github.com/pixelfed/pixelfed/commit/3f322e29))
+- Update AP Helpers, fix getSensitive and getScope missing parameters ([657c66c1](https://github.com/pixelfed/pixelfed/commit/657c66c1))
 
 ## [v0.11.3 (2022-05-09)](https://github.com/pixelfed/pixelfed/compare/v0.11.2...v0.11.3)
 

+ 7 - 2
app/Http/Controllers/Api/ApiV1Controller.php

@@ -2289,6 +2289,7 @@ class ApiV1Controller extends Controller
 			'media_ids' => 'sometimes|array|max:' . config_cache('pixelfed.max_album_length'),
 			'sensitive' => 'nullable',
 			'visibility' => 'string|in:private,unlisted,public',
+			'spoiler_text' => 'sometimes|string|max:140',
 		]);
 
 		if(config('costar.enabled') == true) {
@@ -2338,6 +2339,8 @@ class ApiV1Controller extends Controller
 
 		$content = strip_tags($request->input('status'));
 		$rendered = Autolink::create()->autolink($content);
+		$cw = $user->profile->cw == true ? true : $request->input('sensitive', false);
+		$spoilerText = $cw && $request->filled('spoiler_text') ? $request->input('spoiler_text') : null;
 
 		if($in_reply_to_id) {
 			$parent = Status::findOrFail($in_reply_to_id);
@@ -2348,7 +2351,8 @@ class ApiV1Controller extends Controller
 			$status->scope = $visibility;
 			$status->visibility = $visibility;
 			$status->profile_id = $user->profile_id;
-			$status->is_nsfw = $user->profile->cw == true ? true : $request->input('sensitive', false);
+			$status->is_nsfw = $cw;
+			$status->cw_summary = $spoilerText;
 			$status->in_reply_to_id = $parent->id;
 			$status->in_reply_to_profile_id = $parent->profile_id;
 			$status->save();
@@ -2371,7 +2375,8 @@ class ApiV1Controller extends Controller
 				$status->rendered = $rendered;
 				$status->profile_id = $user->profile_id;
 				$status->scope = 'draft';
-				$status->is_nsfw = $user->profile->cw == true ? true : $request->input('sensitive', false);
+				$status->is_nsfw = $cw;
+				$status->cw_summary = $spoilerText;
 				$status->save();
 			}
 

+ 5 - 0
app/Http/Controllers/ComposeController.php

@@ -453,6 +453,7 @@ class ComposeController extends Controller
 			'tagged' => 'nullable',
 			'license' => 'nullable|integer|min:1|max:16',
 			'collections' => 'sometimes|array|min:1|max:5',
+			'spoiler_text' => 'nullable|string|max:140',
 			// 'optimize_media' => 'nullable'
 		]);
 
@@ -540,6 +541,10 @@ class ComposeController extends Controller
 			$status->comments_disabled = (bool) $request->input('comments_disabled');
 		}
 
+		if($request->filled('spoiler_text') && $cw) {
+			$status->cw_summary = $request->input('spoiler_text');
+		}
+
 		$status->caption = strip_tags($request->caption);
 		$status->rendered = Autolink::create()->autolink($status->caption);
 		$status->scope = 'draft';

+ 2 - 2
app/Http/Controllers/SettingsController.php

@@ -208,7 +208,7 @@ class SettingsController extends Controller
 		$opencollective = Str::startsWith($opencollective, 'opencollective.com/') ? e($opencollective) : null;
 
 		if(empty($patreon) && empty($liberapay) && empty($opencollective)) {
-			return redirect(route('settings'))->with('error', 'An error occured. Please try again later.');;
+			return redirect(route('settings'))->with('error', 'An error occured. Please try again later.');
 		}
 
 		$res = [
@@ -251,7 +251,7 @@ class SettingsController extends Controller
 		} else {
 			Redis::zrem('pf:tl:replies', $pid);
 		}
-		return redirect(route('settings'))->with('status', 'Timeline settings successfully updated!');;
+		return redirect(route('settings'))->with('status', 'Timeline settings successfully updated!');
 	}
 
 	public function mediaSettings(Request $request)

+ 1 - 1
app/Services/HashidService.php

@@ -22,7 +22,7 @@ class HashidService {
 			while($id) {
 				$id = ($id - ($r = $id % $base)) / $base;
 				$shortcode = $cmap[$r] . $shortcode;
-			};
+			}
 			return $shortcode;
 		});
 	}

+ 1 - 1
app/Transformer/ActivityPub/Verb/CreateNote.php

@@ -93,7 +93,7 @@ class CreateNote extends Fractal\TransformerAbstract
 			'object' => [
 				'id' 				=> $status->url(),
 				'type' 				=> 'Note',
-				'summary'   		=> null,
+				'summary'   		=> $status->is_nsfw ? $status->cw_summary : null,
 				'content'   		=> $status->rendered ?? $status->caption,
 				'inReplyTo' 		=> $status->in_reply_to_id ? $status->parent()->url() : null,
 				'published'    		=> $status->created_at->toAtomString(),

+ 1 - 1
app/Transformer/ActivityPub/Verb/Note.php

@@ -87,7 +87,7 @@ class Note extends Fractal\TransformerAbstract
 			],
 			'id' 				=> $status->url(),
 			'type' 				=> 'Note',
-			'summary'   		=> null,
+			'summary'   		=> $status->is_nsfw ? $status->cw_summary : null,
 			'content'   		=> $status->rendered ?? $status->caption,
 			'inReplyTo' 		=> $status->in_reply_to_id ? $status->parent()->url() : null,
 			'published'    		=> $status->created_at->toAtomString(),

+ 4 - 4
app/Util/ActivityPub/Helpers.php

@@ -455,8 +455,8 @@ class Helpers {
 
 		return DB::transaction(function() use($url, $profile, $activity, $reply_to, $id) {
 			$ts = self::pluckval($activity['published']);
-			$scope = self::getScope($activity);
-			$cw = self::getSensitive($activity);
+			$scope = self::getScope($activity, $url);
+			$cw = self::getSensitive($activity, $url);
 			$pid = is_object($profile) ? $profile->id : (is_array($profile) ? $profile['id'] : null);
 
 			if(!$pid) {
@@ -493,7 +493,7 @@ class Helpers {
 		});
 	}
 
-	public static function getSensitive($activity)
+	public static function getSensitive($activity, $url)
 	{
 		$id = isset($activity['id']) ? self::pluckval($activity['id']) : self::pluckval($url);
 		$url = isset($activity['url']) ? self::pluckval($activity['url']) : $id;
@@ -527,7 +527,7 @@ class Helpers {
 		return $reply_to;
 	}
 
-	public static function getScope($activity)
+	public static function getScope($activity, $url)
 	{
 		$id = isset($activity['id']) ? self::pluckval($activity['id']) : self::pluckval($url);
 		$url = isset($activity['url']) ? self::pluckval($activity['url']) : $id;

二进制
public/css/app.css


二进制
public/css/appdark.css


二进制
public/css/landing.css


二进制
public/css/spa.css


二进制
public/js/compose-mh8cayo8d.js


二进制
public/js/compose-ojtjadoml.js


二进制
public/js/compose.js


二进制
public/js/daci-mh8cayo8d.js


二进制
public/js/daci-ojtjadoml.js


二进制
public/js/dffc-mh8cayo8d.js → public/js/dffc-ojtjadoml.js


二进制
public/js/direct.js


二进制
public/js/discover-mh8cayo8d.js → public/js/discover-ojtjadoml.js


二进制
public/js/dms-mh8cayo8d.js → public/js/dms-ojtjadoml.js


二进制
public/js/dmsg-mh8cayo8d.js


二进制
public/js/dmsg-ojtjadoml.js


二进制
public/js/dmyh-mh8cayo8d.js → public/js/dmyh-ojtjadoml.js


二进制
public/js/dmym-mh8cayo8d.js → public/js/dmym-ojtjadoml.js


二进制
public/js/dsfc-mh8cayo8d.js → public/js/dsfc-ojtjadoml.js


二进制
public/js/dssc-mh8cayo8d.js → public/js/dssc-ojtjadoml.js


二进制
public/js/home-mh8cayo8d.js


二进制
public/js/home-ojtjadoml.js


二进制
public/js/manifest.js


二进制
public/js/notifications-mh8cayo8d.js → public/js/notifications-ojtjadoml.js


二进制
public/js/post-mh8cayo8d.js → public/js/post-ojtjadoml.js


二进制
public/js/profile-mh8cayo8d.js → public/js/profile-ojtjadoml.js


二进制
public/js/profile.js


二进制
public/js/rempos.js


二进制
public/js/rempro.js


二进制
public/js/spa.js


二进制
public/js/status.js


二进制
public/js/timeline.js


二进制
public/mix-manifest.json


+ 32 - 11
resources/assets/js/components/ComposeModal.vue

@@ -432,16 +432,29 @@
 								</div>
 							</div>
 						</div>
-						<div class="border-bottom d-flex justify-content-between px-4 mb-0 py-2 ">
-							<div>
-								<div class="text-dark ">Contains NSFW Media</div>
-							</div>
-							<div>
-								<div class="custom-control custom-switch" style="z-index: 9999;">
-									<input type="checkbox" class="custom-control-input" id="asnsfw" v-model="nsfw">
-									<label class="custom-control-label" for="asnsfw"></label>
+						<div class="border-bottom px-4 mb-0 py-2">
+							<div class="d-flex justify-content-between">
+								<div>
+									<div class="text-dark ">Contains NSFW Media</div>
+								</div>
+								<div>
+									<div class="custom-control custom-switch" style="z-index: 9999;">
+										<input type="checkbox" class="custom-control-input" id="asnsfw" v-model="nsfw">
+										<label class="custom-control-label" for="asnsfw"></label>
+									</div>
 								</div>
 							</div>
+
+							<div v-if="nsfw">
+								<textarea
+									class="form-control mt-3"
+									placeholder="Add an optional content warning or spoiler text"
+									maxlength="140"
+									v-model="spoilerText">
+								</textarea>
+
+								<p class="help-text small text-right text-muted mb-0">{{ spoilerTextLength }}/140</p>
+							</div>
 						</div>
 						<div class="border-bottom">
 							<p class="px-4 mb-0 py-2 cursor-pointer" @click="showTagCard()">Tag people</p>
@@ -1009,6 +1022,13 @@ export default {
 			collectionsLoaded: false,
 			collectionsPage: 1,
 			collectionsCanLoadMore: false,
+			spoilerText: undefined,
+		}
+	},
+
+	computed: {
+		spoilerTextLength: function() {
+			return this.spoilerText ? this.spoilerText.length : 0;
 		}
 	},
 
@@ -1248,7 +1268,8 @@ export default {
 						tagged: this.taggedUsernames,
 						optimize_media: this.optimizeMedia,
 						license: this.licenseId,
-						video: this.video
+						video: this.video,
+						spoiler_text: this.spoilerText,
 					};
 
 					if(this.collectionsSelected.length) {
@@ -1503,7 +1524,7 @@ export default {
 		},
 
 		locationSearch(input) {
-			if (input.length < 1) { return []; };
+			if (input.length < 1) { return []; }
 			let results = [];
 			return axios.get('/api/compose/v0/search/location', {
 				params: {
@@ -1650,7 +1671,7 @@ export default {
 		},
 
 		tagSearch(input) {
-			if (input.length < 1) { return []; };
+			if (input.length < 1) { return []; }
 			let self = this;
 			let results = [];
 			return axios.get('/api/compose/v0/search/tag', {

+ 1 - 1
resources/assets/js/components/Direct.vue

@@ -305,7 +305,7 @@ export default {
 		},
 
 		composeSearch(input) {
-			if (input.length < 1) { return []; };
+			if (input.length < 1) { return []; }
 			let self = this;
 			let results = [];
 			return axios.post('/api/direct/lookup', {

+ 1 - 1
resources/assets/js/components/presenter/PhotoAlbumPresenter.vue

@@ -7,7 +7,7 @@
 			<p class="h4 font-weight-bold text-center">
 				Sensitive Content
 			</p>
-			<p class="text-center py-2">
+			<p class="text-center py-2 content-label-text">
 				{{ status.spoiler_text ? status.spoiler_text : 'This album may contain sensitive content.'}}
 			</p>
 			<p class="mb-0">

+ 1 - 1
resources/assets/js/components/presenter/PhotoPresenter.vue

@@ -7,7 +7,7 @@
 			<p class="h4 font-weight-bold text-center">
 				Sensitive Content
 			</p>
-			<p class="text-center py-2">
+			<p class="text-center py-2 content-label-text">
 				{{ status.spoiler_text ? status.spoiler_text : 'This post may contain sensitive content.'}}
 			</p>
 			<p class="mb-0">

+ 1 - 1
resources/assets/js/components/presenter/VideoPresenter.vue

@@ -7,7 +7,7 @@
 			<p class="h4 font-weight-bold text-center">
 				Sensitive Content
 			</p>
-			<p class="text-center py-2">
+			<p class="text-center py-2 content-label-text">
 				{{ status.spoiler_text ? status.spoiler_text : 'This post may contain sensitive content.'}}
 			</p>
 			<p class="mb-0">

+ 1 - 1
resources/assets/js/lib/argon.js

@@ -880,7 +880,7 @@ var UsersChart = (function() {
 
     $chart.data('chart', usersChart);
 
-  };
+  }
 
 
   // Events

+ 15 - 0
resources/assets/sass/custom.scss

@@ -652,3 +652,18 @@ details summary::-webkit-details-marker {
 				font-weight: bold;
 		}
 }
+
+.content-label {
+	&-wrapper {
+		div:not(.content-label) {
+			height: 100%;
+		}
+	}
+
+	&-text {
+		width: 80%;
+		@media (min-width: 768px) {
+			width: 50%;
+		}
+	}
+}

+ 37 - 0
resources/assets/sass/spa.scss

@@ -291,3 +291,40 @@ span.twitter-typeahead .tt-suggestion:focus {
 		color: var(--body-color);
 	}
 }
+
+.ui-menu {
+	.btn-group {
+		.btn:first-child {
+			border-top-left-radius: 50rem;
+			border-bottom-left-radius: 50rem;
+		}
+
+		.btn:last-child {
+			border-top-right-radius: 50rem;
+			border-bottom-right-radius: 50rem;
+		}
+
+		.btn-primary {
+			font-weight: bold;
+		}
+	}
+
+	.b-custom-control-lg {
+		padding-bottom: 8px;
+	}
+}
+
+.content-label {
+	&-wrapper {
+		div:not(.content-label) {
+			height: 100%;
+		}
+	}
+
+	&-text {
+		width: 80%;
+		@media (min-width: 768px) {
+			width: 50%;
+		}
+	}
+}

+ 2 - 2
resources/lang/cs/helpcenter.php

@@ -21,8 +21,8 @@ return [
 	'blockingAccounts' => 'Blokování účtů',
 	'safetyTips' => 'Tipy pro bezpečnost',
 	'reportSomething' => 'Nahlašování',
-	'dataPolicy' => 'Politika dat'
+	'dataPolicy' => 'Politika dat',
 
 	'taggingPeople' => 'Označování lidí'
 
-];
+]

+ 740 - 118
resources/views/admin/diagnostics/home.blade.php

@@ -3,7 +3,6 @@
 @section('section')
 <div class="title mb-4">
 	<h3 class="font-weight-bold">Diagnostics</h3>
-	<p class="lead mb-0">Instance diagnostics</p>
 </div>
 
 <div class="pb-3 border-bottom">
@@ -11,30 +10,24 @@
 		Information
 		<span class="small text-primary ml-3 copy-information cursor-pointer text-uppercase font-weight-bold">Copy</span>
 	</p>
-	<ul class="information">
-		<li>
-			<strong>APP_URL:</strong>
-			<span>{{config_cache('app.url')}}</span>
-		</li>
-		<li>
-			<strong>APP_DOMAIN:</strong>
-			<span>{{config_cache('pixelfed.domain.app')}}</span>
-		</li>
-		@if(function_exists('shell_exec'))
-		<li>
-			<strong>Version:</strong>
-			<span>{{config('pixelfed.version')}}-{{ @shell_exec('git log --pretty="%h" -n1 HEAD') ?? 'unknown git commit' }}</span>
-		</li>
-		@else
+
+	<div class="information">
+
+
+	<ul>
+		<p class="font-weight-bold text-muted">
+			Troubleshooting
+		</p>
+
 		<li>
-			<strong>Version:</strong>
-			<span>{{config('pixelfed.version')}}</span>
+			<strong>Bootstrap:</strong>
+			<span>{{is_writable(base_path('bootstrap/')) ? 'Writable ✅' : 'Not writable ❌'}}</span>
 		</li>
-		@endif
 		<li>
-			<strong>PHP:</strong>
-			<span>{{phpversion()}}</span>
+			<strong>Storage:</strong>
+			<span>{{is_writable(base_path('storage/')) ? 'Writable ✅' : 'Not writable ❌'}}</span>
 		</li>
+
 		@foreach([
 			'bcmath',
 			'gd',
@@ -47,149 +40,778 @@
 			'openssl',
 			'redis'
 		] as $ext)
-		@if(!extension_loaded($ext))
-		<li>
-			<strong>PHP-{{$ext}}:</strong>
-			<span>Not installed/loaded</span>
-		</li>
-		@endif
+			@if(!extension_loaded($ext))
+				<li>
+					<strong>PHP Module {{$ext}}:</strong>
+					<span>Not installed/Not loaded</span>
+				</li>
+			@endif
 		@endforeach
+
 		<li>
-			<strong>Database:</strong>
-			@php($v = explode(' ', DB::select('select version() as version')[0]->version))
-			<span>{{config('database.default')}} ({{count($v) == 1 ? $v[0] : $v[1]}})</span>
-		</li>
-		<li>
-			<strong>Bootstrap:</strong>
-			<span>{{is_writable(base_path('bootstrap/')) ? 'Writable' : 'Not writable'}}</span>
-		</li>
-		<li>
-			<strong>Storage:</strong>
-			<span>{{is_writable(base_path('storage/')) ? 'Writable' : 'Not writable'}}</span>
-		</li>
-		<li>
-			<strong>Image Driver:</strong>
-			<span>{{ config('image.driver') }}</span>
+			<strong><span class="badge badge-primary">DATABASE</span> Ping:</strong>
+			<span>{{ \DB::connection()->getPDO() ? 'Pong! Connected to DB "' . \DB::connection()->getDatabaseName() . '" ✅' : 'DB Not Responding ❌' }}</span>
 		</li>
 		<li>
 			<strong><span class="badge badge-primary">REDIS</span> Ping:</strong>
-			<span>{{ \Illuminate\Support\Facades\Redis::command('ping') ? '✅' : '❌' }}</span>
+			<span>{{ \Illuminate\Support\Facades\Redis::command('ping') ? 'Pong! Connected to Redis ✅' : 'Redis Not Responding ❌' }}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">PHP</span> memory_limit:</strong>
-			<span>{{ ini_get('memory_limit') }}</span>
-		</li>
-		<li>
-			<strong><span class="badge badge-primary">PHP</span> post_max_size:</strong>
-			<span>{{ ini_get('post_max_size') }}</span>
-		</li>
-		<li>
-			<strong><span class="badge badge-primary">PHP</span> upload_max_filesize:</strong>
-			<span>{{ ini_get('upload_max_filesize') }}</span>
+			<strong><span class="badge badge-primary">ACTIVITYPUB</span> instance actor created: </strong>
+			<span>{{ \App\Models\InstanceActor::count() ? '✅' : '❌' }}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">APP</span> Cache Driver:</strong>
-			<span>{{ config_cache('cache.default') }}</span>
+			<strong><span class="badge badge-primary">ACTIVITYPUB</span> instance actor cached: </strong>
+			<span>{{ Cache::get(\App\Models\InstanceActor::PROFILE_KEY) ? '✅' : '❌' }}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">APP</span> Mail Driver:</strong>
-			<span>{{ config_cache('mail.driver') }}</span>
+			<strong><span class="badge badge-primary">OAUTH</span> enabled: </strong>
+			<span>{{ config_cache('pixelfed.oauth_enabled') ? '✅' : '❌' }}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">APP</span> Mail Host:</strong>
-			<span>{{ config_cache('mail.host') ? substr(config_cache('mail.host'), 0, 5) . str_repeat('*', strlen(config_cache('mail.host')) - 5) : 'undefined' }}</span>
+			<strong><span class="badge badge-primary">OAUTH</span> token_expiration</strong>
+			<span>{{ config_cache('instance.oauth.token_expiration') }} days</span>
 		</li>
-		@if(config_cache('mail.driver') == 'mailgun')
 		<li>
-			<strong><span class="badge badge-primary">APP</span> Mailgun Domain:</strong>
-			<span>{{ config_cache('services.mailgun.domain') ?? 'undefined' }}</span>
+			<strong><span class="badge badge-primary">OAUTH</span> public key exists: </strong>
+			<span>{{ file_exists(storage_path('oauth-public.key')) ? '✅' : '❌' }}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">APP</span> Mailgun Secret:</strong>
-			<span>{{ config_cache('services.mailgun.secret') ? str_repeat('*', strlen(config_cache('services.mailgun.secret'))) : 'undefined' }}</span>
-		</li>
+			<strong><span class="badge badge-primary">OAUTH</span> private key exists: </strong>
+			<span>{{ file_exists(storage_path('oauth-private.key')) ? '✅' : '❌' }}</span>
+		</li>		
+		
+		<hr>
+		<p class="font-weight-bold text-muted">
+			Important Information
+		</p>
+
+
+		@if(function_exists('shell_exec'))
+			<li>
+				<strong>Version:</strong>
+				<span>{{config('pixelfed.version')}}-{{ @shell_exec('git log --pretty="%h" -n1 HEAD') ?? 'unknown git commit' }}</span>
+			</li>
+		@else
+			<li>
+				<strong>Version:</strong>
+				<span>{{config('pixelfed.version')}}</span>
+			</li>
 		@endif
-		@if(config_cache('mail.driver') == 'ses')
+
 		<li>
-			<strong><span class="badge badge-primary">APP</span> SES Key:</strong>
-			<span>{{ config_cache('services.ses.key') ? str_repeat('*', strlen(config_cache('services.ses.key'))) : 'undefined' }}</span>
+			<strong>Database:</strong>
+			@php($v = explode(' ', DB::select('select version() as version')[0]->version))
+			<span>{{config('database.default')}} ({{count($v) == 1 ? $v[0] : $v[1]}})</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">APP</span> SES Secret:</strong>
-			<span>{{ config_cache('services.ses.secret') ? str_repeat('*', strlen(config_cache('services.ses.secret'))) : 'undefined' }}</span>
+			<strong>APP_URL:</strong>
+			<span>{{config_cache('app.url')}}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">APP</span> SES Region:</strong>
-			<span>{{ config_cache('services.ses.region') ?? 'undefined' }}</span>
+			<strong>APP_DOMAIN:</strong>
+			<span>{{config_cache('pixelfed.domain.app')}}</span>
 		</li>
-		@endif
 		<li>
-			<strong><span class="badge badge-primary">APP</span> Queue Driver:</strong>
-			<span>{{ config_cache('queue.default') }}</span>
+			<strong>ADMIN_DOMAIN:</strong>
+			<span>{{config_cache('pixelfed.domain.admin')}}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">APP</span> Session Driver:</strong>
-			<span>{{ config_cache('session.driver') }}</span>
+			<strong>SESSION_DOMAIN:</strong>
+			<span>{{config_cache('session.domain')}}</span>
 		</li>
+
+		<hr>
+		<p class="font-weight-bold text-muted">
+			PHP Variables
+		</p>
 		<li>
-			<strong><span class="badge badge-primary">APP</span> Session Lifetime:</strong>
-			<span>{{ config_cache('session.lifetime') }}</span>
+			<strong>PHP:</strong>
+			<span>{{phpversion()}}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">APP</span> Session Domain:</strong>
-			<span>{{ config_cache('session.domain') }}</span>
+			<strong><span class="badge badge-primary">PHP INI</span> memory_limit:</strong>
+			<span>{{ ini_get('memory_limit') }}</span>
 		</li>
 		<li>
-			<div class="tt">
-				<strong><span class="badge badge-primary">CONFIG</span> pixelfed: </strong>
-				<span class="text-truncate">{!! json_encode(config_cache('pixelfed'), JSON_UNESCAPED_SLASHES) !!}</span>
-			</div>
+			<strong><span class="badge badge-primary">PHP INI</span> post_max_size:</strong>
+			<span>{{ ini_get('post_max_size') }}</span>
 		</li>
 		<li>
-			<div class="tt">
-				<strong><span class="badge badge-primary">CONFIG</span> federation: </strong>
-				<span class="text-truncate">{!! json_encode(config_cache('federation'), JSON_UNESCAPED_SLASHES) !!}</span>
-			</div>
+			<strong><span class="badge badge-primary">PHP INI</span> upload_max_filesize:</strong>
+			<span>{{ ini_get('upload_max_filesize') }}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">ACTIVITYPUB</span> instance actor created: </strong>
-			<span>{{ \App\Models\InstanceActor::count() ? '✅' : '❌' }}</span>
+			<strong><span class="badge badge-primary">PHP INI</span> max_file_uploads:</strong>
+			<span>{{ ini_get('max_file_uploads') }}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">ACTIVITYPUB</span> instance actor cached: </strong>
-			<span>{{ Cache::get(\App\Models\InstanceActor::PROFILE_KEY) ? '✅' : '❌' }}</span>
+			<strong><span class="badge badge-primary">PHP INI</span> max_execution_time:</strong>
+			<span>{{ ini_get('max_execution_time') }}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">OAUTH</span> enabled: </strong>
-			<span>{{ config_cache('pixelfed.oauth_enabled') ? '✅' : '❌' }}</span>
+			<strong><span class="badge badge-primary">PHP INI</span> max_input_time:</strong>
+			<span>{{ ini_get('max_input_time') }}</span>
 		</li>
 		<li>
-			<strong><span class="badge badge-primary">OAUTH</span> token_expiration</strong>
-			<span>{{ config_cache('instance.oauth.token_expiration') }} days</span>
+			<strong><span class="badge badge-primary">PHP INI</span> file_uploads:</strong>
+			<span>{{ ini_get('file_uploads') ? '✅' : '❌' }}</span>
 		</li>
 
-		<li>
-			<strong><span class="badge badge-primary">OAUTH</span> public key exists: </strong>
-			<span>{{ file_exists(storage_path('oauth-public.key')) ? '✅' : '❌' }}</span>
-		</li>
-		<li>
-			<strong><span class="badge badge-primary">OAUTH</span> private key exists: </strong>
-			<span>{{ file_exists(storage_path('oauth-private.key')) ? '✅' : '❌' }}</span>
-		</li>
-		<li>
-			<strong><span class="badge badge-primary">Storage</span> Cloud Storage: </strong>
-			<span>{{ config_cache('pixelfed.cloud_storage') ? '✅' : '❌' }}</span>
-		</li>
-		<li>
-			<strong><span class="badge badge-primary">Storage</span> Filesystems default (local/s3/spaces): </strong>
-			<span>{{ config_cache('filesystems.default')}}</span>
-		</li>
-		<li>
-			<strong><span class="badge badge-primary">Network</span> TrustedProxy: </strong>
-			<span>{{ config('trustedproxy.proxies') }}</span>
-		</li>
 
-	</ul>
+	<hr>
+	<p class="font-weight-bold text-muted">
+		Pixelfed Variables (No Secrets)
+	</p>
+	<table style="width:100%" class="table">
+	<thead class="bg-light">
+	<tr>
+		<th width="5%" scope="col" class="border-0 text-dark">CONFIG</th>
+		<th width="20%"scope="col" class="border-0 text-dark">Variable Name</th>
+		<th width="40%"scope="col" class="border-0 text-dark">Details</th>
+	</tr>
+	</thead>
+	<tbody>
+	<tr>
+		<td><span class="badge badge-primary">APP</span></td>
+		<td><strong>APP_NAME</strong></td>
+		<td><span>"{{config_cache('app.name')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">APP</span></td>
+		<td><strong>APP_ENV</strong></td>
+		<td><span>"{{config_cache('app.env')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">APP</span></td>
+		<td><strong>APP_DEBUG</strong></td>
+		<td><span>{{config_cache('app.debug') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">APP</span></td>
+		<td><strong>APP_URL</strong></td>
+		<td><span>"{{config_cache('app.url')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">APP</span></td>
+		<td><strong>APP_LOCALE</strong></td>
+		<td><span>"{{config_cache('app.locale')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">APP</span></td>
+		<td><strong>APP_FALLBACK_LOCALE</strong></td>
+		<td><span>"{{config_cache('app.fallback_locale')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">BROADCASTING</span></td>
+		<td><strong>BROADCAST_DRIVER</strong></td>
+		<td><span>"{{config_cache('broadcasting.default')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">CACHE</span></td>
+		<td><strong>CACHE_DRIVER</strong></td>
+		<td><span>"{{config_cache('cache.default')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">CAPTCHA</span></td>
+		<td><strong>CAPTCHA_ENABLED</strong></td>
+		<td><span>{{ config_cache('captcha.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">DATABASE</span></td>
+		<td><strong>DB_CONNECTION</strong></td>
+		<td><span>"{{config_cache('database.default')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">DATABASE</span></td>
+		<td><strong>REDIS_CLIENT</strong></td>
+		<td><span>"{{config_cache('database.redis.client')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">EXP</span></td>
+		<td><strong>EXP_LC</strong></td>
+		<td><span>{{config_cache('exp.lc') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">EXP</span></td>
+		<td><strong>EXP_TOP</strong></td>
+		<td><span>{{config_cache('exp.top') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">EXP</span></td>
+		<td><strong>EXP_POLLS</strong></td>
+		<td><span>{{config_cache('exp.polls') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">EXP</span></td>
+		<td><strong>EXP_CPT</strong></td>
+		<td><span>{{config_cache('exp.cached_public_timeline') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">EXP</span></td>
+		<td><strong>EXP_GPS</strong></td>
+		<td><span>{{config_cache('exp.gps') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">EXP</span></td>
+		<td><strong>EXP_EMC</strong></td>
+		<td><span>{{config_cache('exp.emc') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>ACTIVITY_PUB</strong></td>
+		<td><span>{{config_cache('federation.activitypub.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>AP_OUTBOX</strong></td>
+		<td><span>{{config_cache('federation.activitypub.outbox') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>AP_INBOX</strong></td>
+		<td><span>{{config_cache('federation.activitypub.inbox') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>AP_SHAREDINBOX</strong></td>
+		<td><span>{{config_cache('federation.activitypub.sharedInbox') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>AP_REMOTE_FOLLOW</strong></td>
+		<td><span>{{config_cache('federation.activitypub.remoteFollow') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>ACTIVITYPUB_DELIVERY_TIMEOUT</strong></td>
+		<td><span>"{{config_cache('federation.activitypub.delivery.timeout')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>ACTIVITYPUB_DELIVERY_CONCURRENCY</strong></td>
+		<td><span>"{{config_cache('federation.activitypub.delivery.concurrency')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>AP_LOGGER_ENABLED</strong></td>
+		<td><span>{{config_cache('federation.activitypub.delivery.logger.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>ATOM_FEEDS</strong></td>
+		<td><span>{{config_cache('federation.atom.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>REMOTE_AVATARS</strong></td>
+		<td><span>{{config_cache('federation.avatars.store_local') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>NODEINFO</strong></td>
+		<td><span>{{config_cache('federation.nodeinfo.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>WEBFINGER</strong></td>
+		<td><span>{{config_cache('federation.webfinger.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>PF_NETWORK_TIMELINE</strong></td>
+		<td><span>{{config_cache('federation.network_timeline') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>CUSTOM_EMOJI</strong></td>
+		<td><span>{{config_cache('federation.custom_emoji.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FEDERATION</span></td>
+		<td><strong>CUSTOM_EMOJI_MAX_SIZE</strong></td>
+		<td><span>"{{config_cache('federation.custom_emoji.max_size')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">FILESYSTEMS</span></td>
+		<td><strong>FILESYSTEM_DRIVER</strong></td>
+		<td><span>"{{config_cache('filesystems.default')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">FILESYSTEMS</span></td>
+		<td><strong>FILESYSTEM_CLOUD</strong></td>
+		<td><span>"{{config_cache('filesystems.cloud')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">HASHING</span></td>
+		<td><strong>BCRYPT_COST</strong></td>
+		<td><span>"{{config_cache('hashing.bcrypt.rounds')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">HORIZON</span></td>
+		<td><strong>HORIZON_PREFIX</strong></td>
+		<td><span>"{{config_cache('horizon.prefix')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">HORIZON</span></td>
+		<td><strong>HORIZON_MEMORY_LIMIT</strong></td>
+		<td><span>"{{config_cache('horizon.memory_limit')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">HORIZON</span></td>
+		<td><strong>HORIZON_BALANCE_STRATEGY</strong></td>
+		<td><span>"{{config_cache('horizon.environments.production.supervisor-1.balance')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">HORIZON</span></td>
+		<td><strong>HORIZON_MIN_PROCESSES</strong></td>
+		<td><span>"{{config_cache('horizon.environments.production.supervisor-1.minProcesses')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">HORIZON</span></td>
+		<td><strong>HORIZON_MAX_PROCESSES</strong></td>
+		<td><span>"{{config_cache('horizon.environments.production.supervisor-1.maxProcesses')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">HORIZON</span></td>
+		<td><strong>HORIZON_SUPERVISOR_MEMORY</strong></td>
+		<td><span>"{{config_cache('horizon.environments.production.supervisor-1.memory')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">HORIZON</span></td>
+		<td><strong>HORIZON_SUPERVISOR_TRIES</strong></td>
+		<td><span>"{{config_cache('horizon.environments.production.supervisor-1.tries')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">HORIZON</span></td>
+		<td><strong>HORIZON_SUPERVISOR_NICE</strong></td>
+		<td><span>"{{config_cache('horizon.environments.production.supervisor-1.nice')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">HORIZON</span></td>
+		<td><strong>HORIZON_SUPERVISOR_TIMEOUT</strong></td>
+		<td><span>"{{config_cache('horizon.environments.production.supervisor-1.timeout')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">HORIZON</span></td>
+		<td><strong>HORIZON_DARKMODE</strong></td>
+		<td><span>{{config_cache('horizon.darkmode') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">IMAGE</span></td>
+		<td><strong>IMAGE_DRIVER </strong></td>
+		<td><span>"{{config_cache('image.driver')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>INSTANCE_DESCRIPTION</strong></td>
+		<td><span>"{{config_cache('instance.description')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>INSTANCE_CONTACT_FORM</strong></td>
+		<td><span>{{config_cache('instance.contact.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>INSTANCE_CONTACT_MAX_PER_DAY</strong></td>
+		<td><span>"{{config_cache('instance.contact.max_per_day')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>INSTANCE_DISCOVER_PUBLIC</strong></td>
+		<td><span>{{config_cache('instance.discover.public') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>EXP_LOOPS</strong></td>
+		<td><span>{{config_cache('instance.discover.loops.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>INSTANCE_PUBLIC_HASHTAGS</strong></td>
+		<td><span>{{config_cache('instance.discover.tags.is_public') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>INSTANCE_CONTACT_EMAIL</strong></td>
+		<td><span>"{{config_cache('instance.email')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>INSTANCE_PUBLIC_LOCAL_TIMELINE</strong></td>
+		<td><span>{{config_cache('instance.timeline.local.is_public') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>PAGE_404_HEADER</strong></td>
+		<td><span>"{{config_cache('instance.page.404.header')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>PAGE_404_BODY</strong></td>
+		<td><span>"{{config_cache('instance.page.404.body')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>PAGE_503_HEADER</strong></td>
+		<td><span>"{{config_cache('instance.page.503.header')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>PAGE_503_BODY</strong></td>
+		<td><span>"{{config_cache('instance.page.503.body')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>BANNED_USERNAMES</strong></td>
+		<td><span>"{{config_cache('instance.username.banned')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>USERNAME_REMOTE_FORMAT</strong></td>
+		<td><span>"{{config_cache('instance.username.remote.format')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>USERNAME_REMOTE_CUSTOM_TEXT</strong></td>
+		<td><span>"{{config_cache('instance.username.remote.custom')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>STORIES_ENABLED</strong></td>
+		<td><span>{{config_cache('instance.stories.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>RESTRICTED_INSTANCE</strong></td>
+		<td><span>{{config_cache('instance.restricted.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>OAUTH_TOKEN_DAYS</strong></td>
+		<td><span>"{{config_cache('instance.oauth.token_expiration')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>OAUTH_REFRESH_DAYS</strong></td>
+		<td><span>"{{config_cache('instance.oauth.refresh_expiration')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>OAUTH_PAT_ENABLED</strong></td>
+		<td><span>{{config_cache('instance.oauth.pat.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>OAUTH_PAT_ID</strong></td>
+		<td><span>"{{config_cache('instance.oauth.pat.id')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>ENABLE_COVID_LABEL</strong></td>
+		<td><span>{{config_cache('instance.label.covid.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>COVID_LABEL_URL</strong></td>
+		<td><span>"{{config_cache('instance.label.covid.url')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>COVID_LABEL_ORG</strong></td>
+		<td><span>"{{config_cache('instance.label.covid.org')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">INSTANCE</span></td>
+		<td><strong>ENABLE_CONFIG_CACHE</strong></td>
+		<td><span>{{config_cache('instance.enable_cc') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">LDAP</span></td>
+		<td><strong>LDAP_CONNECTION</strong></td>
+		<td><span>"{{config_cache('ldap.default')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">LDAP</span></td>
+		<td><strong>LDAP_LOGGING</strong></td>
+		<td><span>{{config_cache('ldap.logging') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">LDAP</span></td>
+		<td><strong>LDAP_CACHE</strong></td>
+		<td><span>{{config_cache('ldap.cache.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">LOGGING</span></td>
+		<td><strong>LOG_CHANNEL</strong></td>
+		<td><span>"{{config_cache('logging.default')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">LOGGING</span></td>
+		<td><strong>LOG_LEVEL (stack)</strong></td>
+		<td><span>"{{config_cache('logging.channels.single.level')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">MAIL</span></td>
+		<td><strong>MAIL_DRIVER</strong></td>
+		<td><span>"{{config_cache('mail.driver')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">MAIL</span></td>
+		<td><strong>MAIL_HOST</strong></td>
+		<td><span>"{{config_cache('mail.host')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">MAIL</span></td>
+		<td><strong>MAIL_PORT</strong></td>
+		<td><span>"{{config_cache('mail.port')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">MAIL</span></td>
+		<td><strong>MAIL_FROM_ADDRESS</strong></td>
+		<td><span>"{{config_cache('mail.from.address')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">MAIL</span></td>
+		<td><strong>MAIL_FROM_NAME</strong></td>
+		<td><span>"{{config_cache('mail.from.name')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">MAIL</span></td>
+		<td><strong>MAIL_ENCRYPTION</strong></td>
+		<td><span>"{{config_cache('mail.encryption')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">MEDIA</span></td>
+		<td><strong>MEDIA_EXIF_DATABASE</strong></td>
+		<td><span>{{config_cache('media.exif.batabase') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>ADMIN_DOMAIN</strong></td>
+		<td><span>"{{config_cache('pixelfed.domain.admin')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>APP_DOMAIN</strong></td>
+		<td><span>"{{config_cache('pixelfed.domain.app')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>MEMORY_LIMIT</strong></td>
+		<td><span>"{{config_cache('pixelfed.memory_limit')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>OPEN_REGISTRATION</strong></td>
+		<td><span>{{config_cache('pixelfed.open_registration') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>MAX_ACCOUNT_SIZE (KB)</strong></td>
+		<td><span>"{{config_cache('pixelfed.max_account_size')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>MAX_PHOTO_SIZE (KB)</strong></td>
+		<td><span>"{{config_cache('pixelfed.max_photo_size')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>MAX_AVATAR_SIZE (KB)</strong></td>
+		<td><span>"{{config_cache('pixelfed.max_avatar_size')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>MAX_CAPTION_LENGTH</strong></td>
+		<td><span>"{{config_cache('pixelfed.max_caption_length')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>MAX_BIO_LENGTH</strong></td>
+		<td><span>"{{config_cache('pixelfed.max_bio_length')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>MAX_NAME_LENGTH</strong></td>
+		<td><span>"{{config_cache('pixelfed.max_name_length')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>MIN_PASSWORD_LENGTH</strong></td>
+		<td><span>"{{config_cache('pixelfed.min_password_length')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>MAX_ALBUM_LENGTH</strong></td>
+		<td><span>"{{config_cache('pixelfed.max_album_length')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>ENFORCE_EMAIL_VERIFICATION</strong></td>
+		<td><span>{{config_cache('pixelfed.enforce_email_verification') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>IMAGE_QUALITY (1-100)</strong></td>
+		<td><span>"{{config_cache('pixelfed.image_quality')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>ACCOUNT_DELETION</strong></td>
+		<td><span>{{config_cache('pixelfed.account_deletion') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>ACCOUNT_DELETE_AFTER</strong></td>
+		<td><span>{{config_cache('pixelfed.account_delete_after') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_ENABLE_CLOUD</strong></td>
+		<td><span>{{config_cache('pixelfed.cloud_storage') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_MAX_USERS</strong></td>
+		<td><span>{{config_cache('pixelfed.max_users') ? config('pixelfed.max_users') : '❌ false'}}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_OPTIMIZE_IMAGES</strong></td>
+		<td><span>{{config_cache('pixelfed.optimize_image') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_OPTIMIZE_VIDEOS</strong></td>
+		<td><span>{{config_cache('pixelfed.optimize_video') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_USER_INVITES</strong></td>
+		<td><span>{{config_cache('pixelfed.user_invites.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_USER_INVITES_TOTAL_LIMIT</strong></td>
+		<td><span>"{{config_cache('pixelfed.user_invites.limit.total')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_USER_INVITES_DAILY_LIMIT</strong></td>
+		<td><span>"{{config_cache('pixelfed.user_invites.limit.daily')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_USER_INVITES_MONTHLY_LIMIT</strong></td>
+		<td><span>"{{config_cache('pixelfed.user_invites.limit.monthly')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_MAX_COLLECTION_LENGTH</strong></td>
+		<td><span>"{{config_cache('pixelfed.max_collection_length')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>MEDIA_TYPES</strong></td>
+		<td><span>"{{config_cache('pixelfed.media_types')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>LIMIT_ACCOUNT_SIZE</strong></td>
+		<td><span>{{config_cache('pixelfed.enforce_account_limit') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>IMPORT_INSTAGRAM</strong></td>
+		<td><span>{{config_cache('pixelfed.import.instagram.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>IMPORT_INSTAGRAM_POST_LIMIT</strong></td>
+		<td><span>"{{config_cache('pixelfed.import.instagram.limits.posts')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>IMPORT_INSTAGRAM_SIZE_LIMIT</strong></td>
+		<td><span>"{{config_cache('pixelfed.import.instagram.limits.size')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>OAUTH_ENABLED</strong></td>
+		<td><span>{{config_cache('pixelfed.oauth_enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_BOUNCER_ENABLED</strong></td>
+		<td><span>{{config_cache('pixelfed.bouncer.enabled') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_MEDIA_FAST_PROCESS</strong></td>
+		<td><span>{{config_cache('pixelfed.media_fast_process') ? '✅ true' : '❌ false' }}</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">PIXELFED</span></td>
+		<td><strong>PF_MEDIA_MAX_ALTTEXT_LENGTH</strong></td>
+		<td><span>"{{config_cache('pixelfed.max_altext_length')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">PURIFY</span></td>
+		<td><strong>RESTRICT_HTML_TYPES</strong></td>
+		<td><span>BROKEN</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">QUEUE</span></td>
+		<td><strong>QUEUE_DRIVER</strong></td>
+		<td><span>"{{config_cache('queue.default')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">SESSION</span></td>
+		<td><strong>SESSION_DRIVER</strong></td>
+		<td><span>"{{config_cache('session.driver')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">SESSION</span></td>
+		<td><strong>SESSION_LIFETIME</strong></td>
+		<td><span>"{{config_cache('session.lifetime')}}"</span></td>
+	</tr>
+	<tr>
+		<td><span class="badge badge-primary">SESSION</span></td>
+		<td><strong>SESSION_DOMAIN</strong></td>
+		<td><span>"{{config_cache('session.domain')}}"</span></td>
+	</tr>
+
+	<tr>
+		<td><span class="badge badge-primary">TRUSTEDPROXY</span></td>
+		<td><strong>TRUST_PROXIES</strong></td>
+		<td><span>"{{config_cache('trustedproxy.proxies')}}"</span></td>
+	</tr>
+      </tbody>
+      </table>
+  </div>
+  </ul>
+
 </div>
 <div class="pb-3 border-bottom">
 	<div class="form-group mb-0">

+ 1 - 1
resources/views/admin/profiles/home.blade.php

@@ -261,7 +261,7 @@
 		}
 		if($(this).hasClass('row-check-all')) {
 			return;
-		};
+		}
 		if(el.checked == true) {
 			$(this).parents().eq(2).addClass('user-row-active');
 			$('.bulk-actions').removeClass('d-none');

+ 2 - 2
resources/views/settings/privacy/blocked-instances.blade.php

@@ -68,7 +68,7 @@
           swal.stopLoading();
           swal.close();
           return;
-        };
+        }
         let msg = 'The URL you have entered is not valid, please try again.'
         try {
           let validator = new URL(val);
@@ -77,7 +77,7 @@
             swal.close();
             swal('Invalid URL', msg, 'error');
             return;
-          };
+          }
           axios.post(window.location.href, {
             domain: validator.href
           }).then(res => {

+ 1 - 1
resources/views/settings/security/2fa/edit.blade.php

@@ -82,7 +82,7 @@ $(document).ready(function() {
 						})
 					}
 				});
-			};
+			}
 		});
 	});
 });