|
2 | 2 | from re import match |
3 | 3 |
|
4 | 4 | from feedgen.feed import FeedGenerator |
| 5 | +from flask import Response |
5 | 6 | from flask import flash |
6 | | -from flask import make_response |
7 | 7 | from flask import redirect |
8 | 8 | from flask import render_template |
9 | | -from flask import request |
10 | 9 | from pytz import UTC |
11 | 10 | from sqlalchemy import and_ |
12 | 11 |
|
@@ -64,27 +63,31 @@ def advisory_atom(): |
64 | 63 | data = get_advisory_data()['published'][:TRACKER_FEED_ADVISORY_ENTRIES] |
65 | 64 |
|
66 | 65 | feed = FeedGenerator() |
67 | | - feed.title('Arch Linux Security - Recent advisories') |
68 | | - feed.description('Arch Linux recent advsisories RSS feed') |
69 | | - feed.link(href=request.url_root) |
| 66 | + feed.id(TRACKER_ISSUE_URL.format('advisory')) |
| 67 | + feed.title('Arch Linux Security Advisories') |
| 68 | + feed.subtitle('Feed containing the last published Arch Linux Security Advisories') |
| 69 | + feed.link(href=TRACKER_ISSUE_URL.format('advisory'), rel='alternate') |
| 70 | + feed.link(href=TRACKER_ISSUE_URL.format('advisory/feed.atom'), rel='self') |
| 71 | + feed.language('en') |
70 | 72 |
|
71 | 73 | for entry in data: |
72 | 74 | package = entry['package'] |
73 | 75 | advisory = entry['advisory'] |
74 | | - content=render_template('feed.html', content=advisory.content) |
75 | | - summary=render_template('feed.html', content=advisory.impact) |
| 76 | + content = render_template('feed.html', content=advisory.content) |
| 77 | + impact = render_template('feed.html', content=advisory.impact) |
76 | 78 | published = updated = advisory.created.replace(tzinfo=UTC) |
77 | 79 |
|
78 | 80 | entry = feed.add_entry() |
| 81 | + entry.id(TRACKER_ISSUE_URL.format(advisory.id)) |
79 | 82 | entry.title(f'[{advisory.id}] {package.pkgname}: {advisory.advisory_type}') |
80 | 83 | entry.author(name='Arch Linux Security Team') |
81 | | - entry.description(content) |
82 | | - entry.description(summary, isSummary=True) |
| 84 | + entry.content(content.replace('\n', '<br/>'), type='html') |
| 85 | + entry.summary(impact.replace('\n', '<br/>'), type='html') |
83 | 86 | entry.published(published) |
84 | 87 | entry.updated(updated) |
85 | | - entry.link(href=TRACKER_ISSUE_URL.format(advisory.id)) |
| 88 | + entry.link(href=TRACKER_ISSUE_URL.format(advisory.id), rel='alternate') |
86 | 89 |
|
87 | | - return make_response(feed.rss_str()) |
| 90 | + return Response(feed.atom_str(pretty=True), 200, content_type='application/atom+xml; charset=utf-8') |
88 | 91 |
|
89 | 92 |
|
90 | 93 | @tracker.route('/advisory<regex("[./]json"):postfix>', methods=['GET']) |
|
0 commit comments