github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/docs/diagrams/from-settings.gv (about) 1 digraph move_from_settings { 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 subgraph cluster_source { 8 label="Cozy source"; labeljust="l"; fontname="lato"; fontsize=12; margin=24; rankdir=TB; 9 s_settings [label="App settings"; shape="Mdiamond"] 10 s_start [label="Redirect to move.cozycloud.cc"] 11 s_token [label="Token for source"] 12 s_confirm [label="Send mail for confirmation"] 13 s_mail [label="Click on mail link"] 14 s_ready [label="Export ready"] 15 s_data [label="Send archive"] 16 s_unblock [label="Unblock the Cozy"] 17 s_fake_1, s_fake_2, s_fake_3, s_fake_4, s_fake_5, s_fake_6, s_fake_7, s_fake_8 [style="invis"] 18 } 19 20 subgraph cluster_move { 21 label="cozy-move"; labeljust="l"; fontname="lato"; fontsize=12; margin=24; 22 m_source [label="Get info for Cozy source"] 23 m_intro [label="Show intro"] 24 m_index_1 [label="Show summary"] 25 m_select [label="Has a Cozy?"] 26 m_edit [label="Ask Cozy URL"] 27 m_post [label="Redirect to Cozy"] 28 m_target [label="Get info for Cozy target"] 29 m_index_2 [label="Show summary"] 30 m_warning [label="Ask confirmation"] 31 m_confirm [label="Confirm"] 32 } 33 34 subgraph cluster_target { 35 label="Cozy target"; labeljust="l"; fontname="lato"; fontsize=12; margin=24; 36 t_register [label="Create an OAuth client"] 37 t_export [label="Ask password (and 2FA)"] 38 t_export_2 [label="Check password"] 39 t_token [label="Token for target"] 40 t_block [label="Block the Cozy"] 41 t_run [label="Start the moving"] 42 t_wait [label="Show waiting page"] 43 t_done [label="Send mail\nwhen finished"; shape="Msquare"] 44 t_fake_1, t_fake_2, t_fake_3, t_fake_4 [style="invis"] 45 } 46 47 // User 48 s_settings -> s_start [label="POST /move/initialize"] 49 s_start -> m_source [label="POST /initialize\ncozy_url code client_id client_secret"] 50 m_source -> m_intro [label="GET /"] 51 m_intro -> m_index_1 [label="GET /:locale/instances"] 52 m_index_1 -> m_select [label="GET /:locale/target/select"] 53 m_select -> m_edit [label="GET /:locale/target/edit"] 54 m_edit -> m_post [label="POST /target"] 55 m_post -> t_export [label="GET /auth/authorize/move"] 56 t_export -> t_export_2 [label="POST /auth/authorize/move"] 57 t_export_2 -> m_target [label="GET /callback/target\ncode"] 58 m_target -> m_index_2 [label="GET /:locale/instances"] 59 m_index_2 -> m_warning [label="(modal)"] 60 m_warning -> m_confirm [label="POST /instances"] 61 m_confirm -> s_confirm [label="POST /move/request"] 62 s_confirm -> s_mail [label="GET /move/go"] 63 s_mail -> t_wait [label="GET /move/importing"] 64 65 // Server to server 66 m_source -> s_token [label="POST /auth/access_token"; style="dashed"] 67 m_post -> t_register [label="POST /auth/register"; style="dashed"] 68 m_target -> t_token [label="POST /auth/access_token"; style="dashed"] 69 s_mail -> t_block [label="POST /move/importing"; style="dashed"] 70 s_mail -> s_ready [label="(prepare export)"] 71 s_ready -> t_run [label="POST /move/imports"; style="dashed"] 72 t_run -> s_data [label="GET /move/exports/data/:id"; style="dashed"] 73 t_run -> s_data [style="dashed"] 74 t_run -> s_data [style="dashed"] 75 t_run -> s_unblock [label="POST /move/finalize"; style="dashed"] 76 t_run -> t_done [label="(import done)"; style="dashed"] 77 78 // Hidden, just to preserve order between nodes inside clusters 79 s_start -> s_token [style="invis"] 80 s_token -> s_fake_1 -> s_fake_2 -> s_fake_3 -> s_fake_4 -> s_fake_5 -> s_fake_6 -> s_fake_7 -> s_fake_8 -> s_confirm [style="invis"] 81 m_post -> m_target [style="invis"] 82 t_register -> t_export [style="invis"] 83 t_export_2 -> t_token [style="invis"] 84 t_token -> t_fake_1 -> t_fake_2 -> t_fake_3 -> t_block [style="invis"] 85 t_block -> t_wait -> t_run -> t_fake_4 -> t_done [style="invis"] 86 s_ready -> s_data -> s_unblock [style="invis"] 87 }