mirror of
https://github.com/VueTubeApp/VueTube
synced 2024-11-01 01:12:39 +00:00
104 lines
2.6 KiB
JavaScript
104 lines
2.6 KiB
JavaScript
|
//--- Modules/Imports ---//
|
||
|
import { Http } from '@capacitor-community/http';
|
||
|
import constants from '../static/constants';
|
||
|
|
||
|
function generateUserID(length = 36) {
|
||
|
const charset =
|
||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||
|
let result = "";
|
||
|
if (crypto && crypto.getRandomValues) {
|
||
|
const values = new Uint32Array(length);
|
||
|
crypto.getRandomValues(values);
|
||
|
for (let i = 0; i < length; i++) {
|
||
|
result += charset[values[i] % charset.length];
|
||
|
}
|
||
|
return result;
|
||
|
} else {
|
||
|
for (let i = 0; i < length; i++) {
|
||
|
result += charset[Math.floor(Math.random() * charset.length)];
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function countLeadingZeroes(uInt8View, limit) {
|
||
|
let zeroes = 0;
|
||
|
let value = 0;
|
||
|
for (let i = 0; i < uInt8View.length; i++) {
|
||
|
value = uInt8View[i];
|
||
|
if (value === 0) {
|
||
|
zeroes += 8;
|
||
|
} else {
|
||
|
let count = 1;
|
||
|
if (value >>> 4 === 0) {
|
||
|
count += 4;
|
||
|
value <<= 4;
|
||
|
}
|
||
|
if (value >>> 6 === 0) {
|
||
|
count += 2;
|
||
|
value <<= 2;
|
||
|
}
|
||
|
zeroes += count - (value >>> 7);
|
||
|
break;
|
||
|
}
|
||
|
if (zeroes >= limit) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return zeroes;
|
||
|
}
|
||
|
|
||
|
//--- Puzzle Solver from Anarios --//
|
||
|
async function solvePuzzle(puzzle) {
|
||
|
let challenge = Uint8Array.from(atob(puzzle.challenge), (c) =>
|
||
|
c.charCodeAt(0)
|
||
|
);
|
||
|
let buffer = new ArrayBuffer(20);
|
||
|
let uInt8View = new Uint8Array(buffer);
|
||
|
let uInt32View = new Uint32Array(buffer);
|
||
|
let maxCount = Math.pow(2, puzzle.difficulty) * 5;
|
||
|
for (let i = 4; i < 20; i++) {
|
||
|
uInt8View[i] = challenge[i - 4];
|
||
|
}
|
||
|
|
||
|
for (let i = 0; i < maxCount; i++) {
|
||
|
uInt32View[0] = i;
|
||
|
let hash = await crypto.subtle.digest("SHA-512", buffer);
|
||
|
let hashUint8 = new Uint8Array(hash);
|
||
|
if (countLeadingZeroes(hashUint8) >= puzzle.difficulty) {
|
||
|
return {
|
||
|
solution: btoa(String.fromCharCode.apply(null, uInt8View.slice(0, 4))),
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
const rydModule = {
|
||
|
logs: new Array(),
|
||
|
|
||
|
//--- Get Dislikes ---//
|
||
|
getDislikes(id, callback) {
|
||
|
console.log("fetching ryd")
|
||
|
Http.request({
|
||
|
method: 'GET',
|
||
|
url: `https://returnyoutubedislikeapi.com/votes`,
|
||
|
params: { videoId: id }
|
||
|
})
|
||
|
.then((res) => {
|
||
|
callback(res.data)
|
||
|
})
|
||
|
.catch((err) => {
|
||
|
callback(err);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
//--- Start ---//
|
||
|
export default ({ app }, inject) => {
|
||
|
inject('ryd', {...rydModule})
|
||
|
}
|
||
|
|