Categories
Development Linux

Dart Sass WSL

Install Sass on WSL

Install Dart Sass instead of Ruby Sass on WSL.

I am following this instructions: https://www.geeksforgeeks.org/how-to-install-dart-sass-in-linux/

At the end it was supereasy with previousliy installed Node Package Manager (npm):

# install sass with npm
npm i -g sass

# check version
sass --version
1.55.0 compiled with dart2js 2.18.1

Sass

Homepage

Latest Sass Release on GitHub

Categories
Development

Node.js WSL

Install Node.js on WSL

Install Node.js on Windows Subsystem for Linux (WSL2)

I am following this instructions: https://learn.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl

Install Node Version Manager (nvm)

sudo apt-get install curl
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash

## Open NEW TERMINAL windows

# test installation
command -v nvm
nvm

# check version
nvm ls

->       system
iojs -> N/A (default)
node -> stable (-> N/A) (default)
unstable -> N/A (default)

# check node version
node --version
v10.19.0

Install Node.js

# install LTS
nvm install --lts

# check version
nvm ls
->     v16.18.0
         system
default -> lts/* (-> v16.18.0)
iojs -> N/A (default)
unstable -> N/A (default)
node -> stable (-> v16.18.0) (default)
stable -> 16.18 (-> v16.18.0) (default)
lts/* -> lts/gallium (-> v16.18.0)
lts/argon -> v4.9.1 (-> N/A)
lts/boron -> v6.17.1 (-> N/A)
lts/carbon -> v8.17.0 (-> N/A)
lts/dubnium -> v10.24.1 (-> N/A)
lts/erbium -> v12.22.12 (-> N/A)
lts/fermium -> v14.20.1 (-> N/A)
lts/gallium -> v16.18.0

# check node version
node --version
v16.18.0

# check npm version
npm --version
8.19.2

Some npm commands

# Show installed Nodes
nvm ls
# Show available versions
nvm ls-remote
# Install latest version
nvm install node
# Install LTS version
nvm install --lts
# Install a specific version (list available -> example 16.18.0)
nvm install 16.18.0
# Use a specific version
nvm use 16.18.0
# Show npm version
npm --version

Categories
Development

OneLogin Logout

Um das Benutzererlebnis der cloudbasierten IAM Lösung OneLogin komplett zu machen, muss irgendwann halt auch mal der Logout folgen.

Das hatte ich bisher nicht so wirklich auf dem Schirm, schließlich heißt es ja "OneLogin" und nicht "OneLogout".

Der Logout stellte uns erstmal vor große Probleme, denn irgendwie wollte kein Ansatz so richtig funktionieren. Irgendwann hatte ich dann aber die richtigen Informationsteile richtig zusammengepuzzelt und dann war es super einfach.

Konfiguration OneLogin

In der Konfiguration im OneLogin unter OIDC -> Configuration -> Post Logout Redirect URI setzen.

Beispielsweise: https://www.meinetolleanwendung.de/logoutseite.html

Konfiguration Applikation

In der Applikation selbst muss eigentlich nichts konfiguriert werden.

Es muss lediglich ein Link aufgerufen werden.

In der Konfiguration des vorgeschalteten Reverse Proxies ist folgender Block für den OIDC-Connector:

 #this is required by mod_auth_openidc
    OIDCCryptoPassphrase 

    OIDCProviderMetadataURL 

    OIDCClientID 
    OIDCClientSecret 
    # OIDCRedirectURI is a vanity URL that must point to a path protected by this module but must NOT point to any content
    OIDCRedirectURI https://www.meinetolleanwendung.de/private/redirect_uri

    ## OIDCScope params
    ## to put params including roles into header
    OIDCScope "openid email profile groups params"

Wir benötigen die OIDCRedirectURI und fügen lediglich ein ?logout für den logout an, gefolgt von = https://www.meinetolleanwendung.de/logoutseite.html für den Redirect zur Post-Logoutseite.

Der ganze Link lautet also:

https://www.meinetolleanwendung.de/private/redirect_uri?logout=https://www.meinetolleanwendung.de/logoutseite.html

Durch Aufruf des Links wird die Session in OneLogin und im Reverse Proxy beendet.

So einfach kann es sein.

Categories
Development

YouTube API Key

Ich möchte den programmatischen Zugriff auf YouTube ausprobieren um ggf. später mit ein paar Ideen zu experimentieren.

Nach der ersten Erkenntnis, dass das gar nicht so gut dokumentiert ist, wie ich es erwartet hätte, folgt die zweite Erkenntnis, dass man dafür einen Api Key braucht.

Hier also die Notizen, wie ich meinen API Key angelegt habe.

Eine schöne Anleitung

Auf Kodi-Tipps gibt es eine schöne, bebilderte Anleitung, der ich hier folge.

Da dort eigentlich alles ausführlich beschrieben zu sein scheint, notiere ich hier nur knapp die Schritte, die ich ausführen werde.

Die Google Developer Console

Den YouTube API Key gibt es über Google und da ich bisher noch nicht viele Erfahrungen mit den Google Produkten als Entwickler gemacht habe, hier die erste wichtige URL zum Einstieg: Die Google Developer Console

Vor ewigen Zeiten hatte ich dort schon mal etwas getestet (Google Auth/Login in KeyCloak eingebunden) und daher ist schon ein Projekt vorhanden, in welchem ich direkt nach Seitenaufruf arbeite:

Natürlich möchte ich nicht in dem Projekt weiterarbeiten, sondern ein neues anlegen:

Meine Schritte in Bildern

User data vs Public data ?
Ich bin mir nicht ganz sicher, was ich benötige. Ich brauche keine persönlichen Informationen, aber ich würde gerne zB die letzten angesehenen Videos meines YouTube Accounts abrufen können.

Starten wir mit Public data.
Die Kodi Anleitung hat User data ausgewählt. Vermutlich werde ich später auch auf User data umsteigen müssen.

Public Data

Für Tests & Entwicklung richte ich keine Restrictions ein.
Sollte mal irgendwann irgendwas irgendwie produktiv gehen, wird eh ein neuer API Key angelegt werden und der wird dann runter restrictiert so weit es geht.

Ganz klasse: Beim Testen des Keys erhalte ich immer "The request is missing a valid API key.". Toll.
Könnte natürlich auch daran liegen, dass ich keine Ahnung habe, was ich da treibe und das falsch mache.
Nützt alles nix, nächster Test mit Personal Data, das wird hoffentlich besser laufen.

Einen Hinweis habe ich noch gefunden, bracht mich aber erstmal nicht weiter:

Personal Data

Entweder finde ich den Einstieg von vorhin nicht mehr, oder durch Anlegen eines ersten API Keys hat sich die Oberfläche verändert und ich muss anders vorgehen.

Create geklickt, paar Sachen ausgefüllt, unsicher geworden, abgebrochen.

Nix besseres gefunden, später wieder auf "OAuth client ID" geklickt, dann sah es wieder anders aus, das ist dann die nächste Seite:

Erstmal mit einer Desktop App starten, später wird dann vielleicht mal eine Web App daraus.

Belohnt wird man dann mit einer OAuth Client-ID und Client-Secret. Sogar im JSON-Format, das ich mir abspeicher.

Ich habe dann noch ein paar Sachen getestet, aber irgendwie war der Wurm drin, nix ging.

Workaround: Projekt löschen, neu anfangen.

Was ein Spaß.

Zweiter Anlauf

Direkt mit User data weiter:

Scopes -> nix geändert -> "Save and continue"

Tja, leider kann ich aber keine User hinzufügen. Toll.

Nächster Anlauf:

Und noch einen API Key generieren:

Frust

Ich habe die Keys mit Postman und in Java Code ausprobiert, aber nichts hat funktioniert. Sehr frustrierend.

So wird das nichts. Ich brauche ein gutes Tutorial.

Die YouTube API Keys konnte ich anlegen, aber gebracht hat es mir nichts.

Der Tag danach

So ganz wollte ich doch nicht aufgeben und habe am Tag nach meinen YouTubeAPIGedöns Experimenten doch noch einen Versuch gewagt.

Über einen Stackoverflow Post habe ich ein Beispiel für eine API Query gefunden:

https://www.googleapis.com/youtube/v3/search?key={KEY}&channelId={CHANNEL-ID}&part=snippet&maxResults=1&order=date&type=video

Als KEY habe ich meinen gestern generierten API Key genommen, als CHANNEL-ID habe ich aus meiner YouTube Abo Liste einen Link zu einem Kanal, und daraus den letzten Teil, genommen.

In meinem Beispiel https://www.youtube.com/channel/UC0RBJwg8ZfRM8TLGOKTpArA -> UC0RBJwg8ZfRM8TLGOKTpArA

Diese Informationen habe ich in Postman eingetragen und konnte endlich eine erfolgreiche Anfrage absenden:

In der Authorization Section hatte ich zuerst den Type auf No Auth zurückgestellt. Das scheint aber nicht erforderlich zu sein.

YAY!

Glück

Bei der Auswahl des Kanals hatte ich Glück!

Denn der Kanal verwendet eine Kanal-URL.
Beispiel: youtube.com/channel/UCUZHFZ9jIKrLroW8LcyJEQQ

Viele andere Kanäle in meiner Abo Liste verwenden noch eine alte benutzerdefinierte URL.
Beispiel: youtube.com/c/YouTubeCreators

Mit einer alten benutzerdefinierten URL funktioniert der Aufruf nämlich nicht, sondern nur mit der Kanal-URL.

Details zu den YouTube Kanal URLs: Link

Kanal URL

Wie findet man in so einem Fall die Kanal URL heraus?

Einen API Call konnte ich nicht finden. Und auch sonst keine elegante, programmatische Lösung.

Zum Glück existiert aber eine Website, die die Kanal URL für einen herausfinden kann. Wie auch immer die das macht.

YOUTUBE CHANNEL ID