This is an automated email from the ASF dual-hosted git repository.

sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-release.git


The following commit(s) were added to refs/heads/main by this push:
     new 4b23019  Sort the routes in the admin module
4b23019 is described below

commit 4b23019059dfbeb1f73e34cd3617f0c8dcf6a150
Author: Sean B. Palmer <[email protected]>
AuthorDate: Wed Jun 18 18:39:41 2025 +0100

    Sort the routes in the admin module
---
 atr/blueprints/admin/admin.py | 103 ++++++++++++++++++++++--------------------
 1 file changed, 53 insertions(+), 50 deletions(-)

diff --git a/atr/blueprints/admin/admin.py b/atr/blueprints/admin/admin.py
index efb9119..9e89085 100644
--- a/atr/blueprints/admin/admin.py
+++ b/atr/blueprints/admin/admin.py
@@ -435,6 +435,55 @@ async def admin_keys_update() -> str | response.Response | 
tuple[Mapping[str, An
         }, 200
 
 
[email protected]("/ldap/", methods=["GET"])
+async def ldap_search() -> str:
+    form = await LdapLookupForm.create_form(data=quart.request.args)
+    asf_id_for_template: str | None = None
+
+    web_session = await session.read()
+    if web_session and web_session.uid:
+        asf_id_for_template = web_session.uid
+
+    uid_query = form.uid.data
+    email_query = form.email.data
+
+    ldap_params: ldap.SearchParameters | None = None
+    if (quart.request.method == "GET") and (uid_query or email_query):
+        bind_dn = quart.current_app.config.get("LDAP_BIND_DN")
+        bind_password = quart.current_app.config.get("LDAP_BIND_PASSWORD")
+
+        start = time.perf_counter_ns()
+        ldap_params = ldap.SearchParameters(
+            uid_query=uid_query,
+            email_query=email_query,
+            bind_dn_from_config=bind_dn,
+            bind_password_from_config=bind_password,
+            email_only=True,
+        )
+        await asyncio.to_thread(ldap.search, ldap_params)
+        end = time.perf_counter_ns()
+        _LOGGER.info("LDAP search took %d ms", (end - start) / 1000000)
+
+    return await template.render(
+        "ldap-lookup.html",
+        form=form,
+        ldap_params=ldap_params,
+        asf_id=asf_id_for_template,
+        ldap_query_performed=ldap_params is not None,
+        uid_query=uid_query,
+    )
+
+
[email protected]("/ongoing-tasks/<project_name>/<version_name>/<revision>")
+async def ongoing_tasks(project_name: str, version_name: str, revision: str) 
-> quart.wrappers.response.Response:
+    try:
+        ongoing = await interaction.tasks_ongoing(project_name, version_name, 
revision)
+        return quart.Response(str(ongoing), mimetype="text/plain")
+    except Exception:
+        _LOGGER.exception(f"Error fetching ongoing task count for 
{project_name} {version_name} rev {revision}:")
+        return quart.Response("", mimetype="text/plain")
+
+
 @admin.BLUEPRINT.route("/performance")
 async def admin_performance() -> str:
     """Display performance statistics for all routes."""
@@ -583,56 +632,7 @@ async def admin_toggle_view() -> response.Response:
     return quart.redirect(referrer or quart.url_for("admin.admin_data"))
 
 
[email protected]("/ldap/", methods=["GET"])
-async def ldap_search() -> str:
-    form = await LdapLookupForm.create_form(data=quart.request.args)
-    asf_id_for_template: str | None = None
-
-    web_session = await session.read()
-    if web_session and web_session.uid:
-        asf_id_for_template = web_session.uid
-
-    uid_query = form.uid.data
-    email_query = form.email.data
-
-    ldap_params: ldap.SearchParameters | None = None
-    if (quart.request.method == "GET") and (uid_query or email_query):
-        bind_dn = quart.current_app.config.get("LDAP_BIND_DN")
-        bind_password = quart.current_app.config.get("LDAP_BIND_PASSWORD")
-
-        start = time.perf_counter_ns()
-        ldap_params = ldap.SearchParameters(
-            uid_query=uid_query,
-            email_query=email_query,
-            bind_dn_from_config=bind_dn,
-            bind_password_from_config=bind_password,
-            email_only=True,
-        )
-        await asyncio.to_thread(ldap.search, ldap_params)
-        end = time.perf_counter_ns()
-        _LOGGER.info("LDAP search took %d ms", (end - start) / 1000000)
-
-    return await template.render(
-        "ldap-lookup.html",
-        form=form,
-        ldap_params=ldap_params,
-        asf_id=asf_id_for_template,
-        ldap_query_performed=ldap_params is not None,
-        uid_query=uid_query,
-    )
-
-
[email protected]("/ongoing-tasks/<project_name>/<version_name>/<revision>")
-async def ongoing_tasks(project_name: str, version_name: str, revision: str) 
-> quart.wrappers.response.Response:
-    try:
-        ongoing = await interaction.tasks_ongoing(project_name, version_name, 
revision)
-        return quart.Response(str(ongoing), mimetype="text/plain")
-    except Exception:
-        _LOGGER.exception(f"Error fetching ongoing task count for 
{project_name} {version_name} rev {revision}:")
-        return quart.Response("", mimetype="text/plain")
-
-
-async def _check_keys() -> str:
+async def _check_keys(fix: bool = False) -> str:
     email_to_uid = await util.email_to_uid_map()
     bad_keys = []
     async with db.session() as data:
@@ -646,6 +646,9 @@ async def _check_keys() -> str:
             asf_uid = await util.asf_uid_from_uids(uids, 
ldap_data=email_to_uid)
             if asf_uid != key.apache_uid:
                 bad_keys.append(f"{key.fingerprint} detected: {asf_uid}, key: 
{key.apache_uid}")
+            if fix:
+                key.apache_uid = asf_uid
+                await data.commit()
     message = f"Checked {len(keys)} keys"
     if bad_keys:
         message += f"\nFound {len(bad_keys)} bad keys:\n{'\n'.join(bad_keys)}"


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to