• Aktuell
    • Tags
    • Beliebt
    • Benutzer
    • Gruppen
    • Suche
    • Registrieren
    • Anmelden

    ChurchTools API Client (PHP)

    ChurchTools Schnittstellen
    5
    29
    1.5k
    Lade mehr Beiträge
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
    • sctechS
      sctech @DumbergerL
      zuletzt editiert von

      @dumbergerl Wow, das sieht super aus - vielen Dank für eure Arbeit! Ich kann mir gut vorstellen (und sehe viel Potenzial darin), in unseren Projekten die bisherigen Methoden durch diesen API Client abzulösen.

      Nach ersten Tests stellen sich mir folgende zwei Fragen:

      Authentifizierung mit TOTP
      In einigen Applikationen bieten wir ein Benutzerlogin an, wobei die Authentifizierung über die ChurchTools API läuft. Dabei wird E-Mail, Passwort und der TOTP Code abgefragt. Wäre es möglich, den Client zu erweitern, sodass der TOTP Code ebenfalls angegeben und geprüft werden kann?

      z.B. als dritter Parameter :

      CTConfig::authWithCredentials("mail@example.com", "abcdef", "123456")
      

      Wenn beim Login für einen Benutzer die 2FA aktiviert ist, kommt von der API folgende Antwort:

      {
          "data": {
              "status": "totp",
              "message": "2-Factor Authentication activated. TOTP needed.",
              "personId": 1
          }
      }
      

      Anschliessend muss der TOTP über den Endpunkt /api/login/totp verifiziert werden (Parameter: code, personId). Daraufhin ist der Benutzer korrekt eingeloggt:

      {
          "data": {
              "status": "success",
              "redirectTo": ""
          }
      }
      

      Benutzerdefinierte Felder
      Werden eigene Felder, welche in ChurchTools für Personen, Gruppen oder Gruppenteilnehmer angelegt wurden auch unterstützt? Wenn ja, wie können sie abgefragt werden? Wenn nein, ist diesbezüglich etwas in Planung?

      Danke fürs Feedback! 🙂

      DumbergerLD 1 Antwort Letzte Antwort Antworten Zitieren 1
      • DumbergerLD
        DumbergerL @sctech
        zuletzt editiert von

        @sctech Vielen Dank für deine Vorschläge. Ich bin total dankbar für solche Hinweise!

        Ich habe das Feature Multi-faktor Authentifizierung eben umgesetzt (https://github.com/5pm-HDH/churchtools-api/pull/146) und hab es auf unserer ChurchTools Instanz getestet.

        Bezüglich der Benutzerdefinierten Felder habe ich mal einen Issue (https://github.com/5pm-HDH/churchtools-api/issues/147) angelegt, da dokumentiere ich den aktuellen Stand. Das setze ich auf jeden Fall als nächstes um, ich muss nur schauen wann ich dazukomme 😉

        VG Lukas

        sctechS 1 Antwort Letzte Antwort Antworten Zitieren 1
        • sctechS
          sctech @DumbergerL
          zuletzt editiert von

          @dumbergerl Sehr cool! Vielen Dank für die ultraschnelle Implementierung der 2FA! 🙂 👍

          Ich werde den Client nun schrittweise in unsere Applikationen einbinden und alte Methoden ablösen. An einigen Stellen verwenden wir, wie erwähnt, benutzerdefinierte Felder. Ich freue mich, wenn dazu noch etwas kommen wird! 😉

          Tausend Dank für dein Investment!

          B 1 Antwort Letzte Antwort Antworten Zitieren 0
          • B
            BiKi @sctech
            zuletzt editiert von

            @DumbergerL
            Ich würde mich noch über einen Login mit Userid und Logintoken (statt Email und Passwort) freuen…
            Ich habe das bei mir mal implementiert:

            $response = $client->post('index.php?q=login/ajax',[
            'json' => [
            'func' => 'loginWithToken',
            'id' => $id,
            'token' => $token
            ],
            'headers' => [
            'Cache-Control' => 'no-cache'
            ]
            ]);

            Würde mich freuen, wenn du das übernehmen könntest.

            Vielen Dank,
            Birgit

            DumbergerLD 1 Antwort Letzte Antwort Antworten Zitieren 0
            • DumbergerLD
              DumbergerL @BiKi
              zuletzt editiert von

              @biki

              Danke für den Vorschlag! Ich hab es mit eingefügt in PR155. Nun kann man auch mit User-ID und Logintoken den Client authentifizieren (siehe Docs):

              use CTApi\CTConfig;
              
              $success = CTConfig::authWithLoginToken("29", "<login-token>");
              
              B sctechS 2 Antworten Letzte Antwort Antworten Zitieren 0
              • B
                BiKi @DumbergerL
                zuletzt editiert von

                @dumbergerl Super, vielen Dank, und sooo schnell umgesetzt…. Freut mich sehr….

                1 Antwort Letzte Antwort Antworten Zitieren 0
                • sctechS
                  sctech @DumbergerL
                  zuletzt editiert von

                  @dumbergerl Sehr gute Ergänzung, danke!

                  Es gibt wohl noch keine dokumentierte Methode, dies über die REST API (anstelle der alten AJAX API) zu tun? Weiss da jemand mehr?

                  Ich hatte bisher auch immer nur eine Krücke angewendet:

                  GET Request: /api/whoami
                  URL-Parameter: user_id, login_token
                  ... danach das Session Cookie für weitere Anfragen übernehmen

                  Aber eben - eigentlich müsste es doch hierfür einen offiziellen Endpoint geben?

                  narnitzN Ralf BürzeleR 2 Antworten Letzte Antwort Antworten Zitieren 0
                  • B
                    BiKi
                    zuletzt editiert von

                    @sctech nein, soweit ich weiß, gibt es dafür (noch) keine Rest-API… mache das auch über die Ajax-API…

                    1 Antwort Letzte Antwort Antworten Zitieren 0
                    • narnitzN
                      narnitz ChurchToolsMitarbeiter @sctech
                      zuletzt editiert von narnitz

                      @sctech sagte in ChurchTools API Client (PHP):

                      @dumbergerl Sehr gute Ergänzung, danke!

                      Es gibt wohl noch keine dokumentierte Methode, dies über die REST API (anstelle der alten AJAX API) zu tun? Weiss da jemand mehr?

                      Ich hatte bisher auch immer nur eine Krücke angewendet:

                      GET Request: /api/whoami
                      URL-Parameter: user_id, login_token
                      ... danach das Session Cookie für weitere Anfragen übernehmen

                      Aber eben - eigentlich müsste es doch hierfür einen offiziellen Endpoint geben?

                      Bei /api/login bekommst du entweder status=sucess zurück oder status=totp
                      Hier bekommst du auch die personId

                      Falls zweiteres ist folgendes der flow für den neuen API (hier beispielsweise mit dem churchtoolsClient):

                      churchtoolsClient.post('/login/totp', {
                      	code,
                      	personId
                      });
                      

                      Da solltest du dann den Token bekommen.

                      App-Entwickler bei ChurchTools

                      sctechS 1 Antwort Letzte Antwort Antworten Zitieren 0
                      • sctechS
                        sctech @narnitz
                        zuletzt editiert von

                        @narnitz Danke - dieser Fall ist klar und auch bereits so implementiert. Die Frage war, ob es keinen Endpoint gibt, welcher den Login mit UserID und Token erlaubt. Der Endpoint /login funktioniert ja „nur“ mit Benutzername und Passwort.

                        Ralf BürzeleR 1 Antwort Letzte Antwort Antworten Zitieren 0
                        • Ralf BürzeleR
                          Ralf Bürzele @sctech
                          zuletzt editiert von

                          @sctech Wenn Du den Logintoken hast, brauchst Du Dich nicht einloggen, Du hängst den Token nur an jeden Request an.

                          Pfarrer und CT-Admin der Evang. Kirchengemeinde Althütte

                          narnitzN 1 Antwort Letzte Antwort Antworten Zitieren 0
                          • narnitzN
                            narnitz ChurchToolsMitarbeiter @Ralf Bürzele
                            zuletzt editiert von

                            @ralf-bürzele Genau.

                            App-Entwickler bei ChurchTools

                            1 Antwort Letzte Antwort Antworten Zitieren 0
                            • DumbergerLD
                              DumbergerL
                              zuletzt editiert von

                              @ralf-bürzele Stimmt es wäre ein Möglichkeit den Login-Token einfach jedes Mal an den Request zu hängen (im Header oder Query). Das hatte ich in der initialen Version auch so implementiert. Allerdings habe ich von ChurchTools die Rückmeldung, dass dann bei jedem Aufruf die Berechtigungen neu errechnet werden müssen. Performanter ist es, den Session-Cookie für die Authentifizierung von mehreren Requests zu verweden. Deshalb nutze ich den Login-Token jetzt nur für einen ersten Request um den Session-Cookie zu erstellen, der dann für alle weiteren Requests verwendet wird.

                              Im API Client stehen jetzt folgende Authentifizierungmethoden (siehe Docs) zur Verfügung:

                              1. ...E-Mail und Passwort:
                              $auth = CTConfig::authWithCredentials($email, $password);
                              
                              1. ...E-Mail und Passwort mit Multi-Factor Authentication:
                              $auth = CTConfig::authWithCredentials($email, $password, $totp);
                              
                              1. ...mit User-ID und Login-Token (alte Ajax-API)

                              Wie @BiKi sich gewünscht hat (wobei für dich vermutlich auch Punkt 4 funktionieren würde?)

                              $success = CTConfig::authWithUserIdAndLoginToken("29", "<login-token>");
                              
                              1. ...mit Login-Token (via REST-API):

                              Wie @Ralf-Bürzele richtig vorschlägt:

                              $auth = CTConfig::authWithLoginToken("<login-token>");
                              

                              Hinweis: Die Methoden getApiKey() und setApiKey() wurden als deprecated markiert und werden im nächsten Major-Release entfernt. Der Getter lässt sich durch AuthRequest::retrieveApiToken() ersetzen und der Setter durch CTConfig::authWithLoginToken().

                              B Ralf BürzeleR 2 Antworten Letzte Antwort Antworten Zitieren 1
                              • B
                                BiKi @DumbergerL
                                zuletzt editiert von

                                @dumbergerl vielen Dank!

                                Ja für mich würde auch der Login mit Logintoken (ohne LoginId) reichen, das hatte ich so nicht auf dem Schirm, dass das auch so möglich ist…

                                1 Antwort Letzte Antwort Antworten Zitieren 0
                                • Ralf BürzeleR
                                  Ralf Bürzele @DumbergerL
                                  zuletzt editiert von

                                  @dumbergerl ah, gut zu wissen. Dann werde ich bei meiner Implementation auch nach der ersten Verwendung des logintokens dann mit den cookies weiterarbeiten.

                                  Pfarrer und CT-Admin der Evang. Kirchengemeinde Althütte

                                  1 Antwort Letzte Antwort Antworten Zitieren 1
                                  • Ralf BürzeleR
                                    Ralf Bürzele @sctech
                                    zuletzt editiert von

                                    @sctech Doch, gibt es. Man kann (vermutlich) jede REST-API-Funktion nehmen, den LoginToken anhängen und zurück kommt ein Session-Cookie, das man weiter verwursten kann. Eben mit /whoami getestet.

                                    Pfarrer und CT-Admin der Evang. Kirchengemeinde Althütte

                                    sctechS 1 Antwort Letzte Antwort Antworten Zitieren 0
                                    • sctechS
                                      sctech @Ralf Bürzele
                                      zuletzt editiert von

                                      @ralf-bürzele Ja, genau - wie oben beschrieben, mache ich dies bisher auch immer über /whoami und verwende dann für folgende Abfragen den Session Cookie.

                                      GET Request: /api/whoami
                                      URL-Parameter: user_id, login_token
                                      Login erfolgreich, sofern als id dir korrekte User ID zurück kommt.

                                      @DumbergerL Vielleicht wäre dies auch für den API Client eine passende Variante, sodass für CTConfig::authWithUserIdAndLoginToken() nicht mehr die alte API benötigt wird?

                                      DumbergerLD Ralf BürzeleR 2 Antworten Letzte Antwort Antworten Zitieren 0
                                      • DumbergerLD
                                        DumbergerL @sctech
                                        zuletzt editiert von

                                        @sctech Da hast du grundsätzlich Recht, das wäre eine Möglichkeit. Ich habe allerdings die Methode CTConfig::authWithUserIdAndLoginToken() bereits auf deprecated gesetzt und werde Sie mit dem nächsten Major-Release wieder entfernen, nachdem die Methode CTConfig::authWithLoginToken() ja dasselbe tut ohne eine User-ID zu benötigen.

                                        sctechS 2 Antworten Letzte Antwort Antworten Zitieren 0
                                        • Ralf BürzeleR
                                          Ralf Bürzele @sctech
                                          zuletzt editiert von Ralf Bürzele

                                          @sctech /whoami braucht doch keine UserID? oder willst Du nur sicherstellen, daß Du Du bist?

                                          Pfarrer und CT-Admin der Evang. Kirchengemeinde Althütte

                                          1 Antwort Letzte Antwort Antworten Zitieren 0
                                          • sctechS
                                            sctech @DumbergerL
                                            zuletzt editiert von

                                            @dumbergerl Alles klar, das macht Sinn - danke!

                                            @Ralf-Bürzele Ja, genau - bisher habe ich damit immer sichergestellt, dass ich ich bin. Damit war dann der Login erfolgreich. Der API Client prüft mit CTConfig::authWithLoginToken() nun auf eine gültige ID (nicht leer und nicht -1). Das passt aus meiner Sicht genauso. 😉

                                            1 Antwort Letzte Antwort Antworten Zitieren 0
                                            • Erster Beitrag
                                              Letzter Beitrag