Падключэнне невялікага кантролера да VPN у NetworkManager
Актывацыя вяртае дэскрыптар, а не гатовую сесію. Трымайце профіль, запыт і актыўнае злучэнне асобна і перабудоўвайце стан пасля перазапуску.
Невялікая праграма, якая падключае існуючы VPN, мае патрэбу ў кантролеры, а не ў новай рэалізацыі VPN. Падтрыманы рухавік павінен займацца ўзгадненнем і трафікам тунеля; ваша праграма павінна выказваць запыт карыстальніка і сумленна тлумачыць вынік. У Linux інтэрфейс NetworkManager D-Bus дае гэтаму кантролеру канкрэтную мадэль, якой можна прытрымлівацца.
Чатыры праверкі не даюць кантролеру зблытаць захаваны профіль, запыт на актывацыю і працоўную сесію.
Праверка першая: якая асоба выбіраецца
Трымайце UUID профілю як пастаянную асобу і развязвайце яго праз менеджар, калі патрэбны шлях да аб'екта. Адлюстравальнае імя можа быць агульным для двух профіляў, а шлях шыны часу выканання не з'яўляецца разумнай карыстальніцкай перавагай для захоўвання. Запішыце выбар у сваёй канфігурацыі, а не ў каментары пра тое, які запіс быў другім у спісе.
Праверце, што вяртае менеджар, перш чым назваць гэта супадзеннем. UUID, які больш не існуе, дае памылку пошуку, а гэта іншы шлях коду, чым профіль, які існуе і адмаўляецца актывавацца.
Праверка другая: што вяртае выклік актывацыі
Дакументаваны выклік актывацыі прымае шлях да аб'екта існуючага злучэння, шлях да прылады і канкрэтны аб'ект. Ён вяртае шлях да актыўнага злучэння, і гэты адказ — дэскрыптар, а не вынік гатоўнасці. Не ўстанаўлівайце сцяг гатоўнасці праграмы з вяртанага значэння; замест гэтага падпішыцеся на стан і прычыну актыўнага злучэння.
Для VPN канкрэтны аб'ект выбірае актыўнае базавае злучэнне. Перадача каранёвага шляху перадае выбар прылады NetworkManager, які выбірае тую, што зараз прадвызначана. Гэта рашэнне кантэксту маршрутызацыі, а не поле пароля, і яно змяняе, на якую прыладу накладзены тунель.
Не бярыце агульны прыклад дадання і актывацыі і не чакайце, што ён створыць профіль VPN. Дакументаваны памочнік выключае злучэнні VPN, таму падрыхтоўка або імпарт профілю — асобны крок з разглядам. Гэта важна, бо падрыхтоўка патрабуе дазволу і разгляду, якіх кнопка злучэння не дае. Разглядайце імпарт як адміністрацыйнае дзеянне з уласным радком журнала і ўласным зацвярджальнікам.
Праверка трэцяя: як прадстаўлены стан
Актыўнае злучэнне праходзіць праз стан актывацыі, актыўны стан, дэактывацыю і адключаны стан, і поле прычыны кажа, чаму. Згортванне ўсяго гэтага ў лагічнае значэнне з назвай loggedIn губляе інфармацыю, патрэбную карыстальніку і тую, якую запытае падтрымка. Паказвайце хаця б, ці злучэнне чакае, усталявана ці знікла, і захоўвайце радок прычыны для выпадку памылкі.
Звязвайце асінхронныя адказы з запытам, які іх стварыў. Познае завяршэнне старой спробы не павінна перазапісваць навейшае дзеянне карыстальніка, а паўторнае націсканне Connect трэба або ігнараваць, або разглядаць як скасаванне і паўтор з бачнай палітыкай.
Праверка чацвёртая: што адбываецца пасля перазапуску
Калі менеджар перазапускаецца або ваш кантролер паўторна падключаецца да шыны, перабудуйце назіраны стан ад уладальніка. Не працягвайце паказваць кэшаваную сесію як актыўную толькі таму, што стары шлях да аб'екта яшчэ ў памяці. Сігналы змены стану існуюць менавіта для таго, каб кантролер мог перасінхранізавацца замест здагадак.
Выберыце, што значыць закрыццё кантролера. Пакінуць існуючае злучэнне, якое належыць машыне, уключаным можа быць правільна, і разабраць наўмысна кароткачасовую сесію таксама можа быць правільна. Пакінуць існуючае злучэнне, якое належыць машыне, уключаным можа быць правільна; разабраць наўмысна кароткачасовую сесію таксама можа быць правільна. Запішыце гэты дагавор уласнасці ў інтэрфейс, а не мяркуйце, што выхад працэсу выконвае сеткавае дзеянне. Карыстальнікі не павінны здагадвацца, ці закрое закрыццё акна іх тунель. Змясціце адказ у тэкст інтэрфейсу, а не толькі ў каментар кода.
Трымайце паўнамоцтвы і сакрэты ў іх уладальнікаў
Дазволы вяртаюцца як так, auth або не, і інтэрфейс павінен адлюстроўваць розніцу паміж дазволеным, дазволеным пасля аўтэнтыфікацыі і адмоўленым. Запуск кантролера ад імя root не рэалізуе палітыку дазволаў; ён прыбірае пытанне.
Уліковыя дадзеныя належаць падтрыманаму агенту сакрэтаў або інтэграцыі кліента для настроенага метаду аўтэнтыфікацыі. Пароль у крынічным кодзе, у аргуменце або ў журнале — гэта знаходка, а лакальная адміністрацыйная аўтарызацыя не тое ж падзея, што аўтэнтыфікацыя шлюза.
Нарэшце, паведамляйце стан злучэння асобна ад задачы, якую хоча выканаць карыстальнік. Тунель можа быць актыўным, пакуль прыватнае імя або праграма застаюцца недаступнымі, і гэтая другая няўдача заслугоўвае ўласнага паведамлення і ўласнага статусу. Кантролер, які дакладна кажа, які ўзровень адмовіў, карыснейшы за той, што кажа, што VPN не працуе.