mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-11-10 16:44:50 +00:00
257 lines
8.5 KiB
PHP
257 lines
8.5 KiB
PHP
@extends('admin.partial.template-full')
|
|
|
|
@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">
|
|
<p class="font-weight-bold text-muted">
|
|
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
|
|
<li>
|
|
<strong>Version:</strong>
|
|
<span>{{config('pixelfed.version')}}</span>
|
|
</li>
|
|
@endif
|
|
<li>
|
|
<strong>PHP:</strong>
|
|
<span>{{phpversion()}}</span>
|
|
</li>
|
|
@foreach([
|
|
'bcmath',
|
|
'gd',
|
|
'imagick',
|
|
'ctype',
|
|
'curl',
|
|
'intl',
|
|
'json',
|
|
'mbstring',
|
|
'openssl',
|
|
'redis'
|
|
] as $ext)
|
|
@if(!extension_loaded($ext))
|
|
<li>
|
|
<strong>PHP-{{$ext}}:</strong>
|
|
<span>Not installed/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>
|
|
</li>
|
|
<li>
|
|
<strong><span class="badge badge-primary">REDIS</span> Ping:</strong>
|
|
<span>{{ \Illuminate\Support\Facades\Redis::command('ping') ? '✅' : '❌' }}</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>
|
|
</li>
|
|
<li>
|
|
<strong><span class="badge badge-primary">APP</span> Cache Driver:</strong>
|
|
<span>{{ config_cache('cache.default') }}</span>
|
|
</li>
|
|
<li>
|
|
<strong><span class="badge badge-primary">APP</span> Mail Driver:</strong>
|
|
<span>{{ config_cache('mail.driver') }}</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>
|
|
</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>
|
|
</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>
|
|
@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>
|
|
</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>
|
|
</li>
|
|
<li>
|
|
<strong><span class="badge badge-primary">APP</span> SES Region:</strong>
|
|
<span>{{ config_cache('services.ses.region') ?? 'undefined' }}</span>
|
|
</li>
|
|
@endif
|
|
<li>
|
|
<strong><span class="badge badge-primary">APP</span> Queue Driver:</strong>
|
|
<span>{{ config_cache('queue.default') }}</span>
|
|
</li>
|
|
<li>
|
|
<strong><span class="badge badge-primary">APP</span> Session Driver:</strong>
|
|
<span>{{ config_cache('session.driver') }}</span>
|
|
</li>
|
|
<li>
|
|
<strong><span class="badge badge-primary">APP</span> Session Lifetime:</strong>
|
|
<span>{{ config_cache('session.lifetime') }}</span>
|
|
</li>
|
|
<li>
|
|
<strong><span class="badge badge-primary">APP</span> Session Domain:</strong>
|
|
<span>{{ config_cache('session.domain') }}</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>
|
|
</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>
|
|
</li>
|
|
<li>
|
|
<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">ACTIVITYPUB</span> instance actor cached: </strong>
|
|
<span>{{ Cache::get(\App\Models\InstanceActor::PROFILE_KEY) ? '✅' : '❌' }}</span>
|
|
</li>
|
|
<li>
|
|
<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">OAUTH</span> token_expiration</strong>
|
|
<span>{{ config_cache('instance.oauth.token_expiration') }} days</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>
|
|
</div>
|
|
<div class="pb-3 border-bottom">
|
|
<div class="form-group mb-0">
|
|
<div class="ml-n4 mr-n2 p-3">
|
|
<label class="font-weight-bold text-muted">Decrypt Payload</label>
|
|
<textarea class="form-control payload-input" rows="5" name="payload" placeholder="Enter payload here"></textarea>
|
|
<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>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="form-group row">
|
|
<div class="col-12">
|
|
<button type="button" class="btn btn-primary font-weight-bold px-5 decrypt-payload">Decrypt</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endsection
|
|
|
|
@push('scripts')
|
|
<style type="text/css">
|
|
.tt {
|
|
display: flex;
|
|
}
|
|
|
|
.information strong {
|
|
margin-right: 5px;
|
|
}
|
|
|
|
.information .text-truncate {
|
|
overflow: hidden;
|
|
max-width: 200px;
|
|
}
|
|
</style>
|
|
<script type="text/javascript" src="{{mix('js/components.js')}}"></script>
|
|
<script type="text/javascript">
|
|
$('.decrypt-payload').on('click', function(e) {
|
|
let payload = document.querySelector('.payload-input').value;
|
|
axios.post('{{route('admin.diagnostics.decrypt')}}', {
|
|
'payload': payload
|
|
}).then(res => {
|
|
swal(
|
|
'Payload',
|
|
res.data.decrypted,
|
|
'info'
|
|
);
|
|
document.querySelector('.payload-input').value = '';
|
|
}).catch(err => {
|
|
swal(
|
|
'Error',
|
|
err.response.data.error,
|
|
'error'
|
|
);
|
|
});
|
|
});
|
|
|
|
$('.copy-information').on('click', function(e) {
|
|
let text = document.querySelector('.information').innerText;
|
|
let payload = '=======================\n Pixelfed Instance Diagnostic v0.2 \n=======================\n' + text + '\n========= END =========\n';
|
|
navigator.clipboard.writeText(payload);
|
|
swal('Copied', 'Successfully copied diagnostic information to clipboard!', 'success');
|
|
});
|
|
</script>
|
|
@endpush
|