← Back to team overview

canonical-ubuntu-qa team mailing list archive

[Merge] ~andersson123/autopkgtest-cloud:login-button into autopkgtest-cloud:master

 

Tim Andersson has proposed merging ~andersson123/autopkgtest-cloud:login-button into autopkgtest-cloud:master.

Requested reviews:
  Canonical's Ubuntu QA (canonical-ubuntu-qa)

For more details, see:
https://code.launchpad.net/~andersson123/autopkgtest-cloud/+git/autopkgtest-cloud/+merge/463211
-- 
Your team Canonical's Ubuntu QA is requested to review the proposed merge of ~andersson123/autopkgtest-cloud:login-button into autopkgtest-cloud:master.
diff --git a/charms/focal/autopkgtest-web/webcontrol/browse.cgi b/charms/focal/autopkgtest-web/webcontrol/browse.cgi
index e9bf6b3..91b020d 100755
--- a/charms/focal/autopkgtest-web/webcontrol/browse.cgi
+++ b/charms/focal/autopkgtest-web/webcontrol/browse.cgi
@@ -13,15 +13,23 @@ from wsgiref.handlers import CGIHandler
 import flask
 from helpers.admin import select_abnormally_long_jobs
 from helpers.exceptions import RunningJSONNotFound
-from helpers.utils import get_all_releases, get_supported_releases
+from helpers.utils import get_all_releases, get_supported_releases, setup_key
 from werkzeug.middleware.proxy_fix import ProxyFix
 
+# Initialize app
+PATH = os.path.join(
+    os.path.sep, os.getenv("XDG_RUNTIME_DIR", "/run"), "autopkgtest_webcontrol"
+)
+os.makedirs(PATH, exist_ok=True)
 app = flask.Flask("browse")
-
 # we don't want a long cache, as we only serve files that are regularly updated
 app.config["SEND_FILE_MAX_AGE_DEFAULT"] = 60
 
 app.wsgi_app = ProxyFix(app.wsgi_app, x_proto=1)
+
+secret_path = os.path.join(PATH, "secret_key")
+setup_key(app, secret_path)
+
 db_con = None
 swift_container_url = None
 
@@ -153,6 +161,13 @@ def get_release_arches():
     return release_arches
 
 
+def check_user():
+    user = None
+    if "nickname" in flask.session:
+        user = flask.session["nickname"]
+    return user
+
+
 def get_queues_info():
     """Return information about queued tests
 
@@ -245,6 +260,7 @@ def success_count_for_release_and_arch(db, release, arch, src_versions):
 
 @app.route("/")
 def index_root():
+    flask.session.permanent = True
     letters = list("abcdefghijklmnopqrstuvwxyz")
     indexes = letters + ["lib" + l for l in letters]
     indexes.sort()
@@ -260,8 +276,14 @@ def index_root():
         hc = human_exitcode(row[0])
         res = hc if "code" not in hc else "fail"
         recent.append((res, row[1], row[2], row[3], row[4]))
+    user = check_user()
 
-    return render("browse-home.html", indexes=indexes, recent_runs=recent)
+    return render(
+        "browse-home.html",
+        indexes=indexes,
+        recent_runs=recent,
+        user=user,
+    )
 
 
 # backwards-compatible path with debci that specifies the source hash
@@ -297,6 +319,7 @@ def package_overview(package, _=None):
                     len(filtered_requests),  # update the size too
                     filtered_requests,
                 )
+    user = check_user()
 
     return render(
         "browse-package.html",
@@ -312,6 +335,7 @@ def package_overview(package, _=None):
         title_suffix="- %s" % package,
         running=running_info,
         queues_info=queues_info,
+        user=user,
     )
 
 
@@ -419,6 +443,7 @@ def package_release_arch(package, release, arch, _=None):
                         item_info.get("uuid", ""),
                     ),
                 )
+    user = check_user()
 
     return render(
         "browse-results.html",
@@ -427,6 +452,7 @@ def package_release_arch(package, release, arch, _=None):
         arch=arch,
         package_results=results,
         title_suffix="- %s/%s/%s" % (package, release, arch),
+        user=user,
     )
 
 
@@ -445,6 +471,7 @@ def running():
                 ] = queue_length
 
     running_info = get_running_jobs()
+    user = check_user()
 
     return render(
         "browse-running.html",
@@ -453,6 +480,7 @@ def running():
         queues_info=queues_info,
         queues_lengths=queues_lengths,
         running=running_info,
+        user=user,
     )
 
 
@@ -462,9 +490,11 @@ def admin():
     pruned_running_info = select_abnormally_long_jobs(
         running_info, get_test_id=get_test_id, db_con=db_con
     )
+    user = check_user()
     return render(
         "browse-admin.html",
         running=pruned_running_info,
+        user=user,
     )
 
 
@@ -521,7 +551,12 @@ def testlist():
             # strip off epoch
             v = row[1][row[1].find(":") + 1 :]
             indexed_pkgs.setdefault(srchash(row[0]), []).append((row[0], v))
-    return render("browse-testlist.html", indexed_pkgs=indexed_pkgs)
+    user = check_user()
+    return render(
+        "browse-testlist.html",
+        indexed_pkgs=indexed_pkgs,
+        user=user,
+    )
 
 
 @app.route("/statistics")
@@ -572,9 +607,13 @@ def statistics():
             ] = success_count_for_release_and_arch(
                 db_con, release, arch, sources
             )
+    user = check_user()
 
     return render(
-        "browse-statistics.html", release_arches=release_arches, data=data
+        "browse-statistics.html",
+        release_arches=release_arches,
+        data=data,
+        user=user,
     )
 
 
diff --git a/charms/focal/autopkgtest-web/webcontrol/request/app.py b/charms/focal/autopkgtest-web/webcontrol/request/app.py
index a4a3367..422a40a 100644
--- a/charms/focal/autopkgtest-web/webcontrol/request/app.py
+++ b/charms/focal/autopkgtest-web/webcontrol/request/app.py
@@ -273,6 +273,8 @@ def index_root():
     elif nick:
         params["requester"] = nick
         s = Submit()
+        if list(params.keys()) == ["/login", "requester"]:
+            return redirect("/")
         try:
             s.validate_args(params)
             s.validate_distro_request(**params)
diff --git a/charms/focal/autopkgtest-web/webcontrol/templates/browse-layout.html b/charms/focal/autopkgtest-web/webcontrol/templates/browse-layout.html
index c91457d..acd14ae 100644
--- a/charms/focal/autopkgtest-web/webcontrol/templates/browse-layout.html
+++ b/charms/focal/autopkgtest-web/webcontrol/templates/browse-layout.html
@@ -34,6 +34,9 @@
               <li><a href="https://discourse.ubuntu.com/t/autopkgtest-service/34490";>Service Status</a></li>
               <li><a href="https://autopkgtest-cloud.readthedocs.io/";>Docs for admins</a></li>
               <li><a href="{{base_url}}admin">Admin</a></li>
+              {% if not user %}
+                <li><a href="{{base_url}}request.cgi?/login">Login</a></li>
+              {% endif %}
             </ul>
           </div><!--/.nav-collapse -->
         </div>

References