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

Für Modifikationen in und um KeyHelp.
Post Reply
User avatar
superjogi
Posts: 137
Joined: Sat 11. Jan 2020, 23:24

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

Post 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
User avatar
Alexander
Keyweb AG
Posts: 3810
Joined: Wed 20. Jan 2016, 02:23

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

Post 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.
Mit freundlichen Grüßen / Best regards
Alexander Mahr

**************************************************************
Keyweb AG - Die Hosting Marke
Neuwerkstr. 45/46, 99084 Erfurt / Germany
http://www.keyweb.de - http://www.keyhelp.de
**************************************************************
User avatar
space2place
Posts: 486
Joined: Tue 24. Mar 2020, 11:02
Contact:

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

Post 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
User avatar
superjogi
Posts: 137
Joined: Sat 11. Jan 2020, 23:24

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

Post 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..
Last edited by superjogi on Sun 3. Oct 2021, 00:03, edited 1 time in total.
User avatar
superjogi
Posts: 137
Joined: Sat 11. Jan 2020, 23:24

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

Post 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. : )
Last edited by superjogi on Sun 3. Oct 2021, 00:03, edited 1 time in total.
User avatar
superjogi
Posts: 137
Joined: Sat 11. Jan 2020, 23:24

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

Post 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 {} \;
User avatar
superjogi
Posts: 137
Joined: Sat 11. Jan 2020, 23:24

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

Post 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.
User avatar
OlliTheDarkness
Posts: 1854
Joined: Tue 14. Aug 2018, 16:41
Location: Essen (NRW)

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

Post 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.
Mit freundlichen Grüßen
OlliTheDarkness

**************************************************************
Helden leben lange, Legenden sterben nie

:!: World Hack Organization :!:
**************************************************************
User avatar
superjogi
Posts: 137
Joined: Sat 11. Jan 2020, 23:24

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

Post 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/
User avatar
Tobi
Community Moderator
Posts: 2812
Joined: Thu 5. Jan 2017, 13:24

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

Post by Tobi »

Der Anfang ist bereits gemacht 😉

viewtopic.php?t=8715
Gruß,
Tobi


-----------------------------
wewoco.de
Das Forum für Reseller, Digital-Agenturen, Bildschirmarbeiter und Mäuseschubser
User avatar
superjogi
Posts: 137
Joined: Sat 11. Jan 2020, 23:24

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

Post 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
Attachments
erzeugte Dateien
erzeugte Dateien
Last edited by superjogi on Tue 5. Oct 2021, 00:17, edited 11 times in total.
User avatar
superjogi
Posts: 137
Joined: Sat 11. Jan 2020, 23:24

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

Post 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.
User avatar
ShortSnow
Posts: 251
Joined: Thu 15. Nov 2018, 00:45

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

Post by ShortSnow »

Ich würde in Deinem Beitrag im Script den Key noch anonymisieren :roll:

Gruß Arne
User avatar
superjogi
Posts: 137
Joined: Sat 11. Jan 2020, 23:24

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

Post 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.
Post Reply