diff --git a/default.nix b/default.nix index b76188d8d99200c565de8516773626570810a868..813a6cb432942fccd96b96ee07313ff84cf885c6 100644 --- a/default.nix +++ b/default.nix @@ -1,2 +1,14 @@ { pkgs ? import <nixpkgs> { } }: -pkgs.callPackage ./privatestorageio.nix { } +let + # NixOS 19.03 packaged graphviz has trouble rendering our architecture + # overview. Latest from upstream does alright, though. Use that. + make-graphviz = (import (pkgs.path + /pkgs/tools/graphics/graphviz/base.nix) { + rev = "b29d8e369011b832f72e0d250a05a0a15dcb5daa"; + sha256 = "1w61filywn9cif2nryf6vd34mxxbvv25q34fd34am1rx70bk08ps"; + version = "b29d8e369011b832f72e0d250a05a0a15dcb5daa"; + }); + graphviz = (pkgs.callPackage make-graphviz { }).overrideAttrs (old: { + patches = []; + }); +in + pkgs.callPackage ./privatestorageio.nix { inherit graphviz; } diff --git a/docs/source/architecture-overview.dot b/docs/source/architecture-overview.dot new file mode 100644 index 0000000000000000000000000000000000000000..cc95fbb74a5b67fc290b80d53ac679a1d1c9d972 --- /dev/null +++ b/docs/source/architecture-overview.dot @@ -0,0 +1,50 @@ +digraph subscriptions { + rankdir=LR + + subgraph cluster_usercontrolled { + label = "User Operated" + rankdir=LR + GridSync [label="GridSync", shape=circle] + Browser [label="Browser", shape=circle] + TahoeLAFS [label="Tahoe-LAFS", shape=circle] + } + + + subgraph cluster_pscontrolled { + label = "PrivateStorage.io Operated" + rankdir = TB + PSWebServer [label="PrivateStorage.io Web Server", shape=box] + SubscriptionConfigWHPeer [label="Subscription Config Wormhole Peer", shape=box] + PaymentServer [label="Payment Server", shape=box] + SATIssuer [label="SAT Issuer", shape=box] + PSStorageGrid [label="PrivateStorage.io Storage Grid", shape=box] + } + + User [label="User", shape=egg] + Stripe [label="Stripe", shape=pentagon] + + User -> PSWebServer [label="1. Get wormhole code", fontcolor=red, color=red] + PSWebServer -> User [label="2. 7-petulant-banana", fontcolor=blue, color=blue] + User -> GridSync [label="3. 7-petulant-banana", fontcolor=brown, color=brown] + GridSync -> SubscriptionConfigWHPeer [label="4. Get configuration", fontcolor=black, color=black] + SubscriptionConfigWHPeer -> GridSync [label="5. Grid configuration", fontcolor=magenta, color=magenta] + GridSync -> TahoeLAFS [label="6. Instantiate", fontcolor=aquamarine3, color=aquamarine3] + GridSync -> TahoeLAFS [label="7. Redeem PRN", fontcolor=crimson, color=crimson] + TahoeLAFS -> PaymentServer [label="8. Redeem PRN", fontcolor=crimson, color=crimson] + PaymentServer -> TahoeLAFS [label="9. Payment required", fontcolor=gold3, color=gold3] + TahoeLAFS -> GridSync [label="10. Payment required", fontcolor=gold3, color=gold3] + GridSync -> Browser [label="11. Open payment window", fontcolor=gold3, color=gold3] + User -> Browser [label="12. Enter payment info", fontcolor=blue, color=blue] + Browser -> Stripe [label="13. Submit payment form", fontcolor=brown, color=brown] + Stripe -> Browser [label="14. Payment ok", fontcolor=black, color=black] + Stripe -> PaymentServer [label="15. Payment notification", fontcolor=magenta, color=magenta] + GridSync -> TahoeLAFS [label="16. Redeem PRN", fontcolor=aquamarine3, color=aquamarine3] + TahoeLAFS -> TahoeLAFS [label="17. Generate blinded tokens", fontcolor=crimson, color=crimson] + TahoeLAFS -> SATIssuer [label="18. Redeem PRN, blinded-tokens=xs", fontcolor=crimson, color=crimson] + SATIssuer -> PaymentServer [label="19. Check PRN", fontcolor=gold3, color=gold3] + PaymentServer -> SATIssuer [label="20. PRN Valid", fontcolor=gold3, color=gold3] + SATIssuer -> TahoeLAFS [label="21. PRN valid, signed-tokens=ys", fontcolor=crimson, color=crimson] + TahoeLAFS -> TahoeLAFS [label="22. Store signed tokens", fontcolor=crimson, color=crimson] + TahoeLAFS -> GridSync [label="23. PRN Redeemed", fontcolor=red, color=red] + TahoeLAFS -> PSStorageGrid [label="24. Use storage, passes=y", fontcolor=magenta, color=magenta] +} diff --git a/docs/source/architecture-overview.rst b/docs/source/architecture-overview.rst new file mode 100644 index 0000000000000000000000000000000000000000..d8480a2483ebab1585287537f06b5a08664300d4 --- /dev/null +++ b/docs/source/architecture-overview.rst @@ -0,0 +1,4 @@ +Architecture Overview +===================== + +.. graphviz:: architecture-overview.dot diff --git a/docs/source/conf.py b/docs/source/conf.py index 50597866632a61920c8692f92f2e9db9fdd0e45b..0b25362aee9d1ba3c646123df5c45c58fcd57b1c 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -39,6 +39,7 @@ release = '0.0' # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ + "sphinx.ext.graphviz", ] # Add any paths that contain templates here, relative to this directory. diff --git a/docs/source/index.rst b/docs/source/index.rst index 7fd7c24d958ad025072ad6e21896d5f932a75105..d06ae0d59b4ca91cbd00cd4a440da275f26f609e 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -10,7 +10,7 @@ Welcome to PrivateStorageio's documentation! :maxdepth: 2 :caption: Contents: - + architecture-overview Indices and tables ================== diff --git a/privatestorageio.nix b/privatestorageio.nix index 8595978216be317e2d85ee182ec8eeee4d3eae50..dd6dd425e8c6dd66860bcd758f11ae622a6ddd0c 100644 --- a/privatestorageio.nix +++ b/privatestorageio.nix @@ -1,9 +1,19 @@ -{ stdenv, python3Packages }: +{ stdenv, graphviz, python3Packages }: stdenv.mkDerivation rec { version = "0.0"; name = "privatestorageio-${version}"; src = ./.; + depsBuildBuild = [ - python3Packages.sphinx + graphviz ]; + + buildPhase = '' + ${python3Packages.sphinx}/bin/sphinx-build -W docs/source docs/build + ''; + + installPhase = '' + mkdir $out + mv docs/build $out/docs + ''; }