Author SHA1 Message Date
pierpaolo.mammi 0c9a3ea2c4 Merge branch 'main' into feature/migrate-ai-engineering-suite 2026-08-31 15:53:08 +02:00
pierpaolo.mammi 88c2a9f66b update Proposta CCT Determina templates 2026-08-31 14:28:52 +02:00
pierpaolo.mammi 99ec3384d3 refactor: Bootstrap delle dipendenze non riproducibile 2026-08-27 15:51:05 +02:00
pierpaolo.mammi 6b1020d47c chore: add backlog 2026-08-27 15:50:51 +02:00
pierpaolo.mammi a5b6dadae4 Add elixForms UI automation requests
Reviewed-on: #2
2026-08-27 14:38:13 +02:00
pierpaolo.mammi f362be0a84 add some (not working) backoffice requests 2026-08-27 14:36:08 +02:00
pierpaolo.mammi 986fdb3f43 Merge branch 'main' into feature/elixforms-ui-automation 2026-08-27 13:43:57 +02:00
pierpaolo.mammi dac720bc0b Add Shibboleth collection to environment automation
Reviewed-on: #3
2026-08-27 13:40:19 +02:00
pierpaolo.mammi 9358624392 add shibboleth collection to environment automation 2026-08-27 10:21:51 +02:00
pierpaolo.mammi 4f14efbfc5 update environment files after update to bruno 4.x 2026-08-27 09:45:24 +02:00
pierpaolo.mammi cc6725a39f add requests for gestione schede
rename requests to reflect scope

clean up authorization
2026-08-26 16:06:06 +02:00
pierpaolo.mammi 69fd9af133 add elixforms console credentials to environment 2026-08-26 16:05:02 +02:00
pierpaolo.mammi 49f0ecc163 add cookie retrieval scripts
reorder requests and rename folder
2026-08-26 12:49:14 +02:00
pierpaolo.mammi bdc43c7614 reorder requests 2026-08-25 16:33:11 +02:00
pierpaolo.mammi 4275a34c45 Merge branch 'main' into feature/elixforms-ui-automation 2026-08-25 16:30:37 +02:00
pierpaolo.mammi a40dd803e1 add elixforms requests to simulate UI operativity 2026-08-20 13:04:46 +02:00
48 changed files with 49243 additions and 106 deletions
+187
View File
@@ -0,0 +1,187 @@
# Analisi repository API Collections
## Esito
Il repository ha unarchitettura semplice e appropriata allo scopo, ma la pipeline Bruno → httpyac non è sufficientemente protetta. I rischi principali sono:
1. esempi versionati contenenti dati personali e identificativi di sessione;
2. conversioni httpyac incomplete o incompatibili;
3. tre file YAML non validi per il parser usato dal progetto;
4. test e quality gate quasi assenti.
Non serve una riscrittura generale: gli interventi possono essere incrementali e concentrati sui confini di conversione e validazione.
## Struttura e dipendenze
```text
bruno/workspace.yml
└─ 11 collezioni Bruno / 272 richieste circa
├─ folder e configurazioni ereditate
├─ ambienti e template dei segreti
├─ script Bruno
└─ esempi di request/response versionati
env.json.template
└─ setup-json-environment.ps1 → env.json locale
├─ update-bruno-environments.ps1 → .env Bruno
└─ update-httpyac-environments.ps1 → .env httpyac
bruno/
└─ generate-httpyac-requests.ps1 → autodocs/httpyac/ ignorato da Git
```
Dipendenze esterne:
- PowerShell ≥ 7.5;
- modulo `powershell-yaml`, disponibile localmente in versione 0.4.12;
- Bruno;
- estensione/CLI httpyac, non disponibile nella shell esaminata.
`tools/generate-http-requests/node_modules` è un artefatto locale ignorato, senza manifest versionato, e non costituisce una dipendenza riproducibile del repository.
## Quality gate e test attuali
Non risultano configurati CI, Pester, PSScriptAnalyzer, linting, coverage, scansione dei segreti o validazione automatica delle collezioni.
Controlli read-only eseguiti:
- 5 script PowerShell analizzati: zero errori sintattici;
- 338 file YAML analizzati con `powershell-yaml`;
- 3 YAML non validi;
- 269 richieste analizzabili: 129 GET, 118 POST, 17 PUT, 3 DELETE, 2 PATCH;
- 140 richieste mutative analizzabili;
- solo 4 delle 140 richieste mutative hanno una definizione di test a livello di richiesta;
- i 7 `.env.template` sono attualmente sincronizzati con `env.json.template`;
- nessuna suite automatizzata eseguibile;
- PSScriptAnalyzer e httpyac CLI non presenti.
Gli `examples` presenti nelle collezioni sono snapshot, non test. Lo stato complessivo dei gate è quindi **non superato/non definito**: manca un gate ufficiale e la validazione YAML già fallisce.
## Backlog tecnico prioritizzato
Costo indicativo: **S** < 1 giorno, **M** 13 giorni, **L** > 3 giorni.
### 1. Dati personali e cookie di sessione negli esempi versionati
- **Severità/costo:** Critica / M
- **File/modulo:** esempi Bruno, per esempio [Get Items.yml](<C:/_Git/UniPR/api-collections/bruno/collections/IRIS GW (Gateway) REST API (v1)/WfItems/Get Items.yml:136>) e [Get UserInfo.yml](<C:/_Git/UniPR/api-collections/bruno/collections/Shibboleth/Get UserInfo.yml:76>).
- **Problema:** rilevati identificativi compatibili con codici fiscali in 38 file e cookie/session ID in 20 file. Alcuni esempi includono anche nomi e informazioni organizzative. Il file più grande supera 5,3 MB e 134.000 righe.
- **Rischio:** esposizione di dati personali, conservazione indefinita nella cronologia Git, possibili credenziali di sessione ancora utilizzabili, forte rumore nelle review.
- **Intervento minimo:** verificare lorigine dei dati, invalidare eventuali sessioni ancora valide, redigere o sostituire con dati sintetici gli esempi; limitare gli snapshot alle proprietà indispensabili.
- **Test prima dellintervento:** introdurre una scansione ripetibile per cookie, token e identificativi personali con allowlist esplicita; registrare il baseline prima della redazione.
- **Impatto architetturale:** trasversale sulla politica di gestione degli esempi, senza nuovi layer.
### 2. Tre collezioni non sono parseabili dal convertitore dichiarato
- **Severità/costo:** Alta / S
- **File/modulo:** [Backoffice - Dashboard.yml](<C:/_Git/UniPR/api-collections/bruno/collections/elixForms API v2/Console UI/Backoffice - Dashboard.yml:125>), [Login - Backoffice.yml](<C:/_Git/UniPR/api-collections/bruno/collections/elixForms API v2/Console UI/Login - Backoffice.yml:172>), [Login - Gestione Schede.yml](<C:/_Git/UniPR/api-collections/bruno/collections/elixForms API v2/Console UI/Login - Gestione Schede.yml:140>).
- **Problema:** i literal block contengono righe iniziali whitespace-only che `powershell-yaml` rifiuta. Il generatore propaga lerrore da [Parse-Yaml](C:/_Git/UniPR/api-collections/scripts/generate-httpyac-requests.ps1:26).
- **Rischio:** generazione httpyac interrotta e output parziale o obsoleto.
- **Intervento minimo:** normalizzare quei blocchi e fare fallire il comando con un riepilogo completo dei file invalidi.
- **Test prima dellintervento:** gate che esegua il parsing di tutti i YAML; fixture con il blocco problematico e verifica dellerrore diagnostico.
- **Impatto architetturale:** nessuno; rende affidabile il formato sorgente.
### 3. Script Bruno copiati in httpyac senza adattamento del runtime
- **Severità/costo:** Alta / M
- **File/modulo:** [Parse-HttpBlock](C:/_Git/UniPR/api-collections/scripts/generate-httpyac-requests.ps1:206) e [Build-RequestContent](C:/_Git/UniPR/api-collections/scripts/generate-httpyac-requests.ps1:738).
- **Problema:** 16 file `.http` generati contengono chiamate Bruno come `bru.setVar` e `res.getStatus()`. httpyac documenta invece oggetti quali `response`, `$global` ed `exports`; la copia verbatim attraversa impropriamente il confine tra due runtime diversi. [Documentazione ufficiale httpyac](https://httpyac.github.io/guide/scripting.html)
- **Rischio:** request apparentemente generate ma script e test non eseguibili.
- **Intervento minimo:** tradurre solo le API Bruno effettivamente usate oppure interrompere esplicitamente la conversione dei file non supportati, evitando output silenziosamente difettoso.
- **Test prima dellintervento:** golden test per login, lettura risposta e salvataggio variabile; esecuzione del `.http` generato contro un endpoint mock.
- **Impatto architetturale:** importante sul boundary Bruno→httpyac, ma confinato alladapter esistente.
### 4. I body `multipart-form` vengono ignorati
- **Severità/costo:** Alta / M
- **File/modulo:** [Build-RequestContent](C:/_Git/UniPR/api-collections/scripts/generate-httpyac-requests.ps1:693); richieste interessate includono [AJ Console - Save Object.yml](<C:/_Git/UniPR/api-collections/bruno/collections/elixForms API v2/Console UI/AJ Console - Save Object.yml:15>), [Backoffice - Create Group.yml](<C:/_Git/UniPR/api-collections/bruno/collections/elixForms API v2/Console UI/Backoffice - Create Group.yml:16>) e Login Backoffice.
- **Problema:** il generatore implementa soltanto `json` e `form-urlencoded`; per multipart emette una POST senza body e senza segnalazione.
- **Rischio:** operazioni mutative errate, con comportamento molto diverso dalla richiesta Bruno.
- **Intervento minimo:** supportare multipart per i campi realmente presenti oppure fallire esplicitamente indicando request e body type.
- **Test prima dellintervento:** fixture multipart con campi testo, placeholder e caratteri speciali; confronto golden del body generato.
- **Impatto architetturale:** locale al convertitore.
### 5. Aree mutative quasi prive di protezione automatica
- **Severità/costo:** Alta / L
- **File/modulo:** soprattutto `Cambio stato e-o integrazione`, `Console UI`, ESSE3 e i 93 POST EFTL.
- **Problema:** soltanto 4 delle 140 richieste mutative analizzabili hanno test request-level; non esiste un comando CI che li esegua.
- **Rischio:** regressioni su cambio stato, clone, aggiornamenti, delete e autenticazione scoperte soltanto manualmente.
- **Intervento minimo:** partire da smoke/contract test per autenticazione e operazioni più distruttive, usando ambienti controllati o mock; non è necessario testare subito ogni snapshot.
- **Test prima dellintervento:** definire una matrice minima per status, payload obbligatori, errori 4xx e assenza di effetti collaterali indesiderati.
- **Impatto architetturale:** introduce un gate, non un nuovo layer applicativo.
### 6. Serializzazione `.env` non round-trip safe
- **Severità/costo:** Alta / S
- **File/modulo:** [update-bruno-environments.ps1](C:/_Git/UniPR/api-collections/scripts/update-bruno-environments.ps1:29) e [update-httpyac-environments.ps1](C:/_Git/UniPR/api-collections/scripts/update-httpyac-environments.ps1:26).
- **Problema:** i valori contenenti `#` vengono quotati, ma il parser conserva le quote; una seconda esecuzione può produrre quote duplicate. Apici, newline e altri caratteri dotenv non vengono gestiti sistematicamente.
- **Rischio:** password e token validi diventano inutilizzabili senza errore esplicito.
- **Intervento minimo:** definire escaping e parsing simmetrici per il sottoinsieme dotenv supportato.
- **Test prima dellintervento:** round-trip parametrico per `#`, apici, spazi, `=`, valori vuoti e `null`.
- **Impatto architetturale:** boundary dei segreti; nessun nuovo layer necessario.
### 7. Test errato e dead code nello script “owners”
- **Severità/costo:** Media / S
- **File/modulo:** [SCRIPT - Get Contracts with two or more owners.yml](<C:/_Git/UniPR/api-collections/bruno/collections/IRIS GW (Gateway) REST API (v1)/Contracts/SCRIPT - Get Contracts with two or more owners.yml:113>).
- **Problema:** loutput espone `ownersCount`, ma il test verifica `contributorCount` alla [riga 248](<C:/_Git/UniPR/api-collections/bruno/collections/IRIS GW (Gateway) REST API (v1)/Contracts/SCRIPT - Get Contracts with two or more owners.yml:248>). Il controllo `output.length >= 0` alla riga 258 è tautologico. Rimane inoltre un intero ramo contributor commentato e una funzione department non più utilizzata.
- **Rischio:** fallimenti ingannevoli o test che passano senza verificare laggregazione; manutenzione confusa.
- **Intervento minimo:** correggere la proprietà, usare una fixture non vuota e rimuovere il ramo commentato dopo aver verificato che non sia necessario.
- **Test prima dellintervento:** dataset con zero, uno e più owners e paginazione multipla.
- **Impatto architetturale:** nessuno; elimina una conseguenza concreta del copy/paste.
### 8. Generatore troppo concentrato e accoppiato al nome della cartella EFTL
- **Severità/costo:** Media / M
- **File/modulo:** [generate-httpyac-requests.ps1](C:/_Git/UniPR/api-collections/scripts/generate-httpyac-requests.ps1:420).
- **Problema:** 1.095 righe; `Build-RequestContent` è di 377 righe con circa 63 diramazioni. Il comportamento EFTL è attivato cercando `"EFTL processing"` nel percorso e sovrascrive indiscriminatamente il post-response script alle [righe 733785](C:/_Git/UniPR/api-collections/scripts/generate-httpyac-requests.ps1:733). Inoltre `Parse-Workspace` reimplementa manualmente il parsing pur essendo già disponibile il parser YAML.
- **Rischio:** cambiamenti locali producono regressioni trasversali; rinominare una cartella cambia la semantica.
- **Intervento minimo:** aggiungere test di caratterizzazione e separare soltanto rendering di auth, body e script in funzioni pure; rendere esplicita la modalità EFTL nella configurazione.
- **Test prima dellintervento:** golden test EFTL/non-EFTL, inclusi script senza marker o marker incompleti.
- **Impatto architetturale:** chiarisce il confine tra conversione generica e regola EFTL senza introdurre pattern ulteriori.
### 9. Duplicazione degli updater e variabili dipendenti da rami precedenti
- **Severità/costo:** Media / M
- **File/modulo:** i due `update-*-environments.ps1`, differenti per appena 15 aggiunte e 18 rimozioni.
- **Problema:** `$sectionKeys` viene inizializzata dentro il ramo che trova `.env.template`, ma può essere usata successivamente anche quando il template manca. La duplicazione rende facile correggere un solo updater.
- **Rischio:** chiavi mancanti, riuso accidentale dei valori delliterazione precedente e divergenza Bruno/httpyac.
- **Intervento minimo:** prima inizializzare sempre le chiavi; poi usare ununica funzione parametrizzata per root e policy di esclusione.
- **Test prima dellintervento:** template presente/assente, `.env` presente/assente, chiavi aggiunte/rimosse e valori `null`.
- **Impatto architetturale:** riduce duplicazione di conoscenza nella pipeline dei segreti.
### 10. Bootstrap delle dipendenze non riproducibile
- **Severità/costo:** Media / S
- **File/modulo:** [setup-tools.ps1](C:/_Git/UniPR/api-collections/scripts/setup-tools.ps1:1) e [README.md](C:/_Git/UniPR/api-collections/README.md:18).
- **Problema:** il README promette un tentativo di installazione, ma lo script esegue solo `Import-Module ... -ErrorAction SilentlyContinue` e comunica comunque successo. Non è dichiarata una versione compatibile.
- **Rischio:** una nuova workstation fallisce più avanti con diagnostica poco chiara.
- **Intervento minimo:** verificare presenza/versione e terminare con istruzioni esplicite oppure installare soltanto previo consenso dellutente.
- **Test prima dellintervento:** esecuzione in una sessione senza modulo e con versione incompatibile.
- **Impatto architetturale:** dependency hygiene, nessun cambiamento strutturale.
### 11. Copie e contenuti obsoleti aumentano il rischio di deriva
- **Severità/costo:** Bassa / SM
- **File/modulo:** directory `OLD`, `Obsolete`, file `Get Items Copy.yml`/`Get ASNs Copy.yml` e due coppie di runner completamente identiche.
- **Problema:** duplicazione significativa e snapshot molto grandi; non è però dimostrabile dalla sola analisi statica che siano davvero inutilizzati.
- **Rischio:** correzioni applicate a una sola copia, review lente e crescita del repository.
- **Intervento minimo:** censire uso e ownership; eliminare solo copie confermate inutilizzate o documentarne esplicitamente lo scopo.
- **Test prima dellintervento:** confronto comportamentale delle copie e verifica con gli utilizzatori.
- **Impatto architetturale:** nessuno; pulizia controllata, non refactoring speculativo.
## Invarianti consigliate
I futuri gate dovrebbero verificare almeno che:
- ogni YAML sia parseabile dal parser effettivamente usato;
- nessun body type venga ignorato silenziosamente;
- gli script attraversino Bruno→httpyac solo se tradotti o dichiarati compatibili;
- gli output generati siano prodotti in una directory temporanea e validati;
- i template dei segreti restino sincronizzati;
- esempi e snapshot non contengano credenziali o dati personali non autorizzati.
Non raccomando al momento un ADR formale: basterebbe documentare queste invarianti nel repository e automatizzarle.
Non ho letto il contenuto di `env.json`, non ho eseguito chiamate API e non ho lanciato script che scrivono output. `git status` e `git diff` sono rimasti vuoti: nessun file è stato modificato.
@@ -2,7 +2,10 @@ name: "ESSE3 Anagrafica Pre-Prod #2"
variables: variables:
- name: esse3apiRootUrl - name: esse3apiRootUrl
value: https://unipr2.esse3.pp.cineca.it value: https://unipr2.esse3.pp.cineca.it
description: ""
- name: esse3apiUsername - name: esse3apiUsername
value: "{{process.env.esse3apiUsername}}" value: "{{process.env.esse3apiUsername}}"
description: ""
- name: esse3apiPassword - name: esse3apiPassword
value: "{{process.env.esse3apiPassword}}" value: "{{process.env.esse3apiPassword}}"
description: ""
@@ -2,7 +2,10 @@ name: "ESSE3 Common Auth Pre-Prod #2"
variables: variables:
- name: esse3apiUsername - name: esse3apiUsername
value: "{{process.env.esse3apiUsername}}" value: "{{process.env.esse3apiUsername}}"
description: ""
- name: esse3apiPassword - name: esse3apiPassword
value: "{{process.env.esse3apiPassword}}" value: "{{process.env.esse3apiPassword}}"
description: ""
- name: esse3apiRootUrl - name: esse3apiRootUrl
value: https://unipr2.esse3.pp.cineca.it/e3rest/api value: https://unipr2.esse3.pp.cineca.it/e3rest/api
description: ""
@@ -1,3 +1,3 @@
IdemApiUsername= IdemApiUsername=
IdemApiPassword= IdemApiPassword=
IdemApiKey= IdemApiKey=
@@ -3,9 +3,13 @@ color: "#2E8A54"
variables: variables:
- name: IdemApiUrl - name: IdemApiUrl
value: https://www.idem.unipr.it/ws/elix value: https://www.idem.unipr.it/ws/elix
description: ""
- name: IdemApiUsername - name: IdemApiUsername
value: "{{process.env.IdemApiUsername}}" value: "{{process.env.IdemApiUsername}}"
description: ""
- name: IdemApiPassword - name: IdemApiPassword
value: "{{process.env.IdemApiPassword}}" value: "{{process.env.IdemApiPassword}}"
description: ""
- name: IdemApiKey - name: IdemApiKey
value: "{{process.env.IdemApiKey}}" value: "{{process.env.IdemApiKey}}"
description: ""
@@ -3,9 +3,13 @@ color: "#C77A0F"
variables: variables:
- name: IdemApiUrl - name: IdemApiUrl
value: https://www.idem2.unipr.it/ws/elix value: https://www.idem2.unipr.it/ws/elix
description: ""
- name: IdemApiUsername - name: IdemApiUsername
value: "{{process.env.IdemApiUsername}}" value: "{{process.env.IdemApiUsername}}"
description: ""
- name: IdemApiPassword - name: IdemApiPassword
value: "{{process.env.IdemApiPassword}}" value: "{{process.env.IdemApiPassword}}"
description: ""
- name: IdemApiKey - name: IdemApiKey
value: "{{process.env.IdemApiKey}}" value: "{{process.env.IdemApiKey}}"
description: ""
@@ -3,7 +3,10 @@ color: "#2E8A54"
variables: variables:
- name: IrisApiUrl - name: IrisApiUrl
value: https://air.unipr.it/gw/rest/api value: https://air.unipr.it/gw/rest/api
description: ""
- name: IrisApiUsername - name: IrisApiUsername
value: "{{process.env.IrisApiUsername}}" value: "{{process.env.IrisApiUsername}}"
description: ""
- name: IrisApiPassword - name: IrisApiPassword
value: "{{process.env.IrisApiPassword}}" value: "{{process.env.IrisApiPassword}}"
description: ""
@@ -2,3 +2,4 @@ name: ORDS
variables: variables:
- name: situasBaseUrl - name: situasBaseUrl
value: https://situas-servizi.istat.it/publish value: https://situas-servizi.istat.it/publish
description: ""
@@ -3,5 +3,7 @@ color: "#2E8A54"
variables: variables:
- name: ScopusApiKey1 - name: ScopusApiKey1
value: "{{process.env.ScopusApiKey1}}" value: "{{process.env.ScopusApiKey1}}"
description: ""
- name: ScopusApiKey2 - name: ScopusApiKey2
value: "{{process.env.ScopusApiKey2}}" value: "{{process.env.ScopusApiKey2}}"
description: ""
@@ -5,13 +5,13 @@ info:
http: http:
method: GET method: GET
url: "{{serverUri}}/idp/profile/oidc/authorize?client_id={{clientId}}&redirect_uri={{redirectUri}}&response_type=code&scope=openid profile email" url: "{{shibbolethServerUri}}/idp/profile/oidc/authorize?client_id={{clientId}}&redirect_uri={{clientRedirectUri}}&response_type=code&scope=openid profile email"
params: params:
- name: client_id - name: client_id
value: "{{clientId}}" value: "{{clientId}}"
type: query type: query
- name: redirect_uri - name: redirect_uri
value: "{{redirectUri}}" value: "{{clientRedirectUri}}"
type: query type: query
- name: response_type - name: response_type
value: code value: code
@@ -5,7 +5,7 @@ info:
http: http:
method: POST method: POST
url: "{{serverUri}}/idp/profile/oidc/token" url: "{{shibbolethServerUri}}/idp/profile/oidc/token"
headers: headers:
- name: Content-Type - name: Content-Type
value: application/x-www-form-urlencoded value: application/x-www-form-urlencoded
@@ -15,11 +15,11 @@ http:
- name: grant_type - name: grant_type
value: authorization_code value: authorization_code
- name: redirect_uri - name: redirect_uri
value: "{{redirectUri}}" value: "{{clientRedirectUri}}"
- name: scope - name: scope
value: openid profile email value: openid profile email
- name: code - name: code
value: "" value: AAdzZWNyZXQxcKlGLY3zJzZp-SXBg9tSJp2n8PxhgB5nnYFr1f50GfD69sLo_OZ3t73WEPW2BKhY5sGh6A-dEmu7nX_PCk0QU7UwZEkFTQPu28BPyE11r-aqAZEO88CN0bTZB5nzx8ecAcQMvE8X74rHpmiWDf2YKdQVPlb9N7ON_ALKWx1XmVueinmHiwXFow1hnhZMxZK_Jy0DSmT9QN4pbfyDD2UkRZo4BOgyxqlYiDWWGF39DkVdwJfrduq5HM3yT3bUdR2zB-u25ol6NrOpfkoaM5-QKWexCfmFLx_huZah4vXY0RnvdzE8v5fpLCYVDUwv3gSXpsOuS4Ynf84Wz8Nr6bdaCo8hfHdCvNDtNPEBy7DTQ-2rb3Lgqq_piqj3N9WpBFIqqRQfwHBnKGGr07TXoaEi_fSROZ99VIJaPVJZNTdCNiiR9Sql_78KJr1tapx9eQD2UnkRPlzpBvQU6W4uX4YHqgd0i9sLEBOFv4BkGc9AwpB5ew
description: Paste code obtained by manual flow in browser description: Paste code obtained by manual flow in browser
auth: auth:
type: basic type: basic
@@ -31,7 +31,7 @@ runtime:
- type: after-response - type: after-response
code: |- code: |-
var jsonData = res.getBody(); var jsonData = res.getBody();
bru.setEnvVar("accessToken", jsonData.access_token); bru.setVar("accessToken", jsonData.access_token);
- type: tests - type: tests
code: |- code: |-
test("Status code is 200", function () { test("Status code is 200", function () {
@@ -5,7 +5,7 @@ info:
http: http:
method: GET method: GET
url: "{{serverUri}}/.well-known/openid-configuration" url: "{{shibbolethServerUri}}/.well-known/openid-configuration"
auth: inherit auth: inherit
settings: settings:
@@ -5,7 +5,7 @@ info:
http: http:
method: GET method: GET
url: "{{serverUri}}/idp/profile/oidc/userinfo?client_id={{clientId}}&client_secret={{clientSecret}}" url: "{{shibbolethServerUri}}/idp/profile/oidc/userinfo?client_id={{clientId}}&client_secret={{clientSecret}}"
headers: headers:
- name: Content-Type - name: Content-Type
value: application/x-www-form-urlencoded value: application/x-www-form-urlencoded
@@ -1,17 +1,14 @@
name: Shibboleth name: Shibboleth
variables: variables:
- name: clientId - name: clientId
value: "{{process.env.client_id}}" value: "{{process.env.clientId}}"
description: "" description: ""
- name: clientSecret - name: clientSecret
value: "{{process.env.client_secret}}" value: "{{process.env.clientSecret}}"
description: "" description: ""
- name: redirectUri - name: clientRedirectUri
value: https://gitea.unipr.it/user/oauth2/Shibboleth/callback value: https://gitea.unipr.it/user/oauth2/Shibboleth/callback
description: "" description: ""
- name: accessToken - name: shibbolethServerUri
value: AAdzZWNyZXQx1CToBgEqA8mxMWGsLKf0V86PS2Oz-3bI5BlRuiitj3iXP_qfSJgNzYsMdsIQ9QRmoIOS6ISVvFSyJ5XeHYE_msw6VJELg9S6qsO4mrBBwCaUM9p3zMPwNBwZJVn6vqgGghpMS_xeW2EGthh9W0HBsh7WuPYK4HJVpTYIxgYR782xET0ZU3XxLBknOeMoye2IrH3sYpeCRQCmd1GUyTl1Ra4sGdqYcw3iiISA_FbPMXOLFQN8GcFtEcPxzc9CtH4PHKDYIj_QQx0IUgEH814pyC-Oc5-19Gfg4Ulps9ZHF9rb4csbi9mvWAuJESHcSp5NSAK9tEMFvBUCe_2nr7WyzaGTI1D6Nr1PenxbWIRAmXGF5LtzSrv-8_k8XSdufefACBVbZH6EQWm4smrqSlMab71F5s9wB3rFEK5IuANQblFljG_vfoCATpmk0MCYo47SApSrorMYN5K6yWf4P3PuyQrIdrw0PsRzBWoY8XpzQTGYN1I
description: ""
- name: serverUri
value: https://shibidp.unipr.it value: https://shibidp.unipr.it
description: "" description: ""
@@ -1,3 +1,5 @@
elixFormsWsAuthenticationToken= elixFormsWsAuthenticationToken=
elixFormsApiPassword= elixFormsApiPassword=
elixFormsApiUsername= elixFormsApiUsername=
elixFormsConsoleUsername=
elixFormsConsolePassword=
@@ -1,7 +1,7 @@
info: info:
name: Authorization name: Authorization
type: folder type: folder
seq: 6 seq: 8
request: request:
auth: inherit auth: inherit
@@ -1,7 +1,7 @@
info: info:
name: Calendar 2.0 name: Calendar 2.0
type: folder type: folder
seq: 12 seq: 14
request: request:
auth: inherit auth: inherit
@@ -1,7 +1,7 @@
info: info:
name: Cambio stato e/o integrazione name: Cambio stato e/o integrazione
type: folder type: folder
seq: 10 seq: 12
request: request:
auth: inherit auth: inherit
@@ -1,7 +1,7 @@
info: info:
name: Comunicazioni formali name: Comunicazioni formali
type: folder type: folder
seq: 11 seq: 13
request: request:
auth: inherit auth: inherit
@@ -0,0 +1,107 @@
info:
name: AJ Console - Get Object Title (GENERICSCHEMA)
type: http
seq: 6
http:
method: GET
url: "{{elixFormsRootUrl}}/AJSRV/metadata/objectTitle?ATTR_NAME=master_field&ATTR_VALUE=true&TYPE=GENERICSCHEMA&OBJECT_ID=168258"
headers:
- name: Cookie
value: "{{elixFormsAjsrvCookie}}"
- name: x-requested-with
value: XMLHttpRequest
params:
- name: ATTR_NAME
value: master_field
type: query
- name: ATTR_VALUE
value: "true"
type: query
- name: TYPE
value: GENERICSCHEMA
type: query
- name: OBJECT_ID
value: "168258"
type: query
auth: inherit
runtime:
scripts:
- type: before-request
code: |-
const noCookieFoundError = "No AJSRV cookie found!";
var ajsrvCookie = bru.getVar("elixFormsAjsrvCookie");
if (ajsrvCookie == null || ajsrvCookie === "") {
console.error(noCookieFoundError, ajsrvCookie);
throw new Error(noCookieFoundError);
}
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
forwardAuthorizationHeader: true
examples:
- name: example
request:
url: "{{elixFormsRootUrl}}/AJSRV/metadata/objectTitle?ATTR_NAME=master_field&ATTR_VALUE=true&TYPE=GENERICSCHEMA&OBJECT_ID=168258"
method: GET
headers:
- name: Cookie
value: "{{elixFormsAjsrvCookie}}"
- name: x-requested-with
value: XMLHttpRequest
params:
- name: ATTR_NAME
value: master_field
type: query
- name: ATTR_VALUE
value: "true"
type: query
- name: TYPE
value: GENERICSCHEMA
type: query
- name: OBJECT_ID
value: "168258"
type: query
response:
status: 200
statusText: OK
headers:
- name: date
value: Wed, 26 Aug 2026 10:40:39 GMT
- name: server
value: '""'
- name: content-security-policy
value: "default-src https: data: 'unsafe-inline' 'unsafe-eval'; img-src 'self' blob: data: https:;"
- name: content-type
value: application/json;charset=UTF-8
- name: content-length
value: "17"
- name: set-cookie
value: JSESSIONID=da85f0a0570e23aea6397a8bc94f; Path=/; HttpOnly
- name: strict-transport-security
value: max-age=31536000; includeSubDomains
- name: x-frame-options
value: SAMEORIGIN
- name: x-xss-protection
value: "1"
- name: x-content-type-options
value: nosniff
- name: referrer-policy
value: unsafe-url
- name: keep-alive
value: timeout=10, max=500
- name: connection
value: Keep-Alive
body:
type: json
data: |-
{
"objectList": []
}
@@ -0,0 +1,107 @@
info:
name: AJ Console - Get Object Title (SCHEMADATA)
type: http
seq: 5
http:
method: GET
url: "{{elixFormsRootUrl}}/AJSRV/metadata/objectTitle?ATTR_NAME=master_field&ATTR_VALUE=true&TYPE=SCHEMADATA&OBJECT_ID=35397"
headers:
- name: Cookie
value: "{{elixFormsAjsrvCookie}}"
- name: x-requested-with
value: XMLHttpRequest
params:
- name: ATTR_NAME
value: master_field
type: query
- name: ATTR_VALUE
value: "true"
type: query
- name: TYPE
value: SCHEMADATA
type: query
- name: OBJECT_ID
value: "35397"
type: query
auth: inherit
runtime:
scripts:
- type: before-request
code: |-
const noCookieFoundError = "No AJSRV cookie found!";
var ajsrvCookie = bru.getVar("elixFormsAjsrvCookie");
if (ajsrvCookie == null || ajsrvCookie === "") {
console.error(noCookieFoundError, ajsrvCookie);
throw new Error(noCookieFoundError);
}
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
forwardAuthorizationHeader: true
examples:
- name: example
request:
url: "{{elixFormsRootUrl}}/AJSRV/metadata/objectTitle?ATTR_NAME=master_field&ATTR_VALUE=true&TYPE=SCHEMADATA&OBJECT_ID=35397"
method: GET
headers:
- name: Cookie
value: "{{elixFormsAjsrvCookie}}"
- name: x-requested-with
value: XMLHttpRequest
params:
- name: ATTR_NAME
value: master_field
type: query
- name: ATTR_VALUE
value: "true"
type: query
- name: TYPE
value: SCHEMADATA
type: query
- name: OBJECT_ID
value: "35397"
type: query
response:
status: 200
statusText: OK
headers:
- name: date
value: Wed, 26 Aug 2026 10:40:35 GMT
- name: server
value: Apache
- name: content-security-policy
value: "default-src https: data: 'unsafe-inline' 'unsafe-eval'; img-src 'self' blob: data: https:;"
- name: content-type
value: application/json;charset=UTF-8
- name: content-length
value: "17"
- name: set-cookie
value: JSESSIONID=da84d30d8f6a7c5f0e18dc3b7ebf; Path=/; HttpOnly
- name: strict-transport-security
value: max-age=31536000; includeSubDomains
- name: x-frame-options
value: SAMEORIGIN
- name: x-xss-protection
value: "1"
- name: x-content-type-options
value: nosniff
- name: referrer-policy
value: unsafe-url
- name: keep-alive
value: timeout=10, max=500
- name: connection
value: Keep-Alive
body:
type: json
data: |-
{
"objectList": []
}
@@ -0,0 +1,229 @@
info:
name: AJ Console - Save Object
type: http
seq: 7
http:
method: POST
url: "{{elixFormsRootUrl}}/AJSRV/metadata/save"
headers:
- name: Cookie
value: ISIPSESSION=047b770fac5627c03c94030ca0c3b45c; AJSRV=BTN_USER_1787207482458_8771527838545232265; ISIPSESSION_TRACK=99b2488e73af7c61f6e5affceeb32502; JSESSIONID=e3c44b958c4f282660a5fc8ed994
- name: x-requested-with
value: XMLHttpRequest
body:
type: multipart-form
data:
- name: S_616_168008_COL0009
type: text
value: azione_form_AUTOR_firmaAutorizzazione
auth: inherit
runtime:
scripts:
- type: before-request
code: |-
const noCookieFoundError = "No AJSRV cookie found!";
var ajsrvCookie = bru.getVar("elixFormsAjsrvCookie");
if (ajsrvCookie == null || ajsrvCookie === "") {
console.error(noCookieFoundError, ajsrvCookie);
throw new Error(noCookieFoundError);
}
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
forwardAuthorizationHeader: true
examples:
- name: example
request:
url: "{{elixFormsRootUrl}}/AJSRV/metadata/save"
method: POST
headers:
- name: Accept
value: "*/*"
- name: Accept-Encoding
value: gzip, deflate, br, zstd
- name: Accept-Language
value: it,it-IT;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
disabled: true
- name: Cookie
value: ISIPSESSION=047b770fac5627c03c94030ca0c3b45c; AJSRV=BTN_USER_1787207482458_8771527838545232265; ISIPSESSION_TRACK=99b2488e73af7c61f6e5affceeb32502; JSESSIONID=e3c44b958c4f282660a5fc8ed994
- name: Host
value: console-unipr.elixforms.it
disabled: true
- name: Referer
value: https://console-unipr.elixforms.it/ajconsole/
disabled: true
- name: x-requested-with
value: XMLHttpRequest
body:
type: multipart-form
data:
- name: S_616_168008_COL0009
type: text
value: azione_form_AUTOR_firmaAutorizzazione
response:
status: 200
statusText: OK
headers:
- name: date
value: Wed, 26 Aug 2026 09:01:46 GMT
- name: server
value: '""'
- name: content-security-policy
value: "default-src https: data: 'unsafe-inline' 'unsafe-eval'; img-src 'self' blob: data: https:;"
- name: content-type
value: application/json;charset=UTF-8
- name: content-length
value: "1636"
- name: strict-transport-security
value: max-age=31536000; includeSubDomains
- name: x-frame-options
value: SAMEORIGIN
- name: x-xss-protection
value: "1"
- name: x-content-type-options
value: nosniff
- name: referrer-policy
value: unsafe-url
- name: keep-alive
value: timeout=10, max=500
- name: connection
value: Keep-Alive
body:
type: json
data: |-
{
"errors": {
"objectList": []
},
"result": {
"objectList": [
{
"id": 616,
"title": "WFTemplate",
"dataId": 168008,
"tag": "",
"objectId": 35274,
"sections": [
{
"title": "Template",
"key": "SEC_0006",
"orderKey": "ORD001",
"fields": [
{
"type": "STRING",
"key": "COL0014",
"title": "Titolo template",
"searchable": false,
"valueList": [
{
"key": "",
"value": "Autorizzazione sottodominio"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD001",
"defaultValue": null,
"required": false
},
{
"type": "HTML",
"key": "COL0009",
"title": "Template",
"searchable": false,
"valueList": [
{
"key": "",
"value": "azione_form_AUTOR_firmaAutorizzazione"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD002",
"defaultValue": null,
"required": false
}
],
"attributes": []
},
{
"title": "Metadata",
"key": "SEC_0007",
"orderKey": "ORD002",
"fields": [
{
"type": "STRING",
"key": "COL0010",
"title": "Tag azione",
"searchable": false,
"valueList": [
{
"key": "",
"value": "azione_form_AUTOR_firmaAutorizzazione"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD001",
"defaultValue": null,
"required": false
},
{
"type": "STRING",
"key": "COL0011",
"title": "Tag procedimento",
"searchable": false,
"valueList": [
{
"key": "",
"value": "gestione_siti_web_nuovo_wf"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD002",
"defaultValue": null,
"required": false
},
{
"type": "STRING",
"key": "COL0012",
"title": "Tag modulo",
"searchable": false,
"valueList": [
{
"key": "",
"value": "RequestForm_GESTIONE_SITI_WEB_NUOVO"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD003",
"defaultValue": null,
"required": false
}
],
"attributes": []
}
],
"categories": [],
"aclTable": [],
"master": false,
"attributes": []
}
]
}
}
@@ -0,0 +1,148 @@
info:
name: AJ Console - Search schemas
type: http
seq: 4
http:
method: GET
url: "{{elixFormsRootUrl}}/AJSRV/metadata/search?SEARCH_IN[]=616&PAGE=1&AJL=it&PAGESIZE=80&SECURE=true"
headers:
- name: x-requested-with
value: XMLHttpRequest
params:
- name: SEARCH_IN[]
value: "616"
type: query
- name: PAGE
value: "1"
type: query
- name: AJL
value: it
type: query
- name: PAGESIZE
value: "80"
type: query
- name: SECURE
value: "true"
type: query
auth: inherit
runtime:
scripts:
- type: before-request
code: |-
/*
const noCookieFoundError = "No AJSRV cookie found!";
var ajsrvCookie = bru.getVar("elixFormsAjsrvCookie");
if (ajsrvCookie == null || ajsrvCookie === "") {
console.error(noCookieFoundError, ajsrvCookie);
throw new Error(noCookieFoundError);
}
*/
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
forwardAuthorizationHeader: true
examples:
- name: example
request:
url: "{{elixFormsRootUrl}}/AJSRV/metadata/search?SEARCH_IN[]=616&PAGE=1&AJL=it&PAGESIZE=80&SECURE=true"
method: GET
headers:
- name: Cookie
value: "{{elixFormsAjsrvCookie}}"
- name: x-requested-with
value: XMLHttpRequest
params:
- name: SEARCH_IN[]
value: "616"
type: query
- name: PAGE
value: "1"
type: query
- name: AJL
value: it
type: query
- name: PAGESIZE
value: "80"
type: query
- name: SECURE
value: "true"
type: query
response:
status: 200
statusText: OK
headers:
- name: date
value: Wed, 26 Aug 2026 10:35:04 GMT
- name: server
value: Apache
- name: content-security-policy
value: "default-src https: data: 'unsafe-inline' 'unsafe-eval'; img-src 'self' blob: data: https:;"
- name: content-type
value: application/json;charset=UTF-8
- name: content-length
value: "438"
- name: set-cookie
value: JSESSIONID=da342d4412c8c3fea86b58918c9e; Path=/; HttpOnly
- name: strict-transport-security
value: max-age=31536000; includeSubDomains
- name: x-frame-options
value: SAMEORIGIN
- name: x-xss-protection
value: "1"
- name: x-content-type-options
value: nosniff
- name: referrer-policy
value: unsafe-url
- name: keep-alive
value: timeout=10, max=500
- name: connection
value: Keep-Alive
body:
type: json
data: |-
{
"totalRecords": 0,
"pageSize": 80,
"numPages": 0,
"currentPage": 1,
"columns": [
{
"key": "ID_OBJECT",
"value": "ID_OBJECT"
},
{
"key": "S_616_ID_GENERICSCHEMA",
"value": "S_616_ID_GENERICSCHEMA"
},
{
"key": "S_616_COL0014",
"value": "Titolo template"
},
{
"key": "S_616_COL0010",
"value": "Tag azione"
},
{
"key": "S_616_COL0011",
"value": "Tag procedimento"
},
{
"key": "S_616_COL0009",
"value": "Template"
},
{
"key": "S_616_COL0012",
"value": "Tag modulo"
}
],
"data": [],
"extraData": {}
}
@@ -0,0 +1,251 @@
info:
name: Backoffice - Create Group
type: http
seq: 9
http:
method: POST
url: "{{elixFormsRootUrl}}/backoffice/groups/_savedata.jsp"
headers:
- name: Cookie
value: ISIPSESSION=047b770fac5627c03c94030ca0c3b45c; AJSRV=BTN_USER_1787207482458_8771527838545232265; ISIPSESSION_TRACK=99b2488e73af7c61f6e5affceeb32502; JSESSIONID=e3c44b958c4f282660a5fc8ed994
disabled: true
- name: x-requested-with
value: XMLHttpRequest
body:
type: multipart-form
data:
- name: id
type: text
value: "0"
description: IMPORTANT!
- name: name
type: text
value: NewGroup01
- name: name-upper
type: text
value: ""
description: empty
- name: isadmin
type: text
value: "false"
- name: user_visible
type: text
value: "false"
- name: description
type: text
value: NewGroup01 new from API
- name: btnModify
type: text
value: Inserisci
description: ???
auth: inherit
runtime:
scripts:
- type: before-request
code: |-
const noCookieFoundError = "No AJSRV cookie found!";
var ajsrvCookie = bru.getVar("elixFormsAjsrvCookie");
if (ajsrvCookie == null || ajsrvCookie === "") {
console.error(noCookieFoundError, ajsrvCookie);
throw new Error(noCookieFoundError);
}
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
forwardAuthorizationHeader: true
examples:
- name: example
request:
url: "{{elixFormsRootUrl}}/AJSRV/metadata/save"
method: POST
headers:
- name: Accept
value: "*/*"
- name: Accept-Encoding
value: gzip, deflate, br, zstd
- name: Accept-Language
value: it,it-IT;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
disabled: true
- name: Cookie
value: ISIPSESSION=047b770fac5627c03c94030ca0c3b45c; AJSRV=BTN_USER_1787207482458_8771527838545232265; ISIPSESSION_TRACK=99b2488e73af7c61f6e5affceeb32502; JSESSIONID=e3c44b958c4f282660a5fc8ed994
- name: Host
value: console-unipr.elixforms.it
disabled: true
- name: Referer
value: https://console-unipr.elixforms.it/ajconsole/
disabled: true
- name: x-requested-with
value: XMLHttpRequest
body:
type: multipart-form
data:
- name: S_616_168008_COL0009
type: text
value: azione_form_AUTOR_firmaAutorizzazione
response:
status: 200
statusText: OK
headers:
- name: date
value: Wed, 26 Aug 2026 09:01:46 GMT
- name: server
value: '""'
- name: content-security-policy
value: "default-src https: data: 'unsafe-inline' 'unsafe-eval'; img-src 'self' blob: data: https:;"
- name: content-type
value: application/json;charset=UTF-8
- name: content-length
value: "1636"
- name: strict-transport-security
value: max-age=31536000; includeSubDomains
- name: x-frame-options
value: SAMEORIGIN
- name: x-xss-protection
value: "1"
- name: x-content-type-options
value: nosniff
- name: referrer-policy
value: unsafe-url
- name: keep-alive
value: timeout=10, max=500
- name: connection
value: Keep-Alive
body:
type: json
data: |-
{
"errors": {
"objectList": []
},
"result": {
"objectList": [
{
"id": 616,
"title": "WFTemplate",
"dataId": 168008,
"tag": "",
"objectId": 35274,
"sections": [
{
"title": "Template",
"key": "SEC_0006",
"orderKey": "ORD001",
"fields": [
{
"type": "STRING",
"key": "COL0014",
"title": "Titolo template",
"searchable": false,
"valueList": [
{
"key": "",
"value": "Autorizzazione sottodominio"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD001",
"defaultValue": null,
"required": false
},
{
"type": "HTML",
"key": "COL0009",
"title": "Template",
"searchable": false,
"valueList": [
{
"key": "",
"value": "azione_form_AUTOR_firmaAutorizzazione"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD002",
"defaultValue": null,
"required": false
}
],
"attributes": []
},
{
"title": "Metadata",
"key": "SEC_0007",
"orderKey": "ORD002",
"fields": [
{
"type": "STRING",
"key": "COL0010",
"title": "Tag azione",
"searchable": false,
"valueList": [
{
"key": "",
"value": "azione_form_AUTOR_firmaAutorizzazione"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD001",
"defaultValue": null,
"required": false
},
{
"type": "STRING",
"key": "COL0011",
"title": "Tag procedimento",
"searchable": false,
"valueList": [
{
"key": "",
"value": "gestione_siti_web_nuovo_wf"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD002",
"defaultValue": null,
"required": false
},
{
"type": "STRING",
"key": "COL0012",
"title": "Tag modulo",
"searchable": false,
"valueList": [
{
"key": "",
"value": "RequestForm_GESTIONE_SITI_WEB_NUOVO"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD003",
"defaultValue": null,
"required": false
}
],
"attributes": []
}
],
"categories": [],
"aclTable": [],
"master": false,
"attributes": []
}
]
}
}
@@ -0,0 +1,183 @@
info:
name: Backoffice - Dashboard
type: http
seq: 11
http:
method: GET
url: "{{elixFormsRootUrl}}/backoffice/backoffice_console.jsp?IUQOID=0&IURTLGY=&IUXSID=TX_I4453_UNIPR_{{unixTimestamp}}_R{{randomRID}}"
headers:
- name: Host
value: console-unipr.elixforms.it
- name: Referer
value: https://console-unipr.elixforms.it/backoffice/
params:
- name: IUQOID
value: "0"
type: query
- name: IURTLGY
value: ""
type: query
- name: IUXSID
value: TX_I4453_UNIPR_{{unixTimestamp}}_R{{randomRID}}
type: query
description: Must be computed by executing "Login - Backoffice"
auth: inherit
runtime:
scripts:
- type: after-response
code: |-
/*
const ajsrvCookie = bru.cookies.get("AJSRV");
const jsessionidCookie = bru.cookies.get("JSESSIONID");
//console.log("AJSRV: ", ajsrvCookie);
//console.log("JSESSIONID: ", jsessionidCookie);
bru.setVar("elixFormsAjsrvCookie", "AJSRV=" + ajsrvCookie);
bru.setVar("elixFormsJsessionidCookie", "JSESSIONID=" + jsessionidCookie);
*/
- type: tests
code: |-
test("AJSRV cookie found", function () {
const ajsrvCookie = bru.cookies.get("AJSRV");
expect(ajsrvCookie).to.not.be.null;
expect(ajsrvCookie).to.not.be.empty;
});
test("JSESSIONID cookie found", function () {
const jsessionidCookie = bru.cookies.get("JSESSIONID");
expect(jsessionidCookie).to.not.be.null;
expect(jsessionidCookie).to.not.be.empty;
});
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
forwardAuthorizationHeader: false
examples:
- name: example
request:
url: https://console-unipr.elixforms.it/CISIInformationUnit/ExecuteTransaction.jws
method: POST
headers:
- name: Host
value: console-unipr.elixforms.it
- name: Referer
value: https://console-unipr.elixforms.it/backoffice/
params:
- name: IUXSID
value: TX_I4453_UNIPR_1787737266508_R-1756946974
type: query
disabled: true
body:
type: multipart-form
data:
- name: username
type: text
value: Automation_User
- name: password
type: text
value: n_HH9shL#VPeiiT^%;:t5/,jY
- name: INSERT_BTN00000
type: text
value: Accedi
response:
status: 200
statusText: OK
headers:
- name: date
value: Wed, 26 Aug 2026 10:34:54 GMT
- name: server
value: '""'
- name: content-security-policy
value: "default-src https: data: 'unsafe-inline' 'unsafe-eval'; img-src 'self' blob: data: https:;"
- name: x-powered-by
value: JSP/2.2
- name: content-type
value: text/html;charset=UTF-8
- name: set-cookie
value: JSESSIONID=da31f0432559043377f947047c89; Path=/; HttpOnly
- name: vary
value: Accept-Encoding
- name: strict-transport-security
value: max-age=31536000; includeSubDomains
- name: x-frame-options
value: SAMEORIGIN
- name: x-xss-protection
value: "1"
- name: x-content-type-options
value: nosniff
- name: referrer-policy
value: unsafe-url
- name: keep-alive
value: timeout=10, max=500
- name: connection
value: Keep-Alive
- name: transfer-encoding
value: chunked
body:
type: html
data: |+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!-- include the local application global jsp file -->
<style type="text/css">
* {
font-family: Verdana,Arial,Helvetica,sans-serif;
font-size: 12px;
color: #444444;
font-weight: normal;
}
.logo {padding:3em 0 0 0; margin:0;text-align:center;}
.container {padding:0; width:30em;margin:0 auto;text-align:center;}
h1 {font-weight:bold;margin: 2em 0 1em 0;}
form fieldset {border: none;text-align:left;}
form fieldset label {float:left; width:40%;display:block;text-align:right;padding: 0.3em;}
form fieldset .fieldcontainer {float:left; width55%;}
.end {clear:both;height:0.1em;line-height:0.1em;font-size:0.1em;width:100%}
</style><div class="logo"><img alt="Logo" src="/images/HeaderStemmaLogon.gif"></div><div class="container"><h1>ISIPortal - Backoffice</h1><form action="/CISIInformationUnit/ExecuteTransaction.jws?IUXSID=TX_I4453_UNIPR_1787740495631_R-970713504" method="POST" name="frmFEPA" txid="TX_I4453_UNIPR_1787740495631_R-970713504"><fieldset><label for="username">Nome Utente:</label><div class="fieldcontainer"><input class="isiportalPartialAdminFormFieldSingleLineText" id="username" name="username" type="text" value=""></div><div class="end">&nbsp;</div><label for="password">Password:</label><div class="fieldcontainer"><input class="isiportalPartialAdminFormFieldSingleLineText" id="password" name="password" type="password" value=""></div><div class="end">&nbsp;</div></fieldset><div><input class="isiportalPartialAdminINSERT_BTN00000Button" name="INSERT_BTN00000" type="submit" value="Accedi"></div></form></div>
@@ -0,0 +1,275 @@
info:
name: Backoffice - Save Group
type: http
seq: 10
http:
method: POST
url: "{{elixFormsRootUrl}}/backoffice/groups/_savedata.jsp"
headers:
- name: Accept
value: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
- name: Accept-Encoding
value: gzip, deflate, br, zstd
- name: Accept-Language
value: it,it-IT;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
- name: Cache-Control
value: max-age=0
- name: Connection
value: keep-alive
- name: Cookie
value: ISIPSESSION=047b770fac5627c03c94030ca0c3b45c; AJSRV=BTN_USER_1787207482458_8771527838545232265; ISIPSESSION_TRACK=99b2488e73af7c61f6e5affceeb32502; JSESSIONID=e3c44b958c4f282660a5fc8ed994
disabled: true
- name: Host
value: console-unipr.elixforms.it
- name: Origin
value: https://console-unipr.elixforms.it
- name: Referer
value: https://console-unipr.elixforms.it/backoffice/groups/groups_right.jsp?id=103
- name: Upgrade-Insecure-Requests
value: "1"
- name: User-Agent
value: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/151.0.0.0 Safari/537.36 Edg/151.0.0.0
- name: Sec-Fetch-User
value: ?1
- name: Sec-Fetch-Site
value: same-origin
- name: Sec-Fetch-Mode
value: navigate
- name: Sec-Fetch-Dest
value: frame
- name: Sec-Ch-Ua-Platform
value: '"Windows"'
- name: Sec-Ch-Ua-Mobile
value: ?0
- name: Sec-Ch-Ua
value: '"Not=A?Brand";v="99", "Microsoft Edge";v="151", "Chromium";v="151"'
body:
type: form-urlencoded
data:
- name: id
value: "103"
- name: name
value: Test 01
- name: name-upper
value: TEST 01
- name: isadmin
value: "false"
- name: user_visible
value: "false"
- name: description
value: Test 01 updated
- name: btnInsert
value: Modifica
auth: inherit
runtime:
scripts:
- type: before-request
code: |-
/*
const noCookieFoundError = "No AJSRV cookie found!";
var ajsrvCookie = bru.getVar("elixFormsAjsrvCookie");
if (ajsrvCookie == null || ajsrvCookie === "") {
console.error(noCookieFoundError, ajsrvCookie);
throw new Error(noCookieFoundError);
}
*/
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
forwardAuthorizationHeader: true
examples:
- name: example
request:
url: "{{elixFormsRootUrl}}/AJSRV/metadata/save"
method: POST
headers:
- name: Accept
value: "*/*"
- name: Accept-Encoding
value: gzip, deflate, br, zstd
- name: Accept-Language
value: it,it-IT;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
disabled: true
- name: Cookie
value: ISIPSESSION=047b770fac5627c03c94030ca0c3b45c; AJSRV=BTN_USER_1787207482458_8771527838545232265; ISIPSESSION_TRACK=99b2488e73af7c61f6e5affceeb32502; JSESSIONID=e3c44b958c4f282660a5fc8ed994
- name: Host
value: console-unipr.elixforms.it
disabled: true
- name: Referer
value: https://console-unipr.elixforms.it/ajconsole/
disabled: true
- name: x-requested-with
value: XMLHttpRequest
body:
type: multipart-form
data:
- name: S_616_168008_COL0009
type: text
value: azione_form_AUTOR_firmaAutorizzazione
response:
status: 200
statusText: OK
headers:
- name: date
value: Wed, 26 Aug 2026 09:01:46 GMT
- name: server
value: '""'
- name: content-security-policy
value: "default-src https: data: 'unsafe-inline' 'unsafe-eval'; img-src 'self' blob: data: https:;"
- name: content-type
value: application/json;charset=UTF-8
- name: content-length
value: "1636"
- name: strict-transport-security
value: max-age=31536000; includeSubDomains
- name: x-frame-options
value: SAMEORIGIN
- name: x-xss-protection
value: "1"
- name: x-content-type-options
value: nosniff
- name: referrer-policy
value: unsafe-url
- name: keep-alive
value: timeout=10, max=500
- name: connection
value: Keep-Alive
body:
type: json
data: |-
{
"errors": {
"objectList": []
},
"result": {
"objectList": [
{
"id": 616,
"title": "WFTemplate",
"dataId": 168008,
"tag": "",
"objectId": 35274,
"sections": [
{
"title": "Template",
"key": "SEC_0006",
"orderKey": "ORD001",
"fields": [
{
"type": "STRING",
"key": "COL0014",
"title": "Titolo template",
"searchable": false,
"valueList": [
{
"key": "",
"value": "Autorizzazione sottodominio"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD001",
"defaultValue": null,
"required": false
},
{
"type": "HTML",
"key": "COL0009",
"title": "Template",
"searchable": false,
"valueList": [
{
"key": "",
"value": "azione_form_AUTOR_firmaAutorizzazione"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD002",
"defaultValue": null,
"required": false
}
],
"attributes": []
},
{
"title": "Metadata",
"key": "SEC_0007",
"orderKey": "ORD002",
"fields": [
{
"type": "STRING",
"key": "COL0010",
"title": "Tag azione",
"searchable": false,
"valueList": [
{
"key": "",
"value": "azione_form_AUTOR_firmaAutorizzazione"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD001",
"defaultValue": null,
"required": false
},
{
"type": "STRING",
"key": "COL0011",
"title": "Tag procedimento",
"searchable": false,
"valueList": [
{
"key": "",
"value": "gestione_siti_web_nuovo_wf"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD002",
"defaultValue": null,
"required": false
},
{
"type": "STRING",
"key": "COL0012",
"title": "Tag modulo",
"searchable": false,
"valueList": [
{
"key": "",
"value": "RequestForm_GESTIONE_SITI_WEB_NUOVO"
}
],
"itemList": null,
"toManyItems": false,
"attributes": [],
"orderKey": "ORD003",
"defaultValue": null,
"required": false
}
],
"attributes": []
}
],
"categories": [],
"aclTable": [],
"master": false,
"attributes": []
}
]
}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,230 @@
info:
name: Login - Backoffice
type: http
seq: 1
http:
method: POST
url: "{{elixFormsRootUrl}}/CISIInformationUnit/ExecuteTransaction.jws?IUXSID=TX_I4453_UNIPR_{{unixTimestamp}}_R{{randomRID}}"
headers:
- name: Host
value: console-unipr.elixforms.it
- name: Referer
value: https://console-unipr.elixforms.it/backoffice/
params:
- name: IUXSID
value: TX_I4453_UNIPR_{{unixTimestamp}}_R{{randomRID}}
type: query
description: Values are computed in pre-script!
body:
type: multipart-form
data:
- name: username
type: text
value: "{{elixFormsConsoleUsername}}"
- name: password
type: text
value: "{{elixFormsConsolePassword}}"
- name: INSERT_BTN00000
type: text
value: Accedi
auth: inherit
runtime:
scripts:
- type: after-response
code: |-
function generateTenDigitNumber() {
// Minimum 10-digit number: 1000000000
// Maximum 10-digit number: 9999999999
const min = 1000000000; // 10^9
const max = 9999999999; // 10^10 - 1
// Generate random integer in range [min, max]
const randomNum = Math.floor(Math.random() * (max - min + 1)) + min;
return String(randomNum); // Return as string to preserve leading digits
}
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var unixTimestamp = Date.now();
//console.log(unixTimestamp);
bru.setVar("unixTimestamp", unixTimestamp);
var r = generateTenDigitNumber(); //getRandomInt(-999999999, 9999999999);
//console.log(r);
bru.setVar("randomRID", r);
/*
const headerSetCookie = res.getHeader('set-cookie');
console.log(headerSetCookie);
const split1 = headerSetCookie.map(c => c.split(';')[0]);
console.log(split1);
const split2 = split1.map(c => c.split('='));
console.log(split2);
const map = new Map(split2);
console.log(map);
bru.setVar("elixFormsAjsrvCookie", "AJSRV=" + map.get("AJSRV"));
bru.setVar("elixFormsJsessionidCookie", "JSESSIONID=" + map.get("JSESSIONID"));
*/
/*
const ajsrvCookie = bru.cookies.get("AJSRV");
const jsessionidCookie = bru.cookies.get("JSESSIONID");
//console.log("AJSRV: ", ajsrvCookie);
//console.log("JSESSIONID: ", jsessionidCookie);
bru.setVar("elixFormsAjsrvCookie", "AJSRV=" + ajsrvCookie);
bru.setVar("elixFormsJsessionidCookie", "JSESSIONID=" + jsessionidCookie);
*/
- type: tests
code: |-
test("AJSRV cookie found", function () {
const ajsrvCookie = bru.cookies.get("AJSRV");
expect(ajsrvCookie).to.not.be.null;
expect(ajsrvCookie).to.not.be.empty;
});
test("JSESSIONID cookie found", function () {
const jsessionidCookie = bru.cookies.get("JSESSIONID");
expect(jsessionidCookie).to.not.be.null;
expect(jsessionidCookie).to.not.be.empty;
});
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
forwardAuthorizationHeader: false
examples:
- name: example
request:
url: https://console-unipr.elixforms.it/CISIInformationUnit/ExecuteTransaction.jws
method: POST
headers:
- name: Host
value: console-unipr.elixforms.it
- name: Referer
value: https://console-unipr.elixforms.it/backoffice/
params:
- name: IUXSID
value: TX_I4453_UNIPR_1787737266508_R-1756946974
type: query
disabled: true
body:
type: multipart-form
data:
- name: username
type: text
value: Automation_User
- name: password
type: text
value: n_HH9shL#VPeiiT^%;:t5/,jY
- name: INSERT_BTN00000
type: text
value: Accedi
response:
status: 200
statusText: OK
headers:
- name: date
value: Wed, 26 Aug 2026 10:34:54 GMT
- name: server
value: '""'
- name: content-security-policy
value: "default-src https: data: 'unsafe-inline' 'unsafe-eval'; img-src 'self' blob: data: https:;"
- name: x-powered-by
value: JSP/2.2
- name: content-type
value: text/html;charset=UTF-8
- name: set-cookie
value: JSESSIONID=da31f0432559043377f947047c89; Path=/; HttpOnly
- name: vary
value: Accept-Encoding
- name: strict-transport-security
value: max-age=31536000; includeSubDomains
- name: x-frame-options
value: SAMEORIGIN
- name: x-xss-protection
value: "1"
- name: x-content-type-options
value: nosniff
- name: referrer-policy
value: unsafe-url
- name: keep-alive
value: timeout=10, max=500
- name: connection
value: Keep-Alive
- name: transfer-encoding
value: chunked
body:
type: html
data: |+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!-- include the local application global jsp file -->
<style type="text/css">
* {
font-family: Verdana,Arial,Helvetica,sans-serif;
font-size: 12px;
color: #444444;
font-weight: normal;
}
.logo {padding:3em 0 0 0; margin:0;text-align:center;}
.container {padding:0; width:30em;margin:0 auto;text-align:center;}
h1 {font-weight:bold;margin: 2em 0 1em 0;}
form fieldset {border: none;text-align:left;}
form fieldset label {float:left; width:40%;display:block;text-align:right;padding: 0.3em;}
form fieldset .fieldcontainer {float:left; width55%;}
.end {clear:both;height:0.1em;line-height:0.1em;font-size:0.1em;width:100%}
</style><div class="logo"><img alt="Logo" src="/images/HeaderStemmaLogon.gif"></div><div class="container"><h1>ISIPortal - Backoffice</h1><form action="/CISIInformationUnit/ExecuteTransaction.jws?IUXSID=TX_I4453_UNIPR_1787740495631_R-970713504" method="POST" name="frmFEPA" txid="TX_I4453_UNIPR_1787740495631_R-970713504"><fieldset><label for="username">Nome Utente:</label><div class="fieldcontainer"><input class="isiportalPartialAdminFormFieldSingleLineText" id="username" name="username" type="text" value=""></div><div class="end">&nbsp;</div><label for="password">Password:</label><div class="fieldcontainer"><input class="isiportalPartialAdminFormFieldSingleLineText" id="password" name="password" type="password" value=""></div><div class="end">&nbsp;</div></fieldset><div><input class="isiportalPartialAdminINSERT_BTN00000Button" name="INSERT_BTN00000" type="submit" value="Accedi"></div></form></div>
@@ -0,0 +1,198 @@
info:
name: Login - Gestione Schede
type: http
seq: 2
http:
method: GET
url: "{{elixFormsRootUrl}}/rwe2/schema_console.jsp"
headers:
- name: Cookie
value: ISIPSESSION=dd755718a116664c31b89d25d251c6b2; AJSRV=BTN_USER_1787732684670_7497683962865219861; JSESSIONID=e480913d3ccdc8d517c2e8662d9a
disabled: true
- name: Host
value: console-unipr.elixforms.it
disabled: true
- name: Referer
value: https://console-unipr.elixforms.it/backoffice/
params:
- name: IUXSID
value: TX_I4453_UNIPR_1787737266508_R-1756946974
type: query
disabled: true
auth: inherit
runtime:
scripts:
- type: before-request
code: |-
/*
const noAjsrvCookieFoundError = "No AJSRV cookie found!";
var ajsrvCookie = bru.getVar("elixFormsAjsrvCookie");
if (ajsrvCookie == null || ajsrvCookie === "") {
console.error(noAjsrvCookieFoundError, ajsrvCookie);
throw new Error(noAjsrvCookieFoundError);
}
*/
- type: after-response
code: |-
/*
const ajsrvCookie = bru.cookies.get("AJSRV");
const jsessionidCookie = bru.cookies.get("JSESSIONID");
const isipSessionCookie = bru.cookies.get("ISIPSESSION");
console.log("Cookies: ", bru.cookies);
bru.setVar("elixFormsAjsrvCookie", "AJSRV=" + ajsrvCookie);
bru.setVar("elixFormsJsessionidCookie", "JSESSIONID=" + jsessionidCookie);
bru.setVar("elixFormsIsipsessionCookie", "ISIPSESSION=" + isipSessionCookie);
*/
- type: tests
code: |-
test("AJSRV cookie found", function () {
const ajsrvCookie = bru.cookies.get("AJSRV");
expect(ajsrvCookie).to.not.be.null;
expect(ajsrvCookie).to.not.be.empty;
});
test("JSESSIONID cookie found", function () {
const jsessionidCookie = bru.cookies.get("JSESSIONID");
expect(jsessionidCookie).to.not.be.null;
expect(jsessionidCookie).to.not.be.empty;
});
test("ISIPSESSION cookie found", function () {
const isipsessionCookie = bru.cookies.get("ISIPSESSION");
expect(isipsessionCookie).to.not.be.null;
expect(isipsessionCookie).to.not.be.empty;
});
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
forwardAuthorizationHeader: false
examples:
- name: example
request:
url: https://console-unipr.elixforms.it/CISIInformationUnit/ExecuteTransaction.jws
method: POST
headers:
- name: Host
value: console-unipr.elixforms.it
- name: Referer
value: https://console-unipr.elixforms.it/backoffice/
params:
- name: IUXSID
value: TX_I4453_UNIPR_1787737266508_R-1756946974
type: query
disabled: true
body:
type: multipart-form
data:
- name: username
type: text
value: Automation_User
- name: password
type: text
value: n_HH9shL#VPeiiT^%;:t5/,jY
- name: INSERT_BTN00000
type: text
value: Accedi
response:
status: 200
statusText: OK
headers:
- name: date
value: Wed, 26 Aug 2026 10:34:54 GMT
- name: server
value: '""'
- name: content-security-policy
value: "default-src https: data: 'unsafe-inline' 'unsafe-eval'; img-src 'self' blob: data: https:;"
- name: x-powered-by
value: JSP/2.2
- name: content-type
value: text/html;charset=UTF-8
- name: set-cookie
value: JSESSIONID=da31f0432559043377f947047c89; Path=/; HttpOnly
- name: vary
value: Accept-Encoding
- name: strict-transport-security
value: max-age=31536000; includeSubDomains
- name: x-frame-options
value: SAMEORIGIN
- name: x-xss-protection
value: "1"
- name: x-content-type-options
value: nosniff
- name: referrer-policy
value: unsafe-url
- name: keep-alive
value: timeout=10, max=500
- name: connection
value: Keep-Alive
- name: transfer-encoding
value: chunked
body:
type: html
data: |+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<!-- include the local application global jsp file -->
<style type="text/css">
* {
font-family: Verdana,Arial,Helvetica,sans-serif;
font-size: 12px;
color: #444444;
font-weight: normal;
}
.logo {padding:3em 0 0 0; margin:0;text-align:center;}
.container {padding:0; width:30em;margin:0 auto;text-align:center;}
h1 {font-weight:bold;margin: 2em 0 1em 0;}
form fieldset {border: none;text-align:left;}
form fieldset label {float:left; width:40%;display:block;text-align:right;padding: 0.3em;}
form fieldset .fieldcontainer {float:left; width55%;}
.end {clear:both;height:0.1em;line-height:0.1em;font-size:0.1em;width:100%}
</style><div class="logo"><img alt="Logo" src="/images/HeaderStemmaLogon.gif"></div><div class="container"><h1>ISIPortal - Backoffice</h1><form action="/CISIInformationUnit/ExecuteTransaction.jws?IUXSID=TX_I4453_UNIPR_1787740495631_R-970713504" method="POST" name="frmFEPA" txid="TX_I4453_UNIPR_1787740495631_R-970713504"><fieldset><label for="username">Nome Utente:</label><div class="fieldcontainer"><input class="isiportalPartialAdminFormFieldSingleLineText" id="username" name="username" type="text" value=""></div><div class="end">&nbsp;</div><label for="password">Password:</label><div class="fieldcontainer"><input class="isiportalPartialAdminFormFieldSingleLineText" id="password" name="password" type="password" value=""></div><div class="end">&nbsp;</div></fieldset><div><input class="isiportalPartialAdminINSERT_BTN00000Button" name="INSERT_BTN00000" type="submit" value="Accedi"></div></form></div>
@@ -0,0 +1,12 @@
info:
name: Console UI
type: folder
seq: 3
request:
scripts:
- type: tests
code: |-
test("Status code is 200", function () {
expect(res.getStatus()).to.equal(200);
});
@@ -44,13 +44,6 @@ runtime:
[% percentualeEcoFondo = ritenutaEcoFondo * 100; %] [% percentualeEcoFondo = ritenutaEcoFondo * 100; %]
[% percentualeEcoWelfare = ritenutaEcoWelfare * 100; %] [% percentualeEcoWelfare = ritenutaEcoWelfare * 100; %]
[!--
1. [FORMAT type="number" pattern="#,##0.##"][% percentualeEcoAmministrazione %][/FORMAT]%<br/>
2. [FORMAT type="number" pattern="#,##0.##"][% percentualeEcoFondo %][/FORMAT]%<br/>
3. [FORMAT type="number" pattern="#,##0.##"][% percentualeEcoWelfare %][/FORMAT]%<br/>
4. [FORMAT type="number" pattern="#,##0.##"][% ulterioreRitenuta2Max %][/FORMAT]%<br/>
--]
<html> <html>
<head> <head>
<style> <style>
@@ -78,7 +71,7 @@ runtime:
<body> <body>
<!-- Header con logo UniPR come nel template standard --> <!-- Header con logo UniPR come nel template standard -->
<h2>IL DIRIGENTE</h2> <h2>IL DIRETTORE GENERALE</h2>
<p>visti lo Statuto dell'Universit&agrave; degli Studi di Parma ed il Regolamento Generale di Ateneo;</p> <p>visti lo Statuto dell'Universit&agrave; degli Studi di Parma ed il Regolamento Generale di Ateneo;</p>
@@ -90,7 +83,9 @@ runtime:
<!-- <p>preso atto che, con nota assunta a Prot. n. ___, il [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG] ha trasmesso:</p> --> <!-- <p>preso atto che, con nota assunta a Prot. n. ___, il [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG] ha trasmesso:</p> -->
<p>richiamato integralmente il testo del contratto da stipularsi tra l'Universit&agrave; degli Studi di Parma, nell'interesse del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG], avente ad oggetto [TAG]SCHEMAID,341,COL0005,IUQOID, , [/TAG] sotto la responsabilit&agrave; scientifica di [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG], con durata di mesi [TAG]SCHEMAID,341,COL0008,IUQOID, , [/TAG], per un corrispettivo pari a euro [TAG]SCHEMAID,341,COL0094,IUQOID, , [/TAG];</p> <p>richiamato integralmente il testo del contratto da stipularsi tra l'Universit&agrave; degli Studi di Parma, nell'interesse del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG] e [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG], avente ad oggetto [TAG]SCHEMAID,341,COL0005,IUQOID, , [/TAG] sotto la responsabilit&agrave; scientifica di [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG], con durata di mesi [TAG]SCHEMAID,341,COL0008,IUQOID, , [/TAG], per un corrispettivo pari a euro [TAG]SCHEMAID,341,COL0094,IUQOID, , [/TAG];</p>
<!-- Indicazione domanda elixForms: "vista la domanda n.° <ID_DOMANDA>, ricevuta n.° <ID_RICEVUTA> (pervenuta il <DATA_INOLTRO> tramite il portale "Procedure Online");" -->
<p>ritenuto, per quanto premesso, di aderire alla richiesta di [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG] di approvazione della stipula del contratto con [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] per [TAG]SCHEMAID,341,COL0005,IUQOID, , [/TAG] in premessa, ai sensi e per gli effetti di quanto previsto dal sopra citato Regolamento sulla disciplina delle attivit&agrave; di ricerca, consulenza, didattica e alta formazione eseguite dall'Universit&agrave; degli Studi di Parma a fronte di contratti o accordi con soggetti terzi con riferimento all'Art.2, punto A;</p> <p>ritenuto, per quanto premesso, di aderire alla richiesta di [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG] di approvazione della stipula del contratto con [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] per [TAG]SCHEMAID,341,COL0005,IUQOID, , [/TAG] in premessa, ai sensi e per gli effetti di quanto previsto dal sopra citato Regolamento sulla disciplina delle attivit&agrave; di ricerca, consulenza, didattica e alta formazione eseguite dall'Universit&agrave; degli Studi di Parma a fronte di contratti o accordi con soggetti terzi con riferimento all'Art.2, punto A;</p>
@@ -99,7 +94,7 @@ runtime:
<ol> <ol>
<li>di approvare la stipula del contratto tra [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] e l'Universit&agrave; degli Studi di Parma, nell'interesse del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG], avente ad oggetto [TAG]SCHEMAID,341,COL0005,IUQOID, , [/TAG] sotto la responsabilit&agrave; scientifica di [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG], con durata di mesi [TAG]SCHEMAID,341,COL0008,IUQOID, , [/TAG];</li> <li>di approvare la stipula del contratto tra [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] e l'Universit&agrave; degli Studi di Parma, nell'interesse del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG], avente ad oggetto [TAG]SCHEMAID,341,COL0005,IUQOID, , [/TAG] sotto la responsabilit&agrave; scientifica di [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG], con durata di mesi [TAG]SCHEMAID,341,COL0008,IUQOID, , [/TAG];</li>
<li>di autorizzare l'introito del corrispettivo pari ad euro [TAG]SCHEMAID,341,COL0094,IUQOID, , [/TAG] che verr&agrave; erogato da [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] a favore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG][IF][CONDITION][!--[% [TAG]SCHEMAID,341,COL0090,IUQOID, , [/TAG] != "N" %]--][% mostraRitenute != "N" %][/CONDITION][THEN], da assoggettare alle ritenute di cui all'art. 6, comma 1 del "Regolamento sulla disciplina delle attivit&agrave; di ricerca, consulenza e didattica e alta formazione eseguite dall'Universit&agrave; degli Studi di Parma a fronte di contratti o accordi con soggetti terzi" nella misura del [FORMAT type="number" pattern="#,##0.##"][% percentualeEcoAmministrazione %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0014,IUQOID, , [/TAG]) per l'Amministrazione di Ateneo, del [FORMAT type="number" pattern="#,##0.##"][% percentualeEcoFondo %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0015,IUQOID, , [/TAG]) per il Fondo Comune di Ateneo e del [FORMAT type="number" pattern="#,##0.##"][% percentualeEcoWelfare %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0016,IUQOID, , [/TAG]) per l'incremento dei fondi di cui agli artt. 119, comma 2, punto a) e 121, comma 2, punto a) del CCNL di comparto per l'attuazione dell'art. 110, comma 2 del medesimo contratto[IF][CONDITION][!--[% [TAG]SCHEMAID,337,COL0017,IUQOID, , [/TAG] != "" && [TAG]SCHEMAID,337,COL0017,IUQOID, , [/TAG] > 0 %]--][% ulterioreRitenuta2Max > 0 %][/CONDITION][THEN] e del [FORMAT type="number" pattern="#,##0.##"][% ulterioreRitenuta2Max %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0063,IUQOID, , [/TAG]) a favore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG][/THEN][/IF][/THEN][/IF];</li> <li>di autorizzare l'introito del corrispettivo pari ad euro [TAG]SCHEMAID,341,COL0094,IUQOID, , [/TAG] che verr&agrave; erogato da [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] a favore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG][IF][CONDITION][!--[% [TAG]SCHEMAID,341,COL0090,IUQOID, , [/TAG] != "N" %]--][% mostraRitenute != "N" %][/CONDITION][THEN], da assoggettare alle ritenute secondo le modalità previste dall'art. 6, comma 1 del "Regolamento sulla disciplina delle attivit&agrave; di ricerca, consulenza e didattica e alta formazione eseguite dall'Universit&agrave; degli Studi di Parma a fronte di contratti o accordi con soggetti terzi" nella misura del [FORMAT type="number" pattern="#,##0.##"][% percentualeEcoAmministrazione %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0014,IUQOID, , [/TAG]) per l'Amministrazione di Ateneo, del [FORMAT type="number" pattern="#,##0.##"][% percentualeEcoFondo %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0015,IUQOID, , [/TAG]) per il Fondo Comune di Ateneo e del [FORMAT type="number" pattern="#,##0.##"][% percentualeEcoWelfare %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0016,IUQOID, , [/TAG]) per l'incremento dei fondi di cui agli artt. 119, comma 2, punto a) e 121, comma 2, punto a) del CCNL di comparto per l'attuazione dell'art. 110, comma 2 del medesimo contratto[IF][CONDITION][!--[% [TAG]SCHEMAID,337,COL0017,IUQOID, , [/TAG] != "" && [TAG]SCHEMAID,337,COL0017,IUQOID, , [/TAG] > 0 %]--][% ulterioreRitenuta2Max > 0 %][/CONDITION][THEN] e del [FORMAT type="number" pattern="#,##0.##"][% ulterioreRitenuta2Max %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0063,IUQOID, , [/TAG]) a favore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG][/THEN][/IF][/THEN][/IF];</li>
<li>di dare mandato al Direttore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG] per ogni adempimento relativo.</li> <li>di dare mandato al Direttore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG] per ogni adempimento relativo.</li>
</ol> </ol>
@@ -45,13 +45,6 @@ runtime:
[% percentualeNonEcoFondo = ritenutaNonEcoFondo * 100; %] [% percentualeNonEcoFondo = ritenutaNonEcoFondo * 100; %]
[% percentualeNonEcoWelfare = ritenutaNonEcoWelfare * 100; %] [% percentualeNonEcoWelfare = ritenutaNonEcoWelfare * 100; %]
[!--
1. [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoAmministrazione %][/FORMAT]%<br/>
2. [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoFondo %][/FORMAT]%<br/>
3. [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoWelfare %][/FORMAT]%<br/>
4. [FORMAT type="number" pattern="#,##0.##"][% ulterioreRitenuta2Max %][/FORMAT]%<br/>
--]
<html> <html>
<head> <head>
<style> <style>
@@ -79,7 +72,7 @@ runtime:
<body> <body>
<!-- Header con logo UniPR come nel template standard --> <!-- Header con logo UniPR come nel template standard -->
<h2>IL DIRIGENTE</h2> <h2>IL DIRETTORE GENERALE</h2>
<p>visto l'art.15 della legge 7 agosto 1990 n. 241 che disciplina gli "Accordi tra Pubbliche Amministrazioni";</p> <p>visto l'art.15 della legge 7 agosto 1990 n. 241 che disciplina gli "Accordi tra Pubbliche Amministrazioni";</p>
@@ -101,7 +94,9 @@ runtime:
<p>verificata l'applicabilit&agrave; dell'art. 15 "Accordi fra Pubbliche Amministrazioni" della legge n. 241/1990 sul procedimento amministrativo, sussistendone i presupposti, incluso l'interesse reciproco, il contributo di tutti i soggetti sottoscrittori, la propriet&agrave; condivisa dei risultati secondo quanto stabilito dall'Accordo e la compartecipazione alle spese finalizzate al raggiungimento degli obiettivi specificati nel testo della stessa;</p> <p>verificata l'applicabilit&agrave; dell'art. 15 "Accordi fra Pubbliche Amministrazioni" della legge n. 241/1990 sul procedimento amministrativo, sussistendone i presupposti, incluso l'interesse reciproco, il contributo di tutti i soggetti sottoscrittori, la propriet&agrave; condivisa dei risultati secondo quanto stabilito dall'Accordo e la compartecipazione alle spese finalizzate al raggiungimento degli obiettivi specificati nel testo della stessa;</p>
<p>richiamato integralmente il testo dell'accordo da stipularsi tra l'Universit&agrave; degli Studi di Parma, nell'interesse del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG], avente ad oggetto [TAG]SCHEMAID,341,COL0005,IUQOID, , [/TAG] sotto la responsabilit&agrave; scientifica di [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG], con durata di mesi [TAG]SCHEMAID,341,COL0008,IUQOID, , [/TAG][IF][CONDITION][!--[% [TAG]SCHEMAID,341,COL0084,IUQOID, , [/TAG] == false %]--][% presenzaOneri == false %][/CONDITION][THEN], senza oneri a carico del budget dell'Amministrazione Centrale[/THEN][/IF];</p> <p>richiamato integralmente il testo dell'accordo da stipularsi tra l'Universit&agrave; degli Studi di Parma, nell'interesse del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG] e [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG], avente ad oggetto [TAG]SCHEMAID,341,COL0005,IUQOID, , [/TAG] sotto la responsabilit&agrave; scientifica di [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG], con durata di mesi [TAG]SCHEMAID,341,COL0008,IUQOID, , [/TAG][IF][CONDITION][!--[% [TAG]SCHEMAID,341,COL0084,IUQOID, , [/TAG] == false %]--][% presenzaOneri == false %][/CONDITION][THEN], senza oneri a carico del budget dell'Amministrazione Centrale[/THEN][/IF];</p>
<!-- Indicazione domanda elixForms: "vista la domanda n.° <ID_DOMANDA>, ricevuta n.° <ID_RICEVUTA> (pervenuta il <DATA_INOLTRO> tramite il portale "Procedure Online");" -->
<p>ritenuto, per quanto premesso, di aderire alla richiesta di [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG] di approvazione della stipula Accordo con [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] per [TAG]SCHEMAID,341,COL0005,IUQOID, , [/TAG] in premessa, ai sensi e per gli effetti di quanto previsto dal sopra citato Regolamento sulla disciplina delle attivit&agrave; di ricerca, consulenza, didattica e alta formazione eseguite dall'Universit&agrave; degli Studi di Parma a fronte di contratti o accordi con soggetti terzi con riferimento all'Art.2, punto B;</p> <p>ritenuto, per quanto premesso, di aderire alla richiesta di [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG] di approvazione della stipula Accordo con [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] per [TAG]SCHEMAID,341,COL0005,IUQOID, , [/TAG] in premessa, ai sensi e per gli effetti di quanto previsto dal sopra citato Regolamento sulla disciplina delle attivit&agrave; di ricerca, consulenza, didattica e alta formazione eseguite dall'Universit&agrave; degli Studi di Parma a fronte di contratti o accordi con soggetti terzi con riferimento all'Art.2, punto B;</p>
@@ -114,7 +109,7 @@ runtime:
<li>di autorizzare l'introito del contributo di euro [TAG]SCHEMAID,341,COL0094,IUQOID, , [/TAG] da parte di [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] a favore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG][IF][CONDITION][!--[% [TAG]SCHEMAID,341,COL0090,IUQOID, , [/TAG] != "N" %]--][% mostraRitenute != "N" %][/CONDITION][THEN][IF][CONDITION][!--[% [TAG]SCHEMAID,341,COL0051,IUQOID, , [/TAG] > 0 %]--][% speseGenerali > 0 %][/CONDITION][THEN], da assoggettare alle ritenute secondo le modalità previste dall'art. 6, comma 2 del "Regolamento sulla disciplina delle attivit&agrave; di ricerca, consulenza e didattica e alta formazione eseguite dall'Universit&agrave; degli Studi di Parma a fronte di contratti o accordi con soggetti terzi" nella misura del [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoAmministrazione %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0049,IUQOID, , [/TAG]) per l'Amministrazione di Ateneo, del [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoFondo %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0050,IUQOID, , [/TAG]) per il Fondo Comune di Ateneo e del [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoWelfare %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0051,IUQOID, , [/TAG]) per l'incremento dei fondi di cui agli artt. 119, comma 2, punto a) e 121, comma 2, punto a) del CCNL di comparto per l'attuazione dell'art. 110, comma 2 del medesimo contratto[/THEN][/IF][IF][CONDITION][!--[% [TAG]SCHEMAID,337,COL0064,IUQOID, , [/TAG] != "" && [TAG]SCHEMAID,337,COL0064,IUQOID, , [/TAG] > 0 %]--][% ulterioreRitenuta2Max > 0 %][/CONDITION][THEN], con una ritenuta ulteriore del [FORMAT type="number" pattern="#,##0.##"][% ulterioreRitenuta2Max %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0068,IUQOID, , [/TAG]) a favore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG][/THEN][/IF][/THEN][/IF];</li> <li>di autorizzare l'introito del contributo di euro [TAG]SCHEMAID,341,COL0094,IUQOID, , [/TAG] da parte di [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] a favore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG][IF][CONDITION][!--[% [TAG]SCHEMAID,341,COL0090,IUQOID, , [/TAG] != "N" %]--][% mostraRitenute != "N" %][/CONDITION][THEN][IF][CONDITION][!--[% [TAG]SCHEMAID,341,COL0051,IUQOID, , [/TAG] > 0 %]--][% speseGenerali > 0 %][/CONDITION][THEN], da assoggettare alle ritenute secondo le modalità previste dall'art. 6, comma 2 del "Regolamento sulla disciplina delle attivit&agrave; di ricerca, consulenza e didattica e alta formazione eseguite dall'Universit&agrave; degli Studi di Parma a fronte di contratti o accordi con soggetti terzi" nella misura del [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoAmministrazione %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0049,IUQOID, , [/TAG]) per l'Amministrazione di Ateneo, del [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoFondo %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0050,IUQOID, , [/TAG]) per il Fondo Comune di Ateneo e del [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoWelfare %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0051,IUQOID, , [/TAG]) per l'incremento dei fondi di cui agli artt. 119, comma 2, punto a) e 121, comma 2, punto a) del CCNL di comparto per l'attuazione dell'art. 110, comma 2 del medesimo contratto[/THEN][/IF][IF][CONDITION][!--[% [TAG]SCHEMAID,337,COL0064,IUQOID, , [/TAG] != "" && [TAG]SCHEMAID,337,COL0064,IUQOID, , [/TAG] > 0 %]--][% ulterioreRitenuta2Max > 0 %][/CONDITION][THEN], con una ritenuta ulteriore del [FORMAT type="number" pattern="#,##0.##"][% ulterioreRitenuta2Max %][/FORMAT]% (euro [TAG]SCHEMAID,337,COL0068,IUQOID, , [/TAG]) a favore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG][/THEN][/IF][/THEN][/IF];</li>
[/THEN][/IF] [/THEN][/IF]
<li>di conferire mandato al Direttore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG] per l'adempimento di ogni attivit&agrave; relativa.</li> <li>di dare mandato al Direttore del [TAG]SCHEMAID,341,COL0006,IUQOID, , [/TAG] per ogni adempimento relativo.</li>
</ol> </ol>
<div class="firma"> <div class="firma">
@@ -45,13 +45,6 @@ runtime:
[% percentualeNonEcoFondo = ritenutaNonEcoFondo * 100; %] [% percentualeNonEcoFondo = ritenutaNonEcoFondo * 100; %]
[% percentualeNonEcoWelfare = ritenutaNonEcoWelfare * 100; %] [% percentualeNonEcoWelfare = ritenutaNonEcoWelfare * 100; %]
[!--
1. [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoAmministrazione %][/FORMAT]%<br/>
2. [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoFondo %][/FORMAT]%<br/>
3. [FORMAT type="number" pattern="#,##0.##"][% percentualeNonEcoWelfare %][/FORMAT]%<br/>
4. [FORMAT type="number" pattern="#,##0.##"][% ulterioreRitenuta2Max %][/FORMAT]%<br/>
--]
<html> <html>
<head> <head>
<style> <style>
@@ -79,7 +72,7 @@ runtime:
<body> <body>
<!-- Header con logo UniPR come nel template standard --> <!-- Header con logo UniPR come nel template standard -->
<h2>IL DIRIGENTE</h2> <h2>IL DIRETTORE GENERALE</h2>
<p>visto il Decreto Ministeriale 30 novembre 2021 recante "Misure volte a facilitare e sostenere la realizzazione degli studi clinici di medicinali senza scopo di lucro e degli studi osservazionali e a disciplinare la cessione di dati e risultati di sperimentazioni senza scopo di lucro a fini registrativi, ai sensi dell'art. 1, comma 1, lettera c), del decreto legislativo 14 maggio 2019, n. 52";</p> <p>visto il Decreto Ministeriale 30 novembre 2021 recante "Misure volte a facilitare e sostenere la realizzazione degli studi clinici di medicinali senza scopo di lucro e degli studi osservazionali e a disciplinare la cessione di dati e risultati di sperimentazioni senza scopo di lucro a fini registrativi, ai sensi dell'art. 1, comma 1, lettera c), del decreto legislativo 14 maggio 2019, n. 52";</p>
@@ -99,6 +92,8 @@ runtime:
<p>preso atto dell'autorizzazione all'avvio dello studio rilasciata in data ___ da ___;</p> <p>preso atto dell'autorizzazione all'avvio dello studio rilasciata in data ___ da ___;</p>
<!-- Indicazione domanda elixForms: "vista la domanda n.° <ID_DOMANDA>, ricevuta n.° <ID_RICEVUTA> (pervenuta il <DATA_INOLTRO> tramite il portale "Procedure Online");" -->
<p>ritenuto, per quanto premesso, di aderire alla richiesta avanzata da [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG] di approvazione della stipula del contratto con [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] per la conduzione della sperimentazione sopra descritta, ai sensi e per gli effetti di quanto previsto dal sopra citato Regolamento sulla disciplina delle attivit&agrave; di ricerca, consulenza, didattica e alta formazione eseguite dall'Universit&agrave; degli Studi di Parma a fronte di contratti o accordi con soggetti terzi con riferimento all'Art.2, lettera B;</p> <p>ritenuto, per quanto premesso, di aderire alla richiesta avanzata da [TAG]SCHEMAID,341,COL0049,IUQOID, , [/TAG] di approvazione della stipula del contratto con [TAG]SCHEMAID,341,COL0086,IUQOID, , [/TAG] per la conduzione della sperimentazione sopra descritta, ai sensi e per gli effetti di quanto previsto dal sopra citato Regolamento sulla disciplina delle attivit&agrave; di ricerca, consulenza, didattica e alta formazione eseguite dall'Universit&agrave; degli Studi di Parma a fronte di contratti o accordi con soggetti terzi con riferimento all'Art.2, lettera B;</p>
<h2>determina</h2> <h2>determina</h2>
@@ -1,7 +1,7 @@
info: info:
name: EFTL processing name: EFTL processing
type: folder type: folder
seq: 5 seq: 7
request: request:
auth: inherit auth: inherit
@@ -1,7 +1,7 @@
info: info:
name: Request details name: Request details
type: folder type: folder
seq: 8 seq: 10
request: request:
auth: inherit auth: inherit
@@ -1,7 +1,7 @@
info: info:
name: Requests lookup name: Requests lookup
type: folder type: folder
seq: 7 seq: 9
request: request:
auth: inherit auth: inherit
@@ -1,7 +1,7 @@
info: info:
name: Runner- Get Proposta CCT matching contract IDs name: Runner- Get Proposta CCT matching contract IDs
type: folder type: folder
seq: 2 seq: 5
request: request:
auth: inherit auth: inherit
@@ -1,7 +1,7 @@
info: info:
name: Runner- Get all requests by ModuleTag and status name: Runner- Get all requests by ModuleTag and status
type: folder type: folder
seq: 1 seq: 4
request: request:
auth: inherit auth: inherit
@@ -1,7 +1,7 @@
info: info:
name: "Set Request Status: Incomplete" name: "Set Request Status: Incomplete"
type: http type: http
seq: 13 seq: 15
http: http:
method: POST method: POST
@@ -1,7 +1,7 @@
info: info:
name: Test Remote WS name: Test Remote WS
type: http type: http
seq: 4 seq: 6
http: http:
method: GET method: GET
@@ -1,7 +1,7 @@
info: info:
name: User info name: User info
type: folder type: folder
seq: 9 seq: 11
request: request:
auth: inherit auth: inherit
@@ -1,23 +0,0 @@
info:
name: Export Module
type: http
seq: 1
http:
method: GET
url: "{{elixFormsRootUrl}}/AJSRV/ELIXFORMS/moduleExport?MODULE_ID=21405&exportProtocol=true"
params:
- name: MODULE_ID
value: "21405"
type: query
- name: exportProtocol
value: "true"
type: query
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
forwardAuthorizationHeader: true
@@ -1,7 +0,0 @@
info:
name: _HACKS
type: folder
seq: 3
request:
auth: inherit
@@ -3,19 +3,17 @@ color: "#2E8A54"
variables: variables:
- name: elixFormsApiUrl - name: elixFormsApiUrl
value: https://procedure.unipr.it/eF/services/api value: https://procedure.unipr.it/eF/services/api
description: ""
- name: elixFormsApiUsername - name: elixFormsApiUsername
value: "{{process.env.elixFormsApiUsername}}" value: "{{process.env.elixFormsApiUsername}}"
description: ""
- name: elixFormsWsAuthenticationToken - name: elixFormsWsAuthenticationToken
value: "{{process.env.elixFormsWsAuthenticationToken}}" value: "{{process.env.elixFormsWsAuthenticationToken}}"
description: ""
- name: elixFormsApiUrl_Default - name: elixFormsApiUrl_Default
value: https://procedure.unipr.it/eF/api value: https://procedure.unipr.it/eF/api
description: ""
- name: elixFormsApiPassword - name: elixFormsApiPassword
value: "{{process.env.elixFormsApiPassword}}" value: "{{process.env.elixFormsApiPassword}}"
description: ""
- name: elixFormsRootUrl - name: elixFormsRootUrl
value: https://procedure.unipr.it value: https://console-unipr.elixforms.it
description: "" - name: elixFormsConsoleUsername
value: "{{process.env.elixFormsConsoleUsername}}"
- name: elixFormsConsolePassword
value: "{{process.env.elixFormsConsolePassword}}"
+16 -3
View File
@@ -1,19 +1,26 @@
{ {
"Config": { "Config": {
"ExcludeFromBruno": [ "ExcludeFromBruno": [
"elixFormsRootUrl",
"elixFormsApiUrl", "elixFormsApiUrl",
"elixFormsApiUrl_Default", "elixFormsApiUrl_Default",
"elixFormsRootUrl",
"esse3apiRootUrl", "esse3apiRootUrl",
"IdemApiUrl", "IdemApiUrl",
"IrisApiUrl" "IrisApiUrl",
"shibbolethServerUri",
"clientRedirectUri"
] ]
}, },
"API": { "API": {
"elixForms API v2": { "elixForms API v2": {
"elixFormsApiUrl": "https://procedure.unipr.it/eF/services/api", "elixFormsApiUrl": "https://console-unipr.elixforms.it/eF/services/api",
"elixFormsApiUrl_Default": "https://procedure.unipr.it/eF/api", "elixFormsApiUrl_Default": "https://console-unipr.elixforms.it/eF/api",
"elixFormsRootUrl": "https://console-unipr.elixforms.it",
"elixFormsApiUsername": null, "elixFormsApiUsername": null,
"elixFormsApiPassword": null, "elixFormsApiPassword": null,
"elixFormsConsoleUsername": null,
"elixFormsConsolePassword": null,
"elixFormsWsAuthenticationToken": null "elixFormsWsAuthenticationToken": null
}, },
"ESSE3 Anagrafica API": { "ESSE3 Anagrafica API": {
@@ -40,6 +47,12 @@
"Scopus": { "Scopus": {
"ScopusApiKey1": null, "ScopusApiKey1": null,
"ScopusApiKey2": null "ScopusApiKey2": null
},
"Shibboleth": {
"shibbolethServerUri": "https://shibidp.unipr.it",
"clientId": null,
"clientSecret": null,
"clientRedirectUri": "https://gitea.unipr.it/user/oauth2/Shibboleth/callback"
} }
} }
} }
+5 -9
View File
@@ -1,21 +1,17 @@
function Initialize-PowerShellEnvironment { function Import-PowerShellYamlModule {
Write-Host "Initializing PowerShell environment..." -ForegroundColor Yellow
# Add any environment setup logic here, such as importing modules, setting variables, etc.
# Example: Import-Module SomeModule
Import-Module powershell-yaml -ErrorAction SilentlyContinue Import-Module powershell-yaml -ErrorAction SilentlyContinue
Write-Host "PowerShell environment initialized." -ForegroundColor Green
} }
function Invoke-Main { function Invoke-Main {
Write-Host "Preparing environment..." -ForegroundColor Cyan Write-Host "Preparing environment..." -ForegroundColor Cyan
Write-Host Write-Host
Initialize-PowerShellEnvironment Write-Host "Initializing PowerShell environment..." -ForegroundColor Yellow
Import-PowerShellYamlModule
Write-Host "PowerShell environment initialized." -ForegroundColor Green
Write-Host Write-Host
Write-Host "Environment preparation complete!" -ForegroundColor Green Write-Host "Environment preparation complete!" -ForegroundColor Green
} }
Invoke-Main Invoke-Main
+48
View File
@@ -0,0 +1,48 @@
$setupToolsScript = (Resolve-Path -LiteralPath (Join-Path $PSScriptRoot '..\scripts\setup-tools.ps1')).Path
$expectedOutput = @(
'Preparing environment...'
''
'Initializing PowerShell environment...'
'PowerShell environment initialized.'
''
'Environment preparation complete!'
) -join "`n"
Describe 'setup-tools.ps1' {
It 'imports powershell-yaml and preserves the user-facing output' {
$originalModulePath = $env:PSModulePath
try {
$moduleRoot = Join-Path $TestDrive 'available-modules'
$moduleDirectory = Join-Path $moduleRoot 'powershell-yaml'
$null = New-Item -ItemType Directory -Path $moduleDirectory
Set-Content -LiteralPath (Join-Path $moduleDirectory 'powershell-yaml.psm1') -Value ''
$env:PSModulePath = $moduleRoot
$escapedScriptPath = $setupToolsScript.Replace("'", "''")
$command = "& '$escapedScriptPath'; if (-not (Get-Module -Name powershell-yaml)) { exit 42 }"
$output = @(& pwsh -NoProfile -Command $command 6>&1 | ForEach-Object { $_.ToString() })
$LASTEXITCODE | Should Be 0
($output -join "`n") | Should Be $expectedOutput
}
finally {
$env:PSModulePath = $originalModulePath
}
}
It 'continues successfully when powershell-yaml is unavailable' {
$originalModulePath = $env:PSModulePath
try {
$env:PSModulePath = Join-Path $TestDrive 'missing-modules'
$output = @(& pwsh -NoProfile -File $setupToolsScript 6>&1 | ForEach-Object { $_.ToString() })
$LASTEXITCODE | Should Be 0
($output -join "`n") | Should Be $expectedOutput
}
finally {
$env:PSModulePath = $originalModulePath
}
}
}