Skip to content

Commit

Permalink
Fix SSL context error
Browse files Browse the repository at this point in the history
Fixed SSL error when using a proxy server. The add-on is now compatible with "QuickDictionary" and others that redefined the variable ssl._create_default_https_context on ssl._create_unverified_context
  • Loading branch information
alekssamos committed Nov 11, 2020
1 parent b405b35 commit 6267d3b
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 39 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Дополнение Яндекс.Переводчик для NVDA

[Скачать версию 2020.11.10](https://github.com/alekssamos/YandexTranslate/releases/latest/download/YandexTranslate-2020.11.10.nvda-addon)
[Скачать версию 2020.11.11](https://github.com/alekssamos/YandexTranslate/releases/latest/download/YandexTranslate-2020.11.11.nvda-addon)

После установки зайдите в NVDA меню, Параметры, Жесты ввода, назначте удобные вам сочетания клавиш для YandexTranslate. Или используйте уже предустановленные.

Expand Down
4 changes: 2 additions & 2 deletions addon/doc/en/readme.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Дополнение Яндекс.Переводчик для NVDA

[Скачать версию 2020.09.04](https://github.com/alekssamos/YandexTranslate/releases/latest/download/YandexTranslate-2020.08.31.nvda-addon)
[Скачать версию 2020.11.11](https://github.com/alekssamos/YandexTranslate/releases/latest/download/YandexTranslate-2020.11.11.nvda-addon)

После установки зайдите в NVDA меню, Параметры, Жесты ввода, назначте удобные вам сочетания клавиш для YandexTranslate.
После установки зайдите в NVDA меню, Параметры, Жесты ввода, назначте удобные вам сочетания клавиш для YandexTranslate. Или используйте уже предустановленные.

Переводит выделенный фрагмент текста или текст из буфера обмена.

Expand Down
85 changes: 51 additions & 34 deletions addon/globalPlugins/yandexTranslate/yandexfreetranslate.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/usr/bin/env python3
try: from utils import smartsplit
except: from .utils import smartsplit
import ssl
import json
import os
import os.path
Expand Down Expand Up @@ -72,19 +73,28 @@ def _sid_to_key(self, sid):
l = []
for item in sid.split(splitter): l.append(item[::-1])
return splitter.join(l)+self.keysuffix

def _parse_sid(self):
req = self._create_request(self.siteurl)
req.add_header("User-Agent", self.ua)
req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ")
req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
req.add_header("DNT", "1")
req.add_header("Accept-Encoding", "gzip, deflate, br")
page = self._create_opener().open(req).read().decode("UTF8")
#open("page.html", "w", encoding="utf8").write(page)
try:
return re.search(r'''SID[\s]?[:][\s]?['"]([^'"]+)['"]''', page).group(1)
except AttributeError:
raise YandexFreeTranslateError("blocked or not found \n"+str(page))
if self.useProxy:
old_context = ssl._create_default_https_context
ssl._create_default_https_context = ssl.create_default_context
req = self._create_request(self.siteurl)
req.add_header("User-Agent", self.ua)
req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ")
req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
req.add_header("DNT", "1")
req.add_header("Accept-Encoding", "gzip, deflate, br")
page = self._create_opener().open(req).read().decode("UTF8")
#open("page.html", "w", encoding="utf8").write(page)
try:
return re.search(r'''SID[\s]?[:][\s]?['"]([^'"]+)['"]''', page).group(1)
except AttributeError:
raise YandexFreeTranslateError("blocked or not found \n"+str(page))
finally:
if self.useProxy:
ssl._create_default_https_context = old_context

def _save_key(self, key):
with open(self.keyfilename, "w", encoding="utf8") as f:
f.write(key)
Expand All @@ -109,29 +119,36 @@ def __init__(self):
if not os.path.isfile(self.keyfilename) and os.path.isfile(self.keyfilename+".back"):
os.rename(self.keyfilename+".back", self.keyfilename)
def translate(self, lang, text=""):
if self.key == "": self.key = self._get_key()
p=[]
for part in smartsplit(text, 500, 550):
req = self._create_request(self.apibaseurl+"translate?"+urllibparse.urlencode({
"id":self.key, "srv":"tr-text", "lang":lang, "reason":"paste"
}))
req.add_header("User-Agent", self.ua)
req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ")
req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
req.add_header("DNT", "1")
req.add_header("Accept-Encoding", "gzip, deflate, br")
try:
content = self._create_opener().open(req, data = urllibparse.urlencode({
"options": 4, "text":part
}).encode("UTF8")).read().decode("UTF8")
resp = json.loads(content)
except json.JSONDecodeError:
raise YandexFreeTranslateError(content)
if "text" not in resp:
raise YandexFreeTranslateError(content)
p.append(resp["text"][0])
resp["text"] = p
return resp
try:
if self.useProxy:
old_context = ssl._create_default_https_context
ssl._create_default_https_context = ssl.create_default_context
if self.key == "": self.key = self._get_key()
p=[]
for part in smartsplit(text, 500, 550):
req = self._create_request(self.apibaseurl+"translate?"+urllibparse.urlencode({
"id":self.key, "srv":"tr-text", "lang":lang, "reason":"paste"
}))
req.add_header("User-Agent", self.ua)
req.add_header("Accept", r"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 ")
req.add_header("Accept-Language", r"ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3")
req.add_header("DNT", "1")
req.add_header("Accept-Encoding", "gzip, deflate, br")
try:
content = self._create_opener().open(req, data = urllibparse.urlencode({
"options": 4, "text":part
}).encode("UTF8")).read().decode("UTF8")
resp = json.loads(content)
except json.JSONDecodeError:
raise YandexFreeTranslateError(content)
if "text" not in resp:
raise YandexFreeTranslateError(content)
p.append(resp["text"][0])
resp["text"] = p
return resp
finally:
if self.useProxy:
ssl._create_default_https_context = old_context


if __name__ == "__main__":
Expand Down
2 changes: 1 addition & 1 deletion addon/manifest.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ summary = "Yandex translator for NVDA"
description = """Translates text using service Yandex Translate."""
author = "alekssamos <[email protected]>"
url = https://github.com/alekssamos/YandexTranslate/
version = 2020.09.04
version = 2020.11.11
docFileName = None
minimumNVDAVersion = 2019.3
lastTestedNVDAVersion = 2020.2
Expand Down
2 changes: 1 addition & 1 deletion buildVars.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
# Translators: Long description to be shown for this add-on on add-on information from add-ons manager
"addon_description": _("""Translates text using service Yandex Translate."""),
# version
"addon_version": "2020.11.10",
"addon_version": "2020.11.11",
# Author(s)
"addon_author": u"alekssamos <[email protected]>",
# URL for the add-on documentation support
Expand Down

0 comments on commit 6267d3b

Please sign in to comment.