From d66c74b1e4288edb65732d96c68b3bfcbd428f90 Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Tue, 11 Apr 2023 12:50:52 +0200 Subject: [PATCH] docs: render plantuml This adds sphinxcontrib.plantuml, to support rendering PlantUML diagrams directly, rather than committing rendered images directly. It then re-rolls the "Wire SAML Authentication Flow" diagram in plantuml, fixing the typo recirect/redirect. --- changelog.d/4-docs/plantuml | 1 + docs/src/conf.py | 1 + .../understand/Wire_SAML_Flow.png | Bin 61826 -> 0 bytes .../single-sign-on/understand/main.md | 28 +++++++++++++++++- nix/default.nix | 2 ++ 5 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 changelog.d/4-docs/plantuml delete mode 100644 docs/src/understand/single-sign-on/understand/Wire_SAML_Flow.png diff --git a/changelog.d/4-docs/plantuml b/changelog.d/4-docs/plantuml new file mode 100644 index 0000000000..cb65f564c9 --- /dev/null +++ b/changelog.d/4-docs/plantuml @@ -0,0 +1 @@ +Extend docs to support render plantuml directly, rewrote the saml flow diagram in plantuml diff --git a/docs/src/conf.py b/docs/src/conf.py index 939c35ae68..352e744f5c 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -34,6 +34,7 @@ # ones. extensions = [ 'sphinxcontrib.kroki', + 'sphinxcontrib.plantuml', "myst_parser", 'rst2pdf.pdfbuilder', 'sphinx_multiversion', diff --git a/docs/src/understand/single-sign-on/understand/Wire_SAML_Flow.png b/docs/src/understand/single-sign-on/understand/Wire_SAML_Flow.png deleted file mode 100644 index 6efa902500bdebeb1ff942c78bb7d372fd203490..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61826 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

7@Rj%mT^t($vB?jkoWm9gt{i|{XI{RP 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�u8J2 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

Dg<4+a`8ESc5`_fhTudM_2>3KZ;Ix&Yl?rH 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 MPgg&ebxsLQ0Lc}mL;wH) diff --git a/docs/src/understand/single-sign-on/understand/main.md b/docs/src/understand/single-sign-on/understand/main.md index 3192231755..068569ee47 100644 --- a/docs/src/understand/single-sign-on/understand/main.md +++ b/docs/src/understand/single-sign-on/understand/main.md @@ -147,7 +147,33 @@ Here is a blog post we like about how SAML works: wireserver : User starts authentication in Wire +wireserver -> user: HTTP POST to IdP w/auth request +user -> idp : (HTML FORM redirect in browser) +note right: Auth request is passed, verified + +idp --> idp: end user is sent to login page at IdP \n user logs in, or browser sends cookie + +... + + +idp -> user: Redirect to Wire w/ SAML token +note right: SAML token is generated +user -> wireserver: (HTML FORM redirect in browser) +wireserver -> user: User is logged into Wire + +@enduml ``` Here is a critique of XML/DSig security (which SAML relies on): diff --git a/nix/default.nix b/nix/default.nix index c377bf7102..6f75f4e105 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -26,6 +26,7 @@ let # packages necessary to build wire-server docs docsPkgs = [ + pkgs.plantuml pkgs.texlive.combined.scheme-full (pkgs.python3.withPackages (ps: with ps; [ @@ -39,6 +40,7 @@ let sphinx-copybutton sphinxcontrib-fulltoc sphinxcontrib-kroki + sphinxcontrib-plantuml ])) ];