Застрял в цикле при защите паролем папки - PullRequest
0 голосов
/ 07 июля 2019

Я хотел сделать действие папки, которое требует пароль для доступа к содержимому при открытии, и текущий код выглядит следующим образом:

on opening folder
    set login to true
    if login = true then
        tell application "Finder"
            close windows
        end tell
        set passw to display dialog ¬
            "Enter your password:" default answer ¬
            "" buttons {"Cancel", "Let me in!"} ¬
            default button 2 ¬
            giving up after 5 with hidden answer
        set entered to text returned of passw
        if entered = "password" then
            tell application "Finder"
                open folder "Myfolder"
            end tell
        end if
    end if
end opening folder

Однако, когда Myfolder открыт, ему, очевидно, требуется пароль, и даже когда я правильно его ввожу, окно открывается на секунду, а затем закрывается, чтобы потребовать еще один ввод пароля, и это продолжается и продолжается. ,

Полагаю, это потому, что каждый раз, когда Myfolder открывается, скрипт запускается и требует пароль, но как мне обойти это? Я попытался установить login в false после open folder "Myfolder" и end tell, но это не означает, что login устанавливается в true каждый раз, когда запускается скрипт.

Как я могу остановить скрипт, требующий пароль навсегда?

1 Ответ

0 голосов
/ 07 июля 2019

Вы можете попробовать что-то вроде этого:

property passwordWasGiven : false

on opening folder theFolder
    if passwordWasGiven is false then
        tell application "Finder"
            close theFolder
        end tell
        set passw to display dialog ¬
            "Enter your password:" default answer ¬
            "" buttons {"Cancel", "Let me in!"} ¬
            default button 2 ¬
            giving up after 5 with hidden answer
        set entered to text returned of passw
        if entered = "password" then
            set passwordWasGiven to true
            tell application "Finder"
                open folder theFolder
            end tell
        end if
    else
        set passwordWasGiven to false
    end if
end opening folder

Свойства сохраняются при каждом запуске скрипта, поэтому passwordWasGiven становится переключателем того, был ли введен правильный пароль.

Но, пожалуйста, это плохой, плохой способ защитить паролем папку. Люди могут просмотреть содержимое папки на мгновение, прежде чем Finder закроет ее; люди могут легко получить доступ к содержимому из командной строки; люди могут прочитать сценарий, чтобы узнать пароль. Любой, у кого полушарие, может войти. Если вы хотите создать безопасную папку, используйте Дисковую утилиту или diskutil в командной строке и создайте зашифрованный образ диска. Это не сложнее, чем использование папки - вы дважды щелкаете по ней, чтобы открыть ее, так же, как если бы вы работали с папкой, - но пароль надежен (при условии, что вы решите сохранить его в связке ключей), и шифрование является надежным.

...