Merge branch 'release-v0.7.13'
37
CHANGELOG.md
@ -1,5 +1,42 @@
|
||||
# Change log
|
||||
|
||||
## Version 0.7.13 (2023/03/05)
|
||||
|
||||
This version allows to display the instance privacy policy. A user must agree to the privacy policy to register.
|
||||
A default policy is available and a custom policy can be defined in the administration.
|
||||
**Note:** After **FitTrackee** upgrade, a message will be displayed to all users in order to review the policy.
|
||||
|
||||
A user can now request a data export (containing user info, workout data and uploaded gpx files).
|
||||
|
||||
Lastly, additional information that may be useful to users can be displayed in **About** page.
|
||||
|
||||
|
||||
### Features and enhancements
|
||||
|
||||
* [#301](https://github.com/SamR1/FitTrackee/issues/301) - add privacy policy
|
||||
* [#304](https://github.com/SamR1/FitTrackee/issues/304) - add user data export
|
||||
* [#305](https://github.com/SamR1/FitTrackee/issues/305) - add additional information in About page
|
||||
|
||||
### Bugs Fixed
|
||||
|
||||
* [PR#307](https://github.com/SamR1/FitTrackee/pull/307) - Minor fixes
|
||||
* update workout and map files name
|
||||
* fix error message when api is not running
|
||||
* fix modal position
|
||||
|
||||
### Translations
|
||||
|
||||
* [PR#297](https://github.com/SamR1/FitTrackee/pull/297) - Translations update from Hosted Weblate (Dutch)
|
||||
* [PR#308](https://github.com/SamR1/FitTrackee/pull/308) - Translations update from Hosted Weblate (Dutch)
|
||||
* [PR#310](https://github.com/SamR1/FitTrackee/pull/310) - Translations update from Hosted Weblate (Dutch and German)
|
||||
|
||||
Thanks to the contributors:
|
||||
- @bjornclauw
|
||||
- @qwerty287
|
||||
|
||||
**Note:** This release contains database migration (see upgrade instructions in [documentation](https://samr1.github.io/FitTrackee/installation.html#upgrade))
|
||||
|
||||
|
||||
## Version 0.7.12 (2023/02/16)
|
||||
|
||||
### Translations
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Sphinx build info version 1
|
||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: ac8aa6be93dbbca43a66932db34df2ce
|
||||
config: 27f4394ace216ce3fd5ef2a67c1bf1ef
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||
|
Before Width: | Height: | Size: 566 KiB After Width: | Height: | Size: 568 KiB |
Before Width: | Height: | Size: 386 KiB After Width: | Height: | Size: 387 KiB |
Before Width: | Height: | Size: 216 KiB After Width: | Height: | Size: 218 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 122 KiB |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
@ -1,5 +1,5 @@
|
||||
Authentication
|
||||
##############
|
||||
Authentication and account
|
||||
##########################
|
||||
|
||||
.. autoflask:: fittrackee:create_app()
|
||||
:endpoints:
|
||||
@ -18,4 +18,8 @@ Authentication
|
||||
auth.update_user_account,
|
||||
auth.update_password,
|
||||
auth.update_email,
|
||||
auth.logout_user
|
||||
auth.logout_user,
|
||||
auth.accept_privacy_policy,
|
||||
auth.get_user_data_export,
|
||||
auth.request_user_data_export,
|
||||
auth.download_data_export
|
@ -1,5 +1,42 @@
|
||||
# Change log
|
||||
|
||||
## Version 0.7.13 (2023/03/05)
|
||||
|
||||
This version allows to display the instance privacy policy. A user must agree to the privacy policy to register.
|
||||
A default policy is available and a custom policy can be defined in the administration.
|
||||
**Note:** After **FitTrackee** upgrade, a message will be displayed to all users in order to review the policy.
|
||||
|
||||
A user can now request a data export (containing user info, workout data and uploaded gpx files).
|
||||
|
||||
Lastly, additional information that may be useful to users can be displayed in **About** page.
|
||||
|
||||
|
||||
### Features and enhancements
|
||||
|
||||
* [#301](https://github.com/SamR1/FitTrackee/issues/301) - add privacy policy
|
||||
* [#304](https://github.com/SamR1/FitTrackee/issues/304) - add user data export
|
||||
* [#305](https://github.com/SamR1/FitTrackee/issues/305) - add additional information in About page
|
||||
|
||||
### Bugs Fixed
|
||||
|
||||
* [PR#307](https://github.com/SamR1/FitTrackee/pull/307) - Minor fixes
|
||||
* update workout and map files name
|
||||
* fix error message when api is not running
|
||||
* fix modal position
|
||||
|
||||
### Translations
|
||||
|
||||
* [PR#297](https://github.com/SamR1/FitTrackee/pull/297) - Translations update from Hosted Weblate (Dutch)
|
||||
* [PR#308](https://github.com/SamR1/FitTrackee/pull/308) - Translations update from Hosted Weblate (Dutch)
|
||||
* [PR#310](https://github.com/SamR1/FitTrackee/pull/310) - Translations update from Hosted Weblate (Dutch and German)
|
||||
|
||||
Thanks to the contributors:
|
||||
- @bjornclauw
|
||||
- @qwerty287
|
||||
|
||||
**Note:** This release contains database migration (see upgrade instructions in [documentation](https://samr1.github.io/FitTrackee/installation.html#upgrade))
|
||||
|
||||
|
||||
## Version 0.7.12 (2023/02/16)
|
||||
|
||||
### Translations
|
||||
|
@ -28,13 +28,6 @@ A command line interface (CLI) is available to manage database, OAuth2 tokens an
|
||||
Database
|
||||
~~~~~~~~
|
||||
|
||||
``ftcli db upgrade``
|
||||
""""""""""""""""""""
|
||||
.. versionadded:: 0.6.5
|
||||
|
||||
Apply migrations.
|
||||
|
||||
|
||||
``ftcli db drop``
|
||||
"""""""""""""""""
|
||||
.. versionadded:: 0.6.5
|
||||
@ -42,6 +35,13 @@ Apply migrations.
|
||||
Empty database and delete uploaded files, only on development environments.
|
||||
|
||||
|
||||
``ftcli db upgrade``
|
||||
""""""""""""""""""""
|
||||
.. versionadded:: 0.6.5
|
||||
|
||||
Apply migrations.
|
||||
|
||||
|
||||
OAuth2
|
||||
~~~~~~
|
||||
|
||||
@ -66,6 +66,23 @@ Remove tokens expired for more than provided number of days
|
||||
Users
|
||||
~~~~~
|
||||
|
||||
``ftcli users clean_archives``
|
||||
""""""""""""""""""""""""""""""
|
||||
.. versionadded:: 0.7.13
|
||||
|
||||
Delete export requests and related archives created more than provided number of days.
|
||||
|
||||
.. cssclass:: table-bordered
|
||||
.. list-table::
|
||||
:widths: 25 50
|
||||
:header-rows: 1
|
||||
|
||||
* - Options
|
||||
- Description
|
||||
* - ``--days``
|
||||
- Number of days.
|
||||
|
||||
|
||||
``ftcli users clean_tokens``
|
||||
""""""""""""""""""""""""""""
|
||||
.. versionadded:: 0.7.0
|
||||
@ -83,6 +100,24 @@ Remove blacklisted tokens expired for more than provided number of days.
|
||||
- Number of days.
|
||||
|
||||
|
||||
``ftcli users export_archives``
|
||||
"""""""""""""""""""""""""""""""
|
||||
.. versionadded:: 0.7.13
|
||||
|
||||
Process incomplete user export requests.
|
||||
Can be used if redis is not set (no dramatiq workers running).
|
||||
|
||||
.. cssclass:: table-bordered
|
||||
.. list-table::
|
||||
:widths: 25 50
|
||||
:header-rows: 1
|
||||
|
||||
* - Options
|
||||
- Description
|
||||
* - ``--max``
|
||||
- Maximum number of export requests to process.
|
||||
|
||||
|
||||
``ftcli users update``
|
||||
""""""""""""""""""""""
|
||||
.. versionadded:: 0.6.5
|
||||
|
@ -74,9 +74,10 @@ Workouts
|
||||
Account & preferences
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
- A user can create, update and deleted his account.
|
||||
- The user must agree to the privacy policy to register. If a more recent policy is available, a message is displayed on the dashboard to review the new version (*new in 0.7.13*).
|
||||
- On registration, the user account is created with selected language in dropdown as user preference (*new in 0.6.9*).
|
||||
- After registration, the user account is inactive and an email with confirmation instructions is sent to activate it.
|
||||
A user with an inactive account cannot log in. (*new in 0.6.0*)
|
||||
A user with an inactive account cannot log in. (*new in 0.6.0*).
|
||||
|
||||
.. note::
|
||||
In case email sending is not configured, a `command line <cli.html#ftcli-users-update>`__ allows to activate users account.
|
||||
@ -98,42 +99,70 @@ Account & preferences
|
||||
| A workout with a disabled sport will still be displayed in the application.
|
||||
|
||||
- A user can create `clients <apps.html>`__ for third-party applications (*new in 0.7.0*).
|
||||
- | A user can request a data export (*new in 0.7.13*).
|
||||
| It generates a zip archive containing 2 ``json`` files (user info and workouts data) and all uploaded gpx files.
|
||||
|
||||
.. note::
|
||||
For now, it's not possible to import these files into another **FitTrackee** instance.
|
||||
|
||||
|
||||
Administration
|
||||
^^^^^^^^^^^^^^
|
||||
(*new in 0.3.0*)
|
||||
|
||||
- **Application**
|
||||
Application
|
||||
"""""""""""
|
||||
|
||||
The following parameters can be set:
|
||||
**Configuration**
|
||||
|
||||
- active users limit. If 0, registration is enabled (no limit defined)
|
||||
- maximum size of gpx file (individually uploaded or in a zip archive) (*changed in 0.7.4*)
|
||||
- maximum size of zip archive
|
||||
- maximum number of files in the zip archive (*changed in 0.7.4*)
|
||||
- administrator email for contact (*new in 0.6.0*)
|
||||
The following parameters can be set:
|
||||
|
||||
.. warning::
|
||||
Updating server configuration may be necessary to handle large files (like `nginx <https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size>`_ for instance).
|
||||
- active users limit. If 0, registration is enabled (no limit defined).
|
||||
- maximum size of gpx file (individually uploaded or in a zip archive) (*changed in 0.7.4*)
|
||||
- maximum size of zip archive
|
||||
- maximum number of files in the zip archive (*changed in 0.7.4*)
|
||||
- administrator email for contact (*new in 0.6.0*)
|
||||
|
||||
.. note::
|
||||
If email sending is disabled, a warning is displayed.
|
||||
.. warning::
|
||||
Updating server configuration may be necessary to handle large files (like `nginx <https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size>`_ for instance).
|
||||
|
||||
.. note::
|
||||
If email sending is disabled, a warning is displayed.
|
||||
|
||||
**About**
|
||||
|
||||
(*new in 0.7.13*)
|
||||
|
||||
| It is possible displayed additional information that may be useful to users in **About** page.
|
||||
| Markdown syntax can be used.
|
||||
|
||||
|
||||
- **Users**
|
||||
**Privacy policy**
|
||||
|
||||
- display and filter users list
|
||||
- edit a user to:
|
||||
- add/remove administration rights
|
||||
- activate his account (*new in 0.6.0*)
|
||||
- update his email (in case his account is locked) (*new in 0.6.0*)
|
||||
- reset his password (in case his account is locked) (*new in 0.6.0*). If email sending is disabled, it is only possible via CLI.
|
||||
- delete a user
|
||||
(*new in 0.7.13*)
|
||||
|
||||
- **Sports**
|
||||
| A default privacy policy is available (originally adapted from the `Discourse <https://github.com/discourse/discourse>`__ privacy policy).
|
||||
| A custom privacy policy can set if needed (Markdown syntax can be used). A policy update will display a message on users dashboard to review it.
|
||||
|
||||
- enable or disable a sport (a sport can be disabled even if workout with this sport exists)
|
||||
.. note::
|
||||
Only the default privacy policy is translated (if the translation is available).
|
||||
|
||||
Users
|
||||
"""""
|
||||
|
||||
- display and filter users list
|
||||
- edit a user to:
|
||||
|
||||
- add/remove administration rights
|
||||
- activate his account (*new in 0.6.0*)
|
||||
- update his email (in case his account is locked) (*new in 0.6.0*)
|
||||
- reset his password (in case his account is locked) (*new in 0.6.0*). If email sending is disabled, it is only possible via CLI.
|
||||
- delete a user
|
||||
|
||||
|
||||
Sports
|
||||
""""""
|
||||
- enable or disable a sport (a sport can be disabled even if workout with this sport exists)
|
||||
|
||||
|
||||
Translations
|
||||
|
@ -26,13 +26,16 @@ Prerequisites
|
||||
- Python 3.7+
|
||||
- PostgreSQL 11+
|
||||
- optional
|
||||
- Redis for task queue (if email sending is enabled) and API rate limits
|
||||
- Redis for task queue (if email sending is enabled and for data export requests) and API rate limits
|
||||
- SMTP provider (if email sending is enabled)
|
||||
- API key from a `weather data provider <installation.html#weather-data>`__
|
||||
- `Poetry <https://poetry.eustace.io>`__ (for installation from sources only)
|
||||
- `Yarn <https://yarnpkg.com>`__ (for development only)
|
||||
- Docker and Docker Compose (for development or evaluation purposes)
|
||||
|
||||
.. note::
|
||||
| If registration is enabled, it is recommended to set Redis and a SMTP provider for email sending and data export requests.
|
||||
|
||||
.. note::
|
||||
| The following steps describe an installation on Linux systems (tested
|
||||
on Debian and Arch).
|
||||
@ -273,11 +276,13 @@ Emails sent by FitTrackee are:
|
||||
- password reset request
|
||||
- email change (to old and new email adresses)
|
||||
- password change
|
||||
- notification when a data export archive is ready to download (*new in 0.7.13*)
|
||||
|
||||
.. versionchanged:: 0.6.5
|
||||
|
||||
| For single-user instance, it is possible to disable email sending with an empty ``EMAIL_URL`` (in this case, no need to start dramatiq workers).
|
||||
| A `CLI <cli.html#ftcli-users-update>`__ is available to activate account and modify email and password.
|
||||
For single-user instance, it is possible to disable email sending with an empty ``EMAIL_URL`` (in this case, no need to start dramatiq workers).
|
||||
|
||||
A `CLI <cli.html#ftcli-users-update>`__ is available to activate account, modify email and password and handle data export requests.
|
||||
|
||||
|
||||
Map tile server
|
||||
@ -293,7 +298,7 @@ To keep using **ThunderForest Outdoors**, the configuration is:
|
||||
- ``MAP_ATTRIBUTION=© <a href="http://www.thunderforest.com/">Thunderforest</a>, © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors``
|
||||
|
||||
.. note::
|
||||
| Check the terms of service of tile provider for map attribution
|
||||
| Check the terms of service of tile provider for map attribution.
|
||||
|
||||
|
||||
.. versionchanged:: 0.6.10
|
||||
@ -502,13 +507,13 @@ Production environment
|
||||
.. warning::
|
||||
| Note that FitTrackee is under heavy development, some features may be unstable.
|
||||
|
||||
- Download the last release (for now, it is the release v0.7.12):
|
||||
- Download the last release (for now, it is the release v0.7.13):
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ wget https://github.com/SamR1/FitTrackee/archive/v0.7.12.tar.gz
|
||||
$ tar -xzf v0.7.12.tar.gz
|
||||
$ mv FitTrackee-0.7.12 FitTrackee
|
||||
$ wget https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
|
||||
$ tar -xzf v0.7.13.tar.gz
|
||||
$ mv FitTrackee-0.7.13 FitTrackee
|
||||
$ cd FitTrackee
|
||||
|
||||
- Create **.env** from example and update it
|
||||
@ -628,13 +633,13 @@ Prod environment
|
||||
|
||||
- Change to the directory where FitTrackee directory is located
|
||||
|
||||
- Download the last release (for now, it is the release v0.7.12) and overwrite existing files:
|
||||
- Download the last release (for now, it is the release v0.7.13) and overwrite existing files:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ wget https://github.com/SamR1/FitTrackee/archive/v0.7.12.tar.gz
|
||||
$ tar -xzf v0.7.12.tar.gz
|
||||
$ cp -R FitTrackee-0.7.12/* FitTrackee/
|
||||
$ wget https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
|
||||
$ tar -xzf v0.7.13.tar.gz
|
||||
$ cp -R FitTrackee-0.7.13/* FitTrackee/
|
||||
$ cd FitTrackee
|
||||
|
||||
- Update **.env** if needed (see `Environment variables <installation.html#environment-variables>`__).
|
||||
|
2
docs/_static/documentation_options.js
vendored
@ -1,6 +1,6 @@
|
||||
var DOCUMENTATION_OPTIONS = {
|
||||
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
|
||||
VERSION: '0.7.12',
|
||||
VERSION: '0.7.13',
|
||||
LANGUAGE: 'en',
|
||||
COLLAPSE_INDEX: false,
|
||||
BUILDER: 'html',
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Authentication — FitTrackee 0.7.12
|
||||
<title>Authentication and account — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -82,7 +82,7 @@
|
||||
<ul class="dropdown-menu localtoc"
|
||||
role="menu"
|
||||
aria-labelledby="dLabelLocalToc"><ul>
|
||||
<li><a class="reference internal" href="#">Authentication</a></li>
|
||||
<li><a class="reference internal" href="#">Authentication and account</a></li>
|
||||
</ul>
|
||||
</ul>
|
||||
</li>
|
||||
@ -130,8 +130,8 @@
|
||||
<div class="row">
|
||||
<div class="body col-md-12 content" role="main">
|
||||
|
||||
<section id="authentication">
|
||||
<h1>Authentication<a class="headerlink" href="#authentication" title="Permalink to this heading">¶</a></h1>
|
||||
<section id="authentication-and-account">
|
||||
<h1>Authentication and account<a class="headerlink" href="#authentication-and-account" title="Permalink to this heading">¶</a></h1>
|
||||
<dl class="http post">
|
||||
<dt class="sig sig-object http" id="post--api-auth-register">
|
||||
<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/register</span></span><a class="headerlink" href="#post--api-auth-register" title="Permalink to this definition">¶</a></dt>
|
||||
@ -175,6 +175,7 @@ to activate it.</p>
|
||||
<li><p><strong>password</strong> (<em>string</em>) – password (8 characters required)</p></li>
|
||||
<li><p><strong>lang</strong> (<em>string</em>) – user language preferences (if not provided or invalid,
|
||||
fallback to ‘en’ (english))</p></li>
|
||||
<li><p><strong>accepted_policy</strong> (<em>boolean</em>) – true if user accepted privacy policy</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Status Codes<span class="colon">:</span></dt>
|
||||
@ -347,6 +348,7 @@ character “_” allowed</p></li>
|
||||
|
||||
<span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"accepted_privacy_policy"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sat, 25 Fev 2023 13:52:58 GMT"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"admin"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"bio"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"birth_date"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
@ -689,6 +691,7 @@ character “_” allowed</p></li>
|
||||
<li><p><strong>language</strong> (<em>string</em>) – language preferences</p></li>
|
||||
<li><p><strong>timezone</strong> (<em>string</em>) – user time zone</p></li>
|
||||
<li><p><strong>weekm</strong> (<em>boolean</em>) – does week start on Monday?</p></li>
|
||||
<li><p><strong>weekm</strong> – does week start on Monday?</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Request Headers<span class="colon">:</span></dt>
|
||||
@ -1224,6 +1227,209 @@ for other reasons.</p></li>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http post">
|
||||
<dt class="sig sig-object http" id="post--api-auth-account-privacy-policy">
|
||||
<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/account/privacy-policy</span></span><a class="headerlink" href="#post--api-auth-account-privacy-policy" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The authenticated user accepts the privacy policy.</p>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">POST</span> <span class="nn">/auth/account/privacy-policy</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example response</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">200</span> <span class="ne">OK</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
|
||||
<span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Request JSON Object<span class="colon">:</span></dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>accepted_policy</strong> (<em>boolean</em>) – true if user accepted privacy policy</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Request Headers<span class="colon">:</span></dt>
|
||||
<dd class="field-even"><ul class="simple">
|
||||
<li><p><span><a class="reference external" href="https://www.rfc-editor.org/rfc/rfc7235#section-4.2">Authorization</a></span> – OAuth 2.0 Bearer Token</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-odd">Status Codes<span class="colon">:</span></dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1">200 OK</a></span> – success</p></li>
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1">400 Bad Request</a></span> – <ul>
|
||||
<li><p>invalid payload</p></li>
|
||||
</ul>
|
||||
</p></li>
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2">401 Unauthorized</a></span> – <ul>
|
||||
<li><p>provide a valid auth token</p></li>
|
||||
<li><p>signature expired, please log in again</p></li>
|
||||
<li><p>invalid token, please log in again</p></li>
|
||||
</ul>
|
||||
</p></li>
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1">500 Internal Server Error</a></span> – internal server error</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http get">
|
||||
<dt class="sig sig-object http" id="get--api-auth-account-export">
|
||||
<span class="sig-name descname"><span class="pre">GET</span> </span><span class="sig-name descname"><span class="pre">/api/auth/account/export</span></span><a class="headerlink" href="#get--api-auth-account-export" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get a data export info for authenticated user if a request exists.</p>
|
||||
<p>It returns:</p>
|
||||
<ul class="simple">
|
||||
<li><p>export creation date</p></li>
|
||||
<li><p>export status (<code class="docutils literal notranslate"><span class="pre">in_progress</span></code>, <code class="docutils literal notranslate"><span class="pre">successful</span></code> and <code class="docutils literal notranslate"><span class="pre">errored</span></code>)</p></li>
|
||||
<li><p>file name and size (in bytes) when export is successful</p></li>
|
||||
</ul>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/auth/account/export</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example response</strong>:</p>
|
||||
<ul class="simple">
|
||||
<li><p>if a request exists</p></li>
|
||||
</ul>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">200</span> <span class="ne">OK</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
|
||||
<span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"request"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Wed, 01 Mar 2023 12:31:17 GMT"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"successful"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"file_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"archive_rgjsR3fHt295ywNQr5Yp.zip"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"file_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">924</span>
|
||||
<span class="w"> </span><span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<ul class="simple">
|
||||
<li><p>if no request</p></li>
|
||||
</ul>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">200</span> <span class="ne">OK</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
|
||||
<span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"request"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Request Headers<span class="colon">:</span></dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><span><a class="reference external" href="https://www.rfc-editor.org/rfc/rfc7235#section-4.2">Authorization</a></span> – OAuth 2.0 Bearer Token</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Status Codes<span class="colon">:</span></dt>
|
||||
<dd class="field-even"><ul class="simple">
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1">200 OK</a></span> – success</p></li>
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2">401 Unauthorized</a></span> – <ul>
|
||||
<li><p>provide a valid auth token</p></li>
|
||||
<li><p>signature expired, please log in again</p></li>
|
||||
<li><p>invalid token, please log in again</p></li>
|
||||
</ul>
|
||||
</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http post">
|
||||
<dt class="sig sig-object http" id="post--api-auth-account-export-request">
|
||||
<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/account/export/request</span></span><a class="headerlink" href="#post--api-auth-account-export-request" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Request a data export for authenticated user.</p>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">POST</span> <span class="nn">/auth/account/export/request</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example response</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">200</span> <span class="ne">OK</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
|
||||
<span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"request"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Wed, 01 Mar 2023 12:31:17 GMT"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"in_progress"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"file_name"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"file_size"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span>
|
||||
<span class="w"> </span><span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Request Headers<span class="colon">:</span></dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><span><a class="reference external" href="https://www.rfc-editor.org/rfc/rfc7235#section-4.2">Authorization</a></span> – OAuth 2.0 Bearer Token</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Status Codes<span class="colon">:</span></dt>
|
||||
<dd class="field-even"><ul class="simple">
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1">200 OK</a></span> – success</p></li>
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.1">400 Bad Request</a></span> – <ul>
|
||||
<li><p>ongoing request exists</p></li>
|
||||
<li><p>completed request already exists</p></li>
|
||||
</ul>
|
||||
</p></li>
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2">401 Unauthorized</a></span> – <ul>
|
||||
<li><p>provide a valid auth token</p></li>
|
||||
<li><p>signature expired, please log in again</p></li>
|
||||
<li><p>invalid token, please log in again</p></li>
|
||||
</ul>
|
||||
</p></li>
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.1">500 Internal Server Error</a></span> – internal server error</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="http get">
|
||||
<dt class="sig sig-object http" id="get--api-auth-account-export-(string-file_name)">
|
||||
<span class="sig-name descname"><span class="pre">GET</span> </span><span class="sig-name descname"><span class="pre">/api/auth/account/export/</span></span><span class="sig-paren">(</span><em class="property"><span class="pre">string:</span> </em><em class="sig-param"><span class="pre">file_name</span></em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-auth-account-export-(string-file_name)" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Download a data export archive</p>
|
||||
<p><strong>Example request</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/auth/account/export/download/archive_rgjsR3fHr5Yp.zip</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p><strong>Example response</strong>:</p>
|
||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">200</span> <span class="ne">OK</span>
|
||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/x-gzip</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>file_name</strong> (<em>string</em>) – filename</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Request Headers<span class="colon">:</span></dt>
|
||||
<dd class="field-even"><ul class="simple">
|
||||
<li><p><span><a class="reference external" href="https://www.rfc-editor.org/rfc/rfc7235#section-4.2">Authorization</a></span> – OAuth 2.0 Bearer Token</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-odd">Status Codes<span class="colon">:</span></dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1">200 OK</a></span> – success</p></li>
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2">401 Unauthorized</a></span> – <ul>
|
||||
<li><p>provide a valid auth token</p></li>
|
||||
<li><p>signature expired, please log in again</p></li>
|
||||
<li><p>invalid token, please log in again</p></li>
|
||||
</ul>
|
||||
</p></li>
|
||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5">404 Not Found</a></span> – file not found</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
|
||||
|
||||
@ -1239,7 +1445,7 @@ for other reasons.</p></li>
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Configuration — FitTrackee 0.7.12
|
||||
<title>Configuration — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -20,7 +20,7 @@
|
||||
<link rel="index" title="Index" href="../genindex.html" />
|
||||
<link rel="search" title="Search" href="../search.html" />
|
||||
<link rel="next" title="OAuth2" href="oauth2.html" />
|
||||
<link rel="prev" title="Authentication" href="auth.html" />
|
||||
<link rel="prev" title="Authentication and account" href="auth.html" />
|
||||
<meta charset='utf-8'>
|
||||
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
|
||||
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'>
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -92,7 +92,7 @@
|
||||
|
||||
|
||||
<li>
|
||||
<a href="auth.html" title="Previous Chapter: Authentication"><span class="glyphicon glyphicon-chevron-left visible-sm"></span><span class="hidden-sm hidden-tablet">« Authentication</span>
|
||||
<a href="auth.html" title="Previous Chapter: Authentication and account"><span class="glyphicon glyphicon-chevron-left visible-sm"></span><span class="hidden-sm hidden-tablet">« Authenticatio...</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
@ -147,6 +147,7 @@
|
||||
|
||||
<span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"about"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"admin_contact"</span><span class="p">:</span><span class="w"> </span><span class="s2">"admin@example.com"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"gpx_limit_import"</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"is_email_sending_enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
|
||||
@ -155,7 +156,9 @@
|
||||
<span class="w"> </span><span class="nt">"max_users"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"max_zip_file_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">10485760</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"map_attribution"</span><span class="p">:</span><span class="w"> </span><span class="s2">"&copy; <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.7.12"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"privacy_policy"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"privacy_policy_date"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.7.13"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"weather_provider"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span>
|
||||
<span class="w"> </span><span class="p">},</span>
|
||||
<span class="w"> </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span>
|
||||
@ -189,6 +192,7 @@
|
||||
|
||||
<span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span>
|
||||
<span class="w"> </span><span class="nt">"about"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"admin_contact"</span><span class="p">:</span><span class="w"> </span><span class="s2">"admin@example.com"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"gpx_limit_import"</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"is_email_sending_enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
|
||||
@ -197,7 +201,9 @@
|
||||
<span class="w"> </span><span class="nt">"max_users"</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"max_zip_file_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">10485760</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"map_attribution"</span><span class="p">:</span><span class="w"> </span><span class="s2">"&copy; <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.7.12"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"privacy_policy"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"privacy_policy_date"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.7.13"</span><span class="p">,</span>
|
||||
<span class="w"> </span><span class="nt">"weather_provider"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span>
|
||||
<span class="w"> </span><span class="p">},</span>
|
||||
<span class="w"> </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"success"</span>
|
||||
@ -207,12 +213,14 @@
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Request JSON Object<span class="colon">:</span></dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>about</strong> (<em>string</em>) – instance information</p></li>
|
||||
<li><p><strong>admin_contact</strong> (<em>string</em>) – email to contact the administrator</p></li>
|
||||
<li><p><strong>gpx_limit_import</strong> (<em>integer</em>) – max number of files in zip archive</p></li>
|
||||
<li><p><strong>is_registration_enabled</strong> (<em>boolean</em>) – is registration enabled?</p></li>
|
||||
<li><p><strong>max_single_file_size</strong> (<em>integer</em>) – max size of a single file</p></li>
|
||||
<li><p><strong>max_users</strong> (<em>integer</em>) – max users allowed to register on instance</p></li>
|
||||
<li><p><strong>max_zip_file_size</strong> (<em>integer</em>) – max size of a zip archive</p></li>
|
||||
<li><p><strong>privacy_policy</strong> (<em>string</em>) – instance privacy policy</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Request Headers<span class="colon">:</span></dt>
|
||||
@ -281,7 +289,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>API documentation — FitTrackee 0.7.12
|
||||
<title>API documentation — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -19,7 +19,7 @@
|
||||
<script src="../_static/sphinx_highlight.js"></script>
|
||||
<link rel="index" title="Index" href="../genindex.html" />
|
||||
<link rel="search" title="Search" href="../search.html" />
|
||||
<link rel="next" title="Authentication" href="auth.html" />
|
||||
<link rel="next" title="Authentication and account" href="auth.html" />
|
||||
<link rel="prev" title="Command line interface" href="../cli.html" />
|
||||
<meta charset='utf-8'>
|
||||
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -96,7 +96,7 @@
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="auth.html" title="Next Chapter: Authentication"><span class="glyphicon glyphicon-chevron-right visible-sm"></span><span class="hidden-sm hidden-tablet">Authentication »</span>
|
||||
<a href="auth.html" title="Next Chapter: Authentication and account"><span class="glyphicon glyphicon-chevron-right visible-sm"></span><span class="hidden-sm hidden-tablet">Authenticatio... »</span>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
@ -135,7 +135,7 @@
|
||||
<div class="toctree-wrapper compound">
|
||||
<p class="caption" role="heading"><span class="caption-text">Endpoints:</span></p>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference internal" href="auth.html">Authentication</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="auth.html">Authentication and account</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="oauth2.html">OAuth2</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="records.html">Records</a></li>
|
||||
@ -160,7 +160,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>OAuth2 — FitTrackee 0.7.12
|
||||
<title>OAuth2 — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -694,7 +694,7 @@ are supported by FitTrackee)</p></li>
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Records — FitTrackee 0.7.12
|
||||
<title>Records — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -262,7 +262,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Sports — FitTrackee 0.7.12
|
||||
<title>Sports — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -492,7 +492,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Statistics — FitTrackee 0.7.12
|
||||
<title>Statistics — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -419,7 +419,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Users — FitTrackee 0.7.12
|
||||
<title>Users — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -663,7 +663,7 @@ one admin.</p>
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Workouts — FitTrackee 0.7.12
|
||||
<title>Workouts — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -1187,7 +1187,7 @@ must be provided with ascent)</p></li>
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Third-party applications — FitTrackee 0.7.12
|
||||
<title>Third-party applications — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -259,7 +259,7 @@ It is recommended to use PKCE to provide a better security.</p>
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Command line interface — FitTrackee 0.7.12
|
||||
<title>Command line interface — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -84,8 +84,8 @@
|
||||
aria-labelledby="dLabelLocalToc"><ul>
|
||||
<li><a class="reference internal" href="#">Command line interface</a><ul>
|
||||
<li><a class="reference internal" href="#database">Database</a><ul>
|
||||
<li><a class="reference internal" href="#ftcli-db-upgrade"><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">db</span> <span class="pre">upgrade</span></code></a></li>
|
||||
<li><a class="reference internal" href="#ftcli-db-drop"><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">db</span> <span class="pre">drop</span></code></a></li>
|
||||
<li><a class="reference internal" href="#ftcli-db-upgrade"><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">db</span> <span class="pre">upgrade</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#oauth2">OAuth2</a><ul>
|
||||
@ -93,7 +93,9 @@
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#users">Users</a><ul>
|
||||
<li><a class="reference internal" href="#ftcli-users-clean-archives"><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">users</span> <span class="pre">clean_archives</span></code></a></li>
|
||||
<li><a class="reference internal" href="#ftcli-users-clean-tokens"><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">users</span> <span class="pre">clean_tokens</span></code></a></li>
|
||||
<li><a class="reference internal" href="#ftcli-users-export-archives"><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">users</span> <span class="pre">export_archives</span></code></a></li>
|
||||
<li><a class="reference internal" href="#ftcli-users-update"><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">users</span> <span class="pre">update</span></code></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
@ -174,13 +176,6 @@ Commands:
|
||||
</div>
|
||||
<section id="database">
|
||||
<h2>Database<a class="headerlink" href="#database" title="Permalink to this heading">¶</a></h2>
|
||||
<section id="ftcli-db-upgrade">
|
||||
<h3><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">db</span> <span class="pre">upgrade</span></code><a class="headerlink" href="#ftcli-db-upgrade" title="Permalink to this heading">¶</a></h3>
|
||||
<div class="versionadded">
|
||||
<p><span class="versionmodified added">New in version 0.6.5.</span></p>
|
||||
</div>
|
||||
<p>Apply migrations.</p>
|
||||
</section>
|
||||
<section id="ftcli-db-drop">
|
||||
<h3><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">db</span> <span class="pre">drop</span></code><a class="headerlink" href="#ftcli-db-drop" title="Permalink to this heading">¶</a></h3>
|
||||
<div class="versionadded">
|
||||
@ -188,6 +183,13 @@ Commands:
|
||||
</div>
|
||||
<p>Empty database and delete uploaded files, only on development environments.</p>
|
||||
</section>
|
||||
<section id="ftcli-db-upgrade">
|
||||
<h3><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">db</span> <span class="pre">upgrade</span></code><a class="headerlink" href="#ftcli-db-upgrade" title="Permalink to this heading">¶</a></h3>
|
||||
<div class="versionadded">
|
||||
<p><span class="versionmodified added">New in version 0.6.5.</span></p>
|
||||
</div>
|
||||
<p>Apply migrations.</p>
|
||||
</section>
|
||||
</section>
|
||||
<section id="oauth2">
|
||||
<h2>OAuth2<a class="headerlink" href="#oauth2" title="Permalink to this heading">¶</a></h2>
|
||||
@ -217,6 +219,29 @@ Commands:
|
||||
</section>
|
||||
<section id="users">
|
||||
<h2>Users<a class="headerlink" href="#users" title="Permalink to this heading">¶</a></h2>
|
||||
<section id="ftcli-users-clean-archives">
|
||||
<h3><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">users</span> <span class="pre">clean_archives</span></code><a class="headerlink" href="#ftcli-users-clean-archives" title="Permalink to this heading">¶</a></h3>
|
||||
<div class="versionadded">
|
||||
<p><span class="versionmodified added">New in version 0.7.13.</span></p>
|
||||
</div>
|
||||
<p>Delete export requests and related archives created more than provided number of days.</p>
|
||||
<table class="table-bordered docutils align-default">
|
||||
<colgroup>
|
||||
<col style="width: 33.3%" />
|
||||
<col style="width: 66.7%" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="row-odd"><th class="head"><p>Options</p></th>
|
||||
<th class="head"><p>Description</p></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--days</span></code></p></td>
|
||||
<td><p>Number of days.</p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<section id="ftcli-users-clean-tokens">
|
||||
<h3><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">users</span> <span class="pre">clean_tokens</span></code><a class="headerlink" href="#ftcli-users-clean-tokens" title="Permalink to this heading">¶</a></h3>
|
||||
<div class="versionadded">
|
||||
@ -240,6 +265,30 @@ Commands:
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<section id="ftcli-users-export-archives">
|
||||
<h3><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">users</span> <span class="pre">export_archives</span></code><a class="headerlink" href="#ftcli-users-export-archives" title="Permalink to this heading">¶</a></h3>
|
||||
<div class="versionadded">
|
||||
<p><span class="versionmodified added">New in version 0.7.13.</span></p>
|
||||
</div>
|
||||
<p>Process incomplete user export requests.
|
||||
Can be used if redis is not set (no dramatiq workers running).</p>
|
||||
<table class="table-bordered docutils align-default">
|
||||
<colgroup>
|
||||
<col style="width: 33.3%" />
|
||||
<col style="width: 66.7%" />
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr class="row-odd"><th class="head"><p>Options</p></th>
|
||||
<th class="head"><p>Description</p></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">--max</span></code></p></td>
|
||||
<td><p>Maximum number of export requests to process.</p></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<section id="ftcli-users-update">
|
||||
<h3><code class="docutils literal notranslate"><span class="pre">ftcli</span> <span class="pre">users</span> <span class="pre">update</span></code><a class="headerlink" href="#ftcli-users-update" title="Permalink to this heading">¶</a></h3>
|
||||
<div class="versionadded">
|
||||
@ -288,7 +337,7 @@ Commands:
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Features — FitTrackee 0.7.12
|
||||
<title>Features — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -85,7 +85,12 @@
|
||||
<li><a class="reference internal" href="#">Features</a><ul>
|
||||
<li><a class="reference internal" href="#workouts">Workouts</a></li>
|
||||
<li><a class="reference internal" href="#account-preferences">Account & preferences</a></li>
|
||||
<li><a class="reference internal" href="#administration">Administration</a></li>
|
||||
<li><a class="reference internal" href="#administration">Administration</a><ul>
|
||||
<li><a class="reference internal" href="#application">Application</a></li>
|
||||
<li><a class="reference internal" href="#users">Users</a></li>
|
||||
<li><a class="reference internal" href="#sports">Sports</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#translations">Translations</a></li>
|
||||
<li><a class="reference internal" href="#screenshots">Screenshots</a><ul>
|
||||
<li><a class="reference internal" href="#dashboard">Dashboard</a></li>
|
||||
@ -253,9 +258,10 @@
|
||||
<h2>Account & preferences<a class="headerlink" href="#account-preferences" title="Permalink to this heading">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><p>A user can create, update and deleted his account.</p></li>
|
||||
<li><p>The user must agree to the privacy policy to register. If a more recent policy is available, a message is displayed on the dashboard to review the new version (<em>new in 0.7.13</em>).</p></li>
|
||||
<li><p>On registration, the user account is created with selected language in dropdown as user preference (<em>new in 0.6.9</em>).</p></li>
|
||||
<li><p>After registration, the user account is inactive and an email with confirmation instructions is sent to activate it.
|
||||
A user with an inactive account cannot log in. (<em>new in 0.6.0</em>)</p></li>
|
||||
A user with an inactive account cannot log in. (<em>new in 0.6.0</em>).</p></li>
|
||||
</ul>
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
@ -286,18 +292,28 @@ A user with an inactive account cannot log in. (<em>new in 0.6.0</em>)</p></li>
|
||||
<div class="line">A workout with a disabled sport will still be displayed in the application.</div>
|
||||
</div>
|
||||
</div>
|
||||
<ul class="simple">
|
||||
<ul>
|
||||
<li><p>A user can create <a class="reference external" href="apps.html">clients</a> for third-party applications (<em>new in 0.7.0</em>).</p></li>
|
||||
<li><div class="line-block">
|
||||
<div class="line">A user can request a data export (<em>new in 0.7.13</em>).</div>
|
||||
<div class="line">It generates a zip archive containing 2 <code class="docutils literal notranslate"><span class="pre">json</span></code> files (user info and workouts data) and all uploaded gpx files.</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<p>For now, it’s not possible to import these files into another <strong>FitTrackee</strong> instance.</p>
|
||||
</div>
|
||||
</section>
|
||||
<section id="administration">
|
||||
<h2>Administration<a class="headerlink" href="#administration" title="Permalink to this heading">¶</a></h2>
|
||||
<p>(<em>new in 0.3.0</em>)</p>
|
||||
<ul>
|
||||
<li><p><strong>Application</strong></p>
|
||||
<section id="application">
|
||||
<h3>Application<a class="headerlink" href="#application" title="Permalink to this heading">¶</a></h3>
|
||||
<p><strong>Configuration</strong></p>
|
||||
<p>The following parameters can be set:</p>
|
||||
<ul class="simple">
|
||||
<li><p>active users limit. If 0, registration is enabled (no limit defined)</p></li>
|
||||
<li><p>active users limit. If 0, registration is enabled (no limit defined).</p></li>
|
||||
<li><p>maximum size of gpx file (individually uploaded or in a zip archive) (<em>changed in 0.7.4</em>)</p></li>
|
||||
<li><p>maximum size of zip archive</p></li>
|
||||
<li><p>maximum number of files in the zip archive (<em>changed in 0.7.4</em>)</p></li>
|
||||
@ -311,29 +327,44 @@ A user with an inactive account cannot log in. (<em>new in 0.6.0</em>)</p></li>
|
||||
<p class="admonition-title">Note</p>
|
||||
<p>If email sending is disabled, a warning is displayed.</p>
|
||||
</div>
|
||||
</li>
|
||||
<li><p><strong>Users</strong></p>
|
||||
<p><strong>About</strong></p>
|
||||
<p>(<em>new in 0.7.13</em>)</p>
|
||||
<div class="line-block">
|
||||
<div class="line">It is possible displayed additional information that may be useful to users in <strong>About</strong> page.</div>
|
||||
<div class="line">Markdown syntax can be used.</div>
|
||||
</div>
|
||||
<p><strong>Privacy policy</strong></p>
|
||||
<p>(<em>new in 0.7.13</em>)</p>
|
||||
<div class="line-block">
|
||||
<div class="line">A default privacy policy is available (originally adapted from the <a class="reference external" href="https://github.com/discourse/discourse">Discourse</a> privacy policy).</div>
|
||||
<div class="line">A custom privacy policy can set if needed (Markdown syntax can be used). A policy update will display a message on users dashboard to review it.</div>
|
||||
</div>
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<p>Only the default privacy policy is translated (if the translation is available).</p>
|
||||
</div>
|
||||
</section>
|
||||
<section id="users">
|
||||
<h3>Users<a class="headerlink" href="#users" title="Permalink to this heading">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p>display and filter users list</p></li>
|
||||
<li><dl class="simple">
|
||||
<dt>edit a user to:</dt><dd><ul>
|
||||
<li><p>edit a user to:</p>
|
||||
<ul>
|
||||
<li><p>add/remove administration rights</p></li>
|
||||
<li><p>activate his account (<em>new in 0.6.0</em>)</p></li>
|
||||
<li><p>update his email (in case his account is locked) (<em>new in 0.6.0</em>)</p></li>
|
||||
<li><p>reset his password (in case his account is locked) (<em>new in 0.6.0</em>). If email sending is disabled, it is only possible via CLI.</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</li>
|
||||
<li><p>delete a user</p></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p><strong>Sports</strong></p>
|
||||
</section>
|
||||
<section id="sports">
|
||||
<h3>Sports<a class="headerlink" href="#sports" title="Permalink to this heading">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p>enable or disable a sport (a sport can be disabled even if workout with this sport exists)</p></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
<section id="translations">
|
||||
<h2>Translations<a class="headerlink" href="#translations" title="Permalink to this heading">¶</a></h2>
|
||||
@ -400,7 +431,7 @@ A user with an inactive account cannot log in. (<em>new in 0.6.0</em>)</p></li>
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Index — FitTrackee 0.7.12
|
||||
<title>Index — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
|
||||
@ -40,7 +40,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -190,7 +190,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>HTTP Routing Table — FitTrackee 0.7.12
|
||||
<title>HTTP Routing Table — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
|
||||
@ -47,7 +47,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -130,6 +130,16 @@
|
||||
<tr class="pcap"><td></td><td> </td><td></td></tr>
|
||||
<tr class="cap" id="cap-/api"><td></td><td>
|
||||
<strong>/api</strong></td><td></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/auth.html#get--api-auth-account-export"><code class="xref">GET /api/auth/account/export</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/auth.html#get--api-auth-account-export-(string-file_name)"><code class="xref">GET /api/auth/account/export/(string:file_name)</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
@ -255,6 +265,16 @@
|
||||
<td>
|
||||
<a href="api/auth.html#post--api-auth-account-confirm"><code class="xref">POST /api/auth/account/confirm</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/auth.html#post--api-auth-account-export-request"><code class="xref">POST /api/auth/account/export/request</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
<a href="api/auth.html#post--api-auth-account-privacy-policy"><code class="xref">POST /api/auth/account/privacy-policy</code></a></td><td>
|
||||
<em></em></td></tr>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td>
|
||||
@ -410,7 +430,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>FitTrackee — FitTrackee 0.7.12
|
||||
<title>FitTrackee — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
|
||||
@ -42,7 +42,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="#">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -180,7 +180,7 @@ Map</a>.</div>
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Installation — FitTrackee 0.7.12
|
||||
<title>Installation — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -208,7 +208,7 @@
|
||||
</li>
|
||||
<li><dl class="simple">
|
||||
<dt>optional</dt><dd><ul>
|
||||
<li><p>Redis for task queue (if email sending is enabled) and API rate limits</p></li>
|
||||
<li><p>Redis for task queue (if email sending is enabled and for data export requests) and API rate limits</p></li>
|
||||
<li><p>SMTP provider (if email sending is enabled)</p></li>
|
||||
<li><p>API key from a <a class="reference external" href="installation.html#weather-data">weather data provider</a></p></li>
|
||||
<li><p><a class="reference external" href="https://poetry.eustace.io">Poetry</a> (for installation from sources only)</p></li>
|
||||
@ -222,6 +222,12 @@
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<div class="line-block">
|
||||
<div class="line">If registration is enabled, it is recommended to set Redis and a SMTP provider for email sending and data export requests.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<div class="line-block">
|
||||
<div class="line">The following steps describe an installation on Linux systems (tested
|
||||
on Debian and Arch).</div>
|
||||
<div class="line">On other OS, some issues can be encountered and adaptations may be
|
||||
@ -574,14 +580,13 @@ see <a class="reference external" href="https://docs.sqlalchemy.org/en/13/core/p
|
||||
<li><p>password reset request</p></li>
|
||||
<li><p>email change (to old and new email adresses)</p></li>
|
||||
<li><p>password change</p></li>
|
||||
<li><p>notification when a data export archive is ready to download (<em>new in 0.7.13</em>)</p></li>
|
||||
</ul>
|
||||
<div class="versionchanged">
|
||||
<p><span class="versionmodified changed">Changed in version 0.6.5.</span></p>
|
||||
</div>
|
||||
<div class="line-block">
|
||||
<div class="line">For single-user instance, it is possible to disable email sending with an empty <code class="docutils literal notranslate"><span class="pre">EMAIL_URL</span></code> (in this case, no need to start dramatiq workers).</div>
|
||||
<div class="line">A <a class="reference external" href="cli.html#ftcli-users-update">CLI</a> is available to activate account and modify email and password.</div>
|
||||
</div>
|
||||
<p>For single-user instance, it is possible to disable email sending with an empty <code class="docutils literal notranslate"><span class="pre">EMAIL_URL</span></code> (in this case, no need to start dramatiq workers).</p>
|
||||
<p>A <a class="reference external" href="cli.html#ftcli-users-update">CLI</a> is available to activate account, modify email and password and handle data export requests.</p>
|
||||
</section>
|
||||
<section id="map-tile-server">
|
||||
<h3>Map tile server<a class="headerlink" href="#map-tile-server" title="Permalink to this heading">¶</a></h3>
|
||||
@ -598,7 +603,7 @@ The tile server can be changed by updating <code class="docutils literal notrans
|
||||
<div class="admonition note">
|
||||
<p class="admonition-title">Note</p>
|
||||
<div class="line-block">
|
||||
<div class="line">Check the terms of service of tile provider for map attribution</div>
|
||||
<div class="line">Check the terms of service of tile provider for map attribution.</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="versionchanged">
|
||||
@ -821,11 +826,11 @@ $<span class="w"> </span>make<span class="w"> </span>install-db
|
||||
</div>
|
||||
</div>
|
||||
<ul class="simple">
|
||||
<li><p>Download the last release (for now, it is the release v0.7.12):</p></li>
|
||||
<li><p>Download the last release (for now, it is the release v0.7.13):</p></li>
|
||||
</ul>
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>wget<span class="w"> </span>https://github.com/SamR1/FitTrackee/archive/v0.7.12.tar.gz
|
||||
$<span class="w"> </span>tar<span class="w"> </span>-xzf<span class="w"> </span>v0.7.12.tar.gz
|
||||
$<span class="w"> </span>mv<span class="w"> </span>FitTrackee-0.7.12<span class="w"> </span>FitTrackee
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>wget<span class="w"> </span>https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
|
||||
$<span class="w"> </span>tar<span class="w"> </span>-xzf<span class="w"> </span>v0.7.13.tar.gz
|
||||
$<span class="w"> </span>mv<span class="w"> </span>FitTrackee-0.7.13<span class="w"> </span>FitTrackee
|
||||
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>FitTrackee
|
||||
</pre></div>
|
||||
</div>
|
||||
@ -945,11 +950,11 @@ $<span class="w"> </span><span class="nb">source</span><span class="w"> </span>.
|
||||
<ul class="simple">
|
||||
<li><p>Stop the application</p></li>
|
||||
<li><p>Change to the directory where FitTrackee directory is located</p></li>
|
||||
<li><p>Download the last release (for now, it is the release v0.7.12) and overwrite existing files:</p></li>
|
||||
<li><p>Download the last release (for now, it is the release v0.7.13) and overwrite existing files:</p></li>
|
||||
</ul>
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>wget<span class="w"> </span>https://github.com/SamR1/FitTrackee/archive/v0.7.12.tar.gz
|
||||
$<span class="w"> </span>tar<span class="w"> </span>-xzf<span class="w"> </span>v0.7.12.tar.gz
|
||||
$<span class="w"> </span>cp<span class="w"> </span>-R<span class="w"> </span>FitTrackee-0.7.12/*<span class="w"> </span>FitTrackee/
|
||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$<span class="w"> </span>wget<span class="w"> </span>https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
|
||||
$<span class="w"> </span>tar<span class="w"> </span>-xzf<span class="w"> </span>v0.7.13.tar.gz
|
||||
$<span class="w"> </span>cp<span class="w"> </span>-R<span class="w"> </span>FitTrackee-0.7.13/*<span class="w"> </span>FitTrackee/
|
||||
$<span class="w"> </span><span class="nb">cd</span><span class="w"> </span>FitTrackee
|
||||
</pre></div>
|
||||
</div>
|
||||
@ -1208,7 +1213,7 @@ $<span class="w"> </span>make<span class="w"> </span>docker-test-python<span cla
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
BIN
docs/objects.inv
@ -4,7 +4,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Search — FitTrackee 0.7.12
|
||||
<title>Search — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
|
||||
@ -47,7 +47,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -154,7 +154,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Administrator — FitTrackee 0.7.12
|
||||
<title>Administrator — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -174,7 +174,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>Troubleshooting — FitTrackee 0.7.12
|
||||
<title>Troubleshooting — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -157,7 +157,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -5,7 +5,7 @@
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
|
||||
|
||||
<title>User — FitTrackee 0.7.12
|
||||
<title>User — FitTrackee 0.7.13
|
||||
documentation</title>
|
||||
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
|
||||
<link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
|
||||
@ -43,7 +43,7 @@
|
||||
</button>
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
FitTrackee</a>
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.12
|
||||
<span class="navbar-text navbar-version pull-left"><b>0.7.13
|
||||
</b></span>
|
||||
</div>
|
||||
|
||||
@ -148,7 +148,7 @@
|
||||
</p>
|
||||
<p>
|
||||
© Copyright 2018 - 2022, SamR1 <a rel="me" href="https://fosstodon.org/@FitTrackee"><i class="fa fa-mastodon" aria-hidden="true"></i></a>.
|
||||
Last updated on Feb 20, 2023.<br/>
|
||||
Last updated on Mar 05, 2023.<br/>
|
||||
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 5.3.0.<br/>
|
||||
</p>
|
||||
</div>
|
||||
|
Before Width: | Height: | Size: 566 KiB After Width: | Height: | Size: 568 KiB |
Before Width: | Height: | Size: 386 KiB After Width: | Height: | Size: 387 KiB |
Before Width: | Height: | Size: 216 KiB After Width: | Height: | Size: 218 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 126 KiB After Width: | Height: | Size: 122 KiB |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
@ -1,5 +1,5 @@
|
||||
Authentication
|
||||
##############
|
||||
Authentication and account
|
||||
##########################
|
||||
|
||||
.. autoflask:: fittrackee:create_app()
|
||||
:endpoints:
|
||||
@ -18,4 +18,8 @@ Authentication
|
||||
auth.update_user_account,
|
||||
auth.update_password,
|
||||
auth.update_email,
|
||||
auth.logout_user
|
||||
auth.logout_user,
|
||||
auth.accept_privacy_policy,
|
||||
auth.get_user_data_export,
|
||||
auth.request_user_data_export,
|
||||
auth.download_data_export
|
@ -28,13 +28,6 @@ A command line interface (CLI) is available to manage database, OAuth2 tokens an
|
||||
Database
|
||||
~~~~~~~~
|
||||
|
||||
``ftcli db upgrade``
|
||||
""""""""""""""""""""
|
||||
.. versionadded:: 0.6.5
|
||||
|
||||
Apply migrations.
|
||||
|
||||
|
||||
``ftcli db drop``
|
||||
"""""""""""""""""
|
||||
.. versionadded:: 0.6.5
|
||||
@ -42,6 +35,13 @@ Apply migrations.
|
||||
Empty database and delete uploaded files, only on development environments.
|
||||
|
||||
|
||||
``ftcli db upgrade``
|
||||
""""""""""""""""""""
|
||||
.. versionadded:: 0.6.5
|
||||
|
||||
Apply migrations.
|
||||
|
||||
|
||||
OAuth2
|
||||
~~~~~~
|
||||
|
||||
@ -66,6 +66,23 @@ Remove tokens expired for more than provided number of days
|
||||
Users
|
||||
~~~~~
|
||||
|
||||
``ftcli users clean_archives``
|
||||
""""""""""""""""""""""""""""""
|
||||
.. versionadded:: 0.7.13
|
||||
|
||||
Delete export requests and related archives created more than provided number of days.
|
||||
|
||||
.. cssclass:: table-bordered
|
||||
.. list-table::
|
||||
:widths: 25 50
|
||||
:header-rows: 1
|
||||
|
||||
* - Options
|
||||
- Description
|
||||
* - ``--days``
|
||||
- Number of days.
|
||||
|
||||
|
||||
``ftcli users clean_tokens``
|
||||
""""""""""""""""""""""""""""
|
||||
.. versionadded:: 0.7.0
|
||||
@ -83,6 +100,24 @@ Remove blacklisted tokens expired for more than provided number of days.
|
||||
- Number of days.
|
||||
|
||||
|
||||
``ftcli users export_archives``
|
||||
"""""""""""""""""""""""""""""""
|
||||
.. versionadded:: 0.7.13
|
||||
|
||||
Process incomplete user export requests.
|
||||
Can be used if redis is not set (no dramatiq workers running).
|
||||
|
||||
.. cssclass:: table-bordered
|
||||
.. list-table::
|
||||
:widths: 25 50
|
||||
:header-rows: 1
|
||||
|
||||
* - Options
|
||||
- Description
|
||||
* - ``--max``
|
||||
- Maximum number of export requests to process.
|
||||
|
||||
|
||||
``ftcli users update``
|
||||
""""""""""""""""""""""
|
||||
.. versionadded:: 0.6.5
|
||||
|
@ -74,9 +74,10 @@ Workouts
|
||||
Account & preferences
|
||||
^^^^^^^^^^^^^^^^^^^^^
|
||||
- A user can create, update and deleted his account.
|
||||
- The user must agree to the privacy policy to register. If a more recent policy is available, a message is displayed on the dashboard to review the new version (*new in 0.7.13*).
|
||||
- On registration, the user account is created with selected language in dropdown as user preference (*new in 0.6.9*).
|
||||
- After registration, the user account is inactive and an email with confirmation instructions is sent to activate it.
|
||||
A user with an inactive account cannot log in. (*new in 0.6.0*)
|
||||
A user with an inactive account cannot log in. (*new in 0.6.0*).
|
||||
|
||||
.. note::
|
||||
In case email sending is not configured, a `command line <cli.html#ftcli-users-update>`__ allows to activate users account.
|
||||
@ -98,42 +99,70 @@ Account & preferences
|
||||
| A workout with a disabled sport will still be displayed in the application.
|
||||
|
||||
- A user can create `clients <apps.html>`__ for third-party applications (*new in 0.7.0*).
|
||||
- | A user can request a data export (*new in 0.7.13*).
|
||||
| It generates a zip archive containing 2 ``json`` files (user info and workouts data) and all uploaded gpx files.
|
||||
|
||||
.. note::
|
||||
For now, it's not possible to import these files into another **FitTrackee** instance.
|
||||
|
||||
|
||||
Administration
|
||||
^^^^^^^^^^^^^^
|
||||
(*new in 0.3.0*)
|
||||
|
||||
- **Application**
|
||||
Application
|
||||
"""""""""""
|
||||
|
||||
The following parameters can be set:
|
||||
**Configuration**
|
||||
|
||||
- active users limit. If 0, registration is enabled (no limit defined)
|
||||
- maximum size of gpx file (individually uploaded or in a zip archive) (*changed in 0.7.4*)
|
||||
- maximum size of zip archive
|
||||
- maximum number of files in the zip archive (*changed in 0.7.4*)
|
||||
- administrator email for contact (*new in 0.6.0*)
|
||||
The following parameters can be set:
|
||||
|
||||
.. warning::
|
||||
Updating server configuration may be necessary to handle large files (like `nginx <https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size>`_ for instance).
|
||||
- active users limit. If 0, registration is enabled (no limit defined).
|
||||
- maximum size of gpx file (individually uploaded or in a zip archive) (*changed in 0.7.4*)
|
||||
- maximum size of zip archive
|
||||
- maximum number of files in the zip archive (*changed in 0.7.4*)
|
||||
- administrator email for contact (*new in 0.6.0*)
|
||||
|
||||
.. note::
|
||||
If email sending is disabled, a warning is displayed.
|
||||
.. warning::
|
||||
Updating server configuration may be necessary to handle large files (like `nginx <https://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size>`_ for instance).
|
||||
|
||||
.. note::
|
||||
If email sending is disabled, a warning is displayed.
|
||||
|
||||
**About**
|
||||
|
||||
(*new in 0.7.13*)
|
||||
|
||||
| It is possible displayed additional information that may be useful to users in **About** page.
|
||||
| Markdown syntax can be used.
|
||||
|
||||
|
||||
- **Users**
|
||||
**Privacy policy**
|
||||
|
||||
- display and filter users list
|
||||
- edit a user to:
|
||||
- add/remove administration rights
|
||||
- activate his account (*new in 0.6.0*)
|
||||
- update his email (in case his account is locked) (*new in 0.6.0*)
|
||||
- reset his password (in case his account is locked) (*new in 0.6.0*). If email sending is disabled, it is only possible via CLI.
|
||||
- delete a user
|
||||
(*new in 0.7.13*)
|
||||
|
||||
- **Sports**
|
||||
| A default privacy policy is available (originally adapted from the `Discourse <https://github.com/discourse/discourse>`__ privacy policy).
|
||||
| A custom privacy policy can set if needed (Markdown syntax can be used). A policy update will display a message on users dashboard to review it.
|
||||
|
||||
- enable or disable a sport (a sport can be disabled even if workout with this sport exists)
|
||||
.. note::
|
||||
Only the default privacy policy is translated (if the translation is available).
|
||||
|
||||
Users
|
||||
"""""
|
||||
|
||||
- display and filter users list
|
||||
- edit a user to:
|
||||
|
||||
- add/remove administration rights
|
||||
- activate his account (*new in 0.6.0*)
|
||||
- update his email (in case his account is locked) (*new in 0.6.0*)
|
||||
- reset his password (in case his account is locked) (*new in 0.6.0*). If email sending is disabled, it is only possible via CLI.
|
||||
- delete a user
|
||||
|
||||
|
||||
Sports
|
||||
""""""
|
||||
- enable or disable a sport (a sport can be disabled even if workout with this sport exists)
|
||||
|
||||
|
||||
Translations
|
||||
|
@ -26,13 +26,16 @@ Prerequisites
|
||||
- Python 3.7+
|
||||
- PostgreSQL 11+
|
||||
- optional
|
||||
- Redis for task queue (if email sending is enabled) and API rate limits
|
||||
- Redis for task queue (if email sending is enabled and for data export requests) and API rate limits
|
||||
- SMTP provider (if email sending is enabled)
|
||||
- API key from a `weather data provider <installation.html#weather-data>`__
|
||||
- `Poetry <https://poetry.eustace.io>`__ (for installation from sources only)
|
||||
- `Yarn <https://yarnpkg.com>`__ (for development only)
|
||||
- Docker and Docker Compose (for development or evaluation purposes)
|
||||
|
||||
.. note::
|
||||
| If registration is enabled, it is recommended to set Redis and a SMTP provider for email sending and data export requests.
|
||||
|
||||
.. note::
|
||||
| The following steps describe an installation on Linux systems (tested
|
||||
on Debian and Arch).
|
||||
@ -273,11 +276,13 @@ Emails sent by FitTrackee are:
|
||||
- password reset request
|
||||
- email change (to old and new email adresses)
|
||||
- password change
|
||||
- notification when a data export archive is ready to download (*new in 0.7.13*)
|
||||
|
||||
.. versionchanged:: 0.6.5
|
||||
|
||||
| For single-user instance, it is possible to disable email sending with an empty ``EMAIL_URL`` (in this case, no need to start dramatiq workers).
|
||||
| A `CLI <cli.html#ftcli-users-update>`__ is available to activate account and modify email and password.
|
||||
For single-user instance, it is possible to disable email sending with an empty ``EMAIL_URL`` (in this case, no need to start dramatiq workers).
|
||||
|
||||
A `CLI <cli.html#ftcli-users-update>`__ is available to activate account, modify email and password and handle data export requests.
|
||||
|
||||
|
||||
Map tile server
|
||||
@ -293,7 +298,7 @@ To keep using **ThunderForest Outdoors**, the configuration is:
|
||||
- ``MAP_ATTRIBUTION=© <a href="http://www.thunderforest.com/">Thunderforest</a>, © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors``
|
||||
|
||||
.. note::
|
||||
| Check the terms of service of tile provider for map attribution
|
||||
| Check the terms of service of tile provider for map attribution.
|
||||
|
||||
|
||||
.. versionchanged:: 0.6.10
|
||||
@ -502,13 +507,13 @@ Production environment
|
||||
.. warning::
|
||||
| Note that FitTrackee is under heavy development, some features may be unstable.
|
||||
|
||||
- Download the last release (for now, it is the release v0.7.12):
|
||||
- Download the last release (for now, it is the release v0.7.13):
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ wget https://github.com/SamR1/FitTrackee/archive/v0.7.12.tar.gz
|
||||
$ tar -xzf v0.7.12.tar.gz
|
||||
$ mv FitTrackee-0.7.12 FitTrackee
|
||||
$ wget https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
|
||||
$ tar -xzf v0.7.13.tar.gz
|
||||
$ mv FitTrackee-0.7.13 FitTrackee
|
||||
$ cd FitTrackee
|
||||
|
||||
- Create **.env** from example and update it
|
||||
@ -628,13 +633,13 @@ Prod environment
|
||||
|
||||
- Change to the directory where FitTrackee directory is located
|
||||
|
||||
- Download the last release (for now, it is the release v0.7.12) and overwrite existing files:
|
||||
- Download the last release (for now, it is the release v0.7.13) and overwrite existing files:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
$ wget https://github.com/SamR1/FitTrackee/archive/v0.7.12.tar.gz
|
||||
$ tar -xzf v0.7.12.tar.gz
|
||||
$ cp -R FitTrackee-0.7.12/* FitTrackee/
|
||||
$ wget https://github.com/SamR1/FitTrackee/archive/v0.7.13.tar.gz
|
||||
$ tar -xzf v0.7.13.tar.gz
|
||||
$ cp -R FitTrackee-0.7.13/* FitTrackee/
|
||||
$ cd FitTrackee
|
||||
|
||||
- Update **.env** if needed (see `Environment variables <installation.html#environment-variables>`__).
|
||||
|
@ -16,13 +16,15 @@ class TestRegistration:
|
||||
selenium.implicitly_wait(1)
|
||||
|
||||
inputs = selenium.find_elements(By.TAG_NAME, 'input')
|
||||
assert len(inputs) == 4
|
||||
assert len(inputs) == 5
|
||||
assert inputs[0].get_attribute('id') == 'username'
|
||||
assert inputs[0].get_attribute('type') == 'text'
|
||||
assert inputs[1].get_attribute('id') == 'email'
|
||||
assert inputs[1].get_attribute('type') == 'email'
|
||||
assert inputs[2].get_attribute('id') == 'password'
|
||||
assert inputs[2].get_attribute('type') == 'password'
|
||||
assert inputs[4].get_attribute('id') == 'accepted_policy'
|
||||
assert inputs[4].get_attribute('type') == 'checkbox'
|
||||
|
||||
form_infos = selenium.find_elements(By.CLASS_NAME, 'form-info')
|
||||
assert len(form_infos) == 3
|
||||
|
@ -32,6 +32,8 @@ def register(selenium, user):
|
||||
email.send_keys(user.get('email'))
|
||||
password = selenium.find_element(By.ID, 'password')
|
||||
password.send_keys(user.get('password'))
|
||||
accepted_policy = selenium.find_element(By.ID, 'accepted_policy')
|
||||
accepted_policy.click()
|
||||
submit_button = selenium.find_element(By.TAG_NAME, 'button')
|
||||
submit_button.click()
|
||||
|
||||
|
@ -25,7 +25,7 @@ from werkzeug.middleware.proxy_fix import ProxyFix
|
||||
from fittrackee.emails.email import EmailService
|
||||
from fittrackee.request import CustomRequest
|
||||
|
||||
VERSION = __version__ = '0.7.12'
|
||||
VERSION = __version__ = '0.7.13'
|
||||
REDIS_URL = os.getenv('REDIS_URL', 'redis://')
|
||||
API_RATE_LIMITS = os.environ.get('API_RATE_LIMITS', '300 per 5 minutes').split(
|
||||
','
|
||||
|
@ -1,3 +1,4 @@
|
||||
from datetime import datetime
|
||||
from typing import Dict, Union
|
||||
|
||||
from flask import Blueprint, current_app, request
|
||||
@ -40,6 +41,7 @@ def get_application_config() -> Union[Dict, HttpResponse]:
|
||||
|
||||
{
|
||||
"data": {
|
||||
"about": null,
|
||||
"admin_contact": "admin@example.com",
|
||||
"gpx_limit_import": 10,
|
||||
"is_email_sending_enabled": true,
|
||||
@ -48,7 +50,9 @@ def get_application_config() -> Union[Dict, HttpResponse]:
|
||||
"max_users": 0,
|
||||
"max_zip_file_size": 10485760,
|
||||
"map_attribution": "© <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors",
|
||||
"version": "0.7.12",
|
||||
"privacy_policy": null,
|
||||
"privacy_policy_date": null,
|
||||
"version": "0.7.13",
|
||||
"weather_provider": null
|
||||
},
|
||||
"status": "success"
|
||||
@ -93,6 +97,7 @@ def update_application_config(auth_user: User) -> Union[Dict, HttpResponse]:
|
||||
|
||||
{
|
||||
"data": {
|
||||
"about": null,
|
||||
"admin_contact": "admin@example.com",
|
||||
"gpx_limit_import": 10,
|
||||
"is_email_sending_enabled": true,
|
||||
@ -101,18 +106,22 @@ def update_application_config(auth_user: User) -> Union[Dict, HttpResponse]:
|
||||
"max_users": 10,
|
||||
"max_zip_file_size": 10485760,
|
||||
"map_attribution": "© <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors",
|
||||
"version": "0.7.12",
|
||||
"privacy_policy": null,
|
||||
"privacy_policy_date": null,
|
||||
"version": "0.7.13",
|
||||
"weather_provider": null
|
||||
},
|
||||
"status": "success"
|
||||
}
|
||||
|
||||
:<json string about: instance information
|
||||
:<json string admin_contact: email to contact the administrator
|
||||
:<json integer gpx_limit_import: max number of files in zip archive
|
||||
:<json boolean is_registration_enabled: is registration enabled?
|
||||
:<json integer max_single_file_size: max size of a single file
|
||||
:<json integer max_users: max users allowed to register on instance
|
||||
:<json integer max_zip_file_size: max size of a zip archive
|
||||
:<json string privacy_policy: instance privacy policy
|
||||
|
||||
:reqheader Authorization: OAuth 2.0 Bearer Token
|
||||
|
||||
@ -151,6 +160,16 @@ def update_application_config(auth_user: User) -> Union[Dict, HttpResponse]:
|
||||
config.max_users = config_data.get('max_users')
|
||||
if 'admin_contact' in config_data:
|
||||
config.admin_contact = admin_contact if admin_contact else None
|
||||
if 'about' in config_data:
|
||||
config.about = (
|
||||
config_data.get('about') if config_data.get('about') else None
|
||||
)
|
||||
if 'privacy_policy' in config_data:
|
||||
privacy_policy = config_data.get('privacy_policy')
|
||||
config.privacy_policy = privacy_policy if privacy_policy else None
|
||||
config.privacy_policy_date = (
|
||||
datetime.utcnow() if privacy_policy else None
|
||||
)
|
||||
|
||||
if config.max_zip_file_size < config.max_single_file_size:
|
||||
return InvalidPayloadErrorResponse(
|
||||
|
@ -25,6 +25,9 @@ class AppConfig(BaseModel):
|
||||
)
|
||||
max_zip_file_size = db.Column(db.Integer, default=10485760, nullable=False)
|
||||
admin_contact = db.Column(db.String(255), nullable=True)
|
||||
privacy_policy_date = db.Column(db.DateTime, nullable=True)
|
||||
privacy_policy = db.Column(db.Text, nullable=True)
|
||||
about = db.Column(db.Text, nullable=True)
|
||||
|
||||
@property
|
||||
def is_registration_enabled(self) -> bool:
|
||||
@ -46,6 +49,7 @@ class AppConfig(BaseModel):
|
||||
def serialize(self) -> Dict:
|
||||
weather_provider = os.getenv('WEATHER_API_PROVIDER', '').lower()
|
||||
return {
|
||||
'about': self.about,
|
||||
'admin_contact': self.admin_contact,
|
||||
'gpx_limit_import': self.gpx_limit_import,
|
||||
'is_email_sending_enabled': current_app.config['CAN_SEND_EMAILS'],
|
||||
@ -54,6 +58,8 @@ class AppConfig(BaseModel):
|
||||
'max_zip_file_size': self.max_zip_file_size,
|
||||
'max_users': self.max_users,
|
||||
'map_attribution': self.map_attribution,
|
||||
'privacy_policy': self.privacy_policy,
|
||||
'privacy_policy_date': self.privacy_policy_date,
|
||||
'version': VERSION,
|
||||
'weather_provider': (
|
||||
weather_provider
|
||||
|
@ -35,6 +35,7 @@ def update_app_config_from_database(
|
||||
current_app.config[
|
||||
'is_registration_enabled'
|
||||
] = db_config.is_registration_enabled
|
||||
current_app.config['privacy_policy_date'] = db_config.privacy_policy_date
|
||||
|
||||
|
||||
def verify_app_config(config_data: Dict) -> List:
|
||||
|
@ -1,14 +1,16 @@
|
||||
import os
|
||||
from typing import Type, Union
|
||||
|
||||
from dramatiq.brokers.redis import RedisBroker
|
||||
from dramatiq.brokers.stub import StubBroker
|
||||
from flask import current_app
|
||||
from sqlalchemy.pool import NullPool
|
||||
|
||||
if os.getenv('APP_SETTINGS') == 'fittrackee.config.TestingConfig':
|
||||
broker = StubBroker
|
||||
else:
|
||||
broker = RedisBroker
|
||||
broker: Union[Type['RedisBroker'], Type['StubBroker']] = (
|
||||
StubBroker
|
||||
if os.getenv("APP_SETTINGS") == "fittrackee.config.TestingConfig"
|
||||
else RedisBroker
|
||||
)
|
||||
|
||||
XDIST_WORKER = (
|
||||
f"_{os.getenv('PYTEST_XDIST_WORKER')}"
|
||||
@ -67,6 +69,7 @@ class BaseConfig:
|
||||
'authorization_code': 864000, # 10 days
|
||||
}
|
||||
OAUTH2_REFRESH_TOKEN_GENERATOR = True
|
||||
DATA_EXPORT_EXPIRATION = 24 # hours
|
||||
|
||||
|
||||
class DevelopmentConfig(BaseConfig):
|
||||
|
2
fittrackee/dist/index.html
vendored
@ -1 +1 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><!--[if IE]><link rel="icon" href="/favicon.ico"><![endif]--><link rel="stylesheet" href="/static/css/fork-awesome.min.css"/><link rel="stylesheet" href="/static/css/leaflet.css"/><title>FitTrackee</title><script defer="defer" src="/static/js/chunk-vendors.77cd7298.js"></script><script defer="defer" src="/static/js/app.f7fbef48.js"></script><link href="/static/css/app.e2dfa8b7.css" rel="stylesheet"><link rel="icon" type="image/png" sizes="32x32" href="/img/icons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/img/icons/favicon-16x16.png"><link rel="manifest" href="/manifest.json"><meta name="theme-color" content="#4DBA87"><meta name="apple-mobile-web-app-capable" content="no"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="apple-mobile-web-app-title" content="fittrackee_client"><link rel="apple-touch-icon" href="/img/icons/apple-touch-icon-152x152.png"><link rel="mask-icon" href="/img/icons/safari-pinned-tab.svg" color="#4DBA87"><meta name="msapplication-TileImage" content="/img/icons/msapplication-icon-144x144.png"><meta name="msapplication-TileColor" content="#000000"></head><body><noscript><strong>We're sorry but FitTrackee doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
|
||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><!--[if IE]><link rel="icon" href="/favicon.ico"><![endif]--><link rel="stylesheet" href="/static/css/fork-awesome.min.css"/><link rel="stylesheet" href="/static/css/leaflet.css"/><title>FitTrackee</title><script defer="defer" src="/static/js/chunk-vendors.504d6d07.js"></script><script defer="defer" src="/static/js/app.4a1985d7.js"></script><link href="/static/css/app.e504ceb2.css" rel="stylesheet"><link rel="icon" type="image/png" sizes="32x32" href="/img/icons/favicon-32x32.png"><link rel="icon" type="image/png" sizes="16x16" href="/img/icons/favicon-16x16.png"><link rel="manifest" href="/manifest.json"><meta name="theme-color" content="#4DBA87"><meta name="apple-mobile-web-app-capable" content="no"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="apple-mobile-web-app-title" content="fittrackee_client"><link rel="apple-touch-icon" href="/img/icons/apple-touch-icon-152x152.png"><link rel="mask-icon" href="/img/icons/safari-pinned-tab.svg" color="#4DBA87"><meta name="msapplication-TileImage" content="/img/icons/msapplication-icon-144x144.png"><meta name="msapplication-TileColor" content="#000000"></head><body><noscript><strong>We're sorry but FitTrackee doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
|
2
fittrackee/dist/service-worker.js
vendored
2
fittrackee/dist/service-worker.js.map
vendored
1
fittrackee/dist/static/css/app.e2dfa8b7.css
vendored
1
fittrackee/dist/static/css/app.e504ceb2.css
vendored
Normal file
2
fittrackee/dist/static/js/app.4a1985d7.js
vendored
Normal file
1
fittrackee/dist/static/js/app.4a1985d7.js.map
vendored
Normal file
2
fittrackee/dist/static/js/app.f7fbef48.js
vendored
74
fittrackee/dist/static/js/chunk-vendors.504d6d07.js
vendored
Normal file
1
fittrackee/dist/static/js/chunk-vendors.504d6d07.js.map
vendored
Normal file
2
fittrackee/dist/static/js/reset.24cb26e8.js
vendored
2
fittrackee/dist/static/js/reset.572eac46.js
vendored
Normal file
2
fittrackee/dist/static/js/workouts.0fd5b207.js
vendored
Normal file
1
fittrackee/dist/static/js/workouts.0fd5b207.js.map
vendored
Normal file
@ -51,3 +51,13 @@ def account_confirmation_email(user: Dict, email_data: Dict) -> None:
|
||||
recipient=user['email'],
|
||||
data=email_data,
|
||||
)
|
||||
|
||||
|
||||
@dramatiq.actor(queue_name='fittrackee_emails')
|
||||
def data_export_email(user: Dict, email_data: Dict) -> None:
|
||||
email_service.send(
|
||||
template='data_export_ready',
|
||||
lang=user['language'],
|
||||
recipient=user['email'],
|
||||
data=email_data,
|
||||
)
|
||||
|
26
fittrackee/emails/templates/data_export_ready/body.html
Normal file
@ -0,0 +1,26 @@
|
||||
{% extends "layout.html" %}
|
||||
{% block title %}{{ _('Your archive is ready to be downloaded') }}{% endblock %}
|
||||
{% block preheader %}{{ _('A download link is available in your account.') }}{% endblock %}
|
||||
{% block content %}<p>{{ _('You have requested an export of your account on FitTrackee.') }} {{ _('The archive is now ready to be downloaded from your account.') }}</p>
|
||||
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="{{account_url}}" class="f-fallback button button--green" target="_blank">{{ _('Download your archive') }}</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>{% endblock %}
|
||||
{% block not_initiated %}{{ _("If you did not request the export, please change your password immediately or contact your administrator if your account is locked.") }}{% endblock %}
|
||||
{% block url_to_paste %}<table class="body-sub" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
<p class="f-fallback sub">{{ _("If you're having trouble with the button above, copy and paste the URL below into your web browser.") }}</p>
|
||||
<p class="f-fallback sub">{{account_url}}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>{% endblock %}
|
5
fittrackee/emails/templates/data_export_ready/body.txt
Normal file
@ -0,0 +1,5 @@
|
||||
{% extends "layout.txt" %}{% block content %}{{ _('You have requested an export of your account on FitTrackee.') }}
|
||||
{{ _('The archive is now ready to be downloaded from your account.') }}
|
||||
|
||||
{{ _('Download your archive') }}: {{ account_url }}
|
||||
{{ _('If you did not request the export, please change your password immediately or contact your administrator if your account is locked.') }}{% endblock %}
|
@ -0,0 +1 @@
|
||||
FitTrackee - {{ _('Your archive is ready to be downloaded') }}
|
@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-03 07:58+0200\n"
|
||||
"PO-Revision-Date: 2022-07-04 21:17+0000\n"
|
||||
"Last-Translator: J. Lavoie <j.lavoie@net-c.ca>\n"
|
||||
"POT-Creation-Date: 2023-03-04 10:33+0100\n"
|
||||
"PO-Revision-Date: 2023-03-05 11:17+0000\n"
|
||||
"Last-Translator: qwerty287 <ndev@web.de>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/fittrackee/"
|
||||
"fittrackee-api-emails/de/>\n"
|
||||
"Language: de\n"
|
||||
@ -17,8 +17,8 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.13.1-dev\n"
|
||||
"Generated-By: Babel 2.10.3\n"
|
||||
"X-Generator: Weblate 4.16.2-dev\n"
|
||||
"Generated-By: Babel 2.11.0\n"
|
||||
|
||||
#: fittrackee/emails/templates/layout.html:215
|
||||
#: fittrackee/emails/templates/layout.txt:1
|
||||
@ -66,8 +66,7 @@ msgstr "Du hast ein Konto bei FitTrackee angelegt."
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.html:4
|
||||
msgid "Use the button below to confirm your address email."
|
||||
msgstr ""
|
||||
"Verwende die unteren Schaltfläche, um deine E-Mail-Adresse zu bestätigen."
|
||||
msgstr "Verwende die unteren Schaltfläche, um deine E-Mail-Adresse zu bestätigen."
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.html:11
|
||||
#: fittrackee/emails/templates/account_confirmation/body.txt:4
|
||||
@ -86,19 +85,53 @@ msgstr ""
|
||||
"E-Mail bitte."
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.html:22
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:22
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:22
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:24
|
||||
msgid ""
|
||||
"If you're having trouble with the button above, copy and paste the URL "
|
||||
"below into your web browser."
|
||||
msgstr ""
|
||||
"Falls du Probleme mit der oberen Schaltfläche hast, kopiere diese URL und "
|
||||
"gebe sie in deinen Webbrowser ein."
|
||||
"Falls du Probleme mit der oberen Schaltfläche hast, kopiere diese URL und"
|
||||
" gebe sie in deinen Webbrowser ein."
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.txt:2
|
||||
msgid "Use the link below to confirm your address email."
|
||||
msgstr "Verwende den unteren Link, um deine E-Mail-Adresse zu bestätigen."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:2
|
||||
#: fittrackee/emails/templates/data_export_ready/subject.txt:1
|
||||
msgid "Your archive is ready to be downloaded"
|
||||
msgstr "Dein Archiv ist bereit zum Download"
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:3
|
||||
msgid "A download link is available in your account."
|
||||
msgstr "Ein Download-Link ist auf deinem Account verfügbar."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:1
|
||||
msgid "You have requested an export of your account on FitTrackee."
|
||||
msgstr "Du hast eine Anfrage zum Export deines FitTrackee-Accounts gestellt."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:2
|
||||
msgid "The archive is now ready to be downloaded from your account."
|
||||
msgstr "Das Archiv kann jetzt von deinem Account heruntergeladen werden."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:11
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:4
|
||||
msgid "Download your archive"
|
||||
msgstr "Dein Archiv herunterladen"
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:18
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:5
|
||||
msgid ""
|
||||
"If you did not request the export, please change your password "
|
||||
"immediately or contact your administrator if your account is locked."
|
||||
msgstr ""
|
||||
"Wenn du den Export nicht angefragt hast, ändere dein Passwort sofort oder "
|
||||
"frage deinen Administrator, ob dein Account gesperrt ist."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/body.html:2
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/subject.txt:1
|
||||
msgid "Email changed"
|
||||
@ -114,8 +147,8 @@ msgid ""
|
||||
"You recently requested to change your email address for your FitTrackee "
|
||||
"account to:"
|
||||
msgstr ""
|
||||
"Du hast kürzlich beantragt, die E-Mail-Adresse deines FitTrackee-Kontos zu "
|
||||
"ändern. Neue Adresse:"
|
||||
"Du hast kürzlich beantragt, die E-Mail-Adresse deines FitTrackee-Kontos "
|
||||
"zu ändern. Neue Adresse:"
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/body.html:18
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/body.txt:4
|
||||
@ -123,9 +156,9 @@ msgid ""
|
||||
"If this email change wasn't initiated by you, please change your password"
|
||||
" immediately or contact your administrator if your account is locked."
|
||||
msgstr ""
|
||||
"Falls die Änderung der E-Mail-Adresse nicht von Dir initiiert wurde, ändere "
|
||||
"bitte sofort Dein Passwort oder kontaktiere den Administrator, falls dein "
|
||||
"Konto gesperrt ist."
|
||||
"Falls die Änderung der E-Mail-Adresse nicht von Dir initiiert wurde, "
|
||||
"ändere bitte sofort Dein Passwort oder kontaktiere den Administrator, "
|
||||
"falls dein Konto gesperrt ist."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:2
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/subject.txt:1
|
||||
@ -142,8 +175,8 @@ msgid ""
|
||||
"You recently requested to change your email address for your FitTrackee "
|
||||
"account."
|
||||
msgstr ""
|
||||
"Du hast kürzlich beantragt, die E-Mail-Adresse deines FitTrackee-Kontos zu "
|
||||
"ändern."
|
||||
"Du hast kürzlich beantragt, die E-Mail-Adresse deines FitTrackee-Kontos "
|
||||
"zu ändern."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:4
|
||||
msgid "Use the button below to confirm this address."
|
||||
@ -181,9 +214,9 @@ msgid ""
|
||||
"password immediately or contact your administrator if your account is "
|
||||
"locked."
|
||||
msgstr ""
|
||||
"Falls die Änderung des Passworts nicht von dir initiiert wurde, ändere bitte "
|
||||
"sofort dein Passwort oder kontaktiere den Administrator, falls dein Konto "
|
||||
"gesperrt ist."
|
||||
"Falls die Änderung des Passworts nicht von dir initiiert wurde, ändere "
|
||||
"bitte sofort dein Passwort oder kontaktiere den Administrator, falls dein"
|
||||
" Konto gesperrt ist."
|
||||
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:2
|
||||
#: fittrackee/emails/templates/password_reset_request/subject.txt:1
|
||||
@ -196,8 +229,8 @@ msgid ""
|
||||
"Use this link to reset your password. The link is only valid for "
|
||||
"%(expiration_delay)s."
|
||||
msgstr ""
|
||||
"Verwende den unteren Link, um dein Passwort zurückzusetzen. Der Link ist nur "
|
||||
"für %(expiration_delay)s gültig."
|
||||
"Verwende den unteren Link, um dein Passwort zurückzusetzen. Der Link ist "
|
||||
"nur für %(expiration_delay)s gültig."
|
||||
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:4
|
||||
#: fittrackee/emails/templates/password_reset_request/body.txt:1
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-03 07:58+0200\n"
|
||||
"POT-Creation-Date: 2023-03-04 10:33+0100\n"
|
||||
"PO-Revision-Date: 2022-07-02 18:25+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: en\n"
|
||||
@ -16,7 +16,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.10.3\n"
|
||||
"Generated-By: Babel 2.11.0\n"
|
||||
|
||||
#: fittrackee/emails/templates/layout.html:215
|
||||
#: fittrackee/emails/templates/layout.txt:1
|
||||
@ -83,6 +83,7 @@ msgstr ""
|
||||
"email."
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.html:22
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:22
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:22
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:24
|
||||
msgid ""
|
||||
@ -96,6 +97,39 @@ msgstr ""
|
||||
msgid "Use the link below to confirm your address email."
|
||||
msgstr "Use the link below to confirm your address email."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:2
|
||||
#: fittrackee/emails/templates/data_export_ready/subject.txt:1
|
||||
msgid "Your archive is ready to be downloaded"
|
||||
msgstr "Your archive is ready to be downloaded"
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:3
|
||||
msgid "A download link is available in your account."
|
||||
msgstr "A download link is available in your account."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:1
|
||||
msgid "You have requested an export of your account on FitTrackee."
|
||||
msgstr "You have requested an export of your account on FitTrackee."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:2
|
||||
msgid "The archive is now ready to be downloaded from your account."
|
||||
msgstr "The archive is now ready to be downloaded from your account."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:11
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:4
|
||||
msgid "Download your archive"
|
||||
msgstr "Download your archive"
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:18
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:5
|
||||
msgid ""
|
||||
"If you did not request the export, please change your password "
|
||||
"immediately or contact your administrator if your account is locked."
|
||||
msgstr ""
|
||||
"If you did not request the export, please change your password "
|
||||
"immediately or contact your administrator if your account is locked."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/body.html:2
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/subject.txt:1
|
||||
msgid "Email changed"
|
||||
|
@ -7,18 +7,17 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-03 07:58+0200\n"
|
||||
"POT-Creation-Date: 2023-03-04 10:33+0100\n"
|
||||
"PO-Revision-Date: 2022-07-04 21:17+0000\n"
|
||||
"Last-Translator: J. Lavoie <j.lavoie@net-c.ca>\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/fittrackee/"
|
||||
"fittrackee-api-emails/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/fittrackee"
|
||||
"/fittrackee-api-emails/fr/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.13.1-dev\n"
|
||||
"Generated-By: Babel 2.10.3\n"
|
||||
"Generated-By: Babel 2.11.0\n"
|
||||
|
||||
#: fittrackee/emails/templates/layout.html:215
|
||||
#: fittrackee/emails/templates/layout.txt:1
|
||||
@ -85,6 +84,7 @@ msgstr ""
|
||||
"ignorer ce courriel."
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.html:22
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:22
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:22
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:24
|
||||
msgid ""
|
||||
@ -96,8 +96,41 @@ msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.txt:2
|
||||
msgid "Use the link below to confirm your address email."
|
||||
msgstr "Cliquez sur le lien ci-dessous pour confirmer votre adresse électronique."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:2
|
||||
#: fittrackee/emails/templates/data_export_ready/subject.txt:1
|
||||
msgid "Your archive is ready to be downloaded"
|
||||
msgstr "Votre archive est prête à être téléchargée"
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:3
|
||||
msgid "A download link is available in your account."
|
||||
msgstr "Un lien de téléchargement est disponible dans votre compte."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:1
|
||||
msgid "You have requested an export of your account on FitTrackee."
|
||||
msgstr "Vous avez demandé un export des données de votre compte sur FitTrackee."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:2
|
||||
msgid "The archive is now ready to be downloaded from your account."
|
||||
msgstr "L'archive est maintenant prête à être téléchargée depuis votre compte."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:11
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:4
|
||||
msgid "Download your archive"
|
||||
msgstr "Télécharger votre archive"
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:18
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:5
|
||||
msgid ""
|
||||
"If you did not request the export, please change your password "
|
||||
"immediately or contact your administrator if your account is locked."
|
||||
msgstr ""
|
||||
"Cliquez sur le lien ci-dessous pour confirmer votre adresse électronique."
|
||||
"Si vous n'êtes pas à l'origine de cette demande, veuillez changer "
|
||||
"votre mot de passe immédiatement ou contacter l'administrateur si votre "
|
||||
"compte est bloqué."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/body.html:2
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/subject.txt:1
|
||||
@ -148,19 +181,19 @@ msgstr ""
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:4
|
||||
msgid "Use the button below to confirm this address."
|
||||
msgstr ""
|
||||
"Cliquez sur le bouton ci-dessous pour confirmer cette adresse électronique."
|
||||
"Cliquez sur le bouton ci-dessous pour confirmer cette adresse "
|
||||
"électronique."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:18
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.txt:7
|
||||
msgid "If this email change wasn't initiated by you, please ignore this email."
|
||||
msgstr ""
|
||||
"Si vous n'êtes pas à l'origine de cette modification, vous pouvez ignorer ce "
|
||||
"courriel."
|
||||
"Si vous n'êtes pas à l'origine de cette modification, vous pouvez ignorer"
|
||||
" ce courriel."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.txt:2
|
||||
msgid "Use the link below to confirm this address."
|
||||
msgstr ""
|
||||
"Cliquez sur le lien ci-dessous pour confirmer cette adresse électronique."
|
||||
msgstr "Cliquez sur le lien ci-dessous pour confirmer cette adresse électronique."
|
||||
|
||||
#: fittrackee/emails/templates/password_change/body.html:2
|
||||
#: fittrackee/emails/templates/password_change/subject.txt:1
|
||||
@ -233,3 +266,4 @@ msgstr ""
|
||||
#: fittrackee/emails/templates/password_reset_request/body.txt:1
|
||||
msgid "Use the link below to reset it."
|
||||
msgstr "Cliquez sur le lien ci-dessous pour le réinitialiser."
|
||||
|
||||
|
@ -7,17 +7,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-12-11 09:25+0100\n"
|
||||
"POT-Creation-Date: 2023-03-04 10:33+0100\n"
|
||||
"PO-Revision-Date: 2022-12-12 19:48+0000\n"
|
||||
"Last-Translator: Donato Perruso <dperruso@protonmail.com>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/fittrackee/"
|
||||
"fittrackee-api-emails/it/>\n"
|
||||
"Language: it\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/fittrackee"
|
||||
"/fittrackee-api-emails/it/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15-dev\n"
|
||||
"Generated-By: Babel 2.11.0\n"
|
||||
|
||||
#: fittrackee/emails/templates/layout.html:215
|
||||
@ -85,19 +84,51 @@ msgstr ""
|
||||
"ignora quest'email."
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.html:22
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:22
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:22
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:24
|
||||
msgid ""
|
||||
"If you're having trouble with the button above, copy and paste the URL "
|
||||
"below into your web browser."
|
||||
msgstr ""
|
||||
"Se stai avendo problemi con il bottone qui sopra, copia ed incolla l'URL qui "
|
||||
"sotto nel tuo web browser."
|
||||
"Se stai avendo problemi con il bottone qui sopra, copia ed incolla l'URL "
|
||||
"qui sotto nel tuo web browser."
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.txt:2
|
||||
msgid "Use the link below to confirm your address email."
|
||||
msgstr "Usa il link qui sotto per confermare la tua email."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:2
|
||||
#: fittrackee/emails/templates/data_export_ready/subject.txt:1
|
||||
msgid "Your archive is ready to be downloaded"
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:3
|
||||
msgid "A download link is available in your account."
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:1
|
||||
msgid "You have requested an export of your account on FitTrackee."
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:2
|
||||
msgid "The archive is now ready to be downloaded from your account."
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:11
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:4
|
||||
msgid "Download your archive"
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:18
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:5
|
||||
msgid ""
|
||||
"If you did not request the export, please change your password "
|
||||
"immediately or contact your administrator if your account is locked."
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/body.html:2
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/subject.txt:1
|
||||
msgid "Email changed"
|
||||
@ -139,8 +170,8 @@ msgid ""
|
||||
"You recently requested to change your email address for your FitTrackee "
|
||||
"account."
|
||||
msgstr ""
|
||||
"Hai richiesto di recente di cambiare l'indirizzo email associato con il tuo "
|
||||
"account FitTrackee."
|
||||
"Hai richiesto di recente di cambiare l'indirizzo email associato con il "
|
||||
"tuo account FitTrackee."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:4
|
||||
msgid "Use the button below to confirm this address."
|
||||
@ -150,8 +181,8 @@ msgstr "Usa il bottone qui sotto per confermare questo indirizzo."
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.txt:7
|
||||
msgid "If this email change wasn't initiated by you, please ignore this email."
|
||||
msgstr ""
|
||||
"Se il cambio d'email non è stato iniziato da te, per favore ignora questa "
|
||||
"mail."
|
||||
"Se il cambio d'email non è stato iniziato da te, per favore ignora questa"
|
||||
" mail."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.txt:2
|
||||
msgid "Use the link below to confirm this address."
|
||||
@ -178,9 +209,9 @@ msgid ""
|
||||
"password immediately or contact your administrator if your account is "
|
||||
"locked."
|
||||
msgstr ""
|
||||
"Se questo cambio di password non è stato iniziato da te, per favore cambia "
|
||||
"immediatamente la tua password e contatta un amministratore se il tuo "
|
||||
"account è bloccato."
|
||||
"Se questo cambio di password non è stato iniziato da te, per favore "
|
||||
"cambia immediatamente la tua password e contatta un amministratore se il "
|
||||
"tuo account è bloccato."
|
||||
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:2
|
||||
#: fittrackee/emails/templates/password_reset_request/subject.txt:1
|
||||
@ -222,8 +253,10 @@ msgstr "Resetta password"
|
||||
#: fittrackee/emails/templates/password_reset_request/body.txt:7
|
||||
msgid "If you did not request a password reset, please ignore this email."
|
||||
msgstr ""
|
||||
"Se non hai richiesto un reset della password, per favore ignora quest'email."
|
||||
"Se non hai richiesto un reset della password, per favore ignora "
|
||||
"quest'email."
|
||||
|
||||
#: fittrackee/emails/templates/password_reset_request/body.txt:1
|
||||
msgid "Use the link below to reset it."
|
||||
msgstr "Usa il link qui sotto per resettarla."
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-03 07:58+0200\n"
|
||||
"POT-Creation-Date: 2023-03-04 10:33+0100\n"
|
||||
"PO-Revision-Date: 2022-10-31 10:19+0100\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: nb\n"
|
||||
@ -16,7 +16,7 @@ msgstr ""
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.10.3\n"
|
||||
"Generated-By: Babel 2.11.0\n"
|
||||
|
||||
#: fittrackee/emails/templates/layout.html:215
|
||||
#: fittrackee/emails/templates/layout.txt:1
|
||||
@ -79,6 +79,7 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.html:22
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:22
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:22
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:24
|
||||
msgid ""
|
||||
@ -90,6 +91,37 @@ msgstr ""
|
||||
msgid "Use the link below to confirm your address email."
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:2
|
||||
#: fittrackee/emails/templates/data_export_ready/subject.txt:1
|
||||
msgid "Your archive is ready to be downloaded"
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:3
|
||||
msgid "A download link is available in your account."
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:1
|
||||
msgid "You have requested an export of your account on FitTrackee."
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:2
|
||||
msgid "The archive is now ready to be downloaded from your account."
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:11
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:4
|
||||
msgid "Download your archive"
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:18
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:5
|
||||
msgid ""
|
||||
"If you did not request the export, please change your password "
|
||||
"immediately or contact your administrator if your account is locked."
|
||||
msgstr ""
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/body.html:2
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/subject.txt:1
|
||||
msgid "Email changed"
|
||||
|
@ -7,8 +7,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-03 07:58+0200\n"
|
||||
"PO-Revision-Date: 2022-11-29 00:47+0000\n"
|
||||
"POT-Creation-Date: 2023-03-04 10:33+0100\n"
|
||||
"PO-Revision-Date: 2023-03-05 07:12+0000\n"
|
||||
"Last-Translator: bjornclauw <bjorn.clauw.1@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://hosted.weblate.org/projects/fittrackee/"
|
||||
"fittrackee-api-emails/nl/>\n"
|
||||
@ -17,7 +17,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15-dev\n"
|
||||
"X-Generator: Weblate 4.16.2-dev\n"
|
||||
"Generated-By: Babel 2.11.0\n"
|
||||
|
||||
#: fittrackee/emails/templates/layout.html:215
|
||||
@ -37,8 +37,8 @@ msgid ""
|
||||
"For security, this request was received from a %(operating_system)s "
|
||||
"device using %(browser_name)s."
|
||||
msgstr ""
|
||||
"Voor beveiliging, werd deze aanvraag ontvangen van een %(operating_system)s "
|
||||
"apparaat via %(browser_name)s."
|
||||
"Voor beveiliging, werd deze aanvraag ontvangen van een "
|
||||
"%(operating_system)s apparaat via %(browser_name)s."
|
||||
|
||||
#: fittrackee/emails/templates/layout.html:221
|
||||
#: fittrackee/emails/templates/layout.txt:5
|
||||
@ -80,23 +80,57 @@ msgstr "Verifieer uw email"
|
||||
msgid ""
|
||||
"If this account creation wasn't initiated by you, please ignore this "
|
||||
"email."
|
||||
msgstr ""
|
||||
"Indien u deze account niet hebt aangemaakt, gelieve deze email te negeren."
|
||||
msgstr "Indien u deze account niet hebt aangemaakt, gelieve deze email te negeren."
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.html:22
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:22
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:22
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:24
|
||||
msgid ""
|
||||
"If you're having trouble with the button above, copy and paste the URL "
|
||||
"below into your web browser."
|
||||
msgstr ""
|
||||
"Als u problemen hebt met bovenstaande knop, kopieer en plak de onderstaande "
|
||||
"URL in uw web browser."
|
||||
"Als u problemen hebt met bovenstaande knop, kopieer en plak de "
|
||||
"onderstaande URL in uw web browser."
|
||||
|
||||
#: fittrackee/emails/templates/account_confirmation/body.txt:2
|
||||
msgid "Use the link below to confirm your address email."
|
||||
msgstr "Gebruik de onderstaande link om uw email adres te bevestigen."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:2
|
||||
#: fittrackee/emails/templates/data_export_ready/subject.txt:1
|
||||
msgid "Your archive is ready to be downloaded"
|
||||
msgstr "Uw archief is klaar om te downloaden"
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:3
|
||||
msgid "A download link is available in your account."
|
||||
msgstr "Een download link is beschikbaar in uw account."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:1
|
||||
msgid "You have requested an export of your account on FitTrackee."
|
||||
msgstr "U hebt een export van uw account aangevraagd op FitTrackee."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:4
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:2
|
||||
msgid "The archive is now ready to be downloaded from your account."
|
||||
msgstr "Het archief kan nu gedownload worden van uw account."
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:11
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:4
|
||||
msgid "Download your archive"
|
||||
msgstr "Download uw archief"
|
||||
|
||||
#: fittrackee/emails/templates/data_export_ready/body.html:18
|
||||
#: fittrackee/emails/templates/data_export_ready/body.txt:5
|
||||
msgid ""
|
||||
"If you did not request the export, please change your password "
|
||||
"immediately or contact your administrator if your account is locked."
|
||||
msgstr ""
|
||||
"Als u deze export niet hebt aangevraagd, gelieve uw wachtwoord onmiddelijk "
|
||||
"te veranderen of neem contact op met uw administrator als uw account is "
|
||||
"vergrendeld."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/body.html:2
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/subject.txt:1
|
||||
msgid "Email changed"
|
||||
@ -112,8 +146,8 @@ msgid ""
|
||||
"You recently requested to change your email address for your FitTrackee "
|
||||
"account to:"
|
||||
msgstr ""
|
||||
"U hebt een aanvraag ingediend om uw email adres voor uw FitTrackee account "
|
||||
"te veranderen naar:"
|
||||
"U hebt een aanvraag ingediend om uw email adres voor uw FitTrackee "
|
||||
"account te veranderen naar:"
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/body.html:18
|
||||
#: fittrackee/emails/templates/email_update_to_current_email/body.txt:4
|
||||
@ -121,9 +155,9 @@ msgid ""
|
||||
"If this email change wasn't initiated by you, please change your password"
|
||||
" immediately or contact your administrator if your account is locked."
|
||||
msgstr ""
|
||||
"Indien deze verandering niet door u werd aangevraagd, gelieve uw wachtwoord "
|
||||
"dan onmiddellijk te veranderen of contacteer uw administrator als uw account "
|
||||
"is vergrendeld."
|
||||
"Indien deze verandering niet door u werd aangevraagd, gelieve uw "
|
||||
"wachtwoord dan onmiddellijk te veranderen of contacteer uw administrator "
|
||||
"als uw account is vergrendeld."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.html:2
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/subject.txt:1
|
||||
@ -151,8 +185,8 @@ msgstr "Gebruik de onderstaande knop om dit adres te bevestigen."
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.txt:7
|
||||
msgid "If this email change wasn't initiated by you, please ignore this email."
|
||||
msgstr ""
|
||||
"Indien u deze email aanpassing niet hebt aangevraagd, gelieve deze email te "
|
||||
"negeren."
|
||||
"Indien u deze email aanpassing niet hebt aangevraagd, gelieve deze email "
|
||||
"te negeren."
|
||||
|
||||
#: fittrackee/emails/templates/email_update_to_new_email/body.txt:2
|
||||
msgid "Use the link below to confirm this address."
|
||||
@ -179,9 +213,9 @@ msgid ""
|
||||
"password immediately or contact your administrator if your account is "
|
||||
"locked."
|
||||
msgstr ""
|
||||
"Indien de aanpassing van uw wachtwoord niet door u werd aangevraagd, gelieve "
|
||||
"uw wachtwoord dan onmiddellijk te veranderen of contacteer uw administrator "
|
||||
"als uw account is vergrendeld."
|
||||
"Indien de aanpassing van uw wachtwoord niet door u werd aangevraagd, "
|
||||
"gelieve uw wachtwoord dan onmiddellijk te veranderen of contacteer uw "
|
||||
"administrator als uw account is vergrendeld."
|
||||
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:2
|
||||
#: fittrackee/emails/templates/password_reset_request/subject.txt:1
|
||||
@ -194,8 +228,8 @@ msgid ""
|
||||
"Use this link to reset your password. The link is only valid for "
|
||||
"%(expiration_delay)s."
|
||||
msgstr ""
|
||||
"Gebruik deze link om uw wachtwoord te resetten. De link is enkel geldig voor "
|
||||
"%(expiration_delay)s."
|
||||
"Gebruik deze link om uw wachtwoord te resetten. De link is enkel geldig "
|
||||
"voor %(expiration_delay)s."
|
||||
|
||||
#: fittrackee/emails/templates/password_reset_request/body.html:4
|
||||
#: fittrackee/emails/templates/password_reset_request/body.txt:1
|
||||
@ -225,8 +259,8 @@ msgstr "Reset uw wachtwoord"
|
||||
#: fittrackee/emails/templates/password_reset_request/body.txt:7
|
||||
msgid "If you did not request a password reset, please ignore this email."
|
||||
msgstr ""
|
||||
"Als u geen aanvraag hebt ingediend om uw wachtwoord aan te passen, gelieve "
|
||||
"dan deze mail te negeren."
|
||||
"Als u geen aanvraag hebt ingediend om uw wachtwoord aan te passen, "
|
||||
"gelieve dan deze mail te negeren."
|
||||
|
||||
#: fittrackee/emails/templates/password_reset_request/body.txt:1
|
||||
msgid "Use the link below to reset it."
|
||||
|
@ -0,0 +1,67 @@
|
||||
"""add privacy policy
|
||||
|
||||
Revision ID: 374a670efe23
|
||||
Revises: 0f375c44e659
|
||||
Create Date: 2023-02-25 11:08:08.977217
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '374a670efe23'
|
||||
down_revision = '0f375c44e659'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
with op.batch_alter_table('app_config', schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column('privacy_policy_date', sa.DateTime(), nullable=True))
|
||||
batch_op.add_column(sa.Column('privacy_policy', sa.Text(), nullable=True))
|
||||
batch_op.add_column(sa.Column('about', sa.Text(), nullable=True))
|
||||
|
||||
with op.batch_alter_table('users', schema=None) as batch_op:
|
||||
batch_op.add_column(sa.Column('accepted_policy_date', sa.DateTime(), nullable=True))
|
||||
batch_op.alter_column('date_format',
|
||||
existing_type=sa.VARCHAR(length=50),
|
||||
nullable=True)
|
||||
|
||||
op.create_table('users_data_export',
|
||||
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
||||
sa.Column('user_id', sa.Integer(), nullable=True),
|
||||
sa.Column('created_at', sa.DateTime(), nullable=False),
|
||||
sa.Column('updated_at', sa.DateTime(), nullable=True),
|
||||
sa.Column('completed', sa.Boolean(), nullable=False),
|
||||
sa.Column('file_name', sa.String(length=100), nullable=True),
|
||||
sa.Column('file_size', sa.Integer(), nullable=True),
|
||||
sa.ForeignKeyConstraint(['user_id'], ['users.id'], ondelete='CASCADE'),
|
||||
sa.PrimaryKeyConstraint('id')
|
||||
)
|
||||
with op.batch_alter_table('users_data_export', schema=None) as batch_op:
|
||||
batch_op.create_index(batch_op.f('ix_users_data_export_user_id'), ['user_id'], unique=True)
|
||||
|
||||
# ### end Alembic commands ###
|
||||
|
||||
|
||||
def downgrade():
|
||||
# ### commands auto generated by Alembic - please adjust! ###
|
||||
with op.batch_alter_table('users_data_export', schema=None) as batch_op:
|
||||
batch_op.drop_index(batch_op.f('ix_users_data_export_user_id'))
|
||||
|
||||
op.drop_table('users_data_export')
|
||||
|
||||
with op.batch_alter_table('users', schema=None) as batch_op:
|
||||
batch_op.alter_column('date_format',
|
||||
existing_type=sa.VARCHAR(length=50),
|
||||
nullable=False)
|
||||
batch_op.drop_column('accepted_policy_date')
|
||||
|
||||
with op.batch_alter_table('app_config', schema=None) as batch_op:
|
||||
batch_op.drop_column('about')
|
||||
batch_op.drop_column('privacy_policy')
|
||||
batch_op.drop_column('privacy_policy_date')
|
||||
|
||||
# ### end Alembic commands ###
|
@ -1,9 +1,12 @@
|
||||
import json
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
from unittest.mock import Mock, patch
|
||||
|
||||
import pytest
|
||||
from flask import Flask
|
||||
|
||||
from fittrackee import db
|
||||
from fittrackee.application.models import AppConfig
|
||||
from fittrackee.users.models import User
|
||||
|
||||
@ -296,7 +299,7 @@ class TestUpdateConfig(ApiTestCaseMixin):
|
||||
@pytest.mark.parametrize(
|
||||
'input_description,input_email', [('input string', ''), ('None', None)]
|
||||
)
|
||||
def test_it_empties_error_if_admin_contact_is_an_empty(
|
||||
def test_it_empties_administator_contact(
|
||||
self,
|
||||
app: Flask,
|
||||
user_1_admin: User,
|
||||
@ -325,6 +328,108 @@ class TestUpdateConfig(ApiTestCaseMixin):
|
||||
assert 'success' in data['status']
|
||||
assert data['data']['admin_contact'] is None
|
||||
|
||||
def test_it_updates_about(
|
||||
self,
|
||||
app: Flask,
|
||||
user_1_admin: User,
|
||||
) -> None:
|
||||
client, auth_token = self.get_test_client_and_auth_token(
|
||||
app, user_1_admin.email
|
||||
)
|
||||
about = self.random_string()
|
||||
|
||||
response = client.patch(
|
||||
'/api/config',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(about=about)),
|
||||
headers=dict(Authorization=f'Bearer {auth_token}'),
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
data = json.loads(response.data.decode())
|
||||
assert 'success' in data['status']
|
||||
assert data['data']['about'] == about
|
||||
|
||||
def test_it_empties_about_text_when_text_is_an_empty_string(
|
||||
self, app: Flask, user_1_admin: User
|
||||
) -> None:
|
||||
app_config = AppConfig.query.first()
|
||||
app_config.about = self.random_string()
|
||||
db.session.commit()
|
||||
client, auth_token = self.get_test_client_and_auth_token(
|
||||
app, user_1_admin.email
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/config',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(about='')),
|
||||
headers=dict(Authorization=f'Bearer {auth_token}'),
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
data = json.loads(response.data.decode())
|
||||
assert 'success' in data['status']
|
||||
assert data['data']['about'] is None
|
||||
|
||||
def test_it_updates_privacy_policy(
|
||||
self,
|
||||
app: Flask,
|
||||
user_1_admin: User,
|
||||
) -> None:
|
||||
client, auth_token = self.get_test_client_and_auth_token(
|
||||
app, user_1_admin.email
|
||||
)
|
||||
privacy_policy = self.random_string()
|
||||
privacy_policy_date = datetime.utcnow()
|
||||
|
||||
with patch(
|
||||
'fittrackee.application.app_config.datetime'
|
||||
) as datetime_mock:
|
||||
datetime_mock.utcnow = Mock(return_value=privacy_policy_date)
|
||||
response = client.patch(
|
||||
'/api/config',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(privacy_policy=privacy_policy)),
|
||||
headers=dict(Authorization=f'Bearer {auth_token}'),
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
data = json.loads(response.data.decode())
|
||||
assert 'success' in data['status']
|
||||
assert data['data']['privacy_policy'] == privacy_policy
|
||||
assert data['data'][
|
||||
'privacy_policy_date'
|
||||
] == privacy_policy_date.strftime('%a, %d %b %Y %H:%M:%S GMT')
|
||||
|
||||
@pytest.mark.parametrize('input_privacy_policy', ['', None])
|
||||
def test_it_empties_privacy_policy_date_when_no_privacy_policy(
|
||||
self,
|
||||
app: Flask,
|
||||
user_1_admin: User,
|
||||
input_privacy_policy: Optional[str],
|
||||
) -> None:
|
||||
app_config = AppConfig.query.first()
|
||||
app_config.privacy_policy = self.random_string()
|
||||
app_config.privacy_policy_date = datetime.utcnow()
|
||||
db.session.commit()
|
||||
client, auth_token = self.get_test_client_and_auth_token(
|
||||
app, user_1_admin.email
|
||||
)
|
||||
|
||||
response = client.patch(
|
||||
'/api/config',
|
||||
content_type='application/json',
|
||||
data=json.dumps(dict(privacy_policy=input_privacy_policy)),
|
||||
headers=dict(Authorization=f'Bearer {auth_token}'),
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
data = json.loads(response.data.decode())
|
||||
assert 'success' in data['status']
|
||||
assert data['data']['privacy_policy'] is None
|
||||
assert data['data']['privacy_policy_date'] is None
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'client_scope, can_access',
|
||||
[
|
||||
|
@ -1,3 +1,5 @@
|
||||
from datetime import datetime
|
||||
|
||||
import pytest
|
||||
from flask import Flask
|
||||
|
||||
@ -5,6 +7,8 @@ from fittrackee import VERSION
|
||||
from fittrackee.application.models import AppConfig
|
||||
from fittrackee.users.models import User
|
||||
|
||||
from ..utils import random_string
|
||||
|
||||
|
||||
class TestConfigModel:
|
||||
def test_application_config(
|
||||
@ -88,3 +92,26 @@ class TestConfigModel:
|
||||
serialized_app_config['weather_provider']
|
||||
== expected_weather_provider
|
||||
)
|
||||
|
||||
def test_it_returns_privacy_policy(self, app: Flask) -> None:
|
||||
app_config = AppConfig.query.first()
|
||||
privacy_policy = random_string()
|
||||
privacy_policy_date = datetime.now()
|
||||
app_config.privacy_policy = privacy_policy
|
||||
app_config.privacy_policy_date = privacy_policy_date
|
||||
|
||||
serialized_app_config = app_config.serialize()
|
||||
|
||||
assert serialized_app_config["privacy_policy"] == privacy_policy
|
||||
assert (
|
||||
serialized_app_config["privacy_policy_date"] == privacy_policy_date
|
||||
)
|
||||
|
||||
def test_it_returns_about(self, app: Flask) -> None:
|
||||
app_config = AppConfig.query.first()
|
||||
about = random_string()
|
||||
app_config.about = about
|
||||
|
||||
serialized_app_config = app_config.serialize()
|
||||
|
||||
assert serialized_app_config["about"] == about
|
||||
|
@ -0,0 +1,167 @@
|
||||
# flake8: noqa
|
||||
|
||||
expected_en_text_body = """Hi test,
|
||||
|
||||
You have requested an export of your account on FitTrackee.
|
||||
The archive is now ready to be downloaded from your account.
|
||||
|
||||
Download your archive: http://localhost/profile/edit/account
|
||||
If you did not request the export, please change your password immediately or contact your administrator if your account is locked.
|
||||
|
||||
Thanks,
|
||||
The FitTrackee Team
|
||||
http://localhost"""
|
||||
|
||||
expected_fr_text_body = """Bonjour test,
|
||||
|
||||
Vous avez demandé un export des données de votre compte sur FitTrackee.
|
||||
L'archive est maintenant prête à être téléchargée depuis votre compte.
|
||||
|
||||
Télécharger votre archive: http://localhost/profile/edit/account
|
||||
Si vous n'êtes pas à l'origine de cette demande, veuillez changer votre mot de passe immédiatement ou contacter l'administrateur si votre compte est bloqué.
|
||||
|
||||
Merci,
|
||||
L'équipe FitTrackee
|
||||
http://localhost"""
|
||||
|
||||
expected_en_html_body = """ <body>
|
||||
<span class="preheader">A download link is available in your account.</span>
|
||||
<table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table class="email-content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="email-masthead">
|
||||
<a href="http://localhost" class="f-fallback email-masthead-name">
|
||||
FitTrackee
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="email-body" width="100%" cellpadding="0" cellspacing="0">
|
||||
<table class="email-body-inner" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="content-cell">
|
||||
<div class="f-fallback">
|
||||
<h1>Hi test,</h1>
|
||||
<p>You have requested an export of your account on FitTrackee. The archive is now ready to be downloaded from your account.</p>
|
||||
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="http://localhost/profile/edit/account" class="f-fallback button button--green" target="_blank">Download your archive</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
If you did not request the export, please change your password immediately or contact your administrator if your account is locked.
|
||||
</p>
|
||||
<p>Thanks,
|
||||
<br>The FitTrackee Team</p>
|
||||
<table class="body-sub" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
<p class="f-fallback sub">If you're having trouble with the button above, copy and paste the URL below into your web browser.</p>
|
||||
<p class="f-fallback sub">http://localhost/profile/edit/account</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="email-footer" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="content-cell" align="center">
|
||||
<p class="f-fallback sub align-center">© FitTrackee.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>"""
|
||||
|
||||
expected_fr_html_body = """ <body>
|
||||
<span class="preheader">Un lien de téléchargement est disponible dans votre compte.</span>
|
||||
<table class="email-wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table class="email-content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="email-masthead">
|
||||
<a href="http://localhost" class="f-fallback email-masthead-name">
|
||||
FitTrackee
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="email-body" width="100%" cellpadding="0" cellspacing="0">
|
||||
<table class="email-body-inner" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="content-cell">
|
||||
<div class="f-fallback">
|
||||
<h1>Bonjour test,</h1>
|
||||
<p>Vous avez demandé un export des données de votre compte sur FitTrackee. L'archive est maintenant prête à être téléchargée depuis votre compte.</p>
|
||||
<table class="body-action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<table width="100%" border="0" cellspacing="0" cellpadding="0" role="presentation">
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="http://localhost/profile/edit/account" class="f-fallback button button--green" target="_blank">Télécharger votre archive</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<p>
|
||||
Si vous n'êtes pas à l'origine de cette demande, veuillez changer votre mot de passe immédiatement ou contacter l'administrateur si votre compte est bloqué.
|
||||
</p>
|
||||
<p>Merci,
|
||||
<br>L'équipe FitTrackee</p>
|
||||
<table class="body-sub" role="presentation">
|
||||
<tr>
|
||||
<td>
|
||||
<p class="f-fallback sub">Si vous avez des problèmes avec le bouton, vous pouvez copier et coller le lien suivant dans votre navigateur.</p>
|
||||
<p class="f-fallback sub">http://localhost/profile/edit/account</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table class="email-footer" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
|
||||
<tr>
|
||||
<td class="content-cell" align="center">
|
||||
<p class="f-fallback sub align-center">© FitTrackee.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>"""
|
89
fittrackee/tests/emails/test_email_data_export_ready.py
Normal file
@ -0,0 +1,89 @@
|
||||
import pytest
|
||||
from flask import Flask
|
||||
|
||||
from fittrackee.emails.email import EmailTemplate
|
||||
|
||||
from .template_results.email_data_export_ready import (
|
||||
expected_en_html_body,
|
||||
expected_en_text_body,
|
||||
expected_fr_html_body,
|
||||
expected_fr_text_body,
|
||||
)
|
||||
|
||||
|
||||
class TestEmailTemplateForDataExport:
|
||||
EMAIL_DATA = {
|
||||
'username': 'test',
|
||||
'account_url': 'http://localhost/profile/edit/account',
|
||||
'fittrackee_url': 'http://localhost',
|
||||
}
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'lang, expected_subject',
|
||||
[
|
||||
('en', 'FitTrackee - Your archive is ready to be downloaded'),
|
||||
('fr', 'FitTrackee - Votre archive est prête à être téléchargée'),
|
||||
],
|
||||
)
|
||||
def test_it_gets_subject(
|
||||
self, app: Flask, lang: str, expected_subject: str
|
||||
) -> None:
|
||||
email_template = EmailTemplate(
|
||||
app.config['TEMPLATES_FOLDER'],
|
||||
app.config['TRANSLATIONS_FOLDER'],
|
||||
app.config['LANGUAGES'],
|
||||
)
|
||||
|
||||
subject = email_template.get_content(
|
||||
'data_export_ready', lang, 'subject.txt', {}
|
||||
)
|
||||
|
||||
assert subject == expected_subject
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'lang, expected_text_body',
|
||||
[
|
||||
('en', expected_en_text_body),
|
||||
('fr', expected_fr_text_body),
|
||||
],
|
||||
)
|
||||
def test_it_gets_text_body(
|
||||
self, app: Flask, lang: str, expected_text_body: str
|
||||
) -> None:
|
||||
email_template = EmailTemplate(
|
||||
app.config['TEMPLATES_FOLDER'],
|
||||
app.config['TRANSLATIONS_FOLDER'],
|
||||
app.config['LANGUAGES'],
|
||||
)
|
||||
|
||||
text_body = email_template.get_content(
|
||||
'data_export_ready', lang, 'body.txt', self.EMAIL_DATA
|
||||
)
|
||||
|
||||
assert text_body == expected_text_body
|
||||
|
||||
def test_it_gets_en_html_body(self, app: Flask) -> None:
|
||||
email_template = EmailTemplate(
|
||||
app.config['TEMPLATES_FOLDER'],
|
||||
app.config['TRANSLATIONS_FOLDER'],
|
||||
app.config['LANGUAGES'],
|
||||
)
|
||||
|
||||
text_body = email_template.get_content(
|
||||
'data_export_ready', 'en', 'body.html', self.EMAIL_DATA
|
||||
)
|
||||
|
||||
assert expected_en_html_body in text_body
|
||||
|
||||
def test_it_gets_fr_html_body(self, app: Flask) -> None:
|
||||
email_template = EmailTemplate(
|
||||
app.config['TEMPLATES_FOLDER'],
|
||||
app.config['TRANSLATIONS_FOLDER'],
|
||||
app.config['LANGUAGES'],
|
||||
)
|
||||
|
||||
text_body = email_template.get_content(
|
||||
'data_export_ready', 'fr', 'body.html', self.EMAIL_DATA
|
||||
)
|
||||
|
||||
assert expected_fr_html_body in text_body
|