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  }