Ich habe noch andere Baustellen. Und die Plugin-API muss noch wachsen.
Hier mein etwas aufgeräumterer Zwischenstand.
sub user_plugin{
my $toparse = shift or return '';
my $plugin = '';
$toparse =~ /\[name:([A-Za-z]+)\]/ and $plugin = $1;
$plugin or return '<div class="warning">Plugin-Name nicht spezifiziert.</div>';
my @param = ();
$toparse =~ /\[param:([A-Za-z0-9_.,-]+)\]/ and @param = split /,/, $1;
my $content = '';
$toparse =~ /\[content:(.*?)\]/ and $content = $1;
# weitere Eigenschaften hier parsen.
# Evaluation liefert TRUE oder es werden Debugging Tests durchgeführt.
eval{
require( 'EHFPlugins/'.$plugin.'.pm' );
1;
} or do {
# informative Fehler-Hinweise für den CMS Betreiber.
my $file = $Path{cgidir} . "EHFPlugins/". $plugin .'.pm';
( -e $file ) or return '<div class="warning">Plugin '.$plugin.'.pm konnte nicht gefunden werden.</div>';
( -r $file ) or return '<div class="warning">Plugin '.$plugin.'.pm hat keine Leserechte.</div>';
return '<div class="warning">Plugin '.$plugin
. ' ('. $plugin .'.pm) konnte unerwartet nicht gestartet werden.<br>'
.$@.'</div>';
};
# process ist die ein und einzige öffentliche Methode, die alle Plugins anbieten müssen
my $method = $plugin . '::process';
# Ein erfolgreiches Plugn muss diese Werte überschreiben!
my ($error, $returncontent) = (1,'NO PLUGIN RETURN CONTENT. Try plugin with [param:usage]');
{
no strict 'refs';
eval{
( $error, $returncontent ) = $method->( {
param => \@param,
content => $content,
userstatus => $User{status},
} );
1;
} or do {
return '<div class="warning">ERROR: Violation of Standards:<br>Plugin '
.$plugin. '.pm unterstützt die Funktion <em>process</em> nicht!<br>'.$@.'</div>';
};
}
$error and return( NL.'<div class="plugin warning">' . $returncontent . '</div>'.NL );
return( NL.'<div class="plugin '.$plugin.'">' . $returncontent . '</div>'.NL );
}
So...
Jetzt muss ich mich dem Thema Privacy-Protection widmen.
Was darf ein Plugin wissen/tun?
Darf es zum Beispiel die COOKIE Sid auslesen?
Oder muss ich Mechanismen einführen, dass solche Plugins mit diesen Daten keinen Schindluder betreiben können?
Meine Meinung ist: Ja: Die Umgebung muss aufgeräumt werden.
Dies betrifft vor allem %ENV.
Statt dessen möchte ich den Plugins kontaminierte Information bereitstellen.
Ein Plugin für Zitatsammlungen kann für einen User mit Status Admin oder Subadmin zusätzlich zum Random-Zitat ein Formular-Textfeld zur eingabe eines neuen Zitats bereitstellen.
Formular-Daten müssten in dem Fall auch vom Hauptscript an das Plugin durchgereicht werden. Ich muss also auch eine eindeutige Formular-API für diesen Fall vorsehen.
mfg Beat
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische