| /alcasar.sh |
|---|
| 968,19 → 968,7 |
| ErrorDocument 404 https://$HOSTNAME.$DOMAIN/ |
| </Directory> |
| <Directory $DIR_ACC/manager/nfsen> |
| SSLRequireSSL |
| AllowOverride None |
| Order deny,allow |
| Deny from all |
| Allow from 127.0.0.1 |
| Allow from $PRIVATE_NETWORK_MASK |
| require valid-user |
| AuthType digest |
| AuthName "ALCASAR Control Center (ACC)" |
| AuthDigestDomain $HOSTNAME.$DOMAIN |
| BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On |
| AuthUserFile $DIR_DEST_ETC/digest/key_manager |
| ErrorDocument 404 https://$HOSTNAME.$DOMAIN/ |
| <IfModule mod_rewrite.c> |
| RewriteEngine On |
| RewriteCond %{REQUEST_FILENAME} !-f |
| 1563,6 → 1551,8 |
| [Service] |
| Type=simple |
| ExecStartPre=/bin/mkdir -p /run/nfcapd |
| ExecStartPre=/bin/chown nfcapd:nfcapd /run/nfcapd |
| PIDFile=/run/nfcapd/nfcapd.pid |
| ExecStart=/usr/bin/nfcapd -D -b 127.0.0.1 -p 2055 -u nfcapd -g nfcapd -B 200000 -t 300 -S 1 -z -P /run/nfcapd/nfcapd.pid -I alcasar_netflow -w /var/log/nfsen/profiles-data/live/alcasar_netflow |
| ExecReload=/bin/kill -HUP $MAINPID |
| 1572,8 → 1562,7 |
| EOF |
| [ -d /var/log/nfsen/profiles-data/live/alcasar_netflow ] || mkdir -p /var/log/nfsen/profiles-data/live/alcasar_netflow |
| touch /var/log/nfsen/profiles-data/live/alcasar_netflow/.nfstat |
| [ -d /run/nfcapd ] || mkdir -p /run/nfcapd |
| chown -R nfcapd:nfcapd /var/log/nfsen /run/nfcapd |
| chown -R nfcapd:nfcapd /var/log/nfsen |
| # nfsen-ng |
| /web/acc/manager/nfsen/Readme-alcasar.txt |
|---|
| 0,0 → 1,53 |
| PROCEDURE d'installation de "nfsen-ng" sur ALCASAR: |
| archive du git |
| - Désarchiver et supprimer tout sauf "backend", "frontend", "vendor" et la licence |
| nfcapd |
| - info : les flux netflow collectés par nfcapd sont dans /var/log/nfsen/profiles-data/live/alcasar_netflow |
| - Note : nfsen-ng expects the profiles-data folder structure to be PROFILES_DATA_PATH/PROFILE/SOURCE/YYYY/MM/DD/nfcapd.YYYYMMDDHHII |
| - modifier l'unité systemd de nfcap en conséquence (/etc/systemd/system/nfcapd.)(ExecStart=/usr/bin/nfcapd -D -b 127.0.0.1 -p 2055 -u nfcapd -g nfcapd -B 200000 -t 300 -S 7) --> S1 |
| RPM |
| - installer php-rrd |
| - voir si php-phar est utile. Voir si rrdtool est utile |
| - restart + Verif des modules PHP activés avec php -m et php -i (grep Phar e rrd ) |
| Modules apache (rewrite/deflate/headers/expires ) |
| - Activer le mod_rewrite sur apache (les autres sont déja installés) |
| - cf /etc/httpd/conf/modules.d/00_base.conf |
| - Restart + Vérif "apachectl -M |grep ..." ou "httpd -M|grep ..." |
| nfsen-ng (install) |
| - désarchive de nfsen-ng dans /var/www/html/acc/manager/nfsen + "chown -R apache:apache nfsen" |
| - dans le répertoire nfsen, install de "composer.phar" (cf. https://getcomposer.org/download/) |
| - lancement de composer.phar (php composer.phar install --no-dev) pour téléchargement des bibliothèques tiers. Cela ajoute le répertoire "vendor" à la racine (contient "autoload.php" + rep "composer" avec 7 fichiers. |
| nfsen-ng (backend conf) |
| - renommer backend/settings/settings.php.dist en backend/settings/settings.php |
| - modif de "Profiles_data" = /var/log/nfsen/profiles-data |
| - supprimer "source2" et renommer "source1" en "alcasar_netflow" |
| - ajouter le port 443 |
| nfsen-ng (frontend modif) |
| - retrait du menu Config |
| initialisation et peuplement de la base RDD |
| - dans /backend, php cli.php -f -p -ps import |
| - Si ok, les données rrd sont dans "backend/datasources/data" |
| Réactivation et test de la page de l'ACC |
| - Décommenter la ligne 244 dans "menu.php" |
| - Mofifier la page manager/nfsen.php pour pointer sur nfsen/frontend/index.html |
| - Inclure les regles de rewrite dans le alcasar.conf d'apache sur ce répertoire (cf. .htaccess). Pour tester avec le .htaccess --> modif AllowOnerride All dans le bon "directory" de "alcasar.conf"" |
| - testez le frontend (via l'ACC) : affichage de l'interface |
| - tester l'API du backend (cf. fichier API_ENDPOINTS.md) : exemple avec l'URL "manager/nfsen/backend/index.php?request=config" idem avec le mod_rewrite : "manager/nfsen/api/config" |
| Daemon Backend |
| Le daemon backend peut-etre lancé via la commande cli.php start (verif par "cli.php status" et dans l'interface nfsen-ng). Il lance client.php et crée le fichier "nfsen-ng.pid". |
| Une unité systemd est proposée : https://github.com/mbolli/nfsen-ng/issues/70 |
| TODO |
| Faire pointer jquery.min.js + bootstrap.min.js + bootstrap.min.css sur ceux d'ALCASAR |
| Revoir l'archivage et la génération du rapport |
| Property changes: |
| Added: svn:eol-style |
| +native |
| \ No newline at end of property |
| /web/acc/manager/nfsen/frontend/index.html |
|---|
| 49,11 → 49,7 |
| </svg> |
| </a> |
| </li> |
| <li role="presentation" class="nav-item"> |
| <a class="nav-link" data-view="config" href="#">Config ⚙️ |
| </a> |
| </li> |
| </ul> |
| </ul> |
| </header> |
| <div id="filterContainer" class="container-fluid tab-content"> |
| <form autocomplete="off"> |
| 94,30 → 90,6 |
| </div> |
| </div> |
| </div> |
| <div class="d-none col-xs-6 col-sm-2" data-view="config"> |
| <ul> |
| <li> |
| Config <a href="../api/config">/api/config</a> |
| </li> |
| <li> |
| Theme |
| <a href="javascript:window.localStorage.setItem('theme', 'light')">Light</a> |
| <a href="javascript:window.localStorage.setItem('theme', 'dark')">Dark</a> |
| </li> |
| <script> |
| var theme = window.localStorage.getItem("theme"); |
| var styleId = document.styleSheets.length - 1; |
| var ruleId = 2; |
| switch (theme) |
| { |
| case "light": document.styleSheets[styleId].rules[ruleId].style.filter="invert(0.0)"; break;; |
| case "dark": document.styleSheets[styleId].rules[ruleId].style.filter="invert(0.9)"; break;; |
| } |
| </script> |
| </div> |
| <div id="filterDisplay" class="d-none col-xs-6 col-sm-2" data-view="graphs"> |
| <p class="h6">Display</p> |
| /web/acc/manager/nfsen/frontend/index.old |
|---|
| 0,0 → 1,516 |
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <title>nfsen-ng</title> |
| <script src="js/jquery.min.js"></script> |
| <script src="js/popper.min.js"></script> |
| <script src="js/bootstrap.min.js"></script> |
| <script src="js/ion.rangeSlider.min.js"></script> |
| <script src="js/dygraph.min.js"></script> |
| <script src="js/footable.min.js"></script> |
| <link rel="stylesheet" type="text/css" href="css/dygraph.css" /> |
| <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" /> |
| <link rel="stylesheet" type="text/css" href="css/ion.rangeSlider.css" /> |
| <link rel="stylesheet" type="text/css" href="css/footable.bootstrap.min.css" /> |
| <link rel="stylesheet" type="text/css" href="css/nfsen-ng.css" /> |
| </head> |
| <body class="p-2"> |
| <header> |
| <a class="position-absolute link-secondary" style="text-decoration: none;" href="https://github.com/mbolli/nfsen-ng" target="_blank"> |
| nfsen-ng <span id="version"></span> |
| </a> |
| <ul id="viewList" class="nav nav-tabs justify-content-end" role="tablist"> |
| <li role="presentation" class="nav-item align-self-center"> |
| <a href="#" class="reload px-3"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-house-door-fill" viewBox="0 0 16 16"> |
| <path d="M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5"/> |
| </svg></a> |
| </li> |
| <li role="presentation" class="nav-item"> |
| <a class="nav-link active" data-view="graphs" href="#">Graphs <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-graph-up" viewBox="0 0 16 16"> |
| <path fill-rule="evenodd" d="M0 0h1v15h15v1H0zm14.817 3.113a.5.5 0 0 1 .07.704l-4.5 5.5a.5.5 0 0 1-.74.037L7.06 6.767l-3.656 5.027a.5.5 0 0 1-.808-.588l4-5.5a.5.5 0 0 1 .758-.06l2.609 2.61 4.15-5.073a.5.5 0 0 1 .704-.07"/> |
| </svg> |
| </a> |
| </li> |
| <li role="presentation" class="nav-item"> |
| <a class="nav-link" data-view="flows" href="#">Flows <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-zoom-in" viewBox="0 0 16 16"> |
| <path fill-rule="evenodd" d="M6.5 12a5.5 5.5 0 1 0 0-11 5.5 5.5 0 0 0 0 11M13 6.5a6.5 6.5 0 1 1-13 0 6.5 6.5 0 0 1 13 0"/> |
| <path d="M10.344 11.742q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1 6.5 6.5 0 0 1-1.398 1.4z"/> |
| <path fill-rule="evenodd" d="M6.5 3a.5.5 0 0 1 .5.5V6h2.5a.5.5 0 0 1 0 1H7v2.5a.5.5 0 0 1-1 0V7H3.5a.5.5 0 0 1 0-1H6V3.5a.5.5 0 0 1 .5-.5"/> |
| </svg> |
| </a> |
| </li> |
| <li role="presentation" class="nav-item"> |
| <a class="nav-link" data-view="statistics" href="#">Statistics <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-list-columns" viewBox="0 0 16 16"> |
| <path fill-rule="evenodd" d="M0 .5A.5.5 0 0 1 .5 0h9a.5.5 0 0 1 0 1h-9A.5.5 0 0 1 0 .5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2A.5.5 0 0 1 .5 2h8a.5.5 0 0 1 0 1h-8a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2A.5.5 0 0 1 .5 4h10a.5.5 0 0 1 0 1H.5a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2A.5.5 0 0 1 .5 6h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2A.5.5 0 0 1 .5 8h7a.5.5 0 0 1 0 1h-7a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2a.5.5 0 0 1 .5-.5h9a.5.5 0 0 1 0 1h-9a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5m-13 2a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H.5a.5.5 0 0 1-.5-.5m13 0a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5"/> |
| </svg> |
| </a> |
| </li> |
| <li role="presentation" class="nav-item"> |
| <a class="nav-link" data-view="config" href="#">Config ⚙️ |
| </a> |
| </li> |
| </ul> |
| </header> |
| <div id="filterContainer" class="container-fluid tab-content"> |
| <form autocomplete="off"> |
| <div id="filter" class="filter row align-items-start bg-light border-bottom py-3" style="flex-direction: row"> |
| <div class="date_selection col-12 p-3 mb-4 border-bottom"> |
| <div class="mb-3"> |
| <input type="text" name="date_range" id="date_range"/> |
| </div> |
| <div class="float-end"> |
| <div class="btn-group" id="date_slot" data-bs-toggle="buttons"> |
| <input type="radio" class="btn-check" name="range" data-unit="h" id="dateSlotH" value="3600000"> |
| <label class="btn btn-outline-primary" for="dateSlotH">1 hour</label> |
| <input type="radio" class="btn-check" name="range" data-unit="d" id="dateSlotD" value="86400000"> |
| <label class="btn btn-outline-primary" for="dateSlotD">24 hours</label> |
| <input type="radio" class="btn-check" name="range" data-unit="w" id="dateSlotW" value="604800000"> |
| <label class="btn btn-outline-primary" for="dateSlotW">Week</label> |
| <input type="radio" class="btn-check" name="range" data-unit="m" id="dateSlotM" value="2592000000"> |
| <label class="btn btn-outline-primary" for="dateSlotM">Month</label> |
| <input type="radio" class="btn-check" name="range" data-unit="y" id="dateSlotY" value="31536000000"> |
| <label class="btn btn-outline-primary" for="dateSlotY">Year</label> |
| </div> |
| <div class="btn-group" id="date_slot_nav"> |
| <button type="button" class="btn btn-outline-primary prev" disabled><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-left" viewBox="0 0 16 16"> |
| <path fill-rule="evenodd" d="M15 8a.5.5 0 0 0-.5-.5H2.707l3.147-3.146a.5.5 0 1 0-.708-.708l-4 4a.5.5 0 0 0 0 .708l4 4a.5.5 0 0 0 .708-.708L2.707 8.5H14.5A.5.5 0 0 0 15 8"/> |
| </svg></button> |
| <button type="button" class="btn btn-outline-primary next" disabled><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-right" viewBox="0 0 16 16"> |
| <path fill-rule="evenodd" d="M1 8a.5.5 0 0 1 .5-.5h11.793l-3.147-3.146a.5.5 0 0 1 .708-.708l4 4a.5.5 0 0 1 0 .708l-4 4a.5.5 0 0 1-.708-.708L13.293 8.5H1.5A.5.5 0 0 1 1 8"/> |
| </svg></button> |
| </div> |
| <div class="btn-group" id="date_syncing" data-view="graphs"> |
| <button type="button" class="btn btn-outline-primary sync-date" disabled>Copy from graph <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-repeat" viewBox="0 0 16 16"> |
| <path d="M11.534 7h3.932a.25.25 0 0 1 .192.41l-1.966 2.36a.25.25 0 0 1-.384 0l-1.966-2.36a.25.25 0 0 1 .192-.41m-11 2h3.932a.25.25 0 0 0 .192-.41L2.692 6.23a.25.25 0 0 0-.384 0L.342 8.59A.25.25 0 0 0 .534 9"/> |
| <path fill-rule="evenodd" d="M8 3c-1.552 0-2.94.707-3.857 1.818a.5.5 0 1 1-.771-.636A6.002 6.002 0 0 1 13.917 7H12.9A5 5 0 0 0 8 3M3.1 9a5.002 5.002 0 0 0 8.757 2.182.5.5 0 1 1 .771.636A6.002 6.002 0 0 1 2.083 9z"/> |
| </svg></button> |
| </div> |
| </div> |
| </div> |
| <div class="d-none col-xs-6 col-sm-2" data-view="config"> |
| <ul> |
| <li> |
| Config <a href="../api/config">/api/config</a> |
| </li> |
| <li> |
| Theme |
| <a href="javascript:window.localStorage.setItem('theme', 'light')">Light</a> |
| <a href="javascript:window.localStorage.setItem('theme', 'dark')">Dark</a> |
| </li> |
| <script> |
| var theme = window.localStorage.getItem("theme"); |
| var styleId = document.styleSheets.length - 1; |
| var ruleId = 2; |
| switch (theme) |
| { |
| case "light": document.styleSheets[styleId].rules[ruleId].style.filter="invert(0.0)"; break;; |
| case "dark": document.styleSheets[styleId].rules[ruleId].style.filter="invert(0.9)"; break;; |
| } |
| </script> |
| </div> |
| <div id="filterDisplay" class="d-none col-xs-6 col-sm-2" data-view="graphs"> |
| <p class="h6">Display</p> |
| <div class="form-group"> |
| <select id="filterDisplaySelect" class="form-control form-select"> |
| <option value="sources">Sources</option> |
| <option value="protocols">Protocols</option> |
| <option value="ports">Ports</option> |
| </select> |
| </div> |
| </div> |
| <div id="filterPorts" class="d-none col-xs-6 col-sm-2 col-md-1" data-view="graphs" data-display="ports"> |
| <p class="h6">Ports</p> |
| <div class="form-group"> |
| <select id="filterPortsSelect" multiple class="form-control form-select"></select> |
| </div> |
| </div> |
| <div id="filterSources" class="d-none col-xs-6 col-sm-3 col-md-2" data-view="graphs flows statistics" data-display="sources protocols ports"> |
| <p class="h6">Sources</p> |
| <div class="form-group"> |
| <select id="filterSourcesSelect" multiple class="form-control form-select"> |
| <option value="any">Any</option> |
| </select> |
| </div> |
| </div> |
| <div id="filterProtocols" class="d-none col-xs-12 col-sm-6 col-md-4 col-lg-3" data-view="graphs" data-display="sources protocols ports"> |
| <p class="h6">Protocols</p> |
| <div id="filterProtocolButtons" class="btn-group btn-group-md" data-bs-toggle="buttons"> |
| <input type="radio" class="btn-check" name="protocol[]" value="any" id="filterProtocolAny"> |
| <label class="btn btn-outline-primary" for="filterProtocolAny">Any</label> |
| <input type="radio" class="btn-check" name="protocol[]" value="tcp" id="filterProtocolTcp"> |
| <label class="btn btn-outline-primary" for="filterProtocolTcp">TCP</label> |
| <input type="radio" class="btn-check" name="protocol[]" value="udp" id="filterProtocolUdp"> |
| <label class="btn btn-outline-primary" for="filterProtocolUdp">UDP</label> |
| <input type="radio" class="btn-check" name="protocol[]" value="icmp" id="filterProtocolIcmp"> |
| <label class="btn btn-outline-primary" for="filterProtocolIcmp">ICMP</label> |
| <input type="radio" class="btn-check" name="protocol[]" value="other" id="filterProtocolOther"> |
| <label class="btn btn-outline-primary" for="filterProtocolOther">Others</label> |
| </div> |
| </div> |
| <div id="filterTypes" class="d-none col-xs-12 col-sm-6 col-md-3 col-lg-2" data-view="graphs" data-display="sources protocols ports"> |
| <p class="h6">Data Type</p> |
| <div class="btn-group btn-group-md" data-bs-toggle="buttons"> |
| <input type="radio" class="btn-check" name="datatype" value="traffic" id="dataTypeTraffic" checked> |
| <label class="btn btn-outline-primary" for="dataTypeTraffic">Traffic</label> |
| <input type="radio" class="btn-check" name="datatype" value="packets" id="dataTypePackets"> |
| <label class="btn btn-outline-primary" for="dataTypePackets">Packets</label> |
| <input type="radio" class="btn-check" name="datatype" value="flows" id="dataTypeFlows"> |
| <label class="btn btn-outline-primary" for="dataTypeFlows">Flows</label> |
| </div> |
| </div> |
| <div id="trafficUnit" class="d-none col-xs-6 col-sm-3 col-md-2 col-lg-2" data-view="graphs" data-display="sources protocols ports"> |
| <p class="h6">Traffic unit</p> |
| <div class="btn-group btn-group-md" data-bs-toggle="buttons"> |
| <input type="radio" class="btn-check" name="trafficUnit" value="bits" id="trafficUnitBits" checked> |
| <label class="btn btn-outline-primary" for="trafficUnitBits">Bits</label> |
| <input type="radio" class="btn-check" name="trafficUnit" value="bytes" id="trafficUnitBytes"> |
| <label class="btn btn-outline-primary" for="trafficUnitBytes">Bytes</label> |
| </div> |
| </div> |
| <div id="filterFlowsLimit" class="d-none col-xs-6 col-sm-2 col-md-2 col-lg-1" data-view="flows"> |
| <p class="h6">Limit Flows</p> |
| <div class="form-group"> |
| <select id="flowsFilterLimitSelection" class="form-control form-select"> |
| <option value="20">20</option> |
| <option value="50" >50</option> |
| <option value="100" >100</option> |
| <option value="500" >500</option> |
| <option value="1000" >1000</option> |
| <option value="10000" >10000</option> |
| </select> |
| </div> |
| </div> |
| <div id="filterStatisticsTop" class="d-none col-xs-6 col-sm-2 col-md-2 col-lg-1" data-view="statistics"> |
| <p class="h6">Top records</p> |
| <div class="form-group"> |
| <select id="statsFilterTopSelection" class="form-control form-select"> |
| <option value="10" selected>10</option> |
| <option value="20">20</option> |
| <option value="50">50</option> |
| <option value="100">100</option> |
| <option value="200">200</option> |
| <option value="500">500</option> |
| </select> |
| </div> |
| </div> |
| <div id="filterNfdump" class="d-none col-xs-12 col-sm-7 col-md-5" data-view="graphs flows statistics"> |
| <p class="h6">NFDUMP filter <span aria-hidden="true" data-bs-toggle="tooltip" data-bs-placement="right" title="The filter syntax is similar to the well known pcap library used by tcpdump. All keywords are case-independent. Example: dst port 80"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-info-circle-fill" viewBox="0 0 16 16"> |
| <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2"/> |
| </svg></span></p> |
| <div class="form-group"> |
| <textarea class="form-control" id="filterNfdumpTextarea" rows="3" autocomplete="on"></textarea> |
| </div> |
| <div class="btn-group"> |
| <div id="filterFilters" class="form-group"> |
| <label class="form-control" >Filters</label> |
| <select id="filterFiltersSelect" class="form-control form-select" title="Filters" style=""> |
| <option value="" disabled selected>Select your filter</option> |
| </select> |
| </div> |
| <button id="filterFiltersButtonRemove" type="button" class="btn btn-outline-primary" >Delete filter (server)</button> |
| <button id="filterFiltersButtonSave" type="button" class="btn btn-outline-primary" >Save filter (server)</button> |
| </div> |
| </div> |
| <div id="filterFlowAggregation" class="col"> |
| <div class="d-none" data-view="flows"> |
| <p class="h6">Global Aggregation</p> |
| <div class="btn-group btn-group-md" data-bs-toggle="buttons" id="filterFlowAggregationGlobal"> |
| <input type="checkbox" class="btn-check" name="bidirectional" id="filterFlowAggregationGlobalBi"> |
| <label class="btn btn-outline-primary" for="filterFlowAggregationGlobalBi">Bi-directional</label> |
| <input data-disable-on="bi-directional" type="checkbox" class="btn-check" name="proto" id="filterFlowAggregationGlobalProto"> |
| <label class="btn btn-outline-primary" for="filterFlowAggregationGlobalProto">Protocol</label> |
| </div> |
| </div> |
| <div class="d-none" data-view="flows"> |
| <p class="h6">Port Aggregation</p> |
| <div class="btn-group btn-group-md" data-bs-toggle="buttons" id="filterFlowAggregationPort"> |
| <input data-disable-on="bi-directional" type="checkbox" class="btn-check" name="srcport" id="filterFlowAggregationPortSrc"> |
| <label class="btn btn-outline-primary" for="filterFlowAggregationPortSrc">Source port</label> |
| <input data-disable-on="bi-directional" type="checkbox" class="btn-check" name="dstport" id="filterFlowAggregationPortDst"> |
| <label class="btn btn-outline-primary" for="filterFlowAggregationPortDst">Destination port</label> |
| </div> |
| </div> |
| <div class="d-none" data-view="flows"> |
| <p class="h6">IP Aggregation</p> |
| <div class="row"> |
| <div class="col-xs-6 col-sm-6"> |
| <label>Source</label><br> |
| <div class="form-group"> |
| <select data-disable-on="bi-directional" data-kind="source" name="srcip" id="filterFlowAggregationSourceAddressSelect" class="form-control form-select float-start" style="width: 70%"> |
| <option value="none">No aggregation</option> |
| <option value="srcip">IP</option> |
| <option value="srcip4">IPv4 subnets</option> |
| <option value="srcip6">IPv6 subnets</option> |
| </select> |
| <div id="sourceCIDRPrefixDiv" class="d-none float-start" style="width:30%"> |
| <input data-disable-on="bi-directional" id="sourceCIDRPrefix" placeholder="24" name="srcipprefix" type="text" class="form-control"> |
| </div> |
| </div> |
| </div> |
| <div class="col-xs-6 col-sm-6"> |
| <label>Destination</label> |
| <div class="form-group"> |
| <select data-disable-on="bi-directional" data-kind="destination" name="dstip" id="filterFlowAggregationDestinationAddressSelect" class="form-control form-select float-start" style="width: 70%"> |
| <option value="none">No aggregation</option> |
| <option value="dstip">IP</option> |
| <option value="dstip4">IPv4 subnets</option> |
| <option value="dstip6">IPv6 subnets</option> |
| </select> |
| <div id="destinationCIDRPrefixDiv" class="d-none float-start" style="width:30%"> |
| <input data-disable-on="bi-directional" id="destinationCIDRPrefix" placeholder="24" name="dstipprefix" type="text" class="form-control"> |
| </div> |
| </div> |
| </div> |
| </div> |
| </div><!-- flowsFilterAggregationDiv --> |
| </div> |
| <div id="statsLimitDiv" class="d-none col-xs-6 col-sm-6 col-md-2" data-view="statistics"> |
| <p class="h6">Data Limit</p> |
| <div class="form-group"> |
| <select id="statsLimitSelect" class="form-control form-select" data-view="statistics" disabled> |
| <option value="none">No limit</option> |
| <option value="">Packets</option> |
| <option value="">Bytes</option> |
| </select> |
| </div> |
| </div> |
| <div id="filterStatsProperties" class="d-none col-xs-6 col-sm-6 col-md-4 col-lg-2" data-view="statistics"> |
| <p class="h6">Statistic properties</p> |
| <div class="form-group"> |
| <label for="statsFilterForSelection">Statistic for</label> |
| <select id="statsFilterForSelection" class="form-control form-select"> |
| <option value="record" selected>Flow Records</option> |
| <option value="ip">Any IP address</option> |
| <option value="srcip">Src IP address</option> |
| <option value="dstip">Dst IP address</option> |
| <option value="port">Any port</option> |
| <option value="srcport">Src port</option> |
| <option value="dstport">Dst port</option> |
| <option value="if">Any interface</option> |
| <option value="inif">IN interface</option> |
| <option value="outif">OUT interface</option> |
| <option value="as">Any AS</option> |
| <option value="srcas">Src AS</option> |
| <option value="dstas">Dst AS</option> |
| <option value="nhip">Next Hop IP</option> |
| <option value="nhbip">Next Hop BGP IP</option> |
| <option value="router">Router IP</option> |
| <option value="proto">Proto</option> |
| <option value="dir">Direction</option> |
| <option value="srctos">Src TOS</option> |
| <option value="dsttos">Dst TOS</option> |
| <option value="tos">Tos</option> |
| <option value="mask">Any Mask Bits</option> |
| <option value="srcmask">Src Mask Bits</option> |
| <option value="dstmask">Dst Mask Bits</option> |
| <option value="vlan">Any VLAN ID</option> |
| <option value="srcvlan">Src VLAN ID</option> |
| <option value="dstvlan">Dst VLAN ID</option> |
| <option value="srcmac">Src MAC</option> |
| <option value="dstmac">Dst MAC</option> |
| <option value="inmac">IN MAC</option> |
| <option value="outmac">OUT MAC</option> |
| <option value="insrcmac">IN src MAC</option> |
| <option value="outdstmac">OUT dst MAC</option> |
| <option value="indstmac">IN dst MAC</option> |
| <option value="outsrcmac">OUT src MAC</option> |
| <option value="mpls1">MPLS Label 1</option> |
| <option value="mpls2">MPLS Label 2</option> |
| <option value="mpls3">MPLS Label 3</option> |
| <option value="mpls4">MPLS Label 4</option> |
| <option value="mpls5">MPLS Label 5</option> |
| <option value="mpls6">MPLS Label 6</option> |
| <option value="mpls7">MPLS Label 7</option> |
| <option value="mpls8">MPLS Label 8</option> |
| <option value="mpls9">MPLS Label 9</option> |
| <option value="mpls10">MPLS Label 10</option> |
| </select> |
| </div> |
| <div class="form-group"> |
| <label for="statsFilterOrderBySelection">Order by</label> |
| <select id="statsFilterOrderBySelection" class="form-control form-select"> |
| <option value="flows" selected>Flows</option> |
| <option value="packets">Packets</option> |
| <option value="bytes">Bytes</option> |
| <option value="pps">Packets per second</option> |
| <option value="bps">Bits per second</option> |
| <option value="bpp">Bytes per packet</option> |
| </select> |
| </div> |
| </div><!-- statsFilterPropertiesDiv --> |
| <div id="filterOutput" class="hidden col-xs-12 col-sm-6 col-md-4 col-lg-4" data-view="flows statistics"> |
| <p class="h6">Output</p> |
| <div class="row"> |
| <div class="form-group col-xs-6 col-sm-6"> |
| <label for="filterOutputSelection">Output type</label> |
| <select id="filterOutputSelection" name="filterOutputSelection" class="form-control form-select"> |
| <option value="line">Line</option> |
| <option value="long">Long</option> |
| <option value="extended">Extended</option> |
| <option value="full">Full</option> |
| <option value="custom">Custom</option> |
| </select> |
| </div> |
| <div class="form-group col-xs-6 col-sm-6"> |
| <label>Other options</label> |
| <br> |
| <div class="" id="flowsFilterOther" data-bs-toggle="buttons"> |
| <input type="checkbox" class="btn-check" name="ordertstart" value="true" id="flowsFilterOtherOrderTstart"> |
| <label class="btn btn-outline-primary" data-view="flows" for="flowsFilterOtherOrderTstart">Order by tstart</label> |
| </div> |
| </div> |
| </div> |
| <div id="customListOutputFormat" class="form-group hidden"> |
| <label for="customListOutputFormatValue">Custom output format |
| <span aria-hidden="true" data-bs-toggle="tooltip" data-bs-placement="right" title="Specify output format in nfdump-style. E.g. %ts %tr %pr"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-info-circle-fill" viewBox="0 0 16 16"> |
| <path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2"/> |
| </svg></span></label> |
| <input id="customListOutputFormatValue" type="text" class="form-control"> |
| </div> |
| </div> |
| <div id="filterCommands" class="hidden col-xs-12 col-sm-6 col-md-3" data-view="flows statistics"> |
| <p class="h6">Commands</p> |
| <div class="btn-group btn-group-md" data-bs-toggle="buttons"> |
| <button type="button" class="btn btn-outline-primary submit">Process data</button> |
| <button type="button" class="btn btn-success csv">Get CSV</button> |
| <button type="button" class="btn btn-outline-primary reset">Reset filters</button> |
| </div> |
| </div> |
| </div><!-- statsFilterDiv --> |
| </form> |
| </div><!-- filterDiv --> |
| <div id="error"></div> |
| <div id="contentDiv"> |
| <div id="graphsContentDiv" data-view="graphs" class="content container-fluid"> |
| <div class="col-sm-12 my-4"> |
| <div id="flowDiv" style="width: 100%;"></div> |
| </div> |
| <div id="graphOptions" class="row"> |
| <div class="col-xs-6 col-sm-3"> |
| <p class="h6">Graph Scale</p> |
| <div class="btn-group" role="group" id="graph_linlog"> |
| <input type="radio" class="btn-check" name="scale" autocomplete="off" value="linear" checked id="graph_linlog_linear"> |
| <label for="graph_linlog_linear" class="btn btn-outline-primary">Linear</label> |
| <input id="graph_linlog_log" type="radio" class="btn-check" name="scale" autocomplete="off" value="logarithmic"> |
| <label for="graph_linlog_log" class="btn btn-outline-primary">Logarithmic</label> |
| </div> |
| </div> |
| <div class="col-xs-6 col-sm-3"> |
| <p class="h6">Series display</p> |
| <div class="btn-group" data-bs-toggle="buttons" id="graph_linestacked"> |
| <input type="radio" class="btn-check" name="type" autocomplete="off" value="stacked" checked id="graph_linestacked_stacked"> |
| <label class="btn btn-outline-primary" for="graph_linestacked_stacked">Stacked</label> |
| <input type="radio" class="btn-check" name="type" autocomplete="off" value="line" id="graph_linestacked_line"> |
| <label class="btn btn-outline-primary" for="graph_linestacked_line">Line</label> |
| </div> |
| <div class="btn-group" data-bs-toggle="buttons" id="graph_lineplot"> |
| <input type="radio" class="btn-check" name="lineplot" autocomplete="off" value="step" id="graph_lineplot_step" checked> |
| <label class="btn btn-outline-primary" for="graph_lineplot_step">Step plot</label> |
| <input type="radio" class="btn-check" name="lineplot" autocomplete="off" value="curve" id="graph_lineplot_curve"> |
| <label class="btn btn-outline-primary" for="graph_lineplot_curve">Curve plot</label> |
| </div> |
| </div> |
| <div class="col-xs-6 col-sm-3 accordion"> |
| <p class="h6" data-bs-toggle="collapse" data-bs-target="#series" role="button" aria-expanded="true">Series</p> |
| <div class="collapse show" id="series"></div> |
| </div> |
| <div class="col-xs-6 col-sm-3 accordion"> |
| <p class="h6" data-bs-toggle="collapse" data-bs-target="#legend" role="button" aria-expanded="true">Values</p> |
| <div class="collapse show" id="legend"></div> |
| </div> |
| </div> |
| </div> |
| <div id="flowsContentDiv" data-view="flows" class="content"> |
| <table class="table" data-paging="true" data-paging-limit="10" data-paging-size="50" data-filtering="true" data-sorting="true"></table> |
| </div><!-- flowsContentDiv --> |
| <div id="statisticsContentDiv" data-view="statistics" class="content"> |
| <table class="table" data-paging="true" data-paging-limit="10" data-paging-size="50" data-filtering="true" data-sorting="true"></table> |
| </div><!-- statsContentDiv --> |
| </div><!-- contentDiv --> |
| <div class="modal fade" id="modal" tabindex="-1" aria-labelledby="modalLabel" aria-hidden="true"> |
| <div class="modal-dialog"> |
| <div class="modal-content"> |
| <div class="modal-header"> |
| <h1 class="modal-title fs-5" id="modalLabel">Modal title</h1> |
| <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> |
| </div> |
| <div class="modal-body"></div> |
| <div class="modal-loader d-none text-center"> |
| <div class="spinner-border" role="status"> |
| <span class="visually-hidden">Loading</span> |
| </div> |
| </div> |
| <div class="modal-footer"> |
| <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button> |
| </div> |
| </div> |
| </div> |
| </div> |
| <script src="js/nfsen-ng.js"></script> |
| </body> |
| </html> |
| /web/acc/manager/nfsen/vendor/autoload.php |
|---|
| 0,0 → 1,25 |
| <?php |
| // autoload.php @generated by Composer |
| if (PHP_VERSION_ID < 50600) { |
| if (!headers_sent()) { |
| header('HTTP/1.1 500 Internal Server Error'); |
| } |
| $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; |
| if (!ini_get('display_errors')) { |
| if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { |
| fwrite(STDERR, $err); |
| } elseif (!headers_sent()) { |
| echo $err; |
| } |
| } |
| trigger_error( |
| $err, |
| E_USER_ERROR |
| ); |
| } |
| require_once __DIR__ . '/composer/autoload_real.php'; |
| return ComposerAutoloaderInitf00fa0808b7e3ccf5d95c78c1d4b3318::getLoader(); |
| /web/acc/manager/nfsen/vendor/composer/ClassLoader.php |
|---|
| 0,0 → 1,579 |
| <?php |
| /* |
| * This file is part of Composer. |
| * |
| * (c) Nils Adermann <naderman@naderman.de> |
| * Jordi Boggiano <j.boggiano@seld.be> |
| * |
| * For the full copyright and license information, please view the LICENSE |
| * file that was distributed with this source code. |
| */ |
| namespace Composer\Autoload; |
| /** |
| * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. |
| * |
| * $loader = new \Composer\Autoload\ClassLoader(); |
| * |
| * // register classes with namespaces |
| * $loader->add('Symfony\Component', __DIR__.'/component'); |
| * $loader->add('Symfony', __DIR__.'/framework'); |
| * |
| * // activate the autoloader |
| * $loader->register(); |
| * |
| * // to enable searching the include path (eg. for PEAR packages) |
| * $loader->setUseIncludePath(true); |
| * |
| * In this example, if you try to use a class in the Symfony\Component |
| * namespace or one of its children (Symfony\Component\Console for instance), |
| * the autoloader will first look for the class under the component/ |
| * directory, and it will then fallback to the framework/ directory if not |
| * found before giving up. |
| * |
| * This class is loosely based on the Symfony UniversalClassLoader. |
| * |
| * @author Fabien Potencier <fabien@symfony.com> |
| * @author Jordi Boggiano <j.boggiano@seld.be> |
| * @see https://www.php-fig.org/psr/psr-0/ |
| * @see https://www.php-fig.org/psr/psr-4/ |
| */ |
| class ClassLoader |
| { |
| /** @var \Closure(string):void */ |
| private static $includeFile; |
| /** @var string|null */ |
| private $vendorDir; |
| // PSR-4 |
| /** |
| * @var array<string, array<string, int>> |
| */ |
| private $prefixLengthsPsr4 = array(); |
| /** |
| * @var array<string, list<string>> |
| */ |
| private $prefixDirsPsr4 = array(); |
| /** |
| * @var list<string> |
| */ |
| private $fallbackDirsPsr4 = array(); |
| // PSR-0 |
| /** |
| * List of PSR-0 prefixes |
| * |
| * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2'))) |
| * |
| * @var array<string, array<string, list<string>>> |
| */ |
| private $prefixesPsr0 = array(); |
| /** |
| * @var list<string> |
| */ |
| private $fallbackDirsPsr0 = array(); |
| /** @var bool */ |
| private $useIncludePath = false; |
| /** |
| * @var array<string, string> |
| */ |
| private $classMap = array(); |
| /** @var bool */ |
| private $classMapAuthoritative = false; |
| /** |
| * @var array<string, bool> |
| */ |
| private $missingClasses = array(); |
| /** @var string|null */ |
| private $apcuPrefix; |
| /** |
| * @var array<string, self> |
| */ |
| private static $registeredLoaders = array(); |
| /** |
| * @param string|null $vendorDir |
| */ |
| public function __construct($vendorDir = null) |
| { |
| $this->vendorDir = $vendorDir; |
| self::initializeIncludeClosure(); |
| } |
| /** |
| * @return array<string, list<string>> |
| */ |
| public function getPrefixes() |
| { |
| if (!empty($this->prefixesPsr0)) { |
| return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); |
| } |
| return array(); |
| } |
| /** |
| * @return array<string, list<string>> |
| */ |
| public function getPrefixesPsr4() |
| { |
| return $this->prefixDirsPsr4; |
| } |
| /** |
| * @return list<string> |
| */ |
| public function getFallbackDirs() |
| { |
| return $this->fallbackDirsPsr0; |
| } |
| /** |
| * @return list<string> |
| */ |
| public function getFallbackDirsPsr4() |
| { |
| return $this->fallbackDirsPsr4; |
| } |
| /** |
| * @return array<string, string> Array of classname => path |
| */ |
| public function getClassMap() |
| { |
| return $this->classMap; |
| } |
| /** |
| * @param array<string, string> $classMap Class to filename map |
| * |
| * @return void |
| */ |
| public function addClassMap(array $classMap) |
| { |
| if ($this->classMap) { |
| $this->classMap = array_merge($this->classMap, $classMap); |
| } else { |
| $this->classMap = $classMap; |
| } |
| } |
| /** |
| * Registers a set of PSR-0 directories for a given prefix, either |
| * appending or prepending to the ones previously set for this prefix. |
| * |
| * @param string $prefix The prefix |
| * @param list<string>|string $paths The PSR-0 root directories |
| * @param bool $prepend Whether to prepend the directories |
| * |
| * @return void |
| */ |
| public function add($prefix, $paths, $prepend = false) |
| { |
| $paths = (array) $paths; |
| if (!$prefix) { |
| if ($prepend) { |
| $this->fallbackDirsPsr0 = array_merge( |
| $paths, |
| $this->fallbackDirsPsr0 |
| ); |
| } else { |
| $this->fallbackDirsPsr0 = array_merge( |
| $this->fallbackDirsPsr0, |
| $paths |
| ); |
| } |
| return; |
| } |
| $first = $prefix[0]; |
| if (!isset($this->prefixesPsr0[$first][$prefix])) { |
| $this->prefixesPsr0[$first][$prefix] = $paths; |
| return; |
| } |
| if ($prepend) { |
| $this->prefixesPsr0[$first][$prefix] = array_merge( |
| $paths, |
| $this->prefixesPsr0[$first][$prefix] |
| ); |
| } else { |
| $this->prefixesPsr0[$first][$prefix] = array_merge( |
| $this->prefixesPsr0[$first][$prefix], |
| $paths |
| ); |
| } |
| } |
| /** |
| * Registers a set of PSR-4 directories for a given namespace, either |
| * appending or prepending to the ones previously set for this namespace. |
| * |
| * @param string $prefix The prefix/namespace, with trailing '\\' |
| * @param list<string>|string $paths The PSR-4 base directories |
| * @param bool $prepend Whether to prepend the directories |
| * |
| * @throws \InvalidArgumentException |
| * |
| * @return void |
| */ |
| public function addPsr4($prefix, $paths, $prepend = false) |
| { |
| $paths = (array) $paths; |
| if (!$prefix) { |
| // Register directories for the root namespace. |
| if ($prepend) { |
| $this->fallbackDirsPsr4 = array_merge( |
| $paths, |
| $this->fallbackDirsPsr4 |
| ); |
| } else { |
| $this->fallbackDirsPsr4 = array_merge( |
| $this->fallbackDirsPsr4, |
| $paths |
| ); |
| } |
| } elseif (!isset($this->prefixDirsPsr4[$prefix])) { |
| // Register directories for a new namespace. |
| $length = strlen($prefix); |
| if ('\\' !== $prefix[$length - 1]) { |
| throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); |
| } |
| $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; |
| $this->prefixDirsPsr4[$prefix] = $paths; |
| } elseif ($prepend) { |
| // Prepend directories for an already registered namespace. |
| $this->prefixDirsPsr4[$prefix] = array_merge( |
| $paths, |
| $this->prefixDirsPsr4[$prefix] |
| ); |
| } else { |
| // Append directories for an already registered namespace. |
| $this->prefixDirsPsr4[$prefix] = array_merge( |
| $this->prefixDirsPsr4[$prefix], |
| $paths |
| ); |
| } |
| } |
| /** |
| * Registers a set of PSR-0 directories for a given prefix, |
| * replacing any others previously set for this prefix. |
| * |
| * @param string $prefix The prefix |
| * @param list<string>|string $paths The PSR-0 base directories |
| * |
| * @return void |
| */ |
| public function set($prefix, $paths) |
| { |
| if (!$prefix) { |
| $this->fallbackDirsPsr0 = (array) $paths; |
| } else { |
| $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; |
| } |
| } |
| /** |
| * Registers a set of PSR-4 directories for a given namespace, |
| * replacing any others previously set for this namespace. |
| * |
| * @param string $prefix The prefix/namespace, with trailing '\\' |
| * @param list<string>|string $paths The PSR-4 base directories |
| * |
| * @throws \InvalidArgumentException |
| * |
| * @return void |
| */ |
| public function setPsr4($prefix, $paths) |
| { |
| if (!$prefix) { |
| $this->fallbackDirsPsr4 = (array) $paths; |
| } else { |
| $length = strlen($prefix); |
| if ('\\' !== $prefix[$length - 1]) { |
| throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); |
| } |
| $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; |
| $this->prefixDirsPsr4[$prefix] = (array) $paths; |
| } |
| } |
| /** |
| * Turns on searching the include path for class files. |
| * |
| * @param bool $useIncludePath |
| * |
| * @return void |
| */ |
| public function setUseIncludePath($useIncludePath) |
| { |
| $this->useIncludePath = $useIncludePath; |
| } |
| /** |
| * Can be used to check if the autoloader uses the include path to check |
| * for classes. |
| * |
| * @return bool |
| */ |
| public function getUseIncludePath() |
| { |
| return $this->useIncludePath; |
| } |
| /** |
| * Turns off searching the prefix and fallback directories for classes |
| * that have not been registered with the class map. |
| * |
| * @param bool $classMapAuthoritative |
| * |
| * @return void |
| */ |
| public function setClassMapAuthoritative($classMapAuthoritative) |
| { |
| $this->classMapAuthoritative = $classMapAuthoritative; |
| } |
| /** |
| * Should class lookup fail if not found in the current class map? |
| * |
| * @return bool |
| */ |
| public function isClassMapAuthoritative() |
| { |
| return $this->classMapAuthoritative; |
| } |
| /** |
| * APCu prefix to use to cache found/not-found classes, if the extension is enabled. |
| * |
| * @param string|null $apcuPrefix |
| * |
| * @return void |
| */ |
| public function setApcuPrefix($apcuPrefix) |
| { |
| $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; |
| } |
| /** |
| * The APCu prefix in use, or null if APCu caching is not enabled. |
| * |
| * @return string|null |
| */ |
| public function getApcuPrefix() |
| { |
| return $this->apcuPrefix; |
| } |
| /** |
| * Registers this instance as an autoloader. |
| * |
| * @param bool $prepend Whether to prepend the autoloader or not |
| * |
| * @return void |
| */ |
| public function register($prepend = false) |
| { |
| spl_autoload_register(array($this, 'loadClass'), true, $prepend); |
| if (null === $this->vendorDir) { |
| return; |
| } |
| if ($prepend) { |
| self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; |
| } else { |
| unset(self::$registeredLoaders[$this->vendorDir]); |
| self::$registeredLoaders[$this->vendorDir] = $this; |
| } |
| } |
| /** |
| * Unregisters this instance as an autoloader. |
| * |
| * @return void |
| */ |
| public function unregister() |
| { |
| spl_autoload_unregister(array($this, 'loadClass')); |
| if (null !== $this->vendorDir) { |
| unset(self::$registeredLoaders[$this->vendorDir]); |
| } |
| } |
| /** |
| * Loads the given class or interface. |
| * |
| * @param string $class The name of the class |
| * @return true|null True if loaded, null otherwise |
| */ |
| public function loadClass($class) |
| { |
| if ($file = $this->findFile($class)) { |
| $includeFile = self::$includeFile; |
| $includeFile($file); |
| return true; |
| } |
| return null; |
| } |
| /** |
| * Finds the path to the file where the class is defined. |
| * |
| * @param string $class The name of the class |
| * |
| * @return string|false The path if found, false otherwise |
| */ |
| public function findFile($class) |
| { |
| // class map lookup |
| if (isset($this->classMap[$class])) { |
| return $this->classMap[$class]; |
| } |
| if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { |
| return false; |
| } |
| if (null !== $this->apcuPrefix) { |
| $file = apcu_fetch($this->apcuPrefix.$class, $hit); |
| if ($hit) { |
| return $file; |
| } |
| } |
| $file = $this->findFileWithExtension($class, '.php'); |
| // Search for Hack files if we are running on HHVM |
| if (false === $file && defined('HHVM_VERSION')) { |
| $file = $this->findFileWithExtension($class, '.hh'); |
| } |
| if (null !== $this->apcuPrefix) { |
| apcu_add($this->apcuPrefix.$class, $file); |
| } |
| if (false === $file) { |
| // Remember that this class does not exist. |
| $this->missingClasses[$class] = true; |
| } |
| return $file; |
| } |
| /** |
| * Returns the currently registered loaders keyed by their corresponding vendor directories. |
| * |
| * @return array<string, self> |
| */ |
| public static function getRegisteredLoaders() |
| { |
| return self::$registeredLoaders; |
| } |
| /** |
| * @param string $class |
| * @param string $ext |
| * @return string|false |
| */ |
| private function findFileWithExtension($class, $ext) |
| { |
| // PSR-4 lookup |
| $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; |
| $first = $class[0]; |
| if (isset($this->prefixLengthsPsr4[$first])) { |
| $subPath = $class; |
| while (false !== $lastPos = strrpos($subPath, '\\')) { |
| $subPath = substr($subPath, 0, $lastPos); |
| $search = $subPath . '\\'; |
| if (isset($this->prefixDirsPsr4[$search])) { |
| $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); |
| foreach ($this->prefixDirsPsr4[$search] as $dir) { |
| if (file_exists($file = $dir . $pathEnd)) { |
| return $file; |
| } |
| } |
| } |
| } |
| } |
| // PSR-4 fallback dirs |
| foreach ($this->fallbackDirsPsr4 as $dir) { |
| if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { |
| return $file; |
| } |
| } |
| // PSR-0 lookup |
| if (false !== $pos = strrpos($class, '\\')) { |
| // namespaced class name |
| $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) |
| . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); |
| } else { |
| // PEAR-like class name |
| $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; |
| } |
| if (isset($this->prefixesPsr0[$first])) { |
| foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { |
| if (0 === strpos($class, $prefix)) { |
| foreach ($dirs as $dir) { |
| if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { |
| return $file; |
| } |
| } |
| } |
| } |
| } |
| // PSR-0 fallback dirs |
| foreach ($this->fallbackDirsPsr0 as $dir) { |
| if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { |
| return $file; |
| } |
| } |
| // PSR-0 include paths. |
| if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { |
| return $file; |
| } |
| return false; |
| } |
| /** |
| * @return void |
| */ |
| private static function initializeIncludeClosure() |
| { |
| if (self::$includeFile !== null) { |
| return; |
| } |
| /** |
| * Scope isolated include. |
| * |
| * Prevents access to $this/self from included files. |
| * |
| * @param string $file |
| * @return void |
| */ |
| self::$includeFile = \Closure::bind(static function($file) { |
| include $file; |
| }, null, null); |
| } |
| } |
| /web/acc/manager/nfsen/vendor/composer/InstalledVersions.php |
|---|
| 0,0 → 1,362 |
| <?php |
| /* |
| * This file is part of Composer. |
| * |
| * (c) Nils Adermann <naderman@naderman.de> |
| * Jordi Boggiano <j.boggiano@seld.be> |
| * |
| * For the full copyright and license information, please view the LICENSE |
| * file that was distributed with this source code. |
| */ |
| namespace Composer; |
| use Composer\Autoload\ClassLoader; |
| use Composer\Semver\VersionParser; |
| /** |
| * This class is copied in every Composer installed project and available to all |
| * |
| * See also https://getcomposer.org/doc/07-runtime.md#installed-versions |
| * |
| * To require its presence, you can require `composer-runtime-api ^2.0` |
| * |
| * @final |
| */ |
| class InstalledVersions |
| { |
| /** |
| * @var mixed[]|null |
| * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null |
| */ |
| private static $installed; |
| /** |
| * @var bool|null |
| */ |
| private static $canGetVendors; |
| /** |
| * @var array[] |
| * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> |
| */ |
| private static $installedByVendor = array(); |
| /** |
| * Returns a list of all package names which are present, either by being installed, replaced or provided |
| * |
| * @return string[] |
| * @psalm-return list<string> |
| */ |
| public static function getInstalledPackages() |
| { |
| $packages = array(); |
| foreach (self::getInstalled() as $installed) { |
| $packages[] = array_keys($installed['versions']); |
| } |
| if (1 === \count($packages)) { |
| return $packages[0]; |
| } |
| return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); |
| } |
| /** |
| * Returns a list of all package names with a specific type e.g. 'library' |
| * |
| * @param string $type |
| * @return string[] |
| * @psalm-return list<string> |
| */ |
| public static function getInstalledPackagesByType($type) |
| { |
| $packagesByType = array(); |
| foreach (self::getInstalled() as $installed) { |
| foreach ($installed['versions'] as $name => $package) { |
| if (isset($package['type']) && $package['type'] === $type) { |
| $packagesByType[] = $name; |
| } |
| } |
| } |
| return $packagesByType; |
| } |
| /** |
| * Checks whether the given package is installed |
| * |
| * This also returns true if the package name is provided or replaced by another package |
| * |
| * @param string $packageName |
| * @param bool $includeDevRequirements |
| * @return bool |
| */ |
| public static function isInstalled($packageName, $includeDevRequirements = true) |
| { |
| foreach (self::getInstalled() as $installed) { |
| if (isset($installed['versions'][$packageName])) { |
| return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; |
| } |
| } |
| return false; |
| } |
| /** |
| * Checks whether the given package satisfies a version constraint |
| * |
| * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: |
| * |
| * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') |
| * |
| * @param VersionParser $parser Install composer/semver to have access to this class and functionality |
| * @param string $packageName |
| * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package |
| * @return bool |
| */ |
| public static function satisfies(VersionParser $parser, $packageName, $constraint) |
| { |
| $constraint = $parser->parseConstraints((string) $constraint); |
| $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); |
| return $provided->matches($constraint); |
| } |
| /** |
| * Returns a version constraint representing all the range(s) which are installed for a given package |
| * |
| * It is easier to use this via isInstalled() with the $constraint argument if you need to check |
| * whether a given version of a package is installed, and not just whether it exists |
| * |
| * @param string $packageName |
| * @return string Version constraint usable with composer/semver |
| */ |
| public static function getVersionRanges($packageName) |
| { |
| foreach (self::getInstalled() as $installed) { |
| if (!isset($installed['versions'][$packageName])) { |
| continue; |
| } |
| $ranges = array(); |
| if (isset($installed['versions'][$packageName]['pretty_version'])) { |
| $ranges[] = $installed['versions'][$packageName]['pretty_version']; |
| } |
| if (array_key_exists('aliases', $installed['versions'][$packageName])) { |
| $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); |
| } |
| if (array_key_exists('replaced', $installed['versions'][$packageName])) { |
| $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); |
| } |
| if (array_key_exists('provided', $installed['versions'][$packageName])) { |
| $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); |
| } |
| return implode(' || ', $ranges); |
| } |
| throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
| } |
| /** |
| * @param string $packageName |
| * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present |
| */ |
| public static function getVersion($packageName) |
| { |
| foreach (self::getInstalled() as $installed) { |
| if (!isset($installed['versions'][$packageName])) { |
| continue; |
| } |
| if (!isset($installed['versions'][$packageName]['version'])) { |
| return null; |
| } |
| return $installed['versions'][$packageName]['version']; |
| } |
| throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
| } |
| /** |
| * @param string $packageName |
| * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present |
| */ |
| public static function getPrettyVersion($packageName) |
| { |
| foreach (self::getInstalled() as $installed) { |
| if (!isset($installed['versions'][$packageName])) { |
| continue; |
| } |
| if (!isset($installed['versions'][$packageName]['pretty_version'])) { |
| return null; |
| } |
| return $installed['versions'][$packageName]['pretty_version']; |
| } |
| throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
| } |
| /** |
| * @param string $packageName |
| * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference |
| */ |
| public static function getReference($packageName) |
| { |
| foreach (self::getInstalled() as $installed) { |
| if (!isset($installed['versions'][$packageName])) { |
| continue; |
| } |
| if (!isset($installed['versions'][$packageName]['reference'])) { |
| return null; |
| } |
| return $installed['versions'][$packageName]['reference']; |
| } |
| throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
| } |
| /** |
| * @param string $packageName |
| * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. |
| */ |
| public static function getInstallPath($packageName) |
| { |
| foreach (self::getInstalled() as $installed) { |
| if (!isset($installed['versions'][$packageName])) { |
| continue; |
| } |
| return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; |
| } |
| throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
| } |
| /** |
| * @return array |
| * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} |
| */ |
| public static function getRootPackage() |
| { |
| $installed = self::getInstalled(); |
| return $installed[0]['root']; |
| } |
| /** |
| * Returns the raw installed.php data for custom implementations |
| * |
| * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. |
| * @return array[] |
| * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} |
| */ |
| public static function getRawData() |
| { |
| @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); |
| if (null === self::$installed) { |
| // only require the installed.php file if this file is loaded from its dumped location, |
| // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 |
| if (substr(__DIR__, -8, 1) !== 'C') { |
| self::$installed = include __DIR__ . '/installed.php'; |
| } else { |
| self::$installed = array(); |
| } |
| } |
| return self::$installed; |
| } |
| /** |
| * Returns the raw data of all installed.php which are currently loaded for custom implementations |
| * |
| * @return array[] |
| * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> |
| */ |
| public static function getAllRawData() |
| { |
| return self::getInstalled(); |
| } |
| /** |
| * Lets you reload the static array from another file |
| * |
| * This is only useful for complex integrations in which a project needs to use |
| * this class but then also needs to execute another project's autoloader in process, |
| * and wants to ensure both projects have access to their version of installed.php. |
| * |
| * A typical case would be PHPUnit, where it would need to make sure it reads all |
| * the data it needs from this class, then call reload() with |
| * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure |
| * the project in which it runs can then also use this class safely, without |
| * interference between PHPUnit's dependencies and the project's dependencies. |
| * |
| * @param array[] $data A vendor/composer/installed.php data set |
| * @return void |
| * |
| * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data |
| */ |
| public static function reload($data) |
| { |
| self::$installed = $data; |
| self::$installedByVendor = array(); |
| } |
| /** |
| * @return array[] |
| * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}> |
| */ |
| private static function getInstalled() |
| { |
| if (null === self::$canGetVendors) { |
| self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); |
| } |
| $installed = array(); |
| $copiedLocalDir = false; |
| if (self::$canGetVendors) { |
| foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { |
| if (isset(self::$installedByVendor[$vendorDir])) { |
| $installed[] = self::$installedByVendor[$vendorDir]; |
| } elseif (is_file($vendorDir.'/composer/installed.php')) { |
| /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ |
| $required = require $vendorDir.'/composer/installed.php'; |
| self::$installedByVendor[$vendorDir] = $required; |
| $installed[] = $required; |
| if (strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { |
| self::$installed = $required; |
| $copiedLocalDir = true; |
| } |
| } |
| } |
| } |
| if (null === self::$installed) { |
| // only require the installed.php file if this file is loaded from its dumped location, |
| // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 |
| if (substr(__DIR__, -8, 1) !== 'C') { |
| /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */ |
| $required = require __DIR__ . '/installed.php'; |
| self::$installed = $required; |
| } else { |
| self::$installed = array(); |
| } |
| } |
| if (self::$installed !== array() && !$copiedLocalDir) { |
| $installed[] = self::$installed; |
| } |
| return $installed; |
| } |
| } |
| /web/acc/manager/nfsen/vendor/composer/LICENSE |
|---|
| 0,0 → 1,21 |
| Copyright (c) Nils Adermann, Jordi Boggiano |
| Permission is hereby granted, free of charge, to any person obtaining a copy |
| of this software and associated documentation files (the "Software"), to deal |
| in the Software without restriction, including without limitation the rights |
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| copies of the Software, and to permit persons to whom the Software is furnished |
| to do so, subject to the following conditions: |
| The above copyright notice and this permission notice shall be included in all |
| copies or substantial portions of the Software. |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| THE SOFTWARE. |
| /web/acc/manager/nfsen/vendor/composer/autoload_classmap.php |
|---|
| 0,0 → 1,10 |
| <?php |
| // autoload_classmap.php @generated by Composer |
| $vendorDir = dirname(__DIR__); |
| $baseDir = dirname($vendorDir); |
| return array( |
| 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', |
| ); |
| /web/acc/manager/nfsen/vendor/composer/autoload_namespaces.php |
|---|
| 0,0 → 1,9 |
| <?php |
| // autoload_namespaces.php @generated by Composer |
| $vendorDir = dirname(__DIR__); |
| $baseDir = dirname($vendorDir); |
| return array( |
| ); |
| /web/acc/manager/nfsen/vendor/composer/autoload_psr4.php |
|---|
| 0,0 → 1,10 |
| <?php |
| // autoload_psr4.php @generated by Composer |
| $vendorDir = dirname(__DIR__); |
| $baseDir = dirname($vendorDir); |
| return array( |
| 'mbolli\\nfsen_ng\\' => array($baseDir . '/backend'), |
| ); |
| /web/acc/manager/nfsen/vendor/composer/autoload_real.php |
|---|
| 0,0 → 1,38 |
| <?php |
| // autoload_real.php @generated by Composer |
| class ComposerAutoloaderInitf00fa0808b7e3ccf5d95c78c1d4b3318 |
| { |
| private static $loader; |
| public static function loadClassLoader($class) |
| { |
| if ('Composer\Autoload\ClassLoader' === $class) { |
| require __DIR__ . '/ClassLoader.php'; |
| } |
| } |
| /** |
| * @return \Composer\Autoload\ClassLoader |
| */ |
| public static function getLoader() |
| { |
| if (null !== self::$loader) { |
| return self::$loader; |
| } |
| require __DIR__ . '/platform_check.php'; |
| spl_autoload_register(array('ComposerAutoloaderInitf00fa0808b7e3ccf5d95c78c1d4b3318', 'loadClassLoader'), true, true); |
| self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); |
| spl_autoload_unregister(array('ComposerAutoloaderInitf00fa0808b7e3ccf5d95c78c1d4b3318', 'loadClassLoader')); |
| require __DIR__ . '/autoload_static.php'; |
| call_user_func(\Composer\Autoload\ComposerStaticInitf00fa0808b7e3ccf5d95c78c1d4b3318::getInitializer($loader)); |
| $loader->register(true); |
| return $loader; |
| } |
| } |
| /web/acc/manager/nfsen/vendor/composer/autoload_static.php |
|---|
| 0,0 → 1,36 |
| <?php |
| // autoload_static.php @generated by Composer |
| namespace Composer\Autoload; |
| class ComposerStaticInitf00fa0808b7e3ccf5d95c78c1d4b3318 |
| { |
| public static $prefixLengthsPsr4 = array ( |
| 'm' => |
| array ( |
| 'mbolli\\nfsen_ng\\' => 16, |
| ), |
| ); |
| public static $prefixDirsPsr4 = array ( |
| 'mbolli\\nfsen_ng\\' => |
| array ( |
| 0 => __DIR__ . '/../..' . '/backend', |
| ), |
| ); |
| public static $classMap = array ( |
| 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', |
| ); |
| public static function getInitializer(ClassLoader $loader) |
| { |
| return \Closure::bind(function () use ($loader) { |
| $loader->prefixLengthsPsr4 = ComposerStaticInitf00fa0808b7e3ccf5d95c78c1d4b3318::$prefixLengthsPsr4; |
| $loader->prefixDirsPsr4 = ComposerStaticInitf00fa0808b7e3ccf5d95c78c1d4b3318::$prefixDirsPsr4; |
| $loader->classMap = ComposerStaticInitf00fa0808b7e3ccf5d95c78c1d4b3318::$classMap; |
| }, null, ClassLoader::class); |
| } |
| } |
| /web/acc/manager/nfsen/vendor/composer/installed.json |
|---|
| 0,0 → 1,5 |
| { |
| "packages": [], |
| "dev": false, |
| "dev-package-names": [] |
| } |
| /web/acc/manager/nfsen/vendor/composer/installed.php |
|---|
| 0,0 → 1,23 |
| <?php return array( |
| 'root' => array( |
| 'name' => 'mbolli/nfsen-ng', |
| 'pretty_version' => '1.0.0+no-version-set', |
| 'version' => '1.0.0.0', |
| 'reference' => null, |
| 'type' => 'library', |
| 'install_path' => __DIR__ . '/../../', |
| 'aliases' => array(), |
| 'dev' => false, |
| ), |
| 'versions' => array( |
| 'mbolli/nfsen-ng' => array( |
| 'pretty_version' => '1.0.0+no-version-set', |
| 'version' => '1.0.0.0', |
| 'reference' => null, |
| 'type' => 'library', |
| 'install_path' => __DIR__ . '/../../', |
| 'aliases' => array(), |
| 'dev_requirement' => false, |
| ), |
| ), |
| ); |
| /web/acc/manager/nfsen/vendor/composer/platform_check.php |
|---|
| 0,0 → 1,26 |
| <?php |
| // platform_check.php @generated by Composer |
| $issues = array(); |
| if (!(PHP_VERSION_ID >= 80100)) { |
| $issues[] = 'Your Composer dependencies require a PHP version ">= 8.1.0". You are running ' . PHP_VERSION . '.'; |
| } |
| if ($issues) { |
| if (!headers_sent()) { |
| header('HTTP/1.1 500 Internal Server Error'); |
| } |
| if (!ini_get('display_errors')) { |
| if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { |
| fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); |
| } elseif (!headers_sent()) { |
| echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL; |
| } |
| } |
| trigger_error( |
| 'Composer detected issues in your platform: ' . implode(' ', $issues), |
| E_USER_ERROR |
| ); |
| } |
| /web/acc/manager/nfsen.php |
|---|
| 17,7 → 17,7 |
| <body> |
| <div class="panel"> |
| <div class="panel-header"><?= $l_title ?></div> |
| <iframe class="panel-iframe" src="nfsen/nfsen.php"> |
| <iframe class="panel-iframe" src="nfsen/frontend/index.html"> |
| </iframe> |
| </div> |
| </body> |