Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.37 veröffentlicht (04.11.23)


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste
Kerberos - MyCode-Verschlüsselungsproblem
#1
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.
Helfe wie auch dir geholfen wird.
Zitieren
#2
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.
Zitieren
#3
Die Sache ich aber die, dass es auch ohne JavaScirpt funktionieren soll.
Helfe wie auch dir geholfen wird.
Zitieren
#4
Dann musst du es wohl an die aktuelle URL senden. Alternativ iframe o.ä.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#5
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.


Angehängte Dateien Thumbnail(s)
   
Helfe wie auch dir geholfen wird.
Zitieren
#6
Wenn dein Feld "password" heißt, dann $mybb->input['password'] (wobei der Name ggf. ungeschickt ist).
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#7
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
Helfe wie auch dir geholfen wird.
Zitieren
#8
Kann du den Anker nicht direkt bei der action des Formulars angeben?
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#9
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?
Helfe wie auch dir geholfen wird.
Zitieren
#10
Siehe: https://www.mybb.de/forum/thread-24883-p...#pid167026
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren