-
-
Save akzhan/9d593792ee7f58265ae54b4374644c95 to your computer and use it in GitHub Desktop.
just for fun, not tested :)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# habraproxy.py — это простейший http-прокси-сервер, запускаемый локально (порт на ваше | |
# усмотрение), который показывает содержимое страниц Хабра. С одним исключением: после | |
# каждого слова из шести букв должен стоять значок «™». Примерно так: | |
# | |
# http://habrahabr.ru/company/yandex/blog/258673/ | |
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
# Сейчас на фоне уязвимости Logjam все в индустрии в очередной раз обсуждают проблемы и | |
# особенности TLS. Я хочу воспользоваться этой возможностью, чтобы поговорить об одной из | |
# них, а именно — о настройке ciphersiutes. | |
# | |
# http://127.0.0.1:8232/company/yandex/blog/258673/ | |
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
# Сейчас™ на фоне уязвимости Logjam™ все в индустрии в очередной раз обсуждают проблемы и | |
# особенности TLS. Я хочу воспользоваться этой возможностью, чтобы поговорить об одной из | |
# них, а именно™ — о настройке ciphersiutes. | |
# | |
# Условия: | |
# * Python 2.x | |
# * можно использовать любые общедоступные библиотеки, которые сочтёте нужным | |
# * чем меньше кода, тем лучше. PEP8 — обязательно | |
# * в случае, если не хватает каких-то данных, следует опираться на здравый смысл | |
# | |
# Если задача кажется слишом простой, можно добавить следующее: | |
# * параметры командной строки (порт, хост, сайт, отличный от хабра и т.п.) | |
# * после старта локального сервера автоматически запускается браузер с открытой | |
# обработанной™ главной страницей | |
import sys, os, re | |
import cherryproxy | |
class CherryProxy_onsix(cherryproxy.CherryProxy): | |
""" | |
Sample CherryProxy class demonstrating how to adapt a response. | |
""" | |
def filter_response(self): | |
if not isinstance(self.resp.data, str): | |
msg = 'Response blocked due to potentially non-str content' | |
self.log.warning(msg) | |
self.set_response_forbidden(reason=msg) | |
self.resp.data = re.sub(r"\b(\w{6})\b", r"\1™", self.resp.data); | |
cherryproxy.main(CherryProxy_onsix) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment