[PHP] SA:MP ControlPanel <Pre-Version>

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Guten Abend,


    Ich veröffentliche hier mein CP, an dem ich nun über 8 Monate hinweg gearbeitet habe. DarthXela hatte ursprünglich ein Design dafür designt ( :D ), dass habe ich jedoch verschlampt ...
    Ich denke man, ich werde das CP auch noch erweitern werde, das hier ist nur die (kostenlose) Vorversion ;)


    Vorab: Dieses CP hat keinen Installationsmanager & arbeitet über SQLite ( die Basis von MySQL ). Es läuft über SSH & FTP, nichts für Anfänger.


    Was kann es ?


    Start-Stop-Teil:
    Mit dem ControlPanel kannst du deinen Server von jedem Internet-Browser ( der Internetzugang hat* ) starten & stoppen. Dies geschieht über AJAX & SSH, der Browser sendet zuerst einen AJAX-Request an das CP, dass sich dann mit dem Linux-Root verbindet & den Server startet / stoppt. So kann der Server gestartet werden, ohne dass die komplette Seite neu geladen werden muss ...


    Servereinstellungs-Teil:
    Mit dem Serverconfigurator kann man den Server einstellen, wie man möchte. Aus Zeitgründen habe ich es nicht geschafft, dass man alles einstellen kann ... Außerdem braucht die server.cfg ein Format, was diesem entspricht ( Reihenfolge der Zeilen egal :(


    sonst wirft er eine Exception ;)


    Serverview
    Der Serverview ist gleich nach dem Login zu sehen & zeigt den Status des Servers an. Mehr gibt es dazu nicht zu sagen =)


    Technische Details


    Das CP habe ich u.a. gecoded, damit ich mich selber ein bischen lerne ;)

    • Sehr Objekt-Programmiert
    • Dynamisch gecoded ( die einzelnden Seiten sind in einer Datenbank eingetragen, aus der sie live gelesen werden )
    • Großteils AJAX basierend ( ~ 75% der Requests laufen über AJAX )
    • leicht ( mit PHP-Kenntnissen ) erweiterbar
    • Eigenes Fehlermeldungs-System ( try-catch & errorhandle basierend )
    • ( Hier wollte ich noch iwas hinschreiben )


    Die Datenbank ist eine SQLite-Datenbank, die Syntax gleicht eigentlich der von MySQL mit Ausnahme davon, dass es kein A_I gibt und das Zeichen ` nicht unterstützt wird. Felder und Tabellen werden also ohne abtrennung geschrieben ;)

    Code
    class DB
     -> openDB()
     -> sendQuery(String:$query) returns Result;
     -> numRows(Result:$result) returns int;
     -> numFields(Result:$result) returns int;
     -> fetchAssoc(Result:$result) returns array[]
     -> sendQueryfetchAssoc(String:$query) returns array


    Einstellen


    Das Einstellen ist das komplizierteste an der Sache, denn es gibt kein Installationsmanager. Um es einzustellen, müsst ihr deshalb in den Ordner "core" wechseln und die database.sql öffnen. Dort sehr ihr die SQL-Befehle, mit denen die Datenbank generiert wird. Einfach alles, was in die Tabelle `settings` eingetragen werden würde, anpassen. Jetzt löscht ihr, falls sie vorhanden ist, die "database.db" ( wichtig hierbei ist, dass ihr auf die Endung achtet ) und ruft die index.php auf. Diese knallt euch eine Exception an den Kopf, dass die Datenbank nicht existiert. Einfach die Seite neu laden und alles geht =)


    Vorraussetzungen


    • PHP:

      • PHP 5+
      • ssh2 - Lib
      • fsockopen
      • ftp - Lib
      • sqlite - Lib


    • vServer / Rootserver:

      • Debian 3+ ( "tested" on Debian 3.0 x64, SA:MP scheint aber wegen der 64Bit-Struktur nicht zu laufen X( )
      • SSH - Server
      • FTP-Server
      • screen ( normalerweise vorhanden )



    Screenshots


    Schlicht & zweckmäßig ;) Der Fairness halber lasse ich die Links zum Image-Anbieter drinne.


    Seitenstruktur


    Für die, die ein neues Design haben wollen, habe ich die page.html beigelegt. Dort ist die ( grobe ) Struktur der Seite zu sehen, weiteres müsstet ihr in den "Templates" nachgucken ..


    Feedback


    Erwünscht =) Beachtet bitte, dass dies über 8 Monate hinweg gecoded wurde, also bitte Bugs reporten. Habe mir zwar nebenbei eine Tech. Dokumentation geschrieben, kam aber an einigen Stellen trotzdem ins Harken und musste vieles deswegen überarbeiten ;)


    Changelog


    Code
    0.2a
    SQL-Lücke geschlossen, danke an Trooper
    Rechtschreibfehler in den Kommentaren verbessert, wieder danke an Trooper


    Download


    Pastebin ( index.php :(0.2 a
    Uploaded.to: 0.2 a


    Pastebin ( index.php :(0.1 a
    Uploaded.to: 0.1 a


    Liebe Grüße,
    Tion


    /E1: Downloads X( Screens kommen nach
    /E2: Spoiler entfernt, Screens kommen noch ...
    /E3: Screens, hoffentlich auch neue Version ? ( Nein, leider nicht. Muss mich noch um Troopers Fußnägel kümmern :D ) ( Ja, doch )


    * ist nicht selbstverständlich, ich wurde auch schon von Benutzern angeschieben die mit ihrem Browser nicht auf mein CP kamen. Nach knapp 30 Minuten kam heraus, dass der Rechner, an dem sie das CP aufrufen wollten, gar keinen Internet vorhanden war X(

  • Zitat

    Die falschen spoilertags erwecken dein Eindruck,
    du solltest die Werbung noch ein wenig verfeinern ;)


    Bitte ?


    Zitat

    allerdings wären Screenshots natürlich bei sowas immer wichtig.


    Die vergesse ich auch jedes mal, kommen nach ;)


    Zitat

    Ich sehe keinen Download :)


    Peinlich, kommt nach ;)


    Tion

  • Zitat

    schöne Sache ( vom Text her ) nur hat ein Admin den Code schon überprüft? Laut Regeln darfst du sonst den DL nicht posten ( Viren-Gefahr und Co )


    Ich bin echt dafür, dass man ein Trusted-Member-System einführt X(


    Wie ich oben geschrieben habe, nichts für (blutige) Anfänger, und wer dem absolut misstraut, kann den Sourcce selber unter die Lupe nehmen. Bei PHP gibt es ja nur den "Source Code", PHP ist ja eine Art Script. Und von PHP-Viren habe ich noch nie was gehört :D


    Zitat

    Und Tion ist eine 'bekannte Persönlichkeit', ich glaube kaum das da irgendwo Viren sind


    Danke für das Vertrauen ;)


    /E:


    Zitat

    Du verwendest überall

    Code
    [spoiler]


    -tags, obwohl es die hier (aktuell) nicht gibt...


    Anewohnheit, werde ich entfernen... Danke für den Hinweis ;)

  • Code
    $pagetemp = DB::sendQueryfetchAssoc('SELECT * FROM pages WHERE pagename = \''. $_GET['page'] .'\' LIMIT 0,1;');


    Ich weiß ja nicht, ob du in den Includes filterst, aber das sieht mir ziemlich nach einer SQL-Schwachstelle aus...


    Außerdem heißt es "logged in", nicht "logedin" :P

  • Code
    $pagetemp = DB::sendQueryfetchAssoc('SELECT * FROM pages WHERE pagename = \''. $_GET['page'] .'\' LIMIT 0,1;');


    Ich weiß ja nicht, ob du in dne Includes filterst, aber das sieht mir ziemlich nach einer SQL-Schwachstelle aus...


    Ups, wird mit dem nächsten Update entfernt ...
    Wer kam auf die Idee der SQL-Injections ?


    Außerdem heißt es "logged in", nicht "logedin" :P


    Zeichen werden auch immer teurer :D
    Habe vieles ( u.a. das Datenbanksystem ) von meinen anderen Codes herauskopiert, mal sehen ob ich das nach und nach ändern kann


    Tion

  • Habe mir auch mal den Rest durchgeschaut,
    habe sonst keine Lücken gefunden :)


    Nur bitte, bitte verbessere in core/system.inc.php das hier:

    Zitat

    /* Der Haubtcontainer */


    Das schreibst du da die ganze Zeit,
    und mir rollen sich da die Fußnägel auf :D

  • Habe mir auch mal den Rest durchgeschaut,
    habe sonst keine Lücken gefunden :)


    Nur bitte, bitte verbessere in core/system.inc.php das hier:


    Das schreibst du da die ganze Zeit,
    und mir rollen sich da die Fußnägel auf :D


    Habe es einmal geschrieben & den Rest einfach mit der Gutenberg'schen Tastatur kopiert ...


    Aber SQL-Lücke und den Rechtschreibfehler korregiert.


    Tion