Page 1 of 1

Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Sat 2. Oct 2021, 00:00
by superjogi
Hallo,

Kann man mit einem Bashscript folgende Infos auf elegante Weise (zB. direkt über KeyHelp cli) auslesen?
  • Liste der User
  • Liste der Datenbanken
  • Liste der Domains
  • Liste der Emails

Brauchbar für eine Schleife von Backups, Wartung, Cronjobtriggern etc.

Schöne Grüße

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Sat 2. Oct 2021, 01:41
by Alexander
Hallo,

Das geht, in dem du dich entweder direkt über die Datenbank einloggst und die Daten aus der KeyHelp Datenbank ausliest. Oder dich lokal über die API verbindest und die Daten darüber holst.
Letzteres wäre empfehlenswerter, aber sicher auch etwas aufwendiger.

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Sat 2. Oct 2021, 09:47
by space2place
Alexander wrote: Sat 2. Oct 2021, 01:41 Oder dich lokal über die API verbindest und die Daten darüber holst.
Letzteres wäre empfehlenswerter, aber sicher auch etwas aufwendiger.
Funktioniert einwandfrei.. Nutze das auch bei meinem Migrationsscript

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Sat 2. Oct 2021, 23:41
by superjogi
Alexander wrote: Sat 2. Oct 2021, 01:41 Hallo,

Das geht, in dem du dich entweder direkt über die Datenbank einloggst und die Daten aus der KeyHelp Datenbank ausliest. Oder dich lokal über die API verbindest und die Daten darüber holst.
Letzteres wäre empfehlenswerter, aber sicher auch etwas aufwendiger.
Danke das ist sehr hilfreich.

>Oder dich lokal über die API verbindest und die Daten darüber holst.
Genau das würde ich gerne machen.

Ich starte mal meine Erkenntnisse zu posten..

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Sat 2. Oct 2021, 23:41
by superjogi
space2place wrote: Sat 2. Oct 2021, 09:47
Alexander wrote: Sat 2. Oct 2021, 01:41 Oder dich lokal über die API verbindest und die Daten darüber holst.
Letzteres wäre empfehlenswerter, aber sicher auch etwas aufwendiger.
Funktioniert einwandfrei.. Nutze das auch bei meinem Migrationsscript
Danke für die Info. Würde mich über ein Bash API Beispiel freuen für z.B. User und Domain Liste. : )

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Sat 2. Oct 2021, 23:44
by superjogi
Hier ein Bash Skript für die Liste der Datenbanken über Verbindung mit mysql
- Auslesen der Datenbankliste
- Optionale Filterung (Prefix des Datenbanknamens), aktuell auskommentiert
- Liste durchlaufen
- Backup der Datenbanken, gesammelt in einem nach Datum benannten Ordner
- Automatisches Löschen der Backups nach 31 Tagen

Code: Select all

#!/bin/bash

DATE=`date +%Y-%m-%d`
BACKUPPATHBASE=""/__databasebackup""
BACKUPPATH=""${BACKUPPATHBASE}/${DATE}""

#DBNAME_STARTS_WITH=""HIER DBPREFIX""
MHOST=""HIER DATENBANKSERVER IP""
MUSER=""HIER USERNAME""
MPWD=""HIER PASSWORT""
MYSQL=""mysql""


mkdir -p ${BACKUPPATH}

DBS="$($MYSQL -h${MHOST} -u$MUSER -p$MPWD -Bse 'show databases')"
for dbname in $DBS; do

#if [[ "${dbname}" =~ ^"${DBNAME_STARTS_WITH}".* ]]; then

echo "Preparing dump for ${dbname}"
mysqldump --default-character-set=utf8 --no-tablespaces -h${MHOST} ${dbname} -u${MUSER} -p${MPWD} > ${BACKUPPATH}/${dbname}.sql

#fi

done

find /__databasebackup/* -mtime +30 -exec rm {} \;

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Sun 3. Oct 2021, 00:16
by superjogi
Hier eine Querverlinkung zu einem Bash Skript zum Auffinden der Userordner

viewtopic.php?p=30858#p30858

Wäre interessanter und schöner dies mit API abzulösen.

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Sun 3. Oct 2021, 23:41
by OlliTheDarkness
superjogi wrote: Sun 3. Oct 2021, 00:16 Hier eine Querverlinkung zu einem Bash Skript zum Auffinden der Userordner

viewtopic.php?p=30858#p30858

Wäre interessanter und schöner dies mit API abzulösen.
Kannst du doch ?!
Über den ​/clients bekommst alle Nutzer.
Da die Struktur immer die selbe ist, ist es logisch das alle angezeigten Clients unter /home/users/CLIENTNAME liegen.
Bzw. das ergebnis sagt dir sogar wo der homepath ist mit "document_root": "/home/users/alex/",

Vollständige Ausgabe:

Code: Select all

[
  {
    "id": 8,
    "status": 1,
    "username": "alex",
    "language": "de",
    "email": "me@example.com",
    "notes": "Any comments about this client account.",
    "created_at": "2019-08-15T11:29:13+02:00",
"document_root": "/home/users/alex/",
    "is_suspended": false,
    "suspend_on": null,
    "delete_on": null,
    "contact_data": {
      "first_name": "Alex",
      "last_name": "Mahr",
      "company": "Keyweb AG",
      "telephone": "555-Nase",
      "address": "Neuwerkstraße 45/46",
      "city": "Erfurt",
      "zip": "99084",
      "state": "Thuringia",
      "country": "DE",
      "client_id": "ID-12345"
    },
    "password_hash": "$2a$10$fF3npQ.jS/KL8Nr6zecPke8IUsuB1oGXxY7w4aa...\"",
    "password_hash_os": "$6$rounds=100000$tn0.24Y/EWkV8gjA$VkYdo/1X23dW...\""
  }
]
Der KH Api Doc entnommen.

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Mon 4. Oct 2021, 12:48
by superjogi
Danke!
Ich sehe du beziehst dich auf: https://app.swaggerhub.com/apis-docs/ke ... .1#/client
Super.. ich bin dran.
Probiere es mal mit diesem REST Tutorial zu kombinieren: https://auth0.com/blog/developing-restf ... ith-lumen/

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Mon 4. Oct 2021, 13:03
by Tobi
Der Anfang ist bereits gemacht 😉

viewtopic.php?t=8715

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails  [GELÖST]

Posted: Mon 4. Oct 2021, 23:35
by superjogi
Hier ein PHP Skript für die Liste der User, Domains, Datenbanken mittels Verwendung der API
- Generierung der Listen mittels jeweils einem statischen Funktionsaufruf
- Nur GET um die Listen zu bekommen
- Einfach anzupassendes Ergebnis z.B. mittels übersichtlichem Code und Debugausgabe in Console, oder Browser
- Caching von den Daten jeweils als Textfiles pro Endpoint (siehe Bild)

Code: Select all

<?php

//https://app.swaggerhub.com/apis-docs/keyhelp/api/2.1#/client

KeyHelpAPI::listKeyHelpObjects("clients"); 	 print KeyHelpAPI::$newLine;
KeyHelpAPI::listKeyHelpObjects("domains"); 	 print KeyHelpAPI::$newLine;
KeyHelpAPI::listKeyHelpObjects("databases");     print KeyHelpAPI::$newLine;  

class KeyHelpAPI
{

	public static $apiUrl="https://184.111.111.211/api/v2/";
	public static $apiKey="kR8asdf.sBd3eK7F439ijfkmilkjmdioj09fujdsfjkdsf90u430rjhfoldjü09432u5rfjadlskfjklsdfjkasjdflksafd";
	public static $apiMethod="GET";
	public static $genFile="/home/users/pm/www/testdomain.de/cachedApiResults";
	public static $newLine="\n";

	public static function listKeyHelpObjects($objectEndpoint){
		$arrObjects 	= json_decode(self::CallAPI($objectEndpoint,$data = false), true);
		//use this to understand what data there is!
		//print_r($arrObjects);
		
		
		switch ($objectEndpoint)
		{
			case "clients":
				//print $object[0]["username"];	
				self::initializeCachedAPICalls($objectEndpoint);
				foreach ($arrObjects as $object) {
				  print $object["username"]. self::$newLine;
				  self::writeCachedAPICalls($objectEndpoint,$object["username"]);
				  
				}
			break;
			case "domains":
				self::initializeCachedAPICalls($objectEndpoint);
				foreach ($arrObjects as $object) {
				  print $object["domain"]. self::$newLine;
				  self::writeCachedAPICalls($objectEndpoint,$object["domain"]);
				}
			break;
			case "databases":
				self::initializeCachedAPICalls($objectEndpoint);
				foreach ($arrObjects as $object) {
				  print $object["database_name"].":".$object["database_username"]. self::$newLine;
				  self::writeCachedAPICalls($objectEndpoint,$object["database_name"]);
				}
			break;
		}

	}


	private static function initializeCachedAPICalls($objectEndpoint)
	{
		//Filename: 
		//print self::$genFile.'_'.$objectEndpoint.'.txt';
		$h = fopen(self::$genFile.'_'.$objectEndpoint.'.txt', 'w');
		fwrite($h, "");
	}

	private static function writeCachedAPICalls($objectEndpoint,$txtData)
	{
		$h = fopen(self::$genFile.'_'.$objectEndpoint.'.txt', 'a+');
		fwrite($h, $txtData.PHP_EOL);
		//fwrite($h, var_export($arrData, true)); //in case you want to write array directly
	}
	
	private static function CallAPI($objectEndpoint, $data = false)
	{
		$curl = curl_init();
		$url  = self::$apiUrl.$objectEndpoint;
		$method = self::$apiMethod;

		switch ($method)
		{
			case "POST":
				curl_setopt($curl, CURLOPT_POST, 1);

				if ($data)
					curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
				break;
			case "PUT":
				curl_setopt($curl, CURLOPT_PUT, 1);
				break;
			default:
				if ($data)
					$url = sprintf("%s?%s", $url, http_build_query($data));
		}

		curl_setopt($curl, CURLOPT_URL, $url);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, '0'); // 1 on Live-Systems
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, '0'); // 1 on Live-Systems
		
		curl_setopt($curl, CURLOPT_URL, $url);
		curl_setopt($curl, CURLOPT_HTTPHEADER, array(
			'X-API-Key: '.self::$apiKey,
			'accept: application/json',
			'Content-Type: application/json',
		));

		$result = curl_exec($curl);

		curl_close($curl);

		return $result;
	}
}

?>

Nicht vergessen die IP vom Server freizugeben in der API Konfiguration im KeyHelp Admin.
Und Aufruf einfach außerhalb vom Webverzeichnis mit "php scriptName.php"

Weiteres Verarbeiten der generierten Files dann z.B. direkt in Bash um 'langsame' API-Aufrufe zu sparen:

Code: Select all

#!/bin/bash

cat cachedApiResults_clients.txt | while read line || [[ -n $line ]];
do
   # do something with $line here
done

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Mon 4. Oct 2021, 23:36
by superjogi
Tobi wrote: Mon 4. Oct 2021, 13:03 Der Anfang ist bereits gemacht 😉

viewtopic.php?t=8715
Danke. Das Skript mir geholfen die Recherche zu starten.
Ich benötigte aber nur ganz übersichtliche Generierung von Listen und keine weitere Interaktion mit der API.

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Mon 4. Oct 2021, 23:42
by ShortSnow
Ich würde in Deinem Beitrag im Script den Key noch anonymisieren :roll:

Gruß Arne

Re: Bastelsnippets für Listen von Usern, Datenbanken, Domains, Emails

Posted: Mon 4. Oct 2021, 23:48
by superjogi
ShortSnow wrote: Mon 4. Oct 2021, 23:42 Ich würde in Deinem Beitrag im Script den Key noch anonymisieren :roll:

Gruß Arne
Danke, aber er ist schon anonymisiert. So sieht man gleich wie lang der Key ist und wo er hingehört.