Merge branch 'release-v0.6.0'
							
								
								
									
										34
									
								
								.github/workflows/.tests-javascript.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					name: Javascript CI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  push:
 | 
				
			||||||
 | 
					    paths: ['fittrackee_client/**']
 | 
				
			||||||
 | 
					  pull_request:
 | 
				
			||||||
 | 
					    paths: ['fittrackee_client/**']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env:
 | 
				
			||||||
 | 
					  working-directory: fittrackee_client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  javascript:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					      - name: Use Node.js 17.x
 | 
				
			||||||
 | 
					        uses: actions/setup-node@v2
 | 
				
			||||||
 | 
					        with:
 | 
				
			||||||
 | 
					          node-version: "17.x"
 | 
				
			||||||
 | 
					      - name: Install yarn and dependencies
 | 
				
			||||||
 | 
					        working-directory: ${{env.working-directory}}
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          npm install --global yarn
 | 
				
			||||||
 | 
					          yarn install
 | 
				
			||||||
 | 
					      - name: Lint
 | 
				
			||||||
 | 
					        working-directory: ${{env.working-directory}}
 | 
				
			||||||
 | 
					        run: yarn lint
 | 
				
			||||||
 | 
					      - name: Tests
 | 
				
			||||||
 | 
					        working-directory: ${{env.working-directory}}
 | 
				
			||||||
 | 
					        run: yarn test:unit
 | 
				
			||||||
 | 
					      - name: Build
 | 
				
			||||||
 | 
					        working-directory: ${{env.working-directory}}
 | 
				
			||||||
 | 
					        run: yarn build
 | 
				
			||||||
							
								
								
									
										95
									
								
								.github/workflows/.tests-python.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,95 @@
 | 
				
			|||||||
 | 
					name: Python CI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on:
 | 
				
			||||||
 | 
					  push:
 | 
				
			||||||
 | 
					    paths-ignore: ['docs/**', 'docsrc/**', 'fittrackee_client/**', '*.md']
 | 
				
			||||||
 | 
					  pull_request:
 | 
				
			||||||
 | 
					    paths-ignore: ['docs/**', 'docsrc/**', 'fittrackee_client/**', '*.md']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					env:
 | 
				
			||||||
 | 
					  APP_SETTINGS: fittrackee.config.TestingConfig
 | 
				
			||||||
 | 
					  DATABASE_TEST_URL: "postgresql://fittrackee:fittrackee@postgres:5432/fittrackee_test"
 | 
				
			||||||
 | 
					  EMAIL_URL: "smtp://none:none@0.0.0.0:1025"
 | 
				
			||||||
 | 
					  FLASK_APP: fittrackee/__main__.py
 | 
				
			||||||
 | 
					  SENDER_EMAIL: fittrackee@example.com
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					  python:
 | 
				
			||||||
 | 
					    name: python ${{ matrix.python-version }}
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    container: python:${{ matrix.python-version }}
 | 
				
			||||||
 | 
					    services:
 | 
				
			||||||
 | 
					      postgres:
 | 
				
			||||||
 | 
					        image: postgres:latest
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          POSTGRES_DB: fittrackee_test
 | 
				
			||||||
 | 
					          POSTGRES_USER: fittrackee
 | 
				
			||||||
 | 
					          POSTGRES_PASSWORD: fittrackee
 | 
				
			||||||
 | 
					        options: >-
 | 
				
			||||||
 | 
					          --health-cmd pg_isready
 | 
				
			||||||
 | 
					          --health-interval 10s
 | 
				
			||||||
 | 
					          --health-timeout 5s
 | 
				
			||||||
 | 
					          --health-retries 5
 | 
				
			||||||
 | 
					    strategy:
 | 
				
			||||||
 | 
					      matrix:
 | 
				
			||||||
 | 
					        python-version:  [ "3.7", "3.8", "3.9", "3.10" ]
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					      - name: Install Poetry and Dependencies
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          python -m pip install --upgrade pip
 | 
				
			||||||
 | 
					          pip install --quiet poetry
 | 
				
			||||||
 | 
					          poetry config virtualenvs.create false
 | 
				
			||||||
 | 
					          poetry install --no-interaction --quiet
 | 
				
			||||||
 | 
					      - name: Lint
 | 
				
			||||||
 | 
					        if: matrix.python-version == '3.10'
 | 
				
			||||||
 | 
					        run: pytest --flake8 --isort --black -m "flake8 or isort or black" fittrackee e2e --ignore=fittrackee/migrations -p no:warnings
 | 
				
			||||||
 | 
					      - name: Mypy
 | 
				
			||||||
 | 
					        if: matrix.python-version == '3.10'
 | 
				
			||||||
 | 
					        run: mypy fittrackee
 | 
				
			||||||
 | 
					      - name: Pytest
 | 
				
			||||||
 | 
					        run: pytest fittrackee -p no:warnings --cov fittrackee --cov-report term-missing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  end2end:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    needs: ["python"]
 | 
				
			||||||
 | 
					    container: python:3.10
 | 
				
			||||||
 | 
					    services:
 | 
				
			||||||
 | 
					      postgres:
 | 
				
			||||||
 | 
					        image: postgres:latest
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          POSTGRES_DB: fittrackee_test
 | 
				
			||||||
 | 
					          POSTGRES_USER: fittrackee
 | 
				
			||||||
 | 
					          POSTGRES_PASSWORD: fittrackee
 | 
				
			||||||
 | 
					        options: >-
 | 
				
			||||||
 | 
					          --health-cmd pg_isready
 | 
				
			||||||
 | 
					          --health-interval 10s
 | 
				
			||||||
 | 
					          --health-timeout 5s
 | 
				
			||||||
 | 
					          --health-retries 5
 | 
				
			||||||
 | 
					      selenium:
 | 
				
			||||||
 | 
					        image: selenium/standalone-firefox
 | 
				
			||||||
 | 
					      mailhog:
 | 
				
			||||||
 | 
					        image: mailhog/mailhog:latest
 | 
				
			||||||
 | 
					      redis:
 | 
				
			||||||
 | 
					        image: redis:latest
 | 
				
			||||||
 | 
					    env:
 | 
				
			||||||
 | 
					      APP_SETTINGS: fittrackee.config.End2EndTestingConfig
 | 
				
			||||||
 | 
					      EMAIL_URL: "smtp://mailhog:1025"
 | 
				
			||||||
 | 
					      REDIS_URL: "redis://redis:6379"
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					      - name: Install Poetry and Dependencies
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          python -m pip install --upgrade pip
 | 
				
			||||||
 | 
					          pip install --quiet poetry
 | 
				
			||||||
 | 
					          poetry config virtualenvs.create false
 | 
				
			||||||
 | 
					          poetry install --no-interaction --quiet
 | 
				
			||||||
 | 
					      - name: Run migrations
 | 
				
			||||||
 | 
					        run: flask db upgrade --directory fittrackee/migrations
 | 
				
			||||||
 | 
					      - name: Start application and run tests with Selenium
 | 
				
			||||||
 | 
					        run: |
 | 
				
			||||||
 | 
					          setsid nohup flask run --with-threads -h 0.0.0.0 -p 5000 >> nohup.out 2>&1 &
 | 
				
			||||||
 | 
					          export TEST_APP_URL=http://$(hostname --ip-address):5000
 | 
				
			||||||
 | 
					          sleep 5
 | 
				
			||||||
 | 
					          nohup flask worker --processes=1 >> nohup.out 2>&1 &
 | 
				
			||||||
 | 
					          pytest e2e --driver Remote --capability browserName firefox --host selenium --port 4444
 | 
				
			||||||
							
								
								
									
										100
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						@@ -1,100 +0,0 @@
 | 
				
			|||||||
image: python:3.9
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
variables:
 | 
					 | 
				
			||||||
  POSTGRES_DB: fittrackee_test
 | 
					 | 
				
			||||||
  POSTGRES_USER: fittrackee
 | 
					 | 
				
			||||||
  POSTGRES_PASSWORD: fittrackee
 | 
					 | 
				
			||||||
  POSTGRES_HOST: postgres
 | 
					 | 
				
			||||||
  APP_SETTINGS: fittrackee.config.TestingConfig
 | 
					 | 
				
			||||||
  DATABASE_TEST_URL: postgresql://fittrackee:fittrackee@postgres:5432/fittrackee_test
 | 
					 | 
				
			||||||
  EMAIL_URL: smtp://none:none@0.0.0.0:1025
 | 
					 | 
				
			||||||
  FLASK_APP: fittrackee/__main__.py
 | 
					 | 
				
			||||||
  SENDER_EMAIL: fittrackee@example.com
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
services:
 | 
					 | 
				
			||||||
  - name: postgres:latest
 | 
					 | 
				
			||||||
    alias: postgres
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
stages:
 | 
					 | 
				
			||||||
  - lint
 | 
					 | 
				
			||||||
  - tests
 | 
					 | 
				
			||||||
  - selenium
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.python:
 | 
					 | 
				
			||||||
  stage: tests
 | 
					 | 
				
			||||||
  before_script:
 | 
					 | 
				
			||||||
    - pip install --quiet poetry
 | 
					 | 
				
			||||||
    - poetry config virtualenvs.create false
 | 
					 | 
				
			||||||
    - poetry install --no-interaction --quiet
 | 
					 | 
				
			||||||
  script:
 | 
					 | 
				
			||||||
    - pytest fittrackee -p no:warnings --cov fittrackee --cov-report term-missing
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.javascript:
 | 
					 | 
				
			||||||
  stage: tests
 | 
					 | 
				
			||||||
  before_script:
 | 
					 | 
				
			||||||
    - apt-get update && apt-get install -y nodejs npm
 | 
					 | 
				
			||||||
    - npm install --global yarn
 | 
					 | 
				
			||||||
    - cd fittrackee_client
 | 
					 | 
				
			||||||
    - yarn install
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
python-lint:
 | 
					 | 
				
			||||||
  stage: lint
 | 
					 | 
				
			||||||
  extends: .python
 | 
					 | 
				
			||||||
  script:
 | 
					 | 
				
			||||||
    - pytest --flake8 --isort --black -m "flake8 or isort or black" fittrackee e2e --ignore=fittrackee/migrations
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
python-type-check:
 | 
					 | 
				
			||||||
  stage: lint
 | 
					 | 
				
			||||||
  extends: .python
 | 
					 | 
				
			||||||
  script:
 | 
					 | 
				
			||||||
    - mypy fittrackee
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
eslint:
 | 
					 | 
				
			||||||
  stage: lint
 | 
					 | 
				
			||||||
  extends: .javascript
 | 
					 | 
				
			||||||
  script:
 | 
					 | 
				
			||||||
    - yarn lint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
python-3.7:
 | 
					 | 
				
			||||||
  extends: .python
 | 
					 | 
				
			||||||
  image: python:3.7
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
python-3.8:
 | 
					 | 
				
			||||||
  extends: .python
 | 
					 | 
				
			||||||
  image: python:3.8
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
python-3.9:
 | 
					 | 
				
			||||||
  extends: .python
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
python-3.10:
 | 
					 | 
				
			||||||
  extends: .python
 | 
					 | 
				
			||||||
  image: python:3.10
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
typescript:
 | 
					 | 
				
			||||||
  stage: tests
 | 
					 | 
				
			||||||
  before_script:
 | 
					 | 
				
			||||||
    - apt-get update && apt-get install -y nodejs npm
 | 
					 | 
				
			||||||
    - npm install --global yarn
 | 
					 | 
				
			||||||
    - cd fittrackee_client
 | 
					 | 
				
			||||||
    - yarn install
 | 
					 | 
				
			||||||
  script:
 | 
					 | 
				
			||||||
    - yarn test:unit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
firefox:
 | 
					 | 
				
			||||||
  stage: selenium
 | 
					 | 
				
			||||||
  services:
 | 
					 | 
				
			||||||
    - name: postgres:latest
 | 
					 | 
				
			||||||
      alias: postgres
 | 
					 | 
				
			||||||
    - name: selenium/standalone-firefox
 | 
					 | 
				
			||||||
      alias: selenium
 | 
					 | 
				
			||||||
  before_script:
 | 
					 | 
				
			||||||
    - pip install --quiet poetry
 | 
					 | 
				
			||||||
    - poetry config virtualenvs.create false
 | 
					 | 
				
			||||||
    - poetry install --no-interaction --quiet
 | 
					 | 
				
			||||||
    - flask db upgrade --directory fittrackee/migrations
 | 
					 | 
				
			||||||
    - setsid nohup flask run --with-threads -h 0.0.0.0 -p 5000 >> nohup.out 2>&1 &
 | 
					 | 
				
			||||||
    - export TEST_APP_URL=http://$(hostname --ip-address):5000
 | 
					 | 
				
			||||||
    - sleep 5
 | 
					 | 
				
			||||||
  script:
 | 
					 | 
				
			||||||
    - pytest e2e --driver Remote --capability browserName firefox --host selenium --port 4444
 | 
					 | 
				
			||||||
							
								
								
									
										30
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						@@ -1,5 +1,35 @@
 | 
				
			|||||||
# Change log
 | 
					# Change log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Version 0.6.0 (2022/03/27)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This version introduces some changes on [user registration](https://samr1.github.io/FitTrackee/features.html#account-preferences).  
 | 
				
			||||||
 | 
					From now on, a user needs to confirm his account after registration (an email with confirmation instructions is sent after registration).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Issues Closed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [#155](https://github.com/SamR1/FitTrackee/issues/155) -  Improve user registration
 | 
				
			||||||
 | 
					* [#106](https://github.com/SamR1/FitTrackee/issues/106) -  Allow user to update email
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Bugs Fixed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [#169](https://github.com/SamR1/FitTrackee/issues/169) -  user picture is not refreshed after update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Pull Requests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Bugs Fixed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [#161](https://github.com/SamR1/FitTrackee/pull/161) - Minor translation issue on 'Farthest'
 | 
				
			||||||
 | 
					* [#160](https://github.com/SamR1/FitTrackee/pull/160) - Minor translation issue on APP_ERROR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Thanks to @Fmstrat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In this release 3 issues were closed.  
 | 
				
			||||||
 | 
					**Note:** This release contains database migration (see upgrade instructions in [documentation](https://samr1.github.io/FitTrackee/installation.html#upgrade))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Version 0.5.7 (2022/02/13)
 | 
					## Version 0.5.7 (2022/02/13)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This release contains several fixes including security fixes.  
 | 
					This release contains several fixes including security fixes.  
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										76
									
								
								CONTRIBUTING.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,76 @@
 | 
				
			|||||||
 | 
					# Contributing to FitTrackee
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					First off, thank you for your interest in contributing!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Report issues, ask for features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* If a bug is a **security vulnerability**, please refer to [security policy](https://github.com/SamR1/FitTrackee/blob/master/SECURITY.md).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Ensure an issue was not **already opened** by searching on **GitHub** under [Issues](https://github.com/SamR1/FitTrackee/issues). 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* If not, [open a new one](https://github.com/SamR1/FitTrackee/issues/new) with a descriptive title and provide a description.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Contributing Code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Project repository
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The **GitHub** repository contains:
 | 
				
			||||||
 | 
					- source code (note that the repository also includes client build),
 | 
				
			||||||
 | 
					- tests,
 | 
				
			||||||
 | 
					- documentation (source and build).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### How to install FitTrackee
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					see [Installations instructions](https://samr1.github.io/FitTrackee/installation.html)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Pull Requests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Please make your changes from the development branch (`dev`).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Fork the repository (see [GitHub instructions](https://docs.github.com/en/get-started/quickstart/contributing-to-projects))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Implement your feature.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* If your changes need a database migration:
 | 
				
			||||||
 | 
					  * You can generate one after updating models with the following command:
 | 
				
			||||||
 | 
					    ```shell
 | 
				
			||||||
 | 
					    $ make migrate-db
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					  * For data migration, an empty migration can be created with this following command:
 | 
				
			||||||
 | 
					    ```shell
 | 
				
			||||||
 | 
					    $ make revision MIGRATION_MESSAGE="<MIGRATION_MESSAGE>"
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					  * Rename the migration, prefixing with the next number.
 | 
				
			||||||
 | 
					  * To apply database changes:
 | 
				
			||||||
 | 
					    ```shell
 | 
				
			||||||
 | 
					    $ make upgrade-db
 | 
				
			||||||
 | 
					    ```
 | 
				
			||||||
 | 
					  * Check the downgrade migration.
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					* Run checks (lint, typecheck and tests).
 | 
				
			||||||
 | 
					  ```shell
 | 
				
			||||||
 | 
					  $ make check-all
 | 
				
			||||||
 | 
					  ```
 | 
				
			||||||
 | 
					  There are some end-to-end tests, to run them (needs a running application):
 | 
				
			||||||
 | 
					  ```shell
 | 
				
			||||||
 | 
					  $ make test-e2e
 | 
				
			||||||
 | 
					  ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* If needed, add or update tests.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* If needed, update documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* If code contains client changes, you can generate a build, in a **separate commit** to ease code review.
 | 
				
			||||||
 | 
					  ```shell
 | 
				
			||||||
 | 
					  $ make build-client
 | 
				
			||||||
 | 
					  ```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Create your pull request to merge on `dev` branch.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Ensure the pull requests description clearly describes the problem and solution. Include the relevant issue number if applicable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* If needed, [update your branch](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/keeping-your-pull-request-in-sync-with-the-base-branch). 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Thanks.
 | 
				
			||||||
@@ -1,7 +1,5 @@
 | 
				
			|||||||
FROM python:3.9
 | 
					FROM python:3.9
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MAINTAINER SamR1@users.noreply.github.com
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# set working directory
 | 
					# set working directory
 | 
				
			||||||
RUN mkdir -p /usr/src/app
 | 
					RUN mkdir -p /usr/src/app
 | 
				
			||||||
WORKDIR /usr/src/app
 | 
					WORKDIR /usr/src/app
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						@@ -9,7 +9,9 @@ make-p:
 | 
				
			|||||||
build-client: lint-client
 | 
					build-client: lint-client
 | 
				
			||||||
	cd fittrackee_client && $(NPM) build
 | 
						cd fittrackee_client && $(NPM) build
 | 
				
			||||||
 | 
					
 | 
				
			||||||
check-all: lint-all type-check test-python test-client
 | 
					check-all: lint-all type-check test-all
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					check-client: lint-client test-client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
check-python: lint-python type-check test-python
 | 
					check-python: lint-python type-check test-python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -164,10 +166,12 @@ serve-python-dev:
 | 
				
			|||||||
set-admin:
 | 
					set-admin:
 | 
				
			||||||
	$(FLASK) users set-admin $(USERNAME)
 | 
						$(FLASK) users set-admin $(USERNAME)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test-e2e: init-db
 | 
					test-e2e:
 | 
				
			||||||
	$(PYTEST) e2e --driver firefox $(PYTEST_ARGS)
 | 
						$(PYTEST) e2e --driver firefox $(PYTEST_ARGS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test-e2e-client: init-db
 | 
					test-all: test-client test-python
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test-e2e-client:
 | 
				
			||||||
	E2E_ARGS=client $(PYTEST) e2e --driver firefox $(PYTEST_ARGS)
 | 
						E2E_ARGS=client $(PYTEST) e2e --driver firefox $(PYTEST_ARGS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test-python:
 | 
					test-python:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						@@ -9,9 +9,9 @@
 | 
				
			|||||||
[](https://v3.vuejs.org/) 
 | 
					[](https://v3.vuejs.org/) 
 | 
				
			||||||
[](https://www.typescriptlang.org/) 
 | 
					[](https://www.typescriptlang.org/) 
 | 
				
			||||||
[](https://github.com/prettier/prettier)  
 | 
					[](https://github.com/prettier/prettier)  
 | 
				
			||||||
[](https://www.codacy.com/app/SamR1/FitTrackee)
 | 
					
 | 
				
			||||||
[](https://gitlab.com/SamR1/FitTrackee/-/commits/master)
 | 
					
 | 
				
			||||||
[](https://gitlab.com/SamR1/FitTrackee/-/commits/master) <sup><sup>1</sup></sup>
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
---
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -30,8 +30,3 @@ It is also possible to add a workout without a gpx file.
 | 
				
			|||||||
(see [issues](https://github.com/SamR1/FitTrackee/issues) and [documentation](https://samr1.github.io/FitTrackee) for more information)  
 | 
					(see [issues](https://github.com/SamR1/FitTrackee/issues) and [documentation](https://samr1.github.io/FitTrackee) for more information)  
 | 
				
			||||||
 | 
					
 | 
				
			||||||

 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
---
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Notes:  
 | 
					 | 
				
			||||||
_1. Test coverage: only for Python API_
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,3 @@
 | 
				
			|||||||
FROM postgres:13
 | 
					FROM postgres:13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MAINTAINER SamR1@users.noreply.github.com
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
COPY create.sql /docker-entrypoint-initdb.d
 | 
					COPY create.sql /docker-entrypoint-initdb.d
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
# Sphinx build info version 1
 | 
					# 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.
 | 
					# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
 | 
				
			||||||
config: 1e2841616c48de88a07f12a07138022e
 | 
					config: 86584449e132ce97b9b4f0246bf44f7c
 | 
				
			||||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
 | 
					tags: 645f666f9bcd5a90fca523b33c5a78b7
 | 
				
			||||||
 
 | 
				
			|||||||
| 
		 Before Width: | Height: | Size: 537 KiB After Width: | Height: | Size: 538 KiB  | 
| 
		 Before Width: | Height: | Size: 370 KiB After Width: | Height: | Size: 368 KiB  | 
| 
		 Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 201 KiB  | 
| 
		 Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 69 KiB  | 
| 
		 Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 70 KiB  | 
| 
		 Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 102 KiB  | 
@@ -4,8 +4,9 @@ Authentication
 | 
				
			|||||||
.. autoflask:: fittrackee:create_app()
 | 
					.. autoflask:: fittrackee:create_app()
 | 
				
			||||||
   :endpoints:
 | 
					   :endpoints:
 | 
				
			||||||
    auth.register_user,
 | 
					    auth.register_user,
 | 
				
			||||||
 | 
					    auth.confirm_account,
 | 
				
			||||||
 | 
					    auth.resend_account_confirmation_email,
 | 
				
			||||||
    auth.login_user,
 | 
					    auth.login_user,
 | 
				
			||||||
    auth.logout_user,
 | 
					 | 
				
			||||||
    auth.get_authenticated_user_profile,
 | 
					    auth.get_authenticated_user_profile,
 | 
				
			||||||
    auth.edit_user,
 | 
					    auth.edit_user,
 | 
				
			||||||
    auth.edit_user_preferences,
 | 
					    auth.edit_user_preferences,
 | 
				
			||||||
@@ -14,4 +15,6 @@ Authentication
 | 
				
			|||||||
    auth.edit_picture,
 | 
					    auth.edit_picture,
 | 
				
			||||||
    auth.del_picture,
 | 
					    auth.del_picture,
 | 
				
			||||||
    auth.request_password_reset,
 | 
					    auth.request_password_reset,
 | 
				
			||||||
    auth.update_password
 | 
					    auth.update_user_account,
 | 
				
			||||||
 | 
					    auth.update_password,
 | 
				
			||||||
 | 
					    auth.update_email
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,35 @@
 | 
				
			|||||||
# Change log
 | 
					# Change log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Version 0.6.0 (2022/03/27)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This version introduces some changes on [user registration](https://samr1.github.io/FitTrackee/features.html#account-preferences).  
 | 
				
			||||||
 | 
					From now on, a user needs to confirm his account after registration (an email with confirmation instructions is sent after registration).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Issues Closed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Features
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [#155](https://github.com/SamR1/FitTrackee/issues/155) -  Improve user registration
 | 
				
			||||||
 | 
					* [#106](https://github.com/SamR1/FitTrackee/issues/106) -  Allow user to update email
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Bugs Fixed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [#169](https://github.com/SamR1/FitTrackee/issues/169) -  user picture is not refreshed after update
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Pull Requests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Bugs Fixed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [#161](https://github.com/SamR1/FitTrackee/pull/161) - Minor translation issue on 'Farthest'
 | 
				
			||||||
 | 
					* [#160](https://github.com/SamR1/FitTrackee/pull/160) - Minor translation issue on APP_ERROR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Thanks to @Fmstrat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In this release 3 issues were closed.  
 | 
				
			||||||
 | 
					**Note:** This release contains database migration (see upgrade instructions in [documentation](https://samr1.github.io/FitTrackee/installation.html#upgrade))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Version 0.5.7 (2022/02/13)
 | 
					## Version 0.5.7 (2022/02/13)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This release contains several fixes including security fixes.  
 | 
					This release contains several fixes including security fixes.  
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,9 +44,13 @@ Workouts
 | 
				
			|||||||
    - average speed  (**new in 0.5.1**)
 | 
					    - average speed  (**new in 0.5.1**)
 | 
				
			||||||
- User records by sports:
 | 
					- User records by sports:
 | 
				
			||||||
    - average speed
 | 
					    - average speed
 | 
				
			||||||
    - farest distance
 | 
					    - farthest distance
 | 
				
			||||||
    - longest duration
 | 
					    - longest duration
 | 
				
			||||||
    - maximum speed
 | 
					    - maximum speed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					  Records may differ from records displayed by the application that originally generated the gpx files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Workouts list and filter. Only sports with workouts are displayed in sport dropdown.
 | 
					- Workouts list and filter. Only sports with workouts are displayed in sport dropdown.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. note::
 | 
					.. note::
 | 
				
			||||||
@@ -55,9 +59,15 @@ Workouts
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Account & preferences
 | 
					Account & preferences
 | 
				
			||||||
^^^^^^^^^^^^^^^^^^^^^
 | 
					^^^^^^^^^^^^^^^^^^^^^
 | 
				
			||||||
- A user can create, update and deleted his account
 | 
					- A user can create, update and deleted his account.
 | 
				
			||||||
 | 
					- 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*)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					  The command line to add admin rights activates the account if it is inactive.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- A user can set language, timezone and first day of week.
 | 
					- A user can set language, timezone and first day of week.
 | 
				
			||||||
- A user can reset his password (*new in 0.3.0*)
 | 
					- A user can reset his password (*new in 0.3.0*)
 | 
				
			||||||
 | 
					- A user can change his email address (*new in 0.6.0*)
 | 
				
			||||||
- A user can choose between metric system and imperial system for distance, elevation and speed display (*new in 0.5.0*)
 | 
					- A user can choose between metric system and imperial system for distance, elevation and speed display (*new in 0.5.0*)
 | 
				
			||||||
- A user can set sport preferences (*new in 0.5.0*):
 | 
					- A user can set sport preferences (*new in 0.5.0*):
 | 
				
			||||||
     - change sport color (used for sport image and charts)
 | 
					     - change sport color (used for sport image and charts)
 | 
				
			||||||
@@ -82,6 +92,7 @@ Administration
 | 
				
			|||||||
  - maximum size of uploaded files
 | 
					  - maximum size of uploaded files
 | 
				
			||||||
  - maximum size of zip archive
 | 
					  - maximum size of zip archive
 | 
				
			||||||
  - maximum number of files in the zip archive. If an archive contains more files, only the configured number of files is processed, without raising errors.
 | 
					  - maximum number of files in the zip archive. If an archive contains more files, only the configured number of files is processed, without raising errors.
 | 
				
			||||||
 | 
					  - administrator email for contact (*new in 0.6.0*)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .. warning::
 | 
					  .. 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).
 | 
					      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).
 | 
				
			||||||
@@ -89,8 +100,12 @@ Administration
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- **Users**
 | 
					- **Users**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - display users list and details
 | 
					  - display and filter users list
 | 
				
			||||||
  - edit a user to add/remove administration rights
 | 
					  - 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*)
 | 
				
			||||||
  - delete a user
 | 
					  - delete a user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- **Sports**
 | 
					- **Sports**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -292,12 +292,14 @@ For instance, copy and update ``.env`` file from ``.env.example`` and source the
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- Open http://localhost:3000 and register
 | 
					- Open http://localhost:3000 and register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To set admin rights to the newly created account, use the following command:
 | 
					- To set admin rights to the newly created account, use the following command line:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ fittrackee_set_admin <username>
 | 
					   $ fittrackee_set_admin <username>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					    If the user account is inactive, it activates it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
From sources
 | 
					From sources
 | 
				
			||||||
^^^^^^^^^^^^
 | 
					^^^^^^^^^^^^
 | 
				
			||||||
@@ -352,12 +354,14 @@ Dev environment
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- Open http://localhost:3000 and register
 | 
					- Open http://localhost:3000 and register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To set admin rights to the newly created account, use the following command:
 | 
					- To set admin rights to the newly created account, use the following command line:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ make set-admin USERNAME=<username>
 | 
					   $ make set-admin USERNAME=<username>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					    If the user account is inactive, it activates it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Production environment
 | 
					Production environment
 | 
				
			||||||
""""""""""""""""""""""
 | 
					""""""""""""""""""""""
 | 
				
			||||||
@@ -365,13 +369,13 @@ Production environment
 | 
				
			|||||||
.. warning::
 | 
					.. warning::
 | 
				
			||||||
    | Note that FitTrackee is under heavy development, some features may be unstable.
 | 
					    | Note that FitTrackee is under heavy development, some features may be unstable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-  Download the last release (for now, it is the release v0.5.7):
 | 
					-  Download the last release (for now, it is the release v0.6.0):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.5.7.tar.gz
 | 
					   $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.0.tar.gz
 | 
				
			||||||
   $ tar -xzf v0.5.7.tar.gz
 | 
					   $ tar -xzf v0.6.0.tar.gz
 | 
				
			||||||
   $ mv FitTrackee-0.5.7 FitTrackee
 | 
					   $ mv FitTrackee-0.6.0 FitTrackee
 | 
				
			||||||
   $ cd FitTrackee
 | 
					   $ cd FitTrackee
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-  Create **.env** from example and update it
 | 
					-  Create **.env** from example and update it
 | 
				
			||||||
@@ -398,12 +402,14 @@ Production environment
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- Open http://localhost:5000 and register
 | 
					- Open http://localhost:5000 and register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To set admin rights to the newly created account, use the following command:
 | 
					- To set admin rights to the newly created account, use the following command line:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ make set-admin USERNAME=<username>
 | 
					   $ make set-admin USERNAME=<username>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					    If the user account is inactive, it activates it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Upgrade
 | 
					Upgrade
 | 
				
			||||||
~~~~~~~
 | 
					~~~~~~~
 | 
				
			||||||
@@ -487,13 +493,13 @@ Prod environment
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- Change to the directory where FitTrackee directory is located
 | 
					- Change to the directory where FitTrackee directory is located
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Download the last release (for now, it is the release v0.5.7) and overwrite existing files:
 | 
					- Download the last release (for now, it is the release v0.6.0) and overwrite existing files:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.5.7.tar.gz
 | 
					   $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.0.tar.gz
 | 
				
			||||||
   $ tar -xzf v0.5.7.tar.gz
 | 
					   $ tar -xzf v0.6.0.tar.gz
 | 
				
			||||||
   $ cp -R FitTrackee-0.5.7/* FitTrackee/
 | 
					   $ cp -R FitTrackee-0.6.0/* FitTrackee/
 | 
				
			||||||
   $ cd FitTrackee
 | 
					   $ cd FitTrackee
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Update **.env** if needed (see `Environment variables <installation.html#environment-variables>`__).
 | 
					- Update **.env** if needed (see `Environment variables <installation.html#environment-variables>`__).
 | 
				
			||||||
@@ -656,12 +662,15 @@ Open http://localhost:5000 and register.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Open http://localhost:8025 to access `MailHog interface <https://github.com/mailhog/MailHog>`_ (email testing tool)
 | 
					Open http://localhost:8025 to access `MailHog interface <https://github.com/mailhog/MailHog>`_ (email testing tool)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To set admin rights to the newly created account, use the following command:
 | 
					- To set admin rights to the newly created account, use the following command line:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ make docker-set-admin USERNAME=<username>
 | 
					   $ make docker-set-admin USERNAME=<username>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					    If the user account is inactive, it activates it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To stop **Fittrackee**:
 | 
					- To stop **Fittrackee**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code-block:: bash
 | 
					.. code-block:: bash
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								docs/_static/documentation_options.js
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,6 +1,6 @@
 | 
				
			|||||||
var DOCUMENTATION_OPTIONS = {
 | 
					var DOCUMENTATION_OPTIONS = {
 | 
				
			||||||
    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
 | 
					    URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
 | 
				
			||||||
    VERSION: '0.5.7',
 | 
					    VERSION: '0.6.0',
 | 
				
			||||||
    LANGUAGE: 'None',
 | 
					    LANGUAGE: 'None',
 | 
				
			||||||
    COLLAPSE_INDEX: false,
 | 
					    COLLAPSE_INDEX: false,
 | 
				
			||||||
    BUILDER: 'html',
 | 
					    BUILDER: 'html',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Authentication — FitTrackee 0.5.7
 | 
					    <title>Authentication — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -130,7 +130,9 @@
 | 
				
			|||||||
<dl class="http post">
 | 
					<dl class="http post">
 | 
				
			||||||
<dt class="sig sig-object http" id="post--api-auth-register">
 | 
					<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>
 | 
					<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>
 | 
				
			||||||
<dd><p>register a user</p>
 | 
					<dd><p>register a user and send confirmation email.</p>
 | 
				
			||||||
 | 
					<p>The newly created account is inactive. The user must confirm his email
 | 
				
			||||||
 | 
					to activate it.</p>
 | 
				
			||||||
<p><strong>Example request</strong>:</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">/api/auth/register</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
 | 
					<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">POST</span> <span class="nn">/api/auth/register</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>
 | 
					<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
 | 
				
			||||||
@@ -138,14 +140,12 @@
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
<p><strong>Example responses</strong>:</p>
 | 
					<p><strong>Example responses</strong>:</p>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>successful registration</p></li>
 | 
					<li><p>success</p></li>
 | 
				
			||||||
</ul>
 | 
					</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">201</span> <span class="ne">CREATED</span>
 | 
					<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">SUCCESS</span>
 | 
				
			||||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</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="p">{</span><span class="w"></span>
 | 
				
			||||||
<span class="w">  </span><span class="nt">"auth_token"</span><span class="p">:</span><span class="w"> </span><span class="s2">"JSON Web Token"</span><span class="p">,</span><span class="w"></span>
 | 
					 | 
				
			||||||
<span class="w">  </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"successfully registered"</span><span class="p">,</span><span class="w"></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="w"></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="w"></span>
 | 
				
			||||||
<span class="p">}</span><span class="w"></span>
 | 
					<span class="p">}</span><span class="w"></span>
 | 
				
			||||||
</pre></div>
 | 
					</pre></div>
 | 
				
			||||||
@@ -165,23 +165,24 @@
 | 
				
			|||||||
<dl class="field-list simple">
 | 
					<dl class="field-list simple">
 | 
				
			||||||
<dt class="field-odd">Request JSON Object</dt>
 | 
					<dt class="field-odd">Request JSON Object</dt>
 | 
				
			||||||
<dd class="field-odd"><ul class="simple">
 | 
					<dd class="field-odd"><ul class="simple">
 | 
				
			||||||
<li><p><strong>username</strong> (<em>string</em>) – user name (3 to 12 characters required)</p></li>
 | 
					<li><p><strong>username</strong> (<em>string</em>) – username (3 to 30 characters required)</p></li>
 | 
				
			||||||
<li><p><strong>email</strong> (<em>string</em>) – user email</p></li>
 | 
					<li><p><strong>email</strong> (<em>string</em>) – user email</p></li>
 | 
				
			||||||
<li><p><strong>password</strong> (<em>string</em>) – password (8 characters required)</p></li>
 | 
					<li><p><strong>password</strong> (<em>string</em>) – password (8 characters required)</p></li>
 | 
				
			||||||
<li><p><strong>password_conf</strong> (<em>string</em>) – password confirmation</p></li>
 | 
					 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</dd>
 | 
					</dd>
 | 
				
			||||||
<dt class="field-even">Status Codes</dt>
 | 
					<dt class="field-even">Status Codes</dt>
 | 
				
			||||||
<dd class="field-even"><ul class="simple">
 | 
					<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.2">201 Created</a></span> – successfully registered</p></li>
 | 
					<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><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>
 | 
					<li><p>invalid payload</p></li>
 | 
				
			||||||
<li><p>sorry, that user already exists</p></li>
 | 
					<li><p>sorry, that username is already taken</p></li>
 | 
				
			||||||
<li><dl class="simple">
 | 
					<li><dl class="simple">
 | 
				
			||||||
<dt>Errors:</dt><dd><ul>
 | 
					<dt>Errors:</dt><dd><ul>
 | 
				
			||||||
<li><p>username: 3 to 12 characters required</p></li>
 | 
					<li><p>username: 3 to 30 characters required</p></li>
 | 
				
			||||||
 | 
					<li><p>username:
 | 
				
			||||||
 | 
					only alphanumeric characters and the underscore
 | 
				
			||||||
 | 
					character “_” allowed</p></li>
 | 
				
			||||||
<li><p>email: valid email must be provided</p></li>
 | 
					<li><p>email: valid email must be provided</p></li>
 | 
				
			||||||
<li><p>password: password and password confirmation don’t match</p></li>
 | 
					 | 
				
			||||||
<li><p>password: 8 characters required</p></li>
 | 
					<li><p>password: 8 characters required</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</dd>
 | 
					</dd>
 | 
				
			||||||
@@ -196,10 +197,82 @@
 | 
				
			|||||||
</dl>
 | 
					</dl>
 | 
				
			||||||
</dd></dl>
 | 
					</dd></dl>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<dl class="http post">
 | 
				
			||||||
 | 
					<dt class="sig sig-object http" id="post--api-auth-account-confirm">
 | 
				
			||||||
 | 
					<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/account/confirm</span></span><a class="headerlink" href="#post--api-auth-account-confirm" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
 | 
					<dd><p>activate user account after registration</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">/api/auth/account/confirm</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="w">  </span><span class="nt">"auth_token"</span><span class="p">:</span><span class="w"> </span><span class="s2">"JSON Web Token"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">  </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"account confirmation successful"</span><span class="p">,</span><span class="w"></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="w"></span>
 | 
				
			||||||
 | 
					<span class="p">}</span><span class="w"></span>
 | 
				
			||||||
 | 
					</pre></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<dl class="field-list simple">
 | 
				
			||||||
 | 
					<dt class="field-odd">Request JSON Object</dt>
 | 
				
			||||||
 | 
					<dd class="field-odd"><ul class="simple">
 | 
				
			||||||
 | 
					<li><p><strong>token</strong> (<em>string</em>) – confirmation token</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</dd>
 | 
				
			||||||
 | 
					<dt class="field-even">Status Codes</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> – account confirmation successful</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> – invalid payload</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> – error, please try again or contact the administrator</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</dd>
 | 
				
			||||||
 | 
					</dl>
 | 
				
			||||||
 | 
					</dd></dl>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<dl class="http post">
 | 
				
			||||||
 | 
					<dt class="sig sig-object http" id="post--api-auth-account-resend-confirmation">
 | 
				
			||||||
 | 
					<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/account/resend-confirmation</span></span><a class="headerlink" href="#post--api-auth-account-resend-confirmation" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
 | 
					<dd><p>resend email with instructions to confirm account</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">/api/auth/account/resend-confirmation</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="w">  </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"confirmation email resent"</span><span class="p">,</span><span class="w"></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="w"></span>
 | 
				
			||||||
 | 
					<span class="p">}</span><span class="w"></span>
 | 
				
			||||||
 | 
					</pre></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<dl class="field-list simple">
 | 
				
			||||||
 | 
					<dt class="field-odd">Request JSON Object</dt>
 | 
				
			||||||
 | 
					<dd class="field-odd"><ul class="simple">
 | 
				
			||||||
 | 
					<li><p><strong>email</strong> (<em>string</em>) – user email</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</dd>
 | 
				
			||||||
 | 
					<dt class="field-even">Status Codes</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> – confirmation email resent</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> – invalid payload</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> – error, please try again or contact the administrator</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</dd>
 | 
				
			||||||
 | 
					</dl>
 | 
				
			||||||
 | 
					</dd></dl>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<dl class="http post">
 | 
					<dl class="http post">
 | 
				
			||||||
<dt class="sig sig-object http" id="post--api-auth-login">
 | 
					<dt class="sig sig-object http" id="post--api-auth-login">
 | 
				
			||||||
<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/login</span></span><a class="headerlink" href="#post--api-auth-login" title="Permalink to this definition">¶</a></dt>
 | 
					<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/login</span></span><a class="headerlink" href="#post--api-auth-login" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
<dd><p>user login</p>
 | 
					<dd><p>user login</p>
 | 
				
			||||||
 | 
					<p>Only user with an active account can log in.</p>
 | 
				
			||||||
<p><strong>Example request</strong>:</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">/api/auth/login</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
 | 
					<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">POST</span> <span class="nn">/api/auth/login</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>
 | 
					<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
 | 
				
			||||||
@@ -222,7 +295,7 @@
 | 
				
			|||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>error on login</p></li>
 | 
					<li><p>error on login</p></li>
 | 
				
			||||||
</ul>
 | 
					</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">404</span> <span class="ne">NOT FOUND</span>
 | 
					<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">401</span> <span class="ne">UNAUTHORIZED</span>
 | 
				
			||||||
<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</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="p">{</span><span class="w"></span>
 | 
				
			||||||
@@ -235,7 +308,7 @@
 | 
				
			|||||||
<dt class="field-odd">Request JSON Object</dt>
 | 
					<dt class="field-odd">Request JSON Object</dt>
 | 
				
			||||||
<dd class="field-odd"><ul class="simple">
 | 
					<dd class="field-odd"><ul class="simple">
 | 
				
			||||||
<li><p><strong>email</strong> (<em>string</em>) – user email</p></li>
 | 
					<li><p><strong>email</strong> (<em>string</em>) – user email</p></li>
 | 
				
			||||||
<li><p><strong>password_conf</strong> (<em>string</em>) – password confirmation</p></li>
 | 
					<li><p><strong>password</strong> (<em>string</em>) – password</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</dd>
 | 
					</dd>
 | 
				
			||||||
<dt class="field-even">Status Codes</dt>
 | 
					<dt class="field-even">Status Codes</dt>
 | 
				
			||||||
@@ -249,59 +322,10 @@
 | 
				
			|||||||
</dl>
 | 
					</dl>
 | 
				
			||||||
</dd></dl>
 | 
					</dd></dl>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<dl class="http get">
 | 
					 | 
				
			||||||
<dt class="sig sig-object http" id="get--api-auth-logout">
 | 
					 | 
				
			||||||
<span class="sig-name descname"><span class="pre">GET</span> </span><span class="sig-name descname"><span class="pre">/api/auth/logout</span></span><a class="headerlink" href="#get--api-auth-logout" title="Permalink to this definition">¶</a></dt>
 | 
					 | 
				
			||||||
<dd><p>user logout</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">/api/auth/logout</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 responses</strong>:</p>
 | 
					 | 
				
			||||||
<ul class="simple">
 | 
					 | 
				
			||||||
<li><p>successful logout</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="w">  </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"successfully logged out"</span><span class="p">,</span><span class="w"></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="w"></span>
 | 
					 | 
				
			||||||
<span class="p">}</span><span class="w"></span>
 | 
					 | 
				
			||||||
</pre></div>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
<ul class="simple">
 | 
					 | 
				
			||||||
<li><p>error on login</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">401</span> <span class="ne">UNAUTHORIZED</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="w">  </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"provide a valid auth token"</span><span class="p">,</span><span class="w"></span>
 | 
					 | 
				
			||||||
<span class="w">  </span><span class="nt">"status"</span><span class="p">:</span><span class="w"> </span><span class="s2">"error"</span><span class="w"></span>
 | 
					 | 
				
			||||||
<span class="p">}</span><span class="w"></span>
 | 
					 | 
				
			||||||
</pre></div>
 | 
					 | 
				
			||||||
</div>
 | 
					 | 
				
			||||||
<dl class="field-list simple">
 | 
					 | 
				
			||||||
<dt class="field-odd">Request Headers</dt>
 | 
					 | 
				
			||||||
<dd class="field-odd"><ul class="simple">
 | 
					 | 
				
			||||||
<li><p><span><a class="reference external" href="https://tools.ietf.org/html/rfc7235#section-4.2">Authorization</a></span> – OAuth 2.0 Bearer Token</p></li>
 | 
					 | 
				
			||||||
</ul>
 | 
					 | 
				
			||||||
</dd>
 | 
					 | 
				
			||||||
<dt class="field-even">Status Codes</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> – successfully logged out</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> – provide a valid auth token</p></li>
 | 
					 | 
				
			||||||
</ul>
 | 
					 | 
				
			||||||
</dd>
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
</dd></dl>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<dl class="http get">
 | 
					<dl class="http get">
 | 
				
			||||||
<dt class="sig sig-object http" id="get--api-auth-profile">
 | 
					<dt class="sig sig-object http" id="get--api-auth-profile">
 | 
				
			||||||
<span class="sig-name descname"><span class="pre">GET</span> </span><span class="sig-name descname"><span class="pre">/api/auth/profile</span></span><a class="headerlink" href="#get--api-auth-profile" title="Permalink to this definition">¶</a></dt>
 | 
					<span class="sig-name descname"><span class="pre">GET</span> </span><span class="sig-name descname"><span class="pre">/api/auth/profile</span></span><a class="headerlink" href="#get--api-auth-profile" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
<dd><p>get authenticated user info</p>
 | 
					<dd><p>get authenticated user info (profile, account, preferences)</p>
 | 
				
			||||||
<p><strong>Example request</strong>:</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">/api/auth/profile</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
 | 
					<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/auth/profile</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>
 | 
					<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
 | 
				
			||||||
@@ -320,6 +344,7 @@
 | 
				
			|||||||
<span class="w">    </span><span class="nt">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam@example.com"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam@example.com"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"first_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="w">    </span><span class="nt">"first_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="w">    </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"is_active"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"last_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="w">    </span><span class="nt">"last_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="w">    </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
@@ -402,7 +427,7 @@
 | 
				
			|||||||
<dl class="http post">
 | 
					<dl class="http post">
 | 
				
			||||||
<dt class="sig sig-object http" id="post--api-auth-profile-edit">
 | 
					<dt class="sig sig-object http" id="post--api-auth-profile-edit">
 | 
				
			||||||
<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/profile/edit</span></span><a class="headerlink" href="#post--api-auth-profile-edit" title="Permalink to this definition">¶</a></dt>
 | 
					<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/profile/edit</span></span><a class="headerlink" href="#post--api-auth-profile-edit" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
<dd><p>edit authenticated user</p>
 | 
					<dd><p>edit authenticated user profile</p>
 | 
				
			||||||
<p><strong>Example request</strong>:</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">/api/auth/profile/edit</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
 | 
					<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">POST</span> <span class="nn">/api/auth/profile/edit</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>
 | 
					<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
 | 
				
			||||||
@@ -421,6 +446,7 @@
 | 
				
			|||||||
<span class="w">    </span><span class="nt">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam@example.com"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam@example.com"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"first_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="w">    </span><span class="nt">"first_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="w">    </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"is_active"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"last_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="w">    </span><span class="nt">"last_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="w">    </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
@@ -489,8 +515,6 @@
 | 
				
			|||||||
<li><p><strong>location</strong> (<em>string</em>) – user location</p></li>
 | 
					<li><p><strong>location</strong> (<em>string</em>) – user location</p></li>
 | 
				
			||||||
<li><p><strong>bio</strong> (<em>string</em>) – user biography</p></li>
 | 
					<li><p><strong>bio</strong> (<em>string</em>) – user biography</p></li>
 | 
				
			||||||
<li><p><strong>birth_date</strong> (<em>string</em>) – user birth date (format: <code class="docutils literal notranslate"><span class="pre">%Y-%m-%d</span></code>)</p></li>
 | 
					<li><p><strong>birth_date</strong> (<em>string</em>) – user birth date (format: <code class="docutils literal notranslate"><span class="pre">%Y-%m-%d</span></code>)</p></li>
 | 
				
			||||||
<li><p><strong>password</strong> (<em>string</em>) – user password</p></li>
 | 
					 | 
				
			||||||
<li><p><strong>password_conf</strong> (<em>string</em>) – user password confirmation</p></li>
 | 
					 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</dd>
 | 
					</dd>
 | 
				
			||||||
<dt class="field-even">Request Headers</dt>
 | 
					<dt class="field-even">Request Headers</dt>
 | 
				
			||||||
@@ -503,7 +527,6 @@
 | 
				
			|||||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1">200 OK</a></span> – user profile updated</p></li>
 | 
					<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.1">200 OK</a></span> – user profile updated</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><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>
 | 
					<li><p>invalid payload</p></li>
 | 
				
			||||||
<li><p>password: password and password confirmation don’t match</p></li>
 | 
					 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</p></li>
 | 
					</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><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2">401 Unauthorized</a></span> – <ul>
 | 
				
			||||||
@@ -540,6 +563,7 @@
 | 
				
			|||||||
<span class="w">    </span><span class="nt">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam@example.com"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam@example.com"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"first_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="w">    </span><span class="nt">"first_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="w">    </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"is_active"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"last_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="w">    </span><span class="nt">"last_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="w">    </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
@@ -862,10 +886,140 @@
 | 
				
			|||||||
</dl>
 | 
					</dl>
 | 
				
			||||||
</dd></dl>
 | 
					</dd></dl>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<dl class="http patch">
 | 
				
			||||||
 | 
					<dt class="sig sig-object http" id="patch--api-auth-profile-edit-account">
 | 
				
			||||||
 | 
					<span class="sig-name descname"><span class="pre">PATCH</span> </span><span class="sig-name descname"><span class="pre">/api/auth/profile/edit/account</span></span><a class="headerlink" href="#patch--api-auth-profile-edit-account" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
 | 
					<dd><p>update authenticated user email and password</p>
 | 
				
			||||||
 | 
					<p>It sends emails:</p>
 | 
				
			||||||
 | 
					<ul class="simple">
 | 
				
			||||||
 | 
					<li><p>Password change</p></li>
 | 
				
			||||||
 | 
					<li><p>Email change:</p>
 | 
				
			||||||
 | 
					<ul>
 | 
				
			||||||
 | 
					<li><p>one to the current address to inform user</p></li>
 | 
				
			||||||
 | 
					<li><p>another one to the new address to confirm it.</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					<p><strong>Example request</strong>:</p>
 | 
				
			||||||
 | 
					<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">PATCH</span> <span class="nn">/api/auth/profile/edit/account</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="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="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="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="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><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam@example.com"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"first_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="w">    </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"is_active"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"last_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="w">    </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"nb_sports"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"nb_workouts"</span><span class="p">:</span><span class="w"> </span><span class="mi">6</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"picture"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"records"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">      </span><span class="p">{</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">9</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"record_type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"AS"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"sport_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"user"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"value"</span><span class="p">:</span><span class="w"> </span><span class="mi">18</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"workout_date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sun, 07 Jul 2019 08:00:00 GMT"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"workout_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hvYBqYBRa7wwXpaStWR4V2"</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">      </span><span class="p">},</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">      </span><span class="p">{</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"record_type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"FD"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"sport_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"user"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"value"</span><span class="p">:</span><span class="w"> </span><span class="mi">18</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"workout_date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sun, 07 Jul 2019 08:00:00 GMT"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"workout_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hvYBqYBRa7wwXpaStWR4V2"</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">      </span><span class="p">},</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">      </span><span class="p">{</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">11</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"record_type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"LD"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"sport_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"user"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"value"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1:01:00"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"workout_date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sun, 07 Jul 2019 08:00:00 GMT"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"workout_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hvYBqYBRa7wwXpaStWR4V2"</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">      </span><span class="p">},</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">      </span><span class="p">{</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="mi">12</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"record_type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"MS"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"sport_id"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"user"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"value"</span><span class="p">:</span><span class="w"> </span><span class="mi">18</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"workout_date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sun, 07 Jul 2019 08:00:00 GMT"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"workout_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hvYBqYBRa7wwXpaStWR4V2"</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">      </span><span class="p">}</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="p">],</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"sports_list"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="mi">1</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="mi">4</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="mi">6</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="p">],</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"timezone"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Europe/Paris"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"total_distance"</span><span class="p">:</span><span class="w"> </span><span class="mf">67.895</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"total_duration"</span><span class="p">:</span><span class="w"> </span><span class="s2">"6:50:27"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"username"</span><span class="p">:</span><span class="w"> </span><span class="nt">"sam"</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">    </span><span class="nt">"weekm"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">  </span><span class="p">},</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">  </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"user account updated"</span><span class="p">,</span><span class="w"></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="w"></span>
 | 
				
			||||||
 | 
					<span class="p">}</span><span class="w"></span>
 | 
				
			||||||
 | 
					</pre></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<dl class="field-list simple">
 | 
				
			||||||
 | 
					<dt class="field-odd">Request JSON Object</dt>
 | 
				
			||||||
 | 
					<dd class="field-odd"><ul class="simple">
 | 
				
			||||||
 | 
					<li><p><strong>email</strong> (<em>string</em>) – user email</p></li>
 | 
				
			||||||
 | 
					<li><p><strong>password</strong> (<em>string</em>) – user current password</p></li>
 | 
				
			||||||
 | 
					<li><p><strong>new_password</strong> (<em>string</em>) – user new password</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</dd>
 | 
				
			||||||
 | 
					<dt class="field-even">Request Headers</dt>
 | 
				
			||||||
 | 
					<dd class="field-even"><ul class="simple">
 | 
				
			||||||
 | 
					<li><p><span><a class="reference external" href="https://tools.ietf.org/html/rfc7235#section-4.2">Authorization</a></span> – OAuth 2.0 Bearer Token</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</dd>
 | 
				
			||||||
 | 
					<dt class="field-odd">Status Codes</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> – user account updated</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>
 | 
				
			||||||
 | 
					<li><p>email is missing</p></li>
 | 
				
			||||||
 | 
					<li><p>current password is missing</p></li>
 | 
				
			||||||
 | 
					<li><p>email: valid email must be provided</p></li>
 | 
				
			||||||
 | 
					<li><p>password: 8 characters required</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>
 | 
				
			||||||
 | 
					<li><p>invalid credentials</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> – error, please try again or contact the administrator</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</dd>
 | 
				
			||||||
 | 
					</dl>
 | 
				
			||||||
 | 
					</dd></dl>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<dl class="http post">
 | 
					<dl class="http post">
 | 
				
			||||||
<dt class="sig sig-object http" id="post--api-auth-password-update">
 | 
					<dt class="sig sig-object http" id="post--api-auth-password-update">
 | 
				
			||||||
<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/password/update</span></span><a class="headerlink" href="#post--api-auth-password-update" title="Permalink to this definition">¶</a></dt>
 | 
					<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/password/update</span></span><a class="headerlink" href="#post--api-auth-password-update" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
<dd><p>update user password</p>
 | 
					<dd><p>update user password after password reset request</p>
 | 
				
			||||||
<p><strong>Example request</strong>:</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">/api/auth/password/update</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
 | 
					<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">POST</span> <span class="nn">/api/auth/password/update</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>
 | 
					<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
 | 
				
			||||||
@@ -885,7 +1039,6 @@
 | 
				
			|||||||
<dt class="field-odd">Request JSON Object</dt>
 | 
					<dt class="field-odd">Request JSON Object</dt>
 | 
				
			||||||
<dd class="field-odd"><ul class="simple">
 | 
					<dd class="field-odd"><ul class="simple">
 | 
				
			||||||
<li><p><strong>password</strong> (<em>string</em>) – password (8 characters required)</p></li>
 | 
					<li><p><strong>password</strong> (<em>string</em>) – password (8 characters required)</p></li>
 | 
				
			||||||
<li><p><strong>password_conf</strong> (<em>string</em>) – password confirmation</p></li>
 | 
					 | 
				
			||||||
<li><p><strong>token</strong> (<em>string</em>) – password reset token</p></li>
 | 
					<li><p><strong>token</strong> (<em>string</em>) – password reset token</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</dd>
 | 
					</dd>
 | 
				
			||||||
@@ -900,6 +1053,41 @@
 | 
				
			|||||||
</dl>
 | 
					</dl>
 | 
				
			||||||
</dd></dl>
 | 
					</dd></dl>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<dl class="http post">
 | 
				
			||||||
 | 
					<dt class="sig sig-object http" id="post--api-auth-email-update">
 | 
				
			||||||
 | 
					<span class="sig-name descname"><span class="pre">POST</span> </span><span class="sig-name descname"><span class="pre">/api/auth/email/update</span></span><a class="headerlink" href="#post--api-auth-email-update" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
 | 
					<dd><p>update user email after confirmation</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">/api/auth/email/update</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="w">  </span><span class="nt">"message"</span><span class="p">:</span><span class="w"> </span><span class="s2">"email updated"</span><span class="p">,</span><span class="w"></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="w"></span>
 | 
				
			||||||
 | 
					<span class="p">}</span><span class="w"></span>
 | 
				
			||||||
 | 
					</pre></div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<dl class="field-list simple">
 | 
				
			||||||
 | 
					<dt class="field-odd">Request JSON Object</dt>
 | 
				
			||||||
 | 
					<dd class="field-odd"><ul class="simple">
 | 
				
			||||||
 | 
					<li><p><strong>token</strong> (<em>string</em>) – password reset token</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</dd>
 | 
				
			||||||
 | 
					<dt class="field-even">Status Codes</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> – email updated</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> – invalid payload</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> – error, please try again or contact the administrator</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</dd>
 | 
				
			||||||
 | 
					</dl>
 | 
				
			||||||
 | 
					</dd></dl>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Configuration — FitTrackee 0.5.7
 | 
					    <title>Configuration — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -148,7 +148,7 @@
 | 
				
			|||||||
<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="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="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="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="w">    </span><span class="nt">"map_attribution"</span><span class="p">:</span><span class="w"> </span><span class="nt">"&copy; <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors"</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"map_attribution"</span><span class="p">:</span><span class="w"> </span><span class="nt">"&copy; <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors"</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.5.7"</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.6.0"</span><span class="w"></span>
 | 
				
			||||||
<span class="w">  </span><span class="p">},</span><span class="w"></span>
 | 
					<span class="w">  </span><span class="p">},</span><span class="w"></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="w"></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="w"></span>
 | 
				
			||||||
<span class="p">}</span><span class="w"></span>
 | 
					<span class="p">}</span><span class="w"></span>
 | 
				
			||||||
@@ -180,6 +180,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
<span class="p">{</span><span class="w"></span>
 | 
					<span class="p">{</span><span class="w"></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="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="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="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="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="w">    </span><span class="nt">"is_registration_enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"is_registration_enabled"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">    </span><span class="nt">"max_single_file_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">1048576</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">    </span><span class="nt">"max_single_file_size"</span><span class="p">:</span><span class="w"> </span><span class="mi">1048576</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
@@ -193,6 +194,7 @@
 | 
				
			|||||||
<dl class="field-list simple">
 | 
					<dl class="field-list simple">
 | 
				
			||||||
<dt class="field-odd">Request JSON Object</dt>
 | 
					<dt class="field-odd">Request JSON Object</dt>
 | 
				
			||||||
<dd class="field-odd"><ul class="simple">
 | 
					<dd class="field-odd"><ul class="simple">
 | 
				
			||||||
 | 
					<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>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>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_single_file_size</strong> (<em>integer</em>) – max size of a single file</p></li>
 | 
				
			||||||
@@ -213,6 +215,7 @@
 | 
				
			|||||||
<li><p>provide a valid auth token</p></li>
 | 
					<li><p>provide a valid auth token</p></li>
 | 
				
			||||||
<li><p>signature expired, please log in again</p></li>
 | 
					<li><p>signature expired, please log in again</p></li>
 | 
				
			||||||
<li><p>invalid token, please log in again</p></li>
 | 
					<li><p>invalid token, please log in again</p></li>
 | 
				
			||||||
 | 
					<li><p>valid email must be provided for admin contact</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</p></li>
 | 
					</p></li>
 | 
				
			||||||
<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4">403 Forbidden</a></span> – you do not have permissions</p></li>
 | 
					<li><p><span><a class="reference external" href="https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.4">403 Forbidden</a></span> – you do not have permissions</p></li>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>API documentation — FitTrackee 0.5.7
 | 
					    <title>API documentation — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Records — FitTrackee 0.5.7
 | 
					    <title>Records — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Sports — FitTrackee 0.5.7
 | 
					    <title>Sports — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Statistics — FitTrackee 0.5.7
 | 
					    <title>Statistics — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Users — FitTrackee 0.5.7
 | 
					    <title>Users — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -130,7 +130,9 @@
 | 
				
			|||||||
<dl class="http get">
 | 
					<dl class="http get">
 | 
				
			||||||
<dt class="sig sig-object http" id="get--api-users">
 | 
					<dt class="sig sig-object http" id="get--api-users">
 | 
				
			||||||
<span class="sig-name descname"><span class="pre">GET</span> </span><span class="sig-name descname"><span class="pre">/api/users</span></span><a class="headerlink" href="#get--api-users" title="Permalink to this definition">¶</a></dt>
 | 
					<span class="sig-name descname"><span class="pre">GET</span> </span><span class="sig-name descname"><span class="pre">/api/users</span></span><a class="headerlink" href="#get--api-users" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
<dd><p>Get all users</p>
 | 
					<dd><p>Get all users (regardless their account status), if authenticated user
 | 
				
			||||||
 | 
					has admin rights</p>
 | 
				
			||||||
 | 
					<p>It returns user preferences only for authenticated user.</p>
 | 
				
			||||||
<p><strong>Example request</strong>:</p>
 | 
					<p><strong>Example request</strong>:</p>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>without parameters</p></li>
 | 
					<li><p>without parameters</p></li>
 | 
				
			||||||
@@ -160,6 +162,7 @@
 | 
				
			|||||||
<span class="w">        </span><span class="nt">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sun, 14 Jul 2019 14:09:58 GMT"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">        </span><span class="nt">"email"</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="w">        </span><span class="nt">"email"</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="w">        </span><span class="nt">"first_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="w">        </span><span class="nt">"first_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="w">        </span><span class="nt">"is_admin"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">        </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">        </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">        </span><span class="nt">"last_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="w">        </span><span class="nt">"last_name"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
@@ -213,7 +216,8 @@
 | 
				
			|||||||
<span class="w">        </span><span class="nt">"timezone"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Europe/Paris"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"timezone"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Europe/Paris"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">        </span><span class="nt">"total_distance"</span><span class="p">:</span><span class="w"> </span><span class="mf">67.895</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"total_distance"</span><span class="p">:</span><span class="w"> </span><span class="mf">67.895</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">        </span><span class="nt">"total_duration"</span><span class="p">:</span><span class="w"> </span><span class="s2">"6:50:27"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"total_duration"</span><span class="p">:</span><span class="w"> </span><span class="s2">"6:50:27"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">        </span><span class="nt">"username"</span><span class="p">:</span><span class="w"> </span><span class="s2">"admin"</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"username"</span><span class="p">:</span><span class="w"> </span><span class="s2">"admin"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">        </span><span class="nt">"weekm"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"></span>
 | 
				
			||||||
<span class="w">      </span><span class="p">},</span><span class="w"></span>
 | 
					<span class="w">      </span><span class="p">},</span><span class="w"></span>
 | 
				
			||||||
<span class="w">      </span><span class="p">{</span><span class="w"></span>
 | 
					<span class="w">      </span><span class="p">{</span><span class="w"></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="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>
 | 
				
			||||||
@@ -222,6 +226,7 @@
 | 
				
			|||||||
<span class="w">        </span><span class="nt">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sat, 20 Jul 2019 11:27:03 GMT"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"created_at"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Sat, 20 Jul 2019 11:27:03 GMT"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">        </span><span class="nt">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam@example.com"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"email"</span><span class="p">:</span><span class="w"> </span><span class="s2">"sam@example.com"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">        </span><span class="nt">"first_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="w">        </span><span class="nt">"first_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="w">        </span><span class="nt">"is_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="w">        </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fr"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fr"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">        </span><span class="nt">"last_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="w">        </span><span class="nt">"last_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="w">        </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">        </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
@@ -248,7 +253,7 @@
 | 
				
			|||||||
<li><p><strong>per_page</strong> (<em>integer</em>) – number of users per page (default: 10, max: 50)</p></li>
 | 
					<li><p><strong>per_page</strong> (<em>integer</em>) – number of users per page (default: 10, max: 50)</p></li>
 | 
				
			||||||
<li><p><strong>q</strong> (<em>string</em>) – query on user name</p></li>
 | 
					<li><p><strong>q</strong> (<em>string</em>) – query on user name</p></li>
 | 
				
			||||||
<li><p><strong>order_by</strong> (<em>string</em>) – sorting criteria (<code class="docutils literal notranslate"><span class="pre">username</span></code>, <code class="docutils literal notranslate"><span class="pre">created_at</span></code>,
 | 
					<li><p><strong>order_by</strong> (<em>string</em>) – sorting criteria (<code class="docutils literal notranslate"><span class="pre">username</span></code>, <code class="docutils literal notranslate"><span class="pre">created_at</span></code>,
 | 
				
			||||||
<code class="docutils literal notranslate"><span class="pre">workouts_count</span></code>, <code class="docutils literal notranslate"><span class="pre">admin</span></code>)</p></li>
 | 
					<code class="docutils literal notranslate"><span class="pre">workouts_count</span></code>, <code class="docutils literal notranslate"><span class="pre">admin</span></code>, <code class="docutils literal notranslate"><span class="pre">is_active</span></code>)</p></li>
 | 
				
			||||||
<li><p><strong>order</strong> (<em>string</em>) – sorting order (default: <code class="docutils literal notranslate"><span class="pre">asc</span></code>)</p></li>
 | 
					<li><p><strong>order</strong> (<em>string</em>) – sorting order (default: <code class="docutils literal notranslate"><span class="pre">asc</span></code>)</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</dd>
 | 
					</dd>
 | 
				
			||||||
@@ -274,7 +279,8 @@
 | 
				
			|||||||
<dl class="http get">
 | 
					<dl class="http get">
 | 
				
			||||||
<dt class="sig sig-object http" id="get--api-users-(user_name)">
 | 
					<dt class="sig sig-object http" id="get--api-users-(user_name)">
 | 
				
			||||||
<span class="sig-name descname"><span class="pre">GET</span> </span><span class="sig-name descname"><span class="pre">/api/users/</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">user_name</span></em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-users-(user_name)" title="Permalink to this definition">¶</a></dt>
 | 
					<span class="sig-name descname"><span class="pre">GET</span> </span><span class="sig-name descname"><span class="pre">/api/users/</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">user_name</span></em><span class="sig-paren">)</span><a class="headerlink" href="#get--api-users-(user_name)" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
<dd><p>Get single user details</p>
 | 
					<dd><p>Get single user details. Only user with admin rights can get user details.</p>
 | 
				
			||||||
 | 
					<p>It returns user preferences only for authenticated user.</p>
 | 
				
			||||||
<p><strong>Example request</strong>:</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">/api/users/admin</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
 | 
					<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">GET</span> <span class="nn">/api/users/admin</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>
 | 
					<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
 | 
				
			||||||
@@ -294,6 +300,7 @@
 | 
				
			|||||||
<span class="w">      </span><span class="nt">"email"</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="w">      </span><span class="nt">"email"</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="w">      </span><span class="nt">"first_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="w">      </span><span class="nt">"first_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="w">      </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">      </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">      </span><span class="nt">"is_admin"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">      </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">      </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">      </span><span class="nt">"last_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="w">      </span><span class="nt">"last_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="w">      </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">      </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
@@ -418,10 +425,16 @@
 | 
				
			|||||||
<dl class="http patch">
 | 
					<dl class="http patch">
 | 
				
			||||||
<dt class="sig sig-object http" id="patch--api-users-(user_name)">
 | 
					<dt class="sig sig-object http" id="patch--api-users-(user_name)">
 | 
				
			||||||
<span class="sig-name descname"><span class="pre">PATCH</span> </span><span class="sig-name descname"><span class="pre">/api/users/</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">user_name</span></em><span class="sig-paren">)</span><a class="headerlink" href="#patch--api-users-(user_name)" title="Permalink to this definition">¶</a></dt>
 | 
					<span class="sig-name descname"><span class="pre">PATCH</span> </span><span class="sig-name descname"><span class="pre">/api/users/</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="pre">user_name</span></em><span class="sig-paren">)</span><a class="headerlink" href="#patch--api-users-(user_name)" title="Permalink to this definition">¶</a></dt>
 | 
				
			||||||
<dd><p>Update user to add admin rights</p>
 | 
					<dd><p>Update user account</p>
 | 
				
			||||||
 | 
					<ul class="simple">
 | 
				
			||||||
 | 
					<li><p>add/remove admin rights (regardless user account status)</p></li>
 | 
				
			||||||
 | 
					<li><p>reset password (and send email to update user password)</p></li>
 | 
				
			||||||
 | 
					<li><p>update user email (and send email to update user password)</p></li>
 | 
				
			||||||
 | 
					<li><p>activate account for an inactive user</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
<p>Only user with admin rights can modify another user</p>
 | 
					<p>Only user with admin rights can modify another user</p>
 | 
				
			||||||
<p><strong>Example request</strong>:</p>
 | 
					<p><strong>Example request</strong>:</p>
 | 
				
			||||||
<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">PATCH</span> <span class="nn">api/users/<user_name></span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span>
 | 
					<div class="highlight-http notranslate"><div class="highlight"><pre><span></span><span class="nf">PATCH</span> <span class="nn">/api/users/<user_name></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>
 | 
					<span class="na">Content-Type</span><span class="o">:</span> <span class="l">application/json</span>
 | 
				
			||||||
</pre></div>
 | 
					</pre></div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
@@ -439,6 +452,7 @@
 | 
				
			|||||||
<span class="w">      </span><span class="nt">"email"</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="w">      </span><span class="nt">"email"</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="w">      </span><span class="nt">"first_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="w">      </span><span class="nt">"first_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="w">      </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">      </span><span class="nt">"imperial_units"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
 | 
					<span class="w">      </span><span class="nt">"is_active"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">      </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">      </span><span class="nt">"language"</span><span class="p">:</span><span class="w"> </span><span class="s2">"en"</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
<span class="w">      </span><span class="nt">"last_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="w">      </span><span class="nt">"last_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="w">      </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
					<span class="w">      </span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w"></span>
 | 
				
			||||||
@@ -506,7 +520,10 @@
 | 
				
			|||||||
</dd>
 | 
					</dd>
 | 
				
			||||||
<dt class="field-even">Request JSON Object</dt>
 | 
					<dt class="field-even">Request JSON Object</dt>
 | 
				
			||||||
<dd class="field-even"><ul class="simple">
 | 
					<dd class="field-even"><ul class="simple">
 | 
				
			||||||
 | 
					<li><p><strong>activate</strong> (<em>boolean</em>) – activate user account</p></li>
 | 
				
			||||||
<li><p><strong>admin</strong> (<em>boolean</em>) – does the user have administrator rights</p></li>
 | 
					<li><p><strong>admin</strong> (<em>boolean</em>) – does the user have administrator rights</p></li>
 | 
				
			||||||
 | 
					<li><p><strong>new_email</strong> (<em>boolean</em>) – new user email</p></li>
 | 
				
			||||||
 | 
					<li><p><strong>reset_password</strong> (<em>boolean</em>) – reset user password</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</dd>
 | 
					</dd>
 | 
				
			||||||
<dt class="field-odd">Request Headers</dt>
 | 
					<dt class="field-odd">Request Headers</dt>
 | 
				
			||||||
@@ -517,6 +534,12 @@
 | 
				
			|||||||
<dt class="field-even">Status Codes</dt>
 | 
					<dt class="field-even">Status Codes</dt>
 | 
				
			||||||
<dd class="field-even"><ul class="simple">
 | 
					<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.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>
 | 
				
			||||||
 | 
					<li><p>valid email must be provided</p></li>
 | 
				
			||||||
 | 
					<li><p>new email must be different than curent email</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><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>provide a valid auth token</p></li>
 | 
				
			||||||
<li><p>signature expired, please log in again</p></li>
 | 
					<li><p>signature expired, please log in again</p></li>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Workouts — FitTrackee 0.5.7
 | 
					    <title>Workouts — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Change log — FitTrackee 0.5.7
 | 
					    <title>Change log — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -39,7 +39,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="index.html">
 | 
					        <a class="navbar-brand" href="index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -77,204 +77,216 @@
 | 
				
			|||||||
      role="menu"
 | 
					      role="menu"
 | 
				
			||||||
      aria-labelledby="dLabelLocalToc"><ul>
 | 
					      aria-labelledby="dLabelLocalToc"><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#">Change log</a><ul>
 | 
					<li><a class="reference internal" href="#">Change log</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-5-7-2022-02-13">Version 0.5.7 (2022/02/13)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-6-0-2022-03-27">Version 0.6.0 (2022/03/27)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#issues-closed">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#issues-closed">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#misc">Misc</a></li>
 | 
					<li><a class="reference internal" href="#features">Features</a></li>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#bugs-fixed">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#pull-requests">Pull Requests</a><ul>
 | 
					<li><a class="reference internal" href="#pull-requests">Pull Requests</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id1">Bugs Fixed</a></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#version-0-5-7-2022-02-13">Version 0.5.7 (2022/02/13)</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id2">Issues Closed</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#misc">Misc</a></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id3">Pull Requests</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#security">Security</a></li>
 | 
					<li><a class="reference internal" href="#security">Security</a></li>
 | 
				
			||||||
<li><a class="reference internal" href="#id1">Misc</a></li>
 | 
					<li><a class="reference internal" href="#id4">Misc</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-5-6-2022-02-05">Version 0.5.6 (2022/02/05)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-5-6-2022-02-05">Version 0.5.6 (2022/02/05)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id2">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id5">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#bugs-fixed">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id6">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#id3">Pull Requests</a></li>
 | 
					<li><a class="reference internal" href="#id7">Pull Requests</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-5-5-2022-01-19">Version 0.5.5 (2022/01/19)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-5-5-2022-01-19">Version 0.5.5 (2022/01/19)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id4">Issues Closed</a><ul>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#new-features">New Features</a></li>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#id5">Bugs Fixed</a></li>
 | 
					 | 
				
			||||||
</ul>
 | 
					 | 
				
			||||||
</li>
 | 
					 | 
				
			||||||
</ul>
 | 
					 | 
				
			||||||
</li>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#version-0-5-4-2022-01-01">Version 0.5.4 (2022/01/01)</a><ul>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#id6">Issues Closed</a><ul>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#id7">Bugs Fixed</a></li>
 | 
					 | 
				
			||||||
</ul>
 | 
					 | 
				
			||||||
</li>
 | 
					 | 
				
			||||||
</ul>
 | 
					 | 
				
			||||||
</li>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#version-0-5-3-2022-01-01">Version 0.5.3 (2022/01/01)</a><ul>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#id8">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id8">Issues Closed</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#new-features">New Features</a></li>
 | 
				
			||||||
<li><a class="reference internal" href="#id9">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id9">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-5-2-2021-12-19">Version 0.5.2 (2021/12/19)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-5-4-2022-01-01">Version 0.5.4 (2022/01/01)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id10">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id10">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id11">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id11">Bugs Fixed</a></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#version-0-5-3-2022-01-01">Version 0.5.3 (2022/01/01)</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id12">Issues Closed</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id13">Bugs Fixed</a></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#version-0-5-2-2021-12-19">Version 0.5.2 (2021/12/19)</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id14">Issues Closed</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id15">New Features</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-5-1-2021-11-30">Version 0.5.1 (2021/11/30)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-5-1-2021-11-30">Version 0.5.1 (2021/11/30)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id12">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id16">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id13">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id17">New Features</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-5-0-2021-11-14">Version 0.5.0 (2021/11/14)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-5-0-2021-11-14">Version 0.5.0 (2021/11/14)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id14">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id18">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id15">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id19">New Features</a></li>
 | 
				
			||||||
<li><a class="reference internal" href="#id16">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id20">Bugs Fixed</a></li>
 | 
				
			||||||
<li><a class="reference internal" href="#id17">Misc</a></li>
 | 
					<li><a class="reference internal" href="#id21">Misc</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#id18">Pull Requests</a></li>
 | 
					<li><a class="reference internal" href="#id22">Pull Requests</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-4-9-2021-07-16">Version 0.4.9 (2021/07/16)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-4-9-2021-07-16">Version 0.4.9 (2021/07/16)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id19">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id23">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id20">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id24">New Features</a></li>
 | 
				
			||||||
<li><a class="reference internal" href="#id21">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id25">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-4-8-2021-07-03">Version 0.4.8 (2021/07/03)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-4-8-2021-07-03">Version 0.4.8 (2021/07/03)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id22">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id26">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id23">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id27">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-4-7-2021-04-07">Version 0.4.7 (2021/04/07)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-4-7-2021-04-07">Version 0.4.7 (2021/04/07)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id24">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id28">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id25">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id29">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#id26">Misc</a></li>
 | 
					<li><a class="reference internal" href="#id30">Misc</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-4-6-2021-02-21">Version 0.4.6 (2021/02/21)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-4-6-2021-02-21">Version 0.4.6 (2021/02/21)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id27">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id31">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id28">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id32">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-4-5-2021-02-17">Version 0.4.5 (2021/02/17)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-4-5-2021-02-17">Version 0.4.5 (2021/02/17)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id29">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id33">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id30">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id34">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-4-4-2021-01-31">Version 0.4.4 (2021/01/31)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-4-4-2021-01-31">Version 0.4.4 (2021/01/31)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id31">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id35">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id32">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id36">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#id33">Misc</a></li>
 | 
					<li><a class="reference internal" href="#id37">Misc</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-4-3-2021-01-10">Version 0.4.3 (2021/01/10)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-4-3-2021-01-10">Version 0.4.3 (2021/01/10)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id34">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id38">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id35">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id39">New Features</a></li>
 | 
				
			||||||
<li><a class="reference internal" href="#id36">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id40">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-4-2-2021-01-03">Version 0.4.2 (2021/01/03)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-4-2-2021-01-03">Version 0.4.2 (2021/01/03)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id37">Misc</a></li>
 | 
					<li><a class="reference internal" href="#id41">Misc</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-4-1-2020-12-31">Version 0.4.1 (2020/12/31)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-4-1-2020-12-31">Version 0.4.1 (2020/12/31)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id38">Issues Closed</a><ul>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#id39">New Features</a></li>
 | 
					 | 
				
			||||||
</ul>
 | 
					 | 
				
			||||||
</li>
 | 
					 | 
				
			||||||
</ul>
 | 
					 | 
				
			||||||
</li>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#version-0-4-0-fittrackee-on-pypi-2020-09-19">Version 0.4.0 - FitTrackee on PyPI (2020/09/19)</a><ul>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#id40">Issues Closed</a><ul>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#id41">New Features</a></li>
 | 
					 | 
				
			||||||
</ul>
 | 
					 | 
				
			||||||
</li>
 | 
					 | 
				
			||||||
</ul>
 | 
					 | 
				
			||||||
</li>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#version-0-3-0-administration-2020-07-15">Version 0.3.0 - Administration (2020/07/15)</a><ul>
 | 
					 | 
				
			||||||
<li><a class="reference internal" href="#id42">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id42">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id43">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id43">New Features</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#version-0-4-0-fittrackee-on-pypi-2020-09-19">Version 0.4.0 - FitTrackee on PyPI (2020/09/19)</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id44">Issues Closed</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id45">New Features</a></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#version-0-3-0-administration-2020-07-15">Version 0.3.0 - Administration (2020/07/15)</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id46">Issues Closed</a><ul>
 | 
				
			||||||
 | 
					<li><a class="reference internal" href="#id47">New Features</a></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-2-5-fix-and-improvements-2020-01-31">Version 0.2.5 - Fix and improvements (2020/01/31)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-2-5-fix-and-improvements-2020-01-31">Version 0.2.5 - Fix and improvements (2020/01/31)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id44">Misc</a></li>
 | 
					<li><a class="reference internal" href="#id48">Misc</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-2-4-minor-fix-2020-01-30">Version 0.2.4 - Minor fix (2020/01/30)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-2-4-minor-fix-2020-01-30">Version 0.2.4 - Minor fix (2020/01/30)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id45">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id49">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id46">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id50">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-2-3-fittrackee-available-in-french-2019-12-29">Version 0.2.3 - FitTrackee available in French (2019/12/29)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-2-3-fittrackee-available-in-french-2019-12-29">Version 0.2.3 - FitTrackee available in French (2019/12/29)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id47">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id51">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id48">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id52">New Features</a></li>
 | 
				
			||||||
<li><a class="reference internal" href="#id49">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id53">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-2-2-statistics-fix-2019-09-23">Version 0.2.2 - Statistics fix (2019/09/23)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-2-2-statistics-fix-2019-09-23">Version 0.2.2 - Statistics fix (2019/09/23)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id50">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id54">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id51">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id55">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-2-1-fix-and-improvements-2019-09-01">Version 0.2.1 - Fix and improvements (2019/09/01)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-2-1-fix-and-improvements-2019-09-01">Version 0.2.1 - Fix and improvements (2019/09/01)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id52">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id56">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id53">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id57">New Features</a></li>
 | 
				
			||||||
<li><a class="reference internal" href="#id54">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id58">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#id55">Misc</a></li>
 | 
					<li><a class="reference internal" href="#id59">Misc</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-2-0-statistics-2019-07-07">Version 0.2.0 - Statistics (2019/07/07)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-2-0-statistics-2019-07-07">Version 0.2.0 - Statistics (2019/07/07)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id56">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id60">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id57">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id61">New Features</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#id58">Misc</a></li>
 | 
					<li><a class="reference internal" href="#id62">Misc</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-1-1-fix-and-improvements-2019-02-07">Version 0.1.1 - Fix and improvements (2019/02/07)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-1-1-fix-and-improvements-2019-02-07">Version 0.1.1 - Fix and improvements (2019/02/07)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id59">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id63">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id60">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id64">New Features</a></li>
 | 
				
			||||||
<li><a class="reference internal" href="#id61">Bugs Fixed</a></li>
 | 
					<li><a class="reference internal" href="#id65">Bugs Fixed</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><a class="reference internal" href="#version-0-1-0-first-release-2018-07-04">Version 0.1.0 - First release 🎉 (2018-07-04)</a><ul>
 | 
					<li><a class="reference internal" href="#version-0-1-0-first-release-2018-07-04">Version 0.1.0 - First release 🎉 (2018-07-04)</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id62">Issues Closed</a><ul>
 | 
					<li><a class="reference internal" href="#id66">Issues Closed</a><ul>
 | 
				
			||||||
<li><a class="reference internal" href="#id63">New Features</a></li>
 | 
					<li><a class="reference internal" href="#id67">New Features</a></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -326,13 +338,45 @@
 | 
				
			|||||||
      
 | 
					      
 | 
				
			||||||
  <section id="change-log">
 | 
					  <section id="change-log">
 | 
				
			||||||
<h1>Change log<a class="headerlink" href="#change-log" title="Permalink to this headline">¶</a></h1>
 | 
					<h1>Change log<a class="headerlink" href="#change-log" title="Permalink to this headline">¶</a></h1>
 | 
				
			||||||
 | 
					<section id="version-0-6-0-2022-03-27">
 | 
				
			||||||
 | 
					<h2>Version 0.6.0 (2022/03/27)<a class="headerlink" href="#version-0-6-0-2022-03-27" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
 | 
					<p>This version introduces some changes on <a class="reference external" href="https://samr1.github.io/FitTrackee/features.html#account-preferences">user registration</a>.<br />From now on, a user needs to confirm his account after registration (an email with confirmation instructions is sent after registration).</p>
 | 
				
			||||||
 | 
					<section id="issues-closed">
 | 
				
			||||||
 | 
					<h3>Issues Closed<a class="headerlink" href="#issues-closed" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
 | 
					<section id="features">
 | 
				
			||||||
 | 
					<h4>Features<a class="headerlink" href="#features" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
 | 
					<ul class="simple">
 | 
				
			||||||
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/155">#155</a> -  Improve user registration</p></li>
 | 
				
			||||||
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/106">#106</a> -  Allow user to update email</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					<section id="bugs-fixed">
 | 
				
			||||||
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#bugs-fixed" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
 | 
					<ul class="simple">
 | 
				
			||||||
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/169">#169</a> -  user picture is not refreshed after update</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					<section id="pull-requests">
 | 
				
			||||||
 | 
					<h3>Pull Requests<a class="headerlink" href="#pull-requests" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
 | 
					<section id="id1">
 | 
				
			||||||
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
 | 
					<ul class="simple">
 | 
				
			||||||
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/pull/161">#161</a> - Minor translation issue on ‘Farthest’</p></li>
 | 
				
			||||||
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/pull/160">#160</a> - Minor translation issue on APP_ERROR</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					<p>Thanks to @Fmstrat</p>
 | 
				
			||||||
 | 
					<p>In this release 3 issues were closed.<br /><strong>Note:</strong> This release contains database migration (see upgrade instructions in <a class="reference external" href="https://samr1.github.io/FitTrackee/installation.html#upgrade">documentation</a>)</p>
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
 | 
					</section>
 | 
				
			||||||
<section id="version-0-5-7-2022-02-13">
 | 
					<section id="version-0-5-7-2022-02-13">
 | 
				
			||||||
<h2>Version 0.5.7 (2022/02/13)<a class="headerlink" href="#version-0-5-7-2022-02-13" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.5.7 (2022/02/13)<a class="headerlink" href="#version-0-5-7-2022-02-13" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<p>This release contains several fixes including security fixes.<br />Thanks to @DanielSiersleben for the report.</p>
 | 
					<p>This release contains several fixes including security fixes.<br />Thanks to @DanielSiersleben for the report.</p>
 | 
				
			||||||
<p>And from now on, admin account is not created on application initialization.<br />A new command is added to set administration rights on the account created after registration
 | 
					<p>And from now on, admin account is not created on application initialization.<br />A new command is added to set administration rights on the account created after registration
 | 
				
			||||||
(see <a class="reference external" href="https://samr1.github.io/FitTrackee/installation.html#upgrade">documentation</a>)</p>
 | 
					(see <a class="reference external" href="https://samr1.github.io/FitTrackee/installation.html#upgrade">documentation</a>)</p>
 | 
				
			||||||
<section id="issues-closed">
 | 
					<section id="id2">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#issues-closed" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="misc">
 | 
					<section id="misc">
 | 
				
			||||||
<h4>Misc<a class="headerlink" href="#misc" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Misc<a class="headerlink" href="#misc" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
@@ -340,8 +384,8 @@
 | 
				
			|||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="pull-requests">
 | 
					<section id="id3">
 | 
				
			||||||
<h3>Pull Requests<a class="headerlink" href="#pull-requests" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Pull Requests<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="security">
 | 
					<section id="security">
 | 
				
			||||||
<h4>Security<a class="headerlink" href="#security" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Security<a class="headerlink" href="#security" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
@@ -359,8 +403,8 @@
 | 
				
			|||||||
</li>
 | 
					</li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id1">
 | 
					<section id="id4">
 | 
				
			||||||
<h4>Misc<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Misc<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/pull/152">#152</a> - Fixes and improvements:</p>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/pull/152">#152</a> - Fixes and improvements:</p>
 | 
				
			||||||
<ul>
 | 
					<ul>
 | 
				
			||||||
@@ -376,17 +420,17 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-5-6-2022-02-05">
 | 
					<section id="version-0-5-6-2022-02-05">
 | 
				
			||||||
<h2>Version 0.5.6 (2022/02/05)<a class="headerlink" href="#version-0-5-6-2022-02-05" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.5.6 (2022/02/05)<a class="headerlink" href="#version-0-5-6-2022-02-05" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id2">
 | 
					<section id="id5">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="bugs-fixed">
 | 
					<section id="id6">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#bugs-fixed" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/146">#146</a> - incorrect label on workouts filters</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/146">#146</a> - incorrect label on workouts filters</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id3">
 | 
					<section id="id7">
 | 
				
			||||||
<h3>Pull Requests<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Pull Requests<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/pull/145">#145</a> - fix on database models</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/pull/145">#145</a> - fix on database models</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -395,8 +439,8 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-5-5-2022-01-19">
 | 
					<section id="version-0-5-5-2022-01-19">
 | 
				
			||||||
<h2>Version 0.5.5 (2022/01/19)<a class="headerlink" href="#version-0-5-5-2022-01-19" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.5.5 (2022/01/19)<a class="headerlink" href="#version-0-5-5-2022-01-19" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id4">
 | 
					<section id="id8">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id8" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="new-features">
 | 
					<section id="new-features">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#new-features" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
@@ -406,8 +450,8 @@
 | 
				
			|||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/134">#134</a> - Wind direction</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/134">#134</a> - Wind direction</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id5">
 | 
					<section id="id9">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id5" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/commit/877fa0faaabc0130402638905fe04f84563eb278">877fa0f</a> - fix sport icon color (when changed) on calendar on small resolutions</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/commit/877fa0faaabc0130402638905fe04f84563eb278">877fa0f</a> - fix sport icon color (when changed) on calendar on small resolutions</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -417,10 +461,10 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-5-4-2022-01-01">
 | 
					<section id="version-0-5-4-2022-01-01">
 | 
				
			||||||
<h2>Version 0.5.4 (2022/01/01)<a class="headerlink" href="#version-0-5-4-2022-01-01" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.5.4 (2022/01/01)<a class="headerlink" href="#version-0-5-4-2022-01-01" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id6">
 | 
					<section id="id10">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id6" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id7">
 | 
					<section id="id11">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id7" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id11" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/131">#131</a> - No workouts displayed on calendar</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/131">#131</a> - No workouts displayed on calendar</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -430,10 +474,10 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-5-3-2022-01-01">
 | 
					<section id="version-0-5-3-2022-01-01">
 | 
				
			||||||
<h2>Version 0.5.3 (2022/01/01)<a class="headerlink" href="#version-0-5-3-2022-01-01" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.5.3 (2022/01/01)<a class="headerlink" href="#version-0-5-3-2022-01-01" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id8">
 | 
					<section id="id12">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id8" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id12" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id9">
 | 
					<section id="id13">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id9" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id13" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/129">#129</a> - Display only active sports when editing a workout</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/129">#129</a> - Display only active sports when editing a workout</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/127">#127</a> - parse_email_url() can’t validate a legitimate EMAIL_URI such as “smtp://localhost:25”</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/127">#127</a> - parse_email_url() can’t validate a legitimate EMAIL_URI such as “smtp://localhost:25”</p></li>
 | 
				
			||||||
@@ -444,10 +488,10 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-5-2-2021-12-19">
 | 
					<section id="version-0-5-2-2021-12-19">
 | 
				
			||||||
<h2>Version 0.5.2 (2021/12/19)<a class="headerlink" href="#version-0-5-2-2021-12-19" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.5.2 (2021/12/19)<a class="headerlink" href="#version-0-5-2-2021-12-19" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id10">
 | 
					<section id="id14">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id10" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id14" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id11">
 | 
					<section id="id15">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id11" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id15" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/123">#123</a> - Allow user to reset preferences for a sport</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/123">#123</a> - Allow user to reset preferences for a sport</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/121">#121</a> - Add activity : snowshoes</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/121">#121</a> - Add activity : snowshoes</p></li>
 | 
				
			||||||
@@ -458,10 +502,10 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-5-1-2021-11-30">
 | 
					<section id="version-0-5-1-2021-11-30">
 | 
				
			||||||
<h2>Version 0.5.1 (2021/11/30)<a class="headerlink" href="#version-0-5-1-2021-11-30" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.5.1 (2021/11/30)<a class="headerlink" href="#version-0-5-1-2021-11-30" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id12">
 | 
					<section id="id16">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id12" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id16" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id13">
 | 
					<section id="id17">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id13" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id17" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/116">#116</a> - Better UI for Speed and Elevation buttons in the graph of the Workout screen</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/116">#116</a> - Better UI for Speed and Elevation buttons in the graph of the Workout screen</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/115">#115</a> - Add option to download the GPX file of a Workout</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/115">#115</a> - Add option to download the GPX file of a Workout</p></li>
 | 
				
			||||||
@@ -473,10 +517,10 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-5-0-2021-11-14">
 | 
					<section id="version-0-5-0-2021-11-14">
 | 
				
			||||||
<h2>Version 0.5.0 (2021/11/14)<a class="headerlink" href="#version-0-5-0-2021-11-14" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.5.0 (2021/11/14)<a class="headerlink" href="#version-0-5-0-2021-11-14" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id14">
 | 
					<section id="id18">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id14" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id18" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id15">
 | 
					<section id="id19">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id15" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id19" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/99">#99</a> - Display workout with imperial units</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/99">#99</a> - Display workout with imperial units</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/91">#91</a> - Display elevation chart with min and max altitude of workout</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/91">#91</a> - Display elevation chart with min and max altitude of workout</p></li>
 | 
				
			||||||
@@ -484,21 +528,21 @@
 | 
				
			|||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/18">#18</a> - Better UI</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/18">#18</a> - Better UI</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id16">
 | 
					<section id="id20">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id16" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id20" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/95">#95</a> - Some workouts seem to be missing on statistics chart</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/95">#95</a> - Some workouts seem to be missing on statistics chart</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id17">
 | 
					<section id="id21">
 | 
				
			||||||
<h4>Misc<a class="headerlink" href="#id17" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Misc<a class="headerlink" href="#id21" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/104">#104</a> - Switch to AGPLv3 license</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/104">#104</a> - Switch to AGPLv3 license</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id18">
 | 
					<section id="id22">
 | 
				
			||||||
<h3>Pull Requests<a class="headerlink" href="#id18" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Pull Requests<a class="headerlink" href="#id22" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/pull/101">#101</a> - Docker updates for full files</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/pull/101">#101</a> - Docker updates for full files</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/pull/100">#100</a> - Add client application in docker for development</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/pull/100">#100</a> - Add client application in docker for development</p></li>
 | 
				
			||||||
@@ -515,17 +559,17 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-4-9-2021-07-16">
 | 
					<section id="version-0-4-9-2021-07-16">
 | 
				
			||||||
<h2>Version 0.4.9 (2021/07/16)<a class="headerlink" href="#version-0-4-9-2021-07-16" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.4.9 (2021/07/16)<a class="headerlink" href="#version-0-4-9-2021-07-16" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id19">
 | 
					<section id="id23">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id19" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id23" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id20">
 | 
					<section id="id24">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id20" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id24" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/83">#83</a> - allow using configured tile server to generate static maps<br /><strong>Note</strong>: to keep using the default tile server, set environment variable <code class="docutils literal notranslate"><span class="pre">DEFAULT_STATICMAP</span></code> to <code class="docutils literal notranslate"><span class="pre">True</span></code></p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/83">#83</a> - allow using configured tile server to generate static maps<br /><strong>Note</strong>: to keep using the default tile server, set environment variable <code class="docutils literal notranslate"><span class="pre">DEFAULT_STATICMAP</span></code> to <code class="docutils literal notranslate"><span class="pre">True</span></code></p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/81">#81</a> - display remaining characters in textarea</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/81">#81</a> - display remaining characters in textarea</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id21">
 | 
					<section id="id25">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id21" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id25" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/82">#82</a> - a user can not modify his birth day</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/82">#82</a> - a user can not modify his birth day</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/80">#80</a> - can not save notes with control characters</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/80">#80</a> - can not save notes with control characters</p></li>
 | 
				
			||||||
@@ -536,10 +580,10 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-4-8-2021-07-03">
 | 
					<section id="version-0-4-8-2021-07-03">
 | 
				
			||||||
<h2>Version 0.4.8 (2021/07/03)<a class="headerlink" href="#version-0-4-8-2021-07-03" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.4.8 (2021/07/03)<a class="headerlink" href="#version-0-4-8-2021-07-03" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id22">
 | 
					<section id="id26">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id22" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id26" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id23">
 | 
					<section id="id27">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id23" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id27" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/79">#79</a> - Fails to start after make rebuild</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/79">#79</a> - Fails to start after make rebuild</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -549,17 +593,17 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-4-7-2021-04-07">
 | 
					<section id="version-0-4-7-2021-04-07">
 | 
				
			||||||
<h2>Version 0.4.7 (2021/04/07)<a class="headerlink" href="#version-0-4-7-2021-04-07" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.4.7 (2021/04/07)<a class="headerlink" href="#version-0-4-7-2021-04-07" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id24">
 | 
					<section id="id28">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id24" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id28" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id25">
 | 
					<section id="id29">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id25" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id29" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/75">#75</a> - Workouts on the same day are not displayed in right order</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/75">#75</a> - Workouts on the same day are not displayed in right order</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id26">
 | 
					<section id="id30">
 | 
				
			||||||
<h3>Misc<a class="headerlink" href="#id26" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Misc<a class="headerlink" href="#id30" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>Update Python and Javascript dependencies<br /><strong>IMPORTANT</strong>: Due to <a class="reference external" href="https://docs.sqlalchemy.org/en/14/changelog/changelog_14.html#change-3687655465c25a39b968b4f5f6e9170b">SQLAlchemy update (1.4+)</a>, engine URLs starting with <code class="docutils literal notranslate"><span class="pre">postgres://</span></code> are no longer supported. Please update <code class="docutils literal notranslate"><span class="pre">DATABASE_URL</span></code> with <code class="docutils literal notranslate"><span class="pre">postgresql://</span></code>.</p></li>
 | 
					<li><p>Update Python and Javascript dependencies<br /><strong>IMPORTANT</strong>: Due to <a class="reference external" href="https://docs.sqlalchemy.org/en/14/changelog/changelog_14.html#change-3687655465c25a39b968b4f5f6e9170b">SQLAlchemy update (1.4+)</a>, engine URLs starting with <code class="docutils literal notranslate"><span class="pre">postgres://</span></code> are no longer supported. Please update <code class="docutils literal notranslate"><span class="pre">DATABASE_URL</span></code> with <code class="docutils literal notranslate"><span class="pre">postgresql://</span></code>.</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -568,10 +612,10 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-4-6-2021-02-21">
 | 
					<section id="version-0-4-6-2021-02-21">
 | 
				
			||||||
<h2>Version 0.4.6 (2021/02/21)<a class="headerlink" href="#version-0-4-6-2021-02-21" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.4.6 (2021/02/21)<a class="headerlink" href="#version-0-4-6-2021-02-21" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id27">
 | 
					<section id="id31">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id27" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id31" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id28">
 | 
					<section id="id32">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id28" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id32" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/72">#72</a> - Error message when file exceeding size is incorrect</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/72">#72</a> - Error message when file exceeding size is incorrect</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/71">#71</a> - max size or max number of files must be greater than 0</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/71">#71</a> - max size or max number of files must be greater than 0</p></li>
 | 
				
			||||||
@@ -583,10 +627,10 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-4-5-2021-02-17">
 | 
					<section id="version-0-4-5-2021-02-17">
 | 
				
			||||||
<h2>Version 0.4.5 (2021/02/17)<a class="headerlink" href="#version-0-4-5-2021-02-17" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.4.5 (2021/02/17)<a class="headerlink" href="#version-0-4-5-2021-02-17" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id29">
 | 
					<section id="id33">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id29" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id33" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id30">
 | 
					<section id="id34">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id30" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id34" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/66">#66</a> - invalid gpx limit used when importing zip archive</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/66">#66</a> - invalid gpx limit used when importing zip archive</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/64">#64</a> - Only 50 workouts per month shown in calendar</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/64">#64</a> - Only 50 workouts per month shown in calendar</p></li>
 | 
				
			||||||
@@ -597,17 +641,17 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-4-4-2021-01-31">
 | 
					<section id="version-0-4-4-2021-01-31">
 | 
				
			||||||
<h2>Version 0.4.4 (2021/01/31)<a class="headerlink" href="#version-0-4-4-2021-01-31" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.4.4 (2021/01/31)<a class="headerlink" href="#version-0-4-4-2021-01-31" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id31">
 | 
					<section id="id35">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id31" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id35" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id32">
 | 
					<section id="id36">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id32" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id36" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/62">#62</a> - Error when sending reset password email</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/62">#62</a> - Error when sending reset password email</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id33">
 | 
					<section id="id37">
 | 
				
			||||||
<h3>Misc<a class="headerlink" href="#id33" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Misc<a class="headerlink" href="#id37" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>Refactoring before introducing new features.</p></li>
 | 
					<li><p>Refactoring before introducing new features.</p></li>
 | 
				
			||||||
<li><p>Add docker files for evaluation purposes.</p></li>
 | 
					<li><p>Add docker files for evaluation purposes.</p></li>
 | 
				
			||||||
@@ -617,16 +661,16 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-4-3-2021-01-10">
 | 
					<section id="version-0-4-3-2021-01-10">
 | 
				
			||||||
<h2>Version 0.4.3 (2021/01/10)<a class="headerlink" href="#version-0-4-3-2021-01-10" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.4.3 (2021/01/10)<a class="headerlink" href="#version-0-4-3-2021-01-10" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id34">
 | 
					<section id="id38">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id34" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id38" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id35">
 | 
					<section id="id39">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id35" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id39" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/58">#58</a> - Standardize terms used for workouts<br /><strong>Note:</strong> Database model, upload directory for workouts and API endpoints are also updated.</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/58">#58</a> - Standardize terms used for workouts<br /><strong>Note:</strong> Database model, upload directory for workouts and API endpoints are also updated.</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id36">
 | 
					<section id="id40">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id36" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id40" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/59">#59</a> - No message displayed on uploading image error</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/59">#59</a> - No message displayed on uploading image error</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -636,18 +680,18 @@
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-4-2-2021-01-03">
 | 
					<section id="version-0-4-2-2021-01-03">
 | 
				
			||||||
<h2>Version 0.4.2 (2021/01/03)<a class="headerlink" href="#version-0-4-2-2021-01-03" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.4.2 (2021/01/03)<a class="headerlink" href="#version-0-4-2-2021-01-03" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id37">
 | 
					<section id="id41">
 | 
				
			||||||
<h3>Misc<a class="headerlink" href="#id37" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Misc<a class="headerlink" href="#id41" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<p>No new features in this release, only some refactorings before introducing
 | 
					<p>No new features in this release, only some refactorings before introducing
 | 
				
			||||||
new features.</p>
 | 
					new features.</p>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-4-1-2020-12-31">
 | 
					<section id="version-0-4-1-2020-12-31">
 | 
				
			||||||
<h2>Version 0.4.1 (2020/12/31)<a class="headerlink" href="#version-0-4-1-2020-12-31" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.4.1 (2020/12/31)<a class="headerlink" href="#version-0-4-1-2020-12-31" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id38">
 | 
					<section id="id42">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id38" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id42" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id39">
 | 
					<section id="id43">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id39" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id43" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/57">#57</a> - Use uuid for activities</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/57">#57</a> - Use uuid for activities</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -663,10 +707,10 @@ new features.</p>
 | 
				
			|||||||
<li><p>It’s now possible to change the tile provider for maps. The default tile server is now <strong>OpenStreetMap</strong>’s standard tile layer (replacing <strong>ThunderForest Outdoors</strong>),
 | 
					<li><p>It’s now possible to change the tile provider for maps. The default tile server is now <strong>OpenStreetMap</strong>’s standard tile layer (replacing <strong>ThunderForest Outdoors</strong>),
 | 
				
			||||||
see <a class="reference external" href="https://samr1.github.io/FitTrackee/installation.html#map-tile-server">Map tile server in documentation</a>.</p></li>
 | 
					see <a class="reference external" href="https://samr1.github.io/FitTrackee/installation.html#map-tile-server">Map tile server in documentation</a>.</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<section id="id40">
 | 
					<section id="id44">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id40" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id44" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id41">
 | 
					<section id="id45">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id41" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id45" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/54">#54</a> - Tile server can be changed</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/54">#54</a> - Tile server can be changed</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/53">#53</a> - Simplify FitTrackee installation</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/53">#53</a> - Simplify FitTrackee installation</p></li>
 | 
				
			||||||
@@ -682,10 +726,10 @@ see <a class="reference external" href="https://samr1.github.io/FitTrackee/insta
 | 
				
			|||||||
<li><p>FitTrackee administration is now available (see <a class="reference external" href="https://samr1.github.io/FitTrackee/features.html#administration">documentation</a>)<br />⚠️ Warning: some application parameters move from environment variables to database (see <a class="reference external" href="https://samr1.github.io/FitTrackee/installation.html#environment-variables">installation</a>).</p></li>
 | 
					<li><p>FitTrackee administration is now available (see <a class="reference external" href="https://samr1.github.io/FitTrackee/features.html#administration">documentation</a>)<br />⚠️ Warning: some application parameters move from environment variables to database (see <a class="reference external" href="https://samr1.github.io/FitTrackee/installation.html#environment-variables">installation</a>).</p></li>
 | 
				
			||||||
<li><p>in order to send emails, Redis is now a mandatory dependency</p></li>
 | 
					<li><p>in order to send emails, Redis is now a mandatory dependency</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<section id="id42">
 | 
					<section id="id46">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id42" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id46" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id43">
 | 
					<section id="id47">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id43" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id47" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/50">#50</a> - A user can reset his password</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/50">#50</a> - A user can reset his password</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/17">#17</a> - A user can delete his account</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/17">#17</a> - A user can delete his account</p></li>
 | 
				
			||||||
@@ -697,8 +741,8 @@ see <a class="reference external" href="https://samr1.github.io/FitTrackee/insta
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-2-5-fix-and-improvements-2020-01-31">
 | 
					<section id="version-0-2-5-fix-and-improvements-2020-01-31">
 | 
				
			||||||
<h2>Version 0.2.5 - Fix and improvements (2020/01/31)<a class="headerlink" href="#version-0-2-5-fix-and-improvements-2020-01-31" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.2.5 - Fix and improvements (2020/01/31)<a class="headerlink" href="#version-0-2-5-fix-and-improvements-2020-01-31" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id44">
 | 
					<section id="id48">
 | 
				
			||||||
<h3>Misc<a class="headerlink" href="#id44" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Misc<a class="headerlink" href="#id48" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<p>This version contains minor fix and improvements on client side:</p>
 | 
					<p>This version contains minor fix and improvements on client side:</p>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/commit/4c3fc343d51b9c27d3ebab71df648bcf7d7bae59">4c3fc34</a> - empty user data on logout</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/commit/4c3fc343d51b9c27d3ebab71df648bcf7d7bae59">4c3fc34</a> - empty user data on logout</p></li>
 | 
				
			||||||
@@ -711,10 +755,10 @@ add URL interceptors to simplify routes definition</p></li>
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-2-4-minor-fix-2020-01-30">
 | 
					<section id="version-0-2-4-minor-fix-2020-01-30">
 | 
				
			||||||
<h2>Version 0.2.4 - Minor fix (2020/01/30)<a class="headerlink" href="#version-0-2-4-minor-fix-2020-01-30" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.2.4 - Minor fix (2020/01/30)<a class="headerlink" href="#version-0-2-4-minor-fix-2020-01-30" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id45">
 | 
					<section id="id49">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id45" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id49" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id46">
 | 
					<section id="id50">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id46" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id50" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/47">#47</a> - timezone drop-down is not displayed correctly</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/47">#47</a> - timezone drop-down is not displayed correctly</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/46">#46</a> - calendar cannot display more than 5 or 6 activities on the same day</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/46">#46</a> - calendar cannot display more than 5 or 6 activities on the same day</p></li>
 | 
				
			||||||
@@ -725,17 +769,17 @@ add URL interceptors to simplify routes definition</p></li>
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-2-3-fittrackee-available-in-french-2019-12-29">
 | 
					<section id="version-0-2-3-fittrackee-available-in-french-2019-12-29">
 | 
				
			||||||
<h2>Version 0.2.3 - FitTrackee available in French (2019/12/29)<a class="headerlink" href="#version-0-2-3-fittrackee-available-in-french-2019-12-29" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.2.3 - FitTrackee available in French (2019/12/29)<a class="headerlink" href="#version-0-2-3-fittrackee-available-in-french-2019-12-29" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id47">
 | 
					<section id="id51">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id47" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id51" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id48">
 | 
					<section id="id52">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id48" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id52" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/43">#43</a> - Display weekend days with a different background color on calendar</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/43">#43</a> - Display weekend days with a different background color on calendar</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/40">#40</a> - Localize FitTrackee (i18n)</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/40">#40</a> - Localize FitTrackee (i18n)</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id49">
 | 
					<section id="id53">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id49" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id53" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/44">#44</a> - Cannot edit an activity that does not have a gpx file</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/44">#44</a> - Cannot edit an activity that does not have a gpx file</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -745,10 +789,10 @@ add URL interceptors to simplify routes definition</p></li>
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-2-2-statistics-fix-2019-09-23">
 | 
					<section id="version-0-2-2-statistics-fix-2019-09-23">
 | 
				
			||||||
<h2>Version 0.2.2 - Statistics fix (2019/09/23)<a class="headerlink" href="#version-0-2-2-statistics-fix-2019-09-23" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.2.2 - Statistics fix (2019/09/23)<a class="headerlink" href="#version-0-2-2-statistics-fix-2019-09-23" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id50">
 | 
					<section id="id54">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id50" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id54" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id51">
 | 
					<section id="id55">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id51" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id55" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/41">#41</a> - User statistics are incorrect</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/41">#41</a> - User statistics are incorrect</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -758,10 +802,10 @@ add URL interceptors to simplify routes definition</p></li>
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-2-1-fix-and-improvements-2019-09-01">
 | 
					<section id="version-0-2-1-fix-and-improvements-2019-09-01">
 | 
				
			||||||
<h2>Version 0.2.1 - Fix and improvements (2019/09/01)<a class="headerlink" href="#version-0-2-1-fix-and-improvements-2019-09-01" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.2.1 - Fix and improvements (2019/09/01)<a class="headerlink" href="#version-0-2-1-fix-and-improvements-2019-09-01" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id52">
 | 
					<section id="id56">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id52" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id56" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id53">
 | 
					<section id="id57">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id53" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id57" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/4">#4</a> - Show points on the map when mouse over the chart</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/4">#4</a> - Show points on the map when mouse over the chart</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/14">#14</a> - Display segments informations</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/14">#14</a> - Display segments informations</p></li>
 | 
				
			||||||
@@ -772,15 +816,15 @@ add URL interceptors to simplify routes definition</p></li>
 | 
				
			|||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/37">#37</a> - Display map on activities list</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/37">#37</a> - Display map on activities list</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id54">
 | 
					<section id="id58">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id54" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id58" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/34">#34</a> - Weather is not displayed anymore</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/34">#34</a> - Weather is not displayed anymore</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id55">
 | 
					<section id="id59">
 | 
				
			||||||
<h3>Misc<a class="headerlink" href="#id55" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Misc<a class="headerlink" href="#id59" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><strong><a class="reference external" href="https://poetry.eustace.io/">Poetry</a></strong> replaces <strong><a class="reference external" href="https://docs.pipenv.org">pipenv</a></strong> for Python packages management</p></li>
 | 
					<li><p><strong><a class="reference external" href="https://poetry.eustace.io/">Poetry</a></strong> replaces <strong><a class="reference external" href="https://docs.pipenv.org">pipenv</a></strong> for Python packages management</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -789,17 +833,17 @@ add URL interceptors to simplify routes definition</p></li>
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-2-0-statistics-2019-07-07">
 | 
					<section id="version-0-2-0-statistics-2019-07-07">
 | 
				
			||||||
<h2>Version 0.2.0 - Statistics (2019/07/07)<a class="headerlink" href="#version-0-2-0-statistics-2019-07-07" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.2.0 - Statistics (2019/07/07)<a class="headerlink" href="#version-0-2-0-statistics-2019-07-07" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id56">
 | 
					<section id="id60">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id56" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id60" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id57">
 | 
					<section id="id61">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id57" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id61" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/13">#13</a> - Detailed statistics</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/Fittrackee/issues/13">#13</a> - Detailed statistics</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id58">
 | 
					<section id="id62">
 | 
				
			||||||
<h3>Misc<a class="headerlink" href="#id58" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Misc<a class="headerlink" href="#id62" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>Update dependencies</p></li>
 | 
					<li><p>Update dependencies</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
@@ -808,17 +852,17 @@ add URL interceptors to simplify routes definition</p></li>
 | 
				
			|||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="version-0-1-1-fix-and-improvements-2019-02-07">
 | 
					<section id="version-0-1-1-fix-and-improvements-2019-02-07">
 | 
				
			||||||
<h2>Version 0.1.1 - Fix and improvements (2019/02/07)<a class="headerlink" href="#version-0-1-1-fix-and-improvements-2019-02-07" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Version 0.1.1 - Fix and improvements (2019/02/07)<a class="headerlink" href="#version-0-1-1-fix-and-improvements-2019-02-07" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<section id="id59">
 | 
					<section id="id63">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id59" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id63" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id60">
 | 
					<section id="id64">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id60" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id64" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/25">#25</a> - Display records on calendar</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/25">#25</a> - Display records on calendar</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/22">#22</a> - Add a total on current month statistics</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/22">#22</a> - Add a total on current month statistics</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="id61">
 | 
					<section id="id65">
 | 
				
			||||||
<h4>Bugs Fixed<a class="headerlink" href="#id61" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Bugs Fixed<a class="headerlink" href="#id65" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/31">#31</a> - Use moving duration for stats</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/31">#31</a> - Use moving duration for stats</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/29">#29</a> - Pause duration calculation with segments</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/29">#29</a> - Pause duration calculation with segments</p></li>
 | 
				
			||||||
@@ -867,10 +911,10 @@ add URL interceptors to simplify routes definition</p></li>
 | 
				
			|||||||
<li><p>no administration for now</p></li>
 | 
					<li><p>no administration for now</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<p>➡️ more informations: see <a class="reference external" href="https://samr1.github.io/FitTrackee/">documentation</a>  and <a class="reference external" href="https://github.com/SamR1/FitTrackee/issues">current issues</a></p>
 | 
					<p>➡️ more informations: see <a class="reference external" href="https://samr1.github.io/FitTrackee/">documentation</a>  and <a class="reference external" href="https://github.com/SamR1/FitTrackee/issues">current issues</a></p>
 | 
				
			||||||
<section id="id62">
 | 
					<section id="id66">
 | 
				
			||||||
<h3>Issues Closed<a class="headerlink" href="#id62" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>Issues Closed<a class="headerlink" href="#id66" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
<section id="id63">
 | 
					<section id="id67">
 | 
				
			||||||
<h4>New Features<a class="headerlink" href="#id63" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>New Features<a class="headerlink" href="#id67" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/11">#11</a> - Timezone support</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/11">#11</a> - Timezone support</p></li>
 | 
				
			||||||
<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/10">#10</a> - Add a note to an activity</p></li>
 | 
					<li><p><a class="reference external" href="https://github.com/SamR1/FitTrackee/issues/10">#10</a> - Add a note to an activity</p></li>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Features — FitTrackee 0.5.7
 | 
					    <title>Features — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="index.html">
 | 
					        <a class="navbar-brand" href="index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -209,13 +209,19 @@
 | 
				
			|||||||
<li><dl class="simple">
 | 
					<li><dl class="simple">
 | 
				
			||||||
<dt>User records by sports:</dt><dd><ul class="simple">
 | 
					<dt>User records by sports:</dt><dd><ul class="simple">
 | 
				
			||||||
<li><p>average speed</p></li>
 | 
					<li><p>average speed</p></li>
 | 
				
			||||||
<li><p>farest distance</p></li>
 | 
					<li><p>farthest distance</p></li>
 | 
				
			||||||
<li><p>longest duration</p></li>
 | 
					<li><p>longest duration</p></li>
 | 
				
			||||||
<li><p>maximum speed</p></li>
 | 
					<li><p>maximum speed</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</dd>
 | 
					</dd>
 | 
				
			||||||
</dl>
 | 
					</dl>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					<div class="admonition note">
 | 
				
			||||||
 | 
					<p class="admonition-title">Note</p>
 | 
				
			||||||
 | 
					<p>Records may differ from records displayed by the application that originally generated the gpx files.</p>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>Workouts list and filter. Only sports with workouts are displayed in sport dropdown.</p></li>
 | 
					<li><p>Workouts list and filter. Only sports with workouts are displayed in sport dropdown.</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<div class="admonition note">
 | 
					<div class="admonition note">
 | 
				
			||||||
@@ -226,9 +232,17 @@
 | 
				
			|||||||
<section id="account-preferences">
 | 
					<section id="account-preferences">
 | 
				
			||||||
<h2>Account & preferences<a class="headerlink" href="#account-preferences" title="Permalink to this headline">¶</a></h2>
 | 
					<h2>Account & preferences<a class="headerlink" href="#account-preferences" title="Permalink to this headline">¶</a></h2>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>A user can create, update and deleted his account</p></li>
 | 
					<li><p>A user can create, update and deleted his account.</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>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					<div class="admonition note">
 | 
				
			||||||
 | 
					<p class="admonition-title">Note</p>
 | 
				
			||||||
 | 
					<p>The command line to add admin rights activates the account if it is inactive.</p>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>A user can set language, timezone and first day of week.</p></li>
 | 
					<li><p>A user can set language, timezone and first day of week.</p></li>
 | 
				
			||||||
<li><p>A user can reset his password (<em>new in 0.3.0</em>)</p></li>
 | 
					<li><p>A user can reset his password (<em>new in 0.3.0</em>)</p></li>
 | 
				
			||||||
 | 
					<li><p>A user can change his email address (<em>new in 0.6.0</em>)</p></li>
 | 
				
			||||||
<li><p>A user can choose between metric system and imperial system for distance, elevation and speed display (<em>new in 0.5.0</em>)</p></li>
 | 
					<li><p>A user can choose between metric system and imperial system for distance, elevation and speed display (<em>new in 0.5.0</em>)</p></li>
 | 
				
			||||||
<li><dl class="simple">
 | 
					<li><dl class="simple">
 | 
				
			||||||
<dt>A user can set sport preferences (<em>new in 0.5.0</em>):</dt><dd><ul>
 | 
					<dt>A user can set sport preferences (<em>new in 0.5.0</em>):</dt><dd><ul>
 | 
				
			||||||
@@ -260,6 +274,7 @@
 | 
				
			|||||||
<li><p>maximum size of uploaded files</p></li>
 | 
					<li><p>maximum size of uploaded files</p></li>
 | 
				
			||||||
<li><p>maximum size of zip archive</p></li>
 | 
					<li><p>maximum size of zip archive</p></li>
 | 
				
			||||||
<li><p>maximum number of files in the zip archive. If an archive contains more files, only the configured number of files is processed, without raising errors.</p></li>
 | 
					<li><p>maximum number of files in the zip archive. If an archive contains more files, only the configured number of files is processed, without raising errors.</p></li>
 | 
				
			||||||
 | 
					<li><p>administrator email for contact (<em>new in 0.6.0</em>)</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<div class="admonition warning">
 | 
					<div class="admonition warning">
 | 
				
			||||||
<p class="admonition-title">Warning</p>
 | 
					<p class="admonition-title">Warning</p>
 | 
				
			||||||
@@ -268,8 +283,17 @@
 | 
				
			|||||||
</li>
 | 
					</li>
 | 
				
			||||||
<li><p><strong>Users</strong></p>
 | 
					<li><p><strong>Users</strong></p>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>display users list and details</p></li>
 | 
					<li><p>display and filter users list</p></li>
 | 
				
			||||||
<li><p>edit a user to add/remove administration rights</p></li>
 | 
					<li><dl class="simple">
 | 
				
			||||||
 | 
					<dt>edit a user to:</dt><dd><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>)</p></li>
 | 
				
			||||||
 | 
					</ul>
 | 
				
			||||||
 | 
					</dd>
 | 
				
			||||||
 | 
					</dl>
 | 
				
			||||||
 | 
					</li>
 | 
				
			||||||
<li><p>delete a user</p></li>
 | 
					<li><p>delete a user</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
</li>
 | 
					</li>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
				
			||||||
    <title>Index — FitTrackee 0.5.7
 | 
					    <title>Index — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -37,7 +37,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="index.html">
 | 
					        <a class="navbar-brand" href="index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
				
			||||||
    <title>HTTP Routing Table — FitTrackee 0.5.7
 | 
					    <title>HTTP Routing Table — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -44,7 +44,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="index.html">
 | 
					        <a class="navbar-brand" href="index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -125,11 +125,6 @@
 | 
				
			|||||||
     <tr class="pcap"><td></td><td> </td><td></td></tr>
 | 
					     <tr class="pcap"><td></td><td> </td><td></td></tr>
 | 
				
			||||||
     <tr class="cap" id="cap-/api"><td></td><td>
 | 
					     <tr class="cap" id="cap-/api"><td></td><td>
 | 
				
			||||||
       <strong>/api</strong></td><td></td></tr>
 | 
					       <strong>/api</strong></td><td></td></tr>
 | 
				
			||||||
     <tr>
 | 
					 | 
				
			||||||
       <td></td>
 | 
					 | 
				
			||||||
       <td>
 | 
					 | 
				
			||||||
       <a href="api/auth.html#get--api-auth-logout"><code class="xref">GET /api/auth/logout</code></a></td><td>
 | 
					 | 
				
			||||||
       <em></em></td></tr>
 | 
					 | 
				
			||||||
     <tr>
 | 
					     <tr>
 | 
				
			||||||
       <td></td>
 | 
					       <td></td>
 | 
				
			||||||
       <td>
 | 
					       <td>
 | 
				
			||||||
@@ -235,6 +230,21 @@
 | 
				
			|||||||
       <td>
 | 
					       <td>
 | 
				
			||||||
       <a href="api/workouts.html#get--api-workouts-map_tile-(s)-(z)-(x)-(y).png"><code class="xref">GET /api/workouts/map_tile/(s)/(z)/(x)/(y).png</code></a></td><td>
 | 
					       <a href="api/workouts.html#get--api-workouts-map_tile-(s)-(z)-(x)-(y).png"><code class="xref">GET /api/workouts/map_tile/(s)/(z)/(x)/(y).png</code></a></td><td>
 | 
				
			||||||
       <em></em></td></tr>
 | 
					       <em></em></td></tr>
 | 
				
			||||||
 | 
					     <tr>
 | 
				
			||||||
 | 
					       <td></td>
 | 
				
			||||||
 | 
					       <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-resend-confirmation"><code class="xref">POST /api/auth/account/resend-confirmation</code></a></td><td>
 | 
				
			||||||
 | 
					       <em></em></td></tr>
 | 
				
			||||||
 | 
					     <tr>
 | 
				
			||||||
 | 
					       <td></td>
 | 
				
			||||||
 | 
					       <td>
 | 
				
			||||||
 | 
					       <a href="api/auth.html#post--api-auth-email-update"><code class="xref">POST /api/auth/email/update</code></a></td><td>
 | 
				
			||||||
 | 
					       <em></em></td></tr>
 | 
				
			||||||
     <tr>
 | 
					     <tr>
 | 
				
			||||||
       <td></td>
 | 
					       <td></td>
 | 
				
			||||||
       <td>
 | 
					       <td>
 | 
				
			||||||
@@ -305,6 +315,11 @@
 | 
				
			|||||||
       <td>
 | 
					       <td>
 | 
				
			||||||
       <a href="api/workouts.html#delete--api-workouts-(string-workout_short_id)"><code class="xref">DELETE /api/workouts/(string:workout_short_id)</code></a></td><td>
 | 
					       <a href="api/workouts.html#delete--api-workouts-(string-workout_short_id)"><code class="xref">DELETE /api/workouts/(string:workout_short_id)</code></a></td><td>
 | 
				
			||||||
       <em></em></td></tr>
 | 
					       <em></em></td></tr>
 | 
				
			||||||
 | 
					     <tr>
 | 
				
			||||||
 | 
					       <td></td>
 | 
				
			||||||
 | 
					       <td>
 | 
				
			||||||
 | 
					       <a href="api/auth.html#patch--api-auth-profile-edit-account"><code class="xref">PATCH /api/auth/profile/edit/account</code></a></td><td>
 | 
				
			||||||
 | 
					       <em></em></td></tr>
 | 
				
			||||||
     <tr>
 | 
					     <tr>
 | 
				
			||||||
       <td></td>
 | 
					       <td></td>
 | 
				
			||||||
       <td>
 | 
					       <td>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>FitTrackee — FitTrackee 0.5.7
 | 
					    <title>FitTrackee — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -39,7 +39,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="#">
 | 
					        <a class="navbar-brand" href="#">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Installation — FitTrackee 0.5.7
 | 
					    <title>Installation — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="index.html">
 | 
					        <a class="navbar-brand" href="index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -552,11 +552,15 @@ $ <span class="nb">source</span> .env
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>Open <a class="reference external" href="http://localhost:3000">http://localhost:3000</a> and register</p></li>
 | 
					<li><p>Open <a class="reference external" href="http://localhost:3000">http://localhost:3000</a> and register</p></li>
 | 
				
			||||||
<li><p>To set admin rights to the newly created account, use the following command:</p></li>
 | 
					<li><p>To set admin rights to the newly created account, use the following command line:</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ fittrackee_set_admin <username>
 | 
					<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ fittrackee_set_admin <username>
 | 
				
			||||||
</pre></div>
 | 
					</pre></div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="admonition note">
 | 
				
			||||||
 | 
					<p class="admonition-title">Note</p>
 | 
				
			||||||
 | 
					<p>If the user account is inactive, it activates it.</p>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="from-sources">
 | 
					<section id="from-sources">
 | 
				
			||||||
<h3>From sources<a class="headerlink" href="#from-sources" title="Permalink to this headline">¶</a></h3>
 | 
					<h3>From sources<a class="headerlink" href="#from-sources" title="Permalink to this headline">¶</a></h3>
 | 
				
			||||||
@@ -609,11 +613,15 @@ $ make install-db
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>Open <a class="reference external" href="http://localhost:3000">http://localhost:3000</a> and register</p></li>
 | 
					<li><p>Open <a class="reference external" href="http://localhost:3000">http://localhost:3000</a> and register</p></li>
 | 
				
			||||||
<li><p>To set admin rights to the newly created account, use the following command:</p></li>
 | 
					<li><p>To set admin rights to the newly created account, use the following command line:</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ make set-admin <span class="nv">USERNAME</span><span class="o">=</span><username>
 | 
					<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ make set-admin <span class="nv">USERNAME</span><span class="o">=</span><username>
 | 
				
			||||||
</pre></div>
 | 
					</pre></div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="admonition note">
 | 
				
			||||||
 | 
					<p class="admonition-title">Note</p>
 | 
				
			||||||
 | 
					<p>If the user account is inactive, it activates it.</p>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
<section id="production-environment">
 | 
					<section id="production-environment">
 | 
				
			||||||
<h4>Production environment<a class="headerlink" href="#production-environment" title="Permalink to this headline">¶</a></h4>
 | 
					<h4>Production environment<a class="headerlink" href="#production-environment" title="Permalink to this headline">¶</a></h4>
 | 
				
			||||||
@@ -624,11 +632,11 @@ $ make install-db
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>Download the last release (for now, it is the release v0.5.7):</p></li>
 | 
					<li><p>Download the last release (for now, it is the release v0.6.0):</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ wget https://github.com/SamR1/FitTrackee/archive/v0.5.7.tar.gz
 | 
					<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ wget https://github.com/SamR1/FitTrackee/archive/v0.6.0.tar.gz
 | 
				
			||||||
$ tar -xzf v0.5.7.tar.gz
 | 
					$ tar -xzf v0.6.0.tar.gz
 | 
				
			||||||
$ mv FitTrackee-0.5.7 FitTrackee
 | 
					$ mv FitTrackee-0.6.0 FitTrackee
 | 
				
			||||||
$ <span class="nb">cd</span> FitTrackee
 | 
					$ <span class="nb">cd</span> FitTrackee
 | 
				
			||||||
</pre></div>
 | 
					</pre></div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
@@ -655,11 +663,15 @@ database credentials</strong>):</p></li>
 | 
				
			|||||||
</div>
 | 
					</div>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>Open <a class="reference external" href="http://localhost:5000">http://localhost:5000</a> and register</p></li>
 | 
					<li><p>Open <a class="reference external" href="http://localhost:5000">http://localhost:5000</a> and register</p></li>
 | 
				
			||||||
<li><p>To set admin rights to the newly created account, use the following command:</p></li>
 | 
					<li><p>To set admin rights to the newly created account, use the following command line:</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ make set-admin <span class="nv">USERNAME</span><span class="o">=</span><username>
 | 
					<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ make set-admin <span class="nv">USERNAME</span><span class="o">=</span><username>
 | 
				
			||||||
</pre></div>
 | 
					</pre></div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="admonition note">
 | 
				
			||||||
 | 
					<p class="admonition-title">Note</p>
 | 
				
			||||||
 | 
					<p>If the user account is inactive, it activates it.</p>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
</section>
 | 
					</section>
 | 
				
			||||||
@@ -740,11 +752,11 @@ $ <span class="nb">source</span> .env
 | 
				
			|||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>Stop the application</p></li>
 | 
					<li><p>Stop the application</p></li>
 | 
				
			||||||
<li><p>Change to the directory where FitTrackee directory is located</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.5.7) and overwrite existing files:</p></li>
 | 
					<li><p>Download the last release (for now, it is the release v0.6.0) and overwrite existing files:</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ wget https://github.com/SamR1/FitTrackee/archive/v0.5.7.tar.gz
 | 
					<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ wget https://github.com/SamR1/FitTrackee/archive/v0.6.0.tar.gz
 | 
				
			||||||
$ tar -xzf v0.5.7.tar.gz
 | 
					$ tar -xzf v0.6.0.tar.gz
 | 
				
			||||||
$ cp -R FitTrackee-0.5.7/* FitTrackee/
 | 
					$ cp -R FitTrackee-0.6.0/* FitTrackee/
 | 
				
			||||||
$ <span class="nb">cd</span> FitTrackee
 | 
					$ <span class="nb">cd</span> FitTrackee
 | 
				
			||||||
</pre></div>
 | 
					</pre></div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
@@ -905,11 +917,15 @@ $ make docker-build docker-run docker-init
 | 
				
			|||||||
<p>Open <a class="reference external" href="http://localhost:5000">http://localhost:5000</a> and register.</p>
 | 
					<p>Open <a class="reference external" href="http://localhost:5000">http://localhost:5000</a> and register.</p>
 | 
				
			||||||
<p>Open <a class="reference external" href="http://localhost:8025">http://localhost:8025</a> to access <a class="reference external" href="https://github.com/mailhog/MailHog">MailHog interface</a> (email testing tool)</p>
 | 
					<p>Open <a class="reference external" href="http://localhost:8025">http://localhost:8025</a> to access <a class="reference external" href="https://github.com/mailhog/MailHog">MailHog interface</a> (email testing tool)</p>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>To set admin rights to the newly created account, use the following command:</p></li>
 | 
					<li><p>To set admin rights to the newly created account, use the following command line:</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ make docker-set-admin <span class="nv">USERNAME</span><span class="o">=</span><username>
 | 
					<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>$ make docker-set-admin <span class="nv">USERNAME</span><span class="o">=</span><username>
 | 
				
			||||||
</pre></div>
 | 
					</pre></div>
 | 
				
			||||||
</div>
 | 
					</div>
 | 
				
			||||||
 | 
					<div class="admonition note">
 | 
				
			||||||
 | 
					<p class="admonition-title">Note</p>
 | 
				
			||||||
 | 
					<p>If the user account is inactive, it activates it.</p>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
<ul class="simple">
 | 
					<ul class="simple">
 | 
				
			||||||
<li><p>To stop <strong>Fittrackee</strong>:</p></li>
 | 
					<li><p>To stop <strong>Fittrackee</strong>:</p></li>
 | 
				
			||||||
</ul>
 | 
					</ul>
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								docs/objects.inv
									
									
									
									
									
								
							
							
						
						@@ -4,7 +4,7 @@
 | 
				
			|||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
				
			||||||
    <title>Search — FitTrackee 0.5.7
 | 
					    <title>Search — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -44,7 +44,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="index.html">
 | 
					        <a class="navbar-brand" href="index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Administrator — FitTrackee 0.5.7
 | 
					    <title>Administrator — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>Troubleshooting — FitTrackee 0.5.7
 | 
					    <title>Troubleshooting — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,7 +5,7 @@
 | 
				
			|||||||
    <meta charset="utf-8" />
 | 
					    <meta charset="utf-8" />
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <title>User — FitTrackee 0.5.7
 | 
					    <title>User — FitTrackee 0.6.0
 | 
				
			||||||
 documentation</title>
 | 
					 documentation</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
					    <link rel="stylesheet" type="text/css" href="../_static/bootstrap-sphinx.css" />
 | 
				
			||||||
@@ -40,7 +40,7 @@
 | 
				
			|||||||
        </button>
 | 
					        </button>
 | 
				
			||||||
        <a class="navbar-brand" href="../index.html">
 | 
					        <a class="navbar-brand" href="../index.html">
 | 
				
			||||||
          FitTrackee</a>
 | 
					          FitTrackee</a>
 | 
				
			||||||
        <span class="navbar-text navbar-version pull-left"><b>0.5.7
 | 
					        <span class="navbar-text navbar-version pull-left"><b>0.6.0
 | 
				
			||||||
</b></span>
 | 
					</b></span>
 | 
				
			||||||
      </div>
 | 
					      </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
| 
		 Before Width: | Height: | Size: 537 KiB After Width: | Height: | Size: 538 KiB  | 
| 
		 Before Width: | Height: | Size: 370 KiB After Width: | Height: | Size: 368 KiB  | 
| 
		 Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 201 KiB  | 
| 
		 Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 69 KiB  | 
| 
		 Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 70 KiB  | 
| 
		 Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 102 KiB  | 
@@ -4,8 +4,9 @@ Authentication
 | 
				
			|||||||
.. autoflask:: fittrackee:create_app()
 | 
					.. autoflask:: fittrackee:create_app()
 | 
				
			||||||
   :endpoints:
 | 
					   :endpoints:
 | 
				
			||||||
    auth.register_user,
 | 
					    auth.register_user,
 | 
				
			||||||
 | 
					    auth.confirm_account,
 | 
				
			||||||
 | 
					    auth.resend_account_confirmation_email,
 | 
				
			||||||
    auth.login_user,
 | 
					    auth.login_user,
 | 
				
			||||||
    auth.logout_user,
 | 
					 | 
				
			||||||
    auth.get_authenticated_user_profile,
 | 
					    auth.get_authenticated_user_profile,
 | 
				
			||||||
    auth.edit_user,
 | 
					    auth.edit_user,
 | 
				
			||||||
    auth.edit_user_preferences,
 | 
					    auth.edit_user_preferences,
 | 
				
			||||||
@@ -14,4 +15,6 @@ Authentication
 | 
				
			|||||||
    auth.edit_picture,
 | 
					    auth.edit_picture,
 | 
				
			||||||
    auth.del_picture,
 | 
					    auth.del_picture,
 | 
				
			||||||
    auth.request_password_reset,
 | 
					    auth.request_password_reset,
 | 
				
			||||||
    auth.update_password
 | 
					    auth.update_user_account,
 | 
				
			||||||
 | 
					    auth.update_password,
 | 
				
			||||||
 | 
					    auth.update_email
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -44,9 +44,13 @@ Workouts
 | 
				
			|||||||
    - average speed  (**new in 0.5.1**)
 | 
					    - average speed  (**new in 0.5.1**)
 | 
				
			||||||
- User records by sports:
 | 
					- User records by sports:
 | 
				
			||||||
    - average speed
 | 
					    - average speed
 | 
				
			||||||
    - farest distance
 | 
					    - farthest distance
 | 
				
			||||||
    - longest duration
 | 
					    - longest duration
 | 
				
			||||||
    - maximum speed
 | 
					    - maximum speed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					  Records may differ from records displayed by the application that originally generated the gpx files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Workouts list and filter. Only sports with workouts are displayed in sport dropdown.
 | 
					- Workouts list and filter. Only sports with workouts are displayed in sport dropdown.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. note::
 | 
					.. note::
 | 
				
			||||||
@@ -55,9 +59,15 @@ Workouts
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Account & preferences
 | 
					Account & preferences
 | 
				
			||||||
^^^^^^^^^^^^^^^^^^^^^
 | 
					^^^^^^^^^^^^^^^^^^^^^
 | 
				
			||||||
- A user can create, update and deleted his account
 | 
					- A user can create, update and deleted his account.
 | 
				
			||||||
 | 
					- 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*)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					  The command line to add admin rights activates the account if it is inactive.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- A user can set language, timezone and first day of week.
 | 
					- A user can set language, timezone and first day of week.
 | 
				
			||||||
- A user can reset his password (*new in 0.3.0*)
 | 
					- A user can reset his password (*new in 0.3.0*)
 | 
				
			||||||
 | 
					- A user can change his email address (*new in 0.6.0*)
 | 
				
			||||||
- A user can choose between metric system and imperial system for distance, elevation and speed display (*new in 0.5.0*)
 | 
					- A user can choose between metric system and imperial system for distance, elevation and speed display (*new in 0.5.0*)
 | 
				
			||||||
- A user can set sport preferences (*new in 0.5.0*):
 | 
					- A user can set sport preferences (*new in 0.5.0*):
 | 
				
			||||||
     - change sport color (used for sport image and charts)
 | 
					     - change sport color (used for sport image and charts)
 | 
				
			||||||
@@ -82,6 +92,7 @@ Administration
 | 
				
			|||||||
  - maximum size of uploaded files
 | 
					  - maximum size of uploaded files
 | 
				
			||||||
  - maximum size of zip archive
 | 
					  - maximum size of zip archive
 | 
				
			||||||
  - maximum number of files in the zip archive. If an archive contains more files, only the configured number of files is processed, without raising errors.
 | 
					  - maximum number of files in the zip archive. If an archive contains more files, only the configured number of files is processed, without raising errors.
 | 
				
			||||||
 | 
					  - administrator email for contact (*new in 0.6.0*)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .. warning::
 | 
					  .. 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).
 | 
					      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).
 | 
				
			||||||
@@ -89,8 +100,12 @@ Administration
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- **Users**
 | 
					- **Users**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - display users list and details
 | 
					  - display and filter users list
 | 
				
			||||||
  - edit a user to add/remove administration rights
 | 
					  - 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*)
 | 
				
			||||||
  - delete a user
 | 
					  - delete a user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- **Sports**
 | 
					- **Sports**
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -292,12 +292,14 @@ For instance, copy and update ``.env`` file from ``.env.example`` and source the
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- Open http://localhost:3000 and register
 | 
					- Open http://localhost:3000 and register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To set admin rights to the newly created account, use the following command:
 | 
					- To set admin rights to the newly created account, use the following command line:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ fittrackee_set_admin <username>
 | 
					   $ fittrackee_set_admin <username>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					    If the user account is inactive, it activates it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
From sources
 | 
					From sources
 | 
				
			||||||
^^^^^^^^^^^^
 | 
					^^^^^^^^^^^^
 | 
				
			||||||
@@ -352,12 +354,14 @@ Dev environment
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- Open http://localhost:3000 and register
 | 
					- Open http://localhost:3000 and register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To set admin rights to the newly created account, use the following command:
 | 
					- To set admin rights to the newly created account, use the following command line:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ make set-admin USERNAME=<username>
 | 
					   $ make set-admin USERNAME=<username>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					    If the user account is inactive, it activates it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Production environment
 | 
					Production environment
 | 
				
			||||||
""""""""""""""""""""""
 | 
					""""""""""""""""""""""
 | 
				
			||||||
@@ -365,13 +369,13 @@ Production environment
 | 
				
			|||||||
.. warning::
 | 
					.. warning::
 | 
				
			||||||
    | Note that FitTrackee is under heavy development, some features may be unstable.
 | 
					    | Note that FitTrackee is under heavy development, some features may be unstable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-  Download the last release (for now, it is the release v0.5.7):
 | 
					-  Download the last release (for now, it is the release v0.6.0):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.5.7.tar.gz
 | 
					   $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.0.tar.gz
 | 
				
			||||||
   $ tar -xzf v0.5.7.tar.gz
 | 
					   $ tar -xzf v0.6.0.tar.gz
 | 
				
			||||||
   $ mv FitTrackee-0.5.7 FitTrackee
 | 
					   $ mv FitTrackee-0.6.0 FitTrackee
 | 
				
			||||||
   $ cd FitTrackee
 | 
					   $ cd FitTrackee
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-  Create **.env** from example and update it
 | 
					-  Create **.env** from example and update it
 | 
				
			||||||
@@ -398,12 +402,14 @@ Production environment
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- Open http://localhost:5000 and register
 | 
					- Open http://localhost:5000 and register
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To set admin rights to the newly created account, use the following command:
 | 
					- To set admin rights to the newly created account, use the following command line:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ make set-admin USERNAME=<username>
 | 
					   $ make set-admin USERNAME=<username>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					    If the user account is inactive, it activates it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Upgrade
 | 
					Upgrade
 | 
				
			||||||
~~~~~~~
 | 
					~~~~~~~
 | 
				
			||||||
@@ -487,13 +493,13 @@ Prod environment
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- Change to the directory where FitTrackee directory is located
 | 
					- Change to the directory where FitTrackee directory is located
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Download the last release (for now, it is the release v0.5.7) and overwrite existing files:
 | 
					- Download the last release (for now, it is the release v0.6.0) and overwrite existing files:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ wget https://github.com/SamR1/FitTrackee/archive/v0.5.7.tar.gz
 | 
					   $ wget https://github.com/SamR1/FitTrackee/archive/v0.6.0.tar.gz
 | 
				
			||||||
   $ tar -xzf v0.5.7.tar.gz
 | 
					   $ tar -xzf v0.6.0.tar.gz
 | 
				
			||||||
   $ cp -R FitTrackee-0.5.7/* FitTrackee/
 | 
					   $ cp -R FitTrackee-0.6.0/* FitTrackee/
 | 
				
			||||||
   $ cd FitTrackee
 | 
					   $ cd FitTrackee
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Update **.env** if needed (see `Environment variables <installation.html#environment-variables>`__).
 | 
					- Update **.env** if needed (see `Environment variables <installation.html#environment-variables>`__).
 | 
				
			||||||
@@ -656,12 +662,15 @@ Open http://localhost:5000 and register.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Open http://localhost:8025 to access `MailHog interface <https://github.com/mailhog/MailHog>`_ (email testing tool)
 | 
					Open http://localhost:8025 to access `MailHog interface <https://github.com/mailhog/MailHog>`_ (email testing tool)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To set admin rights to the newly created account, use the following command:
 | 
					- To set admin rights to the newly created account, use the following command line:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code:: bash
 | 
					.. code:: bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   $ make docker-set-admin USERNAME=<username>
 | 
					   $ make docker-set-admin USERNAME=<username>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.. note::
 | 
				
			||||||
 | 
					    If the user account is inactive, it activates it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- To stop **Fittrackee**:
 | 
					- To stop **Fittrackee**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.. code-block:: bash
 | 
					.. code-block:: bash
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,4 @@
 | 
				
			|||||||
from .utils import (
 | 
					from .utils import TEST_URL, login_valid_user, register_valid_user_and_logout
 | 
				
			||||||
    TEST_URL,
 | 
					 | 
				
			||||||
    assert_navbar,
 | 
					 | 
				
			||||||
    login_valid_user,
 | 
					 | 
				
			||||||
    register_valid_user_and_logout,
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
URL = f'{TEST_URL}/login'
 | 
					URL = f'{TEST_URL}/login'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -34,10 +29,20 @@ class TestLogin:
 | 
				
			|||||||
        assert 'Register' in links[0].text
 | 
					        assert 'Register' in links[0].text
 | 
				
			||||||
        assert links[1].tag_name == 'a'
 | 
					        assert links[1].tag_name == 'a'
 | 
				
			||||||
        assert 'Forgot password?' in links[1].text
 | 
					        assert 'Forgot password?' in links[1].text
 | 
				
			||||||
 | 
					        assert links[2].tag_name == 'a'
 | 
				
			||||||
 | 
					        assert "Didn't received instructions?" in links[2].text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_user_can_log_in(self, selenium):
 | 
					    def test_user_can_log_in(self, selenium):
 | 
				
			||||||
        user = register_valid_user_and_logout(selenium)
 | 
					        user = register_valid_user_and_logout(selenium)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        login_valid_user(selenium, user)
 | 
					        login_valid_user(selenium, user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assert_navbar(selenium, user)
 | 
					        nav = selenium.find_element_by_id('nav').text
 | 
				
			||||||
 | 
					        assert 'Register' not in nav
 | 
				
			||||||
 | 
					        assert 'Login' not in nav
 | 
				
			||||||
 | 
					        assert 'Dashboard' in nav
 | 
				
			||||||
 | 
					        assert 'Workouts' in nav
 | 
				
			||||||
 | 
					        assert 'Statistics' in nav
 | 
				
			||||||
 | 
					        assert 'Add a workout' in nav
 | 
				
			||||||
 | 
					        assert user['username'] in nav
 | 
				
			||||||
 | 
					        assert 'Logout' in nav
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,15 @@
 | 
				
			|||||||
from .utils import TEST_URL, register_valid_user
 | 
					from .utils import register_valid_user
 | 
				
			||||||
 | 
					 | 
				
			||||||
URL = f'{TEST_URL}/profile'
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestProfile:
 | 
					class TestProfile:
 | 
				
			||||||
    def test_it_displays_user_profile(self, selenium):
 | 
					    def test_it_displays_user_profile(self, selenium):
 | 
				
			||||||
        user = register_valid_user(selenium)
 | 
					        user = register_valid_user(selenium)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        selenium.get(URL)
 | 
					        app_menu = selenium.find_element_by_class_name('nav-items-user-menu')
 | 
				
			||||||
 | 
					        profile_link = app_menu.find_elements_by_class_name('nav-item')[1]
 | 
				
			||||||
 | 
					        profile_link.click()
 | 
				
			||||||
 | 
					        selenium.implicitly_wait(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        user_header = selenium.find_element_by_class_name('user-header')
 | 
					        user_header = selenium.find_element_by_class_name('user-header')
 | 
				
			||||||
        assert user['username'] in user_header.text
 | 
					        assert user['username'] in user_header.text
 | 
				
			||||||
        assert '0\nworkouts' in user_header.text
 | 
					        assert '0\nworkouts' in user_header.text
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,7 @@
 | 
				
			|||||||
from .utils import (
 | 
					from .utils import (
 | 
				
			||||||
    TEST_URL,
 | 
					    TEST_URL,
 | 
				
			||||||
    assert_navbar,
 | 
					 | 
				
			||||||
    random_string,
 | 
					    random_string,
 | 
				
			||||||
    register,
 | 
					    register,
 | 
				
			||||||
    register_valid_user,
 | 
					 | 
				
			||||||
    register_valid_user_and_logout,
 | 
					    register_valid_user_and_logout,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,21 +21,40 @@ class TestRegistration:
 | 
				
			|||||||
        assert inputs[1].get_attribute('type') == 'email'
 | 
					        assert inputs[1].get_attribute('type') == 'email'
 | 
				
			||||||
        assert inputs[2].get_attribute('id') == 'password'
 | 
					        assert inputs[2].get_attribute('id') == 'password'
 | 
				
			||||||
        assert inputs[2].get_attribute('type') == 'password'
 | 
					        assert inputs[2].get_attribute('type') == 'password'
 | 
				
			||||||
        assert inputs[3].get_attribute('id') == 'confirm-password'
 | 
					
 | 
				
			||||||
        assert inputs[3].get_attribute('type') == 'password'
 | 
					        form_infos = selenium.find_elements_by_class_name('form-info')
 | 
				
			||||||
 | 
					        assert len(form_infos) == 3
 | 
				
			||||||
 | 
					        assert form_infos[0].text == (
 | 
				
			||||||
 | 
					            '3 to 30 characters required, only alphanumeric characters and '
 | 
				
			||||||
 | 
					            'the underscore character "_" allowed.'
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        assert form_infos[1].text == 'Enter a valid email address.'
 | 
				
			||||||
 | 
					        assert form_infos[2].text == 'At least 8 characters required.'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        button = selenium.find_element_by_tag_name('button')
 | 
					        button = selenium.find_element_by_tag_name('button')
 | 
				
			||||||
        assert button.get_attribute('type') == 'submit'
 | 
					        assert button.get_attribute('type') == 'submit'
 | 
				
			||||||
        assert 'Register' in button.text
 | 
					        assert 'Register' in button.text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        link = selenium.find_element_by_class_name('links')
 | 
					        links = selenium.find_elements_by_class_name('links')
 | 
				
			||||||
        assert link.tag_name == 'a'
 | 
					        assert links[0].tag_name == 'a'
 | 
				
			||||||
        assert 'Login' in link.text
 | 
					        assert 'Login' in links[0].text
 | 
				
			||||||
 | 
					        assert links[1].tag_name == 'a'
 | 
				
			||||||
 | 
					        assert "Didn't received instructions?" in links[1].text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_user_can_register(self, selenium):
 | 
					    def test_user_can_register(self, selenium):
 | 
				
			||||||
        user = register_valid_user(selenium)
 | 
					        user = {
 | 
				
			||||||
 | 
					            'username': random_string(),
 | 
				
			||||||
 | 
					            'email': f'{random_string()}@example.com',
 | 
				
			||||||
 | 
					            'password': 'p@ssw0rd',
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assert_navbar(selenium, user)
 | 
					        register(selenium, user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        message = selenium.find_element_by_class_name('success-message').text
 | 
				
			||||||
 | 
					        assert (
 | 
				
			||||||
 | 
					            'A link to activate your account has been '
 | 
				
			||||||
 | 
					            'emailed to the address provided.'
 | 
				
			||||||
 | 
					        ) in message
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_user_can_not_register_with_invalid_email(self, selenium):
 | 
					    def test_user_can_not_register_with_invalid_email(self, selenium):
 | 
				
			||||||
        user_name = random_string()
 | 
					        user_name = random_string()
 | 
				
			||||||
@@ -45,7 +62,6 @@ class TestRegistration:
 | 
				
			|||||||
            'username': user_name,
 | 
					            'username': user_name,
 | 
				
			||||||
            'email': user_name,
 | 
					            'email': user_name,
 | 
				
			||||||
            'password': 'p@ssw0rd',
 | 
					            'password': 'p@ssw0rd',
 | 
				
			||||||
            'password_conf': 'p@ssw0rd',
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        register(selenium, user_infos)
 | 
					        register(selenium, user_infos)
 | 
				
			||||||
@@ -65,29 +81,19 @@ class TestRegistration:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        assert selenium.current_url == URL
 | 
					        assert selenium.current_url == URL
 | 
				
			||||||
        errors = selenium.find_element_by_class_name('error-message').text
 | 
					        errors = selenium.find_element_by_class_name('error-message').text
 | 
				
			||||||
        assert 'Sorry, that user already exists.' in errors
 | 
					        assert 'Sorry, that username is already taken.' in errors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_user_can_not_register_if_email_is_already_taken(self, selenium):
 | 
					    def test_user_does_not_return_error_if_email_is_already_taken(
 | 
				
			||||||
 | 
					        self, selenium
 | 
				
			||||||
 | 
					    ):
 | 
				
			||||||
        user = register_valid_user_and_logout(selenium)
 | 
					        user = register_valid_user_and_logout(selenium)
 | 
				
			||||||
        user['username'] = random_string()
 | 
					        user['username'] = random_string()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        register(selenium, user)
 | 
					        register(selenium, user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        assert selenium.current_url == URL
 | 
					        assert selenium.current_url == f'{TEST_URL}/login'
 | 
				
			||||||
        errors = selenium.find_element_by_class_name('error-message').text
 | 
					        message = selenium.find_element_by_class_name('success-message').text
 | 
				
			||||||
        assert 'Sorry, that user already exists.' in errors
 | 
					        assert (
 | 
				
			||||||
 | 
					            'A link to activate your account has been '
 | 
				
			||||||
    def test_it_displays_error_if_passwords_do_not_match(self, selenium):
 | 
					            'emailed to the address provided.'
 | 
				
			||||||
        user_name = random_string()
 | 
					        ) in message
 | 
				
			||||||
        user_infos = {
 | 
					 | 
				
			||||||
            'username': user_name,
 | 
					 | 
				
			||||||
            'email': f'{user_name}@example.com',
 | 
					 | 
				
			||||||
            'password': 'p@ssw0rd',
 | 
					 | 
				
			||||||
            'password_conf': 'password',
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        register(selenium, user_infos)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        assert selenium.current_url == URL
 | 
					 | 
				
			||||||
        errors = selenium.find_element_by_class_name('error-message').text
 | 
					 | 
				
			||||||
        assert 'password and password confirmation don\'t match' in errors
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										53
									
								
								e2e/utils.py
									
									
									
									
									
								
							
							
						
						@@ -1,18 +1,25 @@
 | 
				
			|||||||
import os
 | 
					import os
 | 
				
			||||||
import random
 | 
					import random
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
import string
 | 
					import string
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import requests
 | 
				
			||||||
from selenium.webdriver.support import expected_conditions as EC
 | 
					from selenium.webdriver.support import expected_conditions as EC
 | 
				
			||||||
from selenium.webdriver.support.ui import WebDriverWait
 | 
					from selenium.webdriver.support.ui import WebDriverWait
 | 
				
			||||||
 | 
					from urllib3.util import parse_url
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TEST_APP_URL = os.getenv('TEST_APP_URL')
 | 
					TEST_APP_URL = os.getenv('TEST_APP_URL')
 | 
				
			||||||
TEST_CLIENT_URL = os.getenv('TEST_CLIENT_URL')
 | 
					TEST_CLIENT_URL = os.getenv('TEST_CLIENT_URL')
 | 
				
			||||||
E2E_ARGS = os.getenv('E2E_ARGS')
 | 
					E2E_ARGS = os.getenv('E2E_ARGS')
 | 
				
			||||||
TEST_URL = TEST_CLIENT_URL if E2E_ARGS == 'client' else TEST_APP_URL
 | 
					TEST_URL = TEST_CLIENT_URL if E2E_ARGS == 'client' else TEST_APP_URL
 | 
				
			||||||
 | 
					EMAIL_URL = os.getenv('EMAIL_URL', 'smtp://none:none@0.0.0.0:1025')
 | 
				
			||||||
 | 
					parsed_email_url = parse_url(EMAIL_URL)
 | 
				
			||||||
 | 
					EMAIL_API_URL = f'http://{parsed_email_url.host}:8025'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def random_string(length=8):
 | 
					def random_string(length=8):
 | 
				
			||||||
    return ''.join(random.choice(string.ascii_letters) for x in range(length))
 | 
					    return ''.join(random.choice(string.ascii_letters) for _ in range(length))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def register(selenium, user):
 | 
					def register(selenium, user):
 | 
				
			||||||
@@ -24,8 +31,6 @@ def register(selenium, user):
 | 
				
			|||||||
    email.send_keys(user.get('email'))
 | 
					    email.send_keys(user.get('email'))
 | 
				
			||||||
    password = selenium.find_element_by_id('password')
 | 
					    password = selenium.find_element_by_id('password')
 | 
				
			||||||
    password.send_keys(user.get('password'))
 | 
					    password.send_keys(user.get('password'))
 | 
				
			||||||
    password_conf = selenium.find_element_by_id('confirm-password')
 | 
					 | 
				
			||||||
    password_conf.send_keys(user.get('password_conf'))
 | 
					 | 
				
			||||||
    submit_button = selenium.find_element_by_tag_name('button')
 | 
					    submit_button = selenium.find_element_by_tag_name('button')
 | 
				
			||||||
    submit_button.click()
 | 
					    submit_button.click()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -47,44 +52,36 @@ def register_valid_user(selenium):
 | 
				
			|||||||
        'username': user_name,
 | 
					        'username': user_name,
 | 
				
			||||||
        'email': f'{user_name}@example.com',
 | 
					        'email': f'{user_name}@example.com',
 | 
				
			||||||
        'password': 'p@ssw0rd',
 | 
					        'password': 'p@ssw0rd',
 | 
				
			||||||
        'password_conf': 'p@ssw0rd',
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    register(selenium, user)
 | 
					    register(selenium, user)
 | 
				
			||||||
    WebDriverWait(selenium, 15).until(EC.url_changes(f"{TEST_URL}/register"))
 | 
					    WebDriverWait(selenium, 30).until(EC.url_changes(f"{TEST_URL}/register"))
 | 
				
			||||||
 | 
					    confirm_account(selenium, user)
 | 
				
			||||||
    return user
 | 
					    return user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def register_valid_user_and_logout(selenium):
 | 
					def register_valid_user_and_logout(selenium):
 | 
				
			||||||
    user_name = random_string()
 | 
					    user = register_valid_user(selenium)
 | 
				
			||||||
    user = {
 | 
					 | 
				
			||||||
        'username': user_name,
 | 
					 | 
				
			||||||
        'email': f'{user_name}@example.com',
 | 
					 | 
				
			||||||
        'password': 'p@ssw0rd',
 | 
					 | 
				
			||||||
        'password_conf': 'p@ssw0rd',
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    register(selenium, user)
 | 
					 | 
				
			||||||
    WebDriverWait(selenium, 15).until(EC.url_changes(f"{TEST_URL}/register"))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    user_menu = selenium.find_element_by_class_name('nav-items-user-menu')
 | 
					    user_menu = selenium.find_element_by_class_name('nav-items-user-menu')
 | 
				
			||||||
    logout_link = user_menu.find_elements_by_class_name('nav-item')[2]
 | 
					    logout_link = user_menu.find_elements_by_class_name('nav-item')[2]
 | 
				
			||||||
    logout_link.click()
 | 
					    logout_link.click()
 | 
				
			||||||
    selenium.implicitly_wait(1)
 | 
					 | 
				
			||||||
    return user
 | 
					    return user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def confirm_account(selenium, user):
 | 
				
			||||||
 | 
					    time.sleep(1)
 | 
				
			||||||
 | 
					    response = requests.get(
 | 
				
			||||||
 | 
					        f"{EMAIL_API_URL}/api/v2/search?kind=to&query={user['email']}"
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    response.raise_for_status()
 | 
				
			||||||
 | 
					    results = response.json()
 | 
				
			||||||
 | 
					    message = results['items'][0]['Content']['Body']
 | 
				
			||||||
 | 
					    link = re.search(r'Verify your email: (.+?)\r\n', message).groups()[0]
 | 
				
			||||||
 | 
					    link = link.replace('http://0.0.0.0:5000', TEST_URL)
 | 
				
			||||||
 | 
					    selenium.get(link)
 | 
				
			||||||
 | 
					    WebDriverWait(selenium, 15).until(EC.url_changes(link))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def login_valid_user(selenium, user):
 | 
					def login_valid_user(selenium, user):
 | 
				
			||||||
    login(selenium, user)
 | 
					    login(selenium, user)
 | 
				
			||||||
    WebDriverWait(selenium, 10).until(EC.url_changes(f"{TEST_URL}/login"))
 | 
					    WebDriverWait(selenium, 10).until(EC.url_changes(f"{TEST_URL}/login"))
 | 
				
			||||||
    return user
 | 
					    return user
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def assert_navbar(selenium, user):
 | 
					 | 
				
			||||||
    nav = selenium.find_element_by_id('nav').text
 | 
					 | 
				
			||||||
    assert 'Register' not in nav
 | 
					 | 
				
			||||||
    assert 'Login' not in nav
 | 
					 | 
				
			||||||
    assert 'Dashboard' in nav
 | 
					 | 
				
			||||||
    assert 'Workouts' in nav
 | 
					 | 
				
			||||||
    assert 'Statistics' in nav
 | 
					 | 
				
			||||||
    assert 'Add a workout' in nav
 | 
					 | 
				
			||||||
    assert user['username'] in nav
 | 
					 | 
				
			||||||
    assert 'Logout' in nav
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
import logging
 | 
					import logging
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
import shutil
 | 
					import shutil
 | 
				
			||||||
from importlib import import_module, reload
 | 
					from importlib import import_module, reload
 | 
				
			||||||
from typing import Any
 | 
					from typing import Any
 | 
				
			||||||
@@ -15,14 +16,15 @@ from flask_bcrypt import Bcrypt
 | 
				
			|||||||
from flask_dramatiq import Dramatiq
 | 
					from flask_dramatiq import Dramatiq
 | 
				
			||||||
from flask_migrate import Migrate
 | 
					from flask_migrate import Migrate
 | 
				
			||||||
from flask_sqlalchemy import SQLAlchemy
 | 
					from flask_sqlalchemy import SQLAlchemy
 | 
				
			||||||
 | 
					from sqlalchemy.exc import ProgrammingError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from fittrackee.emails.email import Email
 | 
					from fittrackee.emails.email import EmailService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VERSION = __version__ = '0.5.7'
 | 
					VERSION = __version__ = '0.6.0'
 | 
				
			||||||
db = SQLAlchemy()
 | 
					db = SQLAlchemy()
 | 
				
			||||||
bcrypt = Bcrypt()
 | 
					bcrypt = Bcrypt()
 | 
				
			||||||
migrate = Migrate()
 | 
					migrate = Migrate()
 | 
				
			||||||
email_service = Email()
 | 
					email_service = EmailService()
 | 
				
			||||||
dramatiq = Dramatiq()
 | 
					dramatiq = Dramatiq()
 | 
				
			||||||
log_file = os.getenv('APP_LOG')
 | 
					log_file = os.getenv('APP_LOG')
 | 
				
			||||||
logging.basicConfig(
 | 
					logging.basicConfig(
 | 
				
			||||||
@@ -66,9 +68,16 @@ def create_app() -> Flask:
 | 
				
			|||||||
    with app.app_context():
 | 
					    with app.app_context():
 | 
				
			||||||
        # Note: check if "app_config" table exist to avoid errors when
 | 
					        # Note: check if "app_config" table exist to avoid errors when
 | 
				
			||||||
        # dropping tables on dev environments
 | 
					        # dropping tables on dev environments
 | 
				
			||||||
        if db.engine.dialect.has_table(db.engine.connect(), 'app_config'):
 | 
					        try:
 | 
				
			||||||
            db_app_config = get_or_init_config()
 | 
					            if db.engine.dialect.has_table(db.engine.connect(), 'app_config'):
 | 
				
			||||||
            update_app_config_from_database(app, db_app_config)
 | 
					                db_app_config = get_or_init_config()
 | 
				
			||||||
 | 
					                update_app_config_from_database(app, db_app_config)
 | 
				
			||||||
 | 
					        except ProgrammingError as e:
 | 
				
			||||||
 | 
					            # avoid error on AppConfig migration
 | 
				
			||||||
 | 
					            if re.match(
 | 
				
			||||||
 | 
					                r'psycopg2.errors.UndefinedColumn(.*)app_config.', str(e)
 | 
				
			||||||
 | 
					            ):
 | 
				
			||||||
 | 
					                pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    from .application.app_config import config_blueprint  # noqa
 | 
					    from .application.app_config import config_blueprint  # noqa
 | 
				
			||||||
    from .users.auth import auth_blueprint  # noqa
 | 
					    from .users.auth import auth_blueprint  # noqa
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,7 @@ from fittrackee.responses import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
from fittrackee.users.decorators import authenticate_as_admin
 | 
					from fittrackee.users.decorators import authenticate_as_admin
 | 
				
			||||||
from fittrackee.users.models import User
 | 
					from fittrackee.users.models import User
 | 
				
			||||||
 | 
					from fittrackee.users.utils.controls import is_valid_email
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .models import AppConfig
 | 
					from .models import AppConfig
 | 
				
			||||||
from .utils import update_app_config_from_database, verify_app_config
 | 
					from .utils import update_app_config_from_database, verify_app_config
 | 
				
			||||||
@@ -45,7 +46,7 @@ def get_application_config() -> Union[Dict, HttpResponse]:
 | 
				
			|||||||
          "max_zip_file_size": 10485760,
 | 
					          "max_zip_file_size": 10485760,
 | 
				
			||||||
          "max_users": 0,
 | 
					          "max_users": 0,
 | 
				
			||||||
          "map_attribution": "© <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors"
 | 
					          "map_attribution": "© <a href=http://www.openstreetmap.org/copyright>OpenStreetMap</a> contributors"
 | 
				
			||||||
          "version": "0.5.7"
 | 
					          "version": "0.6.0"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "status": "success"
 | 
					        "status": "success"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
@@ -87,6 +88,7 @@ def update_application_config(auth_user: User) -> Union[Dict, HttpResponse]:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        "data": {
 | 
					        "data": {
 | 
				
			||||||
 | 
					          "admin_contact": "admin@example.com",
 | 
				
			||||||
          "gpx_limit_import": 10,
 | 
					          "gpx_limit_import": 10,
 | 
				
			||||||
          "is_registration_enabled": true,
 | 
					          "is_registration_enabled": true,
 | 
				
			||||||
          "max_single_file_size": 1048576,
 | 
					          "max_single_file_size": 1048576,
 | 
				
			||||||
@@ -96,6 +98,7 @@ def update_application_config(auth_user: User) -> Union[Dict, HttpResponse]:
 | 
				
			|||||||
        "status": "success"
 | 
					        "status": "success"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    :<json string admin_contact: email to contact the administrator
 | 
				
			||||||
    :<json integer gpx_limit_import: max number of files in zip archive
 | 
					    :<json integer gpx_limit_import: max number of files in zip archive
 | 
				
			||||||
    :<json boolean is_registration_enabled: is registration enabled ?
 | 
					    :<json boolean is_registration_enabled: is registration enabled ?
 | 
				
			||||||
    :<json integer max_single_file_size: max size of a single file
 | 
					    :<json integer max_single_file_size: max size of a single file
 | 
				
			||||||
@@ -110,6 +113,7 @@ def update_application_config(auth_user: User) -> Union[Dict, HttpResponse]:
 | 
				
			|||||||
        - provide a valid auth token
 | 
					        - provide a valid auth token
 | 
				
			||||||
        - signature expired, please log in again
 | 
					        - signature expired, please log in again
 | 
				
			||||||
        - invalid token, please log in again
 | 
					        - invalid token, please log in again
 | 
				
			||||||
 | 
					        - valid email must be provided for admin contact
 | 
				
			||||||
    :statuscode 403: you do not have permissions
 | 
					    :statuscode 403: you do not have permissions
 | 
				
			||||||
    :statuscode 500: error when updating configuration
 | 
					    :statuscode 500: error when updating configuration
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
@@ -118,6 +122,9 @@ def update_application_config(auth_user: User) -> Union[Dict, HttpResponse]:
 | 
				
			|||||||
        return InvalidPayloadErrorResponse()
 | 
					        return InvalidPayloadErrorResponse()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ret = verify_app_config(config_data)
 | 
					    ret = verify_app_config(config_data)
 | 
				
			||||||
 | 
					    admin_contact = config_data.get('admin_contact')
 | 
				
			||||||
 | 
					    if admin_contact and not is_valid_email(admin_contact):
 | 
				
			||||||
 | 
					        ret.append('valid email must be provided for admin contact')
 | 
				
			||||||
    if ret:
 | 
					    if ret:
 | 
				
			||||||
        return InvalidPayloadErrorResponse(message=ret)
 | 
					        return InvalidPayloadErrorResponse(message=ret)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -133,6 +140,8 @@ def update_application_config(auth_user: User) -> Union[Dict, HttpResponse]:
 | 
				
			|||||||
            config.max_zip_file_size = config_data.get('max_zip_file_size')
 | 
					            config.max_zip_file_size = config_data.get('max_zip_file_size')
 | 
				
			||||||
        if 'max_users' in config_data:
 | 
					        if 'max_users' in config_data:
 | 
				
			||||||
            config.max_users = config_data.get('max_users')
 | 
					            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 config.max_zip_file_size < config.max_single_file_size:
 | 
					        if config.max_zip_file_size < config.max_single_file_size:
 | 
				
			||||||
            return InvalidPayloadErrorResponse(
 | 
					            return InvalidPayloadErrorResponse(
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@ class AppConfig(BaseModel):
 | 
				
			|||||||
        db.Integer, default=1048576, nullable=False
 | 
					        db.Integer, default=1048576, nullable=False
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    max_zip_file_size = db.Column(db.Integer, default=10485760, nullable=False)
 | 
					    max_zip_file_size = db.Column(db.Integer, default=10485760, nullable=False)
 | 
				
			||||||
 | 
					    admin_contact = db.Column(db.String(255), nullable=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def is_registration_enabled(self) -> bool:
 | 
					    def is_registration_enabled(self) -> bool:
 | 
				
			||||||
@@ -43,6 +44,7 @@ class AppConfig(BaseModel):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def serialize(self) -> Dict:
 | 
					    def serialize(self) -> Dict:
 | 
				
			||||||
        return {
 | 
					        return {
 | 
				
			||||||
 | 
					            'admin_contact': self.admin_contact,
 | 
				
			||||||
            'gpx_limit_import': self.gpx_limit_import,
 | 
					            'gpx_limit_import': self.gpx_limit_import,
 | 
				
			||||||
            'is_registration_enabled': self.is_registration_enabled,
 | 
					            'is_registration_enabled': self.is_registration_enabled,
 | 
				
			||||||
            'max_single_file_size': self.max_single_file_size,
 | 
					            'max_single_file_size': self.max_single_file_size,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,6 @@ else:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class BaseConfig:
 | 
					class BaseConfig:
 | 
				
			||||||
    """Base configuration"""
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    DEBUG = False
 | 
					    DEBUG = False
 | 
				
			||||||
    TESTING = False
 | 
					    TESTING = False
 | 
				
			||||||
@@ -49,8 +48,6 @@ class BaseConfig:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DevelopmentConfig(BaseConfig):
 | 
					class DevelopmentConfig(BaseConfig):
 | 
				
			||||||
    """Development configuration"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    DEBUG = True
 | 
					    DEBUG = True
 | 
				
			||||||
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
 | 
					    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')
 | 
				
			||||||
    SECRET_KEY = 'development key'
 | 
					    SECRET_KEY = 'development key'
 | 
				
			||||||
@@ -59,8 +56,6 @@ class DevelopmentConfig(BaseConfig):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestingConfig(BaseConfig):
 | 
					class TestingConfig(BaseConfig):
 | 
				
			||||||
    """Testing configuration"""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    DEBUG = True
 | 
					    DEBUG = True
 | 
				
			||||||
    TESTING = True
 | 
					    TESTING = True
 | 
				
			||||||
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_TEST_URL')
 | 
					    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_TEST_URL')
 | 
				
			||||||
@@ -74,9 +69,11 @@ class TestingConfig(BaseConfig):
 | 
				
			|||||||
    SENDER_EMAIL = 'fittrackee@example.com'
 | 
					    SENDER_EMAIL = 'fittrackee@example.com'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ProductionConfig(BaseConfig):
 | 
					class End2EndTestingConfig(TestingConfig):
 | 
				
			||||||
    """Production configuration"""
 | 
					    DRAMATIQ_BROKER_URL = os.getenv('REDIS_URL', 'redis://')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ProductionConfig(BaseConfig):
 | 
				
			||||||
    DEBUG = False
 | 
					    DEBUG = False
 | 
				
			||||||
    # https://docs.sqlalchemy.org/en/13/core/pooling.html#using-connection-pools-with-multiprocessing-or-os-fork  # noqa
 | 
					    # https://docs.sqlalchemy.org/en/13/core/pooling.html#using-connection-pools-with-multiprocessing-or-os-fork  # noqa
 | 
				
			||||||
    SQLALCHEMY_ENGINE_OPTIONS = (
 | 
					    SQLALCHEMY_ENGINE_OPTIONS = (
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										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><link href="/static/css/admin.e77f8b26.css" rel="prefetch"><link href="/static/css/profile.8b668068.css" rel="prefetch"><link href="/static/css/reset.fc19709e.css" rel="prefetch"><link href="/static/css/statistics.2afdc8a9.css" rel="prefetch"><link href="/static/css/workouts.1bed04b1.css" rel="prefetch"><link href="/static/js/admin.5f46d0fe.js" rel="prefetch"><link href="/static/js/chunk-2d0c9189.c81458cc.js" rel="prefetch"><link href="/static/js/chunk-2d0cf391.020c75ea.js" rel="prefetch"><link href="/static/js/chunk-2d0da8f3.c8c3e7e8.js" rel="prefetch"><link href="/static/js/chunk-2d2248b6.d84473c1.js" rel="prefetch"><link href="/static/js/chunk-2d22523a.4b710d99.js" rel="prefetch"><link href="/static/js/profile.d25975e2.js" rel="prefetch"><link href="/static/js/reset.ca898ebe.js" rel="prefetch"><link href="/static/js/statistics.d03ca304.js" rel="prefetch"><link href="/static/js/workouts.ca40c08d.js" rel="prefetch"><link href="/static/css/app.f2234171.css" rel="preload" as="style"><link href="/static/js/app.ad2630ed.js" rel="preload" as="script"><link href="/static/js/chunk-vendors.4605b41e.js" rel="preload" as="script"><link href="/static/css/app.f2234171.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><script src="/static/js/chunk-vendors.4605b41e.js"></script><script src="/static/js/app.ad2630ed.js"></script></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.12f2b1f0.js"></script><script defer="defer" src="/static/js/app.62bf217a.js"></script><link href="/static/css/app.3729aa92.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>
 | 
				
			||||||
@@ -1,246 +0,0 @@
 | 
				
			|||||||
self.__precacheManifest = (self.__precacheManifest || []).concat([
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "ab4faed007625b209af72b9b8dce84db",
 | 
					 | 
				
			||||||
    "url": "/img/bike.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "428c6ccb838f8e91dc4826c5b650a98b",
 | 
					 | 
				
			||||||
    "url": "/img/weather/breeze.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "f3e8628de2e5089f508f03944f8be951",
 | 
					 | 
				
			||||||
    "url": "/img/weather/clear-day.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "6a0d6579a93e89fdf1a2a95b398e0935",
 | 
					 | 
				
			||||||
    "url": "/img/weather/clear-night.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "c52fe62c9d9fea2cdf5ae2813b3df366",
 | 
					 | 
				
			||||||
    "url": "/img/weather/cloudy.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "9f4d74289594eb83f9c175d13167a0eb",
 | 
					 | 
				
			||||||
    "url": "/img/weather/fog.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "f730c2e4f4c014e8b49c9d4a0a141b90",
 | 
					 | 
				
			||||||
    "url": "/img/weather/partly-cloudy-day.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "0d9270901c4dffbc05f3998d835171c8",
 | 
					 | 
				
			||||||
    "url": "/img/weather/partly-cloudy-night.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "91eb3159ba8781d258d8c384a8ef987c",
 | 
					 | 
				
			||||||
    "url": "/img/weather/pour-rain.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "c52ca88ce0ddf4de0fc29167e578b2be",
 | 
					 | 
				
			||||||
    "url": "/img/weather/rain.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "97d61d89332f912c1ec27bcbe077b7bd",
 | 
					 | 
				
			||||||
    "url": "/img/weather/sleet.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "9e88c89c0d6d14174e9665e98932dd80",
 | 
					 | 
				
			||||||
    "url": "/img/weather/snow.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "d42b62d0b57d5d326506277d87b70435",
 | 
					 | 
				
			||||||
    "url": "/img/weather/temperature.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "d75fbe559220d7b2b9577a98a91f38d0",
 | 
					 | 
				
			||||||
    "url": "/img/weather/wind.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "375196b7ade7c07c3b64ac4cb8b850a8",
 | 
					 | 
				
			||||||
    "url": "/img/workouts/finish.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "a41d3168615e9c642fe96c36bcca146d",
 | 
					 | 
				
			||||||
    "url": "/img/workouts/map.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "0b94f1d4a050a86ca5ac89ab3ed60f9c",
 | 
					 | 
				
			||||||
    "url": "/img/workouts/mountains.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "97f6a197b6c2869e0cb2ff0e7697af86",
 | 
					 | 
				
			||||||
    "url": "/img/workouts/start.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "9bf054725eec8a2ca4d9b1be2cbd785a",
 | 
					 | 
				
			||||||
    "url": "/index.html"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "c61028ca6e9f81bf958e6b66238e2d7c",
 | 
					 | 
				
			||||||
    "url": "/manifest.json"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "b6216d61c03e6ce0c9aea6ca7808f7ca",
 | 
					 | 
				
			||||||
    "url": "/robots.txt"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "8f4c00514b231a913495",
 | 
					 | 
				
			||||||
    "url": "/static/css/admin.e77f8b26.css"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "9c72219a46ba089d3797",
 | 
					 | 
				
			||||||
    "url": "/static/css/app.f2234171.css"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "82c1118c918377daaa71a320ab8eea42",
 | 
					 | 
				
			||||||
    "url": "/static/css/fork-awesome.min.css"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "5c761a156eea82263d8bacf1718fe04d",
 | 
					 | 
				
			||||||
    "url": "/static/css/leaflet.css"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "00382d944a1bc6fca08b",
 | 
					 | 
				
			||||||
    "url": "/static/css/profile.8b668068.css"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "ed921b9e1d1e590ca0ec",
 | 
					 | 
				
			||||||
    "url": "/static/css/reset.fc19709e.css"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "d772b2a24985f6471afd",
 | 
					 | 
				
			||||||
    "url": "/static/css/statistics.2afdc8a9.css"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "4fe9e93fc76c94cbb529",
 | 
					 | 
				
			||||||
    "url": "/static/css/workouts.1bed04b1.css"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "e719f9244c69e28e7d00e725ca1e280e",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/forkawesome-webfont.eot"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "d58987a18774d859d98af95281c1dee5",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/forkawesome-webfont.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "fe45770c6c277da3921355d971045ea5",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/forkawesome-webfont.ttf"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "92cd4d8328b2ae614386a01ff935a9f3",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/forkawesome-webfont.woff"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "12ee76445f0383c58529169d700b6650",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/forkawesome-webfont.woff2"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "1db19001a508392a6be99f75e3a627f0",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-700.1db19001.eot"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "6078a79524f81df56f2512c42eac7299",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-700.6078a795.ttf"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "e86e8add16b15acb0882a8f009e0e84c",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-700.e86e8add.woff"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "f6d5807c5cbc7ff22671d30fbf09ae1a",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-700.f6d5807c.woff2"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "4ef1aecea14c2161f0f882b7247473a5",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-italic.4ef1aece.ttf"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "57d98c19d7c99ec67ffdf8a265dd2144",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-italic.57d98c19.woff2"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "d5f81343aed1d9322fde2e03e416221e",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-italic.d5f81343.eot"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "de9540fd6912070844aae49eb7b0f2d6",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-italic.de9540fd.woff"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "198d320b73bc44e4f0dd33d6b09c9511",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-regular.198d320b.woff2"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "399a9357b6e525fb4d8e2e2786df190e",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-regular.399a9357.woff"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "4ffa4616720ccdaebdf6002f6839a326",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-regular.4ffa4616.ttf"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "c2a4d575c73721ba88c000c74a7995b4",
 | 
					 | 
				
			||||||
    "url": "/static/fonts/pt-sans-v9-latin-regular.c2a4d575.eot"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "061c85661fe8a113e7dbf56b1496e9a1",
 | 
					 | 
				
			||||||
    "url": "/static/img/pt-sans-v9-latin-700.061c8566.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "648d335176f8de8d377069f095dd9c94",
 | 
					 | 
				
			||||||
    "url": "/static/img/pt-sans-v9-latin-italic.648d3351.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "f1f73e45f75956c4b462dada9736ced2",
 | 
					 | 
				
			||||||
    "url": "/static/img/pt-sans-v9-latin-regular.f1f73e45.svg"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "8f4c00514b231a913495",
 | 
					 | 
				
			||||||
    "url": "/static/js/admin.5f46d0fe.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "9c72219a46ba089d3797",
 | 
					 | 
				
			||||||
    "url": "/static/js/app.ad2630ed.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "bd7d183c9f68e5f4027d",
 | 
					 | 
				
			||||||
    "url": "/static/js/chunk-2d0c9189.c81458cc.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "8ad7d194c31be0a8a03b",
 | 
					 | 
				
			||||||
    "url": "/static/js/chunk-2d0cf391.020c75ea.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "19720c22fb5bc17061e5",
 | 
					 | 
				
			||||||
    "url": "/static/js/chunk-2d0da8f3.c8c3e7e8.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "91470db3e6dda2f0a9ee",
 | 
					 | 
				
			||||||
    "url": "/static/js/chunk-2d2248b6.d84473c1.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "142f8131e877952087ff",
 | 
					 | 
				
			||||||
    "url": "/static/js/chunk-2d22523a.4b710d99.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "4b5b226c28a37969ec2f",
 | 
					 | 
				
			||||||
    "url": "/static/js/chunk-vendors.4605b41e.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "00382d944a1bc6fca08b",
 | 
					 | 
				
			||||||
    "url": "/static/js/profile.d25975e2.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "ed921b9e1d1e590ca0ec",
 | 
					 | 
				
			||||||
    "url": "/static/js/reset.ca898ebe.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "d772b2a24985f6471afd",
 | 
					 | 
				
			||||||
    "url": "/static/js/statistics.d03ca304.js"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  {
 | 
					 | 
				
			||||||
    "revision": "4fe9e93fc76c94cbb529",
 | 
					 | 
				
			||||||
    "url": "/static/js/workouts.ca40c08d.js"
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
]);
 | 
					 | 
				
			||||||
							
								
								
									
										36
									
								
								fittrackee/dist/service-worker.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										1
									
								
								fittrackee/dist/service-worker.js.map
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								fittrackee/dist/static/css/app.3729aa92.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								fittrackee/dist/static/css/app.f2234171.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
							
								
								
									
										1
									
								
								fittrackee/dist/static/css/profile.203e78e2.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					#account-confirmation[data-v-785df978]{display:flex;flex-direction:column;align-items:center}#account-confirmation svg[data-v-785df978]{stroke:none;fill-rule:nonzero;fill:var(--app-color);filter:var(--svg-filter);width:100px}#account-confirmation .error-message[data-v-785df978]{font-size:1.1em;text-align:center;display:flex;flex-direction:column}@media screen and (max-width:1000px){#account-confirmation .error-message[data-v-785df978]{font-size:1em}}#email-update[data-v-8c2ec9ce]{display:flex;flex-direction:column;align-items:center}#email-update svg[data-v-8c2ec9ce]{stroke:none;fill-rule:nonzero;fill:var(--app-color);filter:var(--svg-filter);width:100px}#email-update .error-message[data-v-8c2ec9ce]{font-size:1.1em;text-align:center;display:flex;flex-direction:column}@media screen and (max-width:1000px){#email-update .error-message[data-v-8c2ec9ce]{font-size:1em}}#profile[data-v-05463732],#profile[data-v-05463732] .profile-form{display:flex;flex-direction:column}#profile[data-v-05463732] .profile-form hr{border-color:var(--card-border-color);border-width:1px 0 0 0}#profile[data-v-05463732] .profile-form .form-items{display:flex;flex-direction:column}#profile[data-v-05463732] .profile-form .form-items input{margin:5px 0}#profile[data-v-05463732] .profile-form .form-items select{height:35px;padding:5px 0}#profile[data-v-05463732] .profile-form .form-items ::v-deep(.custom-textarea) textarea{padding:5px}#profile[data-v-05463732] .profile-form .form-items .form-item{display:flex;flex-direction:column;padding:10px}#profile[data-v-05463732] .profile-form .form-items .birth-date{height:20px}#profile[data-v-05463732] .profile-form .form-buttons{display:flex;margin-top:10px;padding:10px 0;gap:10px}#user[data-v-af7007f4]{margin:auto;width:700px}@media screen and (max-width:1000px){#user[data-v-af7007f4]{width:100%;margin:0 auto 50px auto}}
 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
#profile[data-v-163d82f7],#profile[data-v-163d82f7] .profile-form{display:flex;flex-direction:column}#profile[data-v-163d82f7] .profile-form hr{border-color:var(--card-border-color);border-width:1px 0 0 0}#profile[data-v-163d82f7] .profile-form .form-items{display:flex;flex-direction:column}#profile[data-v-163d82f7] .profile-form .form-items input{margin:5px 0}#profile[data-v-163d82f7] .profile-form .form-items select{height:35px;padding:5px 0}#profile[data-v-163d82f7] .profile-form .form-items ::v-deep(.custom-textarea) textarea{padding:5px}#profile[data-v-163d82f7] .profile-form .form-items .form-item{display:flex;flex-direction:column;padding:10px}#profile[data-v-163d82f7] .profile-form .form-items .birth-date{height:20px}#profile[data-v-163d82f7] .profile-form .form-buttons{display:flex;margin-top:10px;padding:10px 0;gap:10px}#user[data-v-10e7b479]{margin:auto;width:700px}@media screen and (max-width:1000px){#user[data-v-10e7b479]{width:100%;margin:0 auto 50px auto}}
 | 
					 | 
				
			||||||
							
								
								
									
										1
									
								
								fittrackee/dist/static/css/reset.e2527ec6.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					#account-confirmation-email[data-v-66aca424]{display:flex;flex-direction:column}#account-confirmation-email .email-sent[data-v-66aca424]{display:flex;flex-direction:column;align-items:center}#account-confirmation-email .email-sent svg[data-v-66aca424]{stroke:none;fill-rule:nonzero;fill:var(--app-color);filter:var(--svg-filter);width:100px}#account-confirmation-email .email-sent .email-sent-message[data-v-66aca424]{font-size:1.1em;text-align:center}@media screen and (max-width:1000px){#account-confirmation-email .email-sent .email-sent-message[data-v-66aca424]{font-size:1em}}#account-confirmation-email[data-v-66aca424] .card .card-content #user-auth-form{margin-top:0}#account-confirmation-email[data-v-66aca424] .card .card-content #user-auth-form #user-form{width:100%}#account-confirmation[data-v-35aad344]{display:flex}#account-confirmation .container[data-v-35aad344]{display:flex;justify-content:center;width:50%}@media screen and (max-width:700px){#account-confirmation .container[data-v-35aad344]{width:100%}}#password-action-done[data-v-eac78356]{display:flex;flex-direction:column;align-items:center}#password-action-done svg[data-v-eac78356]{stroke:none;fill-rule:nonzero;fill:var(--app-color);filter:var(--svg-filter);width:100px}#password-action-done .password-message[data-v-eac78356]{font-size:1.1em;text-align:center}@media screen and (max-width:1000px){#password-action-done .password-message[data-v-eac78356]{font-size:1em}}#password-reset-request[data-v-68377e44] .card .card-content #user-form{width:100%}#password-reset[data-v-a1cc55c4]{display:flex}#password-reset .container[data-v-a1cc55c4]{display:flex;justify-content:center;width:50%}@media screen and (max-width:700px){#password-reset .container[data-v-a1cc55c4]{width:100%}}
 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
#password-action-done[data-v-18334f6d]{display:flex;flex-direction:column;align-items:center}#password-action-done svg[data-v-18334f6d]{stroke:none;fill-rule:nonzero;fill:var(--app-color);filter:var(--svg-filter);width:100px}#password-action-done .password-message[data-v-18334f6d]{font-size:1.1em;text-align:center}@media screen and (max-width:1000px){#password-action-done .password-message[data-v-18334f6d]{font-size:1em}}#password-reset-request[data-v-68377e44] .card .card-content #user-form{width:100%}#password-reset[data-v-f5e39b60]{display:flex}#password-reset .container[data-v-f5e39b60]{display:flex;justify-content:center;width:50%}@media screen and (max-width:700px){#password-reset .container[data-v-f5e39b60]{width:100%;margin:0 auto 50px auto}}
 | 
					 | 
				
			||||||
@@ -1 +1 @@
 | 
				
			|||||||
.chart-menu[data-v-af15954c]{display:flex}.chart-menu .chart-arrow[data-v-af15954c],.chart-menu .time-frames[data-v-af15954c]{flex-grow:1;text-align:center}.chart-menu .chart-arrow[data-v-af15954c]{cursor:pointer}.sports-menu{display:flex;flex-wrap:wrap;padding:10px}.sports-menu label{display:flex;align-items:center;font-size:.9em;font-weight:400;min-width:120px;padding:10px}@media screen and (max-width:1000px){.sports-menu label{min-width:100px}}@media screen and (max-width:500px){.sports-menu label{min-width:20px}.sports-menu label .sport-label{display:none}}.sports-menu .sport-img{padding:3px;width:20px;height:20px}#user-statistics.stats-disabled[data-v-7d54529b]{opacity:.3;pointer-events:none}#user-statistics[data-v-7d54529b] .chart-radio{justify-content:space-around;padding:30px 10px 10px 10px}#statistics[data-v-0d93da6e]{display:flex;width:100%}#statistics .container[data-v-0d93da6e]{display:flex;flex-direction:column;width:100%}
 | 
					.chart-menu[data-v-af15954c]{display:flex}.chart-menu .chart-arrow[data-v-af15954c],.chart-menu .time-frames[data-v-af15954c]{flex-grow:1;text-align:center}.chart-menu .chart-arrow[data-v-af15954c]{cursor:pointer}.sports-menu{display:flex;flex-wrap:wrap;padding:10px}.sports-menu label{display:flex;align-items:center;font-size:.9em;font-weight:400;min-width:120px;padding:10px}@media screen and (max-width:1000px){.sports-menu label{min-width:100px}}@media screen and (max-width:500px){.sports-menu label{min-width:20px}.sports-menu label .sport-label{display:none}}.sports-menu .sport-img{padding:3px;width:20px;height:20px}#user-statistics.stats-disabled[data-v-7d54529b]{opacity:.3;pointer-events:none}#user-statistics[data-v-7d54529b] .chart-radio{justify-content:space-around;padding:30px 10px 10px 10px}#statistics[data-v-2e341d4e]{display:flex;width:100%}#statistics .container[data-v-2e341d4e]{display:flex;flex-direction:column;width:100%}
 | 
				
			||||||
							
								
								
									
										1
									
								
								fittrackee/dist/static/css/workouts.66f98dac.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| 
		 Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB  | 
| 
		 Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB  | 
| 
		 Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB  | 
| 
		 Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB  | 
							
								
								
									
										1
									
								
								fittrackee/dist/static/js/243.1c009238.js.map
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								fittrackee/dist/static/js/431.2dd6d03a.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					"use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[431],{6431:function(c){c.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAABSCAMAAAAhFXfZAAAC91BMVEVMaXEzeak2f7I4g7g3g7cua5gzeKg8hJo3grY4g7c3grU0gLI2frE0daAubJc2gbQwd6QzeKk2gLMtd5sxdKIua5g1frA2f7IydaM0e6w2fq41fK01eqo3grgubJgta5cxdKI1f7AydaQydaMxc6EubJgvbJkwcZ4ubZkwcJwubZgubJcydqUydKIxapgubJctbJcubZcubJcvbJYubJcvbZkubJctbJctbZcubJg2f7AubJcrbZcubJcubJcua5g3grY0fq8ubJcubJdEkdEwhsw6i88vhswuhcsuhMtBjMgthMsrg8srgss6is8qgcs8i9A9iMYtg8spgcoogMo7hcMngMonf8olfso4gr8kfck5iM8jfMk4iM8he8k1fro7itAgesk2hs8eecgzfLcofssdeMg0hc4cd8g2hcsxeLQbdsgZdcgxeLImfcszhM0vda4xgckzhM4xg84wf8Yxgs4udKsvfcQucqhUndROmdM1fK0wcZ8vb5w0eqpQm9MzeKhXoNVcpdYydKNWn9VZotVKltJFjsIwcJ1Rms9OlslLmtH///8+kc9epdYzd6dbo9VHkMM2f7FHmNBClM8ydqVcpNY9hro3gLM9hLczealQmcw3fa46f7A8gLMxc6I3eagyc6FIldJMl9JSnNRSntNNl9JPnNJFi75UnM9ZodVKksg8kM45jc09e6ZHltFBk883gbRBh7pDk9EwcaBzn784g7dKkcY2i81Om9M7j85Llc81is09g7Q4grY/j9A0eqxKmdFFltBEjcXf6fFImdBCiLxJl9FGlNFBi78yiMxVndEvbpo6js74+vx+psPP3+o/ks5HkcpGmNCjwdZCkNDM3ehYoNJEls+lxNkxh8xHks0+jdC1zd5Lg6r+/v/H2ufz9/o3jM3t8/edvdM/k89Th61OiLBSjbZklbaTt9BfptdjmL1AicBHj8hGk9FAgK1dkLNTjLRekrdClc/k7fM0icy0y9tgp9c4jc2NtM9Dlc8zicxeXZn3AAAAQ3RSTlMAHDdTb4yPA+LtnEQmC4L2EmHqB7XA0d0sr478x4/Yd5i1zOfyPkf1sLVq4Nh3FvjxopQ2/STNuFzUwFIwxKaejILpIBEV9wAABhVJREFUeF6s1NdyFEcYBeBeoQIhRAkLlRDGrhIgY3BJL8CVeKzuyXFzzjkn5ZxzzuScg3PO8cKzu70JkO0LfxdTU//pM9vTu7Xgf6KqOVTb9X7toRrVEfBf1HTVjZccrT/2by1VV928Yty9ZbVuucdz90frG8DBjl9pVApbOstvmMuvVgaNXSfAAd6pGxpy6yxf5ph43pS/4f3uoaGm2rdu72S9xzOvMymkZFq/ptDrk90mhW7e4zl7HLzhxGWPR20xmSxJ/VqldG5m9XhaVOA1DadsNh3Pu5L2N6QtPO/32JpqQBVVk20oy/Pi2s23WEvyfHbe1thadVQttvm7Llf65gGmXK67XtupyoM7HQhmXdLS8oGWJNeOJ3C5fG5XCEJnkez3/oFdsvgJ4l2ANZwhrJKk/7OSXa+3Vw2WJMlKnGkobouYk6T0TyX30klOUnTD9HJ5qpckL3EW/w4XF3Xd0FGywXUrstrclVsqz5Pd/sXFYyDnPdrLcQODmGOK47IZb4CmibmMn+MYRzFZ5jg33ZL/EJrWcszHmANy3ARBK/IXtciJy8VsitPSdE3uuHxzougojcUdr8/32atnz/ev3f/K5wtpxUTpcaI45zusVDpYtZi+jg0oU9b3x74h7+n9ABvYEZeKaVq0sh0AtLKsFtqNBdeT0MrSzwwlq9+x6xAO4tgOtSzbCjrNQQiNvQUbUEubvzBUeGw26yDCsRHCoLkTHDa7IdOLIThs/gHvChszh2CimE8peRs47cxANI0lYNB5y1DljpOF0IhzBDPOZnDOqYYbeGKECbPzWnXludPphw5c2YBq5zlwXphIbO4VDCZ0gnPfUO1TwZoYwAs2ExPCedAu9DAjfQUjzITQb3jNj0KG2Sgt6BHaQUdYzWz+XmBktOHwanXjaSTcwwziBcuMOtwBmqPrTOxFQR/DRKKPqyur0aiW6cULYsx6tBm0jXpR/AUWR6HRq9WVW6MRhIq5jLyjbaCTDCijyYJNpCajdyobP/eTw0iexBAKkJ3gA5KcQb2zBXsIBckn+xVv8jkZSaEFHE+jFEleAEfayRU0MouNoBmB/L50Ai/HSLIHxcrpCvnhSQAuakKp2C/YbCylJjXRVy/z3+Kv/RrNcCo+WUzlVEhzKffnTQnxeN9fWF88fiNCUdSTsaufaChKWInHeysygfpIqagoakW+vV20J8uyl6TyNKEZWV4oRSPyCkWpgOLSbkCObT8o2r6tlG58HQquf6O0v50tB7JM7F4EORd2dx/K0w/KHsVkLPaoYrwgP/y7krr3SSMA4zj+OBgmjYkxcdIJQyQRKgg2viX9Hddi9UBb29LrKR7CVVEEEXWojUkXNyfTNDE14W9gbHJNuhjDettN3ZvbOvdOqCD3Jp/9l+/wJE+9PkYGjx/fqkys3S2rMozM/o2106rfMUINo6hVqz+eu/hd1c4xTg0TAfy5kV+4UG6+IthHTU9woWmxuKNbTfuCSfovBCxq7EtHqvYL4Sm6F8GVxsSXHMQ07TOi1DKtZxjWaaIyi4CXWjxPccUw8WVbMYY5wxC1mzEyXMJWkllpRloi+Kkoq69sxBTlElF6aAxYUbjXNlhlDZilDnM4U5SlN5biRsRHnbx3mbeWjEh4mEyiuJDl5XcWVmX5GvNkFgLWZM5qwsop4/AWfLhU1cR7k1VVvcYCWRkOI6Xy5gmnphCYIkvzuNYzHzosq2oNk2RtSs8khfUOfHIDgR6ysYBaMpl4uEgk2U/oJTs9AaTSwma7dT69geAE2ZpEjUsn2ieJNHeKfrI3EcAGJ2ZaNgVuC8EBctCLc57P5u5led6IOBkIYkuQMrmmjChs4VkfOerHqSBkPzZlhe06RslZ3zMjk2sscqKwY0RcjKK+LWbzd7KiHhkncs/siFJ+V5eXxD34B8nVuJEpGJNmxN2gH3vSvp7J70tF+D1Ej8qUJD1TkErAND2GZwTFg/LubvmgiBG3SOvdlsqFQrkEzJCL1rstlnVFROixZoDDSuXQFHESwVGlcuQcMb/b42NgjLowh5MTDFE3vNB5qStRIErdCQEh6pLPR92anSUb/wAIhldAaDMpGgAAAABJRU5ErkJggg=="}}]);
 | 
				
			||||||
							
								
								
									
										1
									
								
								fittrackee/dist/static/js/633.05b59575.js.map
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1
									
								
								fittrackee/dist/static/js/858.3eeaffeb.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					"use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[858],{8858:function(A){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAQAAAACach9AAACMUlEQVR4Ae3ShY7jQBAE0Aoz/f9/HTMzhg1zrdKUrJbdx+Kd2nD8VNudfsL/Th///dyQN2TH6f3y/BGpC379rV+S+qqetBOxImNQXL8JCAr2V4iMQXHGNJxeCfZXhSRBcQMfvkOWUdtfzlLgAENmZDcmo2TVmt8OSM2eXxBp3DjHSMFutqS7SbmemzBiR+xpKCNUIRkdkkYxhAkyGoBvyQFEJEefwSmmvBfJuJ6aKqKWnAkvGZOaZXTUgFqYULWNSHUckZuR1HIIimUExutRxwzOLROIG4vKmCKQt364mIlhSyzAf1m9lHZHJZrlAOMMztRRiKimp/rpdJDc9Awry5xTZCte7FHtuS8wJgeYGrex28xNTd086Dik7vUMscQOa8y4DoGtCCSkAKlNwpgNtphjrC6MIHUkR6YWxxs6Sc5xqn222mmCRFzIt8lEdKx+ikCtg91qS2WpwVfBelJCiQJwvzixfI9cxZQWgiSJelKnwBElKYtDOb2MFbhmUigbReQBV0Cg4+qMXSxXSyGUn4UbF8l+7qdSGnTC0XLCmahIgUHLhLOhpVCtw4CzYXvLQWQbJNmxoCsOKAxSgBJno75avolkRw8iIAFcsdc02e9iyCd8tHwmeSSoKTowIgvscSGZUOA7PuCN5b2BX9mQM7S0wYhMNU74zgsPBj3HU7wguAfnxxjFQGBE6pwN+GjME9zHY7zGp8wVxMShYX9NXvEWD3HbwJf4giO4CFIQxXScH1/TM+04kkBiAAAAAElFTkSuQmCC"}}]);
 | 
				
			||||||
							
								
								
									
										1
									
								
								fittrackee/dist/static/js/93.6f43c046.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					"use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[93],{7093:function(A){A.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAApCAYAAADAk4LOAAAFgUlEQVR4Aa1XA5BjWRTN2oW17d3YaZtr2962HUzbDNpjszW24mRt28p47v7zq/bXZtrp/lWnXr337j3nPCe85NcypgSFdugCpW5YoDAMRaIMqRi6aKq5E3YqDQO3qAwjVWrD8Ncq/RBpykd8oZUb/kaJutow8r1aP9II0WmLKLIsJyv1w/kqw9Ch2MYdB++12Onxee/QMwvf4/Dk/Lfp/i4nxTXtOoQ4pW5Aj7wpici1A9erdAN2OH64x8OSP9j3Ft3b7aWkTg/Fm91siTra0f9on5sQr9INejH6CUUUpavjFNq1B+Oadhxmnfa8RfEmN8VNAsQhPqF55xHkMzz3jSmChWU6f7/XZKNH+9+hBLOHYozuKQPxyMPUKkrX/K0uWnfFaJGS1QPRtZsOPtr3NsW0uyh6NNCOkU3Yz+bXbT3I8G3xE5EXLXtCXbbqwCO9zPQYPRTZ5vIDXD7U+w7rFDEoUUf7ibHIR4y6bLVPXrz8JVZEql13trxwue/uDivd3fkWRbS6/IA2bID4uk0UpF1N8qLlbBlXs4Ee7HLTfV1j54APvODnSfOWBqtKVvjgLKzF5YdEk5ewRkGlK0i33Eofffc7HT56jD7/6U+qH3Cx7SBLNntH5YIPvODnyfIXZYRVDPqgHtLs5ABHD3YzLuespb7t79FY34DjMwrVrcTuwlT55YMPvOBnRrJ4VXTdNnYug5ucHLBjEpt30701A3Ts+HEa73u6dT3FNWwflY86eMHPk+Yu+i6pzUpRrW7SNDg5JHR4KapmM5Wv2E8Tfcb1HoqqHMHU+uWDD7zg54mz5/2BSnizi9T1Dg4QQXLToGNCkb6tb1NU+QAlGr1++eADrzhn/u8Q2YZhQVlZ5+CAOtqfbhmaUCS1ezNFVm2imDbPmPng5wmz+gwh+oHDce0eUtQ6OGDIyR0uUhUsoO3vfDmmgOezH0mZN59x7MBi++WDL1g/eEiU3avlidO671bkLfwbw5XV2P8Pzo0ydy4t2/0eu33xYSOMOD8hTf4CrBtGMSoXfPLchX+J0ruSePw3LZeK0juPJbYzrhkH0io7B3k164hiGvawhOKMLkrQLyVpZg8rHFW7E2uHOL888IBPlNZ1FPzstSJM694fWr6RwpvcJK60+0HCILTBzZLFNdtAzJaohze60T8qBzyh5ZuOg5e7uwQppofEmf2++DYvmySqGBuKaicF1blQjhuHdvCIMvp8whTTfZzI7RldpwtSzL+F1+wkdZ2TBOW2gIF88PBTzD/gpeREAMEbxnJcaJHNHrpzji0gQCS6hdkEeYt9DF/2qPcEC8RM28Hwmr3sdNyht00byAut2k3gufWNtgtOEOFGUwcXWNDbdNbpgBGxEvKkOQsxivJx33iow0Vw5S6SVTrpVq11ysA2Rp7gTfPfktc6zhtXBBC+adRLshf6sG2RfHPZ5EAc4sVZ83yCN00Fk/4kggu40ZTvIEm5g24qtU4KjBrx/BTTH8ifVASAG7gKrnWxJDcU7x8X6Ecczhm3o6YicvsLXWfh3Ch1W0k8x0nXF+0fFxgt4phz8QvypiwCCFKMqXCnqXExjq10beH+UUA7+nG6mdG/Pu0f3LgFcGrl2s0kNNjpmoJ9o4B29CMO8dMT4Q5ox8uitF6fqsrJOr8qnwNbRzv6hSnG5wP+64C7h9lp30hKNtKdWjtdkbuPA19nJ7Tz3zR/ibgARbhb4AlhavcBebmTHcFl2fvYEnW0ox9xMxKBS8btJ+KiEbq9zA4RthQXDhPa0T9TEe69gWupwc6uBUphquXgf+/FrIjweHQS4/pduMe5ERUMHUd9xv8ZR98CxkS4F2n3EUrUZ10EYNw7BWm9x1GiPssi3GgiGRDKWRYZfXlON+dfNbM+GgIwYdwAAAAASUVORK5CYII="}}]);
 | 
				
			||||||
							
								
								
									
										2
									
								
								fittrackee/dist/static/js/admin.5ec56937.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					"use strict";(self["webpackChunkfittrackee_client"]=self["webpackChunkfittrackee_client"]||[]).push([[328],{6e3:function(t,e,i){i.r(e),i.d(e,{default:function(){return _}});var a=i(6252),s=i(2262),n=i(8273),c=i(8602),r=i(9917);const S=t=>((0,a.dD)("data-v-64629971"),t=t(),(0,a.Cn)(),t),l={id:"admin",class:"view"},p={key:0,class:"container"},u=S((()=>(0,a._)("div",{id:"bottom"},null,-1)));var T=(0,a.aZ)({setup(t){const e=(0,r.o)(),i=(0,a.Fl)((()=>e.getters[c.SY.GETTERS.APP_CONFIG])),S=(0,a.Fl)((()=>e.getters[c.SY.GETTERS.APP_STATS])),T=(0,a.Fl)((()=>e.getters[c.YN.GETTERS.IS_ADMIN])),o=(0,a.Fl)((()=>e.getters[c.YN.GETTERS.USER_LOADING]));return(0,a.wF)((()=>e.dispatch(c.SY.ACTIONS.GET_APPLICATION_STATS))),(t,e)=>{const c=(0,a.up)("router-view");return(0,a.wg)(),(0,a.iD)("div",l,[(0,s.SU)(o)?(0,a.kq)("",!0):((0,a.wg)(),(0,a.iD)("div",p,[(0,s.SU)(T)?((0,a.wg)(),(0,a.j4)(c,{key:0,appConfig:(0,s.SU)(i),appStatistics:(0,s.SU)(S)},null,8,["appConfig","appStatistics"])):((0,a.wg)(),(0,a.j4)(n.Z,{key:1})),u]))])}}}),o=i(3744);const d=(0,o.Z)(T,[["__scopeId","data-v-64629971"]]);var _=d}}]);
 | 
				
			||||||
 | 
					//# sourceMappingURL=admin.5ec56937.js.map
 | 
				
			||||||
							
								
								
									
										1
									
								
								fittrackee/dist/static/js/admin.5ec56937.js.map
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					{"version":3,"file":"static/js/admin.5ec56937.js","mappings":"mOAGA,MAAMA,EAAeC,KAAMC,EAAAA,EAAAA,IAAa,mBAAmBD,EAAEA,KAAIE,EAAAA,EAAAA,MAAcF,GACzEG,EAAa,CACjBC,GAAI,QACJC,MAAO,QAEHC,EAAa,CACjBC,IAAK,EACLF,MAAO,aAEHG,EAA2BT,GAAa,KAAmBU,EAAAA,EAAAA,GAAoB,MAAO,CAAEL,GAAI,UAAY,MAAO,KAUrH,OAA4BM,EAAAA,EAAAA,IAAiB,CAC3CC,MAAMC,GAEN,MAAMC,GAAQC,EAAAA,EAAAA,KAERC,GAAqCC,EAAAA,EAAAA,KACzC,IAAMH,EAAMI,QAAQC,EAAAA,GAAAA,QAAAA,cAEhBC,GAA6CH,EAAAA,EAAAA,KACjD,IAAMH,EAAMI,QAAQC,EAAAA,GAAAA,QAAAA,aAEhBE,GAAuCJ,EAAAA,EAAAA,KAC3C,IAAMH,EAAMI,QAAQI,EAAAA,GAAAA,QAAAA,YAEhBC,GAAoCN,EAAAA,EAAAA,KACxC,IAAMH,EAAMI,QAAQI,EAAAA,GAAAA,QAAAA,gBAKxB,OAFEE,EAAAA,EAAAA,KAAc,IAAMV,EAAMW,SAASN,EAAAA,GAAAA,QAAAA,yBAE9B,CAACO,EAAUC,KAChB,MAAMC,GAAyBC,EAAAA,EAAAA,IAAkB,eAEjD,OAAQC,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAO3B,EAAY,EACzD4B,EAAAA,EAAAA,IAAOT,IAWLU,EAAAA,EAAAA,IAAoB,IAAI,KAVvBH,EAAAA,EAAAA,OAAcC,EAAAA,EAAAA,IAAoB,MAAOxB,EAAY,EACnDyB,EAAAA,EAAAA,IAAOX,KACHS,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaN,EAAwB,CAClDpB,IAAK,EACLQ,WAAWgB,EAAAA,EAAAA,IAAOhB,GAClBI,eAAeY,EAAAA,EAAAA,IAAOZ,IACrB,KAAM,EAAG,CAAC,YAAa,qBACzBU,EAAAA,EAAAA,OAAcI,EAAAA,EAAAA,IAAaC,EAAAA,EAAU,CAAE3B,IAAK,KACjDC,W,UCjDV,MAAM2B,GAA2B,OAAgB,EAAQ,CAAC,CAAC,YAAY,qBAEvE","sources":["webpack://fittrackee_client/./src/views/AdminView.vue?67de","webpack://fittrackee_client/./src/views/AdminView.vue"],"sourcesContent":["import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-64629971\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n  id: \"admin\",\n  class: \"view\"\n}\nconst _hoisted_2 = {\n  key: 0,\n  class: \"container\"\n}\nconst _hoisted_3 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"div\", { id: \"bottom\" }, null, -1))\n\nimport { computed, ComputedRef, onBeforeMount } from 'vue'\n\n  import NotFound from '@/components/Common/NotFound.vue'\n  import { AUTH_USER_STORE, ROOT_STORE } from '@/store/constants'\n  import { TAppConfig, IAppStatistics } from '@/types/application'\n  import { useStore } from '@/use/useStore'\n\n  \nexport default /*#__PURE__*/_defineComponent({\n  setup(__props) {\n\n  const store = useStore()\n\n  const appConfig: ComputedRef<TAppConfig> = computed(\n    () => store.getters[ROOT_STORE.GETTERS.APP_CONFIG]\n  )\n  const appStatistics: ComputedRef<IAppStatistics> = computed(\n    () => store.getters[ROOT_STORE.GETTERS.APP_STATS]\n  )\n  const isAuthUserAmin: ComputedRef<boolean> = computed(\n    () => store.getters[AUTH_USER_STORE.GETTERS.IS_ADMIN]\n  )\n  const userLoading: ComputedRef<boolean> = computed(\n    () => store.getters[AUTH_USER_STORE.GETTERS.USER_LOADING]\n  )\n\n  onBeforeMount(() => store.dispatch(ROOT_STORE.ACTIONS.GET_APPLICATION_STATS))\n\nreturn (_ctx: any,_cache: any) => {\n  const _component_router_view = _resolveComponent(\"router-view\")!\n\n  return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n    (!_unref(userLoading))\n      ? (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n          (_unref(isAuthUserAmin))\n            ? (_openBlock(), _createBlock(_component_router_view, {\n                key: 0,\n                appConfig: _unref(appConfig),\n                appStatistics: _unref(appStatistics)\n              }, null, 8, [\"appConfig\", \"appStatistics\"]))\n            : (_openBlock(), _createBlock(NotFound, { key: 1 })),\n          _hoisted_3\n        ]))\n      : _createCommentVNode(\"\", true)\n  ]))\n}\n}\n\n})","import script from \"./AdminView.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./AdminView.vue?vue&type=script&setup=true&lang=ts\"\n\nimport \"./AdminView.vue?vue&type=style&index=0&id=64629971&lang=scss&scoped=true\"\n\nimport exportComponent from \"/mnt/data-lnx/Devs/00_Perso/FitTrackee/fittrackee_client/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-64629971\"]])\n\nexport default __exports__"],"names":["_withScopeId","n","_pushScopeId","_popScopeId","_hoisted_1","id","class","_hoisted_2","key","_hoisted_3","_createElementVNode","_defineComponent","setup","__props","store","useStore","appConfig","computed","getters","ROOT_STORE","appStatistics","isAuthUserAmin","AUTH_USER_STORE","userLoading","onBeforeMount","dispatch","_ctx","_cache","_component_router_view","_resolveComponent","_openBlock","_createElementBlock","_unref","_createCommentVNode","_createBlock","NotFound","__exports__"],"sourceRoot":""}
 | 
				
			||||||
							
								
								
									
										2
									
								
								fittrackee/dist/static/js/admin.5f46d0fe.js
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,2 +0,0 @@
 | 
				
			|||||||
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["admin"],{"102a":function(e,t,c){},"89b3":function(e,t,c){"use strict";c.r(t);var n=c("7a23"),o=c("f7f9"),r=c("dad5"),u=c("2906"),a=function(e){return Object(n["pushScopeId"])("data-v-64629971"),e=e(),Object(n["popScopeId"])(),e},i={id:"admin",class:"view"},b={key:0,class:"container"},p=a((function(){return Object(n["createElementVNode"])("div",{id:"bottom"},null,-1)})),O=Object(n["defineComponent"])({setup:function(e){var t=Object(u["a"])(),c=Object(n["computed"])((function(){return t.getters[r["b"].GETTERS.APP_CONFIG]})),a=Object(n["computed"])((function(){return t.getters[r["b"].GETTERS.APP_STATS]})),O=Object(n["computed"])((function(){return t.getters[r["a"].GETTERS.IS_ADMIN]})),d=Object(n["computed"])((function(){return t.getters[r["a"].GETTERS.USER_LOADING]}));return Object(n["onBeforeMount"])((function(){return t.dispatch(r["b"].ACTIONS.GET_APPLICATION_STATS)})),function(e,t){var r=Object(n["resolveComponent"])("router-view");return Object(n["openBlock"])(),Object(n["createElementBlock"])("div",i,[Object(n["unref"])(d)?Object(n["createCommentVNode"])("",!0):(Object(n["openBlock"])(),Object(n["createElementBlock"])("div",b,[Object(n["unref"])(O)?(Object(n["openBlock"])(),Object(n["createBlock"])(r,{key:0,appConfig:Object(n["unref"])(c),appStatistics:Object(n["unref"])(a)},null,8,["appConfig","appStatistics"])):(Object(n["openBlock"])(),Object(n["createBlock"])(o["a"],{key:1})),p]))])}}}),d=(c("f371"),c("6b0d")),f=c.n(d);const s=f()(O,[["__scopeId","data-v-64629971"]]);t["default"]=s},f371:function(e,t,c){"use strict";c("102a")}}]);
 | 
					 | 
				
			||||||
//# sourceMappingURL=admin.5f46d0fe.js.map
 | 
					 | 
				
			||||||