Aktuell angemeldete Benutzer auslesen

Hallo,

ich schreibe gerade an einem kleinen Webserver, der mir Informationen zum aktuell Zustand meiner Nextcloud Box bereit stellen soll. Mir ist bewusst, dass man diese Infos auch über das WebInterface einsehen kann, aber ich möchte mich nicht erst einloggen und durchklicken müssen.

Daher hier meine Frage: Gibt es eine Möglichkeit von außen an die Information zu gelangen, welche User registriert sind, welche aktuell eingeloggt sind, wann sie zuletzt eingeloggt waren und wie viel Prozent des ihnen zugewiesenen Speichers sie belegen?

Mein Programm ist in Java 8 geschrieben und läuft auf dem Raspberry Pi auf dem auch Nextcloud läuft.

Vielen Dank für eure Hilfe!

Hallo

Schon mal sowas versucht ?

<?php $pdo = new PDO('mysql:host=localhost;dbname=nextclouddb name', nextclouddb admin', 'nextclouddb pass'); $sql = "SELECT uid, gid FROM oc_group_user"; foreach ($pdo->query($sql) as $row) { echo "User = ". $row['uid']."
"."In der Gruppe"."
".$row['gid']."
"; echo "

"; } ?>

jetzt nur noch den teil abrfagen der dir sagt ist da oder ist nacht so im kopf hab ich das jetzt nicht ^^

Vielen Dank. Ich versuche es aktuell über das occ-Skript mit dem Parameter user:list . Den Login-Status werde ich da allerdings nicht rausbekommen. Mit der Datenbank habe ich mich bisher nicht beschaeftigt. Wäre aber denkbar. Gibt ja entsprechende Treiber für Java. Weist du, ob die Information, on jemand angemeldet ist oder nicht überhaupt in der Datenbank hinterlegt ist?

eine information sollte schon geben aber wo weiß ich gerade leider nicht ^^ aber die daten bank schreibt ja mit wenn einer eingelogt ist (aktuelles datum) zB es geht auch wenn du in einer php (zB. index.php) nach der login abfrage wenn er dir den inhalt anzeigt kann das du da eine php abfrage einbaust und in einer TXT speicherst ^^

das würde auch gehen ^^

PS (aktuelles datum) = Letztes Login

Was definitiv geloggt wird, ist der letzte Login. Aber das allein lässt ja noch keine Aussage darüber zu, ob der User aktuell eingeloggt ist.
Die User bekommt man leicht ueber “select uid, displayname from oc_users” heraus. Leider habe ich noch keine Tabelle gefunden, in der der Loginstatus gespeichert ist.

lach dann schreib es einfach dazu ^^

http://www.schattenbaum.net/php/update.php

Schreib einfach bei der datenbank bei den usernamen noch dazu (weitere tabelle) mit dem namen zB online

und dann bau in die wichstigen seiten ein

<?php $db = mysqli_connect("localhost", "Benutzername", "Passwort", "Datenbankname"); $update = mysqli_query($db, $online); $timestamp = time(); $online = date("d.m.Y - H:i", $timestamp); echo $online; ?>

bei deiner abfrage dann grenzt du ein alles was 5 minuten abweicht von der aktuellen urzeit wird alls ausgelogt angezeit ^^

PS das ist jetzt ganz grob kein fertiger code XD

Das wiederum kann ich natürlich auch über die Datenbank machen. Danke für den Hinweis. Ich habe mittlerweile herausgefunden, dass ich wahrscheinlich die oc_users in Verbindung mit der oc_authtoken benoetige.

Jup da klingelt was ^^

<?php $pdo = new PDO('mysql:host=localhost;dbname=nextclouddb name', nextclouddb admin', 'nextclouddb pass'); $sql = "SELECT uid, gid, tabelleauthtoken FROM oc_group_user and oc_authtoken "; foreach ($pdo->query($sql) as $row) { echo "User = ". $row['tabelleauthtoken ']." echo "User = ". $row['uid']." "."In der Gruppe"." ".$row['gid']." "; echo " "; } ?>

sollte dann etwa so aussehen ^^

ich kann leider kein php, deswegen verstehe ich immer nur einen Teil dessen, was du schreibst.

Mein aktueller Ansatz:
select displayname, max(last_activity) as newestentry from oc_users, oc_authtoken where oc_users.uid=oc_authtoken.uid group by displayname order by newestentry desc;

Annahme dabei ist, dass last_activity ein Timestamp ist…

Okay, es ist ein Unix-Timestamp…
Jetzt muss ich das ganze nur noch verrechnen… :smile:

Ja dann hoffe es hat was gebracht was ich gesagt habe ^^ Viel spaß noch ^^

1 Like

Auf jeden Fall! Hat mich in die richtige Richtung geschubst. :slight_smile:
Hier noch mein SQL-Statement:
SELECT displayname, MAX(last_activity) FROM oc_users, oc_authtoken WHERE oc_users.uid=oc_authtoken.uid GROUP BY displayname ORDER BY displayname ASC

1 Like