about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNguyễn Gia Phong <cnx@loang.net>2025-06-16 15:28:30 +0900
committerNguyễn Gia Phong <cnx@loang.net>2025-06-16 15:28:30 +0900
commit58ad9b49dfc393c41f86fda4632da1c934b062f4 (patch)
tree31c61cb6e48f2c207649ea866eac2cd31149ea7e /src
parentc3d356c8b80659468a0a7429636a128c156509ae (diff)
downloadscadere-58ad9b49dfc393c41f86fda4632da1c934b062f4.tar.gz
Add option for feed title
Diffstat (limited to 'src')
-rw-r--r--src/scadere/listen.py15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/scadere/listen.py b/src/scadere/listen.py
index 2888524..28e30d7 100644
--- a/src/scadere/listen.py
+++ b/src/scadere/listen.py
@@ -244,7 +244,7 @@ async def write_xml(writer, http_version, application, func, *args):
         await writer.drain()
 
 
-async def handle(certs, base_url, reader, writer):
+async def handle(certs, base_url, reader, writer, title=None):
     """Handle HTTP request."""
     try:
         try:
@@ -278,6 +278,8 @@ async def handle(certs, base_url, reader, writer):
             assert len(lookup) == len(summaries)
             url_parts = urlsplit(urljoin(base_url, url.strip().decode()))
             domains = tuple(parse_qs(url_parts.query).get('domain', []))
+            if title is None:
+                title = certs.name
         except Exception:  # pragma: no cover
             await describe_status(writer, HTTPStatus.INTERNAL_SERVER_ERROR,
                                   http_version)
@@ -285,7 +287,7 @@ async def handle(certs, base_url, reader, writer):
 
         if url_parts.path == urlsplit(base_url).path:  # Atom feed
             await write_xml(writer, http_version, 'atom', unparsed_feed,
-                            base_url, certs.name, mtime, summaries, domains)
+                            base_url, title, mtime, summaries, domains)
         elif url_parts.path in lookup:  # accessible Atom entry's link/ID
             await write_xml(writer, http_version, 'xhtml', unparsed_page,
                             lookup.get(url_parts.path))
@@ -298,9 +300,10 @@ async def handle(certs, base_url, reader, writer):
         await writer.wait_closed()
 
 
-async def listen(certs, base_url, host, port):  # pragma: no cover
+async def listen(certs, title, base_url, host, port):  # pragma: no cover
     """Serve HTTP server for TLS certificate expirations' Atom feed."""
-    server = await start_server(partial(handle, certs, base_url), host, port)
+    server = await start_server(partial(handle, certs, base_url, title=title),
+                                host, port)
     async with server:
         print('Serving on', end=' ')
         print(*(socket.getsockname() for socket in server.sockets), sep=', ')
@@ -338,13 +341,15 @@ def main(prog='scadere-listen', arguments=argv[1:]):
                             formatter_class=GNUHelpFormatter)
     parser.add_argument('-v', '--version', action='version',
                         version=f'%(prog)s {__version__}')
+    parser.add_argument('-t', '--title', help='title of Atom feeds')
     parser.add_argument('certs', metavar='PATH', type=Path)
     parser.add_argument('base_url', metavar='URL', type=with_trailing_slash)
     parser.add_argument('netloc', metavar='[HOST][:PORT]', nargs='?',
                         type=NetLoc(None), default=('localhost', None))
 
     args = parser.parse_args(arguments)
-    run(listen(args.certs, args.base_url, *args.netloc))  # pragma: no cover
+    run(listen(args.certs, args.title,
+               args.base_url, *args.netloc))  # pragma: no cover
 
 
 if __name__ == '__main__':  # pragma: no cover