Client - disable registration - fix #36
This commit is contained in:
parent
5b6a94fb85
commit
a7de5dd52c
@ -1,8 +1,8 @@
|
|||||||
export REACT_APP_API_URL = http://$(HOST):$(API_PORT)
|
export REACT_APP_API_URL = http://$(HOST):$(API_PORT)
|
||||||
export REACT_APP_THUNDERFOREST_API_KEY=
|
export REACT_APP_THUNDERFOREST_API_KEY=
|
||||||
export REACT_APP_GPX_LIMIT_IMPORT=10
|
export REACT_APP_GPX_LIMIT_IMPORT=10
|
||||||
|
export REACT_APP_ALLOW_REGISTRATION=true
|
||||||
export WEATHER_API=
|
export WEATHER_API=
|
||||||
export FT_ALLOW_REGISTRATION=true
|
|
||||||
|
|
||||||
# for dev env
|
# for dev env
|
||||||
export CODACY_PROJECT_TOKEN=
|
export CODACY_PROJECT_TOKEN=
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
Features
|
Features
|
||||||
########
|
########
|
||||||
|
|
||||||
Features list
|
List
|
||||||
~~~~~~~~~~~~~
|
~~~~
|
||||||
- Account creation (only standard user, not admin)
|
- Account creation (only standard user, not admin)
|
||||||
- 6 sports supported:
|
- 6 sports supported:
|
||||||
- Cycling (Sport)
|
- Cycling (Sport)
|
||||||
@ -22,6 +22,7 @@ Features list
|
|||||||
- longest duration
|
- longest duration
|
||||||
- maximum speed
|
- maximum speed
|
||||||
- Activities list and filter
|
- Activities list and filter
|
||||||
|
- User registration can be disabled.
|
||||||
|
|
||||||
**Notes:**
|
**Notes:**
|
||||||
|
|
||||||
|
@ -46,7 +46,8 @@ Dev environment
|
|||||||
|
|
||||||
- Update **Makefile.config** file if needed and copy/paste the
|
- Update **Makefile.config** file if needed and copy/paste the
|
||||||
**ThunderForest** and **Dark Sky** API keys value in
|
**ThunderForest** and **Dark Sky** API keys value in
|
||||||
**Makefile.custom.config** file (see example)
|
**Makefile.custom.config** file (see example). User registration can
|
||||||
|
also be disabled in **Makefile.custom.config**.
|
||||||
|
|
||||||
- Install Python virtualenv, React and all related packages and
|
- Install Python virtualenv, React and all related packages and
|
||||||
initialize the database:
|
initialize the database:
|
||||||
@ -82,7 +83,8 @@ Prod environment
|
|||||||
|
|
||||||
- Update **Makefile.config** file if needed and copy/paste the
|
- Update **Makefile.config** file if needed and copy/paste the
|
||||||
**ThunderForest** and **Dark Sky** API keys value in
|
**ThunderForest** and **Dark Sky** API keys value in
|
||||||
**Makefile.custom.config** file (see example)
|
**Makefile.custom.config** file (see example). User registration can
|
||||||
|
also be disabled in **Makefile.custom.config**.
|
||||||
|
|
||||||
- Install Python virtualenv, React and all related packages and
|
- Install Python virtualenv, React and all related packages and
|
||||||
initialize the database:
|
initialize the database:
|
||||||
|
@ -75,7 +75,7 @@
|
|||||||
role="menu"
|
role="menu"
|
||||||
aria-labelledby="dLabelLocalToc"><ul>
|
aria-labelledby="dLabelLocalToc"><ul>
|
||||||
<li><a class="reference internal" href="#">Features</a><ul>
|
<li><a class="reference internal" href="#">Features</a><ul>
|
||||||
<li><a class="reference internal" href="#features-list">Features list</a></li>
|
<li><a class="reference internal" href="#list">List</a></li>
|
||||||
<li><a class="reference internal" href="#dashboard">Dashboard</a></li>
|
<li><a class="reference internal" href="#dashboard">Dashboard</a></li>
|
||||||
<li><a class="reference internal" href="#activity-workout-detail">Activity/workout detail</a></li>
|
<li><a class="reference internal" href="#activity-workout-detail">Activity/workout detail</a></li>
|
||||||
<li><a class="reference internal" href="#activities-workouts-list">Activities/workouts list</a></li>
|
<li><a class="reference internal" href="#activities-workouts-list">Activities/workouts list</a></li>
|
||||||
@ -131,8 +131,8 @@
|
|||||||
|
|
||||||
<div class="section" id="features">
|
<div class="section" id="features">
|
||||||
<h1>Features<a class="headerlink" href="#features" title="Permalink to this headline">¶</a></h1>
|
<h1>Features<a class="headerlink" href="#features" title="Permalink to this headline">¶</a></h1>
|
||||||
<div class="section" id="features-list">
|
<div class="section" id="list">
|
||||||
<h2>Features list<a class="headerlink" href="#features-list" title="Permalink to this headline">¶</a></h2>
|
<h2>List<a class="headerlink" href="#list" title="Permalink to this headline">¶</a></h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><p>Account creation (only standard user, not admin)</p></li>
|
<li><p>Account creation (only standard user, not admin)</p></li>
|
||||||
<li><dl class="simple">
|
<li><dl class="simple">
|
||||||
@ -163,6 +163,7 @@
|
|||||||
</dl>
|
</dl>
|
||||||
</li>
|
</li>
|
||||||
<li><p>Activities list and filter</p></li>
|
<li><p>Activities list and filter</p></li>
|
||||||
|
<li><p>User registration can be disabled.</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
<p><strong>Notes:</strong></p>
|
<p><strong>Notes:</strong></p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
|
@ -160,7 +160,7 @@ Map</a>.</div>
|
|||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li class="toctree-l1"><a class="reference internal" href="features.html">Features</a><ul>
|
<li class="toctree-l1"><a class="reference internal" href="features.html">Features</a><ul>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="features.html#features-list">Features list</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="features.html#list">List</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="features.html#dashboard">Dashboard</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="features.html#dashboard">Dashboard</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="features.html#activity-workout-detail">Activity/workout detail</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="features.html#activity-workout-detail">Activity/workout detail</a></li>
|
||||||
<li class="toctree-l2"><a class="reference internal" href="features.html#activities-workouts-list">Activities/workouts list</a></li>
|
<li class="toctree-l2"><a class="reference internal" href="features.html#activities-workouts-list">Activities/workouts list</a></li>
|
||||||
|
@ -191,7 +191,8 @@ $ <span class="nb">cd</span> FitTrackee
|
|||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><p>Update <strong>Makefile.config</strong> file if needed and copy/paste the
|
<li><p>Update <strong>Makefile.config</strong> file if needed and copy/paste the
|
||||||
<strong>ThunderForest</strong> and <strong>Dark Sky</strong> API keys value in
|
<strong>ThunderForest</strong> and <strong>Dark Sky</strong> API keys value in
|
||||||
<strong>Makefile.custom.config</strong> file (see example)</p></li>
|
<strong>Makefile.custom.config</strong> file (see example). User registration can
|
||||||
|
also be disabled in <strong>Makefile.custom.config</strong>.</p></li>
|
||||||
<li><p>Install Python virtualenv, React and all related packages and
|
<li><p>Install Python virtualenv, React and all related packages and
|
||||||
initialize the database:</p></li>
|
initialize the database:</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -226,7 +227,8 @@ $ <span class="nb">cd</span> FitTrackee
|
|||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><p>Update <strong>Makefile.config</strong> file if needed and copy/paste the
|
<li><p>Update <strong>Makefile.config</strong> file if needed and copy/paste the
|
||||||
<strong>ThunderForest</strong> and <strong>Dark Sky</strong> API keys value in
|
<strong>ThunderForest</strong> and <strong>Dark Sky</strong> API keys value in
|
||||||
<strong>Makefile.custom.config</strong> file (see example)</p></li>
|
<strong>Makefile.custom.config</strong> file (see example). User registration can
|
||||||
|
also be disabled in <strong>Makefile.custom.config</strong>.</p></li>
|
||||||
<li><p>Install Python virtualenv, React and all related packages and
|
<li><p>Install Python virtualenv, React and all related packages and
|
||||||
initialize the database:</p></li>
|
initialize the database:</p></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
File diff suppressed because one or more lines are too long
@ -1,8 +1,8 @@
|
|||||||
Features
|
Features
|
||||||
########
|
########
|
||||||
|
|
||||||
Features list
|
List
|
||||||
~~~~~~~~~~~~~
|
~~~~
|
||||||
- Account creation (only standard user, not admin)
|
- Account creation (only standard user, not admin)
|
||||||
- 6 sports supported:
|
- 6 sports supported:
|
||||||
- Cycling (Sport)
|
- Cycling (Sport)
|
||||||
@ -22,6 +22,7 @@ Features list
|
|||||||
- longest duration
|
- longest duration
|
||||||
- maximum speed
|
- maximum speed
|
||||||
- Activities list and filter
|
- Activities list and filter
|
||||||
|
- User registration can be disabled.
|
||||||
|
|
||||||
**Notes:**
|
**Notes:**
|
||||||
|
|
||||||
|
@ -46,7 +46,8 @@ Dev environment
|
|||||||
|
|
||||||
- Update **Makefile.config** file if needed and copy/paste the
|
- Update **Makefile.config** file if needed and copy/paste the
|
||||||
**ThunderForest** and **Dark Sky** API keys value in
|
**ThunderForest** and **Dark Sky** API keys value in
|
||||||
**Makefile.custom.config** file (see example)
|
**Makefile.custom.config** file (see example). User registration can
|
||||||
|
also be disabled in **Makefile.custom.config**.
|
||||||
|
|
||||||
- Install Python virtualenv, React and all related packages and
|
- Install Python virtualenv, React and all related packages and
|
||||||
initialize the database:
|
initialize the database:
|
||||||
@ -82,7 +83,8 @@ Prod environment
|
|||||||
|
|
||||||
- Update **Makefile.config** file if needed and copy/paste the
|
- Update **Makefile.config** file if needed and copy/paste the
|
||||||
**ThunderForest** and **Dark Sky** API keys value in
|
**ThunderForest** and **Dark Sky** API keys value in
|
||||||
**Makefile.custom.config** file (see example)
|
**Makefile.custom.config** file (see example). User registration can
|
||||||
|
also be disabled in **Makefile.custom.config**.
|
||||||
|
|
||||||
- Install Python virtualenv, React and all related packages and
|
- Install Python virtualenv, React and all related packages and
|
||||||
initialize the database:
|
initialize the database:
|
||||||
|
@ -17,7 +17,7 @@ class BaseConfig:
|
|||||||
PICTURE_ALLOWED_EXTENSIONS = {'jpg', 'png', 'gif'}
|
PICTURE_ALLOWED_EXTENSIONS = {'jpg', 'png', 'gif'}
|
||||||
ACTIVITY_ALLOWED_EXTENSIONS = {'gpx', 'zip'}
|
ACTIVITY_ALLOWED_EXTENSIONS = {'gpx', 'zip'}
|
||||||
REGISTRATION_ALLOWED = (
|
REGISTRATION_ALLOWED = (
|
||||||
False if os.getenv('FT_ALLOW_REGISTRATION') == "false" else True
|
False if os.getenv('REACT_APP_ALLOW_REGISTRATION') == "false" else True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ os.environ["APP_SETTINGS"] = 'fittrackee_api.config.TestingConfig'
|
|||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def app():
|
def app():
|
||||||
app = create_app()
|
app = create_app()
|
||||||
|
app.config['REGISTRATION_ALLOWED'] = True
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
db.create_all()
|
db.create_all()
|
||||||
yield app
|
yield app
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { Helmet } from 'react-helmet'
|
import { Helmet } from 'react-helmet'
|
||||||
|
|
||||||
|
import { history } from '../../index'
|
||||||
|
import { isRegistrationAllowed } from '../../utils'
|
||||||
|
|
||||||
export default function Form (props) {
|
export default function Form (props) {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
@ -11,71 +14,85 @@ export default function Form (props) {
|
|||||||
{`${props.formType.charAt(0).toUpperCase()}${props.formType.slice(1)}`}
|
{`${props.formType.charAt(0).toUpperCase()}${props.formType.slice(1)}`}
|
||||||
</h1>
|
</h1>
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-md-3" />
|
<div className="col-md-3" />
|
||||||
<div className="col-md-6">
|
<div className="col-md-6">
|
||||||
<hr /><br />
|
<hr /><br />
|
||||||
<form onSubmit={event =>
|
{props.formType === 'register' && !isRegistrationAllowed ? (
|
||||||
props.handleUserFormSubmit(event, props.formType)}
|
<div className="card">
|
||||||
>
|
<div className="card-body">Registration is disabled.</div>
|
||||||
{props.formType === 'register' &&
|
<div className="card-body">
|
||||||
<div className="form-group">
|
<button
|
||||||
<input
|
type="submit"
|
||||||
className="form-control input-lg"
|
className="btn btn-secondary btn-lg btn-block"
|
||||||
name="username"
|
onClick={() => history.go(-1)}
|
||||||
placeholder="Enter a username"
|
>Back
|
||||||
required
|
</button>
|
||||||
type="text"
|
</div>
|
||||||
value={props.userForm.username}
|
</div>
|
||||||
onChange={props.onHandleFormChange}
|
) : (
|
||||||
/>
|
<form onSubmit={event =>
|
||||||
</div>
|
props.handleUserFormSubmit(event, props.formType)}
|
||||||
}
|
>
|
||||||
<div className="form-group">
|
{props.formType === 'register' &&
|
||||||
<input
|
<div className="form-group">
|
||||||
className="form-control input-lg"
|
<input
|
||||||
name="email"
|
className="form-control input-lg"
|
||||||
placeholder="Enter an email address"
|
name="username"
|
||||||
required
|
placeholder="Enter a username"
|
||||||
type="email"
|
required
|
||||||
value={props.userForm.email}
|
type="text"
|
||||||
onChange={props.onHandleFormChange}
|
value={props.userForm.username}
|
||||||
/>
|
onChange={props.onHandleFormChange}
|
||||||
</div>
|
/>
|
||||||
<div className="form-group">
|
</div>
|
||||||
<input
|
}
|
||||||
className="form-control input-lg"
|
<div className="form-group">
|
||||||
name="password"
|
<input
|
||||||
placeholder="Enter a password"
|
className="form-control input-lg"
|
||||||
required
|
name="email"
|
||||||
type="password"
|
placeholder="Enter an email address"
|
||||||
value={props.userForm.password}
|
required
|
||||||
onChange={props.onHandleFormChange}
|
type="email"
|
||||||
/>
|
value={props.userForm.email}
|
||||||
</div>
|
onChange={props.onHandleFormChange}
|
||||||
{props.formType === 'register' &&
|
/>
|
||||||
<div className="form-group">
|
</div>
|
||||||
<input
|
<div className="form-group">
|
||||||
className="form-control input-lg"
|
<input
|
||||||
name="password_conf"
|
className="form-control input-lg"
|
||||||
placeholder="Enter the password confirmation"
|
name="password"
|
||||||
required
|
placeholder="Enter a password"
|
||||||
type="password"
|
required
|
||||||
value={props.userForm.password_conf}
|
type="password"
|
||||||
onChange={props.onHandleFormChange}
|
value={props.userForm.password}
|
||||||
/>
|
onChange={props.onHandleFormChange}
|
||||||
</div>
|
/>
|
||||||
}
|
</div>
|
||||||
<input
|
{props.formType === 'register' &&
|
||||||
type="submit"
|
<div className="form-group">
|
||||||
className="btn btn-primary btn-lg btn-block"
|
<input
|
||||||
value="Submit"
|
className="form-control input-lg"
|
||||||
/>
|
name="password_conf"
|
||||||
</form>
|
placeholder="Enter the password confirmation"
|
||||||
|
required
|
||||||
|
type="password"
|
||||||
|
value={props.userForm.password_conf}
|
||||||
|
onChange={props.onHandleFormChange}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
<input
|
||||||
|
type="submit"
|
||||||
|
className="btn btn-primary btn-lg btn-block"
|
||||||
|
value="Submit"
|
||||||
|
/>
|
||||||
|
</form>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
<div className="col-md-3" />
|
||||||
</div>
|
</div>
|
||||||
<div className="col-md-3" />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,8 @@ export const thunderforestApiKey = `${
|
|||||||
process.env.REACT_APP_THUNDERFOREST_API_KEY
|
process.env.REACT_APP_THUNDERFOREST_API_KEY
|
||||||
}`
|
}`
|
||||||
export const gpxLimit = `${process.env.REACT_APP_GPX_LIMIT_IMPORT}`
|
export const gpxLimit = `${process.env.REACT_APP_GPX_LIMIT_IMPORT}`
|
||||||
|
export const isRegistrationAllowed =
|
||||||
|
process.env.REACT_APP_ALLOW_REGISTRATION !== 'false'
|
||||||
|
|
||||||
export const isLoggedIn = () => !!window.localStorage.authToken
|
export const isLoggedIn = () => !!window.localStorage.authToken
|
||||||
|
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
[pytest]
|
[pytest]
|
||||||
norecursedirs = fittrackee_api/.venv
|
norecursedirs = fittrackee_api/.venv
|
||||||
|
filterwarnings =
|
||||||
|
ignore::DeprecationWarning
|
||||||
|
Loading…
Reference in New Issue
Block a user