home.blade.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932
  1. @extends('admin.partial.template-full')
  2. @section('section')
  3. <div class="title mb-4">
  4. <h3 class="font-weight-bold">Diagnostics</h3>
  5. </div>
  6. <div class="pb-3 border-bottom">
  7. <p class="font-weight-bold text-muted">
  8. Information
  9. <span class="small text-primary ml-3 copy-information cursor-pointer text-uppercase font-weight-bold">Copy</span>
  10. </p>
  11. <div class="information">
  12. <ul>
  13. <p class="font-weight-bold text-muted">
  14. Troubleshooting
  15. </p>
  16. <li>
  17. <strong>Bootstrap:</strong>
  18. <span>{{is_writable(base_path('bootstrap/')) ? 'Writable ✅' : 'Not writable ❌'}}</span>
  19. </li>
  20. <li>
  21. <strong>Storage:</strong>
  22. <span>{{is_writable(base_path('storage/')) ? 'Writable ✅' : 'Not writable ❌'}}</span>
  23. </li>
  24. @foreach([
  25. 'bcmath',
  26. 'gd',
  27. 'imagick',
  28. 'ctype',
  29. 'curl',
  30. 'intl',
  31. 'json',
  32. 'mbstring',
  33. 'openssl',
  34. 'redis'
  35. ] as $ext)
  36. @if(!extension_loaded($ext))
  37. <li>
  38. <strong>PHP Module {{$ext}}:</strong>
  39. <span>Not installed/Not loaded ❌</span>
  40. </li>
  41. @endif
  42. @endforeach
  43. <li>
  44. <strong><span class="badge badge-primary">DATABASE</span> Ping:</strong>
  45. <span>{{ \DB::connection()->getPDO() ? 'Pong! Connected to DB "' . \DB::connection()->getDatabaseName() . '" ✅' : 'DB Not Responding ❌' }}</span>
  46. </li>
  47. <li>
  48. <strong><span class="badge badge-primary">REDIS</span> Ping:</strong>
  49. <span>{{ \Illuminate\Support\Facades\Redis::command('ping') ? 'Pong! Connected to Redis ✅' : 'Redis Not Responding ❌' }}</span>
  50. </li>
  51. <li>
  52. <strong><span class="badge badge-primary">ACTIVITYPUB</span> instance actor created: </strong>
  53. <span>{{ \App\Models\InstanceActor::count() ? '✅ true' : '❌ false' }}</span>
  54. </li>
  55. <li>
  56. <strong><span class="badge badge-primary">ACTIVITYPUB</span> instance actor cached: </strong>
  57. <span>{{ Cache::get(\App\Models\InstanceActor::PROFILE_KEY) ? '✅ true' : '❌ false' }}</span>
  58. </li>
  59. <li>
  60. <strong><span class="badge badge-primary">OAUTH</span> enabled: </strong>
  61. <span>{{ config_cache('pixelfed.oauth_enabled') ? '✅ true' : '❌ false' }}</span>
  62. </li>
  63. <li>
  64. <strong><span class="badge badge-primary">OAUTH</span> token_expiration</strong>
  65. <span>{{ config_cache('instance.oauth.token_expiration') }} days</span>
  66. </li>
  67. <li>
  68. <strong><span class="badge badge-primary">OAUTH</span> public key exists: </strong>
  69. <span>{{ file_exists(storage_path('oauth-public.key')) || config_cache('passport.public_key') ? '✅ true' : '❌ false' }}</span>
  70. </li>
  71. <li>
  72. <strong><span class="badge badge-primary">OAUTH</span> private key exists: </strong>
  73. <span>{{ file_exists(storage_path('oauth-private.key')) || config_cache('passport.private_key') ? '✅ true' : '❌ false' }}</span>
  74. </li>
  75. <hr>
  76. <p class="font-weight-bold text-muted">
  77. Important Information
  78. </p>
  79. @if(function_exists('shell_exec'))
  80. <li>
  81. <strong>Version:</strong>
  82. <span>{{config('pixelfed.version')}}-{{ @shell_exec('git log --pretty="%h" -n1 HEAD') ?? 'unknown git commit' }}</span>
  83. </li>
  84. @else
  85. <li>
  86. <strong>Version:</strong>
  87. <span>{{config('pixelfed.version')}}</span>
  88. </li>
  89. @endif
  90. <li>
  91. <strong>Database:</strong>
  92. @php($v = explode(' ', DB::select('select version() as version')[0]->version))
  93. <span>{{config('database.default')}} ({{count($v) == 1 ? $v[0] : $v[1]}})</span>
  94. </li>
  95. <li>
  96. <strong>APP_URL:</strong>
  97. <span>{{config_cache('app.url')}}</span>
  98. </li>
  99. <li>
  100. <strong>APP_DOMAIN:</strong>
  101. <span>{{config_cache('pixelfed.domain.app')}}</span>
  102. </li>
  103. <li>
  104. <strong>ADMIN_DOMAIN:</strong>
  105. <span>{{config_cache('pixelfed.domain.admin')}}</span>
  106. </li>
  107. <li>
  108. <strong>SESSION_DOMAIN:</strong>
  109. <span>{{config_cache('session.domain')}}</span>
  110. </li>
  111. <hr>
  112. <p class="font-weight-bold text-muted">
  113. PHP Variables
  114. </p>
  115. <li>
  116. <strong>PHP:</strong>
  117. <span>{{phpversion()}}</span>
  118. </li>
  119. <li>
  120. <strong><span class="badge badge-primary">PHP INI</span> memory_limit:</strong>
  121. <span>{{ ini_get('memory_limit') }}</span>
  122. </li>
  123. <li>
  124. <strong><span class="badge badge-primary">PHP INI</span> post_max_size:</strong>
  125. <span>{{ ini_get('post_max_size') }}</span>
  126. </li>
  127. <li>
  128. <strong><span class="badge badge-primary">PHP INI</span> upload_max_filesize:</strong>
  129. <span>{{ ini_get('upload_max_filesize') }}</span>
  130. </li>
  131. <li>
  132. <strong><span class="badge badge-primary">PHP INI</span> max_file_uploads:</strong>
  133. <span>{{ ini_get('max_file_uploads') }}</span>
  134. </li>
  135. <li>
  136. <strong><span class="badge badge-primary">PHP INI</span> max_execution_time:</strong>
  137. <span>{{ ini_get('max_execution_time') }}</span>
  138. </li>
  139. <li>
  140. <strong><span class="badge badge-primary">PHP INI</span> max_input_time:</strong>
  141. <span>{{ ini_get('max_input_time') }}</span>
  142. </li>
  143. <li>
  144. <strong><span class="badge badge-primary">PHP INI</span> file_uploads (On):</strong>
  145. <span>{{ ini_get('file_uploads') }}</span>
  146. </li>
  147. <li>
  148. <strong><span class="badge badge-primary">PHP INI - Security</span> allow_url_fopen (true):</strong>
  149. <span>{{ ini_get('allow_url_fopen') }}</span>
  150. </li>
  151. <li>
  152. <strong><span class="badge badge-primary">PHP INI - Security</span> allow_url_include (false):</strong>
  153. <span>{{ ini_get('allow_url_include') }}</span>
  154. </li>
  155. <li>
  156. <strong><span class="badge badge-primary">PHP INI - Security</span> expose_php (false):</strong>
  157. <span>{{ ini_get('expose_php') }}</span>
  158. </li>
  159. <li>
  160. <strong><span class="badge badge-primary">PHP INI - Security</span> display_errors (false):</strong>
  161. <span>{{ ini_get('display_errors') }}</span>
  162. </li>
  163. <li>
  164. <strong><span class="badge badge-primary">PHP INI - Security</span> display_startup_errors (false):</strong>
  165. <span>{{ ini_get('display_startup_errors') }}</span>
  166. </li>
  167. <li>
  168. <strong><span class="badge badge-primary">PHP INI - Security</span> log_errors (true):</strong>
  169. <span>{{ ini_get('log_errors') }}</span>
  170. </li>
  171. <li>
  172. <strong><span class="badge badge-primary">PHP INI - Security</span> ignore_repeated_errors (false):</strong>
  173. <span>{{ ini_get('ignore_repeated_errors') }}</span>
  174. </li>
  175. <li>
  176. <strong><span class="badge badge-primary">PHP INI - Security</span> disable_functions:</strong>
  177. <span>{{ ini_get('disable_functions') }}</span>
  178. </li>
  179. <hr>
  180. <p class="font-weight-bold text-muted">
  181. Pixelfed Variables (No Secrets)
  182. </p>
  183. <table style="width:100%" class="table">
  184. <thead class="bg-light">
  185. <tr>
  186. <th width="5%" scope="col" class="border-0 text-dark">CONFIG</th>
  187. <th width="20%"scope="col" class="border-0 text-dark">Variable Name</th>
  188. <th width="40%"scope="col" class="border-0 text-dark">Details</th>
  189. </tr>
  190. </thead>
  191. <tbody>
  192. <tr>
  193. <td><span class="badge badge-primary">APP</span></td>
  194. <td><strong>APP_NAME</strong></td>
  195. <td><span>"{{config_cache('app.name')}}"</span></td>
  196. </tr>
  197. <tr>
  198. <td><span class="badge badge-primary">APP</span></td>
  199. <td><strong>APP_ENV</strong></td>
  200. <td><span>"{{config_cache('app.env')}}"</span></td>
  201. </tr>
  202. <tr>
  203. <td><span class="badge badge-primary">APP</span></td>
  204. <td><strong>APP_DEBUG</strong></td>
  205. <td><span>{{config_cache('app.debug') ? '✅ true' : '❌ false' }}</span></td>
  206. </tr>
  207. <tr>
  208. <td><span class="badge badge-primary">APP</span></td>
  209. <td><strong>APP_URL</strong></td>
  210. <td><span>"{{config_cache('app.url')}}"</span></td>
  211. </tr>
  212. <tr>
  213. <td><span class="badge badge-primary">APP</span></td>
  214. <td><strong>APP_LOCALE</strong></td>
  215. <td><span>"{{config_cache('app.locale')}}"</span></td>
  216. </tr>
  217. <tr>
  218. <td><span class="badge badge-primary">APP</span></td>
  219. <td><strong>APP_FALLBACK_LOCALE</strong></td>
  220. <td><span>"{{config_cache('app.fallback_locale')}}"</span></td>
  221. </tr>
  222. <tr>
  223. <td><span class="badge badge-primary">BROADCASTING</span></td>
  224. <td><strong>BROADCAST_DRIVER</strong></td>
  225. <td><span>"{{config_cache('broadcasting.default')}}"</span></td>
  226. </tr>
  227. <tr>
  228. <td><span class="badge badge-primary">CACHE</span></td>
  229. <td><strong>CACHE_DRIVER</strong></td>
  230. <td><span>"{{config_cache('cache.default')}}"</span></td>
  231. </tr>
  232. <tr>
  233. <td><span class="badge badge-primary">CAPTCHA</span></td>
  234. <td><strong>CAPTCHA_ENABLED</strong></td>
  235. <td><span>{{ config_cache('captcha.enabled') ? '✅ true' : '❌ false' }}</span></td>
  236. </tr>
  237. <tr>
  238. <td><span class="badge badge-primary">DATABASE</span></td>
  239. <td><strong>DB_CONNECTION</strong></td>
  240. <td><span>"{{config_cache('database.default')}}"</span></td>
  241. </tr>
  242. <tr>
  243. <td><span class="badge badge-primary">DATABASE</span></td>
  244. <td><strong>REDIS_CLIENT</strong></td>
  245. <td><span>"{{config_cache('database.redis.client')}}"</span></td>
  246. </tr>
  247. <tr>
  248. <td><span class="badge badge-primary">EXP</span></td>
  249. <td><strong>EXP_LC</strong></td>
  250. <td><span>{{config_cache('exp.lc') ? '✅ true' : '❌ false' }}</span></td>
  251. </tr>
  252. <tr>
  253. <td><span class="badge badge-primary">EXP</span></td>
  254. <td><strong>EXP_TOP</strong></td>
  255. <td><span>{{config_cache('exp.top') ? '✅ true' : '❌ false' }}</span></td>
  256. </tr>
  257. <tr>
  258. <td><span class="badge badge-primary">EXP</span></td>
  259. <td><strong>EXP_POLLS</strong></td>
  260. <td><span>{{config_cache('exp.polls') ? '✅ true' : '❌ false' }}</span></td>
  261. </tr>
  262. <tr>
  263. <td><span class="badge badge-primary">EXP</span></td>
  264. <td><strong>EXP_CPT</strong></td>
  265. <td><span>{{config_cache('exp.cached_public_timeline') ? '✅ true' : '❌ false' }}</span></td>
  266. </tr>
  267. <tr>
  268. <td><span class="badge badge-primary">EXP</span></td>
  269. <td><strong>EXP_GPS</strong></td>
  270. <td><span>{{config_cache('exp.gps') ? '✅ true' : '❌ false' }}</span></td>
  271. </tr>
  272. <tr>
  273. <td><span class="badge badge-primary">EXP</span></td>
  274. <td><strong>EXP_EMC</strong></td>
  275. <td><span>{{config_cache('exp.emc') ? '✅ true' : '❌ false' }}</span></td>
  276. </tr>
  277. <tr>
  278. <td><span class="badge badge-primary">FEDERATION</span></td>
  279. <td><strong>ACTIVITY_PUB</strong></td>
  280. <td><span>{{config_cache('federation.activitypub.enabled') ? '✅ true' : '❌ false' }}</span></td>
  281. </tr>
  282. <tr>
  283. <td><span class="badge badge-primary">FEDERATION</span></td>
  284. <td><strong>AP_OUTBOX</strong></td>
  285. <td><span>{{config_cache('federation.activitypub.outbox') ? '✅ true' : '❌ false' }}</span></td>
  286. </tr>
  287. <tr>
  288. <td><span class="badge badge-primary">FEDERATION</span></td>
  289. <td><strong>AP_INBOX</strong></td>
  290. <td><span>{{config_cache('federation.activitypub.inbox') ? '✅ true' : '❌ false' }}</span></td>
  291. </tr>
  292. <tr>
  293. <td><span class="badge badge-primary">FEDERATION</span></td>
  294. <td><strong>AP_SHAREDINBOX</strong></td>
  295. <td><span>{{config_cache('federation.activitypub.sharedInbox') ? '✅ true' : '❌ false' }}</span></td>
  296. </tr>
  297. <tr>
  298. <td><span class="badge badge-primary">FEDERATION</span></td>
  299. <td><strong>AP_REMOTE_FOLLOW</strong></td>
  300. <td><span>{{config_cache('federation.activitypub.remoteFollow') ? '✅ true' : '❌ false' }}</span></td>
  301. </tr>
  302. <tr>
  303. <td><span class="badge badge-primary">FEDERATION</span></td>
  304. <td><strong>ACTIVITYPUB_DELIVERY_TIMEOUT</strong></td>
  305. <td><span>"{{config_cache('federation.activitypub.delivery.timeout')}}"</span></td>
  306. </tr>
  307. <tr>
  308. <td><span class="badge badge-primary">FEDERATION</span></td>
  309. <td><strong>ACTIVITYPUB_DELIVERY_CONCURRENCY</strong></td>
  310. <td><span>"{{config_cache('federation.activitypub.delivery.concurrency')}}"</span></td>
  311. </tr>
  312. <tr>
  313. <td><span class="badge badge-primary">FEDERATION</span></td>
  314. <td><strong>AP_LOGGER_ENABLED</strong></td>
  315. <td><span>{{config_cache('federation.activitypub.delivery.logger.enabled') ? '✅ true' : '❌ false' }}</span></td>
  316. </tr>
  317. <tr>
  318. <td><span class="badge badge-primary">FEDERATION</span></td>
  319. <td><strong>ATOM_FEEDS</strong></td>
  320. <td><span>{{config_cache('federation.atom.enabled') ? '✅ true' : '❌ false' }}</span></td>
  321. </tr>
  322. <tr>
  323. <td><span class="badge badge-primary">FEDERATION</span></td>
  324. <td><strong>REMOTE_AVATARS</strong></td>
  325. <td><span>{{config_cache('federation.avatars.store_local') ? '✅ true' : '❌ false' }}</span></td>
  326. </tr>
  327. <tr>
  328. <td><span class="badge badge-primary">FEDERATION</span></td>
  329. <td><strong>NODEINFO</strong></td>
  330. <td><span>{{config_cache('federation.nodeinfo.enabled') ? '✅ true' : '❌ false' }}</span></td>
  331. </tr>
  332. <tr>
  333. <td><span class="badge badge-primary">FEDERATION</span></td>
  334. <td><strong>WEBFINGER</strong></td>
  335. <td><span>{{config_cache('federation.webfinger.enabled') ? '✅ true' : '❌ false' }}</span></td>
  336. </tr>
  337. <tr>
  338. <td><span class="badge badge-primary">FEDERATION</span></td>
  339. <td><strong>PF_NETWORK_TIMELINE</strong></td>
  340. <td><span>{{config_cache('federation.network_timeline') ? '✅ true' : '❌ false' }}</span></td>
  341. </tr>
  342. <tr>
  343. <td><span class="badge badge-primary">FEDERATION</span></td>
  344. <td><strong>PF_NETWORK_TIMELINE_DAYS_FALLOFF</strong></td>
  345. <td><span>{{config('federation.network_timeline_days_falloff') }}</span></td>
  346. </tr>
  347. <tr>
  348. <td><span class="badge badge-primary">FEDERATION</span></td>
  349. <td><strong>CUSTOM_EMOJI</strong></td>
  350. <td><span>{{config_cache('federation.custom_emoji.enabled') ? '✅ true' : '❌ false' }}</span></td>
  351. </tr>
  352. <tr>
  353. <td><span class="badge badge-primary">FEDERATION</span></td>
  354. <td><strong>CUSTOM_EMOJI_MAX_SIZE</strong></td>
  355. <td><span>"{{config_cache('federation.custom_emoji.max_size')}}"</span></td>
  356. </tr>
  357. <tr>
  358. <td><span class="badge badge-primary">FILESYSTEMS</span></td>
  359. <td><strong>FILESYSTEM_DRIVER</strong></td>
  360. <td><span>"{{config_cache('filesystems.default')}}"</span></td>
  361. </tr>
  362. <tr>
  363. <td><span class="badge badge-primary">FILESYSTEMS</span></td>
  364. <td><strong>FILESYSTEM_CLOUD</strong></td>
  365. <td><span>"{{config_cache('filesystems.cloud')}}"</span></td>
  366. </tr>
  367. <tr>
  368. <td><span class="badge badge-primary">HASHING</span></td>
  369. <td><strong>BCRYPT_COST</strong></td>
  370. <td><span>"{{config_cache('hashing.bcrypt.rounds')}}"</span></td>
  371. </tr>
  372. <tr>
  373. <td><span class="badge badge-primary">HORIZON</span></td>
  374. <td><strong>HORIZON_PREFIX</strong></td>
  375. <td><span>"{{config_cache('horizon.prefix')}}"</span></td>
  376. </tr>
  377. <tr>
  378. <td><span class="badge badge-primary">HORIZON</span></td>
  379. <td><strong>HORIZON_MEMORY_LIMIT</strong></td>
  380. <td><span>"{{config_cache('horizon.memory_limit')}}"</span></td>
  381. </tr>
  382. <tr>
  383. <td><span class="badge badge-primary">HORIZON</span></td>
  384. <td><strong>HORIZON_BALANCE_STRATEGY</strong></td>
  385. <td><span>"{{config_cache('horizon.environments.production.supervisor-1.balance')}}"</span></td>
  386. </tr>
  387. <tr>
  388. <td><span class="badge badge-primary">HORIZON</span></td>
  389. <td><strong>HORIZON_MIN_PROCESSES</strong></td>
  390. <td><span>"{{config_cache('horizon.environments.production.supervisor-1.minProcesses')}}"</span></td>
  391. </tr>
  392. <tr>
  393. <td><span class="badge badge-primary">HORIZON</span></td>
  394. <td><strong>HORIZON_MAX_PROCESSES</strong></td>
  395. <td><span>"{{config_cache('horizon.environments.production.supervisor-1.maxProcesses')}}"</span></td>
  396. </tr>
  397. <tr>
  398. <td><span class="badge badge-primary">HORIZON</span></td>
  399. <td><strong>HORIZON_SUPERVISOR_MEMORY</strong></td>
  400. <td><span>"{{config_cache('horizon.environments.production.supervisor-1.memory')}}"</span></td>
  401. </tr>
  402. <tr>
  403. <td><span class="badge badge-primary">HORIZON</span></td>
  404. <td><strong>HORIZON_SUPERVISOR_TRIES</strong></td>
  405. <td><span>"{{config_cache('horizon.environments.production.supervisor-1.tries')}}"</span></td>
  406. </tr>
  407. <tr>
  408. <td><span class="badge badge-primary">HORIZON</span></td>
  409. <td><strong>HORIZON_SUPERVISOR_NICE</strong></td>
  410. <td><span>"{{config_cache('horizon.environments.production.supervisor-1.nice')}}"</span></td>
  411. </tr>
  412. <tr>
  413. <td><span class="badge badge-primary">HORIZON</span></td>
  414. <td><strong>HORIZON_SUPERVISOR_TIMEOUT</strong></td>
  415. <td><span>"{{config_cache('horizon.environments.production.supervisor-1.timeout')}}"</span></td>
  416. </tr>
  417. <tr>
  418. <td><span class="badge badge-primary">HORIZON</span></td>
  419. <td><strong>HORIZON_DARKMODE</strong></td>
  420. <td><span>{{config_cache('horizon.darkmode') ? '✅ true' : '❌ false' }}</span></td>
  421. </tr>
  422. <tr>
  423. <td><span class="badge badge-primary">IMAGE</span></td>
  424. <td><strong>IMAGE_DRIVER </strong></td>
  425. <td><span>"{{config_cache('image.driver')}}"</span></td>
  426. </tr>
  427. <tr>
  428. <td><span class="badge badge-primary">INSTANCE</span></td>
  429. <td><strong>INSTANCE_DESCRIPTION</strong></td>
  430. <td><span>"{{config_cache('instance.description')}}"</span></td>
  431. </tr>
  432. <tr>
  433. <td><span class="badge badge-primary">INSTANCE</span></td>
  434. <td><strong>INSTANCE_CONTACT_FORM</strong></td>
  435. <td><span>{{config_cache('instance.contact.enabled') ? '✅ true' : '❌ false' }}</span></td>
  436. </tr>
  437. <tr>
  438. <td><span class="badge badge-primary">INSTANCE</span></td>
  439. <td><strong>INSTANCE_CONTACT_MAX_PER_DAY</strong></td>
  440. <td><span>"{{config_cache('instance.contact.max_per_day')}}"</span></td>
  441. </tr>
  442. <tr>
  443. <td><span class="badge badge-primary">INSTANCE</span></td>
  444. <td><strong>INSTANCE_DISCOVER_PUBLIC</strong></td>
  445. <td><span>{{config_cache('instance.discover.public') ? '✅ true' : '❌ false' }}</span></td>
  446. </tr>
  447. <tr>
  448. <td><span class="badge badge-primary">INSTANCE</span></td>
  449. <td><strong>EXP_LOOPS</strong></td>
  450. <td><span>{{config_cache('instance.discover.loops.enabled') ? '✅ true' : '❌ false' }}</span></td>
  451. </tr>
  452. <tr>
  453. <td><span class="badge badge-primary">INSTANCE</span></td>
  454. <td><strong>INSTANCE_PUBLIC_HASHTAGS</strong></td>
  455. <td><span>{{config_cache('instance.discover.tags.is_public') ? '✅ true' : '❌ false' }}</span></td>
  456. </tr>
  457. <tr>
  458. <td><span class="badge badge-primary">INSTANCE</span></td>
  459. <td><strong>INSTANCE_CONTACT_EMAIL</strong></td>
  460. <td><span>"{{config_cache('instance.email')}}"</span></td>
  461. </tr>
  462. <tr>
  463. <td><span class="badge badge-primary">INSTANCE</span></td>
  464. <td><strong>INSTANCE_PUBLIC_LOCAL_TIMELINE</strong></td>
  465. <td><span>{{config_cache('instance.timeline.local.is_public') ? '✅ true' : '❌ false' }}</span></td>
  466. </tr>
  467. <tr>
  468. <td><span class="badge badge-primary">INSTANCE</span></td>
  469. <td><strong>INSTANCE_NETWORK_TIMELINE_CACHED</strong></td>
  470. <td><span>{{config('instance.timeline.network.cached') }}</span></td>
  471. </tr>
  472. <tr>
  473. <td><span class="badge badge-primary">INSTANCE</span></td>
  474. <td><strong>INSTANCE_NETWORK_TIMELINE_CACHE_DROPOFF</strong></td>
  475. <td><span>{{config('instance.timeline.network.cache_dropoff') }}</span></td>
  476. </tr>
  477. <tr>
  478. <td><span class="badge badge-primary">INSTANCE</span></td>
  479. <td><strong>INSTANCE_NETWORK_TIMELINE_CACHE_MAX_HOUR_INGEST</strong></td>
  480. <td><span>{{config('instance.timeline.network.max_hours_old') }}</span></td>
  481. </tr>
  482. <tr>
  483. <td><span class="badge badge-primary">INSTANCE</span></td>
  484. <td><strong>PAGE_404_HEADER</strong></td>
  485. <td><span>"{{config_cache('instance.page.404.header')}}"</span></td>
  486. </tr>
  487. <tr>
  488. <td><span class="badge badge-primary">INSTANCE</span></td>
  489. <td><strong>PAGE_404_BODY</strong></td>
  490. <td><span>"{{config_cache('instance.page.404.body')}}"</span></td>
  491. </tr>
  492. <tr>
  493. <td><span class="badge badge-primary">INSTANCE</span></td>
  494. <td><strong>PAGE_503_HEADER</strong></td>
  495. <td><span>"{{config_cache('instance.page.503.header')}}"</span></td>
  496. </tr>
  497. <tr>
  498. <td><span class="badge badge-primary">INSTANCE</span></td>
  499. <td><strong>PAGE_503_BODY</strong></td>
  500. <td><span>"{{config_cache('instance.page.503.body')}}"</span></td>
  501. </tr>
  502. <tr>
  503. <td><span class="badge badge-primary">INSTANCE</span></td>
  504. <td><strong>BANNED_USERNAMES</strong></td>
  505. <td><span>"{{config_cache('instance.username.banned')}}"</span></td>
  506. </tr>
  507. <tr>
  508. <td><span class="badge badge-primary">INSTANCE</span></td>
  509. <td><strong>USERNAME_REMOTE_FORMAT</strong></td>
  510. <td><span>"{{config_cache('instance.username.remote.format')}}"</span></td>
  511. </tr>
  512. <tr>
  513. <td><span class="badge badge-primary">INSTANCE</span></td>
  514. <td><strong>USERNAME_REMOTE_CUSTOM_TEXT</strong></td>
  515. <td><span>"{{config_cache('instance.username.remote.custom')}}"</span></td>
  516. </tr>
  517. <tr>
  518. <td><span class="badge badge-primary">INSTANCE</span></td>
  519. <td><strong>STORIES_ENABLED</strong></td>
  520. <td><span>{{config_cache('instance.stories.enabled') ? '✅ true' : '❌ false' }}</span></td>
  521. </tr>
  522. <tr>
  523. <td><span class="badge badge-primary">INSTANCE</span></td>
  524. <td><strong>RESTRICTED_INSTANCE</strong></td>
  525. <td><span>{{config_cache('instance.restricted.enabled') ? '✅ true' : '❌ false' }}</span></td>
  526. </tr>
  527. <tr>
  528. <td><span class="badge badge-primary">INSTANCE</span></td>
  529. <td><strong>OAUTH_TOKEN_DAYS</strong></td>
  530. <td><span>"{{config_cache('instance.oauth.token_expiration')}}"</span></td>
  531. </tr>
  532. <tr>
  533. <td><span class="badge badge-primary">INSTANCE</span></td>
  534. <td><strong>OAUTH_REFRESH_DAYS</strong></td>
  535. <td><span>"{{config_cache('instance.oauth.refresh_expiration')}}"</span></td>
  536. </tr>
  537. <tr>
  538. <td><span class="badge badge-primary">INSTANCE</span></td>
  539. <td><strong>OAUTH_PAT_ENABLED</strong></td>
  540. <td><span>{{config_cache('instance.oauth.pat.enabled') ? '✅ true' : '❌ false' }}</span></td>
  541. </tr>
  542. <tr>
  543. <td><span class="badge badge-primary">INSTANCE</span></td>
  544. <td><strong>OAUTH_PAT_ID</strong></td>
  545. <td><span>"{{config_cache('instance.oauth.pat.id')}}"</span></td>
  546. </tr>
  547. <tr>
  548. <td><span class="badge badge-primary">INSTANCE</span></td>
  549. <td><strong>ENABLE_COVID_LABEL</strong></td>
  550. <td><span>{{config_cache('instance.label.covid.enabled') ? '✅ true' : '❌ false' }}</span></td>
  551. </tr>
  552. <tr>
  553. <td><span class="badge badge-primary">INSTANCE</span></td>
  554. <td><strong>COVID_LABEL_URL</strong></td>
  555. <td><span>"{{config_cache('instance.label.covid.url')}}"</span></td>
  556. </tr>
  557. <tr>
  558. <td><span class="badge badge-primary">INSTANCE</span></td>
  559. <td><strong>COVID_LABEL_ORG</strong></td>
  560. <td><span>"{{config_cache('instance.label.covid.org')}}"</span></td>
  561. </tr>
  562. <tr>
  563. <td><span class="badge badge-primary">INSTANCE</span></td>
  564. <td><strong>ENABLE_CONFIG_CACHE</strong></td>
  565. <td><span>{{config_cache('instance.enable_cc') ? '✅ true' : '❌ false' }}</span></td>
  566. </tr>
  567. <tr>
  568. <td><span class="badge badge-primary">LDAP</span></td>
  569. <td><strong>LDAP_CONNECTION</strong></td>
  570. <td><span>"{{config_cache('ldap.default')}}"</span></td>
  571. </tr>
  572. <tr>
  573. <td><span class="badge badge-primary">LDAP</span></td>
  574. <td><strong>LDAP_LOGGING</strong></td>
  575. <td><span>{{config_cache('ldap.logging') ? '✅ true' : '❌ false' }}</span></td>
  576. </tr>
  577. <tr>
  578. <td><span class="badge badge-primary">LDAP</span></td>
  579. <td><strong>LDAP_CACHE</strong></td>
  580. <td><span>{{config_cache('ldap.cache.enabled') ? '✅ true' : '❌ false' }}</span></td>
  581. </tr>
  582. <tr>
  583. <td><span class="badge badge-primary">LOGGING</span></td>
  584. <td><strong>LOG_CHANNEL</strong></td>
  585. <td><span>"{{config_cache('logging.default')}}"</span></td>
  586. </tr>
  587. <tr>
  588. <td><span class="badge badge-primary">LOGGING</span></td>
  589. <td><strong>LOG_LEVEL (stack)</strong></td>
  590. <td><span>"{{config_cache('logging.channels.single.level')}}"</span></td>
  591. </tr>
  592. <tr>
  593. <td><span class="badge badge-primary">MAIL</span></td>
  594. <td><strong>MAIL_DRIVER</strong></td>
  595. <td><span>"{{config_cache('mail.driver')}}"</span></td>
  596. </tr>
  597. <tr>
  598. <td><span class="badge badge-primary">MAIL</span></td>
  599. <td><strong>MAIL_HOST</strong></td>
  600. <td><span>"{{config_cache('mail.host')}}"</span></td>
  601. </tr>
  602. <tr>
  603. <td><span class="badge badge-primary">MAIL</span></td>
  604. <td><strong>MAIL_PORT</strong></td>
  605. <td><span>"{{config_cache('mail.port')}}"</span></td>
  606. </tr>
  607. <tr>
  608. <td><span class="badge badge-primary">MAIL</span></td>
  609. <td><strong>MAIL_FROM_ADDRESS</strong></td>
  610. <td><span>"{{config_cache('mail.from.address')}}"</span></td>
  611. </tr>
  612. <tr>
  613. <td><span class="badge badge-primary">MAIL</span></td>
  614. <td><strong>MAIL_FROM_NAME</strong></td>
  615. <td><span>"{{config_cache('mail.from.name')}}"</span></td>
  616. </tr>
  617. <tr>
  618. <td><span class="badge badge-primary">MAIL</span></td>
  619. <td><strong>MAIL_ENCRYPTION</strong></td>
  620. <td><span>"{{config_cache('mail.encryption')}}"</span></td>
  621. </tr>
  622. <tr>
  623. <td><span class="badge badge-primary">MEDIA</span></td>
  624. <td><strong>MEDIA_EXIF_DATABASE</strong></td>
  625. <td><span>{{config_cache('media.exif.batabase') ? '✅ true' : '❌ false' }}</span></td>
  626. </tr>
  627. <tr>
  628. <td><span class="badge badge-primary">PIXELFED</span></td>
  629. <td><strong>ADMIN_DOMAIN</strong></td>
  630. <td><span>"{{config_cache('pixelfed.domain.admin')}}"</span></td>
  631. </tr>
  632. <tr>
  633. <td><span class="badge badge-primary">PIXELFED</span></td>
  634. <td><strong>APP_DOMAIN</strong></td>
  635. <td><span>"{{config_cache('pixelfed.domain.app')}}"</span></td>
  636. </tr>
  637. <tr>
  638. <td><span class="badge badge-primary">PIXELFED</span></td>
  639. <td><strong>MEMORY_LIMIT</strong></td>
  640. <td><span>"{{config_cache('pixelfed.memory_limit')}}"</span></td>
  641. </tr>
  642. <tr>
  643. <td><span class="badge badge-primary">PIXELFED</span></td>
  644. <td><strong>OPEN_REGISTRATION</strong></td>
  645. <td><span>{{config_cache('pixelfed.open_registration') ? '✅ true' : '❌ false' }}</span></td>
  646. </tr>
  647. <tr>
  648. <td><span class="badge badge-primary">PIXELFED</span></td>
  649. <td><strong>MAX_ACCOUNT_SIZE (KB)</strong></td>
  650. <td><span>"{{config_cache('pixelfed.max_account_size')}}"</span></td>
  651. </tr>
  652. <tr>
  653. <td><span class="badge badge-primary">PIXELFED</span></td>
  654. <td><strong>MAX_PHOTO_SIZE (KB)</strong></td>
  655. <td><span>"{{config_cache('pixelfed.max_photo_size')}}"</span></td>
  656. </tr>
  657. <tr>
  658. <td><span class="badge badge-primary">PIXELFED</span></td>
  659. <td><strong>MAX_AVATAR_SIZE (KB)</strong></td>
  660. <td><span>"{{config_cache('pixelfed.max_avatar_size')}}"</span></td>
  661. </tr>
  662. <tr>
  663. <td><span class="badge badge-primary">PIXELFED</span></td>
  664. <td><strong>MAX_CAPTION_LENGTH</strong></td>
  665. <td><span>"{{config_cache('pixelfed.max_caption_length')}}"</span></td>
  666. </tr>
  667. <tr>
  668. <td><span class="badge badge-primary">PIXELFED</span></td>
  669. <td><strong>MAX_BIO_LENGTH</strong></td>
  670. <td><span>"{{config_cache('pixelfed.max_bio_length')}}"</span></td>
  671. </tr>
  672. <tr>
  673. <td><span class="badge badge-primary">PIXELFED</span></td>
  674. <td><strong>MAX_NAME_LENGTH</strong></td>
  675. <td><span>"{{config_cache('pixelfed.max_name_length')}}"</span></td>
  676. </tr>
  677. <tr>
  678. <td><span class="badge badge-primary">PIXELFED</span></td>
  679. <td><strong>MIN_PASSWORD_LENGTH</strong></td>
  680. <td><span>"{{config_cache('pixelfed.min_password_length')}}"</span></td>
  681. </tr>
  682. <tr>
  683. <td><span class="badge badge-primary">PIXELFED</span></td>
  684. <td><strong>MAX_ALBUM_LENGTH</strong></td>
  685. <td><span>"{{config_cache('pixelfed.max_album_length')}}"</span></td>
  686. </tr>
  687. <tr>
  688. <td><span class="badge badge-primary">PIXELFED</span></td>
  689. <td><strong>ENFORCE_EMAIL_VERIFICATION</strong></td>
  690. <td><span>{{config_cache('pixelfed.enforce_email_verification') ? '✅ true' : '❌ false' }}</span></td>
  691. </tr>
  692. <tr>
  693. <td><span class="badge badge-primary">PIXELFED</span></td>
  694. <td><strong>IMAGE_QUALITY (1-100)</strong></td>
  695. <td><span>"{{config_cache('pixelfed.image_quality')}}"</span></td>
  696. </tr>
  697. <tr>
  698. <td><span class="badge badge-primary">PIXELFED</span></td>
  699. <td><strong>ACCOUNT_DELETION</strong></td>
  700. <td><span>{{config_cache('pixelfed.account_deletion') ? '✅ true' : '❌ false' }}</span></td>
  701. </tr>
  702. <tr>
  703. <td><span class="badge badge-primary">PIXELFED</span></td>
  704. <td><strong>ACCOUNT_DELETE_AFTER</strong></td>
  705. <td><span>{{config_cache('pixelfed.account_delete_after') ? '✅ true' : '❌ false' }}</span></td>
  706. </tr>
  707. <tr>
  708. <td><span class="badge badge-primary">PIXELFED</span></td>
  709. <td><strong>PF_ENABLE_CLOUD</strong></td>
  710. <td><span>{{config_cache('pixelfed.cloud_storage') ? '✅ true' : '❌ false' }}</span></td>
  711. </tr>
  712. <tr>
  713. <td><span class="badge badge-primary">PIXELFED</span></td>
  714. <td><strong>PF_MAX_USERS</strong></td>
  715. <td><span>{{config_cache('pixelfed.max_users') ? config('pixelfed.max_users') : '❌ false'}}</span></td>
  716. </tr>
  717. <tr>
  718. <td><span class="badge badge-primary">PIXELFED</span></td>
  719. <td><strong>PF_OPTIMIZE_IMAGES</strong></td>
  720. <td><span>{{config_cache('pixelfed.optimize_image') ? '✅ true' : '❌ false' }}</span></td>
  721. </tr>
  722. <tr>
  723. <td><span class="badge badge-primary">PIXELFED</span></td>
  724. <td><strong>PF_OPTIMIZE_VIDEOS</strong></td>
  725. <td><span>{{config_cache('pixelfed.optimize_video') ? '✅ true' : '❌ false' }}</span></td>
  726. </tr>
  727. <tr>
  728. <td><span class="badge badge-primary">PIXELFED</span></td>
  729. <td><strong>PF_USER_INVITES</strong></td>
  730. <td><span>{{config_cache('pixelfed.user_invites.enabled') ? '✅ true' : '❌ false' }}</span></td>
  731. </tr>
  732. <tr>
  733. <td><span class="badge badge-primary">PIXELFED</span></td>
  734. <td><strong>PF_USER_INVITES_TOTAL_LIMIT</strong></td>
  735. <td><span>"{{config_cache('pixelfed.user_invites.limit.total')}}"</span></td>
  736. </tr>
  737. <tr>
  738. <td><span class="badge badge-primary">PIXELFED</span></td>
  739. <td><strong>PF_USER_INVITES_DAILY_LIMIT</strong></td>
  740. <td><span>"{{config_cache('pixelfed.user_invites.limit.daily')}}"</span></td>
  741. </tr>
  742. <tr>
  743. <td><span class="badge badge-primary">PIXELFED</span></td>
  744. <td><strong>PF_USER_INVITES_MONTHLY_LIMIT</strong></td>
  745. <td><span>"{{config_cache('pixelfed.user_invites.limit.monthly')}}"</span></td>
  746. </tr>
  747. <tr>
  748. <td><span class="badge badge-primary">PIXELFED</span></td>
  749. <td><strong>PF_MAX_COLLECTION_LENGTH</strong></td>
  750. <td><span>"{{config_cache('pixelfed.max_collection_length')}}"</span></td>
  751. </tr>
  752. <tr>
  753. <td><span class="badge badge-primary">PIXELFED</span></td>
  754. <td><strong>MEDIA_TYPES</strong></td>
  755. <td><span>"{{config_cache('pixelfed.media_types')}}"</span></td>
  756. </tr>
  757. <tr>
  758. <td><span class="badge badge-primary">PIXELFED</span></td>
  759. <td><strong>LIMIT_ACCOUNT_SIZE</strong></td>
  760. <td><span>{{config_cache('pixelfed.enforce_account_limit') ? '✅ true' : '❌ false' }}</span></td>
  761. </tr>
  762. <tr>
  763. <td><span class="badge badge-primary">PIXELFED</span></td>
  764. <td><strong>IMPORT_INSTAGRAM</strong></td>
  765. <td><span>{{config_cache('pixelfed.import.instagram.enabled') ? '✅ true' : '❌ false' }}</span></td>
  766. </tr>
  767. <tr>
  768. <td><span class="badge badge-primary">PIXELFED</span></td>
  769. <td><strong>IMPORT_INSTAGRAM_POST_LIMIT</strong></td>
  770. <td><span>"{{config_cache('pixelfed.import.instagram.limits.posts')}}"</span></td>
  771. </tr>
  772. <tr>
  773. <td><span class="badge badge-primary">PIXELFED</span></td>
  774. <td><strong>IMPORT_INSTAGRAM_SIZE_LIMIT</strong></td>
  775. <td><span>"{{config_cache('pixelfed.import.instagram.limits.size')}}"</span></td>
  776. </tr>
  777. <tr>
  778. <td><span class="badge badge-primary">PIXELFED</span></td>
  779. <td><strong>OAUTH_ENABLED</strong></td>
  780. <td><span>{{config_cache('pixelfed.oauth_enabled') ? '✅ true' : '❌ false' }}</span></td>
  781. </tr>
  782. <tr>
  783. <td><span class="badge badge-primary">PIXELFED</span></td>
  784. <td><strong>PF_BOUNCER_ENABLED</strong></td>
  785. <td><span>{{config_cache('pixelfed.bouncer.enabled') ? '✅ true' : '❌ false' }}</span></td>
  786. </tr>
  787. <tr>
  788. <td><span class="badge badge-primary">PIXELFED</span></td>
  789. <td><strong>PF_MEDIA_FAST_PROCESS</strong></td>
  790. <td><span>{{config_cache('pixelfed.media_fast_process') ? '✅ true' : '❌ false' }}</span></td>
  791. </tr>
  792. <tr>
  793. <td><span class="badge badge-primary">PIXELFED</span></td>
  794. <td><strong>PF_MEDIA_MAX_ALTTEXT_LENGTH</strong></td>
  795. <td><span>"{{config_cache('pixelfed.max_altext_length')}}"</span></td>
  796. </tr>
  797. <tr>
  798. <td><span class="badge badge-primary">PURIFY</span></td>
  799. <td><strong>RESTRICT_HTML_TYPES</strong></td>
  800. <td><span>BROKEN</span></td>
  801. </tr>
  802. <tr>
  803. <td><span class="badge badge-primary">QUEUE</span></td>
  804. <td><strong>QUEUE_DRIVER</strong></td>
  805. <td><span>"{{config_cache('queue.default')}}"</span></td>
  806. </tr>
  807. <tr>
  808. <td><span class="badge badge-primary">SESSION</span></td>
  809. <td><strong>SESSION_DRIVER</strong></td>
  810. <td><span>"{{config_cache('session.driver')}}"</span></td>
  811. </tr>
  812. <tr>
  813. <td><span class="badge badge-primary">SESSION</span></td>
  814. <td><strong>SESSION_LIFETIME</strong></td>
  815. <td><span>"{{config_cache('session.lifetime')}}"</span></td>
  816. </tr>
  817. <tr>
  818. <td><span class="badge badge-primary">SESSION</span></td>
  819. <td><strong>SESSION_DOMAIN</strong></td>
  820. <td><span>"{{config_cache('session.domain')}}"</span></td>
  821. </tr>
  822. <tr>
  823. <td><span class="badge badge-primary">TRUSTEDPROXY</span></td>
  824. <td><strong>TRUST_PROXIES</strong></td>
  825. <td><span>"{{config_cache('trustedproxy.proxies')}}"</span></td>
  826. </tr>
  827. </tbody>
  828. </table>
  829. </div>
  830. </ul>
  831. </div>
  832. <div class="pb-3 border-bottom">
  833. <div class="form-group mb-0">
  834. <div class="ml-n4 mr-n2 p-3">
  835. <label class="font-weight-bold text-muted">Decrypt Payload</label>
  836. <textarea class="form-control payload-input" rows="5" name="payload" placeholder="Enter payload here"></textarea>
  837. <p class="help-text small text-muted mt-3 mb-0">The payload is from the "Something went wrong" page, anyone can copy the payload for you to decrypt.<br />Contents are encrypted due to potential sensitive information.</p>
  838. </div>
  839. </div>
  840. <div class="form-group row">
  841. <div class="col-12">
  842. <button type="button" class="btn btn-primary font-weight-bold px-5 decrypt-payload">Decrypt</button>
  843. </div>
  844. </div>
  845. </div>
  846. @endsection
  847. @push('scripts')
  848. <style type="text/css">
  849. .tt {
  850. display: flex;
  851. }
  852. .information strong {
  853. margin-right: 5px;
  854. }
  855. .information .text-truncate {
  856. overflow: hidden;
  857. max-width: 200px;
  858. }
  859. </style>
  860. <script type="text/javascript" src="{{mix('js/components.js')}}"></script>
  861. <script type="text/javascript">
  862. $('.decrypt-payload').on('click', function(e) {
  863. let payload = document.querySelector('.payload-input').value;
  864. axios.post('{{route('admin.diagnostics.decrypt')}}', {
  865. 'payload': payload
  866. }).then(res => {
  867. swal(
  868. 'Payload',
  869. res.data.decrypted,
  870. 'info'
  871. );
  872. document.querySelector('.payload-input').value = '';
  873. }).catch(err => {
  874. swal(
  875. 'Error',
  876. err.response.data.error,
  877. 'error'
  878. );
  879. });
  880. });
  881. $('.copy-information').on('click', function(e) {
  882. let text = document.querySelector('.information').innerText;
  883. let payload = '=======================\n Pixelfed Instance Diagnostic v0.2 \n=======================\n' + text + '\n========= END =========\n';
  884. navigator.clipboard.writeText(payload);
  885. swal('Copied', 'Successfully copied diagnostic information to clipboard!', 'success');
  886. });
  887. </script>
  888. @endpush