diff --git a/404.html b/404.html index 3b20543..b58d514 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ ACME Sky - + diff --git a/architecture.html b/architecture.html index b11cb26..1dbba1a 100644 --- a/architecture.html +++ b/architecture.html @@ -4,7 +4,7 @@ Architettura | ACME Sky - + diff --git a/assets/js/46d39e0a.01ba4c2c.js b/assets/js/46d39e0a.8d7531e6.js similarity index 60% rename from assets/js/46d39e0a.01ba4c2c.js rename to assets/js/46d39e0a.8d7531e6.js index 400c7a3..6d2bc85 100644 --- a/assets/js/46d39e0a.01ba4c2c.js +++ b/assets/js/46d39e0a.8d7531e6.js @@ -1 +1 @@ -"use strict";(self.webpackChunkacme_sky_docs=self.webpackChunkacme_sky_docs||[]).push([[889],{4214:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=s(4848),r=s(8453);const o={sidebar_position:5,slug:"/services/prontogram"},t="Prontogram",a={id:"services/prontogram",title:"Prontogram",description:"Prontogram \xe8 un servizio di messagistica scritto sottoforma di API REST in Jolie.",source:"@site/docs/services/prontogram.md",sourceDirName:"services",slug:"/services/prontogram",permalink:"/docs/services/prontogram",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"/services/prontogram"},sidebar:"defaultSidebar",previous:{title:"Geodistance",permalink:"/docs/services/geodistance"}},l={},d=[{value:"Set up manuale",id:"set-up-manuale",level:2},{value:"Set up docker",id:"set-up-docker",level:2},{value:"API",id:"api",level:2},{value:"Formato dei dati",id:"formato-dei-dati",level:3},{value:"Frontend",id:"frontend",level:2},{value:"Codice sorgente",id:"codice-sorgente",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"prontogram",children:"Prontogram"}),"\n",(0,i.jsx)(n.p,{children:"Prontogram \xe8 un servizio di messagistica scritto sottoforma di API REST in Jolie."}),"\n",(0,i.jsx)(n.h2,{id:"set-up-manuale",children:"Set up manuale"}),"\n",(0,i.jsxs)(n.p,{children:["Il server in Jolie \xe8 stato realizzato con in mente l'utilizzo di ",(0,i.jsx)(n.a,{href:"https://docs.jolie-lang.org/v1.11.x/language-tools-and-standard-library/rest/jolier/index.html",children:"Jolier"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"jolier server.ol WebPort localhost:8000 -headerHandler\n"})}),"\n",(0,i.jsxs)(n.p,{children:["L'utilizzo del parametro ",(0,i.jsx)(n.code,{children:"-headerHandler"})," \xe8 quindi necessario in quanto il server ne fa utilizzo per la gestione di cookies e Headers nelle risposte HTTP."]}),"\n",(0,i.jsxs)(n.p,{children:["A questo punto il server sar\xe0 raggiungibile a ",(0,i.jsx)(n.code,{children:"http://localhost:8000/"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Prima di utilizzare il server \xe8 necessario avviare un database Postgres, per il quale \xe8 fornito un ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," in ",(0,i.jsx)(n.code,{children:"/db"}),", con annesso ",(0,i.jsx)(n.code,{children:"init.sql"}),".\nN.B. per l'utilizzo dell'interfaccia ",(0,i.jsx)(n.code,{children:"Database"})," di Jolie \xe8 necessario anche il ",(0,i.jsx)(n.code,{children:"postgresql-{version}.jar"})," fornito in ",(0,i.jsx)(n.code,{children:"/lib"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Il ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," \xe8 in grado di effettuare il setup del database in maniera automatica, basta eseguire il comando ",(0,i.jsx)(n.code,{children:"docker compose up"})," nella directory del file."]}),"\n",(0,i.jsx)(n.h2,{id:"set-up-docker",children:"Set up docker"}),"\n",(0,i.jsxs)(n.p,{children:["E' possibile utilizzare il servizio tramite il ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," fornito nella home della repository.\nPer fare ci\xf2 \xe8 necessario innanzitutto creare il file ",(0,i.jsx)(n.code,{children:"config.json"})," nella root del progetto che si occupa della connessione al database, del quale viene fornito un template."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-JSON",children:'{\n"database": {\n "username": "db_user_username",\n "password": "db_user_password",\n "host": "container_name",\n "database": "database_name",\n "driver": "postgresql" #DON\'T CHANGE UNLESS YOU WANT TO USE A DIFFERENT DATABASE\n }\n}\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Successivamente va buildata l'immagine con il ",(0,i.jsx)(n.code,{children:"Dockerfile"})," fornito sempre nella root del progetto. (E' possibile buildare direttamente con ",(0,i.jsx)(n.code,{children:"docker compose build"})," utilizzando il ",(0,i.jsx)(n.code,{children:"docker-compose.yml"}),").\nInfine, ",(0,i.jsx)(n.code,{children:"docker compose up"}),", il server sar\xe0 disponibile a ",(0,i.jsx)(n.code,{children:"localhost:8000"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"api",children:"API"}),"\n",(0,i.jsxs)(n.p,{children:["Il servizio offre una API di tipo REST che permette di effettuare le operazioni di login, registrazione di un utente, log dei messaggi, invio di un messaggio e logout.\n",(0,i.jsx)(n.img,{alt:"Prontogram routes",src:s(9854).A+"",width:"2033",height:"780"})]}),"\n",(0,i.jsxs)(n.p,{children:["Il ",(0,i.jsx)(n.strong,{children:"mapping"})," e il ",(0,i.jsx)(n.strong,{children:"metodo"})," delle richieste \xe8 descritto all'interno di ",(0,i.jsx)(n.code,{children:"rest_template.json"}),", necessario per l'utilizzo di jolier."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "login": {\n "method":"post",\n "template": "api/login"\n },\n "getMessages": {\n "method":"get",\n "template":"api/getMessages/{username}"\n },\n "register": {\n "method":"post",\n "template":"api/register"\n },\n "logout": {\n "method":"post",\n "template": "api/logout"\n },\n "sendMessage": {\n "method":"post",\n "template": "api/sendMessage"\n }\n}\n'})}),"\n",(0,i.jsx)(n.h3,{id:"formato-dei-dati",children:"Formato dei dati"}),"\n",(0,i.jsxs)(n.p,{children:["Strutture dati (custom types) necessarie per le richieste e risposte sono descritte in ",(0,i.jsx)(n.code,{children:"pronto.iol"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-jolie",children:"type loginRequest{\n .username: string\n .password: string\n}\n\ntype logoutRequest{\n .username?: string\n .sid?: string\n}\n\ntype registerRequest{\n .username: string\n .password: string\n .name: string\n .surname: string\n}\n\ntype messagesRequest{\n .username: string\n .sid?: string\n}\n\ntype prontoResponse :void{\n .message: string\n .sid?: string\n .status?: int\n}\n\ntype sendMessageRequest{\n .message: string\n .username: string\n .expiration?: string\n}\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Nelle strutture, l'attributo ",(0,i.jsx)(n.code,{children:"sid"})," \xe8 l'identificatore univoco generato dal server Jolie per il managing delle sessioni utente, che agir\xe0 come valore del cookie in grado di gestire l'autenticazione."]}),"\n",(0,i.jsxs)(n.p,{children:["All'interno di ",(0,i.jsx)(n.code,{children:"RestHandler.ol"})," troviamo:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-jolie",children:'main{\n [incomingHeaderHandler(request)(response){\n if ( request.operation == "api/login" ){\n getJsonValue@JsonUtils(request.headers.("data"))(credentials)\n response.username = credentials.username\n response.password = credentials.password\n } else if (request.operation == "api/register") {\n getJsonValue@JsonUtils(request.headers.("data"))(credentials)\n response.username = credentials.username\n response.password = credentials.password\n response.name = credentials.name\n response.surname = credentials.surname\n } else if (request.operation == "getMessages" || request.operation == "logout"){\n response.sid = request.headers.cookies.session\n }\n }]\n\n...\n}\n'})}),"\n",(0,i.jsx)(n.p,{children:"che si occupa della gestione dei dati in ingresso quando vengono effettuate le chiamate di login, register."}),"\n",(0,i.jsxs)(n.p,{children:["Come si evince dal codice queste vengono inviate in formato JSON da un client all'interno dell'header ",(0,i.jsx)(n.code,{children:"credentials"}),", seguendo la nomenclatura dei custom types sopra illustrati."]}),"\n",(0,i.jsx)(n.h2,{id:"frontend",children:"Frontend"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Screenshot frontend",src:s(4681).A+"",width:"2825",height:"2191"})}),"\n",(0,i.jsx)(n.p,{children:"Il frontend di Prontogram \xe8 un semplice progetto realizzato tramite l'utilizzo del framework React, che permette di visualizzare i propri messaggi inviati da AcmeSky, effettuando un login."}),"\n",(0,i.jsx)(n.h2,{id:"codice-sorgente",children:"Codice sorgente"}),"\n",(0,i.jsxs)(n.p,{children:["Il server, scritto in Jolie, \xe8 presente alla seguente ",(0,i.jsx)(n.a,{href:"https://github.com/acme-sky/prontogram",children:"repository Github"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Il frontend, \xe8 presente alla seguente ",(0,i.jsx)(n.a,{href:"https://github.com/acme-sky/prontogram-frontend",children:"repository Github"}),"."]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},4681:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/prontogram-frontend-374b33fed40c3c305fa28ebd9f9eb8ff.png"},9854:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/prontogram_recap-3c0a99b1a71766b88d549c48c256b311.png"},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>a});var i=s(6540);const r={},o=i.createContext(r);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkacme_sky_docs=self.webpackChunkacme_sky_docs||[]).push([[889],{4214:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>p,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var i=s(4848),r=s(8453);const o={sidebar_position:5,slug:"/services/prontogram"},t="Prontogram",a={id:"services/prontogram",title:"Prontogram",description:"Prontogram \xe8 un servizio di messagistica scritto sottoforma di API REST in Jolie.",source:"@site/docs/services/prontogram.md",sourceDirName:"services",slug:"/services/prontogram",permalink:"/docs/services/prontogram",draft:!1,unlisted:!1,tags:[],version:"current",sidebarPosition:5,frontMatter:{sidebar_position:5,slug:"/services/prontogram"},sidebar:"defaultSidebar",previous:{title:"Geodistance",permalink:"/docs/services/geodistance"}},l={},d=[{value:"Set up manuale",id:"set-up-manuale",level:2},{value:"Set up docker",id:"set-up-docker",level:2},{value:"API",id:"api",level:2},{value:"Formato dei dati",id:"formato-dei-dati",level:3},{value:"Frontend",id:"frontend",level:2},{value:"Codice sorgente",id:"codice-sorgente",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",p:"p",pre:"pre",strong:"strong",...(0,r.R)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"prontogram",children:"Prontogram"}),"\n",(0,i.jsx)(n.p,{children:"Prontogram \xe8 un servizio di messagistica scritto sottoforma di API REST in Jolie."}),"\n",(0,i.jsx)(n.h2,{id:"set-up-manuale",children:"Set up manuale"}),"\n",(0,i.jsxs)(n.p,{children:["Il server in Jolie \xe8 stato realizzato con in mente l'utilizzo di ",(0,i.jsx)(n.a,{href:"https://docs.jolie-lang.org/v1.11.x/language-tools-and-standard-library/rest/jolier/index.html",children:"Jolier"}),"."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"jolier server.ol WebPort localhost:8000 -headerHandler\n"})}),"\n",(0,i.jsxs)(n.p,{children:["L'utilizzo del parametro ",(0,i.jsx)(n.code,{children:"-headerHandler"})," \xe8 quindi necessario in quanto il server ne fa utilizzo per la gestione di cookies e Headers nelle risposte HTTP."]}),"\n",(0,i.jsxs)(n.p,{children:["A questo punto il server sar\xe0 raggiungibile a ",(0,i.jsx)(n.code,{children:"http://localhost:8000/"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Prima di utilizzare il server \xe8 necessario avviare un database Postgres, per il quale \xe8 fornito un ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," in ",(0,i.jsx)(n.code,{children:"/db"}),", con annesso ",(0,i.jsx)(n.code,{children:"init.sql"}),".\nN.B. per l'utilizzo dell'interfaccia ",(0,i.jsx)(n.code,{children:"Database"})," di Jolie \xe8 necessario anche il ",(0,i.jsx)(n.code,{children:"postgresql-{version}.jar"})," fornito in ",(0,i.jsx)(n.code,{children:"/lib"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Il ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," \xe8 in grado di effettuare il setup del database in maniera automatica, basta eseguire il comando ",(0,i.jsx)(n.code,{children:"docker compose up"})," nella directory del file."]}),"\n",(0,i.jsx)(n.h2,{id:"set-up-docker",children:"Set up docker"}),"\n",(0,i.jsxs)(n.p,{children:["E' possibile utilizzare il servizio tramite il ",(0,i.jsx)(n.code,{children:"docker-compose.yml"})," fornito nella home della repository.\nPer fare ci\xf2 \xe8 necessario innanzitutto creare il file ",(0,i.jsx)(n.code,{children:"config.json"})," nella root del progetto che si occupa della connessione al database, del quale viene fornito un template."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-JSON",children:'{\n"database": {\n "username": "db_user_username",\n "password": "db_user_password",\n "host": "container_name",\n "database": "database_name",\n "driver": "postgresql" #DON\'T CHANGE UNLESS YOU WANT TO USE A DIFFERENT DATABASE\n }\n}\n'})}),"\n",(0,i.jsxs)(n.p,{children:["Successivamente va buildata l'immagine con il ",(0,i.jsx)(n.code,{children:"Dockerfile"})," fornito sempre nella root del progetto. (E' possibile buildare direttamente con ",(0,i.jsx)(n.code,{children:"docker compose build"})," utilizzando il ",(0,i.jsx)(n.code,{children:"docker-compose.yml"}),").\nInfine, ",(0,i.jsx)(n.code,{children:"docker compose up"}),", il server sar\xe0 disponibile a ",(0,i.jsx)(n.code,{children:"localhost:8000"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"api",children:"API"}),"\n",(0,i.jsxs)(n.p,{children:["Il servizio offre una API di tipo REST che permette di effettuare le operazioni di login, registrazione di un utente, log dei messaggi, invio di un messaggio e logout.\n",(0,i.jsx)(n.img,{alt:"Prontogram routes",src:s(9854).A+"",width:"2033",height:"780"})]}),"\n",(0,i.jsxs)(n.p,{children:["Il ",(0,i.jsx)(n.strong,{children:"mapping"})," e il ",(0,i.jsx)(n.strong,{children:"metodo"})," delle richieste \xe8 descritto all'interno di ",(0,i.jsx)(n.code,{children:"rest_template.json"}),", necessario per l'utilizzo di jolier."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-json",children:'{\n "login": {\n "method":"post",\n "template": "api/login"\n },\n "getMessages": {\n "method":"get",\n "template":"api/getMessages/{username}"\n },\n "register": {\n "method":"post",\n "template":"api/register"\n },\n "logout": {\n "method":"post",\n "template": "api/logout"\n },\n "sendMessage": {\n "method":"post",\n "template": "api/sendMessage"\n }\n}\n'})}),"\n",(0,i.jsx)(n.h3,{id:"formato-dei-dati",children:"Formato dei dati"}),"\n",(0,i.jsxs)(n.p,{children:["Strutture dati (custom types) necessarie per le richieste e risposte sono descritte in ",(0,i.jsx)(n.code,{children:"pronto.iol"}),":"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-jolie",children:"type loginRequest{\n .username: string\n .password: string\n .sid?: string\n}\n\ntype logoutRequest{\n .username?: string\n .sid?: string\n}\n\ntype registerRequest{\n .username: string\n .password: string\n .name: string\n .surname: string\n}\n\ntype messagesRequest{\n .username: string\n .sid?: string\n}\n\ntype prontoResponse :void{\n .message: string\n .sid?: string\n .status?: int\n}\n\ntype sendMessageRequest{\n .message: string\n .username: string\n .expiration: string\n .sid?: string\n}\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Nelle strutture, l'attributo ",(0,i.jsx)(n.code,{children:"sid"})," \xe8 l'identificatore univoco generato dal server Jolie per il managing delle sessioni utente, che agir\xe0 come valore del cookie in grado di gestire l'autenticazione."]}),"\n",(0,i.jsxs)(n.p,{children:["All'interno di ",(0,i.jsx)(n.code,{children:"RestHandler.ol"})," troviamo:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-jolie",children:'main{\n [incomingHeaderHandler(request)(response){\n if ( request.operation == "api/login" ){\n getJsonValue@JsonUtils(request.headers.("data"))(credentials)\n response.username = credentials.username\n response.password = credentials.password\n } else if (request.operation == "api/register") {\n getJsonValue@JsonUtils(request.headers.("data"))(credentials)\n response.username = credentials.username\n response.password = credentials.password\n response.name = credentials.name\n response.surname = credentials.surname\n } else if (request.operation == "getMessages" || request.operation == "logout"){\n response.sid = request.headers.cookies.session\n }\n }]\n\n...\n}\n'})}),"\n",(0,i.jsx)(n.p,{children:"che si occupa della gestione dei dati in ingresso quando vengono effettuate le chiamate di login, register."}),"\n",(0,i.jsxs)(n.p,{children:["Come si evince dal codice queste vengono inviate in formato JSON da un client all'interno dell'header ",(0,i.jsx)(n.code,{children:"credentials"}),", seguendo la nomenclatura dei custom types sopra illustrati."]}),"\n",(0,i.jsx)(n.h2,{id:"frontend",children:"Frontend"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Screenshot frontend",src:s(4681).A+"",width:"2825",height:"2191"})}),"\n",(0,i.jsx)(n.p,{children:"Il frontend di Prontogram \xe8 un semplice progetto realizzato tramite l'utilizzo del framework React, che permette di visualizzare i propri messaggi inviati da AcmeSky, effettuando un login."}),"\n",(0,i.jsx)(n.h2,{id:"codice-sorgente",children:"Codice sorgente"}),"\n",(0,i.jsxs)(n.p,{children:["Il server, scritto in Jolie, \xe8 presente alla seguente ",(0,i.jsx)(n.a,{href:"https://github.com/acme-sky/prontogram",children:"repository Github"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Il frontend, \xe8 presente alla seguente ",(0,i.jsx)(n.a,{href:"https://github.com/acme-sky/prontogram-frontend",children:"repository Github"}),"."]})]})}function p(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},4681:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/prontogram-frontend-374b33fed40c3c305fa28ebd9f9eb8ff.png"},9854:(e,n,s)=>{s.d(n,{A:()=>i});const i=s.p+"assets/images/prontogram_recap-3c0a99b1a71766b88d549c48c256b311.png"},8453:(e,n,s)=>{s.d(n,{R:()=>t,x:()=>a});var i=s(6540);const r={},o=i.createContext(r);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.3a8d0a77.js b/assets/js/runtime~main.6f88aa9a.js similarity index 96% rename from assets/js/runtime~main.3a8d0a77.js rename to assets/js/runtime~main.6f88aa9a.js index 073e6f2..ce7e622 100644 --- a/assets/js/runtime~main.3a8d0a77.js +++ b/assets/js/runtime~main.6f88aa9a.js @@ -1 +1 @@ -(()=>{"use strict";var e,t,r,a,o,n={},c={};function f(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,f),r.loaded=!0,r.exports}f.m=n,f.c=c,e=[],f.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u=o)&&Object.keys(f.O).every((e=>f.O[e](r[d])))?r.splice(d--,1):(c=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var c=2&a&&e;"object"==typeof c&&!~t.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,f.d(o,n),o},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",166:"4d0644fa",228:"ce36a6fc",233:"dc7abf1f",266:"e1b4be11",279:"3d9c95a4",401:"17896441",478:"f2766321",497:"c1aef90c",548:"247783bb",565:"a70bf486",581:"935f2afb",647:"5e95c892",889:"46d39e0a",901:"8b35e029",980:"cd8a10ac",994:"905c090c"}[e]||e)+"."+{48:"77937af9",98:"5f3a2f27",166:"41c5db5f",228:"4c7d4513",233:"97a48330",237:"31c1c35f",266:"9b7188a5",279:"a18d5d30",401:"62e4f36a",478:"483295b5",497:"24092c2c",548:"8e10f758",565:"15874a8e",581:"ab3db9a5",647:"863de482",889:"01ba4c2c",901:"e017b222",980:"16cb85df",994:"d5d91fcf"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="acme-sky-docs:",f.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var c,d;if(void 0!==r)for(var i=document.getElementsByTagName("script"),u=0;u{c.onerror=c.onload=null,clearTimeout(b);var o=a[e];if(delete a[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((e=>e(r))),t)return t(r)},b=setTimeout(s.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=s.bind(null,c.onerror),c.onload=s.bind(null,c.onload),d&&document.head.appendChild(c)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/docs/",f.gca=function(e){return e={17896441:"401",a94703ab:"48",a7bd4aaa:"98","4d0644fa":"166",ce36a6fc:"228",dc7abf1f:"233",e1b4be11:"266","3d9c95a4":"279",f2766321:"478",c1aef90c:"497","247783bb":"548",a70bf486:"565","935f2afb":"581","5e95c892":"647","46d39e0a":"889","8b35e029":"901",cd8a10ac:"980","905c090c":"994"}[e]||e,f.p+f.u(e)},(()=>{var e={354:0,869:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(354|869)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=f.p+f.u(t),c=new Error;f.l(n,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;c.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,a[1](c)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],c=r[1],d=r[2],i=0;if(n.some((t=>0!==e[t]))){for(a in c)f.o(c,a)&&(f.m[a]=c[a]);if(d)var u=d(f)}for(t&&t(r);i{"use strict";var e,t,r,a,o,n={},c={};function f(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,f),r.loaded=!0,r.exports}f.m=n,f.c=c,e=[],f.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u=o)&&Object.keys(f.O).every((e=>f.O[e](r[d])))?r.splice(d--,1):(c=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var c=2&a&&e;"object"==typeof c&&!~t.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,f.d(o,n),o},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",166:"4d0644fa",228:"ce36a6fc",233:"dc7abf1f",266:"e1b4be11",279:"3d9c95a4",401:"17896441",478:"f2766321",497:"c1aef90c",548:"247783bb",565:"a70bf486",581:"935f2afb",647:"5e95c892",889:"46d39e0a",901:"8b35e029",980:"cd8a10ac",994:"905c090c"}[e]||e)+"."+{48:"77937af9",98:"5f3a2f27",166:"41c5db5f",228:"4c7d4513",233:"97a48330",237:"31c1c35f",266:"9b7188a5",279:"a18d5d30",401:"62e4f36a",478:"483295b5",497:"24092c2c",548:"8e10f758",565:"15874a8e",581:"ab3db9a5",647:"863de482",889:"8d7531e6",901:"e017b222",980:"16cb85df",994:"d5d91fcf"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="acme-sky-docs:",f.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var c,d;if(void 0!==r)for(var i=document.getElementsByTagName("script"),u=0;u{c.onerror=c.onload=null,clearTimeout(b);var o=a[e];if(delete a[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((e=>e(r))),t)return t(r)},b=setTimeout(s.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=s.bind(null,c.onerror),c.onload=s.bind(null,c.onload),d&&document.head.appendChild(c)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/docs/",f.gca=function(e){return e={17896441:"401",a94703ab:"48",a7bd4aaa:"98","4d0644fa":"166",ce36a6fc:"228",dc7abf1f:"233",e1b4be11:"266","3d9c95a4":"279",f2766321:"478",c1aef90c:"497","247783bb":"548",a70bf486:"565","935f2afb":"581","5e95c892":"647","46d39e0a":"889","8b35e029":"901",cd8a10ac:"980","905c090c":"994"}[e]||e,f.p+f.u(e)},(()=>{var e={354:0,869:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(354|869)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=f.p+f.u(t),c=new Error;f.l(n,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;c.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,a[1](c)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],c=r[1],d=r[2],i=0;if(n.some((t=>0!==e[t]))){for(a in c)f.o(c,a)&&(f.m[a]=c[a]);if(d)var u=d(f)}for(t&&t(r);i Diagramma BPMN | ACME Sky - + diff --git a/choreos.html b/choreos.html index dd6ce88..7bf9eeb 100644 --- a/choreos.html +++ b/choreos.html @@ -4,7 +4,7 @@ Coreografie | ACME Sky - + diff --git a/choreos_bpmn.html b/choreos_bpmn.html index f2b2460..e263ccf 100644 --- a/choreos_bpmn.html +++ b/choreos_bpmn.html @@ -4,7 +4,7 @@ Diagrammi coreografie | ACME Sky - + diff --git a/index.html b/index.html index 5ec5cdc..96fae21 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ Home | ACME Sky - + diff --git a/services.html b/services.html index bc0d1f1..28400bb 100644 --- a/services.html +++ b/services.html @@ -4,7 +4,7 @@ Servizi | ACME Sky - + diff --git a/services/airline.html b/services/airline.html index d136a95..4a22633 100644 --- a/services/airline.html +++ b/services/airline.html @@ -4,7 +4,7 @@ Airline | ACME Sky - + diff --git a/services/bank.html b/services/bank.html index 4dcf650..548904f 100644 --- a/services/bank.html +++ b/services/bank.html @@ -4,7 +4,7 @@ Bank | ACME Sky - + diff --git a/services/geodistance.html b/services/geodistance.html index c00e1ee..e6f982b 100644 --- a/services/geodistance.html +++ b/services/geodistance.html @@ -4,7 +4,7 @@ Geodistance | ACME Sky - + diff --git a/services/prontogram.html b/services/prontogram.html index 2e9c1fc..1cacfa5 100644 --- a/services/prontogram.html +++ b/services/prontogram.html @@ -4,7 +4,7 @@ Prontogram | ACME Sky - + @@ -31,7 +31,7 @@

API
{
"login": {
"method":"post",
"template": "api/login"
},
"getMessages": {
"method":"get",
"template":"api/getMessages/{username}"
},
"register": {
"method":"post",
"template":"api/register"
},
"logout": {
"method":"post",
"template": "api/logout"
},
"sendMessage": {
"method":"post",
"template": "api/sendMessage"
}
}

Formato dei dati

Strutture dati (custom types) necessarie per le richieste e risposte sono descritte in pronto.iol:

-
type loginRequest{
.username: string
.password: string
}

type logoutRequest{
.username?: string
.sid?: string
}

type registerRequest{
.username: string
.password: string
.name: string
.surname: string
}

type messagesRequest{
.username: string
.sid?: string
}

type prontoResponse :void{
.message: string
.sid?: string
.status?: int
}

type sendMessageRequest{
.message: string
.username: string
.expiration?: string
}
+
type loginRequest{
.username: string
.password: string
.sid?: string
}

type logoutRequest{
.username?: string
.sid?: string
}

type registerRequest{
.username: string
.password: string
.name: string
.surname: string
}

type messagesRequest{
.username: string
.sid?: string
}

type prontoResponse :void{
.message: string
.sid?: string
.status?: int
}

type sendMessageRequest{
.message: string
.username: string
.expiration: string
.sid?: string
}

Nelle strutture, l'attributo sid è l'identificatore univoco generato dal server Jolie per il managing delle sessioni utente, che agirà come valore del cookie in grado di gestire l'autenticazione.

All'interno di RestHandler.ol troviamo:

main{
[incomingHeaderHandler(request)(response){
if ( request.operation == "api/login" ){
getJsonValue@JsonUtils(request.headers.("data"))(credentials)
response.username = credentials.username
response.password = credentials.password
} else if (request.operation == "api/register") {
getJsonValue@JsonUtils(request.headers.("data"))(credentials)
response.username = credentials.username
response.password = credentials.password
response.name = credentials.name
response.surname = credentials.surname
} else if (request.operation == "getMessages" || request.operation == "logout"){
response.sid = request.headers.cookies.session
}
}]

...
}
diff --git a/services/rent.html b/services/rent.html index 650cd68..f888ae8 100644 --- a/services/rent.html +++ b/services/rent.html @@ -4,7 +4,7 @@ Rent | ACME Sky - + diff --git a/uml.html b/uml.html index 52ceaa8..fcf6ec2 100644 --- a/uml.html +++ b/uml.html @@ -4,7 +4,7 @@ Diagrammi UML | ACME Sky - +