From cbfc4326e047f549950e4f7885d29c9a6831479d Mon Sep 17 00:00:00 2001 From: jwijenbergh Date: Tue, 19 Sep 2023 14:01:42 +0200 Subject: [PATCH] Docs: Refactor to use mkdocs --- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- README.md | 35 +- doc/.gitignore | 3 +- doc/Makefile | 20 - doc/_static/.phony | 0 doc/build.sh | 3 + doc/conf.py | 195 ------ doc/developer.rst | 87 --- doc/eduvpn_theme/css/screen.css | 26 + doc/eduvpn_theme/css/simple.css | 685 ++++++++++++++++++++++ doc/eduvpn_theme/img/eduvpn_logo.png | Bin 0 -> 3144 bytes doc/eduvpn_theme/img/eduvpn_logo_dark.png | Bin 0 -> 3760 bytes doc/eduvpn_theme/main.html | 52 ++ doc/flow.dia | Bin 3506 -> 0 bytes doc/flow.png | Bin 32141 -> 0 bytes doc/index.rst | 30 - doc/installation.rst | 234 -------- doc/knownissues.rst | 60 -- doc/md/img/configured.png | Bin 0 -> 23491 bytes doc/md/img/connected.png | Bin 0 -> 30659 bytes doc/md/img/desktopentry.png | Bin 0 -> 58630 bytes doc/md/index.md | 10 + doc/md/installation.md | 193 ++++++ doc/md/support.md | 96 +++ doc/md/updating.md | 81 +++ doc/md/usage.md | 31 + doc/mkdocs.yml | 21 + doc/requirements.txt | 7 - doc/screenshot.png | Bin 201590 -> 0 bytes doc/updating.rst | 74 --- doc/upload.sh | 17 + doc/usage.rst | 34 -- 32 files changed, 1223 insertions(+), 773 deletions(-) delete mode 100644 doc/Makefile delete mode 100644 doc/_static/.phony create mode 100755 doc/build.sh delete mode 100644 doc/conf.py delete mode 100644 doc/developer.rst create mode 100644 doc/eduvpn_theme/css/screen.css create mode 100644 doc/eduvpn_theme/css/simple.css create mode 100644 doc/eduvpn_theme/img/eduvpn_logo.png create mode 100644 doc/eduvpn_theme/img/eduvpn_logo_dark.png create mode 100644 doc/eduvpn_theme/main.html delete mode 100644 doc/flow.dia delete mode 100644 doc/flow.png delete mode 100644 doc/index.rst delete mode 100644 doc/installation.rst delete mode 100644 doc/knownissues.rst create mode 100644 doc/md/img/configured.png create mode 100644 doc/md/img/connected.png create mode 100644 doc/md/img/desktopentry.png create mode 100644 doc/md/index.md create mode 100644 doc/md/installation.md create mode 100644 doc/md/support.md create mode 100644 doc/md/updating.md create mode 100644 doc/md/usage.md create mode 100644 doc/mkdocs.yml delete mode 100644 doc/requirements.txt delete mode 100644 doc/screenshot.png delete mode 100644 doc/updating.rst create mode 100755 doc/upload.sh delete mode 100644 doc/usage.rst diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index b7d512c0..e3958c8c 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -16,7 +16,7 @@ Double check that you are running the latest version, see [the releases page](ht # Check if your issue is in the known issues list -The known issues list is available here: +The known issues list is available here: # OS/Distribution diff --git a/README.md b/README.md index e7ef7134..5f9f21d9 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,13 @@ -# Linux eduVPN client +# eduVPN for Linux -This is the GNU/Linux desktop client for eduVPN. It interacts with NetworkManager to set up the VPN and it supports OpenVPN + WireGuard. +This is the Linux desktop client for eduVPN. -Read more about eduVPN on the eduVPN website http://eduvpn.org/. +Read more about the eduVPN project on the eduVPN website https://www.eduvpn.org/. -# Installation +# Documentation -The recommended way to install the eduVPN client for Linux is using one of the packages for your Linux distribution. See the installation document: - -https://python-eduvpn-client.readthedocs.io/en/latest/installation.html - -# Reporting an issue - -To report an issue you can make an issue in this repository: - -https://github.com/eduvpn/python-eduvpn-client/issues/new/choose - -Make sure to follow the issue template closely. - -If you prefer e-mail, you can send one to: - -mailto:eduvpn-support@lists.geant.org - -# Other documentation - -The full documentation for this client is available on: - -https://python-eduvpn-client.readthedocs.io/ - -if you're looking for eduVPN server documentation, see: - -https://docs.eduvpn.org/ +The docs for this client are available on: +https://docs.eduvpn.org/client/linux # License diff --git a/doc/.gitignore b/doc/.gitignore index e6b110ed..46ff2463 100644 --- a/doc/.gitignore +++ b/doc/.gitignore @@ -1,2 +1 @@ -_build/ -_static/ +/site/ diff --git a/doc/Makefile b/doc/Makefile deleted file mode 100644 index 8994227c..00000000 --- a/doc/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = python -msphinx -SPHINXPROJ = python-eduvpn-client -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file diff --git a/doc/_static/.phony b/doc/_static/.phony deleted file mode 100644 index e69de29b..00000000 diff --git a/doc/build.sh b/doc/build.sh new file mode 100755 index 00000000..365bd767 --- /dev/null +++ b/doc/build.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +mkdocs build diff --git a/doc/conf.py b/doc/conf.py deleted file mode 100644 index e9d3aec9..00000000 --- a/doc/conf.py +++ /dev/null @@ -1,195 +0,0 @@ -# -*- coding: utf-8 -*- -# -# python-eduvpn-client documentation build configuration file, created by -# sphinx-quickstart on Wed Aug 2 15:37:37 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os -import sys -from typing import Dict -from unittest.mock import MagicMock - -sys.path.insert(0, os.path.abspath('..')) -from eduvpn import __version__ - - -class Mock(MagicMock): - @classmethod - def __getattr__(cls, name): - m = MagicMock() - - -MOCK_MODULES = ['pygtk', 'gtk', 'gobject', 'nacl', 'NetworkManager', - 'dbus', 'nacl.encoding', 'nacl.signing', 'dbus.service', - 'cryptography', 'cryptography.x509', 'cryptography.x509.oid', - 'cryptography', 'cryptography.hazmat', - 'cryptography.hazmat.backends', 'OpenSSL.crypto', - 'OpenSSL.SSL',] - - -sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) - - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.coverage', - 'sphinx.ext.napoleon', -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'python-eduvpn-client' -author = u'Jeroen Wijenbergh' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = __version__ -# The full version, including alpha/beta/rc tags. -release = __version__ - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'sphinx_rtd_theme' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# This is required for the alabaster theme -# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars -html_sidebars = { - '**': [ - 'about.html', - 'navigation.html', - 'relations.html', # needs 'show_related': True theme option to display - 'searchbox.html', - 'donate.html', - ] -} - - -# -- Options for HTMLHelp output ------------------------------------------ - -# Output file base name for HTML help builder. -htmlhelp_basename = 'python-eduvpn-clientdoc' - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements: Dict[str, str] = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'python-eduvpn-client.tex', u'python-eduvpn-client Documentation', - u'Gijs Molenaar', 'manual'), -] - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'python-eduvpn-client', u'python-eduvpn-client Documentation', - [author], 1) -] - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'python-eduvpn-client', u'python-eduvpn-client Documentation', - author, 'python-eduvpn-client', 'One line description of project.', - 'Miscellaneous'), -] - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'https://docs.python.org/': None} diff --git a/doc/developer.rst b/doc/developer.rst deleted file mode 100644 index 963097a6..00000000 --- a/doc/developer.rst +++ /dev/null @@ -1,87 +0,0 @@ -Developer notes -=============== - -Notes about code ----------------- - -Use the decorator ``eduvpn.utils.run_in_background_thread`` to schedule long running action -in the background to avoid blocking the main thread. - -Never call GTK functions directly from a background thread, -use ``eduvpn.utils.run_in_main_gtk_thread`` to decorate functions -that must run on the main thread (eg. UI updates). - -This library closely follows eduvpn-common. To see the API for that, -`see here -`_ - -Most of the interaction with this library is in ``eduvpn.app``, the ui -is in ``eduvpn.ui.ui`` and the cli in ``eduvpn.cli``. In these files -you can see lots of state transitions defined. The state transitions -that are used are closely in line with the Finite State machine from -the eduvpn-common library. A figure for this state machine can be -`found here -`_. - - -Running the tests ------------------ - -To run the automated tests, -use the following command from the root of the project. - -.. code-block:: console - - $ pytest - -How to make a release ---------------------- - -Prepare the code -^^^^^^^^^^^^^^^^ - -* Determine version number (for example 4.1.3) - -* Compose a list of changes (check issue tracker) - -* Make sure the test suite runs with python3 - -* Set version number in ``setup.py``, and ``eduvpn.spec`` and ensure eduvpn-common has the targeted version set - -* add changes to CHANGES.md - -* Commit - -* Press release button on github. List all changes here also - -* Check if GitHub Actions builds. - -* The release will trigger a build on readthedocs, but the active version still needs to be set manually here: - https://readthedocs.org/projects/python-eduvpn-client/versions/ - -Upload to PyPi -^^^^^^^^^^^^^^ - -do a manual wheel upload using `twine `_: - -.. code-block:: console - - $ rm dist/* - $ python setup.py bdist_wheel sdist - $ twine upload dist/* - -There is also a make shortcut: - -.. code-block:: console - - $ make twine-upload - -You should also make sure that eduvpn-common is updated in PyPi! Update in the test PyPi first so that CI passes. - -Building RPMs -^^^^^^^^^^^^^^^^^^^^^^ -We use `builder.rpm `_, to build the RPM packages. - -Build Debian packages -^^^^^^^^^^^^^^^^^^^^^ -We use `nbuilder.deb `_, to build the DEB packages. diff --git a/doc/eduvpn_theme/css/screen.css b/doc/eduvpn_theme/css/screen.css new file mode 100644 index 00000000..5dedb9d4 --- /dev/null +++ b/doc/eduvpn_theme/css/screen.css @@ -0,0 +1,26 @@ +:root { + --accent: #e24301; +} + +div.page-footer { + text-align: center; + font-size: small; +} + +@media screen and (min-width: 800px) { + body > header { + background-image: url("../img/eduvpn_logo.png"); + background-repeat: no-repeat; + background-position: 5% 50%; + } + + @media (prefers-color-scheme: dark) { + body > header { + background-image: url("../img/eduvpn_logo_dark.png"); + } + } +} + +main a.headerlink { + margin-left: 0.15em; +} diff --git a/doc/eduvpn_theme/css/simple.css b/doc/eduvpn_theme/css/simple.css new file mode 100644 index 00000000..fd0fbddb --- /dev/null +++ b/doc/eduvpn_theme/css/simple.css @@ -0,0 +1,685 @@ +/* Global variables. */ +:root, +::backdrop { + /* Set sans-serif & mono fonts */ + --sans-font: -apple-system, BlinkMacSystemFont, "Avenir Next", Avenir, + "Nimbus Sans L", Roboto, "Noto Sans", "Segoe UI", Arial, Helvetica, + "Helvetica Neue", sans-serif; + --mono-font: Consolas, Menlo, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + --standard-border-radius: 5px; + + /* Default (light) theme */ + --bg: #fff; + --accent-bg: #f5f7ff; + --text: #212121; + --text-light: #585858; + --border: #898EA4; + --accent: #0d47a1; + --code: #d81b60; + --preformatted: #444; + --marked: #ffdd33; + --disabled: #efefef; +} + +/* Dark theme */ +@media (prefers-color-scheme: dark) { + :root, + ::backdrop { + color-scheme: dark; + --bg: #212121; + --accent-bg: #2b2b2b; + --text: #dcdcdc; + --text-light: #ababab; + --accent: #ffb300; + --code: #f06292; + --preformatted: #ccc; + --disabled: #111; + } + /* Add a bit of transparency so light media isn't so glaring in dark mode */ + img, + video { + opacity: 0.8; + } +} + +/* Reset box-sizing */ +*, *::before, *::after { + box-sizing: border-box; +} + +/* Reset default appearance */ +textarea, +select, +input, +progress { + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; +} + +html { + /* Set the font globally */ + font-family: var(--sans-font); + scroll-behavior: smooth; +} + +/* Make the body a nice central block */ +body { + color: var(--text); + background-color: var(--bg); + font-size: 1.15rem; + line-height: 1.5; + display: grid; + grid-template-columns: 1fr min(60rem, 90%) 1fr; + margin: 0; +} +body > * { + grid-column: 2; +} + +/* Make the header bg full width, but the content inline with body */ +body > header { + background-color: var(--accent-bg); + border-bottom: 1px solid var(--border); + text-align: center; + padding: 0 0.5rem 2rem 0.5rem; + grid-column: 1 / -1; +} + +body > header h1 { + max-width: 1200px; + margin: 1rem auto; +} + +body > header p { + max-width: 40rem; + margin: 1rem auto; +} + +/* Add a little padding to ensure spacing is correct between content and header > nav */ +main { + padding-top: 1.5rem; +} + +body > footer { + margin-top: 4rem; + padding: 2rem 1rem 1.5rem 1rem; + color: var(--text-light); + font-size: 0.9rem; + text-align: center; + border-top: 1px solid var(--border); +} + +/* Format headers */ +h1 { + font-size: 3rem; +} + +h2 { + font-size: 2.6rem; + margin-top: 3rem; +} + +h3 { + font-size: 2rem; + margin-top: 3rem; +} + +h4 { + font-size: 1.44rem; +} + +h5 { + font-size: 1.15rem; +} + +h6 { + font-size: 0.96rem; +} + +p { + margin: 1.5rem 0; +} + +/* Prevent long strings from overflowing container */ +p, h1, h2, h3, h4, h5, h6 { + overflow-wrap: break-word; +} + +/* Fix line height when title wraps */ +h1, +h2, +h3 { + line-height: 1.1; +} + +/* Reduce header size on mobile */ +@media only screen and (max-width: 720px) { + h1 { + font-size: 2.5rem; + } + + h2 { + font-size: 2.1rem; + } + + h3 { + font-size: 1.75rem; + } + + h4 { + font-size: 1.25rem; + } +} + +/* Format links & buttons */ +a, +a:visited { + color: var(--accent); +} + +a:hover { + text-decoration: none; +} + +button, +.button, +a.button, /* extra specificity to override a */ +input[type="submit"], +input[type="reset"], +input[type="button"], +label[type="button"] { + border: 1px solid var(--accent); + background-color: var(--accent); + color: var(--bg); + padding: 0.5rem 0.9rem; + text-decoration: none; + line-height: normal; +} + +.button[aria-disabled="true"], +input:disabled, +textarea:disabled, +select:disabled, +button[disabled] { + cursor: not-allowed; + background-color: var(--disabled); + border-color: var(--disabled); + color: var(--text-light); +} + +input[type="range"] { + padding: 0; +} + +/* Set the cursor to '?' on an abbreviation and style the abbreviation to show that there is more information underneath */ +abbr[title] { + cursor: help; + text-decoration-line: underline; + text-decoration-style: dotted; +} + +button:enabled:hover, +.button:not([aria-disabled="true"]):hover, +input[type="submit"]:enabled:hover, +input[type="reset"]:enabled:hover, +input[type="button"]:enabled:hover, +label[type="button"]:hover { + filter: brightness(1.4); + cursor: pointer; +} + +.button:focus-visible, +button:focus-visible:where(:enabled), +input:enabled:focus-visible:where( + [type="submit"], + [type="reset"], + [type="button"] +) { + outline: 2px solid var(--accent); + outline-offset: 1px; +} + +/* Format navigation */ +header > nav { + font-size: 1rem; + line-height: 2; + padding: 1rem 0 0 0; +} + +/* Use flexbox to allow items to wrap, as needed */ +header > nav ul, +header > nav ol { + align-content: space-around; + align-items: center; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + list-style-type: none; + margin: 0; + padding: 0; +} + +/* List items are inline elements, make them behave more like blocks */ +header > nav ul li, +header > nav ol li { + display: inline-block; +} + +header > nav a, +header > nav a:visited { + margin: 0 0.5rem 1rem 0.5rem; + border: 1px solid var(--border); + border-radius: var(--standard-border-radius); + color: var(--text); + display: inline-block; + padding: 0.1rem 1rem; + text-decoration: none; +} + +header > nav a:hover, +header > nav a.current, +header > nav a[aria-current="page"] { + border-color: var(--accent); + color: var(--accent); + cursor: pointer; +} + +/* Reduce nav side on mobile */ +@media only screen and (max-width: 720px) { + header > nav a { + border: none; + padding: 0; + text-decoration: underline; + line-height: 1; + } +} + +/* Consolidate box styling */ +aside, details, pre, progress { + background-color: var(--accent-bg); + border: 1px solid var(--border); + border-radius: var(--standard-border-radius); + margin-bottom: 1rem; +} + +aside { + font-size: 1rem; + width: 30%; + padding: 0 15px; + margin-inline-start: 15px; + float: right; +} +*[dir="rtl"] aside { + float: left; +} + +/* Make aside full-width on mobile */ +@media only screen and (max-width: 720px) { + aside { + width: 100%; + float: none; + margin-inline-start: 0; + } +} + +article, fieldset, dialog { + border: 1px solid var(--border); + padding: 1rem; + border-radius: var(--standard-border-radius); + margin-bottom: 1rem; +} + +article h2:first-child, +section h2:first-child { + margin-top: 1rem; +} + +section { + border-top: 1px solid var(--border); + border-bottom: 1px solid var(--border); + padding: 2rem 1rem; + margin: 3rem 0; +} + +/* Don't double separators when chaining sections */ +section + section, +section:first-child { + border-top: 0; + padding-top: 0; +} + +section:last-child { + border-bottom: 0; + padding-bottom: 0; +} + +details { + padding: 0.7rem 1rem; +} + +summary { + cursor: pointer; + font-weight: bold; + padding: 0.7rem 1rem; + margin: -0.7rem -1rem; + word-break: break-all; +} + +details[open] > summary + * { + margin-top: 0; +} + +details[open] > summary { + margin-bottom: 0.5rem; +} + +details[open] > :last-child { + margin-bottom: 0; +} + +/* Format tables */ +table { + border-collapse: collapse; + margin: 1.5rem 0; +} + +td, +th { + border: 1px solid var(--border); + text-align: start; + padding: 0.5rem; +} + +th { + background-color: var(--accent-bg); + font-weight: bold; +} + +tr:nth-child(even) { + /* Set every other cell slightly darker. Improves readability. */ + background-color: var(--accent-bg); +} + +table caption { + font-weight: bold; + margin-bottom: 0.5rem; +} + +/* Format forms */ +textarea, +select, +input, +button, +.button { + font-size: inherit; + font-family: inherit; + padding: 0.5rem; + margin-bottom: 0.5rem; + border-radius: var(--standard-border-radius); + box-shadow: none; + max-width: 100%; + display: inline-block; +} +textarea, +select, +input { + color: var(--text); + background-color: var(--bg); + border: 1px solid var(--border); +} +label { + display: block; +} +textarea:not([cols]) { + width: 100%; +} + +/* Add arrow to drop-down */ +select:not([multiple]) { + background-image: linear-gradient(45deg, transparent 49%, var(--text) 51%), + linear-gradient(135deg, var(--text) 51%, transparent 49%); + background-position: calc(100% - 15px), calc(100% - 10px); + background-size: 5px 5px, 5px 5px; + background-repeat: no-repeat; + padding-inline-end: 25px; +} +*[dir="rtl"] select:not([multiple]) { + background-position: 10px, 15px; +} + +/* checkbox and radio button style */ +input[type="checkbox"], +input[type="radio"] { + vertical-align: middle; + position: relative; + width: min-content; +} + +input[type="checkbox"] + label, +input[type="radio"] + label { + display: inline-block; +} + +input[type="radio"] { + border-radius: 100%; +} + +input[type="checkbox"]:checked, +input[type="radio"]:checked { + background-color: var(--accent); +} + +input[type="checkbox"]:checked::after { + /* Creates a rectangle with colored right and bottom borders which is rotated to look like a check mark */ + content: " "; + width: 0.18em; + height: 0.32em; + border-radius: 0; + position: absolute; + top: 0.05em; + left: 0.17em; + background-color: transparent; + border-right: solid var(--bg) 0.08em; + border-bottom: solid var(--bg) 0.08em; + font-size: 1.8em; + transform: rotate(45deg); +} +input[type="radio"]:checked::after { + /* creates a colored circle for the checked radio button */ + content: " "; + width: 0.25em; + height: 0.25em; + border-radius: 100%; + position: absolute; + top: 0.125em; + background-color: var(--bg); + left: 0.125em; + font-size: 32px; +} + +/* Makes input fields wider on smaller screens */ +@media only screen and (max-width: 720px) { + textarea, + select, + input { + width: 100%; + } +} + +/* Set a height for color input */ +input[type="color"] { + height: 2.5rem; + padding: 0.2rem; +} + +/* do not show border around file selector button */ +input[type="file"] { + border: 0; +} + +/* Misc body elements */ +hr { + border: none; + height: 1px; + background: var(--border); + margin: 1rem auto; +} + +mark { + padding: 2px 5px; + border-radius: var(--standard-border-radius); + background-color: var(--marked); + color: black; +} + +mark a { + color: #0d47a1; +} + +img, +video { + max-width: 100%; + height: auto; + border-radius: var(--standard-border-radius); +} + +figure { + margin: 0; + display: block; + overflow-x: auto; +} + +figcaption { + text-align: center; + font-size: 0.9rem; + color: var(--text-light); + margin-bottom: 1rem; +} + +blockquote { + margin-inline-start: 2rem; + margin-inline-end: 0; + margin-block: 2rem; + padding: 0.4rem 0.8rem; + border-inline-start: 0.35rem solid var(--accent); + color: var(--text-light); + font-style: italic; +} + +cite { + font-size: 0.9rem; + color: var(--text-light); + font-style: normal; +} + +dt { + color: var(--text-light); +} + +/* Use mono font for code elements */ +code, +pre, +pre span, +kbd, +samp { + font-family: var(--mono-font); + color: var(--code); +} + +kbd { + color: var(--preformatted); + border: 1px solid var(--preformatted); + border-bottom: 3px solid var(--preformatted); + border-radius: var(--standard-border-radius); + padding: 0.1rem 0.4rem; +} + +pre { + padding: 1rem 1.4rem; + max-width: 100%; + overflow: auto; + color: var(--preformatted); +} + +/* Fix embedded code within pre */ +pre code { + color: var(--preformatted); + background: none; + margin: 0; + padding: 0; +} + +/* Progress bars */ +/* Declarations are repeated because you */ +/* cannot combine vendor-specific selectors */ +progress { + width: 100%; +} + +progress:indeterminate { + background-color: var(--accent-bg); +} + +progress::-webkit-progress-bar { + border-radius: var(--standard-border-radius); + background-color: var(--accent-bg); +} + +progress::-webkit-progress-value { + border-radius: var(--standard-border-radius); + background-color: var(--accent); +} + +progress::-moz-progress-bar { + border-radius: var(--standard-border-radius); + background-color: var(--accent); + transition-property: width; + transition-duration: 0.3s; +} + +progress:indeterminate::-moz-progress-bar { + background-color: var(--accent-bg); +} + +dialog { + max-width: 40rem; + margin: auto; +} + +dialog::backdrop { + background-color: var(--bg); + opacity: 0.8; +} + +@media only screen and (max-width: 720px) { + dialog { + max-width: 100%; + margin: auto 1em; + } +} + +/* Superscript & Subscript */ +/* Prevent scripts from affecting line-height. */ +sup, sub { + vertical-align: baseline; + position: relative; +} + +sup { + top: -0.4em; +} + +sub { + top: 0.3em; +} + +/* Classes for notices */ +.notice { + background: var(--accent-bg); + border: 2px solid var(--border); + border-radius: 5px; + padding: 1.5rem; + margin: 2rem 0; +} diff --git a/doc/eduvpn_theme/img/eduvpn_logo.png b/doc/eduvpn_theme/img/eduvpn_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..839addfbc7c41e64a8be762350d094f244ee0973 GIT binary patch literal 3144 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 awc-C2K16fhr7)WS0000 + + + + + + + {% if page.title %}{{ page.title }} - {% endif %}{{ config.site_name }} + + +
+

{{ config.site_name }}

+{% if config.site_description %} +

{{ config.site_description }}

+{% endif %} +{% if nav|length>0 %} + +{% endif %} +
+
+{% if page.toc %} + +{% endif %} + {{ page.content }} +
+ +
+

{{ config.site_name }} - {{ config.site_description }}

+
+ + diff --git a/doc/flow.dia b/doc/flow.dia deleted file mode 100644 index 32b39813a2d049a878137138520328b7e429527d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3506 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 diff --git a/doc/flow.png b/doc/flow.png deleted file mode 100644 index e7d859c277e2a9912eb6b1250f463741f2fc138d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32141 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 i?XN-uuoFp(`Iq`_ and we will see if we can provide it. Right now we only provide `x86_64` packages (we use a compiled dependency), if you want an ARM package for a certain target you can also make an issue. - - -Debian 11 -====================================== - -.. code-block:: console - - $ sudo apt update - $ sudo apt install apt-transport-https wget - $ wget -O- https://app.eduvpn.org/linux/v4/deb/app+linux@eduvpn.org.asc | gpg --dearmor | sudo tee /usr/share/keyrings/eduvpn-v4.gpg >/dev/null - $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/eduvpn-v4.gpg] https://app.eduvpn.org/linux/v4/deb/ bullseye main" | sudo tee /etc/apt/sources.list.d/eduvpn-v4.list - $ sudo apt update - $ sudo apt install eduvpn-client - -Debian 12 -====================================== - -.. code-block:: console - - $ sudo apt update - $ sudo apt install apt-transport-https wget - $ wget -O- https://app.eduvpn.org/linux/v4/deb/app+linux@eduvpn.org.asc | gpg --dearmor | sudo tee /usr/share/keyrings/eduvpn-v4.gpg >/dev/null - $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/eduvpn-v4.gpg] https://app.eduvpn.org/linux/v4/deb/ bookworm main" | sudo tee /etc/apt/sources.list.d/eduvpn-v4.list - $ sudo apt update - $ sudo apt install eduvpn-client - -Ubuntu 20.04 -====================================== - -.. code-block:: console - - $ sudo apt update - $ sudo apt install apt-transport-https wget - $ wget -O- https://app.eduvpn.org/linux/v4/deb/app+linux@eduvpn.org.asc | gpg --dearmor | sudo tee /usr/share/keyrings/eduvpn-v4.gpg >/dev/null - $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/eduvpn-v4.gpg] https://app.eduvpn.org/linux/v4/deb/ focal main" | sudo tee /etc/apt/sources.list.d/eduvpn-v4.list - $ sudo apt update - $ sudo apt install eduvpn-client - -Ubuntu 22.04 -====================================== - -.. code-block:: console - - $ sudo apt update - $ sudo apt install apt-transport-https wget - $ wget -O- https://app.eduvpn.org/linux/v4/deb/app+linux@eduvpn.org.asc | gpg --dearmor | sudo tee /usr/share/keyrings/eduvpn-v4.gpg >/dev/null - $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/eduvpn-v4.gpg] https://app.eduvpn.org/linux/v4/deb/ jammy main" | sudo tee /etc/apt/sources.list.d/eduvpn-v4.list - $ sudo apt update - $ sudo apt install eduvpn-client - -Ubuntu 22.10 -====================================== - -.. code-block:: console - - $ sudo apt update - $ sudo apt install apt-transport-https wget - $ wget -O- https://app.eduvpn.org/linux/v4/deb/app+linux@eduvpn.org.asc | gpg --dearmor | sudo tee /usr/share/keyrings/eduvpn-v4.gpg >/dev/null - $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/eduvpn-v4.gpg] https://app.eduvpn.org/linux/v4/deb/ kinetic main" | sudo tee /etc/apt/sources.list.d/eduvpn-v4.list - $ sudo apt update - $ sudo apt install eduvpn-client - -Ubuntu 23.04 -====================================== - -.. code-block:: console - - $ sudo apt update - $ sudo apt install apt-transport-https wget - $ wget -O- https://app.eduvpn.org/linux/v4/deb/app+linux@eduvpn.org.asc | gpg --dearmor | sudo tee /usr/share/keyrings/eduvpn-v4.gpg >/dev/null - $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/eduvpn-v4.gpg] https://app.eduvpn.org/linux/v4/deb/ lunar main" | sudo tee /etc/apt/sources.list.d/eduvpn-v4.list - $ sudo apt update - $ sudo apt install eduvpn-client - -Linux Mint 20.x -====================================== - -.. code-block:: console - - $ sudo apt update - $ sudo apt install apt-transport-https wget - $ wget -O- https://app.eduvpn.org/linux/v4/deb/app+linux@eduvpn.org.asc | gpg --dearmor | sudo tee /usr/share/keyrings/eduvpn-v4.gpg >/dev/null - $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/eduvpn-v4.gpg] https://app.eduvpn.org/linux/v4/deb/ focal main" | sudo tee /etc/apt/sources.list.d/eduvpn-v4.list - $ sudo apt update - $ sudo apt install eduvpn-client - -Linux Mint 21.x -====================================== - -.. code-block:: console - - $ sudo apt update - $ sudo apt install apt-transport-https wget - $ wget -O- https://app.eduvpn.org/linux/v4/deb/app+linux@eduvpn.org.asc | gpg --dearmor | sudo tee /usr/share/keyrings/eduvpn-v4.gpg >/dev/null - $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/eduvpn-v4.gpg] https://app.eduvpn.org/linux/v4/deb/ jammy main" | sudo tee /etc/apt/sources.list.d/eduvpn-v4.list - $ sudo apt update - $ sudo apt install eduvpn-client - -Fedora (37 & 38) -==================== - -.. code-block:: console - - $ curl -O https://app.eduvpn.org/linux/v4/rpm/app+linux@eduvpn.org.asc - $ sudo rpm --import app+linux@eduvpn.org.asc - $ cat << 'EOF' | sudo tee /etc/yum.repos.d/python-eduvpn-client_v4.repo - [python-eduvpn-client_v4] - name=eduVPN for Linux 4.x (Fedora $releasever) - baseurl=https://app.eduvpn.org/linux/v4/rpm/fedora-$releasever-$basearch - gpgcheck=1 - EOF - $ sudo dnf install eduvpn-client - -CentOS (Stream 9) -================= - -.. code-block:: console - - $ curl -O https://app.eduvpn.org/linux/v4/rpm/app+linux@eduvpn.org.asc - $ sudo rpm --import app+linux@eduvpn.org.asc - $ cat << 'EOF' | sudo tee /etc/yum.repos.d/python-eduvpn-client_v4.repo - [python-eduvpn-client_v4] - name=eduVPN for Linux 4.x (CentOS Stream 9) - baseurl=https://app.eduvpn.org/linux/v4/rpm/centos-stream+epel-next-9-$basearch - gpgcheck=1 - EOF - $ sudo dnf install eduvpn-client - -Arch (Unofficial) -================= - -There is an unofficial package in the `Arch User Repository (AUR) `_. - - -Pip installation -========================== -We also provide pip packages. These are useful if your distro is not officially supported in our packaging (yet). - -Dependencies ------------- - -To manually install the eduVPN package via Pip you first need to satisfy the dependencies. - -For Debian or Ubuntu: - -.. code-block:: console - - $ sudo apt update - $ sudo apt install \ - gir1.2-nm-1.0 \ - gir1.2-secret-1 \ - gir1.2-gtk-3.0 \ - gir1.2-notify-0.7 \ - libgirepository1.0-dev \ - libdbus-glib-1-dev \ - python3-gi \ - python3-setuptools \ - python3-pytest \ - python3-wheel \ - python3-dbus \ - network-manager-openvpn-gnome - -For Fedora: - -.. code-block:: console - - $ sudo dnf install \ - libnotify \ - libsecret \ - gtk3 \ - python3-dbus \ - python3-gobject \ - python3-pytest \ - python3-cairo-devel \ - gobject-introspection-devel \ - cairo-gobject-devel \ - dbus-python-devel - -Pip commands ------------- - -You can then continue with installing via Pip: - -.. code-block:: console - - $ pip install "eduvpn-client[gui]" - -Or, if you want to try out the bleeding edge development version: - -.. code-block:: console - - $ pip install git+https://github.com/eduvpn/python-eduvpn-client.git - - -Issues -====== - -If you experience any issues you could and should report them at our -`issue tracker `_. Please don't forget to mention your OS, -method of installation, eduVPN client version and instructions on how to reproduce the problem. If you have a problem -enabling your VPN connection please also examine the `journalctl -u NetworkManager` logs. The log file of the eduVPN app -can also help us figure out the problem, running the gui or cli in debug mode (-d) flag will print debug logging to the log file -located at: ~/.config/eduvpn/log or ~/.config/letsconnect/log for Let's Connect!. - - -Source code -=========== - - -Development of this project takes place on `github `_. You -can find the source code and all releases there. - -Contributing -============ - -Contributions are more than welcome! If you experience any problems let us know in the bug tracker. We accept patches -in the form of github pull requests. Please make sure your code works with python3 and is pycodestyle (formerly pep8) compatible. -Also make sure the test suite actually passes all tests. Translations are also welcome! - - -.. _Makefile: https://github.com/eduvpn/python-eduvpn-client/blob/master/Makefile diff --git a/doc/knownissues.rst b/doc/knownissues.rst deleted file mode 100644 index 1312ca58..00000000 --- a/doc/knownissues.rst +++ /dev/null @@ -1,60 +0,0 @@ -============ -Known issues -============ - -This chapter contains some known issues for the Linux client that are not possible or hacky to fix in the client itself - -OpenVPN <= 2.5.7 and OpenSSL 3 -============================== - -When your distribution uses OpenSSL 3 and an OpenVPN version before 2.5.8, you might get the following error in the NetworkManager logging after connecting to a server that uses OpenVPN: - -.. code-block:: console - - $ Cipher BF-CBC not supported - -This means that OpenVPN is trying to initialize this legacy/deprecated cipher, even though it is not used in the config. The fix is in OpenVPN version starting at 2.5.8. - -Could not find source connection/NetworkManager not managing connections -======================================================================== - -It could be the case where the client does not work due to the fact that NetworkManager does not manage your connections. - -You could see errors such as: - -.. code-block:: console - - $ nm-manager-error-quark: Could not find source connection. - -To fix this, make sure that NetworkManager is managing your primary interface. -For e.g. Debian systems you can follow the instructions on `The Debian Wiki `_ and then reboot. Pull requests are welcome to make the client work without NetworkManager. - -Version GLIBC_2.32 not found -============================ - -If you install the client using instructions for a different distribution, you can have these GLIBC errors showing when the client is trying to load eduvpn-common. To fix this make sure to uninstall *all* the packages you currently have installed (Pip, DEB/RPM) and then follow the instructions for your appropriate distribution. See `Installation <./installation.html>`_. - -If you have followed the right instructions and are still getting these errors you can make an issue. - - -GUI does not launch due to getting attribute errors -=================================================== - -If your GUI does not launch and you get errors such as: - -.. code-block:: console - - $ File "/usr/lib/python3/dist-packages/eduvpn/ui/ui.py", line 165, in setup - $ self.common_version.set_text(f"{commonver}") - $ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - $ AttributeError: 'NoneType' object has no attribute 'set_text' - -It can mean that you have installed multiple versions of the client. If you're trying to use the DEB/RPM version see if: - -.. code-block:: console - - $ pip uninstall eduvpn-client[gui] - -Does anything. - -Otherwise, if there are files in `~/.local/share/eduvpn` try to move them to e.g. `~/.local/share/eduvpn2`. If the client then still doesn't launch you can make an issue. diff --git a/doc/md/img/configured.png b/doc/md/img/configured.png new file mode 100644 index 0000000000000000000000000000000000000000..241eca2194229ce89086855f81e826fde5b9875a GIT binary patch literal 23491 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