{
	"openapi": "3.0.3",
	"info": {
		"title": "MyTown — ws_spring_portal_login",
		"version": "1.1.0",
		"description": "Autenticazione e accesso al portale: login con secondo fattore, refresh del token, registrazione utente, reset password, SPID, comuni e traduzioni.\n\nDocumentazione generata automaticamente dal codice sorgente da `platform/tools/openapi-gen`.\nNon modificare a mano: le modifiche vanno fatte nei controller e la specifica va rigenerata.\n\nAutenticazione: token JWT nell’header `Authorization: Bearer <token>`, ottenuto da\n`POST /ws_spring_portal_login/api/login`. Gli endpoint marcati come pubblici non richiedono il token.",
		"license": {
			"name": "AGPL-3.0-or-later",
			"url": "https://www.gnu.org/licenses/agpl-3.0.html"
		}
	},
	"servers": [
		{
			"url": "/portal_service_ws_spring_login/api",
			"description": "Stesso host, servizi esposti alla radice (Tomcat diretto)"
		},
		{
			"url": "/api/portal_service_ws_spring_login/api",
			"description": "Stesso host, servizi dietro reverse proxy montato su /api (vedi platform/INSTALL.md)"
		},
		{
			"url": "{host}/portal_service_ws_spring_login/api",
			"description": "Host esplicito",
			"variables": {
				"host": {
					"default": "http://localhost:8080",
					"description": "Schema e host del server applicativo"
				}
			}
		}
	],
	"tags": [
		{
			"name": "Login",
			"description": "Endpoint di LoginController (src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java)"
		},
		{
			"name": "SchedulerLogin",
			"description": "Endpoint di SchedulerLoginController (src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/SchedulerLoginController.java)"
		},
		{
			"name": "Translation",
			"description": "Endpoint di TranslationController (src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java)"
		}
	],
	"paths": {
		"/api/changelang/{lang}": {
			"get": {
				"tags": [
					"Login"
				],
				"summary": "changelang",
				"description": "Sorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:195` — `LoginController.changelang()`.",
				"operationId": "LoginController.changelang",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:195",
				"parameters": [
					{
						"name": "lang",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK"
					},
					"401": {
						"description": "Non autenticato: token JWT assente, scaduto o non valido"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				}
			}
		},
		"/api/check_token_registration/{number}/{token}": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "check token registration",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/check_token_registration/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:308` — `LoginController.check_token_registration()`.",
				"operationId": "LoginController.check_token_registration",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:308",
				"parameters": [
					{
						"name": "User-Agent",
						"in": "header",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "number",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "token",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "string"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "integer",
									"format": "int32"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/check_token_sms": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "check token sms",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/check_token_sms/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:97` — `LoginController.check_token_sms()`.",
				"operationId": "LoginController.check_token_sms",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:97",
				"parameters": [
					{
						"name": "User-Agent",
						"in": "header",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "number",
						"in": "query",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "token",
						"in": "query",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "remember_me",
						"in": "query",
						"required": true,
						"schema": {
							"type": "boolean"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/UserDeviceExt"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/UserPortal"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"403": {
						"description": "Non autorizzato per il ruolo dell’utente"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/comuni": {
			"get": {
				"tags": [
					"Login"
				],
				"summary": "comuni list",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/comuni/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:117` — `LoginController.comuni_list()`.",
				"operationId": "LoginController.comuni_list",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:117",
				"parameters": [
					{
						"name": "User-Agent",
						"in": "header",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"$ref": "#/components/schemas/Comune"
									}
								}
							}
						}
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/confirm_app/{id}/{action}": {
			"delete": {
				"tags": [
					"Login"
				],
				"summary": "login confirm app",
				"description": "Sorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:186` — `LoginController.login_confirm_app()`.",
				"operationId": "LoginController.login_confirm_app",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:186",
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					},
					{
						"name": "action",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK"
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"401": {
						"description": "Non autenticato: token JWT assente, scaduto o non valido"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				}
			}
		},
		"/api/get_user_info_by_uuid/{uuid}": {
			"get": {
				"tags": [
					"Login"
				],
				"summary": "get User Infoby Uuid",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/get_user_info_by_uuid/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:334` — `LoginController.getUserInfobyUuid()`.",
				"operationId": "LoginController.getUserInfobyUuid",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:334",
				"parameters": [
					{
						"name": "User-Agent",
						"in": "header",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "uuid",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/User"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio"
					}
				},
				"security": []
			}
		},
		"/api/login/{pt_id}": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "login",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/login/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:124` — `LoginController.login()`.",
				"operationId": "LoginController.login",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:124",
				"parameters": [
					{
						"name": "pt_id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/User"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/User"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/login/check_app/{pt_id}": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "login check app",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/login/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:177` — `LoginController.login_check_app()`.",
				"operationId": "LoginController.login_check_app",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:177",
				"parameters": [
					{
						"name": "pt_id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/UserPortal"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/UserPortal"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/login/scheduler/{pt_id}": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "login Scheduler",
				"description": "Login per scheduler/bot (es. collector fotovoltaico): bypassa la verifica a due\r fattori e rilascia il token verificando solo username + password (BCrypt).\r Da usare con un ACCOUNT DI SERVIZIO dedicato.\r\r Allowlist IP opzionale: imposta la system property -Dscheduler.login.allowed.ips\r oppure la env SCHEDULER_LOGIN_ALLOWED_IPS (CSV). Se vuota, l'accesso è consentito\r affidandosi alle credenziali (utile quando il collector è su IP variabili).\n\n**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/login/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:150` — `LoginController.loginScheduler()`.",
				"operationId": "LoginController.loginScheduler",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:150",
				"parameters": [
					{
						"name": "pt_id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/User"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/User"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"403": {
						"description": "Non autorizzato per il ruolo dell’utente"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/refreshtoken/{pt_id}": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "refresh Token App",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/refreshtoken/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:169` — `LoginController.refreshTokenApp()`.",
				"operationId": "LoginController.refreshTokenApp",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:169",
				"parameters": [
					{
						"name": "pt_id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/User"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/User"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/register_user": {
			"put": {
				"tags": [
					"Login"
				],
				"summary": "register User",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/register_user/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:317` — `LoginController.registerUser()`.",
				"operationId": "LoginController.registerUser",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:317",
				"parameters": [
					{
						"name": "User-Agent",
						"in": "header",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/UserRegistration"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/User"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/request_account_deletion": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "request Account Deletion",
				"description": "Endpoint autenticato: l'identità è presa dal token, non dal client.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:246` — `LoginController.requestAccountDeletion()`.",
				"operationId": "LoginController.requestAccountDeletion",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:246",
				"requestBody": {
					"required": false,
					"content": {
						"application/json": {
							"schema": {
								"type": "object",
								"additionalProperties": {
									"type": "string"
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "integer",
									"format": "int32"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"401": {
						"description": "Non autenticato: token JWT assente, scaduto o non valido"
					},
					"500": {
						"description": "Errore interno del servizio"
					}
				}
			}
		},
		"/api/save_nominativo": {
			"put": {
				"tags": [
					"Login"
				],
				"summary": "save nominativo",
				"description": "Sorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:109` — `LoginController.save_nominativo()`.",
				"operationId": "LoginController.save_nominativo",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:109",
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/User"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/User"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"401": {
						"description": "Non autenticato: token JWT assente, scaduto o non valido"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				}
			}
		},
		"/api/scheduler/login/{pt_id}": {
			"post": {
				"tags": [
					"SchedulerLogin"
				],
				"summary": "login Scheduler",
				"description": "Login per scheduler - bypassa verifica SMS\r Protetto da whitelist IP configurabile in application.properties\r\r @param pt_id Portal ID\r @param data User con username e password\r @param request HttpServletRequest per ottenere l'IP del client\r @return User con token JWT\n\n**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/scheduler/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/SchedulerLoginController.java:62` — `SchedulerLoginController.loginScheduler()`.",
				"operationId": "SchedulerLoginController.loginScheduler",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/SchedulerLoginController.java:62",
				"parameters": [
					{
						"name": "pt_id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/User"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/User"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"403": {
						"description": "Non autorizzato per il ruolo dell’utente"
					},
					"500": {
						"description": "Errore interno del servizio"
					}
				},
				"security": []
			}
		},
		"/api/send_mail_reset_user_password": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "send Mail Reset User Password",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/send_mail_reset_user_password/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:230` — `LoginController.sendMailResetUserPassword()`.",
				"operationId": "LoginController.sendMailResetUserPassword",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:230",
				"parameters": [
					{
						"name": "User-Agent",
						"in": "header",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/User"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "integer",
									"format": "int32"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio"
					}
				},
				"security": []
			}
		},
		"/api/send_sms/{isRegistrazione}": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "send sms",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/send_sms/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:49` — `LoginController.send_sms()`.",
				"operationId": "LoginController.send_sms",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:49",
				"parameters": [
					{
						"name": "isRegistrazione",
						"in": "path",
						"required": true,
						"schema": {
							"type": "boolean"
						}
					},
					{
						"name": "rs",
						"in": "query",
						"required": false,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					},
					{
						"name": "User-Agent",
						"in": "header",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/User"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/StringObject"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/send_token_registration": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "send token registration",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/send_token_registration/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:266` — `LoginController.send_token_registration()`.",
				"operationId": "LoginController.send_token_registration",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:266",
				"parameters": [
					{
						"name": "rs",
						"in": "query",
						"required": false,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					},
					{
						"name": "User-Agent",
						"in": "header",
						"required": true,
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/UserRegistration"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/StringObject"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/set_user_last_access": {
			"get": {
				"tags": [
					"Login"
				],
				"summary": "set User Last Access",
				"description": "Sorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:205` — `LoginController.setUserLastAccess()`.",
				"operationId": "LoginController.setUserLastAccess",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:205",
				"responses": {
					"200": {
						"description": "OK"
					},
					"401": {
						"description": "Non autenticato: token JWT assente, scaduto o non valido"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				}
			}
		},
		"/api/translate": {
			"get": {
				"tags": [
					"Translation"
				],
				"summary": "get Translation Manager",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/translate/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:43` — `TranslationController.getTranslationManager()`.",
				"operationId": "TranslationController.getTranslationManager",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:43",
				"parameters": [
					{
						"name": "name",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"default": ""
						}
					},
					{
						"name": "group",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"default": ""
						}
					},
					{
						"name": "order_by",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"default": "name"
						}
					},
					{
						"name": "limit",
						"in": "query",
						"required": false,
						"schema": {
							"type": "integer",
							"format": "int32",
							"default": "20"
						}
					},
					{
						"name": "offset",
						"in": "query",
						"required": false,
						"schema": {
							"type": "integer",
							"format": "int32",
							"default": "0"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			},
			"post": {
				"tags": [
					"Translation"
				],
				"summary": "translate Manager",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/translate/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:59` — `TranslationController.translateManager()`.",
				"operationId": "TranslationController.translateManager",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:59",
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/Translate"
							}
						}
					}
				},
				"responses": {
					"201": {
						"description": "Creato"
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/translate/{id}": {
			"put": {
				"tags": [
					"Translation"
				],
				"summary": "update Translation",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/translate/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:65` — `TranslationController.updateTranslation()`.",
				"operationId": "TranslationController.updateTranslation",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:65",
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"$ref": "#/components/schemas/Translate"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK"
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			},
			"delete": {
				"tags": [
					"Translation"
				],
				"summary": "delete Translation",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/translate/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:72` — `TranslationController.deleteTranslation()`.",
				"operationId": "TranslationController.deleteTranslation",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:72",
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					}
				],
				"responses": {
					"204": {
						"description": "Nessun contenuto"
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			},
			"get": {
				"tags": [
					"Translation"
				],
				"summary": "translate",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/translate/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:33` — `TranslationController.translate()`.",
				"operationId": "TranslationController.translate",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:33",
				"parameters": [
					{
						"name": "id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "cmp_group",
						"in": "query",
						"required": false,
						"schema": {
							"type": "string",
							"default": "standard"
						}
					}
				],
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "string"
								}
							}
						}
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/translate/manager/export": {
			"get": {
				"tags": [
					"Translation"
				],
				"summary": "export All",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/translate/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:78` — `TranslationController.exportAll()`.",
				"operationId": "TranslationController.exportAll",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:78",
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"$ref": "#/components/schemas/Translate"
									}
								}
							}
						}
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/translate/manager/groups": {
			"get": {
				"tags": [
					"Translation"
				],
				"summary": "get Distinct Groups",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/translate/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:54` — `TranslationController.getDistinctGroups()`.\n\nTipo di risposta non deducibile dal sorgente: il metodo restituisce `ResponseEntity<?>`.",
				"operationId": "TranslationController.getDistinctGroups",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:54",
				"responses": {
					"200": {
						"description": "OK"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/translate/manager/import-merge": {
			"post": {
				"tags": [
					"Translation"
				],
				"summary": "import Merge",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/translate/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:98` — `TranslationController.importMerge()`.",
				"operationId": "TranslationController.importMerge",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:98",
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "array",
								"items": {
									"$ref": "#/components/schemas/Translate"
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/translate/manager/import-overwrite": {
			"post": {
				"tags": [
					"Translation"
				],
				"summary": "import Overwrite",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/translate/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:84` — `TranslationController.importOverwrite()`.",
				"operationId": "TranslationController.importOverwrite",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:84",
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "array",
								"items": {
									"$ref": "#/components/schemas/Translate"
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "object"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/translate/manager/preview-merge": {
			"post": {
				"tags": [
					"Translation"
				],
				"summary": "preview Merge",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/translate/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:92` — `TranslationController.previewMerge()`.",
				"operationId": "TranslationController.previewMerge",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/TranslationController.java:92",
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "array",
								"items": {
									"$ref": "#/components/schemas/Translate"
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "array",
									"items": {
										"$ref": "#/components/schemas/Translate"
									}
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ErrorResponse"
								}
							}
						}
					}
				},
				"security": []
			}
		},
		"/api/upd_user_password/{usr_id}": {
			"post": {
				"tags": [
					"Login"
				],
				"summary": "upd User Password",
				"description": "**Endpoint pubblico**: la catena di sicurezza dichiara `security=\"none\"` per `/api/upd_user_password/**`, quindi non richiede autenticazione.\n\nSorgente: `src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:214` — `LoginController.updUserPassword()`.",
				"operationId": "LoginController.updUserPassword",
				"x-source": "src/main/java/com/kondorcs/portal_service_ws_spring_login/controller/LoginController.java:214",
				"parameters": [
					{
						"name": "User-Agent",
						"in": "header",
						"required": true,
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "usr_id",
						"in": "path",
						"required": true,
						"schema": {
							"type": "integer",
							"format": "int32"
						}
					}
				],
				"requestBody": {
					"required": true,
					"content": {
						"application/json": {
							"schema": {
								"type": "array",
								"items": {
									"type": "string"
								}
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "OK",
						"content": {
							"application/json": {
								"schema": {
									"type": "integer",
									"format": "int32"
								}
							}
						}
					},
					"400": {
						"description": "Richiesta non valida"
					},
					"500": {
						"description": "Errore interno del servizio"
					}
				},
				"security": []
			}
		}
	},
	"components": {
		"securitySchemes": {
			"bearerAuth": {
				"type": "http",
				"scheme": "bearer",
				"bearerFormat": "JWT",
				"description": "Token JWT emesso dal servizio di login del portale."
			}
		},
		"schemas": {
			"ErrorResponse": {
				"type": "object",
				"description": "Corpo di errore del gestore centralizzato delle eccezioni (kondorcs-utils, GlobalExceptionHandler). Le proprietà oltre a `requestId` sono presenti solo se il chiamante ha ruolo ADMIN.",
				"properties": {
					"timestamp": {
						"type": "string",
						"format": "date-time"
					},
					"status": {
						"type": "integer",
						"format": "int32"
					},
					"error": {
						"type": "string"
					},
					"message": {
						"type": "string"
					},
					"requestId": {
						"type": "string",
						"description": "Solo nella variante generica (utenti non ADMIN)."
					},
					"rootCause": {
						"type": "string",
						"description": "Solo per ADMIN."
					},
					"formattedRootCause": {
						"type": "string",
						"description": "Solo per ADMIN."
					},
					"location": {
						"type": "string",
						"description": "Solo per ADMIN: classe, metodo e riga."
					},
					"requestUri": {
						"type": "string",
						"description": "Solo per ADMIN."
					},
					"httpMethod": {
						"type": "string",
						"description": "Solo per ADMIN."
					},
					"user": {
						"type": "string",
						"description": "Solo per ADMIN."
					},
					"parameters": {
						"type": "object",
						"additionalProperties": {
							"type": "string"
						},
						"description": "Solo per ADMIN."
					},
					"contentType": {
						"type": "string",
						"description": "Solo per ADMIN."
					},
					"requestHeaders": {
						"type": "object",
						"additionalProperties": {
							"type": "string"
						},
						"description": "Solo per ADMIN."
					},
					"requestBody": {
						"type": "string",
						"description": "Solo per ADMIN, se la richiesta aveva un corpo."
					},
					"stackTrace": {
						"type": "string",
						"description": "Solo per ADMIN e solo se `log.db.write.stacktrace` è attivo."
					}
				}
			},
			"UserDeviceExt": {
				"allOf": [
					{
						"$ref": "#/components/schemas/UserDevice"
					},
					{
						"type": "object",
						"properties": {
							"guid_notifica": {
								"type": "string"
							},
							"device_type": {
								"type": "string"
							}
						}
					}
				]
			},
			"UserDevice": {
				"type": "object",
				"properties": {
					"usd_id": {
						"type": "integer",
						"format": "int32"
					},
					"usd_usr_id": {
						"type": "integer",
						"format": "int32"
					},
					"usd_id_device": {
						"type": "string"
					},
					"usd_device_type": {
						"type": "string"
					},
					"usd_language": {
						"type": "string"
					},
					"usd_model": {
						"type": "string"
					},
					"url": {
						"type": "string"
					}
				}
			},
			"UserPortal": {
				"allOf": [
					{
						"$ref": "#/components/schemas/User"
					},
					{
						"type": "object",
						"properties": {
							"lst_portal": {
								"type": "array",
								"items": {
									"$ref": "#/components/schemas/Portal"
								}
							},
							"portals": {
								"type": "string"
							}
						}
					}
				]
			},
			"Portal": {
				"type": "object",
				"properties": {
					"pt_id": {
						"type": "integer",
						"format": "int32"
					},
					"pt_descrizione": {
						"type": "string"
					}
				}
			},
			"User": {
				"type": "object",
				"properties": {
					"usr_id": {
						"type": "integer",
						"format": "int32"
					},
					"pt_id": {
						"type": "integer",
						"format": "int32"
					},
					"usr_state": {
						"type": "integer",
						"format": "int32"
					},
					"usr_numbid": {
						"type": "integer",
						"format": "int32"
					},
					"usr_username": {
						"type": "string"
					},
					"usr_password": {
						"type": "string"
					},
					"usr_lastname": {
						"type": "string"
					},
					"usr_firstname": {
						"type": "string"
					},
					"usr_displayname": {
						"type": "string"
					},
					"usr_type": {
						"type": "string"
					},
					"usr_mail": {
						"type": "string"
					},
					"usr_iban": {
						"type": "string"
					},
					"token": {
						"type": "string"
					},
					"refresh_token": {
						"type": "string"
					},
					"authorities": {
						"type": "string"
					},
					"id_device": {
						"type": "string"
					},
					"mode_verifica": {
						"type": "string"
					},
					"guid_notifica": {
						"type": "string"
					},
					"usr_codicefiscale": {
						"type": "string"
					},
					"lang": {
						"type": "string"
					},
					"avatar": {
						"type": "string"
					},
					"device_type": {
						"type": "string"
					},
					"usr_phone": {
						"type": "string"
					},
					"usr_privacy": {
						"type": "boolean"
					},
					"exist": {
						"type": "boolean"
					},
					"usr_email_notifications": {
						"type": "boolean"
					},
					"usr_sms_notifications": {
						"type": "boolean"
					},
					"issuedAt": {
						"type": "string",
						"format": "date-time"
					},
					"expiration": {
						"type": "string",
						"format": "date-time"
					}
				}
			},
			"Comune": {
				"type": "object",
				"properties": {
					"codicefiscale": {
						"type": "string"
					},
					"denominazione": {
						"type": "string"
					},
					"codiceprovincia": {
						"type": "string"
					},
					"cap": {
						"type": "string"
					}
				}
			},
			"UserRegistration": {
				"type": "object",
				"properties": {
					"user": {
						"$ref": "#/components/schemas/User"
					},
					"guid": {
						"type": "string"
					}
				}
			},
			"StringObject": {
				"type": "object",
				"properties": {
					"res": {
						"type": "string"
					}
				}
			},
			"Translate": {
				"type": "object",
				"properties": {
					"id": {
						"type": "integer",
						"format": "int32"
					},
					"name": {
						"type": "string"
					},
					"multilingual_text": {
						"$ref": "#/components/schemas/MultilingualText"
					},
					"cmp_group": {
						"type": "string"
					}
				}
			},
			"MultilingualText": {
				"type": "object",
				"properties": {
					"en": {
						"type": "string"
					},
					"it": {
						"type": "string"
					}
				}
			}
		}
	},
	"security": [
		{
			"bearerAuth": []
		}
	]
}
