github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/docs/diagrams/from-cozy-move.gv (about) 1 digraph from_cozy_move { 2 graph [splines=true]; 3 node [shape="box", fontname="lato", fontsize=11, margin=0.12, color="#297EF2", fontcolor="#32363F"]; 4 edge [color="#32363F"]; 5 ranksep=0.45; nodesep=1.5; 6 7 // Hidden, to order the clusters 8 s_export_2 -> m_edit_1 [style="invis"] 9 10 subgraph cluster_source { 11 label="Cozy source"; labeljust="l"; fontname="lato"; fontsize=12; margin=24; rankdir=TB; 12 s_export [label="User authenticated?"] 13 s_export_2 [label="Ask password"] 14 s_export_3 [label="Check password (and 2FA)"] 15 } 16 17 subgraph cluster_move { 18 label="cozy-move"; labeljust="l"; fontname="lato"; fontsize=12; margin=24; 19 m_init [label="Link sent by mail"; shape="Mdiamond"] 20 m_index_1 [label="Show summary"] 21 m_edit_1 [label="Ask Cozy URL"] 22 m_post_1 [label="Redirect to Cozy"] 23 m_source [label="Get info for Cozy source"] 24 m_intro [label="Show intro"] 25 m_index_2 [label="Show summary"] 26 m_select [label="Has a Cozy?"] 27 m_edit_2 [label="Ask Cozy URL"] 28 m_post_2 [label="Redirect to Cozy"] 29 m_target [label="Get info for Cozy target"] 30 m_index_3 [label="Show summary"] 31 m_warning [label="Ask confirmation"] 32 m_confirm [label="Confirm"] 33 m_fake [style="invis"] 34 } 35 36 subgraph cluster_target { 37 label="Cozy target"; labeljust="l"; fontname="lato"; fontsize=12; margin=24; 38 t_register [label="Create an OAuth client"] 39 t_export [label="Ask password (and 2FA)"] 40 t_export_2 [label="Check password"] 41 t_token [label="Token for target"] 42 } 43 44 same [label="Same as previous\nworkflow..."; shape="Msquare"] 45 46 // User 47 m_init -> m_intro [label="GET /"] 48 m_intro -> m_index_1 [label="GET /:locale/instances"] 49 m_index_1 -> m_edit_1 [label="GET /:locale/source/edit"] 50 m_edit_1 -> m_post_1 [label="POST /source"] 51 m_post_1 -> s_export [label="GET /move/authorize"] 52 s_export -> s_export_2 [label="no: GET /auth/login"; constraint=false] 53 s_export_2 -> s_export_3 [label="POST /auth/login"] 54 s_export_3 -> s_export [label="GET /move/authorize"] 55 s_export -> m_source [label="yes: GET /callback/source?code"] 56 m_source -> m_index_2 [label="GET /:locale/instances"] 57 m_index_2 -> m_select [label="GET /:locale/target/select"] 58 m_select -> m_edit_2 [label="GET /:locale/target/edit"] 59 m_edit_2 -> m_post_2 [label="POST /target"] 60 m_post_2 -> t_export [label="GET /auth/authorize/move"] 61 t_export -> t_export_2 [label="POST /auth/authorize/move"] 62 t_export_2 -> m_target [label="GET /callback/target\ncode"] 63 m_target -> m_index_3 [label="GET /:locale/instances"] 64 m_index_3 -> m_warning [label="(modal)"] 65 m_warning -> m_confirm [label="POST /instances"] 66 m_confirm -> same 67 68 // Server to server 69 m_post_2 -> t_register [label="POST /auth/register"; style="dashed"] 70 m_target -> t_token [label="POST /auth/access_token"; style="dashed"] 71 72 // Hidden, just to preserve order between nodes inside clusters 73 m_post_1 -> m_source [style="invis"] 74 m_post_2 -> m_fake -> m_target [style="invis"] 75 t_register -> t_export [style="invis"] 76 t_export_2 -> t_token [style="invis"] 77 }