MyBB.de Forum
Kerberos - MyCode-Verschlüsselungsproblem - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html)
+--- Forum: Plugin-Entwicklung (https://www.mybb.de/forum/forum-74.html)
+--- Thema: Kerberos - MyCode-Verschlüsselungsproblem (/thread-25481.html)

Seiten: Seiten: 1 2


Kerberos - MyCode-Verschlüsselungsproblem - Harest - 20.04.2012

Hallo,

ich sitze gerade an einem Plugin, welches erlauben soll mittels MyCode bestimmte Teile eines Beitrags mit einem Passwortschutz zu versehen.

Das Verschlüsseln, Editieren und Parsen funktioniert soweit ganz gut.
Mein Problem ist nun:
An der verschlüsselten Stelle im Beitrag erscheint ein Formular, in das man das Passwort zum Entschlüsseln eingeben muss. Nun weiß ich aber nicht an welche Datei ich das schicken soll, damit der Parser weiß, dass er die Stelle freigeben soll, wenn das Passwort übereinstimmt.

Das Formular sieht wie folgt aus:
Code:
<div class="kerberos_hidden">
    <form action="???" method="post" name="input">
        <input type="hidden" name="kerberos_id" value="{$kerberos_id}" />
        <input type="hidden" name="post_id" value="{$post_id}" />
        <input type="password" name="password" size="20" maxlenght="20" />
        <input type="submit" value="{$lang->kerberos_post_ok}" />
        <input type="hidden" name="action" value="decipher" />
    </form>
</div>

Für Hilfe wäre ich sehr dankbar.


RE: Kerberos - MyCode-Verschlüsselungsproblem - Falkenauge Mihawk - 20.04.2012

Nunja, du kannst es ja über Javascript an ein anderes Script schicken und das Script schickt dann den kompletten Beitrag bereits geparst und freigegeben zurück. Dann musst du nur noch den Inhalt des Beitrages ändern.


RE: Kerberos - MyCode-Verschlüsselungsproblem - Harest - 20.04.2012

Die Sache ich aber die, dass es auch ohne JavaScirpt funktionieren soll.


RE: Kerberos - MyCode-Verschlüsselungsproblem - StefanT - 20.04.2012

Dann musst du es wohl an die aktuelle URL senden. Alternativ iframe o.ä.


RE: Kerberos - MyCode-Verschlüsselungsproblem - Harest - 20.04.2012

Das wäre dann die showthread.php. Nur wie leite ich die Anfrage an den Parser weiter?

Hier die wichtigsten Ausschnitte aus dem Quellcode:
PHP-Code:
$plugins->add_hook("newreply_do_newreply_end""kerberos_newpost");
$plugins->add_hook("editpost_end""kerberos_editpost_retrieve");
$plugins->add_hook("editpost_do_editpost_end""kerberos_editpost");
$plugins->add_hook("editpost_deletepost""kerberos_deletepost");
$plugins->add_hook("parse_message_end""kerberos_parse_message");

[...]

class 
kerberos
{
    public function 
insert_text($matches)
    {
        global 
$db$mybb$pid;
        
        
$sql $db->query("SHOW TABLE STATUS LIKE '".TABLE_PREFIX."kerberos'"); 
        
$status $db->fetch_array($sql); 
        
$next_id $status['Auto_increment'];
        
        
$data = array(
                    
'pid'        => $pid,
                    
'uid'        => $mybb->user['uid'],
                    
'password'    => $matches[1],
                    
'text'        => $matches[2]
                );
                        
        
$db->insert_query("kerberos"$data);
        
        return 
'[kerberos='.$next_id.']';
    }
    
    public function 
retrieve_text($matches)
    {
        global 
$db$mybb$pid;
        
        
$sql $db->simple_select("kerberos""*""id = ".$matches[1]." AND pid = ".$pid."");
        
$result $db->fetch_array($sql);
        
        return 
'['.$mybb->settings['kerberos_mycode'].'='.$result['password'].']'.$result['text'].'[/'.$mybb->settings['kerberos_mycode'].']';
    }
    
    public function 
parse_text($matches)
    {
        global 
$db$mybb$templates;
        
        
$sql $db->simple_select("kerberos""*""id =".$matches[1].";");
        
$result $db->fetch_array($sql);
            
        if(
$mybb->usergroup['canseeprotectedposts'] == 0)
        {
            
$kerberos_password $result['password'];
            
$kerberos_text $result['text'];
            
            eval(
"\$show_it_to_me = \" ".$templates->get("kerberos_show"10)."\";");
        }
        else
        {
            
$kerberos_id $matches[1];
            
$post_id $result['pid'];
            
            eval(
"\$show_it_to_me = \" ".$templates->get("kerberos_hidden"10)."\";");
        }
        
        return 
$show_it_to_me;
    }
}

[...]

function 
kerberos_newpost()
{
    global 
$db$mybb$pid;
    
    if(
$mybb->usergroup['canprotectposts'] == 1)
    {
        
$sql $db->simple_select("posts""message""pid = ".$pid."");
        
$post $db->fetch_array($sql"message");
        
        
$my_kerberos = new kerberos();
        
        
$pattern '/\['.$mybb->settings['kerberos_mycode'].'=(.+)\](.+)\[\/'.$mybb->settings['kerberos_mycode'].'\]/isU';
        
$message preg_replace_callback($pattern, array($my_kerberos'insert_text'), $post['message']);
        
        
$db->write_query("UPDATE `".TABLE_PREFIX."posts` SET `message` = '".$message."' WHERE `pid` = '".$pid."';");
    }
}

function 
kerberos_editpost_retrieve()
{
    global 
$message;
    
    
$my_kerberos = new kerberos();
    
    
$pattern '/\[kerberos=(.+)\]/isU';
    
$message preg_replace_callback($pattern, array($my_kerberos'retrieve_text'), $message);
}

function 
kerberos_editpost()
{
    global 
$db$mybb$pid;
    
    
$db->delete_query("kerberos""pid = '".$pid."';");
    
    
$sql $db->simple_select("posts""message""pid = ".$pid."");
    
$post $db->fetch_array($sql"message");
        
    
$my_kerberos = new kerberos();
    
    
$pattern '/\['.$mybb->settings['kerberos_mycode'].'=(.+)\](.+)\[\/'.$mybb->settings['kerberos_mycode'].'\]/isU';
    
$message preg_replace_callback($pattern, array($my_kerberos'insert_text'), $post['message']);
    
    
$db->write_query("UPDATE `".TABLE_PREFIX."posts` SET `message` = '".$message."' WHERE `pid` = '".$pid."';");
}

function 
kerberos_deletepost()
{
    global 
$db$pid;
    
    
$db->delete_query("kerberos""pid = '".$pid."';");
}

function 
kerberos_parse_message($message)
{
    global 
$templates;
    
    
$my_kerberos = new kerberos();
    
    
$pattern '/\[kerberos=(.+)\]/isU';
    
$message preg_replace_callback($pattern, array($my_kerberos'parse_text'), $message);
    
    return 
$message;


Und zur Verdeutlichung ein Bild.


RE: Kerberos - MyCode-Verschlüsselungsproblem - StefanT - 20.04.2012

Wenn dein Feld "password" heißt, dann $mybb->input['password'] (wobei der Name ggf. ungeschickt ist).


RE: Kerberos - MyCode-Verschlüsselungsproblem - Harest - 20.04.2012

Wie ich darauf zugreife weiß ich, aber nicht an welche Stelle und bei welchen Hook ich es einsetzen muss.
Zu früh verzweifelt. Es klappt tatsächlich. Jetzt muss ich nur noch herausfinden wie ich den aktuellen Beitrag focusiere (...&tid=2&pid=2&kerberos_pw=text#pid80)

Ich sollte wirklich aufhören total übermüdet zu programmieren. Aber wenn man einmal angefangen hat, ist es schwer davon abzulassen Wink


RE: Kerberos - MyCode-Verschlüsselungsproblem - StefanT - 20.04.2012

Kann du den Anker nicht direkt bei der action des Formulars angeben?


RE: Kerberos - MyCode-Verschlüsselungsproblem - Harest - 20.04.2012

Jetzt schon. Läuft alles wie am Schnürrchen Big Grin

Dank' dir.
Kann man eigentlich bei der Installation eines Plugin auch ein neues Stylesheet einfügen, so wie man auch Templates einfügt?


RE: Kerberos - MyCode-Verschlüsselungsproblem - StefanT - 20.04.2012

Siehe: https://www.mybb.de/forum/thread-24883-post-167026.html#pid167026