Pubblifier

« Older   Newer »
 
  Share  
.
  1.     +2    
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    Nome della release: Pubblifier
    Linguaggio di programmazione: Javascript
    Versione: v1
    Descrizione: Permette di effettuare un logging più avanzato dei propri script
    Data di pubblicazione: 04/02/16
    Licenza: MIT
    Altro:
    Ho scelto questo nome per lo script perché quando mi serve loggare delle informazioni dentro una funzione anonima a cui voglio accedere dopo tramite console, specie per debugging, uso una variabile chiamata _public.
    Lo script mette a disposizione un logging diciamo più avanzato, seguendo il tappezzamento del codice di console.log() come metodo di debugging. Esso permette di inserire e poi visualizzare tutti i dati.

    Esso è composto da una funzione principale, pubblifier(), che accetta un input che specifica se vogliamo visualizzare i messaggi che possiamo specificare all'interno e da 3 metodi:

    • .set(): come argomenti è possibile specificare quanti oggetti si vogliono secondo la seguente struttura.
      { name: ... , content: ... }, dove name è l'identificativo che potete dare all'oggetto da loggare (per poterlo richiamare dopo) e dove content è il valore che volete memorizzare. Quest'ultimo può essere anche un array.

    • .getAll( message ): è un metodo che stampa tutti i risultati memorizzati. Permette di passare un oggetto contenente le frasi che vogliamo mostrare all'inizio e alla fine della stampa dei nostri dati memorizzati. La struttura che segue è la seguente:
      { start: "", end: "" }

    • .get( key, message ): permette di stampare un elemento preciso, specificando la chiave che avete usato in .add(). Se content è un array, verrà stampato interamente, elemento per elemento. Inoltre permette di stampare i messaggi: la struttura è la stessa di quella qui sopra.


    Per usarlo è necessario incollare pubblifier nel vostro codice; lo potete trovare minified QUI, su PasteBin. E' anche possibile trovare il codice sorgente qui sotto:
    CODICE
    /* * * * * * * * * * * * * * * * * * * * *
    * Pubblifier v1                                                *
    * di Alexander Cerutti                                        *
    * per http://syra.forumcommunity.net        *
    * * * * * * * * * * * * * * * * * * * * */
    var pubblifier = function(messages){
       messages = messages || false;
       window.container = window.container || {};
       return Object.freeze({
           set: function(){
               for(i in arguments){ // posso aggiungere quanti oggetti voglio
                   var m = arguments[i];
                   container[m.name] = m.content; // m.content può essere un array o una stringa
               }
               return this;
           },
           getAll: function(message){
               message = message || {};
               messages && message.start ? console.log(message.start+"\n") : false;
               for(var i in Object.keys(container)) console.info("__: "+Object.keys(container)[i]+" --> "+container[Object.keys(container)[i]]);
               messages && message.end ? console.log(message.end+"\n") : false;
               return this;
           },
           get: function(key, message){
               message = message || {};
               messages && message.start ? console.log(message.start+"\n") : false;
               for(var i in Object.keys(container)){
                   var m = Object.keys(container)[i];
                   if(m === key)
                       if(container[m].constructor === Array){
                           console.info("__: \""+m+"\" is an array");
                           for(i in container[m]){
                               console.info(":: ---> "+container[m][i]);
                           }
                       } else {
                           console.info("__: "+m+" --> "+container[m]);
                       }
               }
               messages && message.end ? console.log(message.end+"\n") : false;
               return this;
           }
       });
    };


    Esempi per testare lo script

    Come richiesto, allego degli esempi per dimostrare il funzionamento dello script.

    CODICE
    var memory = pubblifier( [ true | false ] )

    memory.set({
           name: "status_raxell"
           , content: "A Raxell puzzano i piedi"
    }, {
           name: "status_rootkitneo"
           , content: "RootkitNeo puzza male"
    }, {
           name: "status_syra"
           , content: "Syra è bella"
    });

    /* .get() - i messaggi vengono mostrati
    * solo se memory riporta parametro true
    */

    memory.get("Delle", {
           start: " ****** START DEBUG ****** "
           , end: " ****** END DEBUG ****** "
    });

    /* .getAll() - i messaggi vengono mostrati
    * solo se memory riporta parametro true
    */

    memory.getAll({
           start: "****** START DEBUG ******"
           , end: "****** END DEBUGGING ******"
    });

    /* .set() e .get() concatenati.
    * I messaggi vengono mostrati solo se
    * memory riporta parametro true.
    */

    memory.set({
           name: "Demme"
           , content: "oiccic"
    }, {
           name: "Dellem"
           , content: "ossss"
    }, {
           name: "Dekke"
           , content: "abacadabra"
    }).get("Demme", {
           start: "****** START DEBUG ******"
           , end: "****** END DEBUGGING ******"
    });

    /* .set() ed .getAll() concatenati.
    * I messaggi vengono mostrati solo se
    * memory riporta parametro true.
    */

    memory.set({
           name: "Demme", content: "oiccic"
    }, {
           name: "Dellem", content: "ossss"
    }, {
           name: "Dekke", content: "abacadabra"
    }).getAll({
           start: "****** START DEBUG ******"
           , end: "****** END DEBUGGING ******"
    });

    Spero possa essere utile a qualcuno. :)

    Edited by eXander - 9/3/2016, 13:27
     
    .
  2. boxHiccup
         
     
    .

    User deleted


    Non capisco la scelta del nome, sembra quasi un sito tipo pastebin :asd:
    E' figo, però credo sarebbe utile solo nei script grandi.. ma molto grandi lol Alla fine si aggiunge una riga in più del semplice console.log, cioè, con lo script fai
    .add()
    .add()
    .exposeAll();

    Normalmente faresti
    console.log();
    console.log();

    Anche se sarebbero due righe in meno, se con exposeAll usassimo le proprietà start ed end.
    A parte questo, mi piace il tuo stile, anche se io gestirei i parametri non obbligatori con un typeof, invece che con l'operatore OR.
     
    .
  3.      
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    Si ammetto che avrei potuto scegliere un nome migliore, però posso sempre cambiarlo. :asd: Se hai suggerimenti dimmi pure.
    Si, forse allunga un po' la procedura, ma permette di memorizzare anche. Dici che dovrei creare un metodo che aggiunge e mostra automaticamente il dato, seppur si possa fare .add({ ... }).exposeAll( message ) oppure .add({ ... }).expose( key, message ) ?
    E comunque non devi fare due volte .add().
    Per i parametri obbligatori, con l'aiuto di raxell è stata fatta una guida proprio su questo. Non so se l'hai vista, in caso contrario, eccola qui: https://syra.forumcommunity.net/?t=57950032.

    CITAZIONE
    Anche se sarebbero due righe in meno, se con exposeAll usassimo le proprietà start ed end.

    A cosa ti riferisci di preciso?
     
    .
  4. boxHiccup
         
     
    .

    User deleted


    CITAZIONE
    Si, forse allunga un po' la procedura, ma permette di memorizzare anche. Dici che dovrei creare un metodo che aggiunge e mostra automaticamente il dato, seppur si possa fare .add().exposeAll() ?

    Non mi ero accorto che si potesse fare, sarebbe il return {} circa ad inizio codice che lo permette?

    CITAZIONE
    Per i parametri obbligatori, con l'aiuto di raxell è stata fatta una guida proprio su questo. Non so se l'hai vista, in caso contrario, eccola qui: https://syra.forumcommunity.net/?t=57950032.

    Sisi, l'avevo già vista, ma comunque sapevo tutto, tranne params e arguments, che mi sarebbero davvero utili effettivamente :V

    CITAZIONE
    A cosa ti riferisci di preciso?

    Se, normalmente vorremmo fare la stessa cosa che si fa usando .exposeAll({start: "a", end: "b"}) dovremmo fare console.log("a"); console.log("qualcosa"); console.log("b");
     
    .
  5.      
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    CITAZIONE (boxHiccup @ 4/2/2016, 16:52) 
    CITAZIONE
    Si, forse allunga un po' la procedura, ma permette di memorizzare anche. Dici che dovrei creare un metodo che aggiunge e mostra automaticamente il dato, seppur si possa fare .add().exposeAll() ?

    Non mi ero accorto che si potesse fare, sarebbe il return {} circa ad inizio codice che lo permette?

    Esattamente. In pratica tu ritorni un oggetto e puoi chiamare le sue chiavi al termine della funzione, anche in sequenza.


    CITAZIONE (boxHiccup @ 4/2/2016, 16:52) 
    CITAZIONE
    A cosa ti riferisci di preciso?

    Se, normalmente vorremmo fare la stessa cosa che si fa usando .exposeAll({start: "a", end: "b"}) dovremmo fare console.log("a"); console.log("qualcosa"); console.log("b");

    * volessimo,
    Si, quindi sarebbe un po' più lungo "diciamo", seppur si parli di solo 3 righe. Comunque permetto di opzionalizzare anche la scrittura dei messaggi.
     
    .
  6. boxHiccup
         
     
    .

    User deleted


    CITAZIONE
    * volessimo,

    Piccola svista :P

    CITAZIONE
    Esattamente. In pratica tu ritorni un oggetto e puoi chiamare le sue chiavi al termine della funzione, anche in sequenza.

    Eccomi spiegato jQuery :asd:

    Sì, beh, effettivamente potrebbe tornare utile, anche perché, se non ho letto male il codice si può usare da console, cosa abbastanza comoda, visto che c'è anche la possibilità di ottenere un solo elemento dal log.
    Comunque, quel message.end cosa sarebbe?
     
    .
  7.      
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    message.end è il messaggio che puoi mostrare alla fine della serie di output.
     
    .
  8. Demøne
         
     
    .

    User deleted


    Direi che e utile solo per chi è alle prime armi, ma è molto interessante :D
     
    .
  9.      
     
    .
    Avatar

    Where there's a user input, there's a vulnerability.

    Group
    Manager
    Posts
    11,133
    Reputazione
    +174

    Status
    Beh, non è detto che sia utile solo a loro, anzi. Potrebbe servire a chiunque, in caso di debug. ;)
     
    .
8 replies since 4/2/2016, 16:20   184 views
  Share  
.
Top