Add initial project structure and configurations
- Set up project directories including app structure. - Add IntelliJ IDEA project files and configurations. - Implement basic PHP router for request handling. - Provide reference files for features, IPs, and documentation. - Include license and copyright files.
This commit is contained in:
10
.idea/.gitignore
generated
vendored
Normal file
10
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Ignored default folder with query files
|
||||
/queries/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
@@ -0,0 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||
</state>
|
||||
</component>
|
||||
6
.idea/copyright/Brusegan_Davanzo.xml
generated
Normal file
6
.idea/copyright/Brusegan_Davanzo.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<component name="CopyrightManager">
|
||||
<copyright>
|
||||
<option name="notice" value="Copyright (c) &#36;originalComment.match("Copyright \(c\) (\d+)", 1, "-", "&#36;today.year")&#36;today.year. Brusegan Samuele, Davanzo Andrea Questo file fa parte di VeyonCtrl ed è rilasciato sotto la licenza MIT. Vedere il file LICENSE per i dettagli." />
|
||||
<option name="myName" value="Brusegan-Davanzo" />
|
||||
</copyright>
|
||||
</component>
|
||||
7
.idea/copyright/profiles_settings.xml
generated
Normal file
7
.idea/copyright/profiles_settings.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<component name="CopyrightManager">
|
||||
<settings default="Brusegan-Davanzo">
|
||||
<module2copyright>
|
||||
<element module="All" copyright="Brusegan-Davanzo" />
|
||||
</module2copyright>
|
||||
</settings>
|
||||
</component>
|
||||
7
.idea/dictionaries/project.xml
generated
Normal file
7
.idea/dictionaries/project.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<component name="ProjectDictionaryState">
|
||||
<dictionary name="project">
|
||||
<words>
|
||||
<w>Veyon</w>
|
||||
</words>
|
||||
</dictionary>
|
||||
</component>
|
||||
24
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
24
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@@ -0,0 +1,24 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="ExceptionCaughtLocallyJS" enabled="false" level="WARNING" enabled_by_default="false" />
|
||||
<inspection_tool class="HtmlUnknownTag" enabled="true" level="WARNING" enabled_by_default="true">
|
||||
<option name="myValues">
|
||||
<value>
|
||||
<list size="8">
|
||||
<item index="0" class="java.lang.String" itemvalue="nobr" />
|
||||
<item index="1" class="java.lang.String" itemvalue="noembed" />
|
||||
<item index="2" class="java.lang.String" itemvalue="comment" />
|
||||
<item index="3" class="java.lang.String" itemvalue="noscript" />
|
||||
<item index="4" class="java.lang.String" itemvalue="embed" />
|
||||
<item index="5" class="java.lang.String" itemvalue="script" />
|
||||
<item index="6" class="java.lang.String" itemvalue="Subject" />
|
||||
<item index="7" class="java.lang.String" itemvalue="Grade" />
|
||||
</list>
|
||||
</value>
|
||||
</option>
|
||||
<option name="myCustomValuesEnabled" value="true" />
|
||||
</inspection_tool>
|
||||
<inspection_tool class="PhpRedundantClosingTagInspection" enabled="false" level="WEAK WARNING" enabled_by_default="false" />
|
||||
</profile>
|
||||
</component>
|
||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/project16.iml" filepath="$PROJECT_DIR$/.idea/project16.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
35
.idea/php.xml
generated
Normal file
35
.idea/php.xml
generated
Normal file
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="MessDetectorOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PHPCSFixerOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PHPCodeSnifferOptionsConfiguration">
|
||||
<option name="highlightLevel" value="WARNING" />
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="PhpCodeSniffer">
|
||||
<phpcs_settings>
|
||||
<phpcs_by_interpreter asDefaultInterpreter="true" interpreter_id="a560eb74-74bf-4c70-a331-ce4cf603c038" timeout="30000" />
|
||||
</phpcs_settings>
|
||||
</component>
|
||||
<component name="PhpProjectSharedConfiguration" php_language_level="7.4" />
|
||||
<component name="PhpStan">
|
||||
<PhpStan_settings>
|
||||
<phpstan_by_interpreter asDefaultInterpreter="true" interpreter_id="a560eb74-74bf-4c70-a331-ce4cf603c038" timeout="60000" />
|
||||
</PhpStan_settings>
|
||||
</component>
|
||||
<component name="PhpStanOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
<component name="Psalm">
|
||||
<Psalm_settings>
|
||||
<psalm_fixer_by_interpreter asDefaultInterpreter="true" interpreter_id="a560eb74-74bf-4c70-a331-ce4cf603c038" timeout="60000" />
|
||||
</Psalm_settings>
|
||||
</component>
|
||||
<component name="PsalmOptionsConfiguration">
|
||||
<option name="transferred" value="true" />
|
||||
</component>
|
||||
</project>
|
||||
10
.idea/project16.iml
generated
Normal file
10
.idea/project16.iml
generated
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/refs" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
3
.idea/scopes/C.xml
generated
Normal file
3
.idea/scopes/C.xml
generated
Normal file
@@ -0,0 +1,3 @@
|
||||
<component name="DependencyValidationManager">
|
||||
<scope name="C" pattern="file[project16]:app/controllers//*" />
|
||||
</component>
|
||||
3
.idea/scopes/M.xml
generated
Normal file
3
.idea/scopes/M.xml
generated
Normal file
@@ -0,0 +1,3 @@
|
||||
<component name="DependencyValidationManager">
|
||||
<scope name="M" pattern="file[project16]:app/models//*" />
|
||||
</component>
|
||||
3
.idea/scopes/V.xml
generated
Normal file
3
.idea/scopes/V.xml
generated
Normal file
@@ -0,0 +1,3 @@
|
||||
<component name="DependencyValidationManager">
|
||||
<scope name="V" pattern="file[project16]:app/views//*" />
|
||||
</component>
|
||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
2
LICENSE
2
LICENSE
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 samuele-brusegan
|
||||
Copyright (c) 2025 Brusegan Samuele, Davanzo Andrea
|
||||
|
||||
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
|
||||
|
||||
47
Router.php
Normal file
47
Router.php
Normal file
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (c) 2025. Brusegan Samuele, Davanzo Andrea
|
||||
* Questo file fa parte di VeyonCtrl ed è rilasciato
|
||||
* sotto la licenza MIT. Vedere il file LICENSE per i dettagli.
|
||||
*/
|
||||
|
||||
|
||||
class Router {
|
||||
private array $routes = [];
|
||||
|
||||
// Aggiunge una nuova rotta
|
||||
public function add($url, $controller, $action): void {
|
||||
$this->routes[$url] = [
|
||||
'controller' => $controller,
|
||||
'action' => $action
|
||||
];
|
||||
}
|
||||
|
||||
// Smista la richiesta all'azione corretta
|
||||
public function dispatch($url): void {
|
||||
$path = rtrim(parse_url($url, PHP_URL_PATH), '/');
|
||||
if ($path === '') {
|
||||
$path = '/';
|
||||
}
|
||||
|
||||
if (array_key_exists($path, $this->routes)) {
|
||||
$route = $this->routes[$path];
|
||||
$controllerName = $route['controller'];
|
||||
$actionName = $route['action'];
|
||||
|
||||
// Crea il controller e chiama l'azione
|
||||
$controller = new $controllerName();
|
||||
$controller->$actionName();
|
||||
} else {
|
||||
// Gestione errore 404
|
||||
header("HTTP/1.0 404 Not Found");
|
||||
echo "<pre>";
|
||||
echo "Pagina non trovata!";
|
||||
echo $path; echo "<br>";
|
||||
echo $url; echo "<br>";
|
||||
echo PHP_URL_PATH; echo "<br>";
|
||||
echo "</pre>";
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
10
app/controllers/Controller.php
Normal file
10
app/controllers/Controller.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
class Controller {
|
||||
|
||||
public function index(): void {
|
||||
require_once '../views/home.php';
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
10
app/models/ApiCLI.php
Normal file
10
app/models/ApiCLI.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (c) 2025. Brusegan Samuele, Davanzo Andrea
|
||||
* Questo file fa parte di VeyonCtrl ed è rilasciato
|
||||
* sotto la licenza MIT. Vedere il file LICENSE per i dettagli.
|
||||
*/
|
||||
|
||||
class ApiCLI {
|
||||
|
||||
}
|
||||
0
app/views/home.php
Normal file
0
app/views/home.php
Normal file
11
public/.htaccess
Normal file
11
public/.htaccess
Normal file
@@ -0,0 +1,11 @@
|
||||
RewriteEngine On
|
||||
|
||||
# Riscrive la base dell'URL per le richieste
|
||||
RewriteBase /
|
||||
|
||||
# Salta le regole di riscrittura se il file o la directory esistono realmente
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
|
||||
# Riscrive tutte le altre richieste a index.php
|
||||
RewriteRule ^(.*)$ index.php [QSA,L]
|
||||
0
public/functions.php
Normal file
0
public/functions.php
Normal file
35
public/index.php
Normal file
35
public/index.php
Normal file
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (c) 2025. Brusegan Samuele, Davanzo Andrea
|
||||
* Questo file fa parte di VeyonCtrl ed è rilasciato
|
||||
* sotto la licenza MIT. Vedere il file LICENSE per i dettagli.
|
||||
*/
|
||||
|
||||
// Definisci il percorso base dell'applicazione
|
||||
|
||||
define( 'BASE_PATH', dirname( __DIR__ ) );
|
||||
session_start();
|
||||
const URL_PATH = "https://project16.test";
|
||||
const COMMON_HTML_HEAD = BASE_PATH . '/public/commons/head.php';
|
||||
const COMMON_HTML_FOOT = BASE_PATH . '/public/commons/bottom_navigation.php';
|
||||
|
||||
const THEME = ( 0 ) ? 'light' : 'dark';
|
||||
|
||||
// Includi i file necessari, a mano o con l'autoloader di Composer
|
||||
require_once BASE_PATH . '/Router.php';
|
||||
require_once BASE_PATH . '/public/functions.php';
|
||||
// require_once BASE_PATH . '/public/commons/php/session_wall.php';
|
||||
require_once BASE_PATH . '/app/controllers/Controller.php';
|
||||
|
||||
// checkSessionExpiration();
|
||||
|
||||
// Inizializza il router
|
||||
$router = new Router();
|
||||
|
||||
// Definisci le rotte
|
||||
require BASE_PATH . '/public/routes.php';
|
||||
|
||||
// Ottieni l'URL richiesto e fai partire il router
|
||||
$url = $_SERVER[ 'REQUEST_URI' ];
|
||||
$router->dispatch( $url );
|
||||
|
||||
19
public/routes.php
Normal file
19
public/routes.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (c) 2025. Brusegan Samuele, Davanzo Andrea
|
||||
* Questo file fa parte di VeyonCtrl ed è rilasciato
|
||||
* sotto la licenza MIT. Vedere il file LICENSE per i dettagli.
|
||||
*/
|
||||
global $router;
|
||||
|
||||
// === API ===
|
||||
$router->add('/api' , 'ApiController', 'classeviva');
|
||||
$router->add('/login' , 'ApiController', 'login');
|
||||
|
||||
// === Pagine ===
|
||||
$router->add('/' , 'Controller', 'index');
|
||||
$router->add('/grades' , 'Controller', 'grades');
|
||||
$router->add('/settings' , 'Controller', 'settings');
|
||||
$router->add('/account' , 'Controller', 'account');
|
||||
$router->add('/subjects' , 'Controller', 'subjects');
|
||||
$router->add('/agenda' , 'Controller', 'agenda');
|
||||
20
refs/batch/featureList.txt
Normal file
20
refs/batch/featureList.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
+-----------------------------------------------------------+
|
||||
| |
|
||||
| Available Features |
|
||||
| |
|
||||
+----+--------------------------+---------------------------+
|
||||
| No | Name | Args |
|
||||
+----+--------------------------+---------------------------+
|
||||
| 1 | Start App | Num of apps, App names |
|
||||
| 2 | Screen Lock | |
|
||||
| 3 | User Login | Username, Password |
|
||||
| 4 | User Logoff | |
|
||||
| 5 | Reboot | |
|
||||
| 6 | Power Down | |
|
||||
| 7 | Text Message | Message |
|
||||
+----+--------------------------+---------------------------+
|
||||
| 8 | Demo Server | DemoToken |
|
||||
| 9 | Demo Client (Fullscreen) | DemoToken, DemoServer |
|
||||
| 10 | Demo Client (Window) | DemoToken, DemoServer |
|
||||
+----+--------------------------+---------------------------+
|
||||
|
||||
58
refs/batch/features.cpp
Normal file
58
refs/batch/features.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
//Features.cpp
|
||||
#import <iostream>
|
||||
#import <cstdlib>
|
||||
#include <string>
|
||||
#import <ctime>
|
||||
using namespace std;
|
||||
|
||||
|
||||
string folderName = "";
|
||||
string execName = "EXEC";
|
||||
string path = "C:/Program Files/";
|
||||
|
||||
int attrList() {
|
||||
int usr;
|
||||
cout << "+------- MENU' -------+" << endl;
|
||||
cout << "| 1. Remote Access |" << endl;
|
||||
cout << "| 2. Features (list) |" << endl;
|
||||
cout << "| 3. Get Token |" << endl;
|
||||
cout << "+---------------------+" << endl;
|
||||
cout << "Scegli un opzione: ";
|
||||
cin >> usr;
|
||||
return usr;
|
||||
}
|
||||
|
||||
int main(){
|
||||
int usr;
|
||||
string tmp = "cd /D " + '"' + path + '"'+"";
|
||||
system(tmp.c_str());
|
||||
|
||||
system( "echo %cd%" );
|
||||
|
||||
usr = attrList();
|
||||
|
||||
switch (usr) {
|
||||
case 1:
|
||||
int sel;
|
||||
string ip;
|
||||
cout << "Control (0) or View(1)? ";
|
||||
cin >> sel;
|
||||
cout << "Select host(IP): ";
|
||||
cin >> ip;
|
||||
system( (" echo %cd% && "+execName+" remoteaccess "+((!sel)?"control":"view")+" "+ip).c_str() );
|
||||
break;
|
||||
|
||||
/* case 2:
|
||||
cout << "2.";
|
||||
break;
|
||||
case 3:
|
||||
cout << "3.";
|
||||
break;*/
|
||||
}
|
||||
//rem acc <Ctrl/Vw> <IP>
|
||||
|
||||
//system(execName+
|
||||
//feature <sr/st> <IP> <FeatureName> <JSON-ARGS>
|
||||
|
||||
//get TokenFromWebUI <IP>
|
||||
}
|
||||
145
refs/batch/index.bat
Normal file
145
refs/batch/index.bat
Normal file
@@ -0,0 +1,145 @@
|
||||
@echo off
|
||||
|
||||
set folder=Veyon
|
||||
set exec=veyon-cli.exe
|
||||
set bd=%cd%
|
||||
|
||||
echo %bd%
|
||||
|
||||
cd /D "C:/Program Files/%folder%"
|
||||
|
||||
:cycle
|
||||
cls
|
||||
echo.
|
||||
echo +------ Menu ------+
|
||||
echo [ 1. Remote Access ]
|
||||
echo [ 2. Features ]
|
||||
echo [ 3. Get Token ]
|
||||
echo +------------------+
|
||||
set /p "opt=Please select an option: "
|
||||
|
||||
if %opt%==1 goto :remAccess
|
||||
if %opt%==2 goto :featuresList
|
||||
if %opt%==3 goto :getToken
|
||||
echo L'opzione inserita non esiste
|
||||
pause
|
||||
exit ::Dovrebbe terminare il programma
|
||||
|
||||
:remAccess
|
||||
set /p "opt=Control(0) or View(1): "
|
||||
|
||||
if %opt%==0 set vwOrCt=control
|
||||
if %opt%==1 set vwOrCt=view
|
||||
|
||||
type %bd%\ips.txt ::Print the 3rd ottect by laboratory
|
||||
|
||||
set /p "mask=Select 3rd oct: "
|
||||
|
||||
if %mask%==4 echo Nel LAP2 gli ip sono scalati di 30 in avanti
|
||||
|
||||
set /p "addr=Select host addr:"
|
||||
|
||||
%exec% remoteaccess %vwOrCt% 192.168.%mask%.%addr%
|
||||
|
||||
pause
|
||||
goto :cycle
|
||||
|
||||
:featuresList
|
||||
type %bd%\featureList.txt
|
||||
|
||||
set /p "featureSelected=Select a feature: "
|
||||
|
||||
if %featureSelected%==1 goto :startApp
|
||||
if %featureSelected%==2 goto :screenLock
|
||||
if %featureSelected%==3 goto :userLogin
|
||||
if %featureSelected%==4 goto :userLogoff
|
||||
if %featureSelected%==5 goto :reboot
|
||||
if %featureSelected%==6 goto :powerDown
|
||||
if %featureSelected%==7 goto :textMessage
|
||||
|
||||
if %featureSelected%==8 goto :demoServer
|
||||
if %featureSelected%==9 goto :demoFull
|
||||
if %featureSelected%==10 goto :demoWin
|
||||
echo. && echo WARN: Hai selezionato un opzione che non esiste! && echo.
|
||||
|
||||
pause
|
||||
goto :cycle
|
||||
|
||||
:getToken
|
||||
|
||||
start cmd /k %exec% webapi runserver
|
||||
|
||||
set /p "mask=Select 3rd oct: "
|
||||
set /p "addr=Select host addr:"
|
||||
|
||||
curl localhost:11080/api/v1/authentication/192.168.%mask%.%addr%
|
||||
|
||||
pause
|
||||
|
||||
goto :cycle
|
||||
|
||||
|
||||
::Feature Management
|
||||
|
||||
:startApp
|
||||
set /p "noApp=Insert the number of apps: "
|
||||
|
||||
set json="{ "applications": ["
|
||||
|
||||
set i=0
|
||||
:loop_for
|
||||
if i GEQ %noApp% goto :exitLoop_for
|
||||
set /p "appName=\tInsert app path: "
|
||||
set json=%json%"%appName%",
|
||||
goto :loop_for
|
||||
:exitLoop_for
|
||||
|
||||
set json=%json%]}
|
||||
|
||||
echo %json%
|
||||
|
||||
pause
|
||||
goto :cycle
|
||||
|
||||
:screenLock
|
||||
set /p "mask=Select 3rd oct: "
|
||||
set /p "addr=Select host addr:"
|
||||
|
||||
%exec% feature start screenLock 192.168.%mask%.%addr%
|
||||
pause
|
||||
%exec% feature stop screenLock 192.168.%mask%.%addr%
|
||||
|
||||
goto :cycle
|
||||
:userLogin
|
||||
echo Non ancora implementato
|
||||
goto :cycle
|
||||
:userLogoff
|
||||
set /p "mask=Select 3rd oct: "
|
||||
set /p "addr=Select host addr:"
|
||||
|
||||
%exec% feature start 192.168.%mask%.%addr% UserLogoff
|
||||
pause
|
||||
goto :cycle
|
||||
:reboot
|
||||
echo Non ancora implementato
|
||||
goto :cycle
|
||||
:powerDown
|
||||
echo Non ancora implementato
|
||||
goto :cycle
|
||||
:textMessage
|
||||
set /p "mask=Select 3rd oct: "
|
||||
set /p "addr=Select host addr:"
|
||||
set /p "msg=Insert msg:"
|
||||
|
||||
%exec% feature start 192.168.%mask%.%addr% TextMessage '{\"text\":\"%msg%\"}'
|
||||
pause
|
||||
goto :cycle
|
||||
:demoServer
|
||||
echo Non ancora implementato
|
||||
goto :cycle
|
||||
:demoFull
|
||||
echo Non ancora implementato
|
||||
goto :cycle
|
||||
:demoWin
|
||||
echo Non ancora implementato
|
||||
goto :cycle
|
||||
14
refs/batch/ips.txt
Normal file
14
refs/batch/ips.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
+----- IP MASKS -----+
|
||||
| 1 - [...] |
|
||||
| 2 - LASA |
|
||||
| 3 - [...] |
|
||||
| 4 - LAP1 / LAP2 | #LAP2 +30
|
||||
| 5 - [...] |
|
||||
| 6 - [...] |
|
||||
| 7 - [...] |
|
||||
| 8 - LAS |
|
||||
| 9 - LMM |
|
||||
| 10 - LAM |
|
||||
| 11 - [...] |
|
||||
| 12 - Classi |
|
||||
+--------------------+
|
||||
1169
refs/docs/WebApi - documentation.html
Normal file
1169
refs/docs/WebApi - documentation.html
Normal file
File diff suppressed because one or more lines are too long
@@ -0,0 +1,123 @@
|
||||
/* Compatability shim for jQuery and underscores.js.
|
||||
*
|
||||
* Copyright Sphinx contributors
|
||||
* Released under the two clause BSD licence
|
||||
*/
|
||||
|
||||
/**
|
||||
* small helper function to urldecode strings
|
||||
*
|
||||
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
|
||||
*/
|
||||
jQuery.urldecode = function(x) {
|
||||
if (!x) {
|
||||
return x
|
||||
}
|
||||
return decodeURIComponent(x.replace(/\+/g, ' '));
|
||||
};
|
||||
|
||||
/**
|
||||
* small helper function to urlencode strings
|
||||
*/
|
||||
jQuery.urlencode = encodeURIComponent;
|
||||
|
||||
/**
|
||||
* This function returns the parsed url parameters of the
|
||||
* current request. Multiple values per key are supported,
|
||||
* it will always return arrays of strings for the value parts.
|
||||
*/
|
||||
jQuery.getQueryParameters = function(s) {
|
||||
if (typeof s === 'undefined')
|
||||
s = document.location.search;
|
||||
var parts = s.substr(s.indexOf('?') + 1).split('&');
|
||||
var result = {};
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
var tmp = parts[i].split('=', 2);
|
||||
var key = jQuery.urldecode(tmp[0]);
|
||||
var value = jQuery.urldecode(tmp[1]);
|
||||
if (key in result)
|
||||
result[key].push(value);
|
||||
else
|
||||
result[key] = [value];
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
/**
|
||||
* highlight a given string on a jquery object by wrapping it in
|
||||
* span elements with the given class name.
|
||||
*/
|
||||
jQuery.fn.highlightText = function(text, className) {
|
||||
function highlight(node, addItems) {
|
||||
if (node.nodeType === 3) {
|
||||
var val = node.nodeValue;
|
||||
var pos = val.toLowerCase().indexOf(text);
|
||||
if (pos >= 0 &&
|
||||
!jQuery(node.parentNode).hasClass(className) &&
|
||||
!jQuery(node.parentNode).hasClass("nohighlight")) {
|
||||
var span;
|
||||
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
|
||||
if (isInSVG) {
|
||||
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
|
||||
} else {
|
||||
span = document.createElement("span");
|
||||
span.className = className;
|
||||
}
|
||||
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
||||
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
|
||||
document.createTextNode(val.substr(pos + text.length)),
|
||||
node.nextSibling));
|
||||
node.nodeValue = val.substr(0, pos);
|
||||
if (isInSVG) {
|
||||
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
|
||||
var bbox = node.parentElement.getBBox();
|
||||
rect.x.baseVal.value = bbox.x;
|
||||
rect.y.baseVal.value = bbox.y;
|
||||
rect.width.baseVal.value = bbox.width;
|
||||
rect.height.baseVal.value = bbox.height;
|
||||
rect.setAttribute('class', className);
|
||||
addItems.push({
|
||||
"parent": node.parentNode,
|
||||
"target": rect});
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!jQuery(node).is("button, select, textarea")) {
|
||||
jQuery.each(node.childNodes, function() {
|
||||
highlight(this, addItems);
|
||||
});
|
||||
}
|
||||
}
|
||||
var addItems = [];
|
||||
var result = this.each(function() {
|
||||
highlight(this, addItems);
|
||||
});
|
||||
for (var i = 0; i < addItems.length; ++i) {
|
||||
jQuery(addItems[i].parent).before(addItems[i].target);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
/*
|
||||
* backward compatibility for jQuery.browser
|
||||
* This will be supported until firefox bug is fixed.
|
||||
*/
|
||||
if (!jQuery.browser) {
|
||||
jQuery.uaMatch = function(ua) {
|
||||
ua = ua.toLowerCase();
|
||||
|
||||
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
|
||||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
|
||||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
|
||||
/(msie) ([\w.]+)/.exec(ua) ||
|
||||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
|
||||
[];
|
||||
|
||||
return {
|
||||
browser: match[ 1 ] || "",
|
||||
version: match[ 2 ] || "0"
|
||||
};
|
||||
};
|
||||
jQuery.browser = {};
|
||||
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
|
||||
}
|
||||
149
refs/docs/WebApi - documentation_files/doctools.js.download
Normal file
149
refs/docs/WebApi - documentation_files/doctools.js.download
Normal file
@@ -0,0 +1,149 @@
|
||||
/*
|
||||
* Base JavaScript utilities for all Sphinx HTML documentation.
|
||||
*/
|
||||
"use strict";
|
||||
|
||||
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
|
||||
"TEXTAREA",
|
||||
"INPUT",
|
||||
"SELECT",
|
||||
"BUTTON",
|
||||
]);
|
||||
|
||||
const _ready = (callback) => {
|
||||
if (document.readyState !== "loading") {
|
||||
callback();
|
||||
} else {
|
||||
document.addEventListener("DOMContentLoaded", callback);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Small JavaScript module for the documentation.
|
||||
*/
|
||||
const Documentation = {
|
||||
init: () => {
|
||||
Documentation.initDomainIndexTable();
|
||||
Documentation.initOnKeyListeners();
|
||||
},
|
||||
|
||||
/**
|
||||
* i18n support
|
||||
*/
|
||||
TRANSLATIONS: {},
|
||||
PLURAL_EXPR: (n) => (n === 1 ? 0 : 1),
|
||||
LOCALE: "unknown",
|
||||
|
||||
// gettext and ngettext don't access this so that the functions
|
||||
// can safely bound to a different name (_ = Documentation.gettext)
|
||||
gettext: (string) => {
|
||||
const translated = Documentation.TRANSLATIONS[string];
|
||||
switch (typeof translated) {
|
||||
case "undefined":
|
||||
return string; // no translation
|
||||
case "string":
|
||||
return translated; // translation exists
|
||||
default:
|
||||
return translated[0]; // (singular, plural) translation tuple exists
|
||||
}
|
||||
},
|
||||
|
||||
ngettext: (singular, plural, n) => {
|
||||
const translated = Documentation.TRANSLATIONS[singular];
|
||||
if (typeof translated !== "undefined")
|
||||
return translated[Documentation.PLURAL_EXPR(n)];
|
||||
return n === 1 ? singular : plural;
|
||||
},
|
||||
|
||||
addTranslations: (catalog) => {
|
||||
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
|
||||
Documentation.PLURAL_EXPR = new Function(
|
||||
"n",
|
||||
`return (${catalog.plural_expr})`
|
||||
);
|
||||
Documentation.LOCALE = catalog.locale;
|
||||
},
|
||||
|
||||
/**
|
||||
* helper function to focus on search bar
|
||||
*/
|
||||
focusSearchBar: () => {
|
||||
document.querySelectorAll("input[name=q]")[0]?.focus();
|
||||
},
|
||||
|
||||
/**
|
||||
* Initialise the domain index toggle buttons
|
||||
*/
|
||||
initDomainIndexTable: () => {
|
||||
const toggler = (el) => {
|
||||
const idNumber = el.id.substr(7);
|
||||
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
|
||||
if (el.src.substr(-9) === "minus.png") {
|
||||
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
|
||||
toggledRows.forEach((el) => (el.style.display = "none"));
|
||||
} else {
|
||||
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
|
||||
toggledRows.forEach((el) => (el.style.display = ""));
|
||||
}
|
||||
};
|
||||
|
||||
const togglerElements = document.querySelectorAll("img.toggler");
|
||||
togglerElements.forEach((el) =>
|
||||
el.addEventListener("click", (event) => toggler(event.currentTarget))
|
||||
);
|
||||
togglerElements.forEach((el) => (el.style.display = ""));
|
||||
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
|
||||
},
|
||||
|
||||
initOnKeyListeners: () => {
|
||||
// only install a listener if it is really needed
|
||||
if (
|
||||
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
|
||||
!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS
|
||||
)
|
||||
return;
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
// bail for input elements
|
||||
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
||||
// bail with special keys
|
||||
if (event.altKey || event.ctrlKey || event.metaKey) return;
|
||||
|
||||
if (!event.shiftKey) {
|
||||
switch (event.key) {
|
||||
case "ArrowLeft":
|
||||
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
||||
|
||||
const prevLink = document.querySelector('link[rel="prev"]');
|
||||
if (prevLink && prevLink.href) {
|
||||
window.location.href = prevLink.href;
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
case "ArrowRight":
|
||||
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
|
||||
|
||||
const nextLink = document.querySelector('link[rel="next"]');
|
||||
if (nextLink && nextLink.href) {
|
||||
window.location.href = nextLink.href;
|
||||
event.preventDefault();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// some keyboard layouts may need Shift to get /
|
||||
switch (event.key) {
|
||||
case "/":
|
||||
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
|
||||
Documentation.focusSearchBar();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
// quick alias for translations
|
||||
const _ = Documentation.gettext;
|
||||
|
||||
_ready(Documentation.init);
|
||||
@@ -0,0 +1,13 @@
|
||||
const DOCUMENTATION_OPTIONS = {
|
||||
VERSION: '4.9.5',
|
||||
LANGUAGE: 'en',
|
||||
COLLAPSE_INDEX: false,
|
||||
BUILDER: 'html',
|
||||
FILE_SUFFIX: '.html',
|
||||
LINK_SUFFIX: '.html',
|
||||
HAS_SOURCE: true,
|
||||
SOURCELINK_SUFFIX: '.txt',
|
||||
NAVIGATION_WITH_KEYS: false,
|
||||
SHOW_SEARCH_SUMMARY: true,
|
||||
ENABLE_SEARCH_SHORTCUTS: true,
|
||||
};
|
||||
File diff suppressed because one or more lines are too long
81
refs/docs/WebApi - documentation_files/pygments.css
Normal file
81
refs/docs/WebApi - documentation_files/pygments.css
Normal file
@@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Brusegan Samuele, Davanzo Andrea
|
||||
* Questo file fa parte di VeyonCtrl ed è rilasciato
|
||||
* sotto la licenza MIT. Vedere il file LICENSE per i dettagli.
|
||||
*/
|
||||
|
||||
pre { line-height: 125%; }
|
||||
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
.highlight .hll { background-color: #ffffcc }
|
||||
.highlight { background: #eeffcc; }
|
||||
.highlight .c { color: #408090; font-style: italic } /* Comment */
|
||||
.highlight .err { border: 1px solid #F00 } /* Error */
|
||||
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
|
||||
.highlight .o { color: #666 } /* Operator */
|
||||
.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
|
||||
.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
|
||||
.highlight .cp { color: #007020 } /* Comment.Preproc */
|
||||
.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
|
||||
.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
|
||||
.highlight .cs { color: #408090; background-color: #FFF0F0 } /* Comment.Special */
|
||||
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
|
||||
.highlight .gr { color: #F00 } /* Generic.Error */
|
||||
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.highlight .go { color: #333 } /* Generic.Output */
|
||||
.highlight .gp { color: #C65D09; font-weight: bold } /* Generic.Prompt */
|
||||
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.highlight .gt { color: #04D } /* Generic.Traceback */
|
||||
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
|
||||
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
|
||||
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
|
||||
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
|
||||
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
|
||||
.highlight .kt { color: #902000 } /* Keyword.Type */
|
||||
.highlight .m { color: #208050 } /* Literal.Number */
|
||||
.highlight .s { color: #4070A0 } /* Literal.String */
|
||||
.highlight .na { color: #4070A0 } /* Name.Attribute */
|
||||
.highlight .nb { color: #007020 } /* Name.Builtin */
|
||||
.highlight .nc { color: #0E84B5; font-weight: bold } /* Name.Class */
|
||||
.highlight .no { color: #60ADD5 } /* Name.Constant */
|
||||
.highlight .nd { color: #555; font-weight: bold } /* Name.Decorator */
|
||||
.highlight .ni { color: #D55537; font-weight: bold } /* Name.Entity */
|
||||
.highlight .ne { color: #007020 } /* Name.Exception */
|
||||
.highlight .nf { color: #06287E } /* Name.Function */
|
||||
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
|
||||
.highlight .nn { color: #0E84B5; font-weight: bold } /* Name.Namespace */
|
||||
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
|
||||
.highlight .nv { color: #BB60D5 } /* Name.Variable */
|
||||
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
|
||||
.highlight .w { color: #BBB } /* Text.Whitespace */
|
||||
.highlight .mb { color: #208050 } /* Literal.Number.Bin */
|
||||
.highlight .mf { color: #208050 } /* Literal.Number.Float */
|
||||
.highlight .mh { color: #208050 } /* Literal.Number.Hex */
|
||||
.highlight .mi { color: #208050 } /* Literal.Number.Integer */
|
||||
.highlight .mo { color: #208050 } /* Literal.Number.Oct */
|
||||
.highlight .sa { color: #4070A0 } /* Literal.String.Affix */
|
||||
.highlight .sb { color: #4070A0 } /* Literal.String.Backtick */
|
||||
.highlight .sc { color: #4070A0 } /* Literal.String.Char */
|
||||
.highlight .dl { color: #4070A0 } /* Literal.String.Delimiter */
|
||||
.highlight .sd { color: #4070A0; font-style: italic } /* Literal.String.Doc */
|
||||
.highlight .s2 { color: #4070A0 } /* Literal.String.Double */
|
||||
.highlight .se { color: #4070A0; font-weight: bold } /* Literal.String.Escape */
|
||||
.highlight .sh { color: #4070A0 } /* Literal.String.Heredoc */
|
||||
.highlight .si { color: #70A0D0; font-style: italic } /* Literal.String.Interpol */
|
||||
.highlight .sx { color: #C65D09 } /* Literal.String.Other */
|
||||
.highlight .sr { color: #235388 } /* Literal.String.Regex */
|
||||
.highlight .s1 { color: #4070A0 } /* Literal.String.Single */
|
||||
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
|
||||
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
|
||||
.highlight .fm { color: #06287E } /* Name.Function.Magic */
|
||||
.highlight .vc { color: #BB60D5 } /* Name.Variable.Class */
|
||||
.highlight .vg { color: #BB60D5 } /* Name.Variable.Global */
|
||||
.highlight .vi { color: #BB60D5 } /* Name.Variable.Instance */
|
||||
.highlight .vm { color: #BB60D5 } /* Name.Variable.Magic */
|
||||
.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,154 @@
|
||||
/* Highlighting utilities for Sphinx HTML documentation. */
|
||||
"use strict";
|
||||
|
||||
const SPHINX_HIGHLIGHT_ENABLED = true
|
||||
|
||||
/**
|
||||
* highlight a given string on a node by wrapping it in
|
||||
* span elements with the given class name.
|
||||
*/
|
||||
const _highlight = (node, addItems, text, className) => {
|
||||
if (node.nodeType === Node.TEXT_NODE) {
|
||||
const val = node.nodeValue;
|
||||
const parent = node.parentNode;
|
||||
const pos = val.toLowerCase().indexOf(text);
|
||||
if (
|
||||
pos >= 0 &&
|
||||
!parent.classList.contains(className) &&
|
||||
!parent.classList.contains("nohighlight")
|
||||
) {
|
||||
let span;
|
||||
|
||||
const closestNode = parent.closest("body, svg, foreignObject");
|
||||
const isInSVG = closestNode && closestNode.matches("svg");
|
||||
if (isInSVG) {
|
||||
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
|
||||
} else {
|
||||
span = document.createElement("span");
|
||||
span.classList.add(className);
|
||||
}
|
||||
|
||||
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
||||
const rest = document.createTextNode(val.substr(pos + text.length));
|
||||
parent.insertBefore(
|
||||
span,
|
||||
parent.insertBefore(
|
||||
rest,
|
||||
node.nextSibling
|
||||
)
|
||||
);
|
||||
node.nodeValue = val.substr(0, pos);
|
||||
/* There may be more occurrences of search term in this node. So call this
|
||||
* function recursively on the remaining fragment.
|
||||
*/
|
||||
_highlight(rest, addItems, text, className);
|
||||
|
||||
if (isInSVG) {
|
||||
const rect = document.createElementNS(
|
||||
"http://www.w3.org/2000/svg",
|
||||
"rect"
|
||||
);
|
||||
const bbox = parent.getBBox();
|
||||
rect.x.baseVal.value = bbox.x;
|
||||
rect.y.baseVal.value = bbox.y;
|
||||
rect.width.baseVal.value = bbox.width;
|
||||
rect.height.baseVal.value = bbox.height;
|
||||
rect.setAttribute("class", className);
|
||||
addItems.push({ parent: parent, target: rect });
|
||||
}
|
||||
}
|
||||
} else if (node.matches && !node.matches("button, select, textarea")) {
|
||||
node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
|
||||
}
|
||||
};
|
||||
const _highlightText = (thisNode, text, className) => {
|
||||
let addItems = [];
|
||||
_highlight(thisNode, addItems, text, className);
|
||||
addItems.forEach((obj) =>
|
||||
obj.parent.insertAdjacentElement("beforebegin", obj.target)
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Small JavaScript module for the documentation.
|
||||
*/
|
||||
const SphinxHighlight = {
|
||||
|
||||
/**
|
||||
* highlight the search words provided in localstorage in the text
|
||||
*/
|
||||
highlightSearchWords: () => {
|
||||
if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
|
||||
|
||||
// get and clear terms from localstorage
|
||||
const url = new URL(window.location);
|
||||
const highlight =
|
||||
localStorage.getItem("sphinx_highlight_terms")
|
||||
|| url.searchParams.get("highlight")
|
||||
|| "";
|
||||
localStorage.removeItem("sphinx_highlight_terms")
|
||||
url.searchParams.delete("highlight");
|
||||
window.history.replaceState({}, "", url);
|
||||
|
||||
// get individual terms from highlight string
|
||||
const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
|
||||
if (terms.length === 0) return; // nothing to do
|
||||
|
||||
// There should never be more than one element matching "div.body"
|
||||
const divBody = document.querySelectorAll("div.body");
|
||||
const body = divBody.length ? divBody[0] : document.querySelector("body");
|
||||
window.setTimeout(() => {
|
||||
terms.forEach((term) => _highlightText(body, term, "highlighted"));
|
||||
}, 10);
|
||||
|
||||
const searchBox = document.getElementById("searchbox");
|
||||
if (searchBox === null) return;
|
||||
searchBox.appendChild(
|
||||
document
|
||||
.createRange()
|
||||
.createContextualFragment(
|
||||
'<p class="highlight-link">' +
|
||||
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
|
||||
_("Hide Search Matches") +
|
||||
"</a></p>"
|
||||
)
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* helper function to hide the search marks again
|
||||
*/
|
||||
hideSearchWords: () => {
|
||||
document
|
||||
.querySelectorAll("#searchbox .highlight-link")
|
||||
.forEach((el) => el.remove());
|
||||
document
|
||||
.querySelectorAll("span.highlighted")
|
||||
.forEach((el) => el.classList.remove("highlighted"));
|
||||
localStorage.removeItem("sphinx_highlight_terms")
|
||||
},
|
||||
|
||||
initEscapeListener: () => {
|
||||
// only install a listener if it is really needed
|
||||
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
// bail for input elements
|
||||
if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
|
||||
// bail with special keys
|
||||
if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
|
||||
if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
|
||||
SphinxHighlight.hideSearchWords();
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
_ready(() => {
|
||||
/* Do not call highlightSearchWords() when we are on the search page.
|
||||
* It will highlight words from the *previous* search query.
|
||||
*/
|
||||
if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
|
||||
SphinxHighlight.initEscapeListener();
|
||||
});
|
||||
4
refs/docs/WebApi - documentation_files/theme.css
Normal file
4
refs/docs/WebApi - documentation_files/theme.css
Normal file
File diff suppressed because one or more lines are too long
1
refs/docs/WebApi - documentation_files/theme.js.download
Normal file
1
refs/docs/WebApi - documentation_files/theme.js.download
Normal file
File diff suppressed because one or more lines are too long
22
refs/docs/WebApi - documentation_files/theme_overrides.css
Normal file
22
refs/docs/WebApi - documentation_files/theme_overrides.css
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (c) 2025. Brusegan Samuele, Davanzo Andrea
|
||||
* Questo file fa parte di VeyonCtrl ed è rilasciato
|
||||
* sotto la licenza MIT. Vedere il file LICENSE per i dettagli.
|
||||
*/
|
||||
|
||||
.image-drop-shadow {
|
||||
filter: drop-shadow(1px 1px 4px black);
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
/* always wrap at whitespaces */
|
||||
.wy-table-responsive table td, .wy-table-responsive table th, code {
|
||||
white-space: normal !important;
|
||||
}
|
||||
|
||||
/* override table width restrictions */
|
||||
.wy-table-responsive {
|
||||
margin-bottom: 24px;
|
||||
max-width: 100%;
|
||||
overflow: visible;
|
||||
}
|
||||
228
refs/docs/WebApi - documentation_files/versions.js.download
Normal file
228
refs/docs/WebApi - documentation_files/versions.js.download
Normal file
@@ -0,0 +1,228 @@
|
||||
const themeFlyoutDisplay = "hidden";
|
||||
const themeVersionSelector = true;
|
||||
const themeLanguageSelector = true;
|
||||
|
||||
if (themeFlyoutDisplay === "attached") {
|
||||
function renderLanguages(config) {
|
||||
if (!config.projects.translations.length) {
|
||||
return "";
|
||||
}
|
||||
|
||||
// Insert the current language to the options on the selector
|
||||
let languages = config.projects.translations.concat(config.projects.current);
|
||||
languages = languages.sort((a, b) => a.language.name.localeCompare(b.language.name));
|
||||
|
||||
const languagesHTML = `
|
||||
<dl>
|
||||
<dt>Languages</dt>
|
||||
${languages
|
||||
.map(
|
||||
(translation) => `
|
||||
<dd ${translation.slug == config.projects.current.slug ? 'class="rtd-current-item"' : ""}>
|
||||
<a href="${translation.urls.documentation}">${translation.language.code}</a>
|
||||
</dd>
|
||||
`,
|
||||
)
|
||||
.join("\n")}
|
||||
</dl>
|
||||
`;
|
||||
return languagesHTML;
|
||||
}
|
||||
|
||||
function renderVersions(config) {
|
||||
if (!config.versions.active.length) {
|
||||
return "";
|
||||
}
|
||||
const versionsHTML = `
|
||||
<dl>
|
||||
<dt>Versions</dt>
|
||||
${config.versions.active
|
||||
.map(
|
||||
(version) => `
|
||||
<dd ${version.slug === config.versions.current.slug ? 'class="rtd-current-item"' : ""}>
|
||||
<a href="${version.urls.documentation}">${version.slug}</a>
|
||||
</dd>
|
||||
`,
|
||||
)
|
||||
.join("\n")}
|
||||
</dl>
|
||||
`;
|
||||
return versionsHTML;
|
||||
}
|
||||
|
||||
function renderDownloads(config) {
|
||||
if (!Object.keys(config.versions.current.downloads).length) {
|
||||
return "";
|
||||
}
|
||||
const downloadsNameDisplay = {
|
||||
pdf: "PDF",
|
||||
epub: "Epub",
|
||||
htmlzip: "HTML",
|
||||
};
|
||||
|
||||
const downloadsHTML = `
|
||||
<dl>
|
||||
<dt>Downloads</dt>
|
||||
${Object.entries(config.versions.current.downloads)
|
||||
.map(
|
||||
([name, url]) => `
|
||||
<dd>
|
||||
<a href="${url}">${downloadsNameDisplay[name]}</a>
|
||||
</dd>
|
||||
`,
|
||||
)
|
||||
.join("\n")}
|
||||
</dl>
|
||||
`;
|
||||
return downloadsHTML;
|
||||
}
|
||||
|
||||
document.addEventListener("readthedocs-addons-data-ready", function (event) {
|
||||
const config = event.detail.data();
|
||||
|
||||
const flyout = `
|
||||
<div class="rst-versions" data-toggle="rst-versions" role="note">
|
||||
<span class="rst-current-version" data-toggle="rst-current-version">
|
||||
<span class="fa fa-book"> Read the Docs</span>
|
||||
v: ${config.versions.current.slug}
|
||||
<span class="fa fa-caret-down"></span>
|
||||
</span>
|
||||
<div class="rst-other-versions">
|
||||
<div class="injected">
|
||||
${renderLanguages(config)}
|
||||
${renderVersions(config)}
|
||||
${renderDownloads(config)}
|
||||
<dl>
|
||||
<dt>On Read the Docs</dt>
|
||||
<dd>
|
||||
<a href="${config.projects.current.urls.home}">Project Home</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="${config.projects.current.urls.builds}">Builds</a>
|
||||
</dd>
|
||||
<dd>
|
||||
<a href="${config.projects.current.urls.downloads}">Downloads</a>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>Search</dt>
|
||||
<dd>
|
||||
<form id="flyout-search-form">
|
||||
<input
|
||||
class="wy-form"
|
||||
type="text"
|
||||
name="q"
|
||||
aria-label="Search docs"
|
||||
placeholder="Search docs"
|
||||
/>
|
||||
</form>
|
||||
</dd>
|
||||
</dl>
|
||||
<hr />
|
||||
<small>
|
||||
<span>Hosted by <a href="https://about.readthedocs.org/?utm_source=&utm_content=flyout">Read the Docs</a></span>
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
// Inject the generated flyout into the body HTML element.
|
||||
document.body.insertAdjacentHTML("beforeend", flyout);
|
||||
|
||||
// Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout.
|
||||
document
|
||||
.querySelector("#flyout-search-form")
|
||||
.addEventListener("focusin", () => {
|
||||
const event = new CustomEvent("readthedocs-search-show");
|
||||
document.dispatchEvent(event);
|
||||
});
|
||||
})
|
||||
}
|
||||
|
||||
if (themeLanguageSelector || themeVersionSelector) {
|
||||
function onSelectorSwitch(event) {
|
||||
const option = event.target.selectedIndex;
|
||||
const item = event.target.options[option];
|
||||
window.location.href = item.dataset.url;
|
||||
}
|
||||
|
||||
document.addEventListener("readthedocs-addons-data-ready", function (event) {
|
||||
const config = event.detail.data();
|
||||
|
||||
const versionSwitch = document.querySelector(
|
||||
"div.switch-menus > div.version-switch",
|
||||
);
|
||||
if (themeVersionSelector) {
|
||||
let versions = config.versions.active;
|
||||
if (config.versions.current.hidden || config.versions.current.type === "external") {
|
||||
versions.unshift(config.versions.current);
|
||||
}
|
||||
const versionSelect = `
|
||||
<select>
|
||||
${versions
|
||||
.map(
|
||||
(version) => `
|
||||
<option
|
||||
value="${version.slug}"
|
||||
${config.versions.current.slug === version.slug ? 'selected="selected"' : ""}
|
||||
data-url="${version.urls.documentation}">
|
||||
${version.slug}
|
||||
</option>`,
|
||||
)
|
||||
.join("\n")}
|
||||
</select>
|
||||
`;
|
||||
|
||||
versionSwitch.innerHTML = versionSelect;
|
||||
versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
|
||||
}
|
||||
|
||||
const languageSwitch = document.querySelector(
|
||||
"div.switch-menus > div.language-switch",
|
||||
);
|
||||
|
||||
if (themeLanguageSelector) {
|
||||
if (config.projects.translations.length) {
|
||||
// Add the current language to the options on the selector
|
||||
let languages = config.projects.translations.concat(
|
||||
config.projects.current,
|
||||
);
|
||||
languages = languages.sort((a, b) =>
|
||||
a.language.name.localeCompare(b.language.name),
|
||||
);
|
||||
|
||||
const languageSelect = `
|
||||
<select>
|
||||
${languages
|
||||
.map(
|
||||
(language) => `
|
||||
<option
|
||||
value="${language.language.code}"
|
||||
${config.projects.current.slug === language.slug ? 'selected="selected"' : ""}
|
||||
data-url="${language.urls.documentation}">
|
||||
${language.language.name}
|
||||
</option>`,
|
||||
)
|
||||
.join("\n")}
|
||||
</select>
|
||||
`;
|
||||
|
||||
languageSwitch.innerHTML = languageSelect;
|
||||
languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
|
||||
}
|
||||
else {
|
||||
languageSwitch.remove();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
document.addEventListener("readthedocs-addons-data-ready", function (event) {
|
||||
// Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav.
|
||||
document
|
||||
.querySelector("[role='search'] input")
|
||||
.addEventListener("focusin", () => {
|
||||
const event = new CustomEvent("readthedocs-search-show");
|
||||
document.dispatchEvent(event);
|
||||
});
|
||||
});
|
||||
463
refs/docs/cli.html
Normal file
463
refs/docs/cli.html
Normal file
@@ -0,0 +1,463 @@
|
||||
|
||||
|
||||
<!--
|
||||
~ Copyright (c) 2025. Brusegan Samuele, Davanzo Andrea
|
||||
~ Questo file fa parte di VeyonCtrl ed è rilasciato
|
||||
~ sotto la licenza MIT. Vedere il file LICENSE per i dettagli.
|
||||
-->
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html class="writer-html5" lang="en" data-content_root="../">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="readthedocs-addons-api-version" content="1"><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Command line interface — PRJ16 4.9.5 documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="https://docs.veyon.io/en/latest/_static/pygments.css?v=03e43079" />
|
||||
<link rel="stylesheet" type="text/css" href="https://docs.veyon.io/en/latest/_static/css/theme.css?v=e59714d7" />
|
||||
<link rel="stylesheet" type="text/css" href="https://docs.veyon.io/en/latest/_static/theme_overrides.css?v=52c6eb83" />
|
||||
|
||||
<link rel="index" title="Index" href="../genindex.html" />
|
||||
<link rel="search" title="Search" href="../search.html" />
|
||||
<link rel="next" title="Configuration reference" href="reference.html" />
|
||||
<link rel="prev" title="LDAP/AD integration" href="ldap.html" />
|
||||
<script async type="text/javascript" src="/_/static/javascript/readthedocs-addons.js"></script><meta name="readthedocs-project-slug" content="PRJ16" /><meta name="readthedocs-version-slug" content="latest" /><meta name="readthedocs-resolver-filename" content="/admin/cli.html" /><meta name="readthedocs-http-status" content="200" /></head>
|
||||
|
||||
<body class="wy-body-for-nav">
|
||||
<div class="wy-grid-for-nav">
|
||||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||||
<div class="wy-side-scroll">
|
||||
<div class="wy-side-nav-search" >
|
||||
|
||||
|
||||
|
||||
<a href="../index.html" class="icon icon-home">
|
||||
PRJ16
|
||||
</a>
|
||||
<div class="switch-menus">
|
||||
<div class="version-switch"></div>
|
||||
<div class="language-switch"></div>
|
||||
</div>
|
||||
<div role="search">
|
||||
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
|
||||
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
</div>
|
||||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
|
||||
<ul class="current">
|
||||
<li class="toctree-l1 current"><a class="reference internal" href="index.html">PRJ16 Administrator Manual</a><ul class="current">
|
||||
<li class="toctree-l2"><a class="reference internal" href="introduction.html">Introduction</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="access-control-rules.html">Access control rules</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="ldap.html">LDAP/AD integration</a></li>
|
||||
<li class="toctree-l2 current"><a class="current reference internal" href="#">Command line interface</a><ul>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#authentication-key-management">Authentication key management</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#configuration-management">Configuration management</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#feature-control">Feature control</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#ldap">LDAP</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#network-object-directory">Network object directory</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#power">Power</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#remote-access">Remote access</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#service-control">Service control</a></li>
|
||||
<li class="toctree-l3"><a class="reference internal" href="#shell">Shell</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="reference.html">Configuration reference</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="platform-notes.html">Platform specific notes</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="release-notes.html">Release notes</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="faq.html">FAQ - Frequently Asked Questions</a></li>
|
||||
<li class="toctree-l2"><a class="reference internal" href="glossary.html">Technical glossary</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../user/index.html">PRJ16 User Manual</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../addons/index.html">PRJ16 Add-ons Integration Manual</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="../developer/index.html">PRJ16 Developer Manual</a></li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
|
||||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||||
<a href="../index.html">PRJ16</a>
|
||||
</nav>
|
||||
|
||||
<div class="wy-nav-content">
|
||||
<div class="rst-content">
|
||||
<div role="navigation" aria-label="Page navigation">
|
||||
<ul class="wy-breadcrumbs">
|
||||
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||||
<li class="breadcrumb-item"><a href="index.html">PRJ16 Administrator Manual</a></li>
|
||||
<li class="breadcrumb-item active">Command line interface</li>
|
||||
<li class="wy-breadcrumbs-aside">
|
||||
<a href="../_sources/admin/cli.rst.txt" rel="nofollow"> View page source</a>
|
||||
</li>
|
||||
</ul>
|
||||
<hr/>
|
||||
</div>
|
||||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||||
<div itemprop="articleBody">
|
||||
|
||||
<section id="command-line-interface">
|
||||
<span id="commandlineinterface"></span><span id="index-0"></span><h1>Command line interface<a class="headerlink" href="#command-line-interface" title="Link to this heading"></a></h1>
|
||||
<p>For administrative tasks, the <em>PRJ16 Configurator</em> and the command line tool <em>PRJ16 CLI</em> are available. The program can be started via the command <code class="docutils literal notranslate"><span class="pre">PRJ16-cli</span></code> in the command line. On Windows there’s an additional non-console version <code class="docutils literal notranslate"><span class="pre">PRJ16-wcli</span></code> which allows automating tasks without irritating command line window popups. If the <span class="target" id="index-1"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">$PATH</span></code> (Linux) or <span class="target" id="index-2"></span><code class="xref std std-envvar docutils literal notranslate"><span class="pre">%PATH%</span></code> (Windows) environment variable does not contain the PRJ16 installation directory, you must first change to the installation directory or prepend the directory to the program name.</p>
|
||||
<p>If the program is called with the <code class="docutils literal notranslate"><span class="pre">help</span></code> parameter, a list of all available modules is displayed. The list can vary depending on the installed PRJ16 plugins:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ PRJ16-cli help
|
||||
Available modules:
|
||||
authkeys - Commands for managing authentication keys
|
||||
config - Commands for managing the configuration of PRJ16
|
||||
ldap - Commands for configuring and testing LDAP/AD integration
|
||||
networkobjects - Commands for managing the builtin network object directory
|
||||
power - Commands for controlling power status of computers
|
||||
remoteaccess - Remote view or control a computer
|
||||
service - Commands for configuring and controlling PRJ16 Service
|
||||
shell - Commands for shell functionalities
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Each CLI module supports the <code class="docutils literal notranslate"><span class="pre">help</span></code> command, so that a list of all available commands can be displayed for each module. Sample output for the <code class="docutils literal notranslate"><span class="pre">config</span></code> module:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ PRJ16-cli config help
|
||||
Available commands:
|
||||
clear - Clear system-wide PRJ16 configuration
|
||||
export - Export configuration to given file
|
||||
get - Read and output configuration value for given key
|
||||
import - Import configuration from given file
|
||||
list - List all configuration keys and values
|
||||
set - Write given value to given configuration key
|
||||
unset - Unset (remove) given configuration key
|
||||
upgrade - Upgrade and save configuration of program and plugins
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>For some modules the <code class="docutils literal notranslate"><span class="pre">help</span></code> command can be supplied with a command name as an additional argument to get specific help for a command:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>$ PRJ16-cli remoteaccess help control
|
||||
|
||||
remoteaccess control <host>
|
||||
</pre></div>
|
||||
</div>
|
||||
<section id="authentication-key-management">
|
||||
<h2>Authentication key management<a class="headerlink" href="#authentication-key-management" title="Link to this heading"></a></h2>
|
||||
<p>The <code class="docutils literal notranslate"><span class="pre">authkeys</span></code> module allows the management of authentication keys so that common operations such as importing an authentication key or assigning a user group can be automated easily.</p>
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<p>The <code class="docutils literal notranslate"><span class="pre"><KEY></span></code> parameter always refers to a key name consisting of a name identifier and a type, e.g. <code class="docutils literal notranslate"><span class="pre">teacher/public</span></code>. A name identifier must consist of letters only. The type has to be either <code class="docutils literal notranslate"><span class="pre">private</span></code> or <code class="docutils literal notranslate"><span class="pre">public</span></code>.</p>
|
||||
</div>
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">create</span> <span class="pre"><NAME></span></span></dt>
|
||||
<dd><p>This command creates a authentication key pair with name <NAME> and saves private and public key to the configured key directories. The parameter must be a name for the key, which may only contain letters.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">delete</span> <span class="pre"><KEY></span></span></dt>
|
||||
<dd><p>This command deletes the authentication key <KEY> from the configured key directory. Please note that a key can’t be recovered once it has been deleted.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">export</span> <span class="pre"><KEY></span> <span class="pre">[<FILE>]</span></span></dt>
|
||||
<dd><p>This command exports the <KEY> to <FILE> authentication key. If <FILE> is not specified a name will be constructed from name and type of <KEY>.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">extract</span> <span class="pre"><KEY></span></span></dt>
|
||||
<dd><p>This command extracts the public key part from the private key <KEY> and saves it as the associated public key. When setting up another master computer, it is therefore sufficient to transfer the private key only. The public key can then be extracted.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">import</span> <span class="pre"><KEY></span> <span class="pre">[<FILE>]</span></span></dt>
|
||||
<dd><p>This command imports the authentication key <KEY> from <FILE>. If <FILE> is not specified a name will be constructed from name and type of <KEY>.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">list</span> <span class="pre">[details]</span></span></dt>
|
||||
<dd><p>This command lists all available authentication keys in the configured key directory. If the <code class="docutils literal notranslate"><span class="pre">details</span></code> option is specified a table with key details will be displayed instead. Some details might be missing if a key is not accessible e.g. due to the lack of read permissions.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">setaccessgroup</span> <span class="pre"><KEY></span> <span class="pre"><ACCESS</span> <span class="pre">GROUP></span></span></dt>
|
||||
<dd><p>This command adjusts file access permissions to <KEY> so that only the user group <ACCESS GROUP> has read access to it.</p>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
<section id="configuration-management">
|
||||
<span id="configurationmanagement"></span><h2>Configuration management<a class="headerlink" href="#configuration-management" title="Link to this heading"></a></h2>
|
||||
<p id="index-3">The local PRJ16 configuration can be managed using the <code class="docutils literal notranslate"><span class="pre">config</span></code> module. Both the complete configuration as individual configuration keys can be read or written.</p>
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">clear</span></span></dt>
|
||||
<dd><p>This command resets the entire local configuration by deleting all configuration keys. Use this command to recreate a defined state without old settings before importing a configuration.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">export</span></span></dt>
|
||||
<dd><p>This command exports the local configuration to a file. The name of the destination file must be specified as an additional parameter:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>PRJ16-cli config export myconfig.json
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">import</span></span></dt>
|
||||
<dd><p>This command imports a previously exported configuration file into the local configuration. The name of the configuration file to be imported must be specified as an additional argument:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>PRJ16-cli config import myconfig.json
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">list</span> <span class="pre">[defaults</span> <span class="pre">|</span> <span class="pre">types]</span></span></dt>
|
||||
<dd><p>This command shows a list of all configuration keys and their corresponding values. This way you can get the names of the configuration keys in order to read or write them individually via the <code class="docutils literal notranslate"><span class="pre">get</span></code> or <code class="docutils literal notranslate"><span class="pre">set</span></code> commands. When additionally specifying <code class="docutils literal notranslate"><span class="pre">defaults</span></code> the default value for each configuration key is printed instead of the actual configured value. Alternatively the data types of the configuration keys can be inspected by specifying <code class="docutils literal notranslate"><span class="pre">types</span></code>.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">get</span></span></dt>
|
||||
<dd><p>This command allows reading a single configuration key. The name of the key must be supplied as a parameter.</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>PRJ16-cli config get Network/PRJ16ServerPort
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">set</span></span></dt>
|
||||
<dd><p>This command can be used to write a single configuration key. The name of the key and the desired value must be passed as additional arguments:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>PRJ16-cli config set Network/PRJ16ServerPort 12345
|
||||
PRJ16-cli config set Service/Autostart true
|
||||
PRJ16-cli config set UI/Language de_DE
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">unset</span></span></dt>
|
||||
<dd><p>With this command a single configuration key can be deleted, i.e. PRJ16 then uses the internal default value. The name of the key must be passed as an additional argument:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>PRJ16-cli config unset Directories/Screenshots
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe" id="cliconfigupgrade">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">upgrade</span></span></dt>
|
||||
<dd><p>With this command the configuration of PRJ16 and all plugins can be updated and saved. This may be necessary if settings or configuration formats have changed due to program or plugin updates.</p>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
<section id="feature-control">
|
||||
<h2>Feature control<a class="headerlink" href="#feature-control" title="Link to this heading"></a></h2>
|
||||
<p id="index-4">The <code class="docutils literal notranslate"><span class="pre">feature</span></code> module provides commands for querying available features and controlling them on remote computers.</p>
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">list</span></span></dt>
|
||||
<dd><p>Displays a list with the names of all available features.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">show</span></span></dt>
|
||||
<dd><p>Displays a table with detailed information about all available features. This information include a description, the UID, the name of the plugin providing the respective feature and some other implementation-related details.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">start</span> <span class="pre"><FEATURE></span> <span class="pre"><HOST</span> <span class="pre">ADRESS></span> <span class="pre">[<ARGUMENTS>]</span></span></dt>
|
||||
<dd><p>Starts the specified feature on the specified host by connecting to the PRJ16 Server running remotely. The feature can be specified by name or UID. Use the <code class="docutils literal notranslate"><span class="pre">show</span></code> command to see all available features. Depending on the feature, additional arguments (such as the text message to display) encoded as a single JSON string have to be specified. Please refer to the developer documentation for more information</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">stop</span> <span class="pre"><FEATURE></span> <span class="pre"><HOST</span> <span class="pre">ADRESS></span></span></dt>
|
||||
<dd><p>Stops the specified feature on the specified host by connecting to the PRJ16 Server running remotely. The feature can be specified by name or UID. Use the <code class="docutils literal notranslate"><span class="pre">show</span></code> command to see all available features.</p>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
<section id="ldap">
|
||||
<h2>LDAP<a class="headerlink" href="#ldap" title="Link to this heading"></a></h2>
|
||||
<p>The commands available in the <code class="docutils literal notranslate"><span class="pre">ldap</span></code> module are documented in section <a class="reference internal" href="ldap.html#ldapcli"><span class="std std-ref">Command line interface</span></a> in chapter <a class="reference internal" href="ldap.html#ldap"><span class="std std-ref">LDAP/AD integration</span></a>.</p>
|
||||
</section>
|
||||
<section id="network-object-directory">
|
||||
<span id="clinetworkobjectdirectory"></span><h2>Network object directory<a class="headerlink" href="#network-object-directory" title="Link to this heading"></a></h2>
|
||||
<p>As described in the section <a class="reference internal" href="configuration.html#conflocationsandcomputers"><span class="std std-ref">Locations & computers</span></a>, PRJ16 provides a built-in network object directory that can be used when no LDAP server is available. This network object directory can be managed in the PRJ16 Configurator as well as on the command line. Certain operations such as CSV import are currently only available on the command line. For most commands, a detailed description with examples is available in the command-specific help. The following commands can be used in the <code class="docutils literal notranslate"><span class="pre">networkobjects</span></code> module:</p>
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">add</span> <span class="pre"><TYPE></span> <span class="pre"><NAME></span> <span class="pre">[<HOST</span> <span class="pre">ADDRESS></span> <span class="pre"><MAC</span> <span class="pre">ADDRESS></span> <span class="pre"><PARENT>]</span></span></dt>
|
||||
<dd><p>This command adds an object, where <code class="docutils literal notranslate"><span class="pre"><TYPE></span></code> can be <code class="docutils literal notranslate"><span class="pre">location</span></code> or <code class="docutils literal notranslate"><span class="pre">computer</span></code>. <code class="docutils literal notranslate"><span class="pre"><PARENT></span></code> can be specified as name or UUID.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">clear</span></span></dt>
|
||||
<dd><p>This command resets the entire network object directory, i.e. all locations and computers are removed. This operation is particularly useful before any automated import.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">dump</span></span></dt>
|
||||
<dd><p>This command outputs the complete network object directory as a flat table. Each property such as object UID, type or name is displayed as a separate column.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">export</span> <span class="pre"><FILE></span> <span class="pre">[location</span> <span class="pre"><LOCATION>]</span> <span class="pre">[format</span> <span class="pre"><FORMAT-STRING-WITH-VARIABLES>]</span></span></dt>
|
||||
<dd><p>This command can be used to export either the complete network object directory or only the specified location to a text file. The formatting can be controlled via a format string containing placeholder variables. This allows generating CSV file easily. Valid variables are <code class="docutils literal notranslate"><span class="pre">%type%</span></code>, <code class="docutils literal notranslate"><span class="pre">%name%</span></code>, <code class="docutils literal notranslate"><span class="pre">%host%</span></code>, <code class="docutils literal notranslate"><span class="pre">%mac%</span></code> and <code class="docutils literal notranslate"><span class="pre">%location%</span></code>. Various examples are given in the command help (<code class="docutils literal notranslate"><span class="pre">PRJ16-cli</span> <span class="pre">networkobjects</span> <span class="pre">help</span> <span class="pre">export</span></code>).</p>
|
||||
</dd></dl>
|
||||
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<p>When using this command in batch files or through scheduled tasks on Windows make sure to properly escape the percent sign, i.e. use <code class="docutils literal notranslate"><span class="pre">%%type%%</span></code> instead of <code class="docutils literal notranslate"><span class="pre">%type%</span></code>. Otherwise the individual parts of the format strings will be treated as environment variables and substituted with empty strings in most cases. This will lead to unexpected parse errors.</p>
|
||||
</div>
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">import</span> <span class="pre"><FILE></span> <span class="pre">[location</span> <span class="pre"><LOCATION>]</span> <span class="pre">[format</span> <span class="pre"><FORMAT-STRING-WITH-VARIABLES>]</span> <span class="pre">[regex</span> <span class="pre"><REGULAR-EXPRESSION-WITH-VARIABLES>]</span></span></dt>
|
||||
<dd><p>This command can be used to import a text file into the network object directory. The processing of the input data can be controlled via a format string or a regular expression containing placeholder variables. This way both CSV files and other types of structured data can be imported. Valid variables are <code class="docutils literal notranslate"><span class="pre">%type%</span></code>, <code class="docutils literal notranslate"><span class="pre">%name%</span></code>, <code class="docutils literal notranslate"><span class="pre">%host%</span></code>, <code class="docutils literal notranslate"><span class="pre">%mac%</span></code> and <code class="docutils literal notranslate"><span class="pre">%location%</span></code>. Various examples are given in the command help (<code class="docutils literal notranslate"><span class="pre">PRJ16-cli</span> <span class="pre">networkobjects</span> <span class="pre">help</span> <span class="pre">import</span></code>).</p>
|
||||
</dd></dl>
|
||||
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<p>When using this command in batch files or through scheduled tasks on Windows make sure to properly escape the percent sign, i.e. use <code class="docutils literal notranslate"><span class="pre">%%type%%</span></code> instead of <code class="docutils literal notranslate"><span class="pre">%type%</span></code>. Otherwise the individual parts of the format strings will be treated as environment variables and substituted with empty strings in most cases. This will lead to unexpected parse errors.</p>
|
||||
</div>
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">list</span></span></dt>
|
||||
<dd><p>This command prints the complete network object directory as a formatted list. Unlike the <code class="docutils literal notranslate"><span class="pre">dump</span></code> command, the hierarchy of locations and computers is represented by appropriate formatting.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">remove</span> <span class="pre"><OBJECT></span></span></dt>
|
||||
<dd><p>This command removes the specified object from the directory. OBJECT can be specified by name or UUID. Removing a location will also remove all related computers.</p>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
<section id="power">
|
||||
<h2>Power<a class="headerlink" href="#power" title="Link to this heading"></a></h2>
|
||||
<p>The <code class="docutils literal notranslate"><span class="pre">power</span></code> module allows using power-related functions from the command line.</p>
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">on</span> <span class="pre"><MAC</span> <span class="pre">ADDRESS></span></span></dt>
|
||||
<dd><p>This command broadcasts a Wake-on-LAN (WOL) packet to the network in order to power on the computer with the given MAC address.</p>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
<section id="remote-access">
|
||||
<h2>Remote access<a class="headerlink" href="#remote-access" title="Link to this heading"></a></h2>
|
||||
<p>The <code class="docutils literal notranslate"><span class="pre">remoteaccess</span></code> module provides functions for a graphical remote access to computers. These are the same functions that can be accessed from the PRJ16 Master. The function provided by the command line tool can be used for example to create an program shortcut for direct access to a specific computer.</p>
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">control</span></span></dt>
|
||||
<dd><p>This command opens a window with the remote control function that can be used to control a remote computer. The computer name or IP address (and optionally the TCP port) must be passed as an argument:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>PRJ16-cli remoteaccess control 192.168.1.2
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">view</span></span></dt>
|
||||
<dd><p>This command opens a window with the remote view function to monitor a remote computer. In this mode the screen content is displayed in real time, but interaction with the computer is not possible until the corresponding button on the tool bar has been clicked. The computer or IP address (and optionally the TCP port) has to be passed as an argument:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>PRJ16-cli remoteaccess view pc5:5900
|
||||
</pre></div>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
<section id="service-control">
|
||||
<h2>Service control<a class="headerlink" href="#service-control" title="Link to this heading"></a></h2>
|
||||
<p id="index-5">The <code class="docutils literal notranslate"><span class="pre">service</span></code> module can be used to control the local PRJ16 Service.</p>
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">register</span></span></dt>
|
||||
<dd><p>This command registers the PRJ16 Service as a service in the operating system so that it is automatically started when the computer boots.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">unregister</span></span></dt>
|
||||
<dd><p>This command removes the service registration in the operating system so that the PRJ16 Service is no longer automatically started at boot time.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">start</span></span></dt>
|
||||
<dd><p>This command starts the PRJ16 Service.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">stop</span></span></dt>
|
||||
<dd><p>This command stops the PRJ16 Service.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">restart</span></span></dt>
|
||||
<dd><p>This command restarts the PRJ16 Service.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">status</span></span></dt>
|
||||
<dd><p>This command queries and displays the status of the PRJ16 Service.</p>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
<section id="shell">
|
||||
<h2>Shell<a class="headerlink" href="#shell" title="Link to this heading"></a></h2>
|
||||
<p>Simple shell functionalities are provided by the <code class="docutils literal notranslate"><span class="pre">shell</span></code> module. If this module is called without further arguments, an interactive mode is started. In this mode, all CLI commands can be entered directly without having to specify and call the <code class="docutils literal notranslate"><span class="pre">PRJ16-cli</span></code> program for each command. The mode can be left by entering the keyword <code class="docutils literal notranslate"><span class="pre">exit</span></code>.</p>
|
||||
<p>Furthermore the module can be used for automated processing of commands in a text file in order to implement simple batch processing:</p>
|
||||
<dl class="describe">
|
||||
<dt class="sig sig-object">
|
||||
<span class="sig-name descname"><span class="pre">run</span> <span class="pre"><FILE></span></span></dt>
|
||||
<dd><p>This command executes the commands specified in the text file line by line. Operations are executed independently of the result of previous operations, i.e. an error does not lead to termination.</p>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
|
||||
<a href="ldap.html" class="btn btn-neutral float-left" title="LDAP/AD integration" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
|
||||
<a href="reference.html" class="btn btn-neutral float-right" title="Configuration reference" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
<div role="contentinfo">
|
||||
<p>© Copyright 2017-2025, PRJ16 Solutions.</p>
|
||||
</div>
|
||||
|
||||
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
|
||||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
|
||||
provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
||||
|
||||
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function () {
|
||||
SphinxRtdTheme.Navigation.enable(true);
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user