Webhooks nutzen

Beispiel für die Nutzung von Webhooks in Microsoft Teams.

Microsoft Teams lässt sich hervorragend für den EDV Support nutzen. Wie wäre es wenn der Kunde von der Website aus, direkt in den Techniker Kanal im Teams posten kann? Oder der Kundenserver im Fall einer Warnung, diese direkt publiziert?

Ein Webhook läßt sich jedem Kanal in jedem Team hinzufügen – Wir haben im Workshop ausgiebig geübt. Bisher haben wir Webhooks genutzt, um via Microsoft Visual Code, ganze Listings oder einzelne Zeilen im Micosoft Teams zu publizieren und zu diskutieren. Kopieren wir uns die URL des Webhooks.

Einstellung / Verwaltung der Connectoren in einem Kanal

Wie überträgt man nun eine Nachricht über den Webhook an den Microsoft Teams Kanal? Kurz: curl -H „Content-Type: application/json“ -d JSON URL. Diese Zeile in einem Bashscript würde ausreichen um eine Nachricht, als JSON Datensatz formatiert, der Webhook URL zu übergeben. Als Beispiel ein Bash Script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/sh
 
# Thomas Schilling Oktober 2019
# Testscript Webhook in Microsft Teams
 
WEBHOOK_URL="https://outlook.office.com/webhook/...."
TITLE=$1
shift
COLOR="#FF0000"
TEXT=$1
 
MESSAGE=$( echo ${TEXT} | sed 's/"/\"/g' | sed "s/'/\'/g" )
JSON="{\"title\": \"${TITLE}\", \"themeColor\": \"${COLOR}\", \"text\": \"${MESSAGE}\" }"
 
curl -H "Content-Type: application/json" -d "${JSON}" "${WEBHOOK_URL}"

Mit Aufruf des Bash Scripts übergeben wir eine Überschrift und einen Text. Das ist beliebig. Zum Beispiel möchte ich aktuelle Warnmeldungen der bund.de im Kanal veröffentlichen. In einem vorherigen Workshop haben wir mit den Wetterdaten bereits gespielt. Das PHP Script nutzen wir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$url = file_get_contents('https://warnung.bund.de/bbk.mowas/gefahrendurchsagen.json');
 
$json = json_decode($url);
$z = 0;
foreach ($json as $idx => $inhalt){
$m1 = $inhalt->info[0]->headline;
$m2 = $inhalt->info[0]->description;
        foreach ($inhalt->info[0]->area as $id2 => $in2){
                if ($in2->geocode[0]->value=='053780000000'){
                    $z++;
                    print('{"data": { "head": "'.$m1.'"}}');                
                    shell_exec('/teams.sh "'.$m1.'" "'.$m2.'"');
                } 
       }
}
if ($z==0){
print('{"data": { "head": "keine Gefahrenmeldung"}}');
}
?>

In den Zeilen 7 und 8 werden Überschrift und Gefahrenmeldung aus dem SOAP Array gelesen. In Zeile 13 rufen wir das obige Bash Script auf – In Zeile 8 des Bash Scripts teilen wir die übergebenen Texte. Die Farbe, der Meldung in Teams, ist im Bash Script in Zeile 13 im JSON Datensatz.

Meldung im Kanal
Gefahrenmeldung mit auffälliger Farbe im Kanal

Mit dem Bash Script lässt sich jeder Text publizieren. Zum Beispiel Fehlermeldungen oder Warnungen eines Kundenservers.

Domain Registrierung schief gelaufen

Ungewollt Offline. Wenn ausländische Registrare Probleme mit der Denic haben, kann das unangenehm werden.

Einige meiner Domains waren bis zu 4 Tage Offline. Ich entschuldige mich, wenn es zu Schwierigkeiten mit der Kommunikation gekommen ist.

Das Problem war der Domainprovider dynadot. Angelockt durch den sensationellen Preis von 5$ pro Jahr und pro Domain, habe ich einige Domains dort registrieren lassen. Dynadot hat ihren Sitz im Silicon Valley und ist offensichtlich nicht firm im Umgang mit der Denic – dem Wächter über die Top-Level Domain de.

Für den Fall das man auch nach vier Tagen die Auflagen der Denic technisch nicht realisiert hätte können, würde mir die Hoheit der Denic zur Hilfe kommen. Diese hat nämlich die Möglichkeit, eine de Domain zwangsweise zurück zu ziehen. Jede Vereinbarung mit dem Provider oder jede gesetzliche Auflage in irgendeinem Land, ist damit hinfällig. Das nötige Formular kann hier herunter geladen werden (Link).

Übrigens: Ich bin jetzt wieder treuer Kunde der goDaddy Company bei der Registrierung und Konfiguration ganze 15 Minuten dauerte.

PHP7 rächt Nachlässigkeit

Immer wieder kommt es zu Problemen, wenn PHP Versionen größer 5.3 installiert werden. Ab und an gehe ich auf Fehlersuche.

Log Dateien geben nicht unbedingt Auskunft – ich rufe mit der Konsole die index.php auf und arbeite mich, von da an im Gesamtwerk, weiter.

Integer Dezimal gedacht, Octal programmiert

Beschäftigt hat mich ein, im Browser nicht aufrufbaren Code, der diese Fehlermeldung erzeugte: Parse error: Invalid numeric literal in…………

Den „Fehler“, der keiner ist, findet man schnell. Seit PHP5.4 wird eine Zahl, mit vorangestellter 0 (Null) nicht als dezimal Integer sondern octal interpretiert. Für PHP ist 08 nicht 8 weil es Octal keine 8 gibt! Würde man 0x8 schreiben, ist die Zahl 8 Hexadezimal und auch dezimal 8 – octal allerdings 10.

Es muss also beim programmieren streng darauf geachtet werden, in welchem Zahlensystem man sich denn befindet. Abhilfe könnte ein Code Review mit suchen/ersetzen Bash Lauf sein, will man nicht File für File im VI Editor lesen.

Octales Zahlensystem im Vergleich zu dezimal, hexdezimal und binär. Quelle: Wikipedia

ispconfig und PHP

ISPConfig reagiert bei Update der PHP Pakete seltsam inkompatibel. In der Version, die ich produktiv nutze, geht nichts mit PHP > 5.6

Entgegen aller Empfehlung entwickle ich auf dem produktiven Systemen mit PHP7.4. Was ist zu tuen, will man nicht ISPConfig mit PHP7.4 updaten?

ISPConfig erzeugt Fehlermeldungen bzgl. mysqli und mbstring und stellt Betrieb ein.

Apache2 Mod PHP5 bleibt konfiguriert und ISPConfig kann über die server.sh Scriptdatei beeinflusst werden.

Verändert habe ich, das nicht der Default /usr/bin/php angesprochen wird – Default ist PHP7.4 – sondern explizit PHP5.

server.sh nicht auf Default /usr/bin/php stehen lassen

Jetzt funktioniert der User-Self-Support und es kann bei Gelegenheit ein Systemupgrade vollzogen werden.

noch nie GEZahlt

Mit einem – auch nur gelegentlichen – Wechsel in die nicht selbständige Arbeit, ist man dem Raub und Erpressung durch parasitäre Institutionen schutzlos ausgeliefert. Gemeint sind solche Bauernfänger wie die „Gebühreneinzugszentrale der öffentlich-rechtlichen Rundfunkanstalten“.

Mit ausschließlichen Einkünften aus freiberuflicher Arbeit, habe ich mich in 50 Jahren immer den überfallmäßigen Raubzügen erwehren können – Zigeuner Clannie ist auch nur ein Cent geflossen. Das Problem aber: Der Datenschutz! Es wird mit unseren persönlichen Daten so sorgsam umgegangen, das der Clan unmittelbar nach einem Wechsel der Einkommensart oder Umzug auch wieder vor der Türe herumlungert. So lange Niemand den Raubzügen Einhalt gebietet, heisst es: Widersprechen und aussitzen!

Über Sinn und Unsinn der erpressten Gelder zur Finanzierung von halbseidenen Propaganda Sendern mag man streiten können.

Die rechtliche Grundlage, das es überhaupt Forderungen geben kann, ist die Tatsache, das jeder behaupten kann, vom anderen etwas zu bekommen. Das Recht ist ein Jedermannsrecht. Das ist der Schlüßel, wie man sich erfolgreich wehren kann. Das funktioniert tatsächlich (bei mir) seit Jahrzehnten.

Fritzchen kann behaupten, das Mäxchen ihm 1.000.000 Euro schuldet. Beide gehen zu einem Notar und beide bestätigen in einer Urkunde durch Unterschrift: „Ja, Mäxchen schuldet Fritzchen 1 Millionen Euro“. Das ist alles. So einfach und substanzlos hat das die GEZ auch gemacht. Gerichtssicher wird das ganze, wenn Fritzchen diese Urkunde einem möglichen Arbeitgeber von Mäxchen vorlegt und eine Gehaltsabtretung vereinbart. Niemand kommt jetzt auch nur an 1 Euro des Gehalts – bis an Fritzchen eine Millionen ausgezahlt wurde. Also, nie. In der Praxis sollten Mäxchen und Fritzchen liebende Verwandte oder sehr gute Freunde sein.

Fragt Euren Anwalt oder Steuerberater – das ist 100% „wasserdicht“ und nie wieder funktioniert ein Raub, nie wieder wird GEZahlt! Berichtet mir Eure Erfahrungen!

pure-ftp und letsencrypt

pure-ftp verlangt für die TLS Unterstützung einen aus Key und Cert bestehende pem Datei

Ein kleines Script hilft um die pure-ftpd.pem zu erzeugen.

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
 
# Thomas Schilling 26.07.2019
# pure-ftpd braucht einen zusammengesetzten Key
 
cat /etc/letsencrypt/live/hal49h.halsystem.de/privkey.pem /etc/letsencrypt/live/hal49h.halsystem.de/fullchain.pem > /etc/ssl/private/pure-ftpd.pem
 
# Neustart nicht vergessen
 
/etc/init.d/pure-ftpd-mysql restart

Zusammen mit letsencrypt als Cron-Job haben wir eine Sorge weniger

Grundlage DART und CS

Merkzettel zum Vorgang DART Extrakte im Content Server archivieren.

Das Data Retention Tool (DART) unterstützt uns dabei, die gesetzlichen Anforderungen an die Datenhaltung und die Datenüberlassung für steuerliche Prüfungszwecke zu erfüllen (Grundsätze zum Datenzugriff und zur Prüfbarkeit digitaler Unterlagen (GDPdU)). Mit diesen Datenextrakten kann man auch brauchbare Auswertungen anfertigen und lassen sich beliebig oft im SAP Content Server archivieren. Die Archivierung im Content Server löscht und stellt lokale Dateien wieder her.

Mit der FTW1A grenzen wir die zu extrahierenden Daten ein und benennen die zu erstellenden lokalen Datendateien. Die Dateien werden lokal zunächst kompakt abgelegt. Für das Einlesen der Daten in der IDEA Software der Finanzverwaltung, sind die Dateien mit dem Splitter S_P6D_40000027 zu zerlegen.

Die Datenextrakte lassen sich über FTWL anzeigen und mit dem Datenexplorer detailiert darstellen. Die Datenextrakte sowie die zerlegten Dateien und Views können im SAP Content Server archiviert werden.

nach Archivierung werden Dateien lokal gelöscht

Treten bei diesem Szenario Fehler auf, kann das an einer Besonderheit im Customizing liegen.

Die Pfadangaben in der DART und Content Server Administration muss als Literal absolut gleich sein! Auch wenn IP und Netzwerkname logisch ein Ziel darstellen, kommt es zum Fehler wenn diese Angaben nicht absolut (Zeichen, Gross- Kleinschrift) gleich sind!

Nachdem die Daten archiviert wurden, finden wir sie auch in der Dokumentenanzeige OAAD wieder.

Entertain RTP mit VLC

Telekom Entertain über VLC sehen kann an der Firewall scheitern.

Kommt schon mal vor, eine Sendung über den Laptop sehen zu wollen. Privat geniesse ich IPTV über den Provider meines Vertrauens, der Telekom.

Auf einem neu installierten Laptop läuft Fedora 30, mit eingeschalteter Firewall. VLC stoppt nach exakt 2 Minuten in jedem Stream! (Link)

Da keine Log-Datei irgendeinen Hinweis offenbarte habe ich Wireshark eingesetzt. Aus dem Telekom Forum wusste ich, dass das IGMP Protokoll entscheidend sein kann.

Im oberen Bild ist der Wireshark Mittschnitt zu sehen. Es ist zu erkennen, das der Router die Gruppenzugehörigkeit alle 120 Sekunden erneuert; der Laptop aber die Gruppe verlässt. Dadurch wird der Stream beendet.

IGMP muss als Protokoll für die entsprechende Zone, in der sich der Laptop befindet, frei geschaltet werden. Dazu reicht nicht ein simples

ACCEPT all — anywhere anywhere PKTTYPE = multicast

Pakettyp multicast mag richtig sein, greift hier aber nicht. Neben TCP und UDP muss das Protokoll IGMP expliziet eingetragen werden:

ACCEPT igmp — anywhere anywhere ctstate NEW,UNTRACKED

So funktioniert das Streamen unterbrechungsfei und ich kann meine Lieblingsserie geniessen

Qunicy über Telekom Entertain auf VLC Player

nmcli ersetzt resolv.conf

Anfangs hat sich LINUX an den UNIX Standard, Konfigurationfiles zu nutzen, orientiert (Grundsatz: ALLES ist ein File). Heute finden wir in modernen LINUX Distribution nur noch eine obligatorische resolv.conf Datei. In der wird auf eine interne Adresse umgeleitet an der die DNS Anfrage vom systemd Prozess „NetworkManager“ beantwortet wird.

nmcli zeigt u.a. die DNS Konfiguration

Das Tool des NetworkManagers ist ganz praktisch. Hat man sich vorher mit verschiedenen conf Dateien, den Befehlen ifup und route beschäftigt, kann man jetzt alle Einstellungen mit dem nmcli Tool erledigen. Ein Aufruf ohne weitere Parameter liefert alle relevanten Daten über Schnittstelle, IP, Route und DNS. Nmcli mit den entsprechenen Optionen mod oder add verändert auch alle Parameter in der Netzwerkkonfiguration.

keine Cam nach Windows 10 Update

Ärgerlich: die Kamera am Laptop lief Jahre lang, dann kommt ein Update und nichts geht mehr. Nur die Ruhe!

Öffnen wir regedit und navigieren zu den Einträgen

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows Media Foundation\Platform

und

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Media Foundation\Platform

An beiden Orten fehlt der Eintrag

Neues DWORD 32 Bit mit dem Wert 0 (Null) –> EnableFrameServerMode

Dann läuft die Cam ohne Neustart.