From 3e10ff259f718718231b8bf66b70248f6b5ff289 Mon Sep 17 00:00:00 2001 From: Andrea Ranaldi <andrea.ranaldi@gmail.com> Date: Wed, 11 Aug 2021 15:31:01 +0200 Subject: [PATCH 1/3] Updated MarkupSafe, fix #33 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index f3d487e1..b6f27562 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,7 +17,7 @@ importlib-metadata==1.5.0 jinja2>=2.11.3 ldap3==2.7 Mako==1.1.2 -MarkupSafe==1.1.1 +MarkupSafe==2.0.1 more-itertools==8.2.0 oic==1.2.1 packaging==20.1 From 8d130ae9ed8b005f708499c4f07bace43cb937d1 Mon Sep 17 00:00:00 2001 From: Andrea Ranaldi <andrea.ranaldi@gmail.com> Date: Wed, 11 Aug 2021 15:38:39 +0200 Subject: [PATCH 2/3] reindent templates, removed unclosed p tag, fix #38 --- example/templates/spid_base.html | 618 ++++++++++++------------ example/templates/spid_login_error.html | 26 +- 2 files changed, 321 insertions(+), 323 deletions(-) diff --git a/example/templates/spid_base.html b/example/templates/spid_base.html index b8b7a4b6..e7d40f14 100644 --- a/example/templates/spid_base.html +++ b/example/templates/spid_base.html @@ -1,360 +1,360 @@ <!DOCTYPE html> <html lang="it"> - <head> - <meta http-equiv="content-type" content="text/html; charset=UTF-8"> - <!-- Required meta tags --> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> - <!-- Page details --> + <head> + <meta http-equiv="content-type" content="text/html; charset=UTF-8"> + <!-- Required meta tags --> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <!-- Page details --> - {% block page_title %}{% endblock page_title %} + {% block page_title %}{% endblock page_title %} - <meta name="description" content="Bootstrap Italia"> - <!-- CSS --> - <link rel="stylesheet" href="{{ static }}spid/bootstrap-italia.css"> - <!-- Extra CSS/Javascript --> + <meta name="description" content="Bootstrap Italia"> + <!-- CSS --> + <link rel="stylesheet" href="{{ static }}spid/bootstrap-italia.css"> + <!-- Extra CSS/Javascript --> - <link rel="shortcut icon" href="{{ static }}spid/favicon-32x32.png"> + <link rel="shortcut icon" href="{{ static }}spid/favicon-32x32.png"> - <link type="text/css" rel="stylesheet" href="{{ static }}spid/spid-sp-access-button.css"> + <link type="text/css" rel="stylesheet" href="{{ static }}spid/spid-sp-access-button.css"> - {% block extra_head %} {% endblock %} + {% block extra_head %} {% endblock %} - </head> - <body> + </head> + <body> - <div class="it-header-wrapper"> + <div class="it-header-wrapper"> - <!-- Top row in header --> + <!-- Top row in header --> - <div class="it-header-slim-wrapper"> - <div class="container"> - <div class="row"> - <div class="col-12"> - <div class="it-header-slim-wrapper-content"> - <a class="d-none d-lg-block navbar-brand" href="/"> + <div class="it-header-slim-wrapper"> + <div class="container"> + <div class="row"> + <div class="col-12"> + <div class="it-header-slim-wrapper-content"> + <a class="d-none d-lg-block navbar-brand" href="/"> -Nome Organizzazione + Nome Organizzazione - </a> - <div class="nav-mobile"> - <nav> - <a class="it-opener d-lg-none" data-toggle="collapse" href="#menu-principale" role="button" aria-expanded="false" aria-controls="menu-principale"> - <span> + </a> + <div class="nav-mobile"> + <nav> + <a class="it-opener d-lg-none" data-toggle="collapse" href="#menu-principale" role="button" aria-expanded="false" aria-controls="menu-principale"> + <span> -Nome Organizzazione + Nome Organizzazione - </span> + </span> - </a> + </a> - </nav> - </div> + </nav> + </div> - </div> - </div> - </div> - </div> - </div> + </div> + </div> + </div> + </div> + </div> - <div class="it-nav-wrapper"> - <div class="it-header-center-wrapper"> - <div class="container"> - <div class="row"> - <div class="col-12"> - <div class="it-header-center-content-wrapper"> - <!-- Logo --> - <div class="it-brand-wrapper"> - <a href="/"> + <div class="it-nav-wrapper"> + <div class="it-header-center-wrapper"> + <div class="container"> + <div class="row"> + <div class="col-12"> + <div class="it-header-center-content-wrapper"> + <!-- Logo --> + <div class="it-brand-wrapper"> + <a href="/"> -<div class="col-10 col-md-12 offset-1 offset-md-0"> - <img src="{{ static }}spid/logo.jpg" style="width: 10%;" alt="SPID Logo"> -</div> + <div class="col-10 col-md-12 offset-1 offset-md-0"> + <img src="{{ static }}spid/logo.jpg" style="width: 10%;" alt="SPID Logo"> + </div> - <div class="it-brand-text"> - <h2 class="no_toc"> + <div class="it-brand-text"> + <h2 class="no_toc"> - </h2> - <h3 class="no_toc d-none d-md-block"> + </h2> + <h3 class="no_toc d-none d-md-block"> - </h3> - </div> - </a> - </div> + </h3> + </div> + </a> + </div> - <!-- Social and Search --> + <!-- Social and Search --> - <div class="it-right-zone"> + <div class="it-right-zone"> - </div> + </div> - </div> - </div> - </div> - </div> - </div> + </div> + </div> + </div> + </div> + </div> - <!-- Main menu --> + <!-- Main menu --> -<div class="it-header-navbar-wrapper"> - <div class="container"> - <div class="row"> - <div class="col-12"> - <nav class="navbar navbar-expand-lg has-megamenu"> - <button class="custom-navbar-toggler" type="button" aria-controls="nav10" aria-expanded="false" aria-label="Toggle navigation" data-target="#nav10"> - <svg class="icon"> - <use xlink:href="{{ static }}spid/svg/sprite.svg#it-burger"></use> - </svg> - </button> - <div class="navbar-collapsable" id="nav10"> - <div class="overlay"></div> - <div class="close-div sr-only"> - <button class="btn close-menu" type="button"><span class="it-close"></span>close</button> - </div> - <div class="menu-wrapper"> - <ul class="navbar-nav"> + <div class="it-header-navbar-wrapper"> + <div class="container"> + <div class="row"> + <div class="col-12"> + <nav class="navbar navbar-expand-lg has-megamenu"> + <button class="custom-navbar-toggler" type="button" aria-controls="nav10" aria-expanded="false" aria-label="Toggle navigation" data-target="#nav10"> + <svg class="icon"> + <use xlink:href="{{ static }}spid/svg/sprite.svg#it-burger"></use> + </svg> + </button> + <div class="navbar-collapsable" id="nav10"> + <div class="overlay"></div> + <div class="close-div sr-only"> + <button class="btn close-menu" type="button"><span class="it-close"></span>close</button> + </div> + <div class="menu-wrapper"> + <ul class="navbar-nav"> - <li class="nav-item active"><a class="nav-link active" href="#"> - <span>Pagina principale</span> - <span class="sr-only">current</span></a></li> + <li class="nav-item active"><a class="nav-link active" href="#"> + <span>Pagina principale</span> + <span class="sr-only">current</span></a></li> - <li class="nav-item dropdown"> - <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-expanded="false"> - <span>Domande frequenti</span> - <svg class="icon icon-xs"> - <use xlink:href="{{ static }}spid/svg/sprite.svg#it-expand"></use> - </svg> - </a> - <div class="dropdown-menu"> - <div class="link-list-wrapper"> - <ul class="link-list"> - <li> - <h3 class="no_toc" id="heading">Questo servizio</h3> - </li> - <li><a class="list-item" href=""><span>Assistenza</span></a></li> - <li><span class="divider"></span></li> - <li> - <h3 class="no_toc" id="heading">SPID</h3> - </li> - <li class="spid-idp-support-link"> - <a class="list-item" href="https://www.spid.gov.it/">Maggiori informazioni</a> - </li> - <li class="spid-idp-support-link"> - <a class="list-item" href="https://www.spid.gov.it/richiedi-spid">Non hai SPID?</a> - </li> - <li class="spid-idp-support-link"> - <a class="list-item" href="https://www.spid.gov.it/serve-aiuto">Serve aiuto?</a> - </li> - - - </ul> - </div> - </div> - </li> - </ul> - </div> - </div> - </nav> - </div> - </div> - </div> -</div> - - </div> - </div> - - - - - <!-- Container - Body of page--> - <div class="main-body"> - <div class="container"> - {% block container %} {% endblock %} - </div> - </div> - - <!-- Footer --> - - <footer class="it-footer"> - <div class="it-footer-main"> - <div class="container"> - - <section> - <div class="row clearfix"> - <div class="col-sm-12"> - <div class="it-brand-wrapper"> - <a href="#"> - -<img class="icon" src="{{ static }}spid/logo.jpg"> - - - <div class="it-brand-text"> - <h2 class="no_toc"> - -Nome Organizzazione - - </h2> - <h3 class="no_toc d-none d-md-block"> - -lorem ipsum - - </h3> - </div> - - </a> - </div> - </div> - </div> - </section> - - - <!-- Footer middle section with menu blocks --> - - - - <!-- Footer bottom section with contacts --> - -<section class="py-4 border-white border-top"> - <div class="row"> - <div class="col-lg-4 col-md-4 pb-2"> - <h4><a href="#" title="Vai alla pagina: Contatti">Contatti</a></h4> - <p> - <strong>Nome Organizzazione</strong> - <br> - via Tal dei Tali 00000 Città , Provincia - <br> - Codice Fiscale 2384762384623894 - Tel. (+39) xxxx yyyyyy - </p> - <div class="link-list-wrapper"> - <ul class="footer-list link-list clearfix"> - <li> - <a class="list-item" href="https://www.example.org/contacts/" title="Vai alla pagina: Posta Elettronica Certificata"> - Posta Elettronica Certificata - </a> - </li> - <li> - <a class="list-item" href="https://www.example.org/fatturazione" title="Vai alla pagina: Fatturazione elettronica"> - Fatturazione Elettronica - </a> - </li> - </ul> - </div> - </div> - <div class="col-lg-4 col-md-4 pb-2"> - <h4><a href="#" title="Vai alla pagina: Lorem Ipsum">Link Utili</a></h4> - <div class="link-list-wrapper"> - <ul class="footer-list link-list clearfix"> - <li> - <a class="list-item" href="https://www.example.org/search_phone" title="Vai alla pagina: Contatti/cerca persone"> - Contatti/cerca persone - </a> - </li> - <li> - <a class="list-item" href="https://www.example.org/amministrazione/" title="Vai alla pagina: Contatti amministrazione"> - Contatti amministrazione - </a> - </li> - <li> - <a class="list-item" href="https://www.example.org/" title="Vai alla pagina: Contatti servizi"> - Contatti servizi - </a> - </li> - <li> - <a class="list-item" href="https://example.portaleamministrazionetrasparente.it/" title="Vai alla pagina: PAT - Portale amministrazione trasparente"> - PAT - Portale amministrazione trasparente - </a> - </li> - </ul> - </div> - </div> - <div class="col-lg-4 col-md-4 pb-2"> - <div class="pb-2"> - <h4><a href="#" title="Vai alla pagina: Seguici su">Seguici su</a></h4> - <ul class="list-inline text-left social"> - <li class="list-inline-item"> - <a class="p-2 text-white" href="https://it-it.facebook.com/pages/example" target="_blank"> - <svg class="icon icon-sm icon-white align-top"> - <use xlink:href="{{ static }}spid/svg/sprite.svg#it-facebook"></use> - </svg><span class="sr-only">Facebook</span> - </a> - </li> - <li class="list-inline-item"> - <a class="p-2 text-white" href="https://twitter.com/example" target="_blank"> - <svg class="icon icon-sm icon-white align-top"> - <use xlink:href="{{ static }}spid/svg/sprite.svg#it-twitter"></use> - </svg><span class="sr-only">Twitter</span> - </a> - </li> - <li class="list-inline-item"> - <a class="p-2 text-white" href="https://www.instagram.com/example/" target="_blank"> - <svg class="icon icon-sm icon-white align-top"> - <use xlink:href="{{ static }}spid/svg/sprite.svg#it-instagram"></use> - </svg><span class="sr-only">Instagram</span> - </a> - </li> - <li class="list-inline-item"> - <a class="p-2 text-white" href="https://www.youtube.com/example" target="_blank"> - <svg class="icon icon-sm icon-white align-top"> - <use xlink:href="{{ static }}spid/svg/sprite.svg#it-youtube"></use> - </svg><span class="sr-only">YouTube</span> - </a> - </li> - </ul> - </div> - <div class="pb-2"> - <h4><a href="#" title="Vai alla pagina: Newsletter">Newsletter</a></h4> - <p>Form Newsletter</p> - </div> - </div> - </div> -</section> - - </div> - </div> - + <li class="nav-item dropdown"> + <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-expanded="false"> + <span>Domande frequenti</span> + <svg class="icon icon-xs"> + <use xlink:href="{{ static }}spid/svg/sprite.svg#it-expand"></use> + </svg> + </a> + <div class="dropdown-menu"> + <div class="link-list-wrapper"> + <ul class="link-list"> + <li> + <h3 class="no_toc" id="heading">Questo servizio</h3> + </li> + <li><a class="list-item" href=""><span>Assistenza</span></a></li> + <li><span class="divider"></span></li> + <li> + <h3 class="no_toc" id="heading">SPID</h3> + </li> + <li class="spid-idp-support-link"> + <a class="list-item" href="https://www.spid.gov.it/">Maggiori informazioni</a> + </li> + <li class="spid-idp-support-link"> + <a class="list-item" href="https://www.spid.gov.it/richiedi-spid">Non hai SPID?</a> + </li> + <li class="spid-idp-support-link"> + <a class="list-item" href="https://www.spid.gov.it/serve-aiuto">Serve aiuto?</a> + </li> + + + </ul> + </div> + </div> + </li> + </ul> + </div> + </div> + </nav> + </div> + </div> + </div> + </div> - <div class="it-footer-small-prints clearfix"> - <div class="container"> - -<h3 class="sr-only">Sezione Link Utili</h3> -<ul class="it-footer-small-prints-list list-inline mb-0 d-flex flex-column flex-md-row"> - <li class="list-inline-item"> - <a href="/" title="Note Legali"> - Note legali - </a> - </li> - <li class="list-inline-item"> - <a href="https://www.example.org/privacy/" title="Protezione dei dati"> - Protezione dei dati - </a> - </li> -</ul> - - </div> - </div> + </div> + </div> - </footer> - <script>window.__PUBLIC_PATH__ = "{{ static }}spid/fonts"</script> - <script src="{{ static }}spid/bootstrap-italia.js"></script> - <script src="{{ static }}spid/spid-sp-access-button.js"></script> - <script src="{{ static }}spid/spid_button.js"></script> - {% block extra_scripts %} {% endblock %} + <!-- Container - Body of page--> + <div class="main-body"> + <div class="container"> + {% block container %} {% endblock %} + </div> + </div> - </body> + <!-- Footer --> + + <footer class="it-footer"> + <div class="it-footer-main"> + <div class="container"> + + <section> + <div class="row clearfix"> + <div class="col-sm-12"> + <div class="it-brand-wrapper"> + <a href="#"> + + <img class="icon" src="{{ static }}spid/logo.jpg"> + + + <div class="it-brand-text"> + <h2 class="no_toc"> + + Nome Organizzazione + + </h2> + <h3 class="no_toc d-none d-md-block"> + + lorem ipsum + + </h3> + </div> + + </a> + </div> + </div> + </div> + </section> + + + <!-- Footer middle section with menu blocks --> + + + + <!-- Footer bottom section with contacts --> + + <section class="py-4 border-white border-top"> + <div class="row"> + <div class="col-lg-4 col-md-4 pb-2"> + <h4><a href="#" title="Vai alla pagina: Contatti">Contatti</a></h4> + <p> + <strong>Nome Organizzazione</strong> + <br> + via Tal dei Tali 00000 Città , Provincia + <br> + Codice Fiscale 2384762384623894 - Tel. (+39) xxxx yyyyyy + </p> + <div class="link-list-wrapper"> + <ul class="footer-list link-list clearfix"> + <li> + <a class="list-item" href="https://www.example.org/contacts/" title="Vai alla pagina: Posta Elettronica Certificata"> + Posta Elettronica Certificata + </a> + </li> + <li> + <a class="list-item" href="https://www.example.org/fatturazione" title="Vai alla pagina: Fatturazione elettronica"> + Fatturazione Elettronica + </a> + </li> + </ul> + </div> + </div> + <div class="col-lg-4 col-md-4 pb-2"> + <h4><a href="#" title="Vai alla pagina: Lorem Ipsum">Link Utili</a></h4> + <div class="link-list-wrapper"> + <ul class="footer-list link-list clearfix"> + <li> + <a class="list-item" href="https://www.example.org/search_phone" title="Vai alla pagina: Contatti/cerca persone"> + Contatti/cerca persone + </a> + </li> + <li> + <a class="list-item" href="https://www.example.org/amministrazione/" title="Vai alla pagina: Contatti amministrazione"> + Contatti amministrazione + </a> + </li> + <li> + <a class="list-item" href="https://www.example.org/" title="Vai alla pagina: Contatti servizi"> + Contatti servizi + </a> + </li> + <li> + <a class="list-item" href="https://example.portaleamministrazionetrasparente.it/" title="Vai alla pagina: PAT - Portale amministrazione trasparente"> + PAT - Portale amministrazione trasparente + </a> + </li> + </ul> + </div> + </div> + <div class="col-lg-4 col-md-4 pb-2"> + <div class="pb-2"> + <h4><a href="#" title="Vai alla pagina: Seguici su">Seguici su</a></h4> + <ul class="list-inline text-left social"> + <li class="list-inline-item"> + <a class="p-2 text-white" href="https://it-it.facebook.com/pages/example" target="_blank"> + <svg class="icon icon-sm icon-white align-top"> + <use xlink:href="{{ static }}spid/svg/sprite.svg#it-facebook"></use> + </svg><span class="sr-only">Facebook</span> + </a> + </li> + <li class="list-inline-item"> + <a class="p-2 text-white" href="https://twitter.com/example" target="_blank"> + <svg class="icon icon-sm icon-white align-top"> + <use xlink:href="{{ static }}spid/svg/sprite.svg#it-twitter"></use> + </svg><span class="sr-only">Twitter</span> + </a> + </li> + <li class="list-inline-item"> + <a class="p-2 text-white" href="https://www.instagram.com/example/" target="_blank"> + <svg class="icon icon-sm icon-white align-top"> + <use xlink:href="{{ static }}spid/svg/sprite.svg#it-instagram"></use> + </svg><span class="sr-only">Instagram</span> + </a> + </li> + <li class="list-inline-item"> + <a class="p-2 text-white" href="https://www.youtube.com/example" target="_blank"> + <svg class="icon icon-sm icon-white align-top"> + <use xlink:href="{{ static }}spid/svg/sprite.svg#it-youtube"></use> + </svg><span class="sr-only">YouTube</span> + </a> + </li> + </ul> + </div> + <div class="pb-2"> + <h4><a href="#" title="Vai alla pagina: Newsletter">Newsletter</a></h4> + <p>Form Newsletter</p> + </div> + </div> + </div> + </section> + + </div> + </div> + + + <div class="it-footer-small-prints clearfix"> + <div class="container"> + + <h3 class="sr-only">Sezione Link Utili</h3> + <ul class="it-footer-small-prints-list list-inline mb-0 d-flex flex-column flex-md-row"> + <li class="list-inline-item"> + <a href="/" title="Note Legali"> + Note legali + </a> + </li> + <li class="list-inline-item"> + <a href="https://www.example.org/privacy/" title="Protezione dei dati"> + Protezione dei dati + </a> + </li> + </ul> + + </div> + </div> + + </footer> + + <script>window.__PUBLIC_PATH__ = "{{ static }}spid/fonts"</script> + <script src="{{ static }}spid/bootstrap-italia.js"></script> + + <script src="{{ static }}spid/spid-sp-access-button.js"></script> + <script src="{{ static }}spid/spid_button.js"></script> + + {% block extra_scripts %} {% endblock %} + + </body> </html> diff --git a/example/templates/spid_login_error.html b/example/templates/spid_login_error.html index ef45f092..20ec8c55 100644 --- a/example/templates/spid_login_error.html +++ b/example/templates/spid_login_error.html @@ -1,21 +1,19 @@ {% extends 'spid_base.html' %} - -{% block page_title %} + {% block page_title %} <title> - Errore SPID + Errore SPID </title> -{% endblock page_title %} + {% endblock page_title %} {% block container %} - <div class="callout danger"> - <div class="callout-title"> - Errore di autenticazione - </div> - <p> - <p>{{ message }}</p> - {% if troubleshoot %} - <p>{{ troubleshoot }}</p> - {% endif %} - </p> + <div class="callout danger"> + <div class="callout-title"> + Errore di autenticazione </div> + <p>{{ message }}</p> + {% if troubleshoot %} + <p>{{ troubleshoot }}</p> + {% endif %} + </p> + </div> {% endblock %} From 8bcfb5038fff72eaf616cd46aadaf93de4bd188f Mon Sep 17 00:00:00 2001 From: Andrea Ranaldi <andrea.ranaldi@gmail.com> Date: Wed, 11 Aug 2021 15:44:24 +0200 Subject: [PATCH 3/3] Added SPID and AGID logos, fix #37 --- example/static/disco.html | 1 + example/static/spid/spid-agid-logo-lb.png | Bin 0 -> 6011 bytes 2 files changed, 1 insertion(+) create mode 100644 example/static/spid/spid-agid-logo-lb.png diff --git a/example/static/disco.html b/example/static/disco.html index 63502d49..bc5861d2 100644 --- a/example/static/disco.html +++ b/example/static/disco.html @@ -270,6 +270,7 @@ <h4 class="">Benvenuto in Nome Organizzazione Spid Discovery Service</h4> </div> </div> </div> + <p class="text-center"><img src="spid/spid-agid-logo-lb.png", alt="logo SPID e AGID"></p> </div> </div> </div> diff --git a/example/static/spid/spid-agid-logo-lb.png b/example/static/spid/spid-agid-logo-lb.png new file mode 100644 index 0000000000000000000000000000000000000000..44b841623f0d0aed40e5de7e8d9ffbb225f5e3fc GIT binary patch literal 6011 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 literal 0 HcmV?d00001