API & Client - refactor registration activation - #15
This commit is contained in:
parent
1398c7ff4a
commit
7ffcaad332
@ -144,8 +144,7 @@
|
|||||||
<span class="nt">"is_registration_enabled"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
|
<span class="nt">"is_registration_enabled"</span><span class="p">:</span> <span class="kc">false</span><span class="p">,</span>
|
||||||
<span class="nt">"max_single_file_size"</span><span class="p">:</span> <span class="mi">1048576</span><span class="p">,</span>
|
<span class="nt">"max_single_file_size"</span><span class="p">:</span> <span class="mi">1048576</span><span class="p">,</span>
|
||||||
<span class="nt">"max_zip_file_size"</span><span class="p">:</span> <span class="mi">10485760</span><span class="p">,</span>
|
<span class="nt">"max_zip_file_size"</span><span class="p">:</span> <span class="mi">10485760</span><span class="p">,</span>
|
||||||
<span class="nt">"max_users"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
<span class="nt">"max_users"</span><span class="p">:</span> <span class="mi">0</span>
|
||||||
<span class="nt">"registration"</span><span class="p">:</span> <span class="kc">false</span>
|
|
||||||
<span class="p">},</span>
|
<span class="p">},</span>
|
||||||
<span class="nt">"status"</span><span class="p">:</span> <span class="s2">"success"</span>
|
<span class="nt">"status"</span><span class="p">:</span> <span class="s2">"success"</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
@ -181,8 +180,7 @@
|
|||||||
<span class="nt">"is_registration_enabled"</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
|
<span class="nt">"is_registration_enabled"</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
|
||||||
<span class="nt">"max_single_file_size"</span><span class="p">:</span> <span class="mi">1048576</span><span class="p">,</span>
|
<span class="nt">"max_single_file_size"</span><span class="p">:</span> <span class="mi">1048576</span><span class="p">,</span>
|
||||||
<span class="nt">"max_zip_file_size"</span><span class="p">:</span> <span class="mi">10485760</span><span class="p">,</span>
|
<span class="nt">"max_zip_file_size"</span><span class="p">:</span> <span class="mi">10485760</span><span class="p">,</span>
|
||||||
<span class="nt">"max_users"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
|
<span class="nt">"max_users"</span><span class="p">:</span> <span class="mi">10</span>
|
||||||
<span class="nt">"registration"</span><span class="p">:</span> <span class="kc">true</span>
|
|
||||||
<span class="p">},</span>
|
<span class="p">},</span>
|
||||||
<span class="nt">"status"</span><span class="p">:</span> <span class="s2">"success"</span>
|
<span class="nt">"status"</span><span class="p">:</span> <span class="s2">"success"</span>
|
||||||
<span class="p">}</span>
|
<span class="p">}</span>
|
||||||
@ -197,10 +195,10 @@
|
|||||||
<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>gpx_limit_import</strong> (<em>integrer</em>) – max number of files in zip archive</p></li>
|
<li><p><strong>gpx_limit_import</strong> (<em>integrer</em>) – max number of files in zip archive</p></li>
|
||||||
|
<li><p><strong>is_registration_enabled</strong> (<em>boolean</em>) – is registration enabled ?</p></li>
|
||||||
<li><p><strong>max_single_file_size</strong> (<em>integrer</em>) – max size of a single file</p></li>
|
<li><p><strong>max_single_file_size</strong> (<em>integrer</em>) – max size of a single file</p></li>
|
||||||
<li><p><strong>max_zip_file_size</strong> (<em>integrer</em>) – max size of a zip archive</p></li>
|
<li><p><strong>max_zip_file_size</strong> (<em>integrer</em>) – max size of a zip archive</p></li>
|
||||||
<li><p><strong>max_users</strong> (<em>integrer</em>) – max users allowed to register on instance</p></li>
|
<li><p><strong>max_users</strong> (<em>integrer</em>) – max users allowed to register on instance</p></li>
|
||||||
<li><p><strong>registration</strong> (<em>boolean</em>) – is registration enabled ?</p></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</dd>
|
</dd>
|
||||||
<dt class="field-odd">Request Headers</dt>
|
<dt class="field-odd">Request Headers</dt>
|
||||||
|
@ -34,8 +34,7 @@ def get_application_config():
|
|||||||
"is_registration_enabled": false,
|
"is_registration_enabled": false,
|
||||||
"max_single_file_size": 1048576,
|
"max_single_file_size": 1048576,
|
||||||
"max_zip_file_size": 10485760,
|
"max_zip_file_size": 10485760,
|
||||||
"max_users": 0,
|
"max_users": 0
|
||||||
"registration": false
|
|
||||||
},
|
},
|
||||||
"status": "success"
|
"status": "success"
|
||||||
}
|
}
|
||||||
@ -85,8 +84,7 @@ def update_application_config(auth_user_id):
|
|||||||
"is_registration_enabled": true,
|
"is_registration_enabled": true,
|
||||||
"max_single_file_size": 1048576,
|
"max_single_file_size": 1048576,
|
||||||
"max_zip_file_size": 10485760,
|
"max_zip_file_size": 10485760,
|
||||||
"max_users": 10,
|
"max_users": 10
|
||||||
"registration": true
|
|
||||||
},
|
},
|
||||||
"status": "success"
|
"status": "success"
|
||||||
}
|
}
|
||||||
@ -94,10 +92,10 @@ def update_application_config(auth_user_id):
|
|||||||
:param integer auth_user_id: authenticate user id (from JSON Web Token)
|
:param integer auth_user_id: authenticate user id (from JSON Web Token)
|
||||||
|
|
||||||
:<json integrer gpx_limit_import: max number of files in zip archive
|
:<json integrer gpx_limit_import: max number of files in zip archive
|
||||||
|
:<json boolean is_registration_enabled: is registration enabled ?
|
||||||
:<json integrer max_single_file_size: max size of a single file
|
:<json integrer max_single_file_size: max size of a single file
|
||||||
:<json integrer max_zip_file_size: max size of a zip archive
|
:<json integrer max_zip_file_size: max size of a zip archive
|
||||||
:<json integrer max_users: max users allowed to register on instance
|
:<json integrer max_users: max users allowed to register on instance
|
||||||
:<json boolean registration: is registration enabled ?
|
|
||||||
|
|
||||||
:reqheader Authorization: OAuth 2.0 Bearer Token
|
:reqheader Authorization: OAuth 2.0 Bearer Token
|
||||||
|
|
||||||
@ -127,8 +125,6 @@ def update_application_config(auth_user_id):
|
|||||||
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 'registration' in config_data:
|
|
||||||
config.registration = config_data.get('registration')
|
|
||||||
|
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
update_app_config_from_database(current_app, config)
|
update_app_config_from_database(current_app, config)
|
||||||
|
@ -6,7 +6,6 @@ from ..users.models import User
|
|||||||
class AppConfig(db.Model):
|
class AppConfig(db.Model):
|
||||||
__tablename__ = 'app_config'
|
__tablename__ = 'app_config'
|
||||||
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
|
||||||
registration = db.Column(db.Boolean, default=False, nullable=False)
|
|
||||||
max_users = db.Column(db.Integer, default=0, nullable=False)
|
max_users = db.Column(db.Integer, default=0, nullable=False)
|
||||||
gpx_limit_import = db.Column(db.Integer, default=10, nullable=False)
|
gpx_limit_import = db.Column(db.Integer, default=10, nullable=False)
|
||||||
max_single_file_size = db.Column(
|
max_single_file_size = db.Column(
|
||||||
@ -17,7 +16,7 @@ class AppConfig(db.Model):
|
|||||||
@property
|
@property
|
||||||
def is_registration_enabled(self):
|
def is_registration_enabled(self):
|
||||||
nb_users = User.query.count()
|
nb_users = User.query.count()
|
||||||
return self.registration and nb_users < self.max_users
|
return self.max_users == 0 or nb_users < self.max_users
|
||||||
|
|
||||||
def serialize(self):
|
def serialize(self):
|
||||||
return {
|
return {
|
||||||
@ -26,5 +25,4 @@ class AppConfig(db.Model):
|
|||||||
"max_single_file_size": self.max_single_file_size,
|
"max_single_file_size": self.max_single_file_size,
|
||||||
"max_zip_file_size": self.max_zip_file_size,
|
"max_zip_file_size": self.max_zip_file_size,
|
||||||
"max_users": self.max_users,
|
"max_users": self.max_users,
|
||||||
"registration": self.registration,
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from fittrackee_api import db
|
from fittrackee_api import db
|
||||||
|
from fittrackee_api.users.models import User
|
||||||
|
|
||||||
from .models import AppConfig
|
from .models import AppConfig
|
||||||
|
|
||||||
@ -15,14 +16,14 @@ def init_config():
|
|||||||
(for FitTrackee versions prior to v0.3.0)
|
(for FitTrackee versions prior to v0.3.0)
|
||||||
"""
|
"""
|
||||||
existing_config = AppConfig.query.one_or_none()
|
existing_config = AppConfig.query.one_or_none()
|
||||||
|
nb_users = User.query.count()
|
||||||
if not existing_config:
|
if not existing_config:
|
||||||
config = AppConfig()
|
config = AppConfig()
|
||||||
config.registration = (
|
config.max_users = (
|
||||||
False
|
nb_users
|
||||||
if os.getenv('REACT_APP_ALLOW_REGISTRATION') == "false"
|
if os.getenv('REACT_APP_ALLOW_REGISTRATION') == "false"
|
||||||
else True
|
else 0
|
||||||
)
|
)
|
||||||
config.max_users = 0
|
|
||||||
config.max_single_file_size = os.environ.get(
|
config.max_single_file_size = os.environ.get(
|
||||||
'REACT_APP_MAX_SINGLE_FILE_SIZE', MAX_FILE_SIZE
|
'REACT_APP_MAX_SINGLE_FILE_SIZE', MAX_FILE_SIZE
|
||||||
)
|
)
|
||||||
@ -40,7 +41,6 @@ def update_app_config_from_database(current_app, db_config):
|
|||||||
current_app.config['max_single_file_size'] = db_config.max_single_file_size
|
current_app.config['max_single_file_size'] = db_config.max_single_file_size
|
||||||
current_app.config['MAX_CONTENT_LENGTH'] = db_config.max_zip_file_size
|
current_app.config['MAX_CONTENT_LENGTH'] = db_config.max_zip_file_size
|
||||||
current_app.config['max_users'] = db_config.max_users
|
current_app.config['max_users'] = db_config.max_users
|
||||||
current_app.config['registration'] = db_config.registration
|
|
||||||
current_app.config[
|
current_app.config[
|
||||||
'is_registration_enabled'
|
'is_registration_enabled'
|
||||||
] = db_config.is_registration_enabled
|
] = db_config.is_registration_enabled
|
||||||
|
@ -12,44 +12,25 @@ os.environ["FLASK_ENV"] = 'testing'
|
|||||||
os.environ["APP_SETTINGS"] = 'fittrackee_api.config.TestingConfig'
|
os.environ["APP_SETTINGS"] = 'fittrackee_api.config.TestingConfig'
|
||||||
|
|
||||||
|
|
||||||
def app_config_with_registration():
|
def get_app_config(with_config=False):
|
||||||
|
if with_config:
|
||||||
config = AppConfig()
|
config = AppConfig()
|
||||||
config.gpx_limit_import = 10
|
config.gpx_limit_import = 10
|
||||||
config.max_single_file_size = 1 * 1024 * 1024
|
config.max_single_file_size = 1 * 1024 * 1024
|
||||||
config.max_zip_file_size = 1 * 1024 * 1024 * 10
|
config.max_zip_file_size = 1 * 1024 * 1024 * 10
|
||||||
config.max_users = 10
|
config.max_users = 100
|
||||||
config.registration = True
|
|
||||||
db.session.add(config)
|
db.session.add(config)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
def app_config_registration_disabled():
|
|
||||||
config = AppConfig()
|
|
||||||
config.gpx_limit_import = 20
|
|
||||||
config.max_single_file_size = 10485
|
|
||||||
config.max_zip_file_size = 104850
|
|
||||||
config.max_users = 0
|
|
||||||
config.registration = False
|
|
||||||
db.session.add(config)
|
|
||||||
db.session.commit()
|
|
||||||
return config
|
|
||||||
|
|
||||||
|
|
||||||
def get_app_config(app_type):
|
|
||||||
if app_type == 'with_registration':
|
|
||||||
return app_config_with_registration()
|
|
||||||
elif app_type == 'no_registration':
|
|
||||||
return app_config_registration_disabled()
|
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_app(app_type=None):
|
def get_app(with_config=False):
|
||||||
app = create_app()
|
app = create_app()
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
db.create_all()
|
db.create_all()
|
||||||
app_db_config = get_app_config(app_type)
|
app_db_config = get_app_config(with_config)
|
||||||
if app_db_config:
|
if app_db_config:
|
||||||
update_app_config_from_database(app, app_db_config)
|
update_app_config_from_database(app, app_db_config)
|
||||||
yield app
|
yield app
|
||||||
@ -64,17 +45,12 @@ def get_app(app_type=None):
|
|||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def app():
|
def app():
|
||||||
yield from get_app('with_registration')
|
yield from get_app(with_config=True)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def app_no_config():
|
def app_no_config():
|
||||||
yield from get_app()
|
yield from get_app(with_config=False)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
|
||||||
def app_no_registration():
|
|
||||||
yield from get_app('no_registration')
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture()
|
@pytest.fixture()
|
||||||
|
@ -24,8 +24,7 @@ def test_get_config(app, user_1):
|
|||||||
assert data['data']['is_registration_enabled'] is True
|
assert data['data']['is_registration_enabled'] is True
|
||||||
assert data['data']['max_single_file_size'] == 1048576
|
assert data['data']['max_single_file_size'] == 1048576
|
||||||
assert data['data']['max_zip_file_size'] == 10485760
|
assert data['data']['max_zip_file_size'] == 10485760
|
||||||
assert data['data']['max_users'] == 10
|
assert data['data']['max_users'] == 100
|
||||||
assert data['data']['registration'] is True
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_config_no_config(app_no_config, user_1_admin):
|
def test_get_config_no_config(app_no_config, user_1_admin):
|
||||||
@ -82,7 +81,7 @@ def test_update_config_as_admin(app, user_1_admin):
|
|||||||
response = client.patch(
|
response = client.patch(
|
||||||
'/api/config',
|
'/api/config',
|
||||||
content_type='application/json',
|
content_type='application/json',
|
||||||
data=json.dumps(dict(registration=True, max_users=10)),
|
data=json.dumps(dict(gpx_limit_import=100, max_users=10)),
|
||||||
headers=dict(
|
headers=dict(
|
||||||
Authorization='Bearer '
|
Authorization='Bearer '
|
||||||
+ json.loads(resp_login.data.decode())['auth_token']
|
+ json.loads(resp_login.data.decode())['auth_token']
|
||||||
@ -92,12 +91,11 @@ def test_update_config_as_admin(app, user_1_admin):
|
|||||||
|
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
assert 'success' in data['status']
|
assert 'success' in data['status']
|
||||||
assert data['data']['gpx_limit_import'] == 10
|
assert data['data']['gpx_limit_import'] == 100
|
||||||
assert data['data']['is_registration_enabled'] is True
|
assert data['data']['is_registration_enabled'] is True
|
||||||
assert data['data']['max_single_file_size'] == 1048576
|
assert data['data']['max_single_file_size'] == 1048576
|
||||||
assert data['data']['max_zip_file_size'] == 10485760
|
assert data['data']['max_zip_file_size'] == 10485760
|
||||||
assert data['data']['max_users'] == 10
|
assert data['data']['max_users'] == 10
|
||||||
assert data['data']['registration'] is True
|
|
||||||
|
|
||||||
|
|
||||||
def test_update_full_config_as_admin(app, user_1_admin):
|
def test_update_full_config_as_admin(app, user_1_admin):
|
||||||
@ -116,7 +114,6 @@ def test_update_full_config_as_admin(app, user_1_admin):
|
|||||||
max_single_file_size=10000,
|
max_single_file_size=10000,
|
||||||
max_zip_file_size=25000,
|
max_zip_file_size=25000,
|
||||||
max_users=50,
|
max_users=50,
|
||||||
registration=True,
|
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
headers=dict(
|
headers=dict(
|
||||||
@ -133,7 +130,6 @@ def test_update_full_config_as_admin(app, user_1_admin):
|
|||||||
assert data['data']['max_single_file_size'] == 10000
|
assert data['data']['max_single_file_size'] == 10000
|
||||||
assert data['data']['max_zip_file_size'] == 25000
|
assert data['data']['max_zip_file_size'] == 25000
|
||||||
assert data['data']['max_users'] == 50
|
assert data['data']['max_users'] == 50
|
||||||
assert data['data']['registration'] is True
|
|
||||||
|
|
||||||
|
|
||||||
def test_update_config_not_admin(app, user_1):
|
def test_update_config_not_admin(app, user_1):
|
||||||
@ -146,7 +142,7 @@ def test_update_config_not_admin(app, user_1):
|
|||||||
response = client.patch(
|
response = client.patch(
|
||||||
'/api/config',
|
'/api/config',
|
||||||
content_type='application/json',
|
content_type='application/json',
|
||||||
data=json.dumps(dict(registration=True, max_users=10)),
|
data=json.dumps(dict(gpx_limit_import=100, max_users=10)),
|
||||||
headers=dict(
|
headers=dict(
|
||||||
Authorization='Bearer '
|
Authorization='Bearer '
|
||||||
+ json.loads(resp_login.data.decode())['auth_token']
|
+ json.loads(resp_login.data.decode())['auth_token']
|
||||||
@ -193,7 +189,7 @@ def test_update_config_no_config(app_no_config, user_1_admin):
|
|||||||
response = client.patch(
|
response = client.patch(
|
||||||
'/api/config',
|
'/api/config',
|
||||||
content_type='application/json',
|
content_type='application/json',
|
||||||
data=json.dumps(dict(registration=True, max_users=10)),
|
data=json.dumps(dict(gpx_limit_import=100, max_users=10)),
|
||||||
headers=dict(
|
headers=dict(
|
||||||
Authorization='Bearer '
|
Authorization='Bearer '
|
||||||
+ json.loads(resp_login.data.decode())['auth_token']
|
+ json.loads(resp_login.data.decode())['auth_token']
|
||||||
|
@ -10,5 +10,4 @@ def test_application_config(app):
|
|||||||
assert serialized_app_config['is_registration_enabled'] is True
|
assert serialized_app_config['is_registration_enabled'] is True
|
||||||
assert serialized_app_config['max_single_file_size'] == 1048576
|
assert serialized_app_config['max_single_file_size'] == 1048576
|
||||||
assert serialized_app_config['max_zip_file_size'] == 10485760
|
assert serialized_app_config['max_zip_file_size'] == 10485760
|
||||||
assert serialized_app_config['max_users'] == 10
|
assert serialized_app_config['max_users'] == 100
|
||||||
assert serialized_app_config['registration'] is True
|
|
||||||
|
@ -259,28 +259,6 @@ def test_user_registration_invalid_data(app):
|
|||||||
assert 'error' in data['status']
|
assert 'error' in data['status']
|
||||||
|
|
||||||
|
|
||||||
def test_user_registration_not_allowed(app_no_registration):
|
|
||||||
client = app_no_registration.test_client()
|
|
||||||
response = client.post(
|
|
||||||
'/api/auth/register',
|
|
||||||
data=json.dumps(
|
|
||||||
dict(
|
|
||||||
username='test',
|
|
||||||
email='test@test.com',
|
|
||||||
password='12345678',
|
|
||||||
password_conf='12345678',
|
|
||||||
)
|
|
||||||
),
|
|
||||||
content_type='application/json',
|
|
||||||
)
|
|
||||||
|
|
||||||
assert response.content_type == 'application/json'
|
|
||||||
assert response.status_code == 403
|
|
||||||
data = json.loads(response.data.decode())
|
|
||||||
assert data['status'] == 'error'
|
|
||||||
assert data['message'] == 'Error. Registration is disabled.'
|
|
||||||
|
|
||||||
|
|
||||||
def test_user_registration_max_users_exceeded(
|
def test_user_registration_max_users_exceeded(
|
||||||
app, user_1_admin, user_2, user_3
|
app, user_1_admin, user_2, user_3
|
||||||
):
|
):
|
||||||
|
@ -20,7 +20,6 @@ def upgrade():
|
|||||||
# ### commands auto generated by Alembic - please adjust! ###
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
op.create_table('app_config',
|
op.create_table('app_config',
|
||||||
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
sa.Column('id', sa.Integer(), autoincrement=True, nullable=False),
|
||||||
sa.Column('registration', sa.Boolean(), nullable=False),
|
|
||||||
sa.Column('max_users', sa.Integer(), nullable=False),
|
sa.Column('max_users', sa.Integer(), nullable=False),
|
||||||
sa.Column('gpx_limit_import', sa.Integer(), nullable=False),
|
sa.Column('gpx_limit_import', sa.Integer(), nullable=False),
|
||||||
sa.Column('max_single_file_size', sa.Integer(), nullable=False),
|
sa.Column('max_single_file_size', sa.Integer(), nullable=False),
|
||||||
|
@ -28,26 +28,17 @@ export default function Config({ appConfig, message, t, updateIsInEdition }) {
|
|||||||
<tbody>
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">
|
<th scope="row">
|
||||||
{t('administration:Enable registration')}:
|
{t(
|
||||||
</th>
|
// eslint-disable-next-line max-len
|
||||||
<td>
|
'administration:Max. number of active users (if 0, no limitation)'
|
||||||
{appConfig.registration
|
)}
|
||||||
? t('common:yes')
|
:
|
||||||
: t('common:no')}
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th scope="row">
|
|
||||||
{t('administration:Max. number of active users')}:
|
|
||||||
</th>
|
</th>
|
||||||
<td>{appConfig.max_users}</td>
|
<td>{appConfig.max_users}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row">
|
<th scope="row">
|
||||||
{t(
|
{t('administration:Max. size of uploaded files')}:
|
||||||
'administration:Max. size of ' + 'uploaded files'
|
|
||||||
)}
|
|
||||||
:
|
|
||||||
</th>
|
</th>
|
||||||
<td>{getFileSize(appConfig.max_single_file_size)}</td>
|
<td>{getFileSize(appConfig.max_single_file_size)}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -73,28 +73,16 @@ class AdminApplication extends React.Component {
|
|||||||
updateIsInEdition()
|
updateIsInEdition()
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<div className="form-group row">
|
|
||||||
<label
|
|
||||||
className="col-sm-6 col-form-label"
|
|
||||||
htmlFor="registration"
|
|
||||||
>
|
|
||||||
{t('administration:Enable registration')}:
|
|
||||||
</label>
|
|
||||||
<input
|
|
||||||
className="col-sm-5"
|
|
||||||
id="registration"
|
|
||||||
name="registration"
|
|
||||||
type="checkbox"
|
|
||||||
checked={formData.registration}
|
|
||||||
onChange={e => this.handleFormChange(e)}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div className="form-group row">
|
<div className="form-group row">
|
||||||
<label
|
<label
|
||||||
className="col-sm-6 col-form-label"
|
className="col-sm-6 col-form-label"
|
||||||
htmlFor="max_users"
|
htmlFor="max_users"
|
||||||
>
|
>
|
||||||
{t('administration:Max. number of active users')}:
|
{t(
|
||||||
|
// eslint-disable-next-line max-len
|
||||||
|
'administration:Max. number of active users (if 0, no limitation)'
|
||||||
|
)}
|
||||||
|
:
|
||||||
</label>
|
</label>
|
||||||
<input
|
<input
|
||||||
className="col-sm-5"
|
className="col-sm-5"
|
||||||
|
@ -8,12 +8,11 @@
|
|||||||
"Back": "Back",
|
"Back": "Back",
|
||||||
"Disable": "Disable",
|
"Disable": "Disable",
|
||||||
"Enable": "Enable",
|
"Enable": "Enable",
|
||||||
"Enable registration": "Enable registration",
|
|
||||||
"FitTrackee administration": "FitTrackee administration",
|
"FitTrackee administration": "FitTrackee administration",
|
||||||
"id": "id",
|
"id": "id",
|
||||||
"Image": "Image",
|
"Image": "Image",
|
||||||
"Label": "Label",
|
"Label": "Label",
|
||||||
"Max. number of active users": "Max. number of active users",
|
"Max. number of active users (if 0, no limitation)": "Max. number of active users",
|
||||||
"Max. files of zip archive": "Max. files of zip archive",
|
"Max. files of zip archive": "Max. files of zip archive",
|
||||||
"Max. size of uploaded files": "Max. size of uploaded files",
|
"Max. size of uploaded files": "Max. size of uploaded files",
|
||||||
"Max. size of uploaded files (in Mb)": "Max. size of uploaded files (in Mb)",
|
"Max. size of uploaded files (in Mb)": "Max. size of uploaded files (in Mb)",
|
||||||
|
@ -8,12 +8,11 @@
|
|||||||
"Back": "Retour",
|
"Back": "Retour",
|
||||||
"Disable": "désactiver",
|
"Disable": "désactiver",
|
||||||
"Enable": "activer",
|
"Enable": "activer",
|
||||||
"Enable registration": "Activer les inscriptions",
|
|
||||||
"FitTrackee administration": "Administration de FitTrackee",
|
"FitTrackee administration": "Administration de FitTrackee",
|
||||||
"id": "id",
|
"id": "id",
|
||||||
"Image": "Image",
|
"Image": "Image",
|
||||||
"Label": "Label",
|
"Label": "Label",
|
||||||
"Max. number of active users": "Nombre maximum d'utilisateurs actifs",
|
"Max. number of active users (if 0, no limitation)": "Nombre maximum d'utilisateurs actifs",
|
||||||
"Max. files of zip archive": "Nombre max. de fichiers dans une archive zip",
|
"Max. files of zip archive": "Nombre max. de fichiers dans une archive zip",
|
||||||
"Max. size of uploaded files": "Taille max. des fichiers",
|
"Max. size of uploaded files": "Taille max. des fichiers",
|
||||||
"Max. size of uploaded files (in Mb)": "Taille max. des fichiers (en Mo)",
|
"Max. size of uploaded files (in Mb)": "Taille max. des fichiers (en Mo)",
|
||||||
|
Loading…
Reference in New Issue
Block a user