{"id":26119375,"url":"https://github.com/baldomo/webapi-dav","last_synced_at":"2025-08-31T05:34:10.179Z","repository":{"id":51258947,"uuid":"148009762","full_name":"Baldomo/webapi-dav","owner":"Baldomo","description":"Servizio API pubblico per liceodavinci.tv","archived":false,"fork":false,"pushed_at":"2021-05-18T19:18:55.000Z","size":4900,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-10T12:53:42.680Z","etag":null,"topics":["api-server","go","golang-module","rest-api"],"latest_commit_sha":null,"homepage":"http://www.liceodavinci.tv/api","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Baldomo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-09-09T09:10:05.000Z","updated_at":"2021-05-18T19:14:16.000Z","dependencies_parsed_at":"2022-09-26T19:12:07.188Z","dependency_job_id":null,"html_url":"https://github.com/Baldomo/webapi-dav","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/Baldomo/webapi-dav","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Baldomo%2Fwebapi-dav","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Baldomo%2Fwebapi-dav/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Baldomo%2Fwebapi-dav/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Baldomo%2Fwebapi-dav/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Baldomo","download_url":"https://codeload.github.com/Baldomo/webapi-dav/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Baldomo%2Fwebapi-dav/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272940985,"owners_count":25019018,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-server","go","golang-module","rest-api"],"created_at":"2025-03-10T12:34:32.655Z","updated_at":"2025-08-31T05:34:10.153Z","avatar_url":"https://github.com/Baldomo.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\r\n  \u003cimg src=\"docs/logo.png\" width=\"100\" /\u003e\r\n\u003c/p\u003e\r\n\u003ch1 align=\"center\"\u003ewebapi-dav\u003c/h1\u003e\r\n\r\nQuesta è la documentazione ufficiale di Da Vinci API (`webapi-dav`), contenente utilizzo e configurazione del webserver.\r\n\r\n## Indice\r\n- [Indice](#indice)\r\n- [Compilazione](#compilazione)\r\n    - [Esempio di workflow (debug)](#esempio-di-workflow-debug)\r\n    - [Esempio di workflow (release)](#esempio-di-workflow-release)\r\n- [Esecuzione](#esecuzione)\r\n    - [Variabili d'ambiente](#variabili-dambiente)\r\n    - [Apache](#apache)\r\n- [Configurazione](#configurazione)\r\n    - [Generali](#generali)\r\n    - [Connessione](#connessione)\r\n      - [HTTP](#http)\r\n    - [Cartelle](#cartelle)\r\n    - [Database](#database)\r\n    - [Logging](#logging)\r\n      - [Note:](#note)\r\n- [Esempi configurazione](#esempi-configurazione)\r\n    - [TOML](#toml)\r\n    - [JSON](#json)\r\n- [Comunicati](#comunicati)\r\n- [Altro](#altro)\r\n\r\n## Compilazione\r\nTutte le funzionalità utili a compilare/testare il progetto sono incluse nel file `build.go`. Per ottenere una vista generale delle opzioni disponibili, si veda `go run build.go --help` o il contenuto del file. Di seguito sono riportati alcuni esempi di comandi per compilare/testare `webapi-dav`.\r\n\r\n**Nota:** la sintassi dei comandi è sempre `go run build.go \u003copzioni\u003e \u003ccomando\u003e`\r\n\r\n#### Esempio di workflow (debug)\r\nCompilazione del progetto (senza creazioni di archivi compressi, si suppone ambiente Linux):\r\n```\r\ngo run build.go -os linux -fast build\r\n```\r\n\r\nCreazione dell'ambiente di test runtime ed esecuzione del server (vengono copiati i file di configurazione e creati una serie di finti file PDF per simulare i comunicati):\r\n```\r\ngo run build.go -run deploy\r\n```\r\n\r\nRimozione dell'ambiente creato:\r\n```\r\ngo run build.go clean\r\n```\r\n\r\n#### Esempio di workflow (release)\r\nEsecuzione dei test integrati:\r\n```\r\ngo run build.go test\r\n```\r\n\r\nCompilazione del progetto (si suppone ambiente Linux):\r\n```\r\ngo run build.go -os windows build\r\n```\r\n\r\n## Esecuzione\r\nL'eseguibile accetta un solo parametro all'esecuzione: `-config file.{json/toml}`,\r\nper specificare manualmente il percorso del file di configurazione. Anche se il file non avesse\r\nl'estensione corretta, il programma cercherà di interpretarlo e, se valido,\r\nlo utilizzerà.\r\n\r\n#### Variabili d'ambiente\r\n`webapi-dav` utilizza varie variabili d'ambiente per accedere a credenziali sensibili senza doverle memorizzare in un file.\r\n\r\n- `WEBAPI_DB_USER`: username per l'accesso al database degli eventi MySQL\r\n- `WEBAPI_DB_PWD`: password per l'accesso al database degli eventi MySQL\r\n- `WEBAPI_FCM_KEY`: chiave API per il servizio di Firebase Cloud Messaging (notifiche comunicati)\r\n\r\nIn caso le variabili `WEBAPI_DB_*` non siano inizializzate, la connessione al database non viene eseguita e qualunque query viene semplicemente terminata, per cui ogni richiesta REST riceve come risultato un array JSON vuoto. Per quanto riguarda `WEBAPI_FCM_KEY`, se nulla le notifiche non vengono inviate.\r\n\r\n#### Apache\r\nPer utilizzare `webapi-dav` con Apache è necessario usare `mod_proxy`; moduli richiesti:\r\n```apache\r\nLoadModule headers_module modules/mod_headers.so\r\nLoadModule proxy_module modules/mod_proxy.so\r\nLoadModule proxy_connect_module modules/mod_proxy_connect.so\r\nLoadModule proxy_html_module modules/mod_proxy_html.so\r\nLoadModule proxy_http_module modules/mod_proxy_http.so\r\nLoadModule slotmem_shm_module modules/mod_slotmem_shm.so\r\nLoadModule socache_shmcb_module modules/mod_socache_shmcb.so\r\nLoadModule xml2enc_module modules/mod_xml2enc.so\r\n```\r\n\r\nVirtualHost per redirezionamento richieste HTTP:\r\n```apache\r\n\u003cVirtualHost *:80\u003e\r\n    ServerName localhost/api\r\n\r\n    ProxyRequests Off\r\n    ProxyVia Off\r\n\r\n    ProxyPass /api http://127.0.0.1:80/api\r\n    ProxyPassReverse /api http://127.0.0.1:80/api\r\n\u003c/VirtualHost\u003e\r\n```\r\n\r\nVirtualHost per redirezionamento richieste HTTPS:\r\n```apache\r\n\u003cVirtualHost *:443\u003e\r\n    ServerName localhost/api\r\n\r\n    ProxyRequests Off\r\n    ProxyVia Off\r\n\r\n    ProxyPass /api http://127.0.0.1:443/api\r\n    ProxyPassReverse /api http://127.0.0.1:443/api\r\n\u003c/VirtualHost\u003e\r\n```\r\n\r\n\r\n## Configurazione\r\nSono accettate configurazioni in formato `toml` e `json`. Gli [esempi](#esempi-configurazione)\r\ncontengono la configurazione di default in entrambi i formati.\r\nChiavi e parametri:\r\n\r\n#### Generali\r\n| Nome                 | Tipo    | Valori             | Descrizione |\r\n|----------------------|---------|--------------------|-------------|\r\n| `fqdn_sito`          | string  | URL                | Dominio base del server (es. `liceodavinci.tv`) |\r\n| `notifiche`          | boolean | `true, false`      | Attiva il servizio di notifiche tramite Firebase |\r\n| `riavvio_automatico` | boolean | `true, false`      | Ancora da implementare, non funzionante |\r\n\r\n---\r\n\r\n#### Connessione\r\n\r\n##### HTTP\r\n| Nome                 | Tipo     | Valori         | Descrizione |\r\n|----------------------|----------|----------------|-------------|\r\n| `porta`              | string   | \"numero porta\" | Indica la porta che il server userà per le connessioni HTTP in entrata |\r\n\r\n---\r\n\r\n#### Cartelle\r\n| Nome                  | Tipo    | Valori             | Descrizione |\r\n|-----------------------|---------|--------------------|-------------|\r\n| `html`                | string  | \"/percorso/\"       | Percorso della cartella che contiene i file HTML per le pagine web |\r\n| `path_comunicati`     | string  | \"/percorso/\"       | Percorso della cartella comunicati |\r\n| `comunicati_genitori` | string  | \"/percorso/\"       | Percorso della sottocartella comunicati genitori |\r\n| `comunicati_studenti` | string  | \"/percorso/\"       | Percorso della sottocartella comunicati studenti |\r\n| `comunicati_docenti`  | string  | \"/percorso/\"       | Percorso della sottocartella comunicati docenti |\r\n| `progetti`            | string  | \"/percorso/\"       | Percorso della cartella progetti (**non ancora implementato**) |\r\n| `orario`              | string  | \"/percorso/\"       | Percorso del file esportato dal gestionale dell'orario, contenente la tabella Attività in XML |\r\n\r\n---\r\n\r\n#### Database\r\n| Nome       | Tipo    | Valori             | Descrizione |\r\n|------------|---------|--------------------|-------------|\r\n| `database` | string  | `true, false`      | Nome del database Joomla contenente l'agenda |\r\n| `timeout`  | integer | numero intero      | Timeout per connessione al database |\r\n\r\n---\r\n\r\n#### Logging\r\n| Nome          | Tipo    | Valori                    | Descrizione |\r\n|---------------|---------|---------------------------|-------------|\r\n| `abilitato`   | boolean | `true, false`             | Avvia il servizio di logging |\r\n| `file_log`    | string  | \"/percorso/\"              | Percorso del file di log, se non esiste sarà creato. |\r\n| `livello_log` | string  | \"verbose, error, warning\" | Definisce il livello di verbosità dei log, con \"verbose\" il massimo (ogni evento sarà tracciato) e \"error\" il minimo (solo gli errori interni saranno tracciati) |\r\n\r\n##### Note:\r\n- Se il logging è disabilitato, nessun evento sarà tracciato\r\n- I log ruotano automaticamente ogni 30 giorni o ogni 5 MB occupati per file, dopodichè saranno\r\n    rinominati con la data corrente e compattati in un archivio zip\r\n\r\n---\r\n\r\n## Esempi configurazione\r\n#### TOML\r\nEsempio di `config.toml` (in quella di default le cartelle non sono specificate):\r\n\r\n```toml\r\n[generali]\r\nfqdn_sito = \"liceodavinci.tv\"\r\nnotifiche = false\r\n\r\n[autenticazione]\r\nchiave_firma = \"secret\"\r\n\r\n[http]\r\nporta = \":8080\"\r\n\r\n[db]\r\ndatabase = \"sitoliceo\"\r\n\r\n[cartelle]\r\nhtml = \"docs\"\r\npath_comunicati = \"/sitoLiceo/images/comunicati/\"\r\ncomunicati_genitori = \"comunicati-genitori\"\r\ncomunicati_studenti = \"comunicati-studenti\"\r\ncomunicati_docenti = \"comunicati-docenti\"\r\norario = \"orario.xml\"\r\n\r\n[logging]\r\nabilitato = true\r\nfile_log = \"./run.log\"\r\nlivello_log = \"verbose\"\r\n```\r\n\r\n#### JSON\r\nEsempio di `config.json` (in quella di default le cartelle non sono specificate):\r\n```json\r\n{\r\n  \"generali\": {\r\n    \"fqdn_sito\": \"liceodavinci.tv\",\r\n    \"notifiche\": false\r\n  },\r\n  \"autenticazione\": {\r\n    \"chiave_firma\": \"secret\"\r\n  },\r\n  \"http\": {\r\n    \"porta\": \":8080\"\r\n  },\r\n  \"db\": {\r\n    \"database\": \"sitoliceo\"\r\n  },\r\n  \"cartelle\": {\r\n    \"html\": \"docs\",\r\n    \"path_comunicati\": \"/sitoLiceo/images/comunicati/\",\r\n    \"comunicati_genitori\": \"comunicati-genitori\",\r\n    \"comunicati_studenti\": \"comunicati-studenti\",\r\n    \"comunicati_docenti\": \"comunicati-docenti\",\r\n    \"orario\": \"orario.xml\"\r\n  },\r\n  \"logging\": {\r\n    \"abilitato\": true,\r\n    \"file_log\": \"./run.log\",\r\n    \"livello_log\": \"verbose\"\r\n  }\r\n}\r\n```\r\n\r\n## Comunicati\r\nQualunque cartella contenente file può essere esposta nella configurazione: la API\r\nterrà in memoria una lista dei comunicati secondo la struttura:\r\n```go\r\ntype Comunicato struct {\r\n    Nome  string    // nome del file\r\n    Data  time.Time // data di ultima modifica\r\n    Tipo  string    // \"genitori\", \"studenti\" o \"docenti\"\r\n    URL   string    // link diretto al PDF\r\n}\r\n```\r\nEsempio di risposta di singolo comunicato in JSON:\r\n```json\r\n{\r\n  \"nome\":\"177_corsa campestre istituto.pdf\",\r\n  \"data\":\"2017-11-26T10:30:49.272711528+01:00\",\r\n  \"tipo\":\"studenti\",\r\n  \"url\":\"http://liceodavinci.tv/sitoLiceo/comunicati/comunicati-studenti/...\"\r\n}\r\n```\r\n\r\n## Altro\r\nVersion, About, ecc: risposta JSON:\r\n```json\r\n{\r\n  \"codice\": 200,\r\n  \"info\": \"Leonardo Baldin, v0.3.0, (c) 2017\"\r\n}\r\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaldomo%2Fwebapi-dav","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbaldomo%2Fwebapi-dav","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaldomo%2Fwebapi-dav/lists"}