|
Карточка с форума разработчиков Описание ==== По комбинации *пути к хранилищу* и *имени пользователя* подбирать пароль из файла настроек и подставлять в окне подключения к хранилищу конфигурации. Да, получается, что пароли будут незащищёнными, но на рабочем или домашнем ПК такое, в принципе, можно себе позволить. Если получится реализовать ввод настроек через ТурбоКонф, а сам файл с паролями хранить в шифрованном виде, под мастер-паролем, то прям вообще лепота.
@lankaster я сейчас активно занят ТК 5.6, подсказками и т.д. Поэтому думаю будет быстрее вынести в API возможность вызывать скрипт по событию. Чуть позже попробую сделать.
bolsun переместил(а) эту карточку из списка Предложения и идеи в список Принятые предложения
добавил возможность триггеров в SDK 5.6, скоро будет обновление
@bolsun А есть ли возможность отладки скриптов ТК в VSCode? И если есть, то подскажите пожалуйста где можно прочесть о том, как всё это правильно настроить.
@lankaster такой возможности нет, и я даже не представляю пока как увязать отладку ТК с VSCode. Самый простой на текущий момент вариант, в следующей версии могу вывести Сообщить() в лог. Пока можно использовать ПоказатьПодсказку / ShowHint() Показывает подсказку в окне конфигуратора Параметры text : Текст уведомления. Строка
@bolsun ОК, спасибо. Вариант с ShowHint() всё же лучше чем ничего)
Пользователь прикрепил(а) вложение Иллюстрация.gif
Пользователь прикрепил(а) вложение Иллюстрация.gif
Пользователь прикрепил(а) вложение АвтоподключениеКХранилищу.zip
И вдогонку второе предложение/пожелание: Реализовать в API возможность хранения каких-то промежуточных значений на время выполнения скрипта. Что-то вроде пары методов: *СохранитьЗначение(Ключ, Значение)* и *ПолучитьХранимоеЗначение(Ключ)*.
Пользователь прикрепил(а) вложение АвтоподключениеКХранилищу.zip
Пользователь прикрепил(а) вложение АвтоподключениеКХранилищу.zip
@lankaster добавлю сохранение и восстановление значений. Еще мне не очень нравится идея хранить пароли в открытом виде, попробую сделать возможность сохранять значения в зашифрованном виде.
@lankaster добавил возможность сохранять и восстанавливать значения. В пределах текущего сеанса и постоянно. С шифрованием и без. https://vk.com/wall-123020382_456
@lankaster теперь можно запрашивать у пользователя пароль, если он еще не сохранен и сохранять с шифрованием. Также можно сохранить в сеансе неудачные попытки входа.
@bolsun Шикарно! Большое спасибо!
thumbs up 👍
Пользователь прикрепил(а) вложение https://trello.com/c/KcNqy03P/240-%D1%84%D0%BE%D1%80%D0%BC%D0%B0-%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D0%B0-%D0%B4%D0%BB%D1%8F-%D1%82%D0%BA https://trello.com/c/KcNqy03P/240-%D1%84%D0%BE%D1%80%D0%BC%D0%B0-%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D0%B0-%D0%B4%D0%BB%D1%8F-%D1%82%D0%BA
Вот бы ещё возможность отобразить диалог появилась :) https://trello.com/c/KcNqy03P/240-%D1%84%D0%BE%D1%80%D0%BC%D0%B0-%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D0%B0-%D0%B4%D0%BB%D1%8F-%D1%82%D0%BA
@lankaster добавлю :)
@lankaster опубликуешь потом, что получится? очень интересно
Есть ли возможность из скрипта узнать текущий путь соединения ИБ? Это бы очень помогло, ибо настройки автоподключения к хранилищу лучше хранить в разрезе разных информационных баз. Ведь у каждой базы хранилище, как минимум, лежит по отдельному адресу.
@demon_infernal при подключении, есть поле "Путь к хранилищу", его же можно использовать?
@bolsun не совсем понял. В ситуации, когда происходит первый запуск конфигуратора, поле "путь к хранилищу" не заполнено. Мы же хотим сделать, чтобы оно заполнялось автоматически, то есть один раз ввел - программа запомнила и подставляет. Для этого где то нужно хранить набор данных "путь, логин и пароль" для каждой базы,а еще лучше - для каждого пользователя. В качестве уникального идентификатора, ключа, с которым сохранять настройки, проще всего использовать строку соединения ИБ. Ее как то можно получить из скрипта?
Пользователь прикрепил(а) вложение image.png https://trello-attachments.s3.amazonaws.com/5aec736d7dec7207a7f7c6df/5c125f8b6af70a8ddca1ff80/db663ca4be328e8414252162a772979a/image.png
Из скрипта пока не получить строку соединения. Опять же путь к хранилищу ведь сохраняется, если хотя бы раз подключались. Тогда можно взять из этого поля + Имя пользователя. Будет уникальный ключ.
Пользователь прикрепил(а) вложение stg_autoconnect.os
@bolsun Приложил то, что получилось. Делает следующее: При появлении окна подключения к хранилищу проверяет, заполнены ли путь и логин. Если да - по ним ищет сохраненный пароль. Если пароля нет - спрашивает его и сохраняет. Затем вводит пароль и нажимает "Ок". Если попыток ввести пароль будет больше трех (например, изменился пароль и сохраненный пароль уже не подходит) - предлагает сбросить сохраненный пароль.
thumbs up 👍
Пользователь прикрепил(а) вложение stg_autoconnect.os
@demon_infernal работает :) парочка мелких замечаний. 1. Перед вставкой пароля, проверить, что сохраненный пароль не пустая строка, т.к. при вставке через буфер, может возникнуть ошибка. 2. Текст формы ввода пароля дублирует заголовок, может добавить в тексте, что пароль будет сохранен для последующего автоматического входа? 3. Может быть при неудачном входе предложить ввести пароль заново? но тут я пока не уверен Сможете опубликовать на форуме или мне выложить?
Пользователь прикрепил(а) вложение Stg_autoconnect.os
@bolsun Мелкие замечания поправил. При неудачном входе запрашивать пароль повторно не всегда правильно, ведь проблема может быть не только в пароле. Хранилище может переехать или стать поврежденным, и тогда пользователь даже не сможет поменять путь к нему, потому что постоянно будет выдаваться запрос пароля. Я посмотрел, как это было сделано в аналогичном скрипте снегопата, и сделал так же. Выложите сами на форум, если не трудно
thumbs up 👍
@bolsun Есть еще одна проблема. В данный момент счетчик попыток подключения сохраняется один для всех информационных баз, его тоже нужно хранить в разрезе баз. Использовать ключ "путь к хранилищу + логин" здесь не получится, потому что при первом запуске конфигуратора путь к хранилищу и логин будут пустыми у любой базы. Нужен какой то другой уникальный ключ. Очень хочется иметь возможность получить из скрипта строку соединения. Так же счетчик подключений нужно очищать в случае успешного подключения, но мне не известно, как отловить событие именно "успешного подключения к хранилищу".
Пользователь прикрепил(а) вложение Stg_autoconnect.os
Пользователь прикрепил(а) вложение Stg_autoconnect.os
@demon_infernal для определения успешности подключения, можно после ввода пароля подождать окно об ошибке, как в варианте @lankaster ТК.ЖдатьОкно("Конфигуратор", 1000, Ложь); В случае если окна не будет, возникнет исключение. Значит соединение успешно. Строку соединения просто не получить, для этого нужно вызывать окно о программе. Может подойдет идентификатор процесса конфигуратора или название конфигурации?
@bolsun Идентификатор процесса будет каждый раз разный от запуска к запуску. Название конфигурации тоже не подойдет, у меня три разных хранилища для трех боевых баз, все называются "БухгалтерияПредприятия", к каждой из них есть еще тестовая база, итого 6 информационных баз с одинаковыми названиями. Может средствами 1script как то можно получить строку соединения?
@demon_infernal я не знаю других способов получить, кроме как из окна О программе, но его не вызвать при открытом окне хранилища. Может можно без счетчика обойтись, в случае неуспешного входа, показать вопрос о сбросе пароля? И еще вопрос. Пароль же всегда одинаковый в разрезе ПутьКХранилищу/Пользователь ? Почему не использовать этот ключ для счетчика?
@demon_infernal последняя версия скрипта не работает. 1. Я писал, что нужно использовать УстановитьЗначение(), вместо ВставитьТекст(), но я ошибся, извиняюсь. Этой функции еще нет в публичном API. Поэтому пока можно использовать ВставитьТекст(). 2. В процедуре ОбработчикВводаЗначения(Значение, Отказ) ошибка, вместо ЗначениеЗаполнено(Пароль) нужно ЗначениеЗаполнено(Значение)
Пользователь прикрепил(а) вложение StgAutoconnect.os
@bolsun Да, заметил, что УстановитьЗначение() не работает, закоментил эту строку. Убрал счетчик попыток, выдаю вопрос о сбросе сохраненного пароля при каждом неудачном входе, попробуйте новую версию скрипта.
Пользователь прикрепил(а) вложение StgAutoconnect.os
Пользователь прикрепил(а) вложение StgAutoconnect.os
@demon_infernal отлично, теперь все работает и без счетчиков :)
bolsun переместил(а) эту карточку из списка Принятые предложения в список Баги новые и на выяснении
bolsun переместил(а) эту карточку из списка Баги новые и на выяснении в список Принятые предложения
@bolsun Публикуйте тогда на форуме
@demon_infernal @lankaster спасибо всем, кто участвовал в разработке этого скрипта и API :) скрипт опубликую на форуме
thumbs up 👍
bolsun переместил(а) эту карточку из списка Принятые предложения в список Завершено
@bolsun @demon_infernal Позволил себе расслабиться во время каникул, а по возвращении вижу уже готовый скрипт. Супер!
@bolsun Для полного счастья остаётся добавить форме ввода значения свойство *ВводПароля*, чтобы вводимое значение затиралось звёздочками :smile:
@lankaster с возвращением :) согласен, звездочки не помешают, добавлю
thumbs up 👍
@bolsun @lankaster Появилась новая проблема. Когда на разных машинах строка соединения разная (например, на одной машине имя сервера "server1c", на другой "sql"), после подключения к хранилищу конфигуратор выдает сообщение "расположение информационной базы изменилось. продолжить подключение? да нет", на что тригерится скрипт, воспринимая это сообщения как сообщение об ошибке входа. Есть какая то возможность ожидать не просто появления окна с заголовком "Конфигуратор", а исключить из списка ожиданий конкретно это окно с предупреждением?
@demon_infernal Насколько я знаю, метод *ЖдатьОкно()* (равно как и прочие методы по получению или ожиданию окна) пока ориентируются только на текст заголовка окна (чего, с очень информативными заголовками *"Конфигуратор"* у значительной части окон, не всегда хватает). Пусть Михаил поправит если я ошибаюсь.
@demon_infernal @lankaster да, пока только по заголовку. Но мысли на эту тему есть. Попробую что-нибудь сделать.
@bolsun Заметил еще кое что. Почему то при использовании скрипта автоподключения к хранилищу не устанавливается заголовок окна конфигуратора. Иногда выдается сообщение о том, что превышено время ожидания, иногда нет, но заголовок окна не устанавливается никогда, у меня, во всяком случае. Может, для скрипта установки заголовка сделать возможность настройки таймаута ожидания окна?
Пользователь прикрепил(а) вложение StgAutoconnect.os https://trello-attachments.s3.amazonaws.com/5aec736d7dec7207a7f7c6df/5c125f8b6af70a8ddca1ff80/024d1f6793d9e4bd8c4dba4e3c4c1747/StgAutoconnect.os
@demon_infernal @lankaster добавил скрытие пароля при ввода при появлении сообщения после ввода пароля, добавлена дополнительная проверка, что окно сообщения содержит текст "Ошибка аутентификации в хранилище конфигурации!..." Необходимо обновить скрипт и ТК.
@demon_infernal проблема с заголовком актуальная? если да, прошу создать карточку с логом
@bolsun да, актуальна. Где искать лог?
@demon_infernal Ctrl+Alt+Shift+L
Такой скрипт можно было бы и самому написать, но я не имею понятия как делать так, чтобы скрипт стартовал не по клавиатурной комбинации, а сразу, при запуске ТК и отрабатывал по какому-нибудь событию, например при открытии указанного окна.