Advertisement
WILDAN_IZZUDIN

[JS] UFILE UPLOADER

Oct 3rd, 2024
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const axios = require('axios')
  2. const cheerio = require('cheerio')
  3. const FormData = require('form-data')
  4.  
  5. class Utils {
  6.    isUrl = url => {
  7.       try {
  8.          new URL(url)
  9.          return true
  10.       } catch {
  11.          return false
  12.       }
  13.    }
  14.  
  15.    toBuffer = async i => {
  16.       try {
  17.          const file = Buffer.isBuffer(i) ? i : this.isUrl(i) ? await (await axios.get(i, {
  18.             responseType: 'arraybuffer'
  19.          })).data : null
  20.          return Buffer.from(file)
  21.       } catch (e) {
  22.          return null
  23.       }
  24.    }
  25.  
  26.    randomString = length => {
  27.       const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
  28.       let result = ''
  29.       for (let i = 0; i < length; i++) {
  30.          const randomIndex = Math.floor(Math.random() * characters.length)
  31.          result += characters[randomIndex]
  32.       }
  33.       return result
  34.    }
  35.  
  36.    getExt = async buffer => {
  37.       try {
  38.          const { ext } = await require('file-type').fromBuffer(buffer)
  39.          return ext ? ext : 'txt'
  40.       } catch {
  41.          return 'txt'
  42.       }
  43.    }
  44. }
  45.  
  46. module.exports = class Ufile extends Utils {
  47.    constructor() {
  48.       super()
  49.       this.headers = {
  50.          'Accept': 'application/json, text/plain, */*',
  51.          'Accept-Language': 'en-US,en;q=0.9,id;q=0.8',
  52.          'Cache-Control': 'no-cache',
  53.          'Connection': 'Keep-Alive',
  54.          'Origin': 'https://ufile.io',
  55.          'Pragma': 'no-cache',
  56.          'Referer': 'https://ufile.io/',
  57.          'Referrer-Policy': 'strict-origin-when-cross-origin',
  58.          'User-Agent': 'Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
  59.          'X-Requested-With': 'XMLHttpRequest',
  60.          'X-Forwarded-For': Array(4).fill(0).map(() => Math.floor(Math.random() * 256)).join('.')
  61.       }
  62.    }
  63.  
  64.    storage = input => new Promise(async resolve => {
  65.       try {
  66.          const file = await this.toBuffer(input)
  67.          const parse = await axios.get('https://ufile.io/', {
  68.             headers: this.headers
  69.          })
  70.          const cookie = parse.headers['set-cookie'].join(';')
  71.          const token = cheerio.load(parse.data)('input[id="csrf_hash"]').attr('value')
  72.          const session_id = cheerio.load(parse.data)('input[id="session_id"]').attr('value')
  73.          let form = new FormData
  74.          form.append('csrf_test_name', token)
  75.          const json = await (await axios.post('https://ufile.io/v1/upload/select_storage', form, {
  76.             headers: {
  77.                ...this.headers,
  78.                'Cookie': cookie,
  79.                ...form.getHeaders()
  80.             }
  81.          })).data
  82.          let create = new FormData
  83.          create.append('csrf_test_name', token)
  84.          create.append('file_size', file.length)
  85.          const session = await (await axios.post(json.storageBaseUrl + 'v1/upload/create_session', create, {
  86.             headers: {
  87.                ...this.headers,
  88.                'Cookie': cookie,
  89.                ...create.getHeaders()
  90.             }
  91.          })).data
  92.          resolve({
  93.             creator: global.creator,
  94.             status: true,
  95.             data: {
  96.                cookie,
  97.                fuid: session.fuid,
  98.                session_id,
  99.                file,
  100.                token,
  101.                url: json.storageBaseUrl
  102.             }
  103.          })
  104.       } catch (e) {
  105.          resolve({
  106.             creator: global.creator,
  107.             status: false,
  108.             msg: e.message
  109.          })
  110.       }
  111.    })
  112.  
  113.    upload = input => new Promise(async resolve => {
  114.       try {
  115.          const parse = await this.storage(input)
  116.          if (!parse.status) return resolve(parse)
  117.          const fname = this.randomString(10)
  118.          const fext = await this.getExt(parse.data.file)
  119.          let form = new FormData
  120.          form.append('chunk_index', 1)
  121.          form.append('fuid', parse.data.fuid)
  122.          form.append('file', parse.data.file, `${fname}.${fext}`)
  123.          const result = await (await axios.post(parse.data.url + '/v1/upload/chunk', form, {
  124.             headers: {
  125.                ...this.headers,
  126.                'Cookie': parse.data.cookie,
  127.                ...form.getHeaders()
  128.             }
  129.          })).data
  130.          if (result != 'Uploaded successfully.') return resolve({
  131.             creator: global.creator,
  132.             status: false,
  133.             msg: result
  134.          })
  135.          let fn = new FormData
  136.          fn.append('csrf_test_name', parse.data.token)
  137.          fn.append('fuid', parse.data.fuid)
  138.          fn.append('file_name', fname + '.' + fext)
  139.          fn.append('session_id', parse.data.session_id)
  140.          fn.append('file_type', fext)
  141.          fn.append('total_chunks', 1)
  142.          fn.append('session_id', parse.data.session_id)
  143.          const final = await (await axios.post(parse.data.url + '/v1/upload/finalise', fn, {
  144.             headers: {
  145.                ...this.headers,
  146.                'Cookie': parse.data.cookie,
  147.                ...fn.getHeaders()
  148.             }
  149.          })).data
  150.          if (!final.url) return resolve({
  151.             creator: global.creator,
  152.             status: false,
  153.             msg: 'Failed to upload file'
  154.          })
  155.          resolve({
  156.             creator: global.creator,
  157.             status: true,
  158.             data: final
  159.          })
  160.       } catch (e) {
  161.          resolve({
  162.             creator: global.creator,
  163.             status: false,
  164.             msg: e.message
  165.          })
  166.       }
  167.    })
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement