diff --git a/Makefile b/Makefile index 6250c413..0dcbf821 100644 --- a/Makefile +++ b/Makefile @@ -185,3 +185,7 @@ baselayer_doc_reqs: baselayer_html: | baselayer_doc_reqs export SPHINXOPTS=-W; make -C doc html + +db: ## Connect to the database with psql +db: + @PYTHONPATH=. python ./baselayer/tools/db_connect.py diff --git a/app/handlers/base.py b/app/handlers/base.py index 19352c66..35bb5e15 100644 --- a/app/handlers/base.py +++ b/app/handlers/base.py @@ -79,8 +79,16 @@ def write_error(self, status_code, exc_info=None): self.render("loginerror.html", app=cfg["app"], error_message=str(err)) def log_exception(self, typ=None, value=None, tb=None): - if "Authentication Error:" in str(value): - log(value) + expected_exceptions = [ + "Authentication Error:", + "User account expired", + "Credentials malformed", + "Method Not Allowed", + "Unauthorized" + ] + v_str = str(value) + if any(exception in v_str for exception in expected_exceptions): + log(f"Error response returned by [{self.request.path}]: [{v_str}]") else: app_log.error( "Uncaught exception %s\n%r", @@ -305,9 +313,6 @@ def error(self, message, data={}, status=400, extra={}): extra : dict Extra fields to be included in the response. """ - if not (status == 404 and self.request.method == "HEAD"): - log(f"Error response returned by [{self.request.path}]: [{message}]") - self.set_header("Content-Type", "application/json") self.set_status(status) self.write({"status": "error", "message": message, "data": data, **extra}) diff --git a/tools/db_connect.py b/tools/db_connect.py new file mode 100755 index 00000000..46c15a88 --- /dev/null +++ b/tools/db_connect.py @@ -0,0 +1,32 @@ +#!/usr/bin/env python +import os +import sys + +from baselayer.app.env import load_env + +env, cfg = load_env() +db = cfg["database.database"] + +user = cfg["database.user"] or db +host = cfg["database.host"] +port = cfg["database.port"] +password = cfg["database.password"] + +flags = f"-U {user}" + +if password: + psql_cmd = f'PGPASSWORD="{password}" {psql_cmd}' +flags += " --no-password" + +if host: + flags += f" -h {host}" + +if port: + flags += f" -p {port}" + +cmd = f'psql {flags}'.split() +return_code = os.spawnvpe(os.P_WAIT, cmd[0], cmd, os.environ) +if return_code == 127: + sys.stderr.write(f'{cmd[0]}: command not found\n') + +sys.exit(return_code)