summaryrefslogtreecommitdiff
path: root/docs/src
diff options
context:
space:
mode:
Diffstat (limited to 'docs/src')
-rw-r--r--docs/src/gettingstarted/debugging/fsm.md6
-rw-r--r--docs/src/gettingstarted/debugging/fsm_example.pngbin62025 -> 0 bytes
-rw-r--r--docs/src/gettingstarted/debugging/fsm_example.svg1
3 files changed, 5 insertions, 2 deletions
diff --git a/docs/src/gettingstarted/debugging/fsm.md b/docs/src/gettingstarted/debugging/fsm.md
index 65ff031..08022cb 100644
--- a/docs/src/gettingstarted/debugging/fsm.md
+++ b/docs/src/gettingstarted/debugging/fsm.md
@@ -1,16 +1,18 @@
# Finite State Machine
-The eduvpn-common library uses a Finite State Machine internally to keep track of which state the client is in and to communicate data callbacks(e.g. to communicate the Authorization URL in the OAuth process to the client).
+The eduvpn-common library uses a Finite State Machine internally to keep track of which state the client is in and to communicate data callbacks (e.g. to communicate the Authorization URL in the OAuth process to the client).
## Viewing the FSM
To view the FSM in an image, set the debug variable to `True`. This outputs the graph with a `.graph` extension in the client-specified config directory (See [API](../../api/index.html)). The format of this graph is from [Mermaid](https://mermaid-js.github.io/mermaid/#/).
If you have the [Mermaid command line client](https://github.com/mermaid-js/mermaid-cli) installed, the Go library will automatically provide a PNG file in the same directory of the `.graph` file. We recommend to use an image viewer that has auto-reload capabilities, such as [feh](https://feh.finalrewind.org/)[^1] for Linux.
+If you do not want to install additional tools to view the graph, you can submit the contents of the `.graph` file to the [Mermaid Live Editor](https://mermaid.live/) to see the image.
+
## FSM Example
The following is an example of the FSM when the client has obtained a Wireguard/OpenVPN configuration from an eduVPN server
-![](./fsm_example.png)
+![](./fsm_example.svg)
The current state is highlighted in the <span style="color:cyan">cyan</span> color.
diff --git a/docs/src/gettingstarted/debugging/fsm_example.png b/docs/src/gettingstarted/debugging/fsm_example.png
deleted file mode 100644
index 7b68d8e..0000000
--- a/docs/src/gettingstarted/debugging/fsm_example.png
+++ /dev/null
Binary files differ
diff --git a/docs/src/gettingstarted/debugging/fsm_example.svg b/docs/src/gettingstarted/debugging/fsm_example.svg
new file mode 100644
index 0000000..9b19280
--- /dev/null
+++ b/docs/src/gettingstarted/debugging/fsm_example.svg
@@ -0,0 +1 @@
+<svg id="mermaid-1650984468240" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="796" style="max-width: 1009.15px; background-color: white;" viewBox="0 0 1009.15234375 796"><style>#mermaid-1650984468240 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-1650984468240 .error-icon{fill:#552222;}#mermaid-1650984468240 .error-text{fill:#552222;stroke:#552222;}#mermaid-1650984468240 .edge-thickness-normal{stroke-width:2px;}#mermaid-1650984468240 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-1650984468240 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-1650984468240 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-1650984468240 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-1650984468240 .marker{fill:#333333;stroke:#333333;}#mermaid-1650984468240 .marker.cross{stroke:#333333;}#mermaid-1650984468240 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-1650984468240 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-1650984468240 .cluster-label text{fill:#333;}#mermaid-1650984468240 .cluster-label span{color:#333;}#mermaid-1650984468240 .label text,#mermaid-1650984468240 span{fill:#333;color:#333;}#mermaid-1650984468240 .node rect,#mermaid-1650984468240 .node circle,#mermaid-1650984468240 .node ellipse,#mermaid-1650984468240 .node polygon,#mermaid-1650984468240 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-1650984468240 .node .label{text-align:center;}#mermaid-1650984468240 .node.clickable{cursor:pointer;}#mermaid-1650984468240 .arrowheadPath{fill:#333333;}#mermaid-1650984468240 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-1650984468240 .flowchart-link{stroke:#333333;fill:none;}#mermaid-1650984468240 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-1650984468240 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-1650984468240 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-1650984468240 .cluster text{fill:#333;}#mermaid-1650984468240 .cluster span{color:#333;}#mermaid-1650984468240 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-1650984468240 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><g class="output"><g class="clusters"></g><g class="edgePaths"><g class="edgePath LS-Deregistered LE-No_Server" id="L-Deregistered-No_Server" style="opacity: 1;"><path class="path" d="M377.39453125,46L377.39453125,51.666666666666664C377.39453125,57.333333333333336,377.39453125,68.66666666666667,377.39453125,80C377.39453125,91.33333333333333,377.39453125,102.66666666666667,377.39453125,108.33333333333333L377.39453125,114" marker-end="url(#arrowhead71)" style="fill:none"></path><defs><marker id="arrowhead71" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-No_Server LE-Chosen_Server" id="L-No_Server-Chosen_Server" style="opacity: 1;"><path class="path" d="M377.39453125,152L377.39453125,157.66666666666666C377.39453125,163.33333333333334,377.39453125,174.66666666666666,377.39453125,186C377.39453125,197.33333333333334,377.39453125,208.66666666666666,377.39453125,214.33333333333334L377.39453125,220" marker-end="url(#arrowhead72)" style="fill:none"></path><defs><marker id="arrowhead72" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Chosen_Server LE-Authorized" id="L-Chosen_Server-Authorized" style="opacity: 1;"><path class="path" d="M377.39453125,258L377.39453125,263.6666666666667C377.39453125,269.3333333333333,377.39453125,280.6666666666667,377.39453125,292C377.39453125,303.3333333333333,377.39453125,314.6666666666667,377.39453125,320.3333333333333L377.39453125,326" marker-end="url(#arrowhead73)" style="fill:none"></path><defs><marker id="arrowhead73" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Chosen_Server LE-OAuth_Started" id="L-Chosen_Server-OAuth_Started" style="opacity: 1;"><path class="path" d="M311.80859375,251.45392075910038L276.220703125,258.21160063258367C240.6328125,264.9692805060669,169.45703125,278.48464025303343,133.869140625,294.07565345985006C98.28125,309.6666666666667,98.28125,327.3333333333333,98.28125,345C98.28125,362.6666666666667,98.28125,380.3333333333333,128.71028645833334,395.7359725470853C159.13932291666666,411.1386117608372,219.99739583333334,424.2772235216744,250.42643229166666,430.846529402093L280.85546875,437.4158352825115" marker-end="url(#arrowhead74)" style="fill:none"></path><defs><marker id="arrowhead74" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-OAuth_Started LE-Authorized" id="L-OAuth_Started-Authorized" style="opacity: 1;"><path class="path" d="M369.5760613207547,432L377.27041568396226,426.3333333333333C384.9647700471698,420.6666666666667,400.35347877358487,409.3333333333333,403.9477692610063,398C407.5420597484277,386.6666666666667,399.3419319968554,375.3333333333333,395.2418681210692,369.6666666666667L391.141804245283,364" marker-end="url(#arrowhead75)" style="fill:none"></path><defs><marker id="arrowhead75" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-OAuth_Started LE-Chosen_Server" id="L-OAuth_Started-Chosen_Server" style="opacity: 1;"><path class="path" d="M406.69921875,434.7339430313423L430.3821614583333,428.6116191927852C454.0651041666667,422.4892953542282,501.4309895833333,410.2446476771141,525.1139322916666,395.2889905052237C548.796875,380.3333333333333,548.796875,362.6666666666667,548.796875,345C548.796875,327.3333333333333,548.796875,309.6666666666667,530.4708382468554,295.1666666666667C512.1448014937107,280.6666666666667,475.4927279874214,269.3333333333333,457.1666912342768,263.6666666666667L438.8406544811321,258" marker-end="url(#arrowhead76)" style="fill:none"></path><defs><marker id="arrowhead76" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Authorized LE-OAuth_Started" id="L-Authorized-OAuth_Started" style="opacity: 1;"><path class="path" d="M329.14453125,359.8714477181345L308.5266927083333,366.2262064317788C287.9088541666667,372.580965145423,246.67317708333334,385.2904825727115,240.8463910180818,397.31190795302246C235.01960495283018,409.3333333333333,264.60170990566036,420.6666666666667,279.3927623820755,426.3333333333333L294.18381485849056,432" marker-end="url(#arrowhead77)" style="fill:none"></path><defs><marker id="arrowhead77" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Authorized LE-Request_Config" id="L-Authorized-Request_Config" style="opacity: 1;"><path class="path" d="M425.64453125,354.29895882160764L463.4368489583333,361.582465684673C501.2291666666667,368.8659725477384,576.8138020833334,383.4329862738692,614.6061197916666,396.3831598036013C652.3984375,409.3333333333333,652.3984375,420.6666666666667,652.3984375,426.3333333333333L652.3984375,432" marker-end="url(#arrowhead78)" style="fill:none"></path><defs><marker id="arrowhead78" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Request_Config LE-Ask_Profile" id="L-Request_Config-Ask_Profile" style="opacity: 1;"><path class="path" d="M683.6585347877359,470L692.9817216981132,475.6666666666667C702.3049086084906,481.3333333333333,720.9512824292452,492.6666666666667,730.2744693396226,504C739.59765625,515.3333333333334,739.59765625,526.6666666666666,739.59765625,532.3333333333334L739.59765625,538" marker-end="url(#arrowhead79)" style="fill:none"></path><defs><marker id="arrowhead79" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Request_Config LE-Has_Config" id="L-Request_Config-Has_Config" style="opacity: 1;"><path class="path" d="M621.1383402122641,470L611.8151533018868,475.6666666666667C602.4919663915094,481.3333333333333,583.8455925707548,492.6666666666667,574.5224056603773,507.1666666666667C565.19921875,521.6666666666666,565.19921875,539.3333333333334,565.19921875,557C565.19921875,574.6666666666666,565.19921875,592.3333333333334,574.5224056603773,606.8333333333334C583.8455925707548,621.3333333333334,602.4919663915094,632.6666666666666,611.8151533018868,638.3333333333334L621.1383402122641,644" marker-end="url(#arrowhead80)" style="fill:none"></path><defs><marker id="arrowhead80" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Has_Config LE-Connected" id="L-Has_Config-Connected" style="opacity: 1;"><path class="path" d="M652.3984375,682L652.3984375,687.6666666666666C652.3984375,693.3333333333334,652.3984375,704.6666666666666,664.6927820361635,716C676.987126572327,727.3333333333334,701.5758156446541,738.6666666666666,713.8701601808176,744.3333333333334L726.1645047169811,750" marker-end="url(#arrowhead81)" style="fill:none"></path><defs><marker id="arrowhead81" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Ask_Profile LE-Has_Config" id="L-Ask_Profile-Has_Config" style="opacity: 1;"><path class="path" d="M739.59765625,576L739.59765625,581.6666666666666C739.59765625,587.3333333333334,739.59765625,598.6666666666666,730.2744693396227,610C720.9512824292452,621.3333333333334,702.3049086084906,632.6666666666666,692.9817216981132,638.3333333333334L683.6585347877359,644" marker-end="url(#arrowhead82)" style="fill:none"></path><defs><marker id="arrowhead82" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g><g class="edgePath LS-Connected LE-Authorized" id="L-Connected-Authorized" style="opacity: 1;"><path class="path" d="M816.08203125,751.2888162127385L832.2526041666666,745.4073468439487C848.4231770833334,739.5258774751591,880.7643229166666,727.7629387375795,896.9348958333334,713.0481360354564C913.10546875,698.3333333333334,913.10546875,680.6666666666666,913.10546875,663C913.10546875,645.3333333333334,913.10546875,627.6666666666666,913.10546875,610C913.10546875,592.3333333333334,913.10546875,574.6666666666666,913.10546875,557C913.10546875,539.3333333333334,913.10546875,521.6666666666666,913.10546875,504C913.10546875,486.3333333333333,913.10546875,468.6666666666667,913.10546875,451C913.10546875,433.3333333333333,913.10546875,415.6666666666667,831.8619791666666,398.7955938613505C750.6184895833334,381.92452105603434,588.1315104166666,365.84904211206873,506.8880208333333,357.8113026400859L425.64453125,349.7735631681031" marker-end="url(#arrowhead83)" style="fill:none"></path><defs><marker id="arrowhead83" viewBox="0 0 10 10" refX="9" refY="5" markerUnits="strokeWidth" markerWidth="8" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowheadPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"></path></marker></defs></g></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(377.39453125,80)" style="opacity: 1;"><g transform="translate(-53.3515625,-9)" class="label"><rect rx="0" ry="0" width="106.703125" height="18"></rect><foreignObject width="106.703125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Deregistered-No_Server" class="edgeLabel L-LS-Deregistered' L-LE-No_Server">Client registers</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(377.39453125,186)" style="opacity: 1;"><g transform="translate(-80.03125,-9)" class="label"><rect rx="0" ry="0" width="160.0625" height="18"></rect><foreignObject width="160.0625" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-No_Server-Chosen_Server" class="edgeLabel L-LS-No_Server' L-LE-Chosen_Server">User chooses a server</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(377.39453125,292)" style="opacity: 1;"><g transform="translate(-80.5,-9)" class="label"><rect rx="0" ry="0" width="161" height="18"></rect><foreignObject width="161" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Chosen_Server-Authorized" class="edgeLabel L-LS-Chosen_Server' L-LE-Authorized">Found tokens in config</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(98.28125,345)" style="opacity: 1;"><g transform="translate(-90.28125,-9)" class="label"><rect rx="0" ry="0" width="180.5625" height="18"></rect><foreignObject width="180.5625" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Chosen_Server-OAuth_Started" class="edgeLabel L-LS-Chosen_Server' L-LE-OAuth_Started">No tokens found in config</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(415.7421875,398)" style="opacity: 1;"><g transform="translate(-103.1484375,-9)" class="label"><rect rx="0" ry="0" width="206.296875" height="18"></rect><foreignObject width="206.296875" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-OAuth_Started-Authorized" class="edgeLabel L-LS-OAuth_Started' L-LE-Authorized">User authorizes with browser</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(548.796875,345)" style="opacity: 1;"><g transform="translate(-49.8046875,-9)" class="label"><rect rx="0" ry="0" width="99.609375" height="18"></rect><foreignObject width="99.609375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-OAuth_Started-Chosen_Server" class="edgeLabel L-LS-OAuth_Started' L-LE-Chosen_Server">Cancel OAuth</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(205.4375,398)" style="opacity: 1;"><g transform="translate(-87.15625,-9)" class="label"><rect rx="0" ry="0" width="174.3125" height="18"></rect><foreignObject width="174.3125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Authorized-OAuth_Started" class="edgeLabel L-LS-Authorized' L-LE-OAuth_Started">Re-authorize with OAuth</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(652.3984375,398)" style="opacity: 1;"><g transform="translate(-83.6015625,-9)" class="label"><rect rx="0" ry="0" width="167.203125" height="18"></rect><foreignObject width="167.203125" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Authorized-Request_Config" class="edgeLabel L-LS-Authorized' L-LE-Request_Config">Client requests a config</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(739.59765625,504)" style="opacity: 1;"><g transform="translate(-77.8203125,-9)" class="label"><rect rx="0" ry="0" width="155.640625" height="18"></rect><foreignObject width="155.640625" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Request_Config-Ask_Profile" class="edgeLabel L-LS-Request_Config' L-LE-Ask_Profile">Multiple profiles found</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(565.19921875,557)" style="opacity: 1;"><g transform="translate(-88.9375,-9)" class="label"><rect rx="0" ry="0" width="177.875" height="18"></rect><foreignObject width="177.875" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Request_Config-Has_Config" class="edgeLabel L-LS-Request_Config' L-LE-Has_Config">Success, only one profile</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(652.3984375,716)" style="opacity: 1;"><g transform="translate(-77.8203125,-9)" class="label"><rect rx="0" ry="0" width="155.640625" height="18"></rect><foreignObject width="155.640625" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Has_Config-Connected" class="edgeLabel L-LS-Has_Config' L-LE-Connected">OS reports connected</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(739.59765625,610)" style="opacity: 1;"><g transform="translate(-119.6171875,-9)" class="label"><rect rx="0" ry="0" width="239.234375" height="18"></rect><foreignObject width="239.234375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Ask_Profile-Has_Config" class="edgeLabel L-LS-Ask_Profile' L-LE-Has_Config">User chooses profile and success</span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(913.10546875,557)" style="opacity: 1;"><g transform="translate(-88.046875,-9)" class="label"><rect rx="0" ry="0" width="176.09375" height="18"></rect><foreignObject width="176.09375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;"><span id="L-L-Connected-Authorized" class="edgeLabel L-LS-Connected' L-LE-Authorized">OS reports disconnected</span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="flowchart-Deregistered-39" transform="translate(377.39453125,27)" style="opacity: 1;"><rect rx="5" ry="5" x="-55.8046875" y="-19" width="111.609375" height="38" class="label-container" style="fill:white;"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-45.8046875,-9)"><foreignObject width="91.609375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Deregistered</div></foreignObject></g></g></g><g class="node default" id="flowchart-No_Server-41" transform="translate(377.39453125,133)" style="opacity: 1;"><rect rx="5" ry="5" x="-48.2421875" y="-19" width="96.484375" height="38" class="label-container" style="fill:white;"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-38.2421875,-9)"><foreignObject width="76.484375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">No_Server</div></foreignObject></g></g></g><g class="node default" id="flowchart-Chosen_Server-44" transform="translate(377.39453125,239)" style="opacity: 1;"><rect rx="5" ry="5" x="-65.5859375" y="-19" width="131.171875" height="38" class="label-container" style="fill:white;fill:white;"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-55.5859375,-9)"><foreignObject width="111.171875" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Chosen_Server</div></foreignObject></g></g></g><g class="node default" id="flowchart-Authorized-47" transform="translate(377.39453125,345)" style="opacity: 1;"><rect rx="5" ry="5" x="-48.25" y="-19" width="96.5" height="38" class="label-container" style="fill:white;fill:white;"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-38.25,-9)"><foreignObject width="76.5" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Authorized</div></foreignObject></g></g></g><g class="node default" id="flowchart-OAuth_Started-50" transform="translate(343.77734375,451)" style="opacity: 1;"><rect rx="5" ry="5" x="-62.921875" y="-19" width="125.84375" height="38" class="label-container" style="fill:white;fill:white;"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-52.921875,-9)"><foreignObject width="105.84375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">OAuth_Started</div></foreignObject></g></g></g><g class="node default" id="flowchart-Request_Config-62" transform="translate(652.3984375,451)" style="opacity: 1;"><rect rx="5" ry="5" x="-67.375" y="-19" width="134.75" height="38" class="label-container" style="fill:white;fill:white;"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-57.375,-9)"><foreignObject width="114.75" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Request_Config</div></foreignObject></g></g></g><g class="node default" id="flowchart-Ask_Profile-65" transform="translate(739.59765625,557)" style="opacity: 1;"><rect rx="5" ry="5" x="-50.4609375" y="-19" width="100.921875" height="38" class="label-container" style="fill:white;"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-40.4609375,-9)"><foreignObject width="80.921875" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Ask_Profile</div></foreignObject></g></g></g><g class="node default" id="flowchart-Has_Config-68" transform="translate(652.3984375,663)" style="opacity: 1;"><rect rx="5" ry="5" x="-51.8046875" y="-19" width="103.609375" height="38" class="label-container" style="fill:cyan;"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-41.8046875,-9)"><foreignObject width="83.609375" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Has_Config</div></foreignObject></g></g></g><g class="node default" id="flowchart-Connected-71" transform="translate(767.38671875,769)" style="opacity: 1;"><rect rx="5" ry="5" x="-48.6953125" y="-19" width="97.390625" height="38" class="label-container" style="fill:white;"></rect><g class="label" transform="translate(0,0)"><g transform="translate(-38.6953125,-9)"><foreignObject width="77.390625" height="18"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; white-space: nowrap;">Connected</div></foreignObject></g></g></g></g></g></g></svg> \ No newline at end of file