prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Tor2web warning page still using outdated pre-SI-redesign resources
  ## Description
  
  In the SI redesign, we overlooked the Tor2web page which tries to render an old location for the icon and does not show an icon for the flash warning message.
  
  ## Steps to Reproduce
  
  Visit https://demo-source.securedrop.org/tor2web-warning
  
  ## Expected Behavior
  
  ![image](https://user-images.githubusercontent.com/201369/166803350-c246a3f4-b648-4787-9e41-d4ba4b39385f.png)
  
  ## Actual Behavior
  
  ![image](https://user-images.githubusercontent.com/201369/166803550-cb4e380f-7da9-402b-9668-e4605af3f1e5.png)
  
  "Tor Browser" link in tor2web warning is broken
  ## Description
  
  The "Tor Browser" link in the tor2web warning is broken because it does not specify a protocol, so the browser treats it as a relative link.
  
  ## Steps to Reproduce
  
  * Visit `/tor2web-warning` in the SI
  * Hover over or click on the "Tor Browser" link, it should send you to a non-existent `/www.torproject.org/projects/torbrowser.html` on the SI's domain.
  
  ## Expected Behavior
  
  * Link takes you to Tor Project website.
  
  ## Comments
  
  Fix should be as simple as adding "https://" in front.
  
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `securedrop/source_app/info.py`
  Content:
  ```
  1 # -*- coding: utf-8 -*-
  2 import flask
  3 from flask import Blueprint, render_template, send_file, redirect, url_for, flash
  4 from flask_babel import gettext
  5 import werkzeug
  6 
  7 from io import BytesIO  # noqa
  8 
  9 from encryption import EncryptionManager
  10 from sdconfig import SDConfig
  11 from source_app.utils import get_sourcev3_url
  12 
  13 
  14 def make_blueprint(config: SDConfig) -> Blueprint:
  15     view = Blueprint('info', __name__)
  16 
  17     @view.route('/tor2web-warning')
  18     def tor2web_warning() -> flask.Response:
  19         flash(gettext("Your connection is not anonymous right now!"), "error")
  20         return flask.Response(
  21             render_template("tor2web-warning.html", source_url=get_sourcev3_url()),
  22             403)
  23 
  24     @view.route('/use-tor')
  25     def recommend_tor_browser() -> str:
  26         return render_template("use-tor-browser.html")
  27 
  28     @view.route('/public-key')
  29     def download_public_key() -> flask.Response:
  30         journalist_pubkey = EncryptionManager.get_default().get_journalist_public_key()
  31         data = BytesIO(journalist_pubkey.encode('utf-8'))
  32         return send_file(data,
  33                          mimetype="application/pgp-keys",
  34                          attachment_filename=config.JOURNALIST_KEY + ".asc",
  35                          as_attachment=True)
  36 
  37     @view.route('/journalist-key')
  38     def download_journalist_key() -> werkzeug.wrappers.Response:
  39         return redirect(url_for('.download_public_key'), code=301)
  40 
  41     @view.route('/why-public-key')
  42     def why_download_public_key() -> str:
  43         return render_template("why-public-key.html")
  44 
  45     return view
  46
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/securedrop/source_app/info.py b/securedrop/source_app/info.py
  --- a/securedrop/source_app/info.py
  +++ b/securedrop/source_app/info.py
  @@ -1,6 +1,6 @@
   # -*- coding: utf-8 -*-
   import flask
  -from flask import Blueprint, render_template, send_file, redirect, url_for, flash
  +from flask import Blueprint, render_template, send_file, redirect, url_for
   from flask_babel import gettext
   import werkzeug
   
  @@ -8,7 +8,7 @@
   
   from encryption import EncryptionManager
   from sdconfig import SDConfig
  -from source_app.utils import get_sourcev3_url
  +from source_app.utils import get_sourcev3_url, flash_msg
   
   
   def make_blueprint(config: SDConfig) -> Blueprint:
  @@ -16,7 +16,7 @@
   
       @view.route('/tor2web-warning')
       def tor2web_warning() -> flask.Response:
  -        flash(gettext("Your connection is not anonymous right now!"), "error")
  +        flash_msg("error", None, gettext("Your connection is not anonymous right now!"))
           return flask.Response(
               render_template("tor2web-warning.html", source_url=get_sourcev3_url()),
               403)
  
verification_info: {"golden_diff": "diff --git a/securedrop/source_app/info.py b/securedrop/source_app/info.py\n--- a/securedrop/source_app/info.py\n+++ b/securedrop/source_app/info.py\n@@ -1,6 +1,6 @@\n # -*- coding: utf-8 -*-\n import flask\n-from flask import Blueprint, render_template, send_file, redirect, url_for, flash\n+from flask import Blueprint, render_template, send_file, redirect, url_for\n from flask_babel import gettext\n import werkzeug\n \n@@ -8,7 +8,7 @@\n \n from encryption import EncryptionManager\n from sdconfig import SDConfig\n-from source_app.utils import get_sourcev3_url\n+from source_app.utils import get_sourcev3_url, flash_msg\n \n \n def make_blueprint(config: SDConfig) -> Blueprint:\n@@ -16,7 +16,7 @@\n \n     @view.route('/tor2web-warning')\n     def tor2web_warning() -> flask.Response:\n-        flash(gettext(\"Your connection is not anonymous right now!\"), \"error\")\n+        flash_msg(\"error\", None, gettext(\"Your connection is not anonymous right now!\"))\n         return flask.Response(\n             render_template(\"tor2web-warning.html\", source_url=get_sourcev3_url()),\n             403)\n", "issue": "Tor2web warning page still using outdated pre-SI-redesign resources\n## Description\r\n\r\nIn the SI redesign, we overlooked the Tor2web page which tries to render an old location for the icon and does not show an icon for the flash warning message.\r\n\r\n## Steps to Reproduce\r\n\r\nVisit https://demo-source.securedrop.org/tor2web-warning\r\n\r\n## Expected Behavior\r\n\r\n![image](https://user-images.githubusercontent.com/201369/166803350-c246a3f4-b648-4787-9e41-d4ba4b39385f.png)\r\n\r\n## Actual Behavior\r\n\r\n![image](https://user-images.githubusercontent.com/201369/166803550-cb4e380f-7da9-402b-9668-e4605af3f1e5.png)\r\n\n\"Tor Browser\" link in tor2web warning is broken\n## Description\r\n\r\nThe \"Tor Browser\" link in the tor2web warning is broken because it does not specify a protocol, so the browser treats it as a relative link.\r\n\r\n## Steps to Reproduce\r\n\r\n* Visit `/tor2web-warning` in the SI\r\n* Hover over or click on the \"Tor Browser\" link, it should send you to a non-existent `/www.torproject.org/projects/torbrowser.html` on the SI's domain.\r\n\r\n## Expected Behavior\r\n\r\n* Link takes you to Tor Project website.\r\n\r\n## Comments\r\n\r\nFix should be as simple as adding \"https://\" in front.\r\n\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\nimport flask\nfrom flask import Blueprint, render_template, send_file, redirect, url_for, flash\nfrom flask_babel import gettext\nimport werkzeug\n\nfrom io import BytesIO  # noqa\n\nfrom encryption import EncryptionManager\nfrom sdconfig import SDConfig\nfrom source_app.utils import get_sourcev3_url\n\n\ndef make_blueprint(config: SDConfig) -> Blueprint:\n    view = Blueprint('info', __name__)\n\n    @view.route('/tor2web-warning')\n    def tor2web_warning() -> flask.Response:\n        flash(gettext(\"Your connection is not anonymous right now!\"), \"error\")\n        return flask.Response(\n            render_template(\"tor2web-warning.html\", source_url=get_sourcev3_url()),\n            403)\n\n    @view.route('/use-tor')\n    def recommend_tor_browser() -> str:\n        return render_template(\"use-tor-browser.html\")\n\n    @view.route('/public-key')\n    def download_public_key() -> flask.Response:\n        journalist_pubkey = EncryptionManager.get_default().get_journalist_public_key()\n        data = BytesIO(journalist_pubkey.encode('utf-8'))\n        return send_file(data,\n                         mimetype=\"application/pgp-keys\",\n                         attachment_filename=config.JOURNALIST_KEY + \".asc\",\n                         as_attachment=True)\n\n    @view.route('/journalist-key')\n    def download_journalist_key() -> werkzeug.wrappers.Response:\n        return redirect(url_for('.download_public_key'), code=301)\n\n    @view.route('/why-public-key')\n    def why_download_public_key() -> str:\n        return render_template(\"why-public-key.html\")\n\n    return view\n", "path": "securedrop/source_app/info.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\nimport flask\nfrom flask import Blueprint, render_template, send_file, redirect, url_for\nfrom flask_babel import gettext\nimport werkzeug\n\nfrom io import BytesIO  # noqa\n\nfrom encryption import EncryptionManager\nfrom sdconfig import SDConfig\nfrom source_app.utils import get_sourcev3_url, flash_msg\n\n\ndef make_blueprint(config: SDConfig) -> Blueprint:\n    view = Blueprint('info', __name__)\n\n    @view.route('/tor2web-warning')\n    def tor2web_warning() -> flask.Response:\n        flash_msg(\"error\", None, gettext(\"Your connection is not anonymous right now!\"))\n        return flask.Response(\n            render_template(\"tor2web-warning.html\", source_url=get_sourcev3_url()),\n            403)\n\n    @view.route('/use-tor')\n    def recommend_tor_browser() -> str:\n        return render_template(\"use-tor-browser.html\")\n\n    @view.route('/public-key')\n    def download_public_key() -> flask.Response:\n        journalist_pubkey = EncryptionManager.get_default().get_journalist_public_key()\n        data = BytesIO(journalist_pubkey.encode('utf-8'))\n        return send_file(data,\n                         mimetype=\"application/pgp-keys\",\n                         attachment_filename=config.JOURNALIST_KEY + \".asc\",\n                         as_attachment=True)\n\n    @view.route('/journalist-key')\n    def download_journalist_key() -> werkzeug.wrappers.Response:\n        return redirect(url_for('.download_public_key'), code=301)\n\n    @view.route('/why-public-key')\n    def why_download_public_key() -> str:\n        return render_template(\"why-public-key.html\")\n\n    return view\n", "path": "securedrop/source_app/info.py"}]}