[C#/PHP] Externer Login für WoltLab Burning Board 3 [15.10.2012]

    • Release
    • Open Source

    Es gibt 54 Antworten in diesem Thema. Der letzte Beitrag () ist von Pac.

      [C#/PHP] Externer Login für WoltLab Burning Board 3 [15.10.2012]

      Name des Programms:
      Externer Login für WoltLab Burning Board

      Beschreibung:
      Das Paket besteht aus drei Bestandteilen:
      • PHP-Skript: Dieses wird auf dem Server abgelegt, ich empfehle im Hauptverzeichnis des Boards in einem Unterordner.
      • Bibliothek: Diese ermöglicht einen bequemen Zugriff von VB.NET und C# auf das Skript.
      • Beispielprojekt.

      Durch das Skript ist es möglich, den Login abzufragen, also Benutzername und Passwort des Forenaccounts, aber auch die Kontrolle der Benutzergruppen, um z.B. feststellen zu können, ob ein Benutzer Administratorrechte hat.

      Screenshot(s):



      Verwendete Programmiersprache und IDE:
      C#, IDE: Visual Studio 2012 Ultimate
      PHP

      Systemanforderungen:
      Computer: .NET Framework 4.5
      Server: PHP, Burning Board Installation, entsprechender Zugriff auf selbige und deren Datenbank.

      Aktuelle Version:
      1.2.2

      Changelog:
      Spoiler anzeigen

      Quellcode

      1. 1.1
      2. -Postanzahl hinzugefügt
      3. -XML-Dokumentation hinzugefügt
      4. -Interne Änderungen am Skript

      Quellcode

      1. 1.2
      2. -Banned-Prüfung hinzugefügt (Benutzer gesperrt ergibt Code 16)

      Quellcode

      1. 1.2.1
      2. -Login-Klasse ist nun statisch
      3. -Diverse Eigenschaften umbenannt
      4. -LoginCompletedEventArgs ausgelagert
      5. -Url Encoding hinzugefügt

      Quellcode

      1. 1.2.2
      2. -Nochmals Eigenschaften umbenannt



      Download:
      Dateianhang (92 KB)

      Lizenz/Weitergabe:
      Freeware. Das PHP-Skript ist frei modifizierbar. Namensnennung wünschenswert.

      Am Rande: Das Skript wurde an einer WBB Lite Installation geschrieben und getestet. Bei einer Vollversion sollten keine Probleme auftreten.
      Dateien
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

      Dieser Beitrag wurde bereits 18 mal editiert, zuletzt von „Lukas“ ()

      Hi,

      ich habe mal ein bisschen mit der Library getestet. Mir ist aufgefallen, dass die Logindaten, die über die GET query gesendet werden, nicht "URL-Encoded" werden. Das könnte zu Übertragungsfehlern führen.
      Warum gibt "PerformLogin" nichts zurück, PerfomLoginAsync aber einen Task<LoginResponse>? Müsste es bei der synchronen Methode nicht LoginResponse sein? Ich habe als erstes gedacht, dass es die synchrone Variante davon sei, ist sie aber nicht. Anscheinend ist das die Event Based-Variante - oder liege ich da falsch?

      Die EventArgs-Klasse "LoginCompletedEventArgs" könnte man auch außerhalb der Login-Klasse machen, so wie es z. B. beim WebClient im FW auch ist.

      Achtung, jetzt wird es pingelig:

      Spoiler anzeigen
      Der Namespacename "WBBExternalLogin" (/GroupID, UserID) wäre(n) kein korrektes PascalCase, da Akronyme nur beim ersten Buchstaben groß geschrieben werden - das Framework selber ist an dieser Stelle aber nicht ganz konsequent, von daher ist das "noch okay". :P

      Die Klasse "Data" ist meiner Meinung nach etwas dürftig benannt - das kann ja alles sein, genau wie beim Enum "Code" und der Klasse "Group". Da könnte man noch mal ein Prä- oder Postfix hinzuklatschen.

      Die Eigenschaft "Posts" der Klasse "Data" vielleicht in "PostCount" umbenennen, weil "Posts" IMO impliziert, dass man eine Liste von Post-Objekten bekommt, was aber nicht der Fall ist.


      Eine Frage habe ich noch:
      Warum ist PerformLogin eine Instanzmethode? Wenn man die Address als Parameter ergänzen würde, dann könnte man diese Funktion auch statisch machen.

      Zum PHP-Skript kann ich nicht viel sagen. Ich frage mich dort nur, warum du das Verbinden mit der SQL-Datenbank in eine statische Klasse auslagerst, aber die Querys mit der funktionalen MySQL-Methode machst.
      Von meinem iPhone gesendet

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nikeee13“ ()

      Mir ust aufgefallen, dass die Logindaten, die über die GET query gesendet werden, nicht "URL-Encoded" werden

      Wird umgesetzt, das Passwort hat jedoch kein Encoding nötig - das ist bereits ein SHA1-Hash, da sollte also nichts dran sein.

      Anscheinend ist das die Event Based-Variante - oder liege ich da falsch?

      Nein, das ist soweit richtig.

      Statisch ist eigentlich keine schlechte Idee ;)
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lukas“ ()

      Lukas schrieb:

      Wird umgesetzt, das Passwort hat jedoch kein Encoding nötig - das ist bereits ein SHA1-Hash, da sollte also nichts dran sein.

      Ich empfehle base64. Macht deutlich weniger Probleme ;)
      To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

      At some point in time, you recognize that knowing more does not necessarily make you more happy.
      Hab mal die Vorschläge von @nikeee13: umgesetzt ;)

      @Chrisber: Ja, könnte man überlegen.
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
      Dafür gibt es Online Converter:
      developerfusion.com/tools/convert/csharp-to-vb/

      Wenn es beim Übersetzen einer bestimmten Stelle Probleme gibt, sag bescheid.
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
      Bekomme bei folgenden 2 Stellen einen Fehler
      1. Hier wird eine "end off" Anweisung erwartet(ab Await Blau unterstrichen)

      VB.NET-Quellcode

      1. Dim response As LoginResponse = Await Login.PerformLoginAsync(New Uri(""), UsernameBox.Text, GetSHA1Hash(PasswordBox.text))


      2. Der Ausdruck ergibt keinen Wert(ab Login Blau unterstrichen)

      VB.NET-Quellcode

      1. Dim t = New Thread(Function() Login.PerformLogin(address, username, password)) t.Start()


      MfG
      1. Nur die PerformLoginTaskAsync-Methode kann "awaitet" werden:

      VB.NET-Quellcode

      1. Dim response As LoginResponse = Await Login.PerformLoginTaskAsync(New Uri(UrlBox.Text), UsernameBox.Text, GetSHA1Hash(PasswordBox.Password))


      2. z.B.

      VB.NET-Quellcode

      1. Dim t = New Thread(Sub() Login.PerformLoginAsync(New Uri(""), "", ""))
      2. t.Start()
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Lukas“ ()

      Also von MessageBoxen in der Bibliothek sehe ich jetzt nichts...?
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
      Ich mein die Ausgabewerte ob UserBannes oder WrongPass, diese Texte kann ich leider nirgends verändern, hab auch schon in den php dateien geschaut, alles ausprobiert, deswegen dachte ich das die Messages in der .dll eingebaut wurden?

      LG
      Meinst du diese Werte?:



      Diese sind in der Bibliothek fest einprogrammiert, warum möchtest du sie ändern?
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
      Seltsam - kann vielleicht sein, dass die vom Debuggen noch drin sind. Du verwendest die aktuelle Version?

      Edit: In 1.2.2 habe ich beim Überfliegen jetzt nichts entdeckt. Bist du dir sicher, dass es nicht an übernommenem Code aus dem Beispielprojekt liegt? Denn dort werden genau solche Hinweise ausgegeben.
      „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

      -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
      Ja hab die aktuelle Version, ich würd die Texte halt gerne durch andere erweitern, hast du ne idee? ;)

      edit/ Eigentlich nicht, aber selbst im Projektbeispiel finde ich die Textpassagen wie WrongPassword nicht.
      Seltsam Seltsam.. steh wohl aufm schlauch :D

      LG

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „.Chris.“ () aus folgendem Grund: edit