# https://docs.wildfly.org/19/WildFly_Elytron_Security.html

# Polecenia do wykonania z konsoli JBossa, czyli jboss-cli

# Instalacja sterownika JDBC na serwerze.
# Zamiast tego można fizycznie wgrać plik do standalone/deployments, albo zrobić to przez webowy panel administratora.

deploy /path/to/postgresql-42.2.8.jar

# Zdefiniowanie data-source, czyli połączenia z bazą, którym zarządza serwer.
# Na zajęciach zrobiliśmy to przez webowy panel administratora.

data-source add --name=AlxDS --jndi-name=java:/AlxDS --driver-name=postgresql-42.2.8.jar  --connection-url=jdbc:postgresql://localhost:5432/hr --user-name=hr --password=abc123

# Uwaga dot. biezacej edycji szkolenia:
# My juz zdefiniowalismy DataSource o nazwie java:/HR_DS, wiec zaczynamy w tym punkcie i w ponizszym poleceniue
# zamiast AlxDS wpiszemy HR_DS

# Definicja jdbc-realm, czyli zbioru użytkowników, który zdefiniowany jest w bazie danych.
# Należy podać zapytanie, które dla parametru "nazwa użytkownika" zwraca jego hasło
# i - zazwyczaj też jest to potrzebne - grupy/role tego użytkownika.

/subsystem=elytron/jdbc-realm=AlxRealm:add(principal-query=[{sql="SELECT role, password FROM users WHERE name = ?",data-source=AlxDS,clear-password-mapper={password-index=2},attribute-mapping=[{index=1,to=groups}]}])

# Więcej możliwości - inne mappery haseł, więcej atrybutów, łączenie wielu tabel - w dokumentacji.


# Definicja security-domain, czyli globalnej struktury określającej zasady bezpieczeństwa.

/subsystem=elytron/security-domain=AlxSD:add(realms=[{realm=AlxRealm,role-decoder=groups-to-roles}],default-realm=AlxRealm,permission-mapper=default-permission-mapper)


# Definicja http-authentication-factory, czyli zasad uwierzytenienia dla aplikacji webowych.
# Krok pośredni potrzebny w połączeniu aplikacji webowej z wcześniej zdefiniowanym security-domain.

/subsystem=elytron/http-authentication-factory=AlxHttpAuth:add(http-server-mechanism-factory=global,security-domain=AlxSD,mechanism-configurations=[{mechanism-name=FORM,mechanism-realm-configurations=[{realm-name=AlxRealm}]}])


# Definicja application-security-domain, czyli struktury określającej zasady bezpieczeństwa dla konkretnej aplikacji (tu dla rodzaju aplikacji: aplikacji webowych).

/subsystem=undertow/application-security-domain=AlxApplicationDomain:add(http-authentication-factory=AlxHttpAuth)

