Menü

Login

Aktuelle Version

Forum > TeamSpeak Userabgleich *

DOTLAN Intranet / Portal >> Konfiguration, Erweiterungen, Addons > TeamSpeak Userabgleich
Antwort erstellen
Autor Thema: TeamSpeak Userabgleich
Funstar
22.01.2006 um 22:13 QuoteProfileSend PM
NEW

Clan: Freaknet
Postings: 124

Funstar
Ich habe heute TeamSpeak mit MySQL-Anbindung installiert. Die TeamSpeak Userdaten liegen in der gleichen DB wie dotlan. Auch die Passworte lasse ich in beiden Systemen mit MD5 verschlüsseln. Ist es möglich ... bzw. ja, ist es, aber wie ... dass alle User die in dotlan registriert sind sich auch in den TeamSpeak-Server einloggen können? Kann man da irgendwie die Tabellen in eine Richtung verknüpfen?
__________________
https://www.freaknet.de/
 
Griffon
23.01.2006 um 09:05 QuoteProfileSend PM

NEW

Clan: dotlan.net
Postings: 1252

Du kannst dir ein Script bauen das die Tabellen kopiert von dotlan nach teamspeak. Vielleicht kann man ja im Teamspeak die SQL Befehle angeben zum abfragen der Daten. Das weiß ich aber nicht.
 
Nick
23.01.2006 um 18:31 QuoteProfileSend PM
NEW

Clan: Kein Clan
Postings: 43

direkt möglich ist es nicht, weil sowohl teamspeak als auch dotlan eigene tabellenlayouts verwenden, die sich wohl eher nicht entsprechen.

der automatische datenabgleich auf datenbankebene wär erst mit mysql5 möglich, was teamspeak nicht unterstützt. (zumindest nicht 2.0, für 3 ist es "evtl geplant")

wie griffon schon gesagt hat, ein php script wär möglich, weiß aber nicht inwieweit das in echtzeit agieren kann.
 
Funstar
23.01.2006 um 23:46 QuoteProfileSend PM
NEW

Clan: Freaknet
Postings: 124

Funstar
Falls sich da jemand parallel zu uns mit beschäftigen mag, hier unsere Überlegungen dazu. Es muss dazu noch gesagt werden, dass wir eine Gruppe Vereinsmitglieder haben, die in der userg2u mit group_id=2 stehen, kann weglassen wer will:

Wir nehmen aus der Tabelle "user" die Felder "id", "nick", "passwort" und "joinus" (ein unix-timestamp). Des weiteren holen wir aus der Tabelle "userg2u" SELECT user_id FROM userg2u WHERE group_id = "2" -> Vereinsmitglieder.

Dann schreiben wir die Daten wie folgt in die Tabelle "ts2_clients":
i_client_id = id (aus user)
i_client_server_id = 1 (der Freaknet TeamSpeak Server)
b_client_privilege_serveradmin = 0 (für alle, -1 für Vereinsmitglieder)
s_client_name = nick (aus user)
s_client_password = passwort (aus user)
dt_client_created = joinus (unix timestamp) gewandelt in Format DDMMYYYYHHMMSS000
dt_client_lastonline ... setzt sich automatisch, nicht drum kümmern

__________________
https://www.freaknet.de/
 
Funstar
24.01.2006 um 07:48 QuoteProfileSend PM
NEW

Clan: Freaknet
Postings: 124

Funstar
So, nach gründlicher Überlegung habe ich folgendes festgestellt: wenn man am Anfang zusätzlich abfragt, welche User-IDs es in der ts2_clients Tabelle schon gibt, dann weiss man, ob man INSERT für neue, UPDATE für alte oder DELETE für nicht mehr existente User benutzen muss.
__________________
https://www.freaknet.de/
 
Nick
24.01.2006 um 17:05 QuoteProfileSend PM
NEW

Clan: Kein Clan
Postings: 43

es muss natürlich bedacht werden, dass man aufm teamspeakserver niemals das "register with server" recht vergeben sollte, sprich, dass man sich nur über die seite registrieren darf. sonst werden die tabellen schnell unübersichtlich.
 
Funstar
24.01.2006 um 19:17 QuoteProfileSend PM
NEW

Clan: Freaknet
Postings: 124

Funstar
So, hiermit bekomme ich bisher zumindest eine Tabelle ausgegeben, in der alle Werte schonmal richtig sind. Bis auf die Tatsache, dass Vereinsmitglieder so keine Serveradmin-Rechte bekommen.

Code:
<?

$dbserver= "localhost"; /* Adresse des Datenbankservers */
$dbuser= "xxxxxxxx"; /* Benutzername */
$dbpasswort= "xxxxxxxx"; /* Passwort */
$datenbank= "xxxxxxxx"; /* Name der Datenbank */

/* Zugriff auf SQL-Server */
MYSQL_CONNECT($dbserver, $dbuser, $dbpasswort) or die ("<H3>Datenbankserver nicht erreichbar</H3>");
MYSQL_SELECT_DB($datenbank) or die ( "<H3>Datenbank nicht vorhanden</H3>");

echo "<table align=\"center\" border=\"1\">\n
<tr><th>i_client_id</th><th>i_client_server_id</th><th>b_client_privilege_serveradmin</th><th>s_client_name</th><th>s_client_password</th><th>dt_client_created</th></tr>";

$result1=MYSQL_QUERY("SELECT id, nick, passwort, joinus FROM user order by id");

while($array1 = mysql_fetch_array($result1)) {
$formated_date = date(dmYHis, $array1[joinus])."000";

echo "<tr><td>$array1[id]</td><td>1</td><td>0</td><td>$array1[nick]</td><td>$array1[passwort]</td><td>$formated_date</td></tr>\n";
/* MYSQL_QUERY("UPDATE ts2_clients SET dt_client_created = '$formated_date' WHERE i_client_id = $array[id]"); */
}

echo "</table>";

?>


Das UPDATE muss noch auf die anderen Felder ausgeweitet werden, da habe ich bisher nicht herausgefunden ob man das alles in eine Abfrage hauen kann. Dann fehlt wie gesagt noch der Teil, der entscheidet ob Serveradmin oder nicht. Und es wird auch noch nicht geschaut, ob es in der TeamSpeak-Datenbank (noch) User gibt, die in der dotlan DB schon gelöscht wurden. Da fehlen mir derzeit einfach die Ansätze, vielleicht mag das ja jemand verbessern und erweitern.

[Editiert von Funstar am 24.Jan.2006 um 19:17]
__________________
https://www.freaknet.de/
 
Nick
24.01.2006 um 22:54 QuoteProfileSend PM
NEW

Clan: Kein Clan
Postings: 43

du kannst in einem update einiges machen:

UPDATE tabelle SET spalte1=wert1, spalte2=wert2, ... WHERE id=$id

nur als beispiel.

bin nicht sicher, ob das hier geht:

UPDATE tabelle1 as t, tabelle2 as a SET t.spalte=wert, a.spalte=wert, WHERE t.id=$id AND t.user=a.id
 
Funstar
24.01.2006 um 23:58 QuoteProfileSend PM
NEW

Clan: Freaknet
Postings: 124

Funstar
Okay, dann wären wir nun mit dem Verbesserungsvorschlag von griffon und dem Tipp von C.ZI an folgendem Punkt angelangt:

Code:
<?

$dbserver= "localhost"; /* Adresse des Datenbankservers */
$dbuser= "xxxxxxxx"; /* Benutzername */
$dbpasswort= "xxxxxxxx"; /* Passwort */
$datenbank= "xxxxxxxx"; /* Name der Datenbank */

/* Zugriff auf SQL-Server und Anlegen der Tabelle */
MYSQL_CONNECT($dbserver, $dbuser, $dbpasswort) or die ("<H3>Datenbankserver nicht erreichbar</H3>");
MYSQL_SELECT_DB($datenbank) or die ( "<H3>Datenbank nicht vorhanden</H3>");

echo "<table align=\"center\" border=\"1\">\n
<tr><th>i_client_id</th><th>i_client_server_id</th><th>b_client_privilege_serveradmin</th><th>s_client_name</th><th>s_client_password</th><th>dt_client_created</th></tr>";

$result1=MYSQL_QUERY("SELECT id, nick, passwort, joinus FROM user WHERE ver_email>0 order by id");

while($array1 = mysql_fetch_array($result1)) {
$formated_date = date(dmYHis, $array1[joinus])."000";

echo "<tr><td>$array1[id]</td><td>1</td><td>0</td><td>$array1[nick]</td><td>$array1[passwort]</td><td>$formated_date</td></tr>\n";
/* MYSQL_QUERY("UPDATE ts2_clients SET s_client_name = '$array1[nick]',
s_client_password = '$array1[passwort]',
dt_client_created = '$formated_date' WHERE i_client_id = $array1[id]"); */
}

echo "</table>";

?>

__________________
https://www.freaknet.de/
 
Funstar
26.01.2006 um 20:21 QuoteProfileSend PM
NEW

Clan: Freaknet
Postings: 124

Funstar
Weitere Überlegung: die Frage ob man nun INSERT für einen neuen User oder UPDATE für einen existierenden User nehmen soll und weitere Schleifen die prüfen, ob ein User in ts2_clients existiert, der in user nicht (mehr) vorhanden ist und somit gelöscht werden müsste ... kann man sich alles sparen. Einfach am Anfang des Scripts die Tabelle leeren! Es werden demnach alle Zeilen mit INSERT eingefügt. In user nicht mehr vorhandene User werden nicht neu angelegt und gut ist.

Das sähe dann so aus (meine ich):

Code:
<?

$dbserver= "localhost"; /* Adresse des Datenbankservers */
$dbuser= "xxxxxxxx"; /* Benutzername */
$dbpasswort= "xxxxxxxx"; /* Passwort */
$datenbank= "xxxxxxxx"; /* Name der Datenbank */

/* Zugriff auf SQL-Server und Anlegen der Tabelle */
MYSQL_CONNECT($dbserver, $dbuser, $dbpasswort) or die ("<H3>Datenbankserver nicht erreichbar</H3>");
MYSQL_SELECT_DB($datenbank) or die ( "<H3>Datenbank nicht vorhanden</H3>");

/* Tabelle ts2_clients leeren */
/* MYSQL_QUERY("TRUNCATE ts2_clients"); */

echo "<table align=\"center\" border=\"1\">\n
<tr><th>i_client_id</th><th>i_client_server_id</th><th>b_client_privilege_serveradmin</th><th>s_client_name</th><th>s_client_password</th><th>dt_client_created</th></tr>";

$result1=MYSQL_QUERY("SELECT id, nick, passwort, joinus FROM user WHERE ver_email>0 order by id");

while($array1 = mysql_fetch_array($result1)) {
$formated_date = date(dmYHis, $array1[joinus])."000";

echo "<tr><td>$array1[id]</td><td>1</td><td>0</td><td>$array1[nick]</td><td>$array1[passwort]</td><td>$formated_date</td></tr>\n";
/* MYSQL_QUERY("INSERT INTO ts2_clients (s_client_name, s_client_password, dt_client_created) VALUES ('$array1[nick]', '$array1[passwort]', '$formated_date')"); */
}

echo "</table>";

/* nicht vergessen den superadmin wieder anzulegen! */
/* MYSQL_QUERY("INSERT INTO ts2_clients (i_client_id, i_client_server_id, b_client_privilege_serveradmin, s_client_name, s_client_password, dt_client_created) VALUES ('10000', '0', '-1', 'superadmin', 'xxxxxxxx', '01012006000000000')"); */

?>


[Editiert von Funstar am 26.Jan.2006 um 20:33]
__________________
https://www.freaknet.de/
 
Funstar
28.01.2006 um 20:31 QuoteProfileSend PM
NEW

Clan: Freaknet
Postings: 124

Funstar
Nun die vorläufig letzte Version des Scripts. Es ist nun lauffähig und der Quelltext dokumentiert. Es leert die Tabelle ts2_clients und legt im Anschluss alle aktiven dotlan-User als TeamSpeak-User an (inkl. der dotlan-Passwörter). In einer weiteren Schleife bekommen dann alle User einer bestimmten dotlan-Gruppe Serveradmin-Rechte. Zum Schluss wird noch der Superadmin wieder angelegt. Alle benötigten Daten werden über die Variablen im Kopf eingetragen, im Quelltext muss nichts geändert werden.

Ach ja: die TeamSpeak-Tabellen müssen in der gleichen Datenbank wie dotlan liegen. Ist aber kein Problem.

Code:
<?

$dbserver= "localhost"; /* Adresse des Datenbankservers */
$dbuser= "xxxxxxxx"; /* Benutzername */
$dbpasswort= "xxxxxxxx"; /* Passwort */
$datenbank= "xxxxxxxx"; /* Name der Datenbank */

$dlsagroupid= "X"; /* dotlan Gruppen-ID für TeamSpeak Serveradmins */
$tssapasswort= "XXXXXXXX"; /* Passwort für den TeamSpeak Superadmin (Klartext, wird in MD5 gewandelt)*/
$tssauserid= "10000"; /* i_client_id für den TeamSpeak Superadmin

/* Zugriff auf SQL-Server */
MYSQL_CONNECT($dbserver, $dbuser, $dbpasswort) or die ("<H3>Datenbankserver nicht erreichbar</H3>");
MYSQL_SELECT_DB($datenbank) or die ( "<H3>Datenbank nicht vorhanden</H3>");

/* Erst die Tabelle 'ts2_clients' komplett leeren */

MYSQL_QUERY("TRUNCATE ts2_clients");

/* HTML zum debuggen */

echo "<html><body><table align=\"center\" border=\"1\">\n
<tr><th>i_client_id</th><th>i_client_server_id</th><th>b_client_privilege_serveradmin</th><th>s_client_name</th><th>s_client_password</th><th>dt_client_created</th></tr>";

/* Abfrage: für TeamSpeak relevante Felder aller aktivierten User aus der Tabelle 'user' */

$result1=MYSQL_QUERY("SELECT id, nick, passwort, joinus FROM user WHERE ver_email>0 order by id");

/* Schleife: für jeden aktivierten User das Erstellungsdatum für TeamSpeak umformatieren */

while($array1 = mysql_fetch_array($result1)) {
$formated_date = date(dmYHis, $array1[joinus])."000";

/* HTML zum debuggen */

echo "<tr><td>$array1[id]</td><td>1</td><td>0</td><td>$array1[nick]</td><td>$array1[passwort]</td><td>$formated_date</td></tr>\n";

/* und schliesslich die Daten in die Tabelle 'ts2_clients' schreiben */

MYSQL_QUERY("INSERT INTO ts2_clients (i_client_id, i_client_server_id, b_client_privilege_serveradmin, s_client_name, s_client_password, dt_client_created) VALUES ('$array1[id]', '1', '0', '$array1[nick]', '$array1[passwort]', '$formated_date')");

}

/* HTML zum debuggen */

echo "</table>";
echo "<table align=\"center\" border=\"1\">\n
<tr><th>i_client_id -> Serveradmin</th></tr>";

/* Abfrage: welche User sind in der dotlan-Gruppe, die auf dem TeamSpeak-Server Admin-Rechte bekommt */

$result2=MYSQL_QUERY("SELECT user_id FROM user_g2u WHERE group_id='$dlsagroupid' order by user_id");

/* Schleife: für jeden User der Gruppe Serveradmin-Status stetzen */

while($array2 = mysql_fetch_array($result2)) {
echo "<tr><td>$array2[user_id]</td></tr>";

/* und schliesslich die Daten in die Tabelle 'ts2_clients' schreiben */

MYSQL_QUERY("UPDATE ts2_clients SET b_client_privilege_serveradmin='-1' WHERE i_client_id='$array2[user_id]'");

}


/* Nicht vergessen den superadmin wieder anzulegen! */
/* Erst das Passwort in MD5 wandeln */

$tssapasswort_md5= MD5($tssapasswort);

/* Und dann das ganze in die Tabelle 'ts2_clients' schreiben */

MYSQL_QUERY("INSERT INTO ts2_clients (i_client_id, i_client_server_id, b_client_privilege_serveradmin, s_client_name, s_client_password, dt_client_created) VALUES ('$tssauserid', '0', '-1', 'superadmin', '$tssapasswort_md5', '01012006000000000')");

MYSQL_CLOSE();

?>


[Editiert von Funstar am 28.Jan.2006 um 20:46]
__________________
https://www.freaknet.de/
 
Casi
16.04.2006 um 15:47 QuoteProfileSend PM
NEW

Clan:
Postings: 7

hi! sowas suche ich auch!
gibt es eine auch eine kleine anleitung wie es ich in dotlan einbauen kann?
wenn nicht kann einer mal eine anleitung mache wie man es macht!
ich bin zu doof für sowas!
gruss
casi
 
TripleX
20.04.2006 um 03:40 QuoteProfileSend PM
NEW

Clan: Da-Ruler
Postings: 65

Das würde mich auch noch interessieren wie man sowas einbinden kann!

 
DerMega
20.04.2006 um 07:58 QuoteProfileSend PM
NEW

Clan: Mitten aus Deutschland e.V.
Postings: 438

Megaaaaa
ich glaube das iss nur ne Datei die man einmalig im DOTLAN Verzeiochnis ausführen muss
 
Funstar
21.04.2006 um 09:36 QuoteProfileSend PM
NEW

Clan: Freaknet
Postings: 124

Funstar
Nicht ganz. Du musst vorher TeamSpeak auf MySQL-Datenbank umbiegen (das ist schonmal ein heiden Spass), danach die MySQL-Tabellen in die gleiche Datenbank wie dotlan bauen (das wiederum ist einfach, Tabellennamen überschneiden sich nicht) und dann eben das Script um Zugangsdaten für die Datenbank ergänzen und gelegentlich ausführen (immer mal wieder, wenn neue Nutzer angelegt wurden).
__________________
https://www.freaknet.de/
 
TripleX
24.05.2011 um 11:44 QuoteProfileSend PM
NEW

Clan: Da-Ruler
Postings: 65

Hi, kann man Teamspeak 3 auch so in die Seite einbauen?
Ein addon scheint es ja dafür zu geben: http://addons.teamspeak.com/directo...-Framework.html

Vieleicht kann ja jemand etwas Basteln
gruß
TripleX
 
[ Antwort erstellen ]