Skip to content

Instantly share code, notes, and snippets.

@1d10t
Last active March 19, 2017 21:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 1d10t/19dd0c7cf6f24930ee86c6bb51a73d9f to your computer and use it in GitHub Desktop.
Save 1d10t/19dd0c7cf6f24930ee86c6bb51a73d9f to your computer and use it in GitHub Desktop.
// url deobfuscation function '129' from audioplayer.js
(function(t, i) {
"use strict";
function e(t) {
if (~t.indexOf("audio_api_unavailable")) {
var i = t.split("?extra=")[1].split("#"),
e = o(i[1]);
if (i = o(i[0]), !e || !i) return t;
e = e.split(String.fromCharCode(9));
for (var a, r, l = e.length; l--;) {
if (r = e[l].split(String.fromCharCode(11)), a = r.splice(0, 1, i)[0], !s[a]) return t;
i = s[a].apply(null, r)
}
if (i && "http" === i.substr(0, 4)) return i
}
return t
}
function o(t) {
if (!t || t.length % 4 == 1) return !1;
for (var i, e, o = 0, s = 0, r = ""; e = t.charAt(s++);) e = a.indexOf(e), ~e && (i = o % 4 ? 64 * i + e : e, o++ % 4) && (r += String.fromCharCode(255 & i >> (-2 * o & 6)));
return r
}
Object.defineProperty(i, "__esModule", {
value: !0
}), i.audioUnmaskSource = e;
var a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN0PQRSTUVWXYZO123456789+/=",
s = {
v: function(t) {
return t.split("").reverse().join("")
},
r: function(t, i) {
t = t.split("");
for (var e, o = a + a, s = t.length; s--;) e = o.indexOf(t[s]), ~e && (t[s] = o.substr(e - i, 1));
return t.join("")
},
x: function(t, i) {
var e = [];
return i = i.charCodeAt(0), each(t.split(""), function(t, o) {
e.push(String.fromCharCode(o.charCodeAt(0) ^ i))
}), e.join("")
}
}
})(0, window);
String.prototype.htmldecode = function(){
if(!window.htmldecode_textarea) window.htmldecode_textarea = document.createElement('textarea');
window.htmldecode_textarea.innerHTML = this;
return window.htmldecode_textarea.value;
}
function vk_full_id(element){
if(typeof(element.length) == 'undefined') return element.dataset.fullId;
var audio_arr = element;
return audio_arr[AudioUtils.AUDIO_ITEM_INDEX_OWNER_ID]+'_'+audio_arr[AudioUtils.AUDIO_ITEM_INDEX_ID];
}
function vk_storage_key(audio_arr){
return 'au.'+vk_full_id(audio_arr);
}
function vk_audio_data(element, onurl, nonetwork){
var audio_arr = typeof(element.length) == 'undefined' ? AudioUtils.getAudioFromEl(element) : element;
if(audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL]){
audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL] = window.audioUnmaskSource(audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL]);
onurl(element, audio_arr);
return audio_arr;
}
var url = localStorage.getItem(vk_storage_key(audio_arr));
if(url){
audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL] = url;
onurl(element, audio_arr);
return audio_arr;
}
if(nonetwork){
onurl(element, audio_arr);
return audio_arr;
}
ap._ensureHasURL(audio_arr, function(t) {
audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL] = window.audioUnmaskSource(t[AudioUtils.AUDIO_ITEM_INDEX_URL]);
if(audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL]) localStorage.setItem(vk_storage_key(audio_arr), audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL]);
onurl(element, audio_arr);
});
return audio_arr;
}
function vk_audio_list_discover(list, onend, bulk){
if(typeof(bulk) == 'undefined') bulk = true;
var list_done = [];
var skip = 0;
var period = 2000;
var error_sleep = 80*1000;
var list_chunk_size = 10;
var list = [].map.call(list, function(element){ return element; }); // convert nodelist to array
var requested = list.length;
var busy = false;
var ct = setInterval(function(){
if(busy) return;
if(skip){ skip--; return; }
if(!requested){
clearInterval(ct);
onend(list_done);
return;
}
busy = true;
//console.log('requested', requested);
if(bulk){
var
elements = [],
add_num = Math.min(list_chunk_size, list.length)
;
while(elements.length < add_num){
var element = list.shift();
vk_audio_data(element, function(e, audio_arr){
if(audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL]){
list_done.push(audio_arr);
requested--;
return;
}
elements.push(e);
}, true);
};
var fullIds = elements.map(vk_full_id).join(',');
ajax.post("al_audio.php", {
act: "reload_audio",
al: 1,
ids: fullIds
}, {
onDone: function(sub_list, a) {
//console.log(sub_list, a);
if(sub_list){
while(sub_list.length){
var audio_arr = sub_list.shift();
if(audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL]){
vk_audio_data(audio_arr, function(e, audio_arr){
if(audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL]) localStorage.setItem(vk_storage_key(audio_arr), audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL]);
list_done.push(audio_arr);
requested--;
}, true);
}else{
console.log('no url in', audio_arr);
for(var i=0; i<elements.length; i++){
if(vk_full_id(audio_arr) == vk_full_id(elements[i])){
list.push(elements[i]);
break;
}
}
}
}
}else{
while(elements.length) list.push(elements.shift());
skip = Math.round(error_sleep/period);
return;
}
busy = false;
}
});
}else{
var element = list.shift();
vk_audio_data(element, function(element, audio_arr){
if(audio_arr[AudioUtils.AUDIO_ITEM_INDEX_URL]){
list_done.push(audio_arr);
requested--;
}else{
list.push(element);
skip = Math.round(error_sleep/period);
return;
}
busy = false;
});
}
}, period);
}
// example
vk_audio_list_discover(document.querySelectorAll('.audio_row'), function(list){
console.log('discovered list', list);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment