Повезивање малог контролера са VPN-ом у NetworkManager-у
Активација враћа ручку, а не спремну сесију. Држите профил, захтев и активну везу одвојено и поново изградите стање после рестарта.
Мали програм који повезује постојећи VPN треба контролер, а не нову имплементацију VPN-а. Подржани мотор треба да обави преговарање и саобраћај тунела; ваш програм треба да изрази захтев корисника и искрено објасни резултат. На Linux-у интерфејс NetworkManager D-Bus даје том контролеру конкретан модел који може да следи.
Четири провере спречавају контролер да помеша сачувани профил, захтев за активацију и радну сесију.
Прва провера: који се идентитет бира
Држите UUID профила као трајни идентитет и разрешите га преко менаџера када вам треба путања објекта. Приказно име могу да деле два профила, а путања сабирнице у време извршавања није разумна корисничка поставка за чување. Запишите избор у сопствену конфигурацију, а не у коментар о томе који је унос био други на листи.
Проверите шта менаџер враћа пре него што то назовете подударањем. UUID који више не постоји даје грешку претраге, а то је друга путања кода од профила који постоји и одбија активацију.
Друга провера: шта враћа позив за активацију
Документовани позив за активацију прима путању објекта постојеће везе, путању уређаја и конкретан објекат. Враћа путању активне везе, а тај одговор је ручка, а не резултат спремности. Не постављајте заставицу спремности апликације из враћене вредности; уместо тога претплатите се на стање и разлог активне везе.
За VPN конкретан објекат бира активну основну везу. Прослеђивање коренске путање препушта избор уређаја NetworkManager-у, који бира онај који је тренутно задати. То је одлука о контексту усмеравања, а не поље за лозинку, и мења на ком је уређају тунел наслоњен.
Не преузимајте генерички пример додавања и активације и не очекујте да ће створити VPN профил. Документовани помоћник искључује VPN везе, па је припрема или увоз профила одвојен, прегледан корак. То је важно јер припрема тражи овлашћење и преглед које дугме за повезивање не пружа. Третирајте увоз као административну радњу са сопственим редом у записнику и сопственим одобраваоцем.
Трећа провера: како је стање представљено
Активна веза пролази кроз активирање, активно, деактивирање и деактивирано, а поље разлога каже зашто. Сабијање свега тога у логичку вредност названу loggedIn губи информације које корисник треба и које ће подршка тражити. Прикажите барем да ли је веза на чекању, успостављена или нестала, и сачувајте низ разлога за случај неуспеха.
Повежите асинхроне одговоре са захтевом који их је произвео. Касно довршавање старијег покушаја не сме да препише новију корисничку радњу, а поновни притисак на Connect треба или игнорисати или третирати као отказивање и поновни покушај са видљивом политиком.
Четврта провера: шта се дешава после рестарта
Када се менаџер рестартује или се ваш контролер поново повеже са сабирницом, поново изградите посматрано стање од власника. Не настављајте да приказујете кеширану сесију као активну зато што је стара путања објекта још у меморији. Сигнали промене стања постоје управо зато да се контролер може ресинхронизовати уместо да нагађа.
Изаберите шта значи затварање контролера. Остављање постојеће везе којом управља машина укљученом може бити исправно, а рушење намерно краткотрајне сесије такође може бити исправно. Остављање постојеће везе којом управља машина укљученом може бити исправно; рушење намерно краткотрајне сесије такође може бити исправно. Запишите тај уговор о власништву у интерфејс, уместо да претпостављате да излазак процеса обавља мрежну радњу. Корисници не би требало да нагађају да ли ће затварање прозора прекинути њихов тунел. Ставите одговор у текст интерфејса, не само у коментар кода.
Задржите овлашћења и тајне код њихових власника
Дозволе се враћају као да, auth или не, а интерфејс треба да одрази разлику између дозвољено, дозвољено после аутентикације и одбијено. Покретање контролера као root не спроводи политику дозвола; оно уклања питање.
Акредитиви припадају подржаном агенту за тајне или клијентској интеграцији за конфигурисани метод аутентикације. Лозинка у изворном коду, у аргументу или у записнику је налаз, а локално административно овлашћење није исти догађај као аутентикација на мрежном пролазу.
Коначно, извештавајте о стању везе одвојено од задатка који корисник жели да обави. Тунел може бити активан док приватно име или апликација остају недоступни, а тај други неуспех заслужује сопствену поруку и сопствени статус. Контролер који тачно каже који је слој отказао кориснији је од онога који каже да је VPN пао.