improve announce check authkey

This commit is contained in:
xiaomlove
2022-11-06 16:12:15 +08:00
parent b5451cecd6
commit 80cb362ed7
9 changed files with 40 additions and 255 deletions

View File

@@ -72,12 +72,12 @@ class IconResource extends Resource
return $table
->columns([
Tables\Columns\TextColumn::make('id'),
Tables\Columns\TextColumn::make('name'),
Tables\Columns\TextColumn::make('folder'),
Tables\Columns\TextColumn::make('cssfile'),
Tables\Columns\TextColumn::make('multilang'),
Tables\Columns\TextColumn::make('secondicon'),
Tables\Columns\TextColumn::make('designer'),
Tables\Columns\TextColumn::make('name')->label(__('label.name')),
Tables\Columns\TextColumn::make('folder')->label(__('label.icon.folder')),
Tables\Columns\TextColumn::make('multilang')->label(__('label.icon.multilang')),
Tables\Columns\TextColumn::make('secondicon')->label(__('label.icon.secondicon')),
Tables\Columns\TextColumn::make('cssfile')->label(__('label.icon.cssfile')),
Tables\Columns\TextColumn::make('designer')->label(__('label.icon.designer')),
])
->filters([
//

View File

@@ -1,115 +0,0 @@
<?php
namespace App\Filament\Resources\System;
use App\Filament\OptionsTrait;
use App\Filament\Resources\System\CategoryIconResource\Pages;
use App\Filament\Resources\System\CategoryIconResource\RelationManagers;
use App\Models\Icon;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class CategoryIconResource extends Resource
{
use OptionsTrait;
protected static ?string $model = Icon::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
protected static ?string $navigationGroup = 'System';
protected static ?int $navigationSort = 3;
protected static function getNavigationLabel(): string
{
return __('admin.sidebar.icon');
}
public static function getBreadcrumb(): string
{
return self::getNavigationLabel();
}
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('name')->label(__('label.name'))->required(),
Forms\Components\TextInput::make('folder')
->label(__('label.icon.folder'))
->helperText(__('label.icon.folder_help'))
->required()
,
Forms\Components\Radio::make('multilang')
->options(self::$yesOrNo)
->default('no')
->label(__('label.icon.multilang'))
->helperText(__('label.icon.multilang_help'))
,
Forms\Components\Radio::make('secondicon')
->options(self::$yesOrNo)
->default('no')
->label(__('label.icon.secondicon'))
->helperText(__('label.icon.secondicon_help'))
,
Forms\Components\TextInput::make('cssfile')
->label(__('label.icon.cssfile'))
->helperText(__('label.icon.cssfile_help'))
,
Forms\Components\TextInput::make('designer')
->label(__('label.icon.designer'))
->helperText(__('label.icon.designer_help'))
,
Forms\Components\TextInput::make('comment')
->label(__('label.icon.comment'))
->helperText(__('label.icon.comment_help'))
,
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('id'),
Tables\Columns\TextColumn::make('name')->label(__('label.name')),
Tables\Columns\TextColumn::make('folder')->label(__('label.icon.folder')),
Tables\Columns\TextColumn::make('multilang')->label(__('label.icon.multilang')),
Tables\Columns\TextColumn::make('secondicon')->label(__('label.icon.secondicon')),
Tables\Columns\TextColumn::make('cssfile')->label(__('label.icon.cssfile')),
Tables\Columns\TextColumn::make('designer')->label(__('label.icon.designer')),
Tables\Columns\TextColumn::make('comment')->label(__('label.icon.comment')),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListCategoryIcons::route('/'),
'create' => Pages\CreateCategoryIcon::route('/create'),
'edit' => Pages\EditCategoryIcon::route('/{record}/edit'),
];
}
}

View File

@@ -1,31 +0,0 @@
<?php
namespace App\Filament\Resources\System\CategoryIconResource\Pages;
use App\Filament\Resources\System\CategoryIconResource;
use Filament\Pages\Actions;
use Filament\Resources\Pages\CreateRecord;
class CreateCategoryIcon extends CreateRecord
{
protected static string $resource = CategoryIconResource::class;
protected static string $view = 'filament.resources.system.category-icon-resource.pages.create-record';
protected function mutateFormDataBeforeCreate(array $data): array
{
return array_filter($data);
}
protected function getRedirectUrl(): string
{
return static::$resource::getUrl('index');
}
protected function getViewData(): array
{
return [
'desc' => nexus_trans('label.icon.desc')
];
}
}

View File

@@ -1,38 +0,0 @@
<?php
namespace App\Filament\Resources\System\CategoryIconResource\Pages;
use App\Filament\Resources\System\CategoryIconResource;
use Filament\Pages\Actions;
use Filament\Resources\Pages\EditRecord;
class EditCategoryIcon extends EditRecord
{
protected static string $resource = CategoryIconResource::class;
protected static string $view = 'filament.resources.system.category-icon-resource.pages.edit-record';
protected function getActions(): array
{
return [
Actions\DeleteAction::make(),
];
}
protected function mutateFormDataBeforeSave(array $data): array
{
return array_filter($data);
}
protected function getRedirectUrl(): string
{
return static::$resource::getUrl('index');
}
protected function getViewData(): array
{
return [
'desc' => nexus_trans('label.icon.desc')
];
}
}

View File

@@ -1,27 +0,0 @@
<?php
namespace App\Filament\Resources\System\CategoryIconResource\Pages;
use App\Filament\PageList;
use App\Filament\Resources\System\CategoryIconResource;
use Filament\Pages\Actions;
use Filament\Resources\Pages\ListRecords;
class ListCategoryIcons extends PageList
{
protected static string $resource = CategoryIconResource::class;
protected function getActions(): array
{
return [
Actions\CreateAction::make(),
];
}
protected function getViewData(): array
{
return [
'desc' => nexus_trans('label.icon.desc')
];
}
}

View File

@@ -4844,7 +4844,7 @@ function get_plain_username($id){
function get_searchbox_value($mode = 1, $item = 'showsubcat'){
global $Cache;
static $rows;
$cacheKey = "search_box_content_{$mode}";
$cacheKey = "search_box_content";
if (!$rows && !$rows = $Cache->get_value($cacheKey)){
$rows = array();
$res = sql_query("SELECT * FROM searchbox ORDER BY id ASC");

View File

@@ -1002,10 +1002,10 @@ function clear_staff_message_cache()
\App\Repositories\MessageRepository::updateStaffMessageCountCache(false);
}
function clear_search_box_cache($id)
function clear_search_box_cache()
{
do_log("clear_search_box_cache: $id");
\Nexus\Database\NexusDB::cache_del("search_box_content_{$id}");
do_log("clear_search_box_cache");
\Nexus\Database\NexusDB::cache_del("search_box_content");
}
function user_can($permission, $fail = false, $uid = 0): bool
@@ -1061,3 +1061,29 @@ function is_donor(array $userInfo): bool
{
return $userInfo['donor'] == 'yes' && ($userInfo['donoruntil'] === null || $userInfo['donoruntil'] == '0000-00-00 00:00:00' || $userInfo['donoruntil'] >= date('Y-m-d H:i:s'));
}
/**
* @param $authkey
* @return false|int|mixed|string|null
* @throws \App\Exceptions\NexusException
* @see download.php
*/
function get_passkey_by_authkey($authkey)
{
return \Nexus\Database\NexusDB::remember("authkey2passkey:$authkey", 3600*24, function () use ($authkey) {
$arr = explode('|', $authkey);
if (count($arr) != 3) {
throw new \InvalidArgumentException("Invalid authkey: $authkey, format error");
}
$uid = $arr[1];
$torrentRep = new \App\Repositories\TorrentRepository();
$decrypted = $torrentRep->checkTrackerReportAuthKey($_REQUEST['authkey']);
if (empty($decrypted)) {
throw new \InvalidArgumentException("Invalid authkey: $authkey");
}
$userInfo = \Nexus\Database\NexusDB::remember("announce_user_passkey_$uid", 3600, function () use ($uid) {
return \App\Models\User::query()->where('id', $uid)->first(['id', 'passkey']);
});
return $userInfo->passkey;
});
}

View File

@@ -1,50 +1,20 @@
<?php
require '../include/bittorrent_announce.php';
$apiLocalHost = nexus_env('TRACKER_API_LOCAL_HOST');
if ($apiLocalHost) {
do_log("[TRACKER_API_LOCAL_HOST] $apiLocalHost");
$response = request_local_api(trim($apiLocalHost, '/') . '/api/announce');
if (empty($response)) {
err("error from TRACKER_API_LOCAL_HOST");
} else {
exit(benc_resp_raw($response));
}
}
//continue the normal process
require ROOT_PATH . 'include/core.php';
dbconn_announce();
do_log(nexus_json_encode($_SERVER));
//1. BLOCK ACCESS WITH WEB BROWSERS AND CHEATS!
$agent = $_SERVER["HTTP_USER_AGENT"];
block_browser();
dbconn_announce();
//check authkey
if (!empty($_REQUEST['authkey'])) {
$arr = explode('|', $_REQUEST['authkey']);
if (count($arr) != 3) {
err('Invalid authkey');
}
$torrentId = $arr[0];
$uid = $arr[1];
$torrentRep = new \App\Repositories\TorrentRepository();
try {
$decrypted = $torrentRep->checkTrackerReportAuthKey($_REQUEST['authkey']);
$_GET['passkey'] = get_passkey_by_authkey($_REQUEST['authkey']);
} catch (\Exception $exception) {
err($exception->getMessage());
}
if (empty($decrypted)) {
err('Invalid authkey');
}
$userInfo = \Nexus\Database\NexusDB::remember("announce_user_passkey_$uid", 3600, function () use ($uid) {
return \App\Models\User::query()->where('id', $uid)->first(['id', 'passkey']);
});
if (!$userInfo) {
err('Invalid authkey');
}
$_GET['passkey'] = $userInfo->passkey;
}
//2. GET ANNOUNCE VARIABLES
// get string type passkey, info_hash, peer_id, event, ip from client
foreach (array("passkey","info_hash","peer_id","event") as $x)
@@ -168,8 +138,7 @@ if (!$torrent) {
$start = strpos($queryString, $firstNeedle) + strlen($firstNeedle);
$end = strpos($queryString, "&", $start);
$infoHashUrlEncode = substr($queryString, $start, $end - $start);
do_log("[TORRENT NOT EXISTS] $checkTorrentSql, params: $queryString", 'error');
do_log("[TORRENT NOT EXISTS] infoHashUrlEncode: $infoHashUrlEncode", 'error');
do_log("[TORRENT NOT EXISTS] $checkTorrentSql, params: $queryString, infoHashUrlEncode: $infoHashUrlEncode");
err("torrent not registered with this tracker");
}

View File

@@ -202,5 +202,6 @@ else
//header ("Content-Disposition: attachment; filename=".$row["filename"]."");
//ob_implicit_flush(true);
//print(benc($dict));
\Nexus\Database\NexusDB::cache_put("authkey2passkey:$trackerReportAuthKey", $CURUSER['passkey'], 3600*24);
echo \Rhilip\Bencode\Bencode::encode($dict);
?>