Сначала немного о предмете разговора. Есть такая полезная штука: TiddlyWiki.
Это вроде как wiki (с поиском, тегами и прочим), но представляет собой
один большой HTML-файл, у которого внутри много-много всякого
JavaScript, на котором вся функциональность и написана. Понадобилось
что-нибудь записать, открыл файл в браузере, записал, а оно себя
автоматически в свой файл сохранило.
Раньше сохранение работало просто так, «из коробки». Но потом браузеры начали развиваться, думать о безопасности и в конце концов додумались, что давать скриптам доступ на запись к жёсткому диску как-то не комильфо. И автору TiddlyWiki пришлось изобретать обходные пути – штука-то полезная!
Для Firefox таким обходным путём является расширение TiddlyFox. Его надо просто поставить, а потом, когда первый раз открываешь файл со своей wiki, он спрашивает: «Хотите разрешить этому файлу сохраняться на диск?» Если ответить «да», то wiki сможет писать свои данные на диск, а предупреждение больше отображаться не будет.
Я пользовался TiddlyWiki уже давно. И, поскольку недавно вышла новая версия с кучей всего нового и полезного, решил я обновиться.
Обновление делается просто. Качаем с официального сайта файлик upgrade.html, сделанный на основе той же TiddlyWiki, открываем его в браузере и перетаскиваем в окно браузера свой файл, нуждающийся в обновлении. Оно там всё внутри перепиливает под новые стандарты и предлагает сохранить результат. Нажимаем кнопочку, сохраняем файл – и копируем его на старое место.
И вот я, как положено, скачал
Скачать новый
Беглые поиски в Интернете результатов не дали. То ли я не владею английским в должной мере, то ли никто с такой задачей не сталкивался. Что ж, спасение утопающих, как известно, дело рук самих утопающих!
Берём в руки файл расширения
Вот и нашёлся нужный файл:
Чудесно! Что там дальше происходит с нашим
Ага! То есть, разрешение на запись даётся в функции
Из написанного становится ясно, что разрешения устанавливаются в каких-то потрохах Firefox-а, и что поменять их без долгих разбирательств будет нелегко. Что ж, если это потроха Firefox, то отправимся туда, где они хранятся – в профиль пользователя.
В профиле среди кучи файлов обнаружился
Теперь откроем базу (командой
Команда
На нас вываливается простыня текста, в конце которой есть упоминание
Нужно удалить эту строчку и всё будет нормально. А как называется поле номера?
Ясно, это поле называется
И выходим командой
Открываем
Раньше сохранение работало просто так, «из коробки». Но потом браузеры начали развиваться, думать о безопасности и в конце концов додумались, что давать скриптам доступ на запись к жёсткому диску как-то не комильфо. И автору TiddlyWiki пришлось изобретать обходные пути – штука-то полезная!
Для Firefox таким обходным путём является расширение TiddlyFox. Его надо просто поставить, а потом, когда первый раз открываешь файл со своей wiki, он спрашивает: «Хотите разрешить этому файлу сохраняться на диск?» Если ответить «да», то wiki сможет писать свои данные на диск, а предупреждение больше отображаться не будет.
Я пользовался TiddlyWiki уже давно. И, поскольку недавно вышла новая версия с кучей всего нового и полезного, решил я обновиться.
Обновление делается просто. Качаем с официального сайта файлик upgrade.html, сделанный на основе той же TiddlyWiki, открываем его в браузере и перетаскиваем в окно браузера свой файл, нуждающийся в обновлении. Оно там всё внутри перепиливает под новые стандарты и предлагает сохранить результат. Нажимаем кнопочку, сохраняем файл – и копируем его на старое место.
И вот я, как положено, скачал
upgrade.html
,
положил себе в Dropbox (где все остальные wiki лежат) и запустил в
браузере. Оно спросило разрешения на сохранение, я разрешил. Обновил
свою рабочую wiki, а когда полез обновлять wiki со стихами, обнаружил,
что upgrade.html
превратился в точную копию рабочей wiki, которую я только что обновлял.Скачать новый
upgrade.html
несложно. Но ведь при всяком обновлении он будет портиться, а запретить
ему запись на диск я не могу – нет такой функции. Да, не надо было
давать права! Как бы их отобрать обратно?Беглые поиски в Интернете результатов не дали. То ли я не владею английским в должной мере, то ли никто с такой задачей не сталкивался. Что ж, спасение утопающих, как известно, дело рук самих утопающих!
Берём в руки файл расширения
tiddlyfox.xpi
. Две буквы PK
, стоящие в начале, дают нам понять, что это переименованный .zip
. Переименовываем его в tiddlyfox.zip
, распаковываем и ищем файлы с расширением .js
. Их немного и они короткие.Вот и нашёлся нужный файл:
content/overlay.js
. Почему именно он? Потому что в нём есть текст вопроса, задающегося при открытии wiki:approved = confirm("TiddlyFox: Do you want to enable TiddlyWiki file saving capability for " + uri);
Чудесно! Что там дальше происходит с нашим
approved
?if(approved) { // Save the approval for next time setPermission(uri); TiddlyFox.injectMessageBox(doc); // Always inject the message box if(isTiddlyWikiClassic) { TiddlyFox.injectScript(doc); // Only inject the script for TiddlyWiki classic } }
Ага! То есть, разрешение на запись даётся в функции
setPermission()
. И что же в ней написано?function setPermission(uri) { try { var pm = Components.classes["@mozilla.org/permissionmanager;1"].createInstance(Components.interfaces.nsIPermissionManager); pm.add(makeURI(uri),TiddlyFox.TIDDLYFOX_PERMISSION,pm.ALLOW_ACTION,pm.EXPIRE_NEVER,0); } catch(e) { } }
Из написанного становится ясно, что разрешения устанавливаются в каких-то потрохах Firefox-а, и что поменять их без долгих разбирательств будет нелегко. Что ж, если это потроха Firefox, то отправимся туда, где они хранятся – в профиль пользователя.
В профиле среди кучи файлов обнаружился
permissions.sqlite
. Это, судя по расширению, база данных в формате SQLite. Установим-ка программку для работы с ней:$ sudo aptitude install sqlite3
Теперь откроем базу (командой
sqlite3 permissions.sqlite
) и посмотрим, что внутри.Команда
.tables
говорит нам, что в базе содержится всего одна таблица под названием moz_hosts
. Чтобы просмотреть её содержимое выполняем простенький запрос:select * from moz_hosts;
На нас вываливается простыня текста, в конце которой есть упоминание
upgrade.html
под номером 97.95|mpsnare.iesnare.com|falsestart-rsa|1|2|1421171906408|0|0 96|www.evernote.com|falsestart-rsa|1|2|1421430145408|0|0 97|file:///home/morthan/Dropbox/tiddly/upgrade.html|tiddlyfox.saving.permission|1|0|0|0|0
Нужно удалить эту строчку и всё будет нормально. А как называется поле номера?
sqlite> .schema moz_hosts CREATE TABLE moz_hosts ( id INTEGER PRIMARY KEY,host TEXT,type TEXT,permission INTEGER,expireType INTEGER,expireTime INTEGER,appId INTEGER,isInBrowserElement INTEGER);
Ясно, это поле называется
id
. Тогда пишем запрос на удаление:delete from moz_hosts where id=97;
И выходим командой
.quit
.Открываем
upgrade.html
в браузере... Вуаля! Firefox опять спрашивает, разрешить ли ему запись! Но на этот раз я такой ошибки уже не сделаю. :-)
Комментариев нет:
Отправить комментарий