Pokec.sk - Sifrovanie NEW

Vyvoleni vedia medzi sebou komunikovat sifrovane prostrednictvom servera

目前為 2017-07-15 提交的版本,檢視 最新版本

// ==UserScript==
// @name           Pokec.sk - Sifrovanie NEW
// @description    Vyvoleni vedia medzi sebou komunikovat sifrovane prostrednictvom servera
// @namespace      Pokec.sk
// @include        http://pokec-sklo.azet.sk/miestnost/*
// @date           2017-07-05
// @author         Pulo15, MerlinSVK
// @icon           http://s.aimg.sk/pokec_base/css/favicon.ico
// @require        http://cdn.jsdelivr.net/jquery.spectrum/1.3.3/spectrum.js
// @resource       specCSS https://cdn.jsdelivr.net/jquery.spectrum/1.3.3/spectrum.css
// @version        3.5
// @license        MIT
// @grant          GM_addStyle
// @grant          GM_getResourceText
// ==/UserScript==

// #version 3.0 - token nahradeny nahodnymi slovami
// #version 3.1 - rozsirena zasoba slov + pridany ukoncovatel vety
// #version 3.2 - opravy preklepov v slovnej zasobe + rozsirenie slovnej zasoby
// #version 3.3 - pridane upozornenie pri pisani sifrovanej spravy na sklo odosielatelovi
// #version 3.4 - vylepsene upozornenie pri pisani sifrovanej spravy na sklo odosielatelovi
// #version 3.5 - bug fixes and improvements

var cyklus;
var encTag = "^^^";
var form = $("#odosielac");
var AZevent = form.data("events").submit[0].handler;

var specCSS = GM_getResourceText("specCSS");
var specCSS_custom =
    ".sp-dd {display: none}"+
    ".sp-preview, .sp-replacer {border: none}"+
    ".sp-preview {height: 10px}"+
    ".sp-preview-inner {border: 1px solid #000}"+
    ".sp-replacer {background: none; padding: 0; margin: 0 0 0 10px; height: 12px}";

var kto = ["dedo","baba","otec","mama","sestra","brat","teta","ujo","svagor","svagrina","bratranec","sesternica","stryko","nevesta","synovec","neter","sused","suseda","kamarat","kamaratka","kolega","kolegyna","manzelka","frajerka","fero","milan","jany","pista","laco","jozo","sergej","duro","cyril","rolo","imrich","robo","mirec","peto","dusan","adam","stano","gejza","jozefina","anezka","ursula","frederika","frantiska","mariena","kamila","henrieta","zuza","barbara","milena","galina","beata","marcela","hedviga","iveta","dajana","danica","tamara","tereza","angelika","justina","klara","zaneta","jolana","anca","margareta","sona","regina","dora","laura"];
var ako = ["rychlo","tvrdo","smiesne","nudne","nevedome","tajne","pomaly","tazko","lahko","nacierno","hladko","hlasno","potichu","trapne","sifrovane","hanblivo","zaujimavo","kruto","zamietavo","stastne","nahnevane","rozculene","krivo","ostro","choro","tazkopadne","zurivo","nehanebne","drazdivo","nemilosrdne","bezradne","beznadejne","blazene","uspokojivo","elegantne","vynimocne","casto","nasilu","nechutne","znechutene","neodolatelne","cudne","inteligentne","poucne","premilene","paralizovane","unavene","pracovne","sluzobne","rekreacne","namahavo","jednoducho","primerane","namakane","bezhlavo","tvrdohlavo","nebojacne","odhodlane","vytrvalo","namyslene"];
var corobi = ["vari","upratuje","spi","obeduje","veceria","ranajkuje","pozera","pocuva","maluje","cita","pise","ohovara","nakupuje","skusa","spehuje","napodobnuje","riskuje","tlaci","fuka","obtazuje","rozmysla","upozornuje","striela","soferuje","provokuje","vykrikuje","buzeruje","lesti","umyva","fetuje","drazdi","nafukuje","rozobera","otaca","rozbija","provokuje","napomina","cisti","posuva","sifruje","zdviha","lame","zhadzuje","nahana","picha","opluva","prekopava","betonuje","stavia","menezuje","reze","opeka","griluje","mixuje","nastavuje","pripevnuje","prilakava","odpudzuje","sekiruje","vyhladzuje","trha","uraza","nahovara","prehovara","obvinuje","hladi"];
var skym = ["s bicyklom","s lopatou","s pilkou","s kolobezkou","s tankom","s vankusom","s autobusom","s nozikom","s pocitacom","s mikrofonom","s televizorom","s ponozkami","s kazetami","s okuliarmi","s tlacenkou","s drevom","s jogurtom","s pivom","s poldecakom","so sekerou","s katanou","s petardou","s cesnakom","s kladivom", "s plastelinou","s paradajkami","s potkanom","s mraznickou","s gramofonom","s petrolejom","s benzinom","s kartonom","s popolom","s ladom","s hrebenom","s detonatorom","s brokovnicou","s mecom","s chrumkami","s haluskami","s blatom","s uhorkou","s miesackou","s petrzlenom","s tuniakom","s balonom","s varechou","s priborom","s obuvakom","s peniazmi"];
var co = ["komin","monitor","dataprojektor","mobil","radio","knihu","odpad","zumpu","pracku","gitaru","penazenku","tortu","zemlovku","budovu","opasok","utierky","zachod","cukriky","zmrzlinu","fujaru","kolajnice","osusku","byka","muchotravku","dazdnik","sporak","pivo","kotol","kefu","lavor","batoh","hodinky","koberec","misku","zaclonu","zapalovac","hadicu","vedro","lavicku","samolepky","klinec","zosit","klavesnicu","syfon","zapalky","sviecku","kompot","banan","pneumatiku","kvetinac","predlzovacku","podlahu","savo","krekry","kavovar","digestor","satnik","ovladac","sluchadla","pero","hrable","megafon","vrtak","karfiol","zvoncek","klavir","puding","odstavovac","buldozer","ventilator"];
var predlozky = ["pred","pod","za","nad","a"];
var cim = ["budovou","papucou","schodami","strechou","oknami","stromom","elektrickou","polystyrenom","perinou","nohami","lampu","svetlom","cestou","tatrami","smetiskom","lesom","odpadom","sprchou","stodolou","mesiacom","dazdom","alkoholom","mrakom","studnou","branou","dverami","zemou","kopcom","dedinou","vodou","pustou","jazerom","plynomerom","elektromerom","benzinkou","pobrezim","vratnicou","cintorinom","nemocnicou","kinom","heliportom","pivnicou","poschodim","vytahom","kanalom","fontanou","parkom","podiom","vezou","kamionom","traktorom","bagrom","bazenom","vysielacom","namestim","ambulanciou","postarkou","susedmi","balkonom","lavinou","ohniskom","restauraciou","krcmou","drogeriou"];
var pokrac = ["a","ale","no","tak","ba aj","lenze","aj","ked","kym","preto","zato","medzi tym","tak naco","takze","cize","taktiez"];
var koniec = [".","?","!","..."];

function switchEvent(status)
{
    if (status == "on") {
        form.off("submit").on("submit", sendServer);
    }
    else {
        form.off("submit").on("submit", function (e) {
            $.proxy(AZevent, form)(e);
            return false;
        });
    }
}

function insertModFunc()
{
    if (document.getElementById("msgBoxMod") === null) {
        var msgBoxMod = 'function azetMsgBox_escKey(a){"27"==a.keyCode&&$(".azmsgbox p.css_xkruh > a").click(),a.stopPropagation()}';
        var script = document.createElement("script");
        script.id = "msgBoxMod";
        script.appendChild(document.createTextNode(msgBoxMod));
        (document.body || document.head || document.documentElement).appendChild(script);
    }
}

function removeModFunc()
{
    $("#msgBoxMod").remove();
}

function validateKey(key)
{
    var numbers = key.match(/\d+/g);
    var letters = key.match(/[a-zA-Z]+/g);

    if (key === "" || key == "undefined"){
        sendMessage.showError("Nemáš nastavené heslo !");
        return false;
    }
    else {
        if (numbers !== null && letters === null){
            sendMessage.showError("Heslo musí obsahovať aj písmená !");
            return false;
        }
        else return true;
    }
}

function sendServer()
{
    var input = $("#messageText").val();
    input = input.replace(/<{1}[^<>]{1,}>{1}/g,"");
    if (input === ""){
        sendMessage.showError("Šifra musí obsahovať text !");
        return false;
    }

    var key = localStorage.getItem("pass");
    var validkey = validateKey(key);
    if (!validkey) return false;

    var identifikator = kto[Math.floor(Math.random()*kto.length)]+" "+ako[Math.floor(Math.random()*ako.length)]+" "+corobi[Math.floor(Math.random()*corobi.length)]+" "+skym[Math.floor(Math.random()*skym.length)]+" "+co[Math.floor(Math.random()*co.length)]+" "+predlozky[Math.floor(Math.random()*predlozky.length)]+" "+cim[Math.floor(Math.random()*cim.length)]+" "+pokrac[Math.floor(Math.random()*pokrac.length)]+" "+kto[Math.floor(Math.random()*kto.length)]+" "+ako[Math.floor(Math.random()*ako.length)]+" "+corobi[Math.floor(Math.random()*corobi.length)]+" "+skym[Math.floor(Math.random()*skym.length)]+" "+co[Math.floor(Math.random()*co.length)]+" "+predlozky[Math.floor(Math.random()*predlozky.length)]+" "+cim[Math.floor(Math.random()*cim.length)]+koniec[Math.floor(Math.random()*koniec.length)];
    $("#messageText").val(encTag + " " + identifikator);

    $.ajax({
        type:"POST",
        url:localStorage.getItem("server") + "index.php",
        timeout: 8000,
        data:{ident:identifikator,pass:key,msg:input,akcia:"vloz"},
        error: function(error) {
            insertModFunc();
            azetMsgBox('alert',{title:'Odoslanie šifrovanej správy',text:"<p><span style='color:#CC0033'>Unable to send message to server !</span>"+'</p><br>',okButton:"Zavrieť"});
            removeModFunc();
            return false;
        }
    });

    switchEvent("off");
    $("#odosielac").submit();
    switchEvent("on");
    return false;
}

function openIdent()
{
    var msgs = $(".prispevok > span:contains('"+encTag+"')");
    var key = localStorage.getItem("pass");
    var encMsgs = msgs.contents().filter(function(){
        return this.nodeType == Node.TEXT_NODE;
    });
        encMsgs.closest(".dd").css({
            "color": localStorage.getItem("fgcolor"),
            "background": localStorage.getItem("bgcolor"),
        }).attr("data-enctag", encTag);

        for (i = 0; i < msgs.length; i++){
            $(".prispevok > span:contains('"+encTag+"')").attr({"id":$(encMsgs[i]).text().replace(encTag,"").replace(" ",""), "title": "Klikni pre zobrazenie dešifrovanej správy."});
            $(".prispevok > span:contains('"+encTag+"')").css({"cursor": "pointer"});
            $(".prispevok > span:contains('"+encTag+"')").on( "click", function() {

                sendMessage.showError("Načítava sa požiadavka...");

                var msg = "";
                $.ajax({
                type:"POST",
                dataType: "json",
                url:localStorage.getItem("server") + "index.php",
                data:{ident:this.id,pass:key,akcia:"nacitaj"},
                timeout: 8000,
                success: function(response) {
                    msg = JSON.stringify(response).replace('"',"").replace('"',"");
                    insertModFunc();
                    azetMsgBox('alert',{title:'Dešifrovaná správa',text:msg+'</p><br>',okButton:"Zavrieť"});
                    removeModFunc();
                },
                error: function(error) {
                    insertModFunc();
                    azetMsgBox('alert',{title:'Dešifrovaná správa',text:"<p><span style='color:#CC0033'>Unable to connect to server !</span>"+'</p><br>',okButton:"Zavrieť"});
                    removeModFunc();
                },
                });
            });
            encMsgs[i].nodeValue = $(encMsgs[i]).text().replace(encTag,"").replace(" ","");
    }
}

function blinker()
{
    if($("#messageText").val().length > 0)
    {
        sendMessage.showError("Správa sa odošle šifrovane.");
    }
    cyklus = setTimeout(blinker, 4000);
}

function addGUI()
{
    var cryptButton = '<a id="sifrovanie" href="#" title="Zapnúť / Vypnúť" class="piskotka">Šifrovanie</a>';
    var phraseInput = '<span class="pi-setup" width="10px" height="10px" id="settings" title="Nastavenie šifrovania" style="cursor:pointer"></span> <input id="fgColor" type="color" /> <input id="bgColor" type="color" />';

    if (localStorage.getItem("fgcolor") === null) { localStorage.setItem("fgcolor", "#FFFFFF"); }
    if (localStorage.getItem("bgcolor") === null) { localStorage.setItem("bgcolor", "#CC0000"); }

    GM_addStyle(specCSS);
    GM_addStyle(specCSS_custom);

    var htmlString = cryptButton +' &nbsp; <span id="encControls" style="display: none">'+ phraseInput +'</span>';
    document.getElementById("skloNapoveda").insertAdjacentHTML("afterend", htmlString);

    $("#fgColor").spectrum({
        showInput: true,
        showAlpha: true,
        cancelText: "zrušiť",
        chooseText: "uložiť",
        change: function(color){
            localStorage.setItem("fgcolor", color);
            $('div[data-enctag="'+encTag+'"]').css("color", color);
            sendMessage.showError("Farba textu bola uložená.");
            return false;
        }
    })
        .spectrum("set", localStorage.getItem("fgcolor"));
    $(".sp-replacer")[0].setAttribute("title", "Farba textu");

    $("#bgColor").spectrum({
        showInput: true,
        showAlpha: true,
        cancelText: "zrušiť",
        chooseText: "uložiť",
        change: function(color){
            localStorage.setItem("bgcolor", color);
            $('div[data-enctag="'+encTag+'"]').css("background", color);
            sendMessage.showError("Farba pozadia bola uložená.");
            return false;
        }
    })
        .spectrum("set", localStorage.getItem("bgcolor"));
    $(".sp-replacer")[1].setAttribute("title", "Farba pozadia");

$("#sifrovanie").on("click", function(){
    $(this).toggleClass("aktivna");
        if ($(this).hasClass("aktivna")){
            switchEvent("on");
            $("#encControls").fadeIn(250,"swing");
            $("#messageText").attr('maxlength','500');
            $("#messageText").css('background','#FAD2D4');
            sendMessage.showError("Správa sa odošle šifrovane.");
            blinker();
    } else {
            switchEvent("off");
            $("#encControls").fadeOut(250,"swing");
            $("#messageText").attr('maxlength','250');
            $("#messageText").css('background','#FFFFFF');
            clearTimeout(cyklus);
    }
});

$("#settings").on("click", function(){
    insertModFunc();
    azetMsgBox('confirm',{title:'Nastavenie Šifrovania',text:'<p><input type="text" placeholder="URL šifrovacieho servera" id="serverurl" value="'+ localStorage.getItem("server") +'" autocomplete="off" maxlength="150" style="font-size: 11px; color: #000066; margin-left:10px; width:225px; height: 16px; padding: 0 2px 0 2px; border-radius:3px"></p><br><p><input type="password" placeholder="šifrovacie heslo" id="heslo" value="'+ localStorage.getItem("pass") +'" autocomplete="off" maxlength="150" style="font-size: 11px; color: #000066; margin-left:10px; width:225px; height: 16px; padding: 0 2px 0 2px; border-radius:3px"></p><br><center><a href="'+ localStorage.getItem("server") +'web/" target="_blank">WEBOVÉ ROZHRANIE</a></center><br>',yesButton:'Uložiť',noButton:'Zrušiť'},function(callback){
        if (callback) {
            localStorage.setItem("server",$("#serverurl").val());
            localStorage.setItem("pass",$("#heslo").val());
        }else{ }
});
    removeModFunc();
});

}

$(document).ready(addGUI);
$('#sklo').on('DOMNodeInserted',function(e){if($(e.target).hasClass('sprava')){openIdent();}});
$('#sklo').on('DOMNodeRemoved',function(e){if($(e.target).hasClass('sprava')){openIdent();}});