Allow connecting to upper-case project IDs. (#934)

Fix #933.
This commit is contained in:
Alexis Metaireau 2021-11-23 19:09:50 +01:00 committed by GitHub
parent bd9ebd1d60
commit 68552a6034
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 14 deletions

View file

@ -512,7 +512,7 @@ class BudgetTestCase(IhatemoneyTestCase):
self.assertTrue(session["is_admin"]) self.assertTrue(session["is_admin"])
def test_authentication_with_upper_case(self): def test_authentication_with_upper_case(self):
self.create_project("Raclette") self.post_project("Raclette")
# try to connect with the right credentials should work # try to connect with the right credentials should work
with self.app.test_client() as c: with self.app.test_client() as c:
@ -521,8 +521,8 @@ class BudgetTestCase(IhatemoneyTestCase):
) )
self.assertNotIn("Authentication", resp.data.decode("utf-8")) self.assertNotIn("Authentication", resp.data.decode("utf-8"))
self.assertIn("Raclette", session) self.assertIn("raclette", session)
self.assertTrue(session["Raclette"]) self.assertTrue(session["raclette"])
def test_admin_authentication(self): def test_admin_authentication(self):
self.app.config["ADMIN_PASSWORD"] = generate_password_hash("pass") self.app.config["ADMIN_PASSWORD"] = generate_password_hash("pass")

View file

@ -51,31 +51,36 @@ class BaseTestCase(TestCase):
) )
def post_project( def post_project(
self, id, follow_redirects=True, default_currency="XXX", name=None self,
id,
follow_redirects=True,
default_currency="XXX",
name=None,
password=None,
): ):
"""Create a fake project""" """Create a fake project"""
if name is None: name = name or id
name = id password = password or id
# create the project # create the project
return self.client.post( return self.client.post(
"/create", "/create",
data={ data={
"name": name, "name": name,
"id": id, "id": id,
"password": id, "password": password,
"contact_email": f"{id}@notmyidea.org", "contact_email": f"{id}@notmyidea.org",
"default_currency": default_currency, "default_currency": default_currency,
}, },
follow_redirects=follow_redirects, follow_redirects=follow_redirects,
) )
def create_project(self, id, default_currency="XXX", name=None): def create_project(self, id, default_currency="XXX", name=None, password=None):
if name is None: name = name or str(id)
name = str(id) password = password or id
project = models.Project( project = models.Project(
id=id, id=id,
name=name, name=name,
password=generate_password_hash(id), password=generate_password_hash(password),
contact_email=f"{id}@notmyidea.org", contact_email=f"{id}@notmyidea.org",
default_currency=default_currency, default_currency=default_currency,
) )

View file

@ -136,8 +136,9 @@ def pull_project(endpoint, values):
return return
if not values: if not values:
values = {} values = {}
project_id = values.pop("project_id", None) entered_project_id = values.pop("project_id", None)
if project_id: if entered_project_id:
project_id = entered_project_id.lower()
project = Project.query.get(project_id) project = Project.query.get(project_id)
if not project: if not project:
raise Redirect303(url_for(".create_project", project_id=project_id)) raise Redirect303(url_for(".create_project", project_id=project_id))
@ -225,7 +226,7 @@ def authenticate(project_id=None):
if not form.id.data and request.args.get("project_id"): if not form.id.data and request.args.get("project_id"):
form.id.data = request.args["project_id"] form.id.data = request.args["project_id"]
project_id = form.id.data project_id = form.id.data.lower() if form.id.data else None
project = Project.query.get(project_id) if project_id is not None else None project = Project.query.get(project_id) if project_id is not None else None
if not project: if not project: