First public release. - docs: document the audit log, user offboarding, CSV export and the "require a reason for destructive actions" setting across README, docs/ and CLAUDE/AGENTS.md; note retention for panel_audit - docs: fill the publishing placeholders (repo URL, security contact, issue-template links) and add a semantic-versioning policy - move agent/contributor context into CLAUDE/ (AGENTS.md + a README); root CLAUDE.md is now a thin @-import pointer - add a favicon (shield-lock, matching the login screen) to the login page and the app layout - CHANGELOG: promote [Unreleased] to [1.0.0]; keep the earlier internal build as [0.1.0] Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UfuvfwexztdS7LDpGuKsuK
148 lines
5.5 KiB
PHP
148 lines
5.5 KiB
PHP
<?php
|
|
|
|
return [
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Default LDAP Connection Name
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
'default' => env('LDAP_CONNECTION', 'default'),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Logowanie administratora do panelu
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Do panelu logujemy się kontem Active Directory (LdapRecord "plain bind",
|
|
| bez lokalnej tabeli users). Dostęp mają wyłącznie członkowie grupy
|
|
| wskazanej w AD_LOGIN_GROUP - pełny DN grupy (zalecane) albo sama nazwa
|
|
| (CN). Uwzględniane jest członkostwo zagnieżdżone (grupa w grupie) oraz
|
|
| grupa podstawowa. Pusta wartość => nikt nie może się zalogować.
|
|
|
|
|
*/
|
|
|
|
'auth' => [
|
|
'login_group' => env('AD_LOGIN_GROUP'),
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| LDAP Connections
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Konto z LDAP_USERNAME / LDAP_PASSWORD to konto serwisowe aplikacji -
|
|
| używane wyłącznie do odpytywania i modyfikowania obiektów w AD. Panel
|
|
| NIE prowadzi lokalnej tabeli kont administratorów - logują się oni
|
|
| własnym kontem domenowym (guard 'ldap', patrz sekcja 'auth' powyżej).
|
|
|
|
|
| Szyfrowanie połączenia:
|
|
| - LDAP_SSL=true -> LDAPS na porcie 636 (zalecane produkcyjnie),
|
|
| - LDAP_TLS=true -> STARTTLS na porcie 389,
|
|
| - oba false -> połączenie nieszyfrowane (tylko lab; reset hasła
|
|
| i inne zapisy AD wtedy NIE zadziałają).
|
|
|
|
|
*/
|
|
'connections' => [
|
|
|
|
'default' => [
|
|
'hosts' => explode(',', env('LDAP_HOSTS', env('LDAP_HOST', '127.0.0.1'))),
|
|
'username' => env('LDAP_USERNAME'),
|
|
'password' => env('LDAP_PASSWORD'),
|
|
'port' => (int) env('LDAP_PORT', 636),
|
|
'base_dn' => env('LDAP_BASE_DN'),
|
|
'timeout' => (int) env('LDAP_TIMEOUT', 5),
|
|
// LdapRecord v4: `use_tls` = LDAPS (ldaps://, zwykle port 636),
|
|
// `use_starttls` = STARTTLS na zwykłym porcie 389. Włącz dokładnie jedno.
|
|
'use_tls' => filter_var(env('LDAP_SSL', true), FILTER_VALIDATE_BOOL),
|
|
'use_starttls' => filter_var(env('LDAP_TLS', false), FILTER_VALIDATE_BOOL),
|
|
'version' => 3,
|
|
'follow_referrals' => false,
|
|
|
|
'options' => [
|
|
// Dla LDAPS z certyfikatem DC niezaufanym przez serwer (self-signed
|
|
// / wewnętrzne CA) można wyłączyć weryfikację: LDAP_TLS_VERIFY=false.
|
|
LDAP_OPT_X_TLS_REQUIRE_CERT => filter_var(env('LDAP_TLS_VERIFY', false), FILTER_VALIDATE_BOOL)
|
|
? 2 // LDAP_OPT_X_TLS_DEMAND
|
|
: 0, // LDAP_OPT_X_TLS_NEVER
|
|
],
|
|
],
|
|
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Logging
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
'logging' => env('LDAP_LOGGING', true),
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Cache
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
'cache' => [
|
|
'enabled' => env('LDAP_CACHE', false),
|
|
'driver' => env('LDAP_CACHE_DRIVER', 'file'),
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Domyślne kontenery (OU) używane przy tworzeniu nowych obiektów
|
|
|--------------------------------------------------------------------------
|
|
*/
|
|
|
|
'defaults' => [
|
|
'user_ou' => env('LDAP_DEFAULT_USER_OU'),
|
|
'computer_ou' => env('LDAP_DEFAULT_COMPUTER_OU'),
|
|
'groups_ou' => env('LDAP_DEFAULT_GROUPS_OU'),
|
|
'domain_label' => env('AD_DOMAIN_LABEL', env('LDAP_BASE_DN')),
|
|
],
|
|
|
|
/*
|
|
|--------------------------------------------------------------------------
|
|
| Mapowanie atrybutów AD -> profil w sesji
|
|
|--------------------------------------------------------------------------
|
|
|
|
|
| Po zalogowaniu profil administratora budowany jest na podstawie tego
|
|
| mapowania (App\Ldap\User::toPanelProfile()) i trzymany w sesji pod
|
|
| kluczem 'ad_admin'. Zestaw atrybutów widocznych w module "Użytkownicy"
|
|
| konfiguruje się osobno w panelu (/settings -> zakładka "Atrybuty").
|
|
|
|
|
*/
|
|
|
|
'attributes' => [
|
|
'user' => [
|
|
'login' => 'samaccountname',
|
|
'first_name' => 'givenname',
|
|
'last_name' => 'sn',
|
|
'display_name' => 'displayname',
|
|
'mail' => 'mail',
|
|
'distinguished_name' => 'distinguishedname',
|
|
'title' => 'title',
|
|
'department' => 'department',
|
|
'company' => 'company',
|
|
'telephone' => 'telephonenumber',
|
|
'mobile' => 'mobile',
|
|
'country' => 'c',
|
|
'state' => 'st',
|
|
'city' => 'l',
|
|
'postal_code' => 'postalcode',
|
|
'street_address' => 'streetaddress',
|
|
'room_number' => 'roomnumber',
|
|
'phisical_delivery_office_name' => 'physicaldeliveryofficename',
|
|
'employee_id' => 'employeeid',
|
|
'employee_number' => 'employeenumber',
|
|
'memberof' => 'memberof',
|
|
],
|
|
'group' => [
|
|
'name' => 'cn',
|
|
],
|
|
],
|
|
|
|
];
|