!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 

uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 

uid=33(www-data) gid=33(www-data) groups=33(www-data) 

Safe-mode: OFF (not secure)

/var/www/html/OTapi/routes/   drwxr-xr-x
Free 13.26 GB of 57.97 GB (22.87%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     products.js (6.8 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
const express = require('express');
const router = express.Router();
const Product = require('../models/Product');
const client = require('../lib/client');
const dotenv = require('dotenv');
dotenv.config();
const { INSTANCE_KEY, SECRET, OTAPI_BASE } = process.env;

// 1. Search by keyword
router.get('/search', async (req, res, next) => {
  try {
    const { q, page = 1, pageSize = 20 } = req.query;
    var skip=parseInt(page-1)*20;
    var limit=parseInt(page)*20;
    
    var itemList=await Product.find({ keyword : q, page : parseInt(page)}).skip(skip).limit(limit);
    // console.log(page*20);
    if (itemList.length==0) {
        const methodName = 'SearchItemsFrame';
        const xmlParameters = `<SearchItemsParameters>
        <ItemTitle>${q}</ItemTitle>
        <Provider>Alibaba1688</Provider>
        <Order>TotalVolumeDesc</Order>
        </SearchItemsParameters>`;
        const params = {
            instanceKey: INSTANCE_KEY,
            language: '',
            framePosition: skip,
            frameSize: 200,
            format: 'json',
            xmlParameters: xmlParameters,
            // timestamp: timestamp,  // <-- Add this line
            blockList: '',
            sessionId: '',

        };
        const result = await client.callOTAPI(methodName, params);
        // console.log(result);
        var items=result.OtapiItemSearchResultAnswer.Result.Items.Content.Item;
        // console.log(items[0]);
        const operations = items.map(element => {
          let totalSales = null;
          const fvValue = element.FeaturedValues?.Value;
          if (Array.isArray(fvValue)) {
            const entry = fvValue.find(v => v?.Name === "TotalSales");
            totalSales = entry?._ ? parseInt(entry._, 10) : null;
          } else if (fvValue?.Name === "TotalSales") {
            totalSales = fvValue._ ? parseInt(fvValue._, 10) : null;
          }

          return {
            updateOne: {
                filter: { id: element.Id },
                update: {
                    $set: {
                        title: element.Title,
                        price: element.Price.ConvertedPriceWithoutSign,
                        category_id: element.CategoryId,
                        MainPictureUrl: element.MainPictureUrl,
                        last_get: Date.now(),
                        page: parseInt(page),
                        keyword: q,
                        TotalSales: totalSales, // ← included here 
                    },
                    $setOnInsert: {
                        created_at: Date.now()
                    }
                },
                upsert: true
            }
          };
        });

        // const operations = items.map(element => ({
        // updateOne: {
        //     filter: { id: element.Id },
        //     update: {
        //     $set: {
        //         title: element.Title,
        //         price: element.Price.ConvertedPriceWithoutSign,
        //         category_id: element.CategoryId,
        //         MainPictureUrl: element.MainPictureUrl,
        //         // created_at: Date.now(),
        //         last_get: Date.now(),
        //         page: parseInt(page),
        //         keyword : q,
        //     },
        //     $setOnInsert: {
        //         created_at: Date.now()
        //     }
        //     },
        //     upsert: true
        // }
        // }));
        const resul = await Product.bulkWrite(operations);
        var itemList=await Product.find({ keyword : q, page : parseInt(page)}).skip(skip).limit(limit);
        // var data;
        // var itemList = [];
        // items.forEach(element => {
        //     // Process each item as needed
        //     data = {
        //         id: element.Id,
        //         title: element.Title,
        //         price: element.Price.ConvertedPriceWithoutSign,
        //         category_id: element.CategoryId,
        //         MainPictureUrl: element.MainPictureUrl,
        //         created_at: Date.now(),
        //         last_get: Date.now(),
        //         page: parseInt(page),
        //         keyword : q,
        //         // image: element.PictureList.Content[0].PictureUrl,
        //     };  
        //     itemList.push(data);
        // });
    } 
    // const item = await Product.insertMany(itemList);
    res.json(itemList);
  } catch (err) {
    next(err);
  }
});
  router.get('/products/:itemId', async (req, res, next) => {
    try {      
      var itemId= req.params.itemId;
      var methodName="GetItemFullInfo";
      const params = {
          instanceKey: INSTANCE_KEY,
          language: '',
          format: 'json',
          itemId: itemId
          // timestamp: timestamp,  // <-- Add this line
      };
      const result = await client.callOTAPI(methodName, params);
      res.json(result.OtapiItemFullInfoAnswer.OtapiItemFullInfo);
    } catch (err) {
      next(err);
    }
  });
  router.get('/store/:storeId', async (req, res, next) => {
    try {      
      var storeId= req.params.storeId;
      const methodName = 'SearchItemsFrame';
      const xmlParameters = `<SearchItemsParameters>
        <VendorId>${storeId}</VendorId>
        <Provider>Alibaba1688</Provider>
        <Order>TotalVolumeDesc</Order>
        </SearchItemsParameters>`;
        const params = {
          instanceKey: INSTANCE_KEY,
          language: '',
          framePosition: 0,
          frameSize: 200,
          format: 'json',
          xmlParameters: xmlParameters,
          // timestamp: timestamp,  // <-- Add this line
          blockList: '',
          sessionId: '',
        };
        const result = await client.callOTAPI(methodName, params);
        var items=result.OtapiItemSearchResultAnswer.Result.Items.Content.Item;
        var data;
        var itemList = [];
        items.forEach(element => {
          // console.log(element);
          
          let totalSales = null;
          const fvValue = element.FeaturedValues?.Value;
          if (Array.isArray(fvValue)) {
            const entry = fvValue.find(v => v?.Name === "TotalSales");
            totalSales = entry?._ ? parseInt(entry._, 10) : null;
          } else if (fvValue?.Name === "TotalSales") {
            totalSales = fvValue._ ? parseInt(fvValue._, 10) : null;
          }
          data = {
              id: element.Id,
              title: element.Title,
              price: element.Price.ConvertedPriceWithoutSign,
              category_id: element.CategoryId,
              MainPictureUrl: element.MainPictureUrl,
              TotalSales : totalSales
          };  
          itemList.push(data);
        });
      res.json(itemList);
    } catch (err) {
      next(err);
    }
  });
module.exports = router;

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0083 ]--