Я пишу расширение gnome-shell, которое показывает текущий баланс предоплаченных карт, таких как телефоны (или электричество). Поскольку для этого требуются учетные данные для данных служб, я не хочу хранить пароль в gsettings, а как запись в связке ключей gnome.
В настоящее время я использую синхронный способ запроса логина и пароля на связке ключей, используя
const GnomeKeyring = imports.gi.GnomeKeyring;
GnomeKeyring.unlock_sync(null, null)
// the variable 'id' is a concat of login '@'webservice url
var attrs = GnomeKeyring.Attribute.list_new()
GnomeKeyring.Attribute.list_append_string(attrs, 'id', id)
var result = GnomeKeyring.find_items_sync(
GnomeKeyring.ItemType.GENERIC_SECRET,
attrs
)
if (result[0] != GnomeKeyring.Result.OK) return
log(' => password '+result[1][0].secret)
log(' keyring id = '+result[1][0].item_id)
log(' keyring = '+result[1][0].keyring)
Эта синхронизация. слабым местом подходов является то, что брелок должен быть уже открыт или запрашивается диалоговое окно пароля. При запуске gnome-shell с автоматическим входом в систему этот синхронный вызов вообще блокирует фактический запуск оболочки, поэтому нет возможности ввести пароль для набора ключей.
Вики для разработчиков Gnome называет асинхронные методы
- GnomeKeyring.unlock
- GnomeKeyring.find_items
но оба не найдены в среде javascript .
Где я могу найти файл GnomeKeyring-Gir под fedora23, чтобы подтвердить отсутствие асинхронных функций? Как я могу добиться асинхронного открытия набора ключей и извлечения паролей? Кто-нибудь видит совершенно другой, возможный подход? Каждый по нитке...
unlock()
. Хотя в документе говорится, что асинхронный метод может блокироваться на неопределенный срок, это может быть ошибкой копирования и вставки. Так что я бы просто попробовать! - person JayStrictor   schedule 15.03.2016