Exemplo n.º 1
0
 public function actionScrape()
 {
     $infohash = Yii::$app->request->get("info_hash");
     if (!is_array($infohash)) {
         $infohash = [$infohash];
     }
     $res = [];
     foreach ($infohash as $ih) {
         $tmp = Seed::findOne(['info_hash' => strtoupper(bin2hex($ih))]);
         if (!empty($tmp)) {
             $res[] = $tmp;
         }
     }
     return $this->renderPartial("queryScrape", ['seeds' => $res]);
 }
Exemplo n.º 2
0
 public function rules()
 {
     return [[['info_hash', 'peer_id', 'port', 'left', 'downloaded', 'uploaded'], 'required'], [['passkey', 'info_hash', 'event', 'ip', 'port', 'left', 'no_peer_id', 'uploaded', 'downloaded', 'ipv6', 'numwant', 'compact'], 'trim'], [['passkey', 'info_hash', 'ip', 'ipv6'], 'default'], ['event', 'default', 'value' => 'regular'], [['port', 'left', 'uploaded', 'downloaded', 'compact', 'numwant'], 'default', 'value' => 0], [['compact', 'no_peer_id'], 'filter', 'filter' => function ($val) {
         return (bool) $val;
     }], [['port', 'left', 'uploaded', 'downloaded', 'numwant'], 'integer'], ['info_hash', 'string', 'length' => [40, 40]], ['peer_id', 'string', 'length' => [4, 30]], [['info_hash', 'passkey'], 'filter', 'filter' => 'strtoupper'], ['event', 'filter', 'filter' => 'strtolower'], ['ipv6', function ($attr, $params) {
         if (!empty($this->{$attr})) {
             self::rfc2732Convert($this->{$attr}, $ipv6, $port);
             if ($port == null) {
                 $port = $this->port;
             }
             if (filter_var($ipv6, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) && $port != null) {
                 $this->ipv6 = $ipv6;
                 $this->ipv6port = $port;
             }
         }
     }], ['ip', function ($attr, $param) {
         $this->ipv4 = $this->ip;
         $this->ipv4port = $this->port;
     }], ['info_hash', function ($attr, $param) {
         $this->_seed = Seed::findOne(['info_hash' => $this->{$attr}]);
         if (empty($this->_seed)) {
             $this->addError('info_hash', 'no such seed');
         } elseif (!$this->_seed->is_valid) {
             $this->addError('info_hash', 'seed is invalid');
         }
     }]];
 }
Exemplo n.º 3
0
 public function actionPeerInfo($seed_id)
 {
     /** @var Seed $seed */
     $seed = Seed::findOne($seed_id);
     if (empty($seed)) {
         return ['result' => 'failed', 'extra' => 'no such seed'];
     }
     $peers = $seed->peers;
     $leechers = [];
     $seeders = [];
     $all = [];
     foreach ($peers as $peer) {
         $peer->update_time = strtotime($peer->update_time);
         $peer->create_time = strtotime($peer->create_time);
         $peer->client_tag = substr(base64_decode($peer->client_tag), 0, 3);
         if ($peer->status == 'Seeder') {
             $seeders[] = $peer->attributes;
         } else {
             $leechers[] = $peer->attributes;
         }
         $all[] = $peer->attributes;
     }
     return ['result' => 'succeed', 'extra' => ['all' => $all, 'leechers' => $leechers, 'seeders' => $seeders]];
 }
Exemplo n.º 4
0
 private function replace(&$retval)
 {
     $retval = 'failed';
     if (!empty($this->torrentFile)) {
         return $this->handleTorrent($this->torrentFile->tempName, $retval);
     } else {
         /** @var Seed $seed */
         $seed = Seed::findOne($this->seed_id);
         if (empty($seed)) {
             $this->addError('seed_id', 'seed being edited not exists');
             return $seed;
         } else {
             $seed->detail_info = $this->proc_obj->getDetail();
             $seed->full_name = $this->proc_obj->generateSubject();
             $seed->is_valid = true;
             $seed->type_id = $this->type_id;
             $seed->sub_type_id = $this->sub_type_id;
             $seed->save();
             $retval = 'succeed';
             return $seed;
         }
     }
 }
Exemplo n.º 5
0
    public function actionOperation()
    {
        SeedOperationRecord::deleteAll();
        $offset = 0;
        $limit = 1000;
        QUERY:
        $sql = <<<SQL
        SELECT * FROM `ngpt_ngpt_seed_op_records` LIMIT {$limit} OFFSET {$offset};
SQL;
        $res = $this->fdb->createCommand($sql)->queryAll();
        foreach ($res as $oop) {
            var_dump($oop);
            $op = new SeedOperationRecord();
            /** @var User $admin */
            $admin = User::findOne(['discuz_user_id' => $oop['uid']]);
            /** @var Seed $seed */
            $seed = Seed::findOne(['info_hash' => strtoupper($oop['infohash'])]);
            if (empty($seed)) {
                continue;
            }
            $op->admin_id = $admin->user_id;
            $op->seed_id = $seed->seed_id;
            $op->operation_type = $oop['reason'];
            $op->detail_info = json_encode(['reason' => $oop['info']]);
            $op->publisher_id = $seed->publisher_user_id;
            $op->create_time = $this->date($oop['opdate']);
            var_dump($op->attributes);
            if (!$op->insert()) {
                var_dump($op->errors);
                return;
            }
        }
        if (count($res)) {
            $offset += $limit;
            goto QUERY;
        }
        return;
    }