register_anonimous.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. const CryptoJS = require('crypto-js')
  2. const path = require('path')
  3. const fs = require('fs')
  4. const ID_XOR_KEY_1 = '3go8&$8*3*3h0k(2)2'
  5. const deviceidText = fs.readFileSync(
  6. path.resolve(__dirname, '../data/deviceid.txt'),
  7. 'utf-8',
  8. )
  9. const createOption = require('../util/option.js')
  10. const deviceidList = deviceidText.split('\n')
  11. function getRandomFromList(list) {
  12. return list[Math.floor(Math.random() * list.length)]
  13. }
  14. function cloudmusic_dll_encode_id(some_id) {
  15. let xoredString = ''
  16. for (let i = 0; i < some_id.length; i++) {
  17. const charCode =
  18. some_id.charCodeAt(i) ^ ID_XOR_KEY_1.charCodeAt(i % ID_XOR_KEY_1.length)
  19. xoredString += String.fromCharCode(charCode)
  20. }
  21. const wordArray = CryptoJS.enc.Utf8.parse(xoredString)
  22. const digest = CryptoJS.MD5(wordArray)
  23. return CryptoJS.enc.Base64.stringify(digest)
  24. }
  25. module.exports = async (query, request) => {
  26. const deviceId = getRandomFromList(deviceidList)
  27. global.deviceId = deviceId
  28. const encodedId = CryptoJS.enc.Base64.stringify(
  29. CryptoJS.enc.Utf8.parse(
  30. `${deviceId} ${cloudmusic_dll_encode_id(deviceId)}`,
  31. ),
  32. )
  33. const data = {
  34. username: encodedId,
  35. }
  36. let result = await request(
  37. `/api/register/anonimous`,
  38. data,
  39. createOption(query, 'weapi'),
  40. )
  41. if (result.body.code === 200) {
  42. result = {
  43. status: 200,
  44. body: {
  45. ...result.body,
  46. cookie: result.cookie.join(';'),
  47. },
  48. cookie: result.cookie,
  49. }
  50. }
  51. return result
  52. }