OpenVPN Connect ו-Tasker: מזהה הפרופיל, לא השם
OpenVPN Connect ב-Android 3.3.2 ואילך מקבל מזהה פרופיל, ולא שם תצוגה. בנו מחדש את ה-intent של Tasker ותלו את הצעד הבא במצב החיבור בפועל.
אוטומציה שהתחברה באמינות במשך חודשים מפסיקה לעבוד לאחר עדכון של הלקוח, בעוד אותו פרופיל עדיין מתחבר ידנית. התבנית הזו מצביעה על חוזה השליטה ולא על שרת ה-VPN. מישהו שינה איזו פעולה האפליקציה מקבלת, או איזה מזהה היא מצפה לו, והמשימה עדיין שולחת את הישן. בנייה מחדש של הקישור אורכת פחות זמן מאשר בדיקה חוזרת של השרת.
החוזה שייך לאפליקציה אחת ולטווח גרסאות אחד
OpenVPN Connect ו-OpenVPN for Android הן אפליקציות שונות, ו-intent שמציין חבילה אחת לא עושה דבר בשנייה. לפני שנוגעים במשימה, ודאו איזה לקוח מותקן ואיזו גרסה יצרה את ההתנהגות שאיתה אתם משווים. עבור Connect ב-Android 3.3.2 ואילך,האינטגרציה המתועדת של Tasker מצפה למזהה פרופיל. הוראות ישנות יותר שמקדימות AS או PC לשם תצוגה מתארות חוזה קודם, והעתקתן למשימה נוכחית היא הסיבה הרגילה לכך שדבר לא קורה.
גבול הגרסה הזה מסביר את רוב הדיווחים ש״זה עבד פעם״. האפליקציה לא שברה את התכונה; היא שינתה את מה שהתכונה מקבלת. התייחסו לטווח הגרסאות כחלק מהחוזה שמולכו אתם כותבים.
מאיפה מגיע המזהה
פתחו את הפרופיל הרצוי בתוך Connect והעתיקו את מזהה הפרופיל מפרטי הפרופיל עצמו. השתמשו בערך הזה ולא בשם שאתם מזהים מהרשימה, כי השם הוא תווית והמזהה הוא מה שהאפליקציה מתאימה מולו. שדות החיבור בפעולת Send Intent ב-Tasker נראים כמו הבלוק שלמטה, כשרק המזהה מוחלף. שמרו גם על עקביות של מופע האפליקציה של הפרופיל האישי או פרופיל העבודה.
Action: net.openvpn.openvpn.CONNECT
Extra: net.openvpn.openvpn.AUTOSTART_PROFILE_ID:'PROFILE_ID'
Extra: net.openvpn.openvpn.AUTOCONNECT:true
Package: net.openvpn.openvpn
Class: net.openvpn.unified.MainActivity
Target: Activity
עותק בפרופיל העבודה עם אותו שם חבילה ופרופיל שמור אחר יקבל את ה-intent ולא ימצא פרופיל תואם, מה שנראה כמו משימה שבורה ולא כמו טעות בהיקף. אם הפרופיל מיובא מחדש או מוחלף, התייחסו למזהה כחשוד ובדקו אותו שוב. ייבוא מחדש יוצר לעתים קרובות רשומת פרופיל חדשה גם כששם התצוגה לא משתנה. בדקו את המזהה לפני שאתם משנים משהו אחר.
השאירו שדות לא קשורים ריקים כמתועד. שדות קטגוריה, סוג MIME ונתונים שהמדריך לא מבקש יכולים לשנות כיצד Android פותר את ה-intent, ו-intent שנפתר אחרת עלול להפעיל את האפליקציה בלי להתחיל את הפרופיל שלכם.
מה הפעולה עושה ומה היא משאירה לכם
שליחת intent החיבור מבקשת מהאפליקציה להתחיל פרופיל. הוא לא עוקף את ההרשאה שהפרופיל הזה דורש. Connect עשוי עדיין להציג בקשה, ולכן המקרה האוטונומי המתועד מניח שאין הרשאה נוספת ואין פרטי התחברות שמורים. הפיתוי הוא להסיר את הגבול הזה על ידי הטמעת סיסמאות או סודות של המפתח הפרטי בייצוא Tasker משותף.
אל תעשו זאת. ייצוא של משימה הוא קובץ טקסט שאנשים מעתיקים לשרשורי צ׳אט, והסודות שמונחים בו נחשפים ברגע שהוא משותף. השתמשו בפרטי ההתחברות השמורים של האפליקציה עצמה אם הפרופיל זקוק להם, והניחו לבקשות MFA להישאר בקשות. כל דבר שנמנע מהבקשה על ידי שמירת התשובה העביר את הסוד במקום לפתור את הבעיה.
לצד הניתוק יש פעולה מתועדת משלו, והיא אינה תחבולה שנעשית ללקוח:
Action: net.openvpn.openvpn.DISCONNECT
Extra: net.openvpn.openvpn.STOP:true
Package: net.openvpn.openvpn
Class: net.openvpn.unified.MainActivity
Target: Activity
התחברות לפרופיל שאינו קיים במכוון כדי לכפות ניתוק היא סוג העקיפה שמופיע בשרשורים ישנים ואז נכשל בשקט לאחר עדכון. השתמשו בפעולה המפורשת.
בדקו את המצב לפני שהצעד הבא רץ
הפעלה מוצלחת של intent מוכיחה שהבקשה נמסרה, לא שקיימת מנהרה. אם המשימה פותחת לאחר מכן אפליקציה פנימית,אותו צעד זקוק לתנאי מוכנות עם פסק זמן מוגבל. פעולה מיידית לאחר השליחה תיתקל בסופו של דבר בבקשה.
$ adb shell cmd package resolve-activity --brief net.openvpn.openvpn
net.openvpn.openvpn/net.openvpn.unified.MainActivity
$ adb shell dumpsys activity activities | grep -i openvpn
שאילתת resolve מאשרת שהחבילה והפעילות שאתם מכוונים אליהן קיימות במכשיר הזה, מה ששולל שגיאת הקלדה בשדה המחלקה. פלט הפעילות מראה מה באמת נמצא בחזית לאחר שהמשימה שלכם רצה, וזו הדרך הזולה ביותר לראות אם האפליקציה פתחה בקשה במקום להתחבר. הריצו את שניהם לאחר משימה שנכשלה במקום לנחש איזה שדה שגוי. אי-התאמה בשם המחלקה מייצרת שגיאה מיידית, בעוד שפרופיל חסר אינו מייצר שום שגיאה גלויה.
החליטו על הבעלות של הניתוק לפני שאתם מוציאים את המשימה. קיצור דרך שמפיל מנהרה שמשימת עבודה אחרת תלויה בה ייצור קריאת תמיכה שלא דומה כלל לסיבתה. החזקת שתי אוטומציות ששתיהן שולטות באותו לקוח יוצרת מרוץ שאינכם יכולים לנפות מהלוגים, אז מחקו את הפעולה המיושנת ברגע שהחדשה עובדת.