diff --git a/controller/env/a_env-packr.go b/controller/env/a_env-packr.go index a79b8466a..e812dc4d0 100644 --- a/controller/env/a_env-packr.go +++ b/controller/env/a_env-packr.go @@ -7,82 +7,82 @@ import "github.com/gobuffalo/packr" // You can use the "packr clean" command to clean up this, // and any other packr generated files. func init() { - packr.PackJSONBytes("../embedded", "README.md", "\"H4sIAAAAAAAA/3RTPXPUPBDu9SueuSp5J2f3Kd4iQwEMQ4qEoV5La1ucLB2rVZLLr2ckO3cMhMaFpN3n04+zzzhK+sFWUTJnHOkguJpVj/m27yevcxk6m5Z+SkMZRwqpP5I9yDU0gZeBHXRmfH64/2qynXkhjD4wnr3OPrY74VyC+jhh8JHEc+7wPcmhntRn9VHmNpYh/LN44WzqpI9ZKQRSnyLS2LY1gkV98HqCTctC0XXG7DElTKzYF/yb9fo15nFmcFQvfAN2E/dNiWMH54WtJjkhqxSrRRg+43zvo6bGw6aokkJgMU3WCcMJjkcqQTtjzGMCx1zHdSZFTOAXFUJWPmaQMCJz3TgmAdV1uSwsq0yfkVMRW2Ec35jdXfHBVcMIdyvaVSUxkzg80+l6B8pwyZaFozaam1n2IOfz5qPxuSbtOrTwF6aYV4p1gIrOqZGgeNoi2Xa945FZSlZI+R3sj2hAo7KAgrL4OPXkqoxeeElPVU+D6Jpd7+65QaQnP5EyNuP7V6/+XFpJSVFx+IVtUb415v/aszVp7F+N+aTIcyrBIVtaITZz65xwfXmR22H3374Nd1PabRY8+xAwsJk4spCu7l1K+/Dx/tuXDxgYdmZ7eKvJhnJFE9UmX8QZ4WoPR9ciyddbGBQCP3lSzuc+ZIySFszU3NL09k+s3Es0fznW/QoAAP//sGY+ydUDAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/definitions.all.json", "\"H4sIAAAAAAAA/+xXTW/bPAy+91cIenPMZ9+6GHLrccCADNix6ADFoh0VsuRJNNasyH8fpDW1ZDuNUzjdYTkUhUmRfEg+lJjnK0LoSHC6JHSDWC5ns18CxQR4DlMFmOlKcbOdCj2z6QYKZmccMqEECq3slEk5fbRa0bHzE2jokjjXhFBkef3lvrcluGh6/QgpekMvZ5x7Uya/Gl2CQQHOLmPSwuuhkiGCUdGJvWdC6Pfp82KczHejSOycq+0qo0tyHwhJdCTCpiopaaTcjftZWjRC5XTc1BdCfQGV44YuyaKtZU+v2uv5zad3hVZVsQbzV0KvtZbAVKNkwdfDVVP65/9LAE+Sia96myl1z5qcIXGnHi5cunCJ0FSrTOQTzpBd7p1/kStHjEcGXEto1zv2X/i6zUImDUHHyw3XsLywtrfxB7NWsQK6bs9Gx6JyXdfSsEzJbctzj0FoUePAIJwOwC+7RxPLtCkYOk1VCd6d8KJnvAHTHRSWRXNqj0/xfaYu94PAjGHbVfaZd/748No6Qw4Zq6Qr630dUyAUjRtzP4TxwAlOO2eohtCjEjGig4U4O9IDnBi4YD7MW1C+eWJ8fN0aM9AJsWTW/tSm1zUSEjfpJO5iPu/0fqbp6QeismDe8wTcnOT9TCn2A2GhYApFOkx8UFURW95JucpCwzu/VdUC52jvJ0KGYAqhGGozSbXFEGB7M4sWt32LhELIG9uNK5EoPMp5LGdPL/LbJPk/qReD8dtB4rVvdyyV0kAKHFTaRapBKr6f8cDUwI9KGOChLGNCRpJ2I67c3+53AAAA//91BMQbHBMAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/association.patch.json", "\"H4sIAAAAAAAA/0yOsU4EMQxE+3yFFSgh6fcPqKBHFCZxWJ+WJNjeYjndv6PkhO6KFJkZz7yzA/CPnP0CfjXrS4y/bPxM+YtCJSttr1mOwC1qWukbNaJqS4zGrYaOltZw0lb902iyo9Ooap8nSnbVMGceYdzepHUSY1K/gMlO0xf62VloILw7AADPWb0D+Jh2vz863wL/n8EvVMZqpsJ1bmnAbZtcD/FOjSiCx2t5uQ4AXNx4F/cXAAD//6bt+FMHAQAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/association.post.json", "\"H4sIAAAAAAAA/0yOsVLEMAxEe3+FxlCC3ecPqKBnKESscLoJlpGUItzcvzP2DXMpXHh3tfsuASA+cokTxJN7m3L+ZednKl+UKvkiWy26J5Zs84m+0TKayczoLDU1MU9nkxqfepHvjXqTfJ5p9puGpXDP4vqm0kidyeIErhsNX+lnY6VO8B4AACIXiwHgY9jteHS5B/4/HV9p6auFFq5jyxKu6+B6yAc1oyrur8vLbQDgGvq7hr8AAAD//+MJlewGAQAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/association.put.json", "\"H4sIAAAAAAAA/0yOsU4EMQxE+3yFFSgh6fcPqKBHFGbjcD4tSbCdYjndv6PkhG6LFJkZz7yLA/CPnPwC/mTWlhh/2fiZ0heFQpZrL0n2wDXqeqJv1IiqdWU0riW0buGstfin0WN7o1FUP8+02k3DlHhEcXuT2kiMSf0CJp2mL/TTWWgAvDsAAM9JvQP4mHY7Hl3ugf/PoBfKYzVR5jK3NOC2Ta6HeFAjiuD+ml9uAwBXN97V/QUAAP//YSC09AUBAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/authenticator-self.patch.json", "\"H4sIAAAAAAAA/8ySMU/DMBCF9/yKk2Fskz1/gu6owxFfGlfuOZzPqkrV/44c2mAyAAIGlkR6fn7v7pPPFYC5d9a0YAbVsW2aF6duTXZHNZP2IbGVU+1CE7uBDhgbTDoQq+tQg6wj+b4eUbuh3sfAZpUDkU8PvWnhsQIAOE9fAKOnkXJReNpTp5N10tFapy4w+o2EkUQdRdOCSqLZM5Ynt0QA05Hohg4fxKIqqjjemfnosnq/qriLy3uWekxes1xYMyOhvFE2OJ6mjTV6Py191xRqk2PXnLwvWqvyfw3+EyxCz8kJ2Rn2G5QkQqwbjPEYxN4G2X5JM0USxgMtsXx/+1vCkkDBnek4T/bjnvGa8EnPksKvu/7ZM6oAttXlNQAA//9IbSvwwgMAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/authenticator-self.put.json", "\"H4sIAAAAAAAA/8RSQW7CMBC85xUrt0dI7vlEuVcc3HgDRmbtrtdCFPH3yhZy3bQHVAn1kkizszM7k1w6APVsjRpB7UXCOAwfVuwazQ57Qpl9IsPn3vohTns86jjoJHsksZMWz+uIbu5Dkv4QPalVltN0fpnVCK8dAMClPAGUnANmG/92wEkKteDaGCvWk3Yb9gFZLEY1gnDCymF8T5bRVNWCTsiywaO6IdtKD63Q5edCCzaXRWFLO1VH19XXquhdXO4ZnHVykuGGmgtlzAVkgqUSLvbaudLR09CgQ5ZdU3Kuce3a9034gS2miEz6iKpJS3ja6BhPnk0LT4kZSero7uKrx6LB+4uqCr9+nfbeP1uERazvFsvsD7L5t/+sA9h2188AAAD//ydDzrAQBAAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/authenticator.patch.json", "\"H4sIAAAAAAAA/8yRwU7EIBCG732KCXrcLfe+hHs3HsYybdlQIMwQUzf77gaiFTcejImJF0j++ecb/uHSAah7a9QAahGJg9avVuyRzEy9J5lC9iZtvQ2ax4VWZI1ZFvJiR5SQ+ogyLv2Zg1eHwkK/PUxqgMcOAOBSTwAlW6QyIzyfaZRqrToaY8UGj+6UQqQkllgNICnT7olt5YMIoEZKcqL1i9iMYknWz2ovXQ+frYIz3/YZmjA7KXJjLetJVBIVg/X1tdyjczX0nW5UXbBHn51rpnbt/Q7+07VkpuRxpdt8P4+xE77dXUTml5DM7/k74X/9TQfw1F3fAgAA//+PKpHSEgMAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/authenticator.post.json", "\"H4sIAAAAAAAA/9ySwWrDMAxA7/kK4fXYJvf8wU7rvfTgRmqjktieLTOy0n8fDsXz1sCghzF2SczDepIsXSoAtWJULahexLVN887CG8IT1YbkaKNBP9Vsm9D1NOrQ6Cg9GeFOi/W1s0Hqc7BGrZNKm+nlqFrYVQAAl/kLoGRylFLYw5k6ma/OXCOysDV62HrryAtTUC2Ij5TveHqN7AmzdaYjSW8xmwBUR162NJaIMRUq0zOqG9xnrSsTXu7EJftsYFcwABXEszmpAu7XZRSZON5HpUK/xOTzdaGd5ULuUl+X2/4WvfKUpqOQjmzmlw+1HoZ5gE9NQRvGZbfoU3jcmqI3Jg5DIa/K/y3Vry5ODOSNHqlkTofwZj3+/W2KDg8/b1Pu8eHRZcOiP7/Xw/5s+HcrXaWhXD8CAAD//53xhi5qBQAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/authenticator.put.json", "\"H4sIAAAAAAAA/8yRwW7rIBBF9/6KEe8tE7P3TzT7KgtqJjYRBjoMqlwr/16BIorcLqJKlbqxpes7B+Z46wDEf6PFAGJmDoOU74bNEfWEvUO++OQ0rb3xMo4zLipKlXhGx2ZU7KkPiftr9E4cMkm59ekiBnjuAAC28gQQvAbMJ/iXK45cqiVXWhs23il7Ih+Q2GAUAzAlrB3C12QIdaWWdETiEy7inpxrPbSg7etAGzY3i0zGTaJ+uh0+R1lNcT+n8aKS5Rw31eySMAvIBePKcrFX1hZH/2STyow9umRtc2rXvu/gX7SYIpJTC4pm26BifPOkH1dbKTtHj6uohG/91xv9mL/f6Y/83w7g3N0+AgAA///AJmJBgwMAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/ca.patch.json", "\"H4sIAAAAAAAA/7SRMU/DMBCF9/yKk2FM4z1bhToXwYgYLvElceWcI/s8BNT/jpxEECEWKnXwcM963zv7fRYA6tEaVYMaRKZa6w8r9kCmp4pJOp/YhLmyXsd2oBGjbjFWE0o7VJfoWZWZIPNEGeGbC7WyamiMFesZ3XPwEwWxFFUNEhIt99NezXsAKMaRvqe8WaAucw11lhdarNC5JflB71SdnQdOzqnFey1XoI3HJP4JTxy8cyOxnBgbR2afsm3/ts0AqvHeEa6P26QfNsD7r4yzyL0jjkmGO3ANsViZX7zb1QDLh2NyomrI5vL/fWAIOJ+7VwmW+z+KEezjbU1n5x5Y5HMtvgIAAP//GHdsdsoCAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/ca.post.json", "\"H4sIAAAAAAAA/7SSQU/jMBCF7/kVI+8e26S74oByq1BvSK3giDhM40niyhkHeyIRqv53ZENpWk4gOOSQZ7/vzeh5nwGov0arElQr0pdF8WLEzEk3lDNJ7QbWfsyNK0LVUoehqDDkvQuS74JjNYsAGXuKBLfdUSVvGmptxDhGu/GuJy+GgipB/EDp3NPTYDzF5IcMAEAxdpS8AKoiLxvqVAbwmK73U8h+Yjj+xT081XEMTbXhFB5ytDYN+qeYqEVyJtvhInCCO24VxBtu3icDUJ3hW+JGWlXCv5OKzx/q/8XV9eIMb8JyEHeDK/bO2o5YVoxbm9b/FLh1zhLyKVFTjYMVVUKNNtAFeS3yO+DlIO2P0TSxGBnvnJ1UeGbiwdrZ17tE73Fc1/eppXmEnDcr2ITvvZLonAKz+B2y1wAAAP//IukB9TQDAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/ca.put.json", "\"H4sIAAAAAAAA/6RSsW7rMAzc/RWC3hsTe/cWFJlTtGPRgYnohAFNuRI1uEH+vZBSo06BtmgzCJBI3fHupFNljP1PzrbGHlSHtmleSWmJbo+1oHY+iQtjTb6JuwP2EJsdxHpIWh+jF7vIeB0HzAR+e8SdXmrgHCl5Ab4PfsCghNG2RkPC0g/4kihgHvxUGWOMFeixYDMj7OO0p7hK6u9gLcEz9yi6Ftgyuo8LG9Vv+6ukh6lYGfNcFAxzXaeZhumUkwnYZWcOO5LiJ9bAXLz/a2bVpiAL7Pyj7tmAKbqt94wg75JNmQiJ1bamA474ifkLw7cTz5O6mc2hKOn44HmW8RVIEvPi92FDCDBuukcNJPtlJrmOvnyfPz1jQV64qrzO1VsAAAD//5gA2H8iAwAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/config-type.patch.json", "\"H4sIAAAAAAAA/5SPsXLEIAxEe3+FhqS0Te+vSH+TghjZ1g0HBERxufG/Z4Q9Oa5MQcFK2n376ADUO1k1gdqY46T1DzENaFccPfISirfpPlLQed7wZrKeg19oHfgecYyG52285uBVL04iilX4uuLMh2asJabgjftIIWJiwqwm4FSwzhN+F0ooCJcO4LOKsV0VSADlzQ3/foKdcJEwiwv5GpFH41zFedONquVy8MU5VW/3/jA8GrWWJ//l/MNLk1N5+pywVbW4mOJYTSDzlxg2a25DnquPvf9/GbFry3Ty9t8AAAD//y7GrWTJAQAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/config-type.post.json", "\"H4sIAAAAAAAA/5SPvXLDIBCEez3FDUkpiV5Pkd7jgoiTfB4MBI7C0ejdM6efMS5TUNze8e3u0gCoT7JqAHVjjoPWv8TUoZ2x98hTKN6mZ09B5/GGD5P1GPxEc8fPiH0Mmft7Dl61AhJNSOH7jiPvmrGWmII37iuFiIkJsxqAU8Ftn/CnUEJJcGkAAJQ3D1QNwHXbx/rXUl2ckxRIOImvxYn85pZ749yW7ENXqj7ZAGu7s/ZaNe1ocTlmeOtzKL44p47xeurib4pjNYDs32zYzLk2eZ0ua/v/HoLrXiHWRt76FwAA//9p/q+szgEAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/config-type.put.json", "\"H4sIAAAAAAAA/5SPvXLDIBCEez3FDUkpiV5Pkd7jgoiTfB4MBI7C0ejdM6efMS5TUNze8e3u0gCoT7JqAHVjjoPWv8TUoZ2x98hTKN6mZ09B5/GGD5P1GPxEc8fPiH0s3N9z8KoVjkgCCt93HHnXjLXEFLxxXylETEyY1QCcCm77hD+FEkqASwMAoLx5oGoArts+1r+W6uKcJH/CSXwtTuQ3t9wb57ZkH7pS9ckGWNudtbeqaUeLyzHDW59D8cU5dYzXUxd/UxyrAWT/ZsNmzrXJ63RZ2//3EFz3CrE28ta/AAAA//8hRJxWzQEAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/config.patch.json", "\"H4sIAAAAAAAA/6yQsW7EIAyG9zwFoh0vsOcpulcd3GASnzigYIZrlXevTKqKoUulGxj4sb/vF1+TUvqZnF6U3pnzYu0nMc3oNjQR2acWXbkbSrauO96g2jVFT5vJwOturjVFfREI3zMKJb1fceUzA+eIKUUILyVlLExY9aK4NOzvBT8aFRT766TUWw/zOCr9lNIRbvh7k8YFvcgceopdUQ2E0Os82SG1sjnHFoLuu8flBDpgGIEOPbTAEv2M/Mty/sks1D9kDFt9oExwo2WSc3wHAAD//2OzvNnKAQAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/config.post.json", "\"H4sIAAAAAAAA/6yQsW4DIRBE+/uKFUmZg/6+In2UYnMs57UwEFgKx/K/R+A7idaSCyQYmDfD3iYA9c5WLaBOImkx5o+FZ7Ib6UDiYg02XzVHU9YTXbCYNQbHm06xiD6XGNRHY8g1UYPEnzOt8tDQWhaOAf1njomyMBW1gORK/T7Tb+VMLfxrAgBQAS/UvQdx31sUVBPAd/elkXYbnMep/SmTa30sOQ69RdHofW/8ZgbVdGe33cfkF7F684FlyWH10qT9yVMBj+HPxzyGzriVF+Y03Byq93vK1Nb9PwAA///FKGHWLgIAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/config.put.json", "\"H4sIAAAAAAAA/6yQsW4DIRBEe75iRVLmoL+vSB+l2BzLeS0MBJbCsfzvEdhWaCO5oGCYmbfLRQHoV3Z6BX0Qyau1Pyy8kNvJRBKfWnTlbDjZuh3ohNVuKXreTW5ijjVF/dYr5Jypd6SvI21y09A5Fk4Rw3tJmYowVb2ClEbjvdB340Kd/aEAAHTEE40sgHYoqBXA5/DmueEyuR+3vkYh32dw5DkOcjUYwpjyxU6qHckRu860qcuRxxakS3fLvwC3P1oeO/xxBPf6RE6vW2IL4U5R/Vx/AwAA///Ef4pl1QEAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router-policy.patch.json", "\"H4sIAAAAAAAA/7yQsU7EMAyG9z5FFBjbZu9LgI4RMYTGbX1Kk+A4Qzn13ZFz0qlIMIAQQ4b8tv/vty+NUvoenR6UXpjTYMw7MnbgZugD8BRLcLT1GE0eF1htNlLqKBYG6lL0OG59sjwu/TnHoFsx5C2BOMbXM4x81axzyBiD9Y8UExAjZD0opgK1TvBWkECSPDdKvVQxHVslq1I62BVuP0lPMAnMwYShInJvva9x7sxBNTLZheK9rrN7ezXMsNrAOB5NHUy2eNaDkv7256yb6SeU3O5UT3eK/rDUXxAtkd0epicmDPMXa6KDwMjb/5PZzt8AL/svcGJ3pDTy9o8AAAD//6YgUXDKAgAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router-policy.post.json", "\"H4sIAAAAAAAA/7yQsW70IAzH9zyFxfeNSdjzEq2uY9WBBifnEwFqzJBGefeKnK7ihg6tqg4M+A+/n+2tAVD/yaoB1FkkDlq/k1CHdsbeo0whe8trT0Gn8YyLSbpEHYcsyF0Mjsa1jyFJf0nBq7bwZI1YgOH1gqNca8ZaEgreuEcOEVkIkxpAOOORM75lYiyNPDcAAMqbBVUD8HLksf61VS9utzIH41S8Fifyhy31xrmjs3+6quobG2Bvr6yEi/FCY82zOJnsRA3gs3Pt9zWf0DtVWeDp2N8puGqe3zAaZrM+TE/C5OeuQO7dZNELyfr3ZjHzF8Jt/4Gu4GpLU87+EQAA//9lljpbzwIAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router-policy.put.json", "\"H4sIAAAAAAAA/7yQsW70IAzH9zyFxfeNSdjzEq2uY9WBBifnEwFqzJBGefeKnK7ihg6tqg4M+A+/n+2tAVD/yaoB1FkkDlq/k1CHdsbeo0whe8trT0Gn8YyLSbpEHYcsyF0Mjsa1j1n6SwpetQUna8TCC68XHOVaM9aSUPDGPXKIyEKY1ADCGY+c8S0TY+njuQEAUN4sqBqAlyOP9a+tenG7lTEYp+K1OJE/bKk3zh2d/dNVVd/YAHt7ZSVcjBcaa57FyWQnagCfnWu/r/mE3qnK/k7H+k7BVfP8htEwm/VhehImP3cFcu8mi15I1r83i5m/EG77D3QFV1uacvaPAAAA//8Vnnc0zgIAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router.patch.json", "\"H4sIAAAAAAAA/5SPsU7EMAyG9z6FFRjbZu/GE4DEiBhyjdv6lEuK4wzl1HdHzkmoSDdwQ4b8jr/vz7UBMM/kzQBmEVkHa79JqEM/Yx9RplSi562nZPO44MVlq6OOUxHk3K9OxqU/5xRNqyjZVlRWOp1xlFvmvCehFF1447QiC2E2AwgXrHPGr0KM2uGjAfis4Xp8qi0BTHQX/L1pb8ZJZR4nilWRexdCrfNkD6nVzS6WEEzd3dsbkFPAFxGmUxHMBg5sj5MrQTTTvfaPE/4ldcxue53ehSnOd+zi5mzuKAe47u3jf1Tc0dLo2X8CAAD//330Q3/hAQAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router.post.json", "\"H4sIAAAAAAAA/5SPsW7DIBCGdz/FiXZ0zO6tT9BKHasOJJydiwjQ4xhcy+9enaNIROrQDgz8P3zf3doBmGfyZgRzFsmjtd8kdEA/4xBRplSj52WgZMvpjFdXrFYHTlWQy5BTkeFSUjS9kmTJqKh0vOBJbpnznoRSdOGNU0YWwmJGEK6494xflRh1hI8OAMBEd0XTAXzufW5/rc2L+003YJzU63GiuNvK4ELYJ3uyTWrvbICtv7E4BXwRYTpWwWKgwXqcXA2iWawh9A86+JPPMbvldXoXpjgflPJoFzcX84tyhHXr/7+e4lpLp2f7CQAA//+U7xth5gEAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router.put.json", "\"H4sIAAAAAAAA/5SPvU7sMBBG+zzFyPeWSdyn4wlAokQU3vUkOyuvHcbjIkR5dzQGJK9EAYULz8858+0dgPlP3kxgLiLrZO07CQ3oFxwjypxK9LyNlGw+X/DmstXWwKkIch7XIuM1p2h6Bcm2opLS6Ypn+aw570koRReeOK3IQpjNBMIFa5/xrRCjXvDSAQCY6G5Yd5Xolmw6gNc6u7aEvZn+/mkYxllv8DhTrOY8uhDqlf9sU7V1s64dXzZOAR9EmE5FMBtosB5nV4JoLZYQ+jsd/MrnmN32OD8LU1wGpdzba9YflBPsR//3eIprLZ2+4yMAAP//SCylpfEBAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/enroll-er.post.json", "\"H4sIAAAAAAAA/6yOMU/DQAyF9/sVlsXYJhSJJWtXBnbEEHKPxFV6d9gOolT97yihQJEYGW64z/b33jEQ8ZVEbogH99LU9bu4rBF7VAn+nKcU9VBJrq0bsG+tRtI8jmtoVbJ5tbOceDVr/FAwe/LTDp1/sjZGccmpHe81F6gLjBtynbDMFS+TKOb8h0BExAZ9hW6hvjVdJETcnb+B6HG5K5e24++lL3BRyVwl9WcbEe8l3SH1PnBDmx/avn3T283N9cJPq796/XNGmN8pfAQAAP//xQj7Wo4BAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/enroll-updb.post.json", "\"H4sIAAAAAAAA/1yPwU4DMQxE7/kKK3CkyX2/gjvikNZe6irEwfYKlar/jhKEtOrBl/F43vgWAOIzY1wgnt37kvMPOx8IPyg18lW2hnpNLNlOZ/oslqmp1HrYOh5TF/N0MWnxZQT5tdNIkuOFTv6nFUR2llbqq0ondSaLC7huNPdKXxsrjQZvAQAg9mL2LYoxALxPT99f3h5c/8p4RGkdfKSV26RaKrXOhk95p+Y9A+AextzDbwAAAP//RlxT5w4BAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/enroller.post.json", "\"H4sIAAAAAAAA/0yOsU6DMQyE9zyFFRhpsv9PwY4YQuOfukrt4DhDQX135CChf/Dgs+/u+wkA8Zlq3CBezPqW8zcZnbB+YmK0XSZXvSeSPM4XvJWRkVVaS12GpesQji+eYfeOHiIfVzzbn1ZqJSPh0l5VOqoRjriB6cR1V/yapOjlbwHgfYn9+Op4AJHLDf83B1bcvaziTrwqRiqtLZynfFCzO088W4vL+wg+j/AbAAD///tU0vH3AAAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/identity.patch.json", "\"H4sIAAAAAAAA/5yRMW/6MBDF93wKy///CMmeDal7K6FOqIOJL3DIOafncyWK+O6VTQqORFu1Q4Z78Xvv5/OpUkr/R6tbpfciY9s07yi4BLuDmkB6H8nysUbfhG4PgwkNWiBBQQj1aKTb14fgSS9SkBxHSEl+e4BOLpqxFgU9GffEfgRORt0q4Qj5P8NrRIZEsKmUesniWB5NjEppMgNcp0TN0KcyCz1Srgi1cS7j/GsKtUnOJUXndPaeF5fAifYaOM2baVZKB2GknV7clFvKhJpVoDjMnOlY4XoOwGXKA7xhB6WyBs7SZ/QMlL2DlQjjNkqxEZXvbqIT3c4af7Eaw2yOj/06X/Tejszui8LT+Q91Ke5OC4aVHZC+f4yt9w4M/fwaN8beuACXpip956r6CAAA//+2rKeo8QIAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/identity.post.json", "\"H4sIAAAAAAAA/5xSvY6jMBDueQrLd2UCfbpI199J0VWnFAYPyUTG5sbjlbIR776yA8RErLSbAgHf6PuZn1shhPyJWu6EPDP3u6p6R8Yt6BOUFrh1wWq6lugq35yhU75CDZaREXzZO8/lxTsrN1GHrz1EIVdfoOE7prRGRmeV+UOuB4o8uRNMAVKd4H9AghjgXyGEENKqDhJ3Uhy/0e91h1YWQhwTtc8Fbxl5+outEbQxkoYWbQriS2VMCv2jytAqMRNtyM0zrak9z4T2NMYSQoIN3Rw/IX890FwXQv6CN2wgRw5ACRqR48IYLDljOrC8Yp/ZZHMeERuMmTXngCuDuvOZF0DWY+2cAWXlXBs2C16jnplfnzTqddnQ6/p11eCBHjtM2kX+Hp7OaGWxU9Pz4DS0Kpg4pFYZDwsdcgb2zIR14MVgM1Zcx+b7p6iI1PV3e0h3tn3sdD5MdfrE8Da8YBflcpciPkNRfAQAAP//RC/mxRwEAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/identity.put.json", "\"H4sIAAAAAAAA/5yRMW/6MBDF93yKk///EZI9G1L3VkKdKgaDL3DIsdPzuRJFfPfKBoNbZWmHSM6z7vfeO58bAPWfjOpBHUSmvus+SWiJZo+tQxl8dIZPLfku7A446tCRQSckhKGdorTH4J1aJIycJkwcvz3iTq6aNoaEvNP2hf2EnMZUD8IR8z3jeyTG5P/WAAAop0fMs4VYznofypnCyozkVAOwyZiphp8rUPlLLRmHFM/gQC6HCq22Nhf411Vqlyfz2KUOUrFK1SBMbn+LBaDQxfFeJSuvAfl+D6Ce8IN2WCtr5CzdlM03Y/YWVyJM2yhVOcg1dLSienDR2sXvW2pmfXoe1rnCMkF+dE4LnzU8X/5gl3AzLuUpZ5a79d6ido/tPhIM2ga8cpr0XZrmKwAA//8qeCDFygIAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/identity.service-configs.json", "\"H4sIAAAAAAAA/6yQsU7EMAyG9z5FFBih2fsU7IghJO6dT20cbBepnPruyOVURerKkiif8n/+5XvnnH/G7Afnr6p1COEHFV8hX6AvoCMtJfPaIwVJV5ijhChCCaMilb6SaH8TKv7FRLpWMFNkjusfQoVZ/OBs0OnZROjzBkn3zM5jzmgj4vTGVIEVwXLKCxx/GL4WZLDy7w/mnBfgb0xwqJzzicqIF/8AH4egtur7WdFC2xPDaF0zjFj2dtLHadoX8BQaGkqcwR/R7Vzlv8xde9u5dVv3GwAA///IuwBV1QEAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/service-edge-router-policy.patch.json", "\"H4sIAAAAAAAA/7yRsU70MAyA93uKKP8/Xpu9LwE6RsQQErf1KU2C4yCVU98dOSedigQDCDFkiGN/n+1cDkrp/+j1oPTMnAdj3pCxAz9BH4HHVKOntcdkipthscUUoFd00FI6SpWBupwCurXPlt3cn0uK+ihgXjMIOT2fwfE1Zr1HxhRtuKeUgRih6EExVWjvBC8VCaSjx4NSTy2Y96nSs1I62gVuN5mCYBSZhxFjU5TehtDa+Wd2USOVXawh6Fa7Ha/AAouNjG4P9TDaGlgPSvKP33fdoB9UsrtTW90phd1Qv2G0RHa9Gx+YME6fjtn+7+/FbKcvhJftBzrB7S0HOdt7AAAA//+t5YFY0QIAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/service-edge-router-policy.post.json", "\"H4sIAAAAAAAA/7yRwU4EIQxA7/MVDXrcGe7zE5r1aDzg0NnthgUsxWSczL8b2KxBEw8a44EDbXmvLWsHoG7JqhHUUSSOWr+RUI/2gINHmUP2lpeBgk7TEc8m6YT8ShPWkp5DFuQ+BkfTMsSQZDil4NWucGWJWMDh+YSTXGLGWhIK3rh7DhFZCJMaQThjzTO+ZGIsDT12AADKmzOqDuCp5mP7am0qrrcyD+NcvBZn8tWWBuNc7exGN1F9ZQNsuwsr4dl4oanlWZxNdqJG8Nm53c81H9BPqrLAfd3fPrhmnr8wGmaz3M0PwuQPfYF8HbN+4v+LxRy+Ea7bL3QF11q6crb3AAAA//9c9J3G1gIAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/service-edge-router-policy.put.json", "\"H4sIAAAAAAAA/7yRwU4EIQxA7/MVDXrcGe7zE5r1aDzg0NnthgUsxWSczL8b2KxBEw8a44EDbXmvLWsHoG7JqhHUUSSOWr+RUI/2gINHmUP2lpeBgk7TEc8m6YT8ShPWkp5DFuQ+BkfTMsQswykFr3YFK0vEwg3PJ5zkEjPWklDwxt1ziMhCmNQIwhlrnvElE2Pp57EDAFDenFF1AE81H9tXa1NxvZVxGOfitTiTr7Y0GOdqZze6ieorG2DbXVgJz8YLTS3P4myyEzWCz87tfq75gH5Slf3t6/r2wTXz/IXRMJvlbn4QJn/oC+TrmPUP/18s5vCNcN1+oSu41tKVs70HAAD//9phr5vVAgAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/service-policy.patch.json", "\"H4sIAAAAAAAA/7ySMU/7MBDF934Ky///mCZ7RsQOgrFiOOJLe5VzNvYZKVT97shuaF0JBhBiyHAvfr/3fPJhpZT+T0b3Su9EfN91byS0RrPFllFGl9iEuSXXxWGHE8QuYnilAdfeWRrm1oMMu3YfHesmw2T2mGnueY+DnDQwhoQcg70PzmMQwqh7JSFh+R/wJVHA3GKzUuqpiL4+mnsqpRkmPE+5ecAxhxkciUtEbMHaUudfV6lddq45WauL99icgEvbM3CZN8uslI4SiLe6uSgXylK1qMhpunbeEtjad0NsqjljPihXnSJOwEJD3cvgCMmK7out+f79z9CrKDLIQjI/OFut+TfyIASY78bHsr1PFr+8or8PFth+EXg4/iAu4+qUVf6O7wEAAP//5IOqolcDAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/service-policy.post.json", "\"H4sIAAAAAAAA/7ySMU/zMBCG9/yKk79vbOM9I2IHwYg6mPjSXuWcjX1GClX/O7JpKxeJAYQYMvjse573Tjl0AOo/WTWA2omEQes3Elqj3WLPKJPPbOPSk9dp3OFskk4YX2nEdfCOxqUPPkm/T57VqrBkCVhg/nmPo3zUjLUk5Nm4++gDRiFMagCJGet9xJdMEUuIpw4AQLGZsfaeiR3Apr4NLeHQvD6fyjwRp5LB4kRczak3ztWU/3RT1bWzth1bW8M6z5MkEm9PmQAUcp4veWvlloy73AOoG2KrTsfNlSPhbFhobD0WJ5OdqAE4O7f6/igX6JWKLLKQLA/eNRv7DZ+J0Sx302Pdy7pA1Kch62/y92Ix2y+Eh+MPdAXXWrryHd8DAAD//9FavMI4AwAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/service-policy.put.json", "\"H4sIAAAAAAAA/7ySMU/zMBCG9/yKk79vbOM9I2IHwYg6mPjSXuWcjX1GClX/O7JpKxeJAYQYMvjse573Tjl0AOo/WTWA2omEQes3Elqj3WLPKJPPbOPSk9dp3OFskk4YX2nEdfCOxqUPWfp98qxWBSVLwMLyz3sc5aNmrCUhz8bdRx8wCmFSA0jMWO8jvmSKWDI8dQAAis2MtfdM7AA29W1oCYfm9flUxok4lQwWJ+JqTr1xrqb8p5uqrp217djaGtZ5niSReHvKBKCQ83zJWyu3ZNzlHkDdEFt1Om6uHAlnw0Jj67E4mexEDcDZudX3R7lAr1RkkYVkefCu2dhv+EyMZrmbHute1gWiPg1Z/5K/F4vZfiE8HH+gK7jW0pXv+B4AAP//hjEdGDcDAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/service.patch.json", "\"H4sIAAAAAAAA/7yPsU7DMBCG9z7FyTCm8Z6NJwCpY9XhGl/Sq1w7nM9Ioeq7I7sVDRIMMDBkuIvv+/7/vAIwj+xMB+agOnXWvrPymtxIbSAdYg5O5pajTf2BTphsInnjnlI7ofaH9phiME3B6DxR4cT9kXq97tA5Vo4B/YvEiUSZkulAJVP9L/SaWaj4tyuAXV1Oy6clIYAJeKLPqWQWGorM0cChKlKL3tc4D3axteVyHbL3pt5emitQSU4cUKNsVFBpnJf4W5ftbQYwSYXDaJr75s4E2H1hS/T0pCq8z7ooATUuZq+mg3Ld/L4NiuD8PGxqmm9q9TEMPP6vU/En4fnyB13BLS2r8l0+AgAA//+PRRdSqgIAAA==\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/service.post.json", "\"H4sIAAAAAAAA/7yPMW7DMAxFd5+CUDs61u6tJ2iBjEEGxaIdBorkUlQBN8jdCykxog4d2qGDBpLie5+XBkA9k1U9qKPI3Gv9SUIbtBN2HmUMyVteOgo6Dkc8m6gj8gcNGLs5ROlOMXjVZoosM2ZMOJxwkFvPWEtCwRv3xmFGFsKoehBOWOaM74kYs37XAAAob86oGoB9mc/11qX6sVY5PeOYvRZH8sUWO+NcSfakq65e2QDX9sYS5DN5I4G3wkZwWmry/aLdvQZQUZj8pNpHxyfn1L3cf2NzcPgiwnRIUuWHktQkJ6qHvN3+/hDDbJbXcVvSbB4RVvUQ/EjT/zrF/CS8XP+gy7ja0uR3/QoAAP//rYIGpa8CAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/service.put.json", "\"H4sIAAAAAAAA/7yPMW7DMAxFd5+CUDs61u6tJ2iBjEEGxaIdBorkUlQBN8jdCykxog4d2qGDBpLie5+XBkA9k1U9qKPI3Gv9SUIbtBN2HmUMyVteOgo6Dkc8m6gj8gcNGLs5SXeKwas2Q2SZMVPC4YSD3HrGWhIK3rg3DjOyEEbVg3DCMmd8T8SY7bsGAEB5c0bVAOzLfK63LtWPtcrhGcfstTiSL7bYGedKsidddfXKBri2N5Ygn8kbCbwVNoLTUpPvF+3uNYCKwuQn1T46Pjmn7uX+G5uDwxcRpkOSKj+UpCY5UT3k7fb3hxhms7yO25Jm84iwqofgR5r+1ynmJ+Hl+gddxtWWJr/rVwAAAP//WGvSsq4CAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/session.post.json", "\"H4sIAAAAAAAA/1yPvU7FMAyF9zxFZDGWZO+IWHgGxHBpzL2uWifEDlJBfXcU+kNgPF98vthfxlq4owC9hZtq6r3/JKV7DFd0jPoWC4e8OIpehhvOF/GCIhRZXIqibpTI0FWLLgmrJr6OOOjGUo4JsxIK9Lb+ZS0I5g8a8CmcqCmLZuIr/OC1M+3b/9nnPduz1f0SLtMEe3w5OCCX+W/zkS5T23sgDk2umsOy7WT2vSDje6GM4fQ1h5k6vn4HAAD//4TdzLNcAQAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/terminator.patch.json", "\"H4sIAAAAAAAA/6yRMW7DMAxFd59CUDPG9u5TdA8yKCJtM1AklaKGtPDdCylGY69NBsPgJ/E+9fnTKKUPBHpQehaJQ99/k1CLMGHnUcaQPfC9o9AnO+PNpF6Qb+SNBO6iETt31xS8PhaQ3CMWUrhc0cpDMwAkFLxxnxwishAmPSjhjLXP+JWJsWxwapQ6VzFuR8uOZTBkQf6rn3antVZKJ2HyUzVeFZ+d02t5rv/l0dUX8lCG3wY0AIwpvQ9oQ5It7cA4lngBR/I11NQZ5+oBPvqNurlRWyE7bGS0COgtvgzfoHYWYqZdDoCjya4+Zjn+w9FMqX3mtDTlW34DAAD///DdHuy8AgAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/terminator.post.json", "\"H4sIAAAAAAAA/5yRQY7yMAyF9z1FlJ8ltHtO8e8Ri9C4xSgkGdsZiUG9+ygZOiSaDWLRhV+fvxfb904pvUGr90qfReJ+GL5QcAd2ht6DTCF5S7cew8DjGa6GBwG6ojcSqI+Bpb9w8HqbOXKLkEHhdIFRfjRjLQoGb9x/ChFIEFjvlVCC8p/gIyFBfsChU0opzUCfOEJpz4aQBGitjLUEzLpT6lj6Y029t4RVqJ7GQuhnXeSlTXjRfUJvs/jXfnjU6rdx+1R8ck4/ymMDXEd6MX8MLLV3QzBlr4UJfVk198a5cpZ/Q6VWh9sVSIONBCNY8O3a3oJXqCZCzNxMaWEyyZVhlu0biWbm3XOtS5e/5TsAAP//25UF0NECAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/terminator.put.json", "\"H4sIAAAAAAAA/6SRPW7DMAyFd59CUDMm9p5TdA8yKBLtMFAklaQKpIHvXkiNGxldinbwwOf3Pv7o3imlN+j0XumzSNoPwwcK7sBN0AeQMebg6NZjHNie4Wp4EKArBiOR+hRZ+gvHoLeFI7cEBRRPF7DypRnnUDAG418pJiBBYL1XQhnqf4K3jARlgEOnlFKagd7RQo0XQ8wCtFTGOQJm3Sl1rPnUUu+ryFI3k7EQhklXeX4gTxhcEX/aD49afQe3TyVk7/WjPK6Ay4y/7G8jS+vdEIzF62DEUG/HvfG+3vllaNTmJXYVssImAgsOgoV/wxvUqoWYabWlg9FkX5eZt3/oaCbePc86d+WbPwMAAP//sqYrZaICAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/transitRouter.patch.json", "\"H4sIAAAAAAAA/5zOMW7EIBAF0N6nQCTlGnqfIleYhWE9KxbQMBSbyHePBkuR6xQUfPQf/2cxxn5StJuxu0jbvP8moRXjA11BSXWUyG9H1few4wu6T3BnCivXIcjdNZCwu2evxd4Uk3dD1er9iUHODGIkoVogf3FtyELY7WaEB873dk11kjG2wAv/bjqSMakbMVGZWneQ8/z5w19Sr821jJzt7B63ExR49P+B2ryCi55j+Q0AAP//uFLZijwBAAA=\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/transitRouter.post.json", "\"H4sIAAAAAAAA/5yPsXIDIQxEe75CQ1L6oL+vSJ9JgQ+dLQ9GRBKF4/G/ZzjHM1enoGCXfbvcHYB/p+xn8GezNsf4Q0YT5hOGirZyr1lugTjqcsZr0rimo9AyCXdD0dBYLVyUqz8Mlt0aDhgfL7jYU0s5kxHXVD6EG4oRqp/BpOPmC353EhwjPh0AgK/pit4BfG1+26fuuxev2/iD4Dp6M65UtzYNqZRt2VvcqfHFBngcnixLJ/0faySn2kv5A7pxHu43AAD//+YEIOVWAQAA\"") - packr.PackJSONBytes("../embedded", "api-schema/entities/transitRouter.put.json", "\"H4sIAAAAAAAA/5yPsW7EIAyGd57Coh17sOcpulcduGDuHCVAjRnSKO9eQRWJ+QYGjP/v/zgUgH4nryfQT5E8WftLQjf0DzQRJaQaPe+Gki3zEzdXbHB3pvnGqQpyMbmKWUqK+qOhZM/YWOm+4Cz/M+c9CaXo1k9OGVkIi55AuGJ/Z/ypxNgcvhQAgI5uw55tRPcoWgF89908Eo5h+7q17zCG5uAxUOzNxbh17ZZvdpjanuyxc2x7iXV5ApyqnVP9BQAA//+mADgbXAEAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20180828083820_init-schema.down.sql", "\"H4sIAAAAAAAA/1SNMcvCMBiE9/dX3BDI9y3+geJQk7c2YFNpInYrQaNmaAuayV8vtCB4yw13D49uIQTteG8sEWAqcG+cd3+EJY4PrDxel0ccwzCFMaLq2gZpus3PMeQ0T8M6btbKAeeaO/5BtpDvlNMQr/coCfgnwNdsFwn3rE6eIXXXHuFUzU2J7x2qdKrULAsC2GqYqiBiq0mI4hMAAP//7wIpBL4AAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20180828083820_init-schema.up.sql", "\"H4sIAAAAAAAA/2SNsUrGMBzE9/9T3BCILr5AcIjJ1Qb8UkkiflsJGjVD+4F28umFFgTxlhvufvz8BKXkjvchigBhAM8hl3wl2JP5QFfw9fLRljqvdWkY0nRCX98un0vd+mWdj/HmqK3ieWTiH+QW+rtvfW6v700LcC1AGRl3Cc90T4XQPk2PyG7kyeL3Dmezs57aCMDoEQYjwuhFKSPiEm3hP8r8BAAA//+lS2Hg2AAAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20180905100347_initial-tables.down.sql", "\"H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20180905100347_initial-tables.up.sql", "\"H4sIAAAAAAAA/+xZTW/jNhC9+1fwtg6wKZxgU7Tbk5sohdHUab020D0RtEQ73MikINFxskX/exFbEknxQzJFL4pFeEpMcjiaee8NR7qeReN5BObjX+8i8JVwAnGyxj+sMYM5XhNGCzAcAEASUI3FYnID/pxN/hjPPoPfo8/APKb3czBd3N29HwBA0QaXPz+hPH5A+fDy6urMsrO5O84x4jiBiANONrjgaJOBHeEP+3/BV0YxuIlux4u7OaBsNzxTdm+zpMdujtZF6dKXglGHx03Pa6Pv/vn3Hfj4cb9/OTj7ZTAYWIIeo2LQCLZpbLck8U+AaYikjLomZUXoGudZTih3Wby6uOycZpxzmOGNZSnHz8aTHBZJAZ9wTlYEGwO6ZCzFqDWnssWDuRhxwijk7BGruz2emhQQbTmDMYKY5ixNN5hyiClapq9ee/hICsg4txn0tIi2/EEyogwPixKlTaMfzQNZlKhvGuHkoFSDxXTy1yICk+lN9DeIUQElikG4JTTBzwMA7qeqYoChtM6lLiTBlBP+AvlLhjWhCaPqF6POAvLdqbopjWrMIUlsiVQXgiFJJJOWTBI9iyFyqWb0iJKgPAMkycGP7rEtpSbBK7RNOUTJhtBaXKq4r1BaGEpZU672e6vhYUMTqBCSFEKEvgleSResEoHT8d08mrlgCsD45gZc308/zWfjyXSuHqRxZPUIbu9n0eS36R6+wyayzsAsuo1m0fQ6+tRKIiuNClwUpguuD3/ku4AP7CvP/Vgjo7UnUHtiNBw8zZiqcqYjqpqBUiwdSGoDEdFUWCFKfdo+8TamCITtlzkkPU63Bcf5W7MVHEe2BhdxvEMvOvlBn9iXaYSqwX3D1v1h7A2bRz7NfZq4r11+cFhyt2ZdOzJnN+ZX3xlNCVWXeRgSLzlgk3LdH0tqsqQi4G/ky64O6pEBlox0YXGrEfyckRwXHkbM7V2wri5YM3fqalWJjF6tqhkoFEMvVmLOUqtE1XDdwzp4oTBBd0SZtviivDF0ti9ZzjiLWappby1vozOX7r4Vu2OL3QotcxJX1+K3oIcNujvqxhtG/w7d5yogUPBa7+TEd00doyuyrqeChNBQL/oXiv4V4tSloQSHrsnlBFSzpWuyOm8RZZX4ZT9sbYfzJxLrAhECrh5oTWgBH1jBD4YEWD/85LqwNgxkLC9vDoRyvMZ513xKfClD4dGWlwZK1pyILb3J0psrp+/5D8A09fyHGVinysqTForU7Dg/B3O0TDEgBUhwluP4NVQAFYCtwOXo4ufz0Y/nF6MWEkH1jlP9+golGUdyTKsdTWmu1rQHSBxqjZRYAmH2qFB6KJx8LzsT+Fhxip4qMWfJlZCo4H5JT6w7JofD7JmU704qC5UXPhI+9vCwvFJQ5jrgoTrD/vzVCjcapD4k5JnfEApHeBW0IbOhgGK+Y/kjtL2C7vcG2qNUlY54vn9u4ve43U2EH7n7e2snzEhuIkZHcnMFFDk18auas/KrQqaLX15enZz1Hl4FZb3pg4F2ovPDga4PbR8QUJbBHaLSF+EWDdEu6y139P8V51rY5maZWkLd8YSNb+3iZ6CXau0rXodabThHQ6u+Rq/XYs172Y/gBwf/uhbUO/GT7pyYs/hWUaiteFeG6r6kAQwNF7brXQdY2Huf5go3JCRlDXlm/ccJ1dzDraAw+C8AAP//2ry6/CIrAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20181016142716_default-data.down.sql", "\"H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20181016142716_default-data.up.sql", "\"H4sIAAAAAAAA/8zXXW9bNw8H8Pt+igPfpAXCBxJFiSKeq6DNgG5tNyzNBuwmoCQqPUBqe/Zxh/bTD8dNh6xvW98WX8mCb36i+Kfsh0/OTn9+Ojx88vTHYfFqnMYLa5e2+N9ibLacxunlxfRybdvFcHcxtsXxsFjqc5vXujGdrF3oNO926/Zmd+/OLyePzk/PhrtHkdk76gjeggIJMaggA4ccilovVfToeDg639rm6Hh4cPrdyfmjp399uPf/O3e+ra/E0AsJRF88kGYGJSOw1lTYJxV2s++BvRir3YawUkupS4NuPgN5CpBjC8AUUGokzFhm4ZltPoe43qymVV1dfYrueFhMerm9qZyutjPi9fI24D+V/L4b60y5Xm/VMtX1vir75aOSj1i6ls1YP7mF3sN5NcFat9vp2Wa1u3w2y3762/bzavVVfUudxhdzEx/9Nk7j8OTN9kto71HdMF+8/qauln28/FRx74V88QQtBgFqxUFO0YNV3xKSyw7Du3V+9yI+eLy3muTDR7201cXGLsfV8gsvQZ1hRekggghEIYJmZYitdC5NMDDPZ7ivS2063LfltNGrz76ir+eulEQ4gHexAjXzID146L1Xx0yZ+35Onp8Nv9p2un0whuSIpUGtLgMhEpQWE1AoqolRe9g/Pd/rWpe3z7XWXMquQ9BCQGIJpJUINWWMuShl12buyW47N8Sot0+O6DW0IpA9OaAcCZQzQvK1xBa6Odqn82y1m54NJ89tM9YDYOdAqFUbkJEAOcmQqRlklG4lxhbivjF+WG3sALglxoTFR+jdCpB4B6V7AnXBJe5SFe06eI/H9sdBZC9ZN8wagYkMKFGD4omBHKP1wkm6uzHkDmNgeFdTT5RBsPCcQIRikqAnDJFNI2Of0ae7zWptB4JmFEoYPfheGaiEAjmmDDVKI8Zg7Gg/NvphhI8dhdxSAOESgHJBUCsRiktJJWKimG4U+VQPocgWgrQkAtyjBzKpoFgVsmd05rh7SdcR3M+6fxB/e7BzMSd2ARJTBqqcIYtrYF3Rp47eeriRv8Oocgqd0bkCzEJAmuYkqoKGZC2EbLXs/8uebA/h8evirVYNkHrGucQFshcPps6FVI1L1OueOIzykhcU4wwpMQGxm3uiIUiRQKaSMuIMfjy2dnUoyYvNOcJSIPUWgSQKiFOGVKqyMwyd3yTvX/1S/jMAAP//ko/Ws40RAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190111165646_add-gateway-protocols.down.sql", "\"H4sIAAAAAAAA/3IJ8g9QCHF08nFVqMosyYxPTUlP1UtPLEktT6yMLyjKL8lPzs8pBgQAAP//QZ+dpyYAAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190111165646_add-gateway-protocols.up.sql", "\"H4sIAAAAAAAA/6ySwW7iMBCG73mKuZFIq9UupxZObmKqqMFBxjlwstzEDS4QI9s0KlXfvSJSQipKS9XOzRp/vz95JqQYMQwM3SQY9sopLotS/i2Fk7V45lujnc712nq+B6AK6CrL4ghmNJ4iuoA7vICPi6QMSJYkfzyANvQQ0+BfVx9vXQ78kzD5Uhh/+C+4FFdVaaS1fGfWHX71/3r4SUAfz40UThZcOACnNtI6sdlCrdyyOcJeVxIiPEFZwqDStR+8w3fb4ie4E6VtrR6trr7xdV3q4OV1AKNRw997wdjzUMIwvWD2ACiKIEzJnFEUEwYnV/hxtpw/rGCSUhzfkmYx/GMvAIonmGIS4vnpixZ8VfyyV29pTsV6zTNmXVCrdsatkq7WZsWttFbpykJE0xmEaZJNCeTrnXXScFWMvbcAAAD//8IbvktwAwAA\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190116092021_add-gateway-hostname.down.sql", "\"H4sIAAAAAAAA/3L0CXENUghxdPJxVajKLMmMT01JT9VLTyxJLU+sLFZwCfIPUHD29wn19VPIyC8uyUvMTbUGBAAA//9B3XIDNAAAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190116092021_add-gateway-hostname.up.sql", "\"H4sIAAAAAAAA/3L0CXENUghxdPJxVajKLMmMT01JT9VLTyxJLU+sLObidHRxUcjILy7JS8xNVQhzDHL2cAzSMDU00rQGBAAA//8EAu9EOgAAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190429142248_add-enrollment-table.down.sql", "\"H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190429142248_add-enrollment-table.up.sql", "\"H4sIAAAAAAAA/7SSwU7DMAyG730K37ZKCA0kOIyHibLm72qaOlXiMjrEuyNoC5k0wZDAN0f5P3+JXEVYBandedCRlQ3cHteQGLzvIJqKdUFExI4+axjy7oeSoCSD98VyUAVJGi2LUjbG9C3GIg/2kTsbR2oxXs0KEGUdDbv/UcgGGFO3JzYRNSKkQsq+aQ4w0mSooYXMgScbq8bG9c1mU15sOGE6aBPcKeb27v63GDz3HJGMVSLlDklt19OBtflo6RgEF2CmFXHfYxxqO3glCYd1eRYz9O4vMGr3afF8TEHOPmDBrF5eV9vt+7Xd1xKUD8VbAAAA//9/FrPN9gIAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190502145944_add-authenticators-table.down.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1UssLclIzSvJTE4syS8qtgYEAAD//4CpwcskAAAA\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190502145944_add-authenticators-table.up.sql", "\"H4sIAAAAAAAA/7SRQUvEMBCF7/kV77YtiAdBD+uPCbPJdDu2TUoycemK/13ctlpBEcGd2ySP9728uMSkDKVDzziLimV/5Fsq2nJQcaQxZVMZABCPjyllu/06ISpC6XuzHrgYsiaSoPjKsmPHE8YkA6UJHU83C/tdopMVf0X2hmJt0yFxw4mD47zpZhEJ5znawNrGJdAzJddSqu7uH+o/RJuN5r/wlhRQGTgrDSNOou1lxTkGhueGSq8I8VTVPxiV0f+PkdIxrzdPOYZvH7Ea7V5ed9jvL8LDZ+v1ozFvAQAA//8sfwwlZgIAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190525131603_add-network-session-certs.down.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1ctLLSnPL8qOL04tLs7Mz4tPTi0qKbYGBAAA//82ylRcKwAAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190525131603_add-network-session-certs.up.sql", "\"H4sIAAAAAAAA/6SR3UrEQAyF7/cpcrddEEHBm/Vhhmwn7ca2mZKkW7viu8u0ULEq+JO7OXO+yRlOqYRO4HhqCa7sHCjWdCvkY9ImGJlxklCSuu2KHQAARxgGjiDJQYa2ncU8ZRJzRRaHL/nQNzSt7jy9coc6QUPTzXyx5f66K2xECxxDqJoP25UqUpKS7Puf25IrvwlOz74mWfSKpSbtNee4oJZn1OLh7v6wsV2w5RgqTR04d2SOXQ8j+3k+wjUJQaQKh/Yz5ek3zNJnDOg/oNJYbJMOffwX71gbPFmS1bV/ed0fj1k6vdd4eNy9BQAA//+82trHegIAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190710140702_add_event_log.down.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1UstS80ric/JTy+2BgQAAP//TM0ZTiAAAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190710140702_add_event_log.up.sql", "\"H4sIAAAAAAAA/6zTzU6DQBAH8HufYm6FxHgw0UN9mM2UndK1MEt2/7RS47ubQEGwagQ7N3bIbz6SyYIwhMDbQujs4IzYXO7lKApT+DyukhURkbM0jbq+evot1IO0LopV/5B5jQjsFPRZzFQHaagKruTQ0EGau/Z/NJVMtCOHbM8heXh8SmcU7zTO4IMZm3O5L9R4EYspUTg047b+S43aWkztfCgZEGtKiZFzIcgr/kAM1GT1HWcigtO8zd+Cswy+5OdyAzUyuniJXrdLpO6irOG+EbhSIris6OSwbz/p7FXIyo7rAqT+lKQ/jFhX9oYaOI9XU347T6+t397XtNlc1jFccfr8EQAA//9L+SBxOQQAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190711152500_add-service-hosts.down.sql", "\"H4sIAAAAAAAA/0opyi9QCHF08nFVqMosyYxPTUlP1StOLSrLTE6Nz8gvLim2BgQAAP//Ai0zFCMAAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190711152500_add-service-hosts.up.sql", "\"H4sIAAAAAAAA/6yR0UrDMBiF7/sU57KD4QvsKrZ/JZilkqbgrsJcsxlaktEERZ9eVibbdOjNbnMO5/vIXyhimqDZvSB8uuSM7Xb2LtrxzW2seQ0xReQZAHy/uQ5oW15C1hqyFWI+xa6zPrn0ccgv4my2yDImNKm/MdMKK0sUtWy0YlxqXBSM2fd4UnzJ1AqPtEJ+Upqf828GPO0bs+1R1Yr4g/zJnkFRRYpkQc1vVkR+Q6P9GFLYhOGq0vkXXHc6Ntx/Vt6m9zD2JtoYXfDxKCXapQSvptPSM290g4OW8zu8hDDYtUdJFWuFxnY9RLvIvgIAAP//QNzU42ACAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190715170856_remove_fabrics.down.sql", "\"H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190715170856_remove_fabrics.up.sql", "\"H4sIAAAAAAAA/5yQwUo0MRCE73mKvu3/X0TEg5CHCT1JJxM2dg/dnZX16WUVB/Qgo+eq76MoHE4KjssgeO3eE5VGd0Z66ZksAAAUlQ2ysLliZ4fPMFVctOfUS0r1HMNx1ZjPDDsdwx/RLFx7O4ZjKTCoYb6mDc18VZlthUVkQKGKczhUHEbA4sBzjONe4rJJZ09YipIZXFDzivrv4f7x6f8vPO1GJ5V5q3+R7Kv2safJZ5YXPsUQwvs53/0fL1n8KU1+3cjiWwAAAP//bqwnJQYCAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190729141132_remove-gw-status-col.down.sql", "\"H4sIAAAAAAAA/wTA0QnCQBAE0P9UMRXYgMWEiTcJC+MueHuIVp9Htz5oHhb+0bFrXHpcbH35m+AYeJXXOxFzr3SkcFRZTGQ1ctkYOrncOOmp57bdAQAA//90sbWwVQAAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190729141132_remove-gw-status-col.up.sql", "\"H4sIAAAAAAAA/0rMKUktUihJTMpJVajKLMmMT01JT9VLTyxJLU+sLFZIKcovUEjOzynNzVPILI7Pz8vJzEu1BgQAAP//kEeLtzUAAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190731134126_drop-gateway-protocols.down.sql", "\"H4sIAAAAAAAA/6zSQU+zMBgH8Duf4rkNkjdv3BITnac6OkNEZrpy2KnpaGVVoEvbuTjjdzcjgW0ydUafG3ngxx/6HxGMKAaKrmMMG+UUkyKX/3Pu5Jq/sKXRTme6sJ7vAQAoAe2kaRTCPYnuEJnBLZ7B8UkmFJI0jv/VQANvoRr4fg6BJtFWeOYmW3DjD86C0wFV5UZay1amaIGL/uXgC+IQyIzkTgrGHYBTpbSOl0tYK7eoL2GjKwkhHqM0plDptR98AFZL8TvA8dw22R6trn7wE1u39/rWg+Gwfn7uBVeeh2KKyQlN2HIoDGE0SaaUoCih0LmJ7c6ZsYcnGE8Ijm6Suib+bhcAwWNMcDLC0+47LfhK/HmyvQJ1o+0tP8nWQk04XjhpwPF5IY99AhcCMl2sygoW2rqKlxLa3p33B8F7AAAA//9duGeiggMAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190731134126_drop-gateway-protocols.up.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1UtPLEktT6yMLyjKL8lPzs8ptubiSswpSS3CpbJYAWxOcn5OaW6eQkZ+cUleYm6qNSAAAP//wNeyyF0AAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190826091630_remove-service-protocol.down.sql", "\"H4sIAAAAAAAA/5SRywqDMBBF9/mKWSpIKd36MSGNow2mmTAZLfbrSyw+QOhjlsnck3OJZTSCIObqEZ5OnMamw1NCHp1FHZmELPmkCgUAsJy7BobBNRBIIAzez5d5LIUkbFwQODD0lta67ddMHsYWGYPFdLRI1by6cPLjo2F7M1xczuWfDjvKbxJr9G3xEa7jBozs7oYn6HGCYmte7XuUqqyVMl6Qv38B0CPkPYJISTrGVCv1CgAA//8X4WOAwAEAAA==\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190826091630_remove-service-protocol.up.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1StOLSrLTE6NLyjKL8lPzs8ptgYEAAD//wnoAAMnAAAA\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20191008091800_remove-protocol.down.sql", "\"H4sIAAAAAAAA/8SQQUvDMBzF7/0Uj1zawhgi7DJPVSMUayddKuw0Yhu2yNrU9j8HE7+7pNQOIu4i6P/y+g6/8su7yXgkOER0nXAcNem1Kjdq2rSGTGF2HQIPAHSJr3uTbbGVbXB5EeIxix+ibIV7voJz6UIgzZNk0vO1rJTLz2ahC/3IF62SpMq1JJCuVEeyanDQtO0rjqZWuOV3UZ4I1OYQhA6/b8pf8SQ33SD20pn6jLfrP/7Wf//wMZ/3/LMXXnlenC55JhCnYgE2bs+mbFyfIWC6ZBMwO6DN0xC2nZ5lm5VkofcUJTlfIvBp1/kTDDFofP/4C5PXvS6sypD/6kJF06/SxxmTzwAAAP//G933TRoDAAA=\"") - packr.PackJSONBytes("../embedded", "db/postgres/migrations/20191008091800_remove-protocol.up.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1Ssoyi/JT87PKbYGBAAA//+IBLuXHwAAAA==\"") + _ = packr.PackJSONBytes("../embedded", "README.md", "\"H4sIAAAAAAAA/3RTPXPUPBDu9SueuSp5J2f3Kd4iQwEMQ4qEoV5La1ucLB2rVZLLr2ckO3cMhMaFpN3n04+zzzhK+sFWUTJnHOkguJpVj/m27yevcxk6m5Z+SkMZRwqpP5I9yDU0gZeBHXRmfH64/2qynXkhjD4wnr3OPrY74VyC+jhh8JHEc+7wPcmhntRn9VHmNpYh/LN44WzqpI9ZKQRSnyLS2LY1gkV98HqCTctC0XXG7DElTKzYF/yb9fo15nFmcFQvfAN2E/dNiWMH54WtJjkhqxSrRRg+43zvo6bGw6aokkJgMU3WCcMJjkcqQTtjzGMCx1zHdSZFTOAXFUJWPmaQMCJz3TgmAdV1uSwsq0yfkVMRW2Ec35jdXfHBVcMIdyvaVSUxkzg80+l6B8pwyZaFozaam1n2IOfz5qPxuSbtOrTwF6aYV4p1gIrOqZGgeNoi2Xa945FZSlZI+R3sj2hAo7KAgrL4OPXkqoxeeElPVU+D6Jpd7+65QaQnP5EyNuP7V6/+XFpJSVFx+IVtUb415v/aszVp7F+N+aTIcyrBIVtaITZz65xwfXmR22H3374Nd1PabRY8+xAwsJk4spCu7l1K+/Dx/tuXDxgYdmZ7eKvJhnJFE9UmX8QZ4WoPR9ciyddbGBQCP3lSzuc+ZIySFszU3NL09k+s3Es0fznW/QoAAP//sGY+ydUDAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/definitions.all.json", "\"H4sIAAAAAAAA/+xXTW/bPAy+91cIenPMZ9+6GHLrccCADNix6ADFoh0VsuRJNNasyH8fpDW1ZDuNUzjdYTkUhUmRfEg+lJjnK0LoSHC6JHSDWC5ns18CxQR4DlMFmOlKcbOdCj2z6QYKZmccMqEECq3slEk5fbRa0bHzE2jokjjXhFBkef3lvrcluGh6/QgpekMvZ5x7Uya/Gl2CQQHOLmPSwuuhkiGCUdGJvWdC6Pfp82KczHejSOycq+0qo0tyHwhJdCTCpiopaaTcjftZWjRC5XTc1BdCfQGV44YuyaKtZU+v2uv5zad3hVZVsQbzV0KvtZbAVKNkwdfDVVP65/9LAE+Sia96myl1z5qcIXGnHi5cunCJ0FSrTOQTzpBd7p1/kStHjEcGXEto1zv2X/i6zUImDUHHyw3XsLywtrfxB7NWsQK6bs9Gx6JyXdfSsEzJbctzj0FoUePAIJwOwC+7RxPLtCkYOk1VCd6d8KJnvAHTHRSWRXNqj0/xfaYu94PAjGHbVfaZd/748No6Qw4Zq6Qr630dUyAUjRtzP4TxwAlOO2eohtCjEjGig4U4O9IDnBi4YD7MW1C+eWJ8fN0aM9AJsWTW/tSm1zUSEjfpJO5iPu/0fqbp6QeismDe8wTcnOT9TCn2A2GhYApFOkx8UFURW95JucpCwzu/VdUC52jvJ0KGYAqhGGozSbXFEGB7M4sWt32LhELIG9uNK5EoPMp5LGdPL/LbJPk/qReD8dtB4rVvdyyV0kAKHFTaRapBKr6f8cDUwI9KGOChLGNCRpJ2I67c3+53AAAA//91BMQbHBMAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/association.patch.json", "\"H4sIAAAAAAAA/0yOsU4EMQxE+3yFFSgh6fcPqKBHFCZxWJ+WJNjeYjndv6PkhO6KFJkZz7yzA/CPnP0CfjXrS4y/bPxM+YtCJSttr1mOwC1qWukbNaJqS4zGrYaOltZw0lb902iyo9Ooap8nSnbVMGceYdzepHUSY1K/gMlO0xf62VloILw7AADPWb0D+Jh2vz863wL/n8EvVMZqpsJ1bmnAbZtcD/FOjSiCx2t5uQ4AXNx4F/cXAAD//6bt+FMHAQAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/association.post.json", "\"H4sIAAAAAAAA/0yOsVLEMAxEe3+FxlCC3ecPqKBnKESscLoJlpGUItzcvzP2DXMpXHh3tfsuASA+cokTxJN7m3L+ZednKl+UKvkiWy26J5Zs84m+0TKayczoLDU1MU9nkxqfepHvjXqTfJ5p9puGpXDP4vqm0kidyeIErhsNX+lnY6VO8B4AACIXiwHgY9jteHS5B/4/HV9p6auFFq5jyxKu6+B6yAc1oyrur8vLbQDgGvq7hr8AAAD//+MJlewGAQAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/association.put.json", "\"H4sIAAAAAAAA/0yOsU4EMQxE+3yFFSgh6fcPqKBHFGbjcD4tSbCdYjndv6PkhG6LFJkZz7yLA/CPnPwC/mTWlhh/2fiZ0heFQpZrL0n2wDXqeqJv1IiqdWU0riW0buGstfin0WN7o1FUP8+02k3DlHhEcXuT2kiMSf0CJp2mL/TTWWgAvDsAAM9JvQP4mHY7Hl3ugf/PoBfKYzVR5jK3NOC2Ta6HeFAjiuD+ml9uAwBXN97V/QUAAP//YSC09AUBAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/authenticator-self.patch.json", "\"H4sIAAAAAAAA/8ySMU/DMBCF9/yKk2Fskz1/gu6owxFfGlfuOZzPqkrV/44c2mAyAAIGlkR6fn7v7pPPFYC5d9a0YAbVsW2aF6duTXZHNZP2IbGVU+1CE7uBDhgbTDoQq+tQg6wj+b4eUbuh3sfAZpUDkU8PvWnhsQIAOE9fAKOnkXJReNpTp5N10tFapy4w+o2EkUQdRdOCSqLZM5Ynt0QA05Hohg4fxKIqqjjemfnosnq/qriLy3uWekxes1xYMyOhvFE2OJ6mjTV6Py191xRqk2PXnLwvWqvyfw3+EyxCz8kJ2Rn2G5QkQqwbjPEYxN4G2X5JM0USxgMtsXx/+1vCkkDBnek4T/bjnvGa8EnPksKvu/7ZM6oAttXlNQAA//9IbSvwwgMAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/authenticator-self.put.json", "\"H4sIAAAAAAAA/8RSQW7CMBC85xUrt0dI7vlEuVcc3HgDRmbtrtdCFPH3yhZy3bQHVAn1kkizszM7k1w6APVsjRpB7UXCOAwfVuwazQ57Qpl9IsPn3vohTns86jjoJHsksZMWz+uIbu5Dkv4QPalVltN0fpnVCK8dAMClPAGUnANmG/92wEkKteDaGCvWk3Yb9gFZLEY1gnDCymF8T5bRVNWCTsiywaO6IdtKD63Q5edCCzaXRWFLO1VH19XXquhdXO4ZnHVykuGGmgtlzAVkgqUSLvbaudLR09CgQ5ZdU3Kuce3a9034gS2miEz6iKpJS3ja6BhPnk0LT4kZSero7uKrx6LB+4uqCr9+nfbeP1uERazvFsvsD7L5t/+sA9h2188AAAD//ydDzrAQBAAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/authenticator.patch.json", "\"H4sIAAAAAAAA/8yRwU7EIBCG732KCXrcLfe+hHs3HsYybdlQIMwQUzf77gaiFTcejImJF0j++ecb/uHSAah7a9QAahGJg9avVuyRzEy9J5lC9iZtvQ2ax4VWZI1ZFvJiR5SQ+ogyLv2Zg1eHwkK/PUxqgMcOAOBSTwAlW6QyIzyfaZRqrToaY8UGj+6UQqQkllgNICnT7olt5YMIoEZKcqL1i9iMYknWz2ovXQ+frYIz3/YZmjA7KXJjLetJVBIVg/X1tdyjczX0nW5UXbBHn51rpnbt/Q7+07VkpuRxpdt8P4+xE77dXUTml5DM7/k74X/9TQfw1F3fAgAA//+PKpHSEgMAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/authenticator.post.json", "\"H4sIAAAAAAAA/9ySwWrDMAxA7/kK4fXYJvf8wU7rvfTgRmqjktieLTOy0n8fDsXz1sCghzF2SczDepIsXSoAtWJULahexLVN887CG8IT1YbkaKNBP9Vsm9D1NOrQ6Cg9GeFOi/W1s0Hqc7BGrZNKm+nlqFrYVQAAl/kLoGRylFLYw5k6ma/OXCOysDV62HrryAtTUC2Ij5TveHqN7AmzdaYjSW8xmwBUR162NJaIMRUq0zOqG9xnrSsTXu7EJftsYFcwABXEszmpAu7XZRSZON5HpUK/xOTzdaGd5ULuUl+X2/4WvfKUpqOQjmzmlw+1HoZ5gE9NQRvGZbfoU3jcmqI3Jg5DIa/K/y3Vry5ODOSNHqlkTofwZj3+/W2KDg8/b1Pu8eHRZcOiP7/Xw/5s+HcrXaWhXD8CAAD//53xhi5qBQAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/authenticator.put.json", "\"H4sIAAAAAAAA/8yRwW7rIBBF9/6KEe8tE7P3TzT7KgtqJjYRBjoMqlwr/16BIorcLqJKlbqxpes7B+Z46wDEf6PFAGJmDoOU74bNEfWEvUO++OQ0rb3xMo4zLipKlXhGx2ZU7KkPiftr9E4cMkm59ekiBnjuAAC28gQQvAbMJ/iXK45cqiVXWhs23il7Ih+Q2GAUAzAlrB3C12QIdaWWdETiEy7inpxrPbSg7etAGzY3i0zGTaJ+uh0+R1lNcT+n8aKS5Rw31eySMAvIBePKcrFX1hZH/2STyow9umRtc2rXvu/gX7SYIpJTC4pm26BifPOkH1dbKTtHj6uohG/91xv9mL/f6Y/83w7g3N0+AgAA///AJmJBgwMAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/ca.patch.json", "\"H4sIAAAAAAAA/7SRMU/DMBCF9/yKk2FM4z1bhToXwYgYLvElceWcI/s8BNT/jpxEECEWKnXwcM963zv7fRYA6tEaVYMaRKZa6w8r9kCmp4pJOp/YhLmyXsd2oBGjbjFWE0o7VJfoWZWZIPNEGeGbC7WyamiMFesZ3XPwEwWxFFUNEhIt99NezXsAKMaRvqe8WaAucw11lhdarNC5JflB71SdnQdOzqnFey1XoI3HJP4JTxy8cyOxnBgbR2afsm3/ts0AqvHeEa6P26QfNsD7r4yzyL0jjkmGO3ANsViZX7zb1QDLh2NyomrI5vL/fWAIOJ+7VwmW+z+KEezjbU1n5x5Y5HMtvgIAAP//GHdsdsoCAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/ca.post.json", "\"H4sIAAAAAAAA/7SSQU/jMBCF7/kVI+8e26S74oByq1BvSK3giDhM40niyhkHeyIRqv53ZENpWk4gOOSQZ7/vzeh5nwGov0arElQr0pdF8WLEzEk3lDNJ7QbWfsyNK0LVUoehqDDkvQuS74JjNYsAGXuKBLfdUSVvGmptxDhGu/GuJy+GgipB/EDp3NPTYDzF5IcMAEAxdpS8AKoiLxvqVAbwmK73U8h+Yjj+xT081XEMTbXhFB5ytDYN+qeYqEVyJtvhInCCO24VxBtu3icDUJ3hW+JGWlXCv5OKzx/q/8XV9eIMb8JyEHeDK/bO2o5YVoxbm9b/FLh1zhLyKVFTjYMVVUKNNtAFeS3yO+DlIO2P0TSxGBnvnJ1UeGbiwdrZ17tE73Fc1/eppXmEnDcr2ITvvZLonAKz+B2y1wAAAP//IukB9TQDAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/ca.put.json", "\"H4sIAAAAAAAA/6RSsW7rMAzc/RWC3hsTe/cWFJlTtGPRgYnohAFNuRI1uEH+vZBSo06BtmgzCJBI3fHupFNljP1PzrbGHlSHtmleSWmJbo+1oHY+iQtjTb6JuwP2EJsdxHpIWh+jF7vIeB0HzAR+e8SdXmrgHCl5Ab4PfsCghNG2RkPC0g/4kihgHvxUGWOMFeixYDMj7OO0p7hK6u9gLcEz9yi6Ftgyuo8LG9Vv+6ukh6lYGfNcFAxzXaeZhumUkwnYZWcOO5LiJ9bAXLz/a2bVpiAL7Pyj7tmAKbqt94wg75JNmQiJ1bamA474ifkLw7cTz5O6mc2hKOn44HmW8RVIEvPi92FDCDBuukcNJPtlJrmOvnyfPz1jQV64qrzO1VsAAAD//5gA2H8iAwAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/config-type.patch.json", "\"H4sIAAAAAAAA/5SPsXLEIAxEe3+FhqS0Te+vSH+TghjZ1g0HBERxufG/Z4Q9Oa5MQcFK2n376ADUO1k1gdqY46T1DzENaFccPfISirfpPlLQed7wZrKeg19oHfgecYyG52285uBVL04iilX4uuLMh2asJabgjftIIWJiwqwm4FSwzhN+F0ooCJcO4LOKsV0VSADlzQ3/foKdcJEwiwv5GpFH41zFedONquVy8MU5VW/3/jA8GrWWJ//l/MNLk1N5+pywVbW4mOJYTSDzlxg2a25DnquPvf9/GbFry3Ty9t8AAAD//y7GrWTJAQAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/config-type.post.json", "\"H4sIAAAAAAAA/5SPvXLDIBCEez3FDUkpiV5Pkd7jgoiTfB4MBI7C0ejdM6efMS5TUNze8e3u0gCoT7JqAHVjjoPWv8TUoZ2x98hTKN6mZ09B5/GGD5P1GPxEc8fPiH0Mmft7Dl61AhJNSOH7jiPvmrGWmII37iuFiIkJsxqAU8Ftn/CnUEJJcGkAAJQ3D1QNwHXbx/rXUl2ckxRIOImvxYn85pZ749yW7ENXqj7ZAGu7s/ZaNe1ocTlmeOtzKL44p47xeurib4pjNYDs32zYzLk2eZ0ua/v/HoLrXiHWRt76FwAA//9p/q+szgEAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/config-type.put.json", "\"H4sIAAAAAAAA/5SPvXLDIBCEez3FDUkpiV5Pkd7jgoiTfB4MBI7C0ejdM6efMS5TUNze8e3u0gCoT7JqAHVjjoPWv8TUoZ2x98hTKN6mZ09B5/GGD5P1GPxEc8fPiH0s3N9z8KoVjkgCCt93HHnXjLXEFLxxXylETEyY1QCcCm77hD+FEkqASwMAoLx5oGoArts+1r+W6uKcJH/CSXwtTuQ3t9wb57ZkH7pS9ckGWNudtbeqaUeLyzHDW59D8cU5dYzXUxd/UxyrAWT/ZsNmzrXJ63RZ2//3EFz3CrE28ta/AAAA//8hRJxWzQEAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/config.patch.json", "\"H4sIAAAAAAAA/6yQsW7EIAyG9zwFoh0vsOcpulcd3GASnzigYIZrlXevTKqKoUulGxj4sb/vF1+TUvqZnF6U3pnzYu0nMc3oNjQR2acWXbkbSrauO96g2jVFT5vJwOturjVFfREI3zMKJb1fceUzA+eIKUUILyVlLExY9aK4NOzvBT8aFRT766TUWw/zOCr9lNIRbvh7k8YFvcgceopdUQ2E0Os82SG1sjnHFoLuu8flBDpgGIEOPbTAEv2M/Mty/sks1D9kDFt9oExwo2WSc3wHAAD//2OzvNnKAQAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/config.post.json", "\"H4sIAAAAAAAA/6yQsW4DIRBE+/uKFUmZg/6+In2UYnMs57UwEFgKx/K/R+A7idaSCyQYmDfD3iYA9c5WLaBOImkx5o+FZ7Ib6UDiYg02XzVHU9YTXbCYNQbHm06xiD6XGNRHY8g1UYPEnzOt8tDQWhaOAf1njomyMBW1gORK/T7Tb+VMLfxrAgBQAS/UvQdx31sUVBPAd/elkXYbnMep/SmTa30sOQ69RdHofW/8ZgbVdGe33cfkF7F684FlyWH10qT9yVMBj+HPxzyGzriVF+Y03Byq93vK1Nb9PwAA///FKGHWLgIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/config.put.json", "\"H4sIAAAAAAAA/6yQsW4DIRBEe75iRVLmoL+vSB+l2BzLeS0MBJbCsfzvEdhWaCO5oGCYmbfLRQHoV3Z6BX0Qyau1Pyy8kNvJRBKfWnTlbDjZuh3ohNVuKXreTW5ijjVF/dYr5Jypd6SvI21y09A5Fk4Rw3tJmYowVb2ClEbjvdB340Kd/aEAAHTEE40sgHYoqBXA5/DmueEyuR+3vkYh32dw5DkOcjUYwpjyxU6qHckRu860qcuRxxakS3fLvwC3P1oeO/xxBPf6RE6vW2IL4U5R/Vx/AwAA///Ef4pl1QEAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router-policy.patch.json", "\"H4sIAAAAAAAA/7yQsU7EMAyG9z5FFBjbZu9LgI4RMYTGbX1Kk+A4Qzn13ZFz0qlIMIAQQ4b8tv/vty+NUvoenR6UXpjTYMw7MnbgZugD8BRLcLT1GE0eF1htNlLqKBYG6lL0OG59sjwu/TnHoFsx5C2BOMbXM4x81axzyBiD9Y8UExAjZD0opgK1TvBWkECSPDdKvVQxHVslq1I62BVuP0lPMAnMwYShInJvva9x7sxBNTLZheK9rrN7ezXMsNrAOB5NHUy2eNaDkv7256yb6SeU3O5UT3eK/rDUXxAtkd0epicmDPMXa6KDwMjb/5PZzt8AL/svcGJ3pDTy9o8AAAD//6YgUXDKAgAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router-policy.post.json", "\"H4sIAAAAAAAA/7yQsW70IAzH9zyFxfeNSdjzEq2uY9WBBifnEwFqzJBGefeKnK7ihg6tqg4M+A+/n+2tAVD/yaoB1FkkDlq/k1CHdsbeo0whe8trT0Gn8YyLSbpEHYcsyF0Mjsa1jyFJf0nBq7bwZI1YgOH1gqNca8ZaEgreuEcOEVkIkxpAOOORM75lYiyNPDcAAMqbBVUD8HLksf61VS9utzIH41S8Fifyhy31xrmjs3+6quobG2Bvr6yEi/FCY82zOJnsRA3gs3Pt9zWf0DtVWeDp2N8puGqe3zAaZrM+TE/C5OeuQO7dZNELyfr3ZjHzF8Jt/4Gu4GpLU87+EQAA//9lljpbzwIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router-policy.put.json", "\"H4sIAAAAAAAA/7yQsW70IAzH9zyFxfeNSdjzEq2uY9WBBifnEwFqzJBGefeKnK7ihg6tqg4M+A+/n+2tAVD/yaoB1FkkDlq/k1CHdsbeo0whe8trT0Gn8YyLSbpEHYcsyF0Mjsa1j1n6SwpetQUna8TCC68XHOVaM9aSUPDGPXKIyEKY1ADCGY+c8S0TY+njuQEAUN4sqBqAlyOP9a+tenG7lTEYp+K1OJE/bKk3zh2d/dNVVd/YAHt7ZSVcjBcaa57FyWQnagCfnWu/r/mE3qnK/k7H+k7BVfP8htEwm/VhehImP3cFcu8mi15I1r83i5m/EG77D3QFV1uacvaPAAAA//8Vnnc0zgIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router.patch.json", "\"H4sIAAAAAAAA/5SPsU7EMAyG9z6FFRjbZu/GE4DEiBhyjdv6lEuK4wzl1HdHzkmoSDdwQ4b8jr/vz7UBMM/kzQBmEVkHa79JqEM/Yx9RplSi562nZPO44MVlq6OOUxHk3K9OxqU/5xRNqyjZVlRWOp1xlFvmvCehFF1447QiC2E2AwgXrHPGr0KM2uGjAfis4Xp8qi0BTHQX/L1pb8ZJZR4nilWRexdCrfNkD6nVzS6WEEzd3dsbkFPAFxGmUxHMBg5sj5MrQTTTvfaPE/4ldcxue53ehSnOd+zi5mzuKAe47u3jf1Tc0dLo2X8CAAD//330Q3/hAQAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router.post.json", "\"H4sIAAAAAAAA/5SPsW7DIBCGdz/FiXZ0zO6tT9BKHasOJJydiwjQ4xhcy+9enaNIROrQDgz8P3zf3doBmGfyZgRzFsmjtd8kdEA/4xBRplSj52WgZMvpjFdXrFYHTlWQy5BTkeFSUjS9kmTJqKh0vOBJbpnznoRSdOGNU0YWwmJGEK6494xflRh1hI8OAMBEd0XTAXzufW5/rc2L+003YJzU63GiuNvK4ELYJ3uyTWrvbICtv7E4BXwRYTpWwWKgwXqcXA2iWawh9A86+JPPMbvldXoXpjgflPJoFzcX84tyhHXr/7+e4lpLp2f7CQAA//+U7xth5gEAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/edge-router.put.json", "\"H4sIAAAAAAAA/5SPvU7sMBBG+zzFyPeWSdyn4wlAokQU3vUkOyuvHcbjIkR5dzQGJK9EAYULz8858+0dgPlP3kxgLiLrZO07CQ3oFxwjypxK9LyNlGw+X/DmstXWwKkIch7XIuM1p2h6Bcm2opLS6Ypn+aw570koRReeOK3IQpjNBMIFa5/xrRCjXvDSAQCY6G5Yd5Xolmw6gNc6u7aEvZn+/mkYxllv8DhTrOY8uhDqlf9sU7V1s64dXzZOAR9EmE5FMBtosB5nV4JoLZYQ+jsd/MrnmN32OD8LU1wGpdzba9YflBPsR//3eIprLZ2+4yMAAP//SCylpfEBAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/enroll-er.post.json", "\"H4sIAAAAAAAA/6yOMU/DQAyF9/sVlsXYJhSJJWtXBnbEEHKPxFV6d9gOolT97yihQJEYGW64z/b33jEQ8ZVEbogH99LU9bu4rBF7VAn+nKcU9VBJrq0bsG+tRtI8jmtoVbJ5tbOceDVr/FAwe/LTDp1/sjZGccmpHe81F6gLjBtynbDMFS+TKOb8h0BExAZ9hW6hvjVdJETcnb+B6HG5K5e24++lL3BRyVwl9WcbEe8l3SH1PnBDmx/avn3T283N9cJPq796/XNGmN8pfAQAAP//xQj7Wo4BAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/enroll-updb.post.json", "\"H4sIAAAAAAAA/1yPwU4DMQxE7/kKK3CkyX2/gjvikNZe6irEwfYKlar/jhKEtOrBl/F43vgWAOIzY1wgnt37kvMPOx8IPyg18lW2hnpNLNlOZ/oslqmp1HrYOh5TF/N0MWnxZQT5tdNIkuOFTv6nFUR2llbqq0ondSaLC7huNPdKXxsrjQZvAQAg9mL2LYoxALxPT99f3h5c/8p4RGkdfKSV26RaKrXOhk95p+Y9A+AextzDbwAAAP//RlxT5w4BAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/enroller.post.json", "\"H4sIAAAAAAAA/0yOsU6DMQyE9zyFFRhpsv9PwY4YQuOfukrt4DhDQX135CChf/Dgs+/u+wkA8Zlq3CBezPqW8zcZnbB+YmK0XSZXvSeSPM4XvJWRkVVaS12GpesQji+eYfeOHiIfVzzbn1ZqJSPh0l5VOqoRjriB6cR1V/yapOjlbwHgfYn9+Op4AJHLDf83B1bcvaziTrwqRiqtLZynfFCzO088W4vL+wg+j/AbAAD///tU0vH3AAAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/identity.patch.json", "\"H4sIAAAAAAAA/5yRMW/6MBDF93wKy///CMmeDal7K6FOqIOJL3DIOafncyWK+O6VTQqORFu1Q4Z78Xvv5/OpUkr/R6tbpfciY9s07yi4BLuDmkB6H8nysUbfhG4PgwkNWiBBQQj1aKTb14fgSS9SkBxHSEl+e4BOLpqxFgU9GffEfgRORt0q4Qj5P8NrRIZEsKmUesniWB5NjEppMgNcp0TN0KcyCz1Srgi1cS7j/GsKtUnOJUXndPaeF5fAifYaOM2baVZKB2GknV7clFvKhJpVoDjMnOlY4XoOwGXKA7xhB6WyBs7SZ/QMlL2DlQjjNkqxEZXvbqIT3c4af7Eaw2yOj/06X/Tejszui8LT+Q91Ke5OC4aVHZC+f4yt9w4M/fwaN8beuACXpip956r6CAAA//+2rKeo8QIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/identity.post.json", "\"H4sIAAAAAAAA/5xSvY6jMBDueQrLd2UCfbpI199J0VWnFAYPyUTG5sbjlbIR776yA8RErLSbAgHf6PuZn1shhPyJWu6EPDP3u6p6R8Yt6BOUFrh1wWq6lugq35yhU75CDZaREXzZO8/lxTsrN1GHrz1EIVdfoOE7prRGRmeV+UOuB4o8uRNMAVKd4H9AghjgXyGEENKqDhJ3Uhy/0e91h1YWQhwTtc8Fbxl5+outEbQxkoYWbQriS2VMCv2jytAqMRNtyM0zrak9z4T2NMYSQoIN3Rw/IX890FwXQv6CN2wgRw5ACRqR48IYLDljOrC8Yp/ZZHMeERuMmTXngCuDuvOZF0DWY+2cAWXlXBs2C16jnplfnzTqddnQ6/p11eCBHjtM2kX+Hp7OaGWxU9Pz4DS0Kpg4pFYZDwsdcgb2zIR14MVgM1Zcx+b7p6iI1PV3e0h3tn3sdD5MdfrE8Da8YBflcpciPkNRfAQAAP//RC/mxRwEAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/identity.put.json", "\"H4sIAAAAAAAA/5yRMW/6MBDF93yKk///EZI9G1L3VkKdKgaDL3DIsdPzuRJFfPfKBoNbZWmHSM6z7vfeO58bAPWfjOpBHUSmvus+SWiJZo+tQxl8dIZPLfku7A446tCRQSckhKGdorTH4J1aJIycJkwcvz3iTq6aNoaEvNP2hf2EnMZUD8IR8z3jeyTG5P/WAAAop0fMs4VYznofypnCyozkVAOwyZiphp8rUPlLLRmHFM/gQC6HCq22Nhf411Vqlyfz2KUOUrFK1SBMbn+LBaDQxfFeJSuvAfl+D6Ce8IN2WCtr5CzdlM03Y/YWVyJM2yhVOcg1dLSienDR2sXvW2pmfXoe1rnCMkF+dE4LnzU8X/5gl3AzLuUpZ5a79d6ido/tPhIM2ga8cpr0XZrmKwAA//8qeCDFygIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/identity.service-configs.json", "\"H4sIAAAAAAAA/6yQsU7EMAyG9z5FFBih2fsU7IghJO6dT20cbBepnPruyOVURerKkiif8n/+5XvnnH/G7Afnr6p1COEHFV8hX6AvoCMtJfPaIwVJV5ijhChCCaMilb6SaH8TKv7FRLpWMFNkjusfQoVZ/OBs0OnZROjzBkn3zM5jzmgj4vTGVIEVwXLKCxx/GL4WZLDy7w/mnBfgb0xwqJzzicqIF/8AH4egtur7WdFC2xPDaF0zjFj2dtLHadoX8BQaGkqcwR/R7Vzlv8xde9u5dVv3GwAA///IuwBV1QEAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/service-edge-router-policy.patch.json", "\"H4sIAAAAAAAA/7yRsU70MAyA93uKKP8/Xpu9LwE6RsQQErf1KU2C4yCVU98dOSedigQDCDFkiGN/n+1cDkrp/+j1oPTMnAdj3pCxAz9BH4HHVKOntcdkipthscUUoFd00FI6SpWBupwCurXPlt3cn0uK+ihgXjMIOT2fwfE1Zr1HxhRtuKeUgRih6EExVWjvBC8VCaSjx4NSTy2Y96nSs1I62gVuN5mCYBSZhxFjU5TehtDa+Wd2USOVXawh6Fa7Ha/AAouNjG4P9TDaGlgPSvKP33fdoB9UsrtTW90phd1Qv2G0RHa9Gx+YME6fjtn+7+/FbKcvhJftBzrB7S0HOdt7AAAA//+t5YFY0QIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/service-edge-router-policy.post.json", "\"H4sIAAAAAAAA/7yRwU4EIQxA7/MVDXrcGe7zE5r1aDzg0NnthgUsxWSczL8b2KxBEw8a44EDbXmvLWsHoG7JqhHUUSSOWr+RUI/2gINHmUP2lpeBgk7TEc8m6YT8ShPWkp5DFuQ+BkfTMsSQZDil4NWucGWJWMDh+YSTXGLGWhIK3rh7DhFZCJMaQThjzTO+ZGIsDT12AADKmzOqDuCp5mP7am0qrrcyD+NcvBZn8tWWBuNc7exGN1F9ZQNsuwsr4dl4oanlWZxNdqJG8Nm53c81H9BPqrLAfd3fPrhmnr8wGmaz3M0PwuQPfYF8HbN+4v+LxRy+Ea7bL3QF11q6crb3AAAA//9c9J3G1gIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/service-edge-router-policy.put.json", "\"H4sIAAAAAAAA/7yRwU4EIQxA7/MVDXrcGe7zE5r1aDzg0NnthgUsxWSczL8b2KxBEw8a44EDbXmvLWsHoG7JqhHUUSSOWr+RUI/2gINHmUP2lpeBgk7TEc8m6YT8ShPWkp5DFuQ+BkfTMsQswykFr3YFK0vEwg3PJ5zkEjPWklDwxt1ziMhCmNQIwhlrnvElE2Pp57EDAFDenFF1AE81H9tXa1NxvZVxGOfitTiTr7Y0GOdqZze6ieorG2DbXVgJz8YLTS3P4myyEzWCz87tfq75gH5Slf3t6/r2wTXz/IXRMJvlbn4QJn/oC+TrmPUP/18s5vCNcN1+oSu41tKVs70HAAD//9phr5vVAgAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/service-policy.patch.json", "\"H4sIAAAAAAAA/7ySMU/7MBDF934Ky///mCZ7RsQOgrFiOOJLe5VzNvYZKVT97shuaF0JBhBiyHAvfr/3fPJhpZT+T0b3Su9EfN91byS0RrPFllFGl9iEuSXXxWGHE8QuYnilAdfeWRrm1oMMu3YfHesmw2T2mGnueY+DnDQwhoQcg70PzmMQwqh7JSFh+R/wJVHA3GKzUuqpiL4+mnsqpRkmPE+5ecAxhxkciUtEbMHaUudfV6lddq45WauL99icgEvbM3CZN8uslI4SiLe6uSgXylK1qMhpunbeEtjad0NsqjljPihXnSJOwEJD3cvgCMmK7out+f79z9CrKDLIQjI/OFut+TfyIASY78bHsr1PFr+8or8PFth+EXg4/iAu4+qUVf6O7wEAAP//5IOqolcDAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/service-policy.post.json", "\"H4sIAAAAAAAA/7ySMU/zMBCG9/yKk79vbOM9I2IHwYg6mPjSXuWcjX1GClX/O7JpKxeJAYQYMvjse573Tjl0AOo/WTWA2omEQes3Elqj3WLPKJPPbOPSk9dp3OFskk4YX2nEdfCOxqUPPkm/T57VqrBkCVhg/nmPo3zUjLUk5Nm4++gDRiFMagCJGet9xJdMEUuIpw4AQLGZsfaeiR3Apr4NLeHQvD6fyjwRp5LB4kRczak3ztWU/3RT1bWzth1bW8M6z5MkEm9PmQAUcp4veWvlloy73AOoG2KrTsfNlSPhbFhobD0WJ5OdqAE4O7f6/igX6JWKLLKQLA/eNRv7DZ+J0Sx302Pdy7pA1Kch62/y92Ix2y+Eh+MPdAXXWrryHd8DAAD//9FavMI4AwAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/service-policy.put.json", "\"H4sIAAAAAAAA/7ySMU/zMBCG9/yKk79vbOM9I2IHwYg6mPjSXuWcjX1GClX/O7JpKxeJAYQYMvjse573Tjl0AOo/WTWA2omEQes3Elqj3WLPKJPPbOPSk9dp3OFskk4YX2nEdfCOxqUPWfp98qxWBSVLwMLyz3sc5aNmrCUhz8bdRx8wCmFSA0jMWO8jvmSKWDI8dQAAis2MtfdM7AA29W1oCYfm9flUxok4lQwWJ+JqTr1xrqb8p5uqrp217djaGtZ5niSReHvKBKCQ83zJWyu3ZNzlHkDdEFt1Om6uHAlnw0Jj67E4mexEDcDZudX3R7lAr1RkkYVkefCu2dhv+EyMZrmbHute1gWiPg1Z/5K/F4vZfiE8HH+gK7jW0pXv+B4AAP//hjEdGDcDAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/service.patch.json", "\"H4sIAAAAAAAA/7yPsU7DMBCG9z7FyTCm8Z6NJwCpY9XhGl/Sq1w7nM9Ioeq7I7sVDRIMMDBkuIvv+/7/vAIwj+xMB+agOnXWvrPymtxIbSAdYg5O5pajTf2BTphsInnjnlI7ofaH9phiME3B6DxR4cT9kXq97tA5Vo4B/YvEiUSZkulAJVP9L/SaWaj4tyuAXV1Oy6clIYAJeKLPqWQWGorM0cChKlKL3tc4D3axteVyHbL3pt5emitQSU4cUKNsVFBpnJf4W5ftbQYwSYXDaJr75s4E2H1hS/T0pCq8z7ooATUuZq+mg3Ld/L4NiuD8PGxqmm9q9TEMPP6vU/En4fnyB13BLS2r8l0+AgAA//+PRRdSqgIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/service.post.json", "\"H4sIAAAAAAAA/7yPMW7DMAxFd5+CUDs61u6tJ2iBjEEGxaIdBorkUlQBN8jdCykxog4d2qGDBpLie5+XBkA9k1U9qKPI3Gv9SUIbtBN2HmUMyVteOgo6Dkc8m6gj8gcNGLs5ROlOMXjVZoosM2ZMOJxwkFvPWEtCwRv3xmFGFsKoehBOWOaM74kYs37XAAAob86oGoB9mc/11qX6sVY5PeOYvRZH8sUWO+NcSfakq65e2QDX9sYS5DN5I4G3wkZwWmry/aLdvQZQUZj8pNpHxyfn1L3cf2NzcPgiwnRIUuWHktQkJ6qHvN3+/hDDbJbXcVvSbB4RVvUQ/EjT/zrF/CS8XP+gy7ja0uR3/QoAAP//rYIGpa8CAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/service.put.json", "\"H4sIAAAAAAAA/7yPMW7DMAxFd5+CUDs61u6tJ2iBjEEGxaIdBorkUlQBN8jdCykxog4d2qGDBpLie5+XBkA9k1U9qKPI3Gv9SUIbtBN2HmUMyVteOgo6Dkc8m6gj8gcNGLs5SXeKwas2Q2SZMVPC4YSD3HrGWhIK3rg3DjOyEEbVg3DCMmd8T8SY7bsGAEB5c0bVAOzLfK63LtWPtcrhGcfstTiSL7bYGedKsidddfXKBri2N5Ygn8kbCbwVNoLTUpPvF+3uNYCKwuQn1T46Pjmn7uX+G5uDwxcRpkOSKj+UpCY5UT3k7fb3hxhms7yO25Jm84iwqofgR5r+1ynmJ+Hl+gddxtWWJr/rVwAAAP//WGvSsq4CAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/session.post.json", "\"H4sIAAAAAAAA/1yPvU7FMAyF9zxFZDGWZO+IWHgGxHBpzL2uWifEDlJBfXcU+kNgPF98vthfxlq4owC9hZtq6r3/JKV7DFd0jPoWC4e8OIpehhvOF/GCIhRZXIqibpTI0FWLLgmrJr6OOOjGUo4JsxIK9Lb+ZS0I5g8a8CmcqCmLZuIr/OC1M+3b/9nnPduz1f0SLtMEe3w5OCCX+W/zkS5T23sgDk2umsOy7WT2vSDje6GM4fQ1h5k6vn4HAAD//4TdzLNcAQAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/terminator.patch.json", "\"H4sIAAAAAAAA/6yRMW7DMAxFd59CUDPG9u5TdA8yKCJtM1AklaKGtPDdCylGY69NBsPgJ/E+9fnTKKUPBHpQehaJQ99/k1CLMGHnUcaQPfC9o9AnO+PNpF6Qb+SNBO6iETt31xS8PhaQ3CMWUrhc0cpDMwAkFLxxnxwishAmPSjhjLXP+JWJsWxwapQ6VzFuR8uOZTBkQf6rn3antVZKJ2HyUzVeFZ+d02t5rv/l0dUX8lCG3wY0AIwpvQ9oQ5It7cA4lngBR/I11NQZ5+oBPvqNurlRWyE7bGS0COgtvgzfoHYWYqZdDoCjya4+Zjn+w9FMqX3mtDTlW34DAAD///DdHuy8AgAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/terminator.post.json", "\"H4sIAAAAAAAA/5yRQY7yMAyF9z1FlJ8ltHtO8e8Ri9C4xSgkGdsZiUG9+ygZOiSaDWLRhV+fvxfb904pvUGr90qfReJ+GL5QcAd2ht6DTCF5S7cew8DjGa6GBwG6ojcSqI+Bpb9w8HqbOXKLkEHhdIFRfjRjLQoGb9x/ChFIEFjvlVCC8p/gIyFBfsChU0opzUCfOEJpz4aQBGitjLUEzLpT6lj6Y029t4RVqJ7GQuhnXeSlTXjRfUJvs/jXfnjU6rdx+1R8ck4/ymMDXEd6MX8MLLV3QzBlr4UJfVk198a5cpZ/Q6VWh9sVSIONBCNY8O3a3oJXqCZCzNxMaWEyyZVhlu0biWbm3XOtS5e/5TsAAP//25UF0NECAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/terminator.put.json", "\"H4sIAAAAAAAA/6SRPW7DMAyFd59CUDMm9p5TdA8yKBLtMFAklaQKpIHvXkiNGxldinbwwOf3Pv7o3imlN+j0XumzSNoPwwcK7sBN0AeQMebg6NZjHNie4Wp4EKArBiOR+hRZ+gvHoLeFI7cEBRRPF7DypRnnUDAG418pJiBBYL1XQhnqf4K3jARlgEOnlFKagd7RQo0XQ8wCtFTGOQJm3Sl1rPnUUu+ryFI3k7EQhklXeX4gTxhcEX/aD49afQe3TyVk7/WjPK6Ay4y/7G8jS+vdEIzF62DEUG/HvfG+3vllaNTmJXYVssImAgsOgoV/wxvUqoWYabWlg9FkX5eZt3/oaCbePc86d+WbPwMAAP//sqYrZaICAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/transitRouter.patch.json", "\"H4sIAAAAAAAA/5zOMW7EIBAF0N6nQCTlGnqfIleYhWE9KxbQMBSbyHePBkuR6xQUfPQf/2cxxn5StJuxu0jbvP8moRXjA11BSXWUyG9H1few4wu6T3BnCivXIcjdNZCwu2evxd4Uk3dD1er9iUHODGIkoVogf3FtyELY7WaEB873dk11kjG2wAv/bjqSMakbMVGZWneQ8/z5w19Sr821jJzt7B63ExR49P+B2ryCi55j+Q0AAP//uFLZijwBAAA=\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/transitRouter.post.json", "\"H4sIAAAAAAAA/5yPsXIDIQxEe75CQ1L6oL+vSJ9JgQ+dLQ9GRBKF4/G/ZzjHM1enoGCXfbvcHYB/p+xn8GezNsf4Q0YT5hOGirZyr1lugTjqcsZr0rimo9AyCXdD0dBYLVyUqz8Mlt0aDhgfL7jYU0s5kxHXVD6EG4oRqp/BpOPmC353EhwjPh0AgK/pit4BfG1+26fuuxev2/iD4Dp6M65UtzYNqZRt2VvcqfHFBngcnixLJ/0faySn2kv5A7pxHu43AAD//+YEIOVWAQAA\"") + _ = packr.PackJSONBytes("../embedded", "api-schema/entities/transitRouter.put.json", "\"H4sIAAAAAAAA/5yPsW7EIAyGd57Coh17sOcpulcduGDuHCVAjRnSKO9eQRWJ+QYGjP/v/zgUgH4nryfQT5E8WftLQjf0DzQRJaQaPe+Gki3zEzdXbHB3pvnGqQpyMbmKWUqK+qOhZM/YWOm+4Cz/M+c9CaXo1k9OGVkIi55AuGJ/Z/ypxNgcvhQAgI5uw55tRPcoWgF89908Eo5h+7q17zCG5uAxUOzNxbh17ZZvdpjanuyxc2x7iXV5ApyqnVP9BQAA//+mADgbXAEAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20180828083820_init-schema.down.sql", "\"H4sIAAAAAAAA/1SNMcvCMBiE9/dX3BDI9y3+geJQk7c2YFNpInYrQaNmaAuayV8vtCB4yw13D49uIQTteG8sEWAqcG+cd3+EJY4PrDxel0ccwzCFMaLq2gZpus3PMeQ0T8M6btbKAeeaO/5BtpDvlNMQr/coCfgnwNdsFwn3rE6eIXXXHuFUzU2J7x2qdKrULAsC2GqYqiBiq0mI4hMAAP//7wIpBL4AAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20180828083820_init-schema.up.sql", "\"H4sIAAAAAAAA/2SNsUrGMBzE9/9T3BCILr5AcIjJ1Qb8UkkiflsJGjVD+4F28umFFgTxlhvufvz8BKXkjvchigBhAM8hl3wl2JP5QFfw9fLRljqvdWkY0nRCX98un0vd+mWdj/HmqK3ieWTiH+QW+rtvfW6v700LcC1AGRl3Cc90T4XQPk2PyG7kyeL3Dmezs57aCMDoEQYjwuhFKSPiEm3hP8r8BAAA//+lS2Hg2AAAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20180905100347_initial-tables.down.sql", "\"H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20180905100347_initial-tables.up.sql", "\"H4sIAAAAAAAA/+xZTW/jNhC9+1fwtg6wKZxgU7Tbk5sohdHUab020D0RtEQ73MikINFxskX/exFbEknxQzJFL4pFeEpMcjiaee8NR7qeReN5BObjX+8i8JVwAnGyxj+sMYM5XhNGCzAcAEASUI3FYnID/pxN/hjPPoPfo8/APKb3czBd3N29HwBA0QaXPz+hPH5A+fDy6urMsrO5O84x4jiBiANONrjgaJOBHeEP+3/BV0YxuIlux4u7OaBsNzxTdm+zpMdujtZF6dKXglGHx03Pa6Pv/vn3Hfj4cb9/OTj7ZTAYWIIeo2LQCLZpbLck8U+AaYikjLomZUXoGudZTih3Wby6uOycZpxzmOGNZSnHz8aTHBZJAZ9wTlYEGwO6ZCzFqDWnssWDuRhxwijk7BGruz2emhQQbTmDMYKY5ixNN5hyiClapq9ee/hICsg4txn0tIi2/EEyogwPixKlTaMfzQNZlKhvGuHkoFSDxXTy1yICk+lN9DeIUQElikG4JTTBzwMA7qeqYoChtM6lLiTBlBP+AvlLhjWhCaPqF6POAvLdqbopjWrMIUlsiVQXgiFJJJOWTBI9iyFyqWb0iJKgPAMkycGP7rEtpSbBK7RNOUTJhtBaXKq4r1BaGEpZU672e6vhYUMTqBCSFEKEvgleSResEoHT8d08mrlgCsD45gZc308/zWfjyXSuHqRxZPUIbu9n0eS36R6+wyayzsAsuo1m0fQ6+tRKIiuNClwUpguuD3/ku4AP7CvP/Vgjo7UnUHtiNBw8zZiqcqYjqpqBUiwdSGoDEdFUWCFKfdo+8TamCITtlzkkPU63Bcf5W7MVHEe2BhdxvEMvOvlBn9iXaYSqwX3D1v1h7A2bRz7NfZq4r11+cFhyt2ZdOzJnN+ZX3xlNCVWXeRgSLzlgk3LdH0tqsqQi4G/ky64O6pEBlox0YXGrEfyckRwXHkbM7V2wri5YM3fqalWJjF6tqhkoFEMvVmLOUqtE1XDdwzp4oTBBd0SZtviivDF0ti9ZzjiLWappby1vozOX7r4Vu2OL3QotcxJX1+K3oIcNujvqxhtG/w7d5yogUPBa7+TEd00doyuyrqeChNBQL/oXiv4V4tSloQSHrsnlBFSzpWuyOm8RZZX4ZT9sbYfzJxLrAhECrh5oTWgBH1jBD4YEWD/85LqwNgxkLC9vDoRyvMZ513xKfClD4dGWlwZK1pyILb3J0psrp+/5D8A09fyHGVinysqTForU7Dg/B3O0TDEgBUhwluP4NVQAFYCtwOXo4ufz0Y/nF6MWEkH1jlP9+golGUdyTKsdTWmu1rQHSBxqjZRYAmH2qFB6KJx8LzsT+Fhxip4qMWfJlZCo4H5JT6w7JofD7JmU704qC5UXPhI+9vCwvFJQ5jrgoTrD/vzVCjcapD4k5JnfEApHeBW0IbOhgGK+Y/kjtL2C7vcG2qNUlY54vn9u4ve43U2EH7n7e2snzEhuIkZHcnMFFDk18auas/KrQqaLX15enZz1Hl4FZb3pg4F2ovPDga4PbR8QUJbBHaLSF+EWDdEu6y139P8V51rY5maZWkLd8YSNb+3iZ6CXau0rXodabThHQ6u+Rq/XYs172Y/gBwf/uhbUO/GT7pyYs/hWUaiteFeG6r6kAQwNF7brXQdY2Huf5go3JCRlDXlm/ccJ1dzDraAw+C8AAP//2ry6/CIrAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20181016142716_default-data.down.sql", "\"H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20181016142716_default-data.up.sql", "\"H4sIAAAAAAAA/8zXXW9bNw8H8Pt+igPfpAXCBxJFiSKeq6DNgG5tNyzNBuwmoCQqPUBqe/Zxh/bTD8dNh6xvW98WX8mCb36i+Kfsh0/OTn9+Ojx88vTHYfFqnMYLa5e2+N9ibLacxunlxfRybdvFcHcxtsXxsFjqc5vXujGdrF3oNO926/Zmd+/OLyePzk/PhrtHkdk76gjeggIJMaggA4ccilovVfToeDg639rm6Hh4cPrdyfmjp399uPf/O3e+ra/E0AsJRF88kGYGJSOw1lTYJxV2s++BvRir3YawUkupS4NuPgN5CpBjC8AUUGokzFhm4ZltPoe43qymVV1dfYrueFhMerm9qZyutjPi9fI24D+V/L4b60y5Xm/VMtX1vir75aOSj1i6ls1YP7mF3sN5NcFat9vp2Wa1u3w2y3762/bzavVVfUudxhdzEx/9Nk7j8OTN9kto71HdMF+8/qauln28/FRx74V88QQtBgFqxUFO0YNV3xKSyw7Du3V+9yI+eLy3muTDR7201cXGLsfV8gsvQZ1hRekggghEIYJmZYitdC5NMDDPZ7ivS2063LfltNGrz76ir+eulEQ4gHexAjXzID146L1Xx0yZ+35Onp8Nv9p2un0whuSIpUGtLgMhEpQWE1AoqolRe9g/Pd/rWpe3z7XWXMquQ9BCQGIJpJUINWWMuShl12buyW47N8Sot0+O6DW0IpA9OaAcCZQzQvK1xBa6Odqn82y1m54NJ89tM9YDYOdAqFUbkJEAOcmQqRlklG4lxhbivjF+WG3sALglxoTFR+jdCpB4B6V7AnXBJe5SFe06eI/H9sdBZC9ZN8wagYkMKFGD4omBHKP1wkm6uzHkDmNgeFdTT5RBsPCcQIRikqAnDJFNI2Of0ae7zWptB4JmFEoYPfheGaiEAjmmDDVKI8Zg7Gg/NvphhI8dhdxSAOESgHJBUCsRiktJJWKimG4U+VQPocgWgrQkAtyjBzKpoFgVsmd05rh7SdcR3M+6fxB/e7BzMSd2ARJTBqqcIYtrYF3Rp47eeriRv8Oocgqd0bkCzEJAmuYkqoKGZC2EbLXs/8uebA/h8evirVYNkHrGucQFshcPps6FVI1L1OueOIzykhcU4wwpMQGxm3uiIUiRQKaSMuIMfjy2dnUoyYvNOcJSIPUWgSQKiFOGVKqyMwyd3yTvX/1S/jMAAP//ko/Ws40RAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190111165646_add-gateway-protocols.down.sql", "\"H4sIAAAAAAAA/3IJ8g9QCHF08nFVqMosyYxPTUlP1UtPLEktT6yMLyjKL8lPzs8pBgQAAP//QZ+dpyYAAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190111165646_add-gateway-protocols.up.sql", "\"H4sIAAAAAAAA/6ySwW7iMBCG73mKuZFIq9UupxZObmKqqMFBxjlwstzEDS4QI9s0KlXfvSJSQipKS9XOzRp/vz95JqQYMQwM3SQY9sopLotS/i2Fk7V45lujnc712nq+B6AK6CrL4ghmNJ4iuoA7vICPi6QMSJYkfzyANvQQ0+BfVx9vXQ78kzD5Uhh/+C+4FFdVaaS1fGfWHX71/3r4SUAfz40UThZcOACnNtI6sdlCrdyyOcJeVxIiPEFZwqDStR+8w3fb4ie4E6VtrR6trr7xdV3q4OV1AKNRw997wdjzUMIwvWD2ACiKIEzJnFEUEwYnV/hxtpw/rGCSUhzfkmYx/GMvAIonmGIS4vnpixZ8VfyyV29pTsV6zTNmXVCrdsatkq7WZsWttFbpykJE0xmEaZJNCeTrnXXScFWMvbcAAAD//8IbvktwAwAA\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190116092021_add-gateway-hostname.down.sql", "\"H4sIAAAAAAAA/3L0CXENUghxdPJxVajKLMmMT01JT9VLTyxJLU+sLFZwCfIPUHD29wn19VPIyC8uyUvMTbUGBAAA//9B3XIDNAAAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190116092021_add-gateway-hostname.up.sql", "\"H4sIAAAAAAAA/3L0CXENUghxdPJxVajKLMmMT01JT9VLTyxJLU+sLObidHRxUcjILy7JS8xNVQhzDHL2cAzSMDU00rQGBAAA//8EAu9EOgAAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190429142248_add-enrollment-table.down.sql", "\"H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190429142248_add-enrollment-table.up.sql", "\"H4sIAAAAAAAA/7SSwU7DMAyG730K37ZKCA0kOIyHibLm72qaOlXiMjrEuyNoC5k0wZDAN0f5P3+JXEVYBandedCRlQ3cHteQGLzvIJqKdUFExI4+axjy7oeSoCSD98VyUAVJGi2LUjbG9C3GIg/2kTsbR2oxXs0KEGUdDbv/UcgGGFO3JzYRNSKkQsq+aQ4w0mSooYXMgScbq8bG9c1mU15sOGE6aBPcKeb27v63GDz3HJGMVSLlDklt19OBtflo6RgEF2CmFXHfYxxqO3glCYd1eRYz9O4vMGr3afF8TEHOPmDBrF5eV9vt+7Xd1xKUD8VbAAAA//9/FrPN9gIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190502145944_add-authenticators-table.down.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1UssLclIzSvJTE4syS8qtgYEAAD//4CpwcskAAAA\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190502145944_add-authenticators-table.up.sql", "\"H4sIAAAAAAAA/7SRQUvEMBCF7/kV77YtiAdBD+uPCbPJdDu2TUoycemK/13ctlpBEcGd2ySP9728uMSkDKVDzziLimV/5Fsq2nJQcaQxZVMZABCPjyllu/06ISpC6XuzHrgYsiaSoPjKsmPHE8YkA6UJHU83C/tdopMVf0X2hmJt0yFxw4mD47zpZhEJ5znawNrGJdAzJddSqu7uH+o/RJuN5r/wlhRQGTgrDSNOou1lxTkGhueGSq8I8VTVPxiV0f+PkdIxrzdPOYZvH7Ea7V5ed9jvL8LDZ+v1ozFvAQAA//8sfwwlZgIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190525131603_add-network-session-certs.down.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1ctLLSnPL8qOL04tLs7Mz4tPTi0qKbYGBAAA//82ylRcKwAAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190525131603_add-network-session-certs.up.sql", "\"H4sIAAAAAAAA/6SR3UrEQAyF7/cpcrddEEHBm/Vhhmwn7ca2mZKkW7viu8u0ULEq+JO7OXO+yRlOqYRO4HhqCa7sHCjWdCvkY9ImGJlxklCSuu2KHQAARxgGjiDJQYa2ncU8ZRJzRRaHL/nQNzSt7jy9coc6QUPTzXyx5f66K2xECxxDqJoP25UqUpKS7Puf25IrvwlOz74mWfSKpSbtNee4oJZn1OLh7v6wsV2w5RgqTR04d2SOXQ8j+3k+wjUJQaQKh/Yz5ek3zNJnDOg/oNJYbJMOffwX71gbPFmS1bV/ed0fj1k6vdd4eNy9BQAA//+82trHegIAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190710140702_add_event_log.down.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1UstS80ric/JTy+2BgQAAP//TM0ZTiAAAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190710140702_add_event_log.up.sql", "\"H4sIAAAAAAAA/6zTzU6DQBAH8HufYm6FxHgw0UN9mM2UndK1MEt2/7RS47ubQEGwagQ7N3bIbz6SyYIwhMDbQujs4IzYXO7lKApT+DyukhURkbM0jbq+evot1IO0LopV/5B5jQjsFPRZzFQHaagKruTQ0EGau/Z/NJVMtCOHbM8heXh8SmcU7zTO4IMZm3O5L9R4EYspUTg047b+S43aWkztfCgZEGtKiZFzIcgr/kAM1GT1HWcigtO8zd+Cswy+5OdyAzUyuniJXrdLpO6irOG+EbhSIris6OSwbz/p7FXIyo7rAqT+lKQ/jFhX9oYaOI9XU347T6+t397XtNlc1jFccfr8EQAA//9L+SBxOQQAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190711152500_add-service-hosts.down.sql", "\"H4sIAAAAAAAA/0opyi9QCHF08nFVqMosyYxPTUlP1StOLSrLTE6Nz8gvLim2BgQAAP//Ai0zFCMAAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190711152500_add-service-hosts.up.sql", "\"H4sIAAAAAAAA/6yR0UrDMBiF7/sU57KD4QvsKrZ/JZilkqbgrsJcsxlaktEERZ9eVibbdOjNbnMO5/vIXyhimqDZvSB8uuSM7Xb2LtrxzW2seQ0xReQZAHy/uQ5oW15C1hqyFWI+xa6zPrn0ccgv4my2yDImNKm/MdMKK0sUtWy0YlxqXBSM2fd4UnzJ1AqPtEJ+Upqf828GPO0bs+1R1Yr4g/zJnkFRRYpkQc1vVkR+Q6P9GFLYhOGq0vkXXHc6Ntx/Vt6m9zD2JtoYXfDxKCXapQSvptPSM290g4OW8zu8hDDYtUdJFWuFxnY9RLvIvgIAAP//QNzU42ACAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190715170856_remove_fabrics.down.sql", "\"H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190715170856_remove_fabrics.up.sql", "\"H4sIAAAAAAAA/5yQwUo0MRCE73mKvu3/X0TEg5CHCT1JJxM2dg/dnZX16WUVB/Qgo+eq76MoHE4KjssgeO3eE5VGd0Z66ZksAAAUlQ2ysLliZ4fPMFVctOfUS0r1HMNx1ZjPDDsdwx/RLFx7O4ZjKTCoYb6mDc18VZlthUVkQKGKczhUHEbA4sBzjONe4rJJZ09YipIZXFDzivrv4f7x6f8vPO1GJ5V5q3+R7Kv2safJZ5YXPsUQwvs53/0fL1n8KU1+3cjiWwAAAP//bqwnJQYCAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190729141132_remove-gw-status-col.down.sql", "\"H4sIAAAAAAAA/wTA0QnCQBAE0P9UMRXYgMWEiTcJC+MueHuIVp9Htz5oHhb+0bFrXHpcbH35m+AYeJXXOxFzr3SkcFRZTGQ1ctkYOrncOOmp57bdAQAA//90sbWwVQAAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190729141132_remove-gw-status-col.up.sql", "\"H4sIAAAAAAAA/0rMKUktUihJTMpJVajKLMmMT01JT9VLTyxJLU+sLFZIKcovUEjOzynNzVPILI7Pz8vJzEu1BgQAAP//kEeLtzUAAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190731134126_drop-gateway-protocols.down.sql", "\"H4sIAAAAAAAA/6zSQU+zMBgH8Duf4rkNkjdv3BITnac6OkNEZrpy2KnpaGVVoEvbuTjjdzcjgW0ydUafG3ngxx/6HxGMKAaKrmMMG+UUkyKX/3Pu5Jq/sKXRTme6sJ7vAQAoAe2kaRTCPYnuEJnBLZ7B8UkmFJI0jv/VQANvoRr4fg6BJtFWeOYmW3DjD86C0wFV5UZay1amaIGL/uXgC+IQyIzkTgrGHYBTpbSOl0tYK7eoL2GjKwkhHqM0plDptR98AFZL8TvA8dw22R6trn7wE1u39/rWg+Gwfn7uBVeeh2KKyQlN2HIoDGE0SaaUoCih0LmJ7c6ZsYcnGE8Ijm6Suib+bhcAwWNMcDLC0+47LfhK/HmyvQJ1o+0tP8nWQk04XjhpwPF5IY99AhcCMl2sygoW2rqKlxLa3p33B8F7AAAA//9duGeiggMAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190731134126_drop-gateway-protocols.up.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1UtPLEktT6yMLyjKL8lPzs8ptubiSswpSS3CpbJYAWxOcn5OaW6eQkZ+cUleYm6qNSAAAP//wNeyyF0AAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190826091630_remove-service-protocol.down.sql", "\"H4sIAAAAAAAA/5SRywqDMBBF9/mKWSpIKd36MSGNow2mmTAZLfbrSyw+QOhjlsnck3OJZTSCIObqEZ5OnMamw1NCHp1FHZmELPmkCgUAsJy7BobBNRBIIAzez5d5LIUkbFwQODD0lta67ddMHsYWGYPFdLRI1by6cPLjo2F7M1xczuWfDjvKbxJr9G3xEa7jBozs7oYn6HGCYmte7XuUqqyVMl6Qv38B0CPkPYJISTrGVCv1CgAA//8X4WOAwAEAAA==\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20190826091630_remove-service-protocol.up.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1StOLSrLTE6NLyjKL8lPzs8ptgYEAAD//wnoAAMnAAAA\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20191008091800_remove-protocol.down.sql", "\"H4sIAAAAAAAA/8SQQUvDMBzF7/0Uj1zawhgi7DJPVSMUayddKuw0Yhu2yNrU9j8HE7+7pNQOIu4i6P/y+g6/8su7yXgkOER0nXAcNem1Kjdq2rSGTGF2HQIPAHSJr3uTbbGVbXB5EeIxix+ibIV7voJz6UIgzZNk0vO1rJTLz2ahC/3IF62SpMq1JJCuVEeyanDQtO0rjqZWuOV3UZ4I1OYQhA6/b8pf8SQ33SD20pn6jLfrP/7Wf//wMZ/3/LMXXnlenC55JhCnYgE2bs+mbFyfIWC6ZBMwO6DN0xC2nZ5lm5VkofcUJTlfIvBp1/kTDDFofP/4C5PXvS6sypD/6kJF06/SxxmTzwAAAP//G933TRoDAAA=\"") + _ = packr.PackJSONBytes("../embedded", "db/postgres/migrations/20191008091800_remove-protocol.up.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1Ssoyi/JT87PKbYGBAAA//+IBLuXHwAAAA==\"") } diff --git a/controller/env/authinfo.go b/controller/env/authinfo.go index fb97a85cb..0ebe9b290 100644 --- a/controller/env/authinfo.go +++ b/controller/env/authinfo.go @@ -16,10 +16,6 @@ package env -import ( - "github.com/Jeffail/gabs" -) - type EnvInfo struct { Arch string `json:"arch"` Os string `json:"os"` @@ -33,28 +29,3 @@ type SdkInfo struct { Type string `json:"type"` Version string `json:"version"` } - -type Info struct { - EnvInfo *EnvInfo `json:"envInfo"` - SdkInfo *SdkInfo `json:"sdkInfo"` -} - -func ParseInfoFromBody(body []byte) (map[interface{}]interface{}, error) { - container, err := gabs.ParseJSON(body) - if err != nil { - return nil, err - } - return ParseInfoFromContainer(container) -} - -func ParseInfoFromContainer(container *gabs.Container) (map[interface{}]interface{}, error) { - info := map[interface{}]interface{}{} - - envInfo := container.Search("envInfo") - sdkInfo := container.Search("sdkInfo") - - info["envInfo"] = envInfo.Data() - info["sdkInfo"] = sdkInfo.Data() - - return info, nil -} diff --git a/controller/internal/routes/a_routes-packr.go b/controller/internal/routes/a_routes-packr.go index 09de65312..987c9cb1e 100644 --- a/controller/internal/routes/a_routes-packr.go +++ b/controller/internal/routes/a_routes-packr.go @@ -7,5 +7,5 @@ import "github.com/gobuffalo/packr" // You can use the "packr clean" command to clean up this, // and any other packr generated files. func init() { - packr.PackJSONBytes("../../../specs", "swagger.yml", "\"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\"") + _ = packr.PackJSONBytes("../../../specs", "swagger.yml", "\"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\"") } diff --git a/controller/internal/routes/authenticate_router.go b/controller/internal/routes/authenticate_router.go index 302f030e5..b64eb1871 100644 --- a/controller/internal/routes/authenticate_router.go +++ b/controller/internal/routes/authenticate_router.go @@ -19,6 +19,7 @@ package routes import ( "github.com/google/uuid" "github.com/michaelquigley/pfxlog" + "github.com/mitchellh/mapstructure" "github.com/netfoundry/ziti-edge/controller/env" "github.com/netfoundry/ziti-edge/controller/internal/permissions" "github.com/netfoundry/ziti-edge/controller/model" @@ -68,6 +69,42 @@ func (ro *AuthRouter) authHandler(ae *env.AppEnv, rc *response.RequestContext) { return } + if identity.EnvInfo == nil { + identity.EnvInfo = &model.EnvInfo{} + } + + if identity.SdkInfo == nil { + identity.SdkInfo = &model.SdkInfo{} + } + + if dataMap := authContext.GetDataAsMap(); dataMap != nil { + shouldUpdate := false + + if envInfoInterface := dataMap["envInfo"]; envInfoInterface != nil { + if envInfo := envInfoInterface.(map[string]interface{}); envInfo != nil { + if err := mapstructure.Decode(envInfo, &identity.EnvInfo); err != nil { + pfxlog.Logger().WithError(err).Error("error processing env info") + } + shouldUpdate = true + } + } + + if sdkInfoInterface := dataMap["sdkInfo"]; sdkInfoInterface != nil { + if sdkInfo := sdkInfoInterface.(map[string]interface{}); sdkInfo != nil { + if err := mapstructure.Decode(sdkInfo, &identity.SdkInfo); err != nil { + pfxlog.Logger().WithError(err).Error("error processing sdk info") + } + shouldUpdate = true + } + } + + if shouldUpdate { + if err := ae.GetHandlers().Identity.PatchInfo(identity); err != nil { + pfxlog.Logger().WithError(err).Errorf("failed to update sdk/env info on identity [%s] auth", identity.Id) + } + } + } + token := uuid.New().String() configTypes := mapConfigTypeNamesToIds(ae, authContext.GetDataStringSlice("configTypes"), identity.Id) pfxlog.Logger().Debugf("client %v requesting configTypes: %v", identity.Name, configTypes) diff --git a/controller/internal/routes/identity_api_model.go b/controller/internal/routes/identity_api_model.go index 318d0a594..a4415e1e7 100644 --- a/controller/internal/routes/identity_api_model.go +++ b/controller/internal/routes/identity_api_model.go @@ -48,6 +48,8 @@ type IdentityApiList struct { Authenticators map[string]interface{} `json:"authenticators"` Enrollments map[string]interface{} `json:"enrollment"` //per original API "enrollment" is correct RoleAttributes []string `json:"roleAttributes"` + EnvInfo env.EnvInfo `json:"envInfo"` + SdkInfo env.SdkInfo `json:"sdkInfo"` } type IdentityApiUpdate struct { @@ -227,6 +229,8 @@ func MapToIdentityApiList(ae *env.AppEnv, i *model.Identity) (*IdentityApiList, RoleAttributes: i.RoleAttributes, } + fillInfo(ret, i.EnvInfo, i.SdkInfo) + err = ae.GetHandlers().Identity.CollectEnrollments(ret.Id, func(enrollmentModel *model.Enrollment) error { var err error ret.Enrollments[enrollmentModel.Method], err = MapToIdentityEnrollmentApiList(ae, enrollmentModel) @@ -258,6 +262,30 @@ func MapToIdentityApiList(ae *env.AppEnv, i *model.Identity) (*IdentityApiList, return ret, nil } +func fillInfo(identity *IdentityApiList, envInfo *model.EnvInfo, sdkInfo *model.SdkInfo) { + if envInfo != nil { + identity.EnvInfo = env.EnvInfo{ + Arch: envInfo.Arch, + Os: envInfo.Os, + OsRelease: envInfo.OsRelease, + OsVersion: envInfo.OsVersion, + } + } else { + identity.EnvInfo = env.EnvInfo{} + } + + if sdkInfo != nil { + identity.SdkInfo = env.SdkInfo{ + Branch: sdkInfo.Branch, + Revision: sdkInfo.Revision, + Type: sdkInfo.Type, + Version: sdkInfo.Version, + } + } else { + identity.SdkInfo = env.SdkInfo{} + } +} + func MapToIdentityAuthenticatorApiList(_ *env.AppEnv, authenticator *model.Authenticator) (interface{}, error) { var ret map[string]interface{} switch authenticator.Method { diff --git a/controller/model/identity_handlers.go b/controller/model/identity_handlers.go index 33e16a853..944c3c4b6 100644 --- a/controller/model/identity_handlers.go +++ b/controller/model/identity_handlers.go @@ -420,3 +420,18 @@ func (handler *IdentityHandler) QueryRoleAttributes(queryString string) ([]strin index := handler.env.GetStores().Identity.GetRoleAttributesIndex() return handler.queryRoleAttributes(index, queryString) } + +func (handler IdentityHandler) PatchInfo(identity *Identity) error { + checker := boltz.MapFieldChecker{ + persistence.FieldIdentityEnvInfoArch: struct{}{}, + persistence.FieldIdentityEnvInfoOs: struct{}{}, + persistence.FieldIdentityEnvInfoOsRelease: struct{}{}, + persistence.FieldIdentityEnvInfoOsVersion: struct{}{}, + persistence.FieldIdentitySdkInfoBranch: struct{}{}, + persistence.FieldIdentitySdkInfoRevision: struct{}{}, + persistence.FieldIdentitySdkInfoType: struct{}{}, + persistence.FieldIdentitySdkInfoVersion: struct{}{}, + } + + return handler.Patch(identity, checker) +} diff --git a/controller/model/identity_model.go b/controller/model/identity_model.go index 5955a820a..733d843f6 100644 --- a/controller/model/identity_model.go +++ b/controller/model/identity_model.go @@ -25,6 +25,20 @@ import ( "reflect" ) +type EnvInfo struct { + Arch string + Os string + OsRelease string + OsVersion string +} + +type SdkInfo struct { + Branch string + Revision string + Type string + Version string +} + type Identity struct { models.BaseEntity Name string @@ -32,6 +46,8 @@ type Identity struct { IsDefaultAdmin bool IsAdmin bool RoleAttributes []string + EnvInfo *EnvInfo + SdkInfo *SdkInfo } func (entity *Identity) toBoltEntityForCreate(_ *bbolt.Tx, _ Handler) (boltz.Entity, error) { @@ -44,16 +60,80 @@ func (entity *Identity) toBoltEntityForCreate(_ *bbolt.Tx, _ Handler) (boltz.Ent RoleAttributes: entity.RoleAttributes, } + if entity.EnvInfo != nil { + boltEntity.EnvInfo = &persistence.EnvInfo{ + Arch: entity.EnvInfo.Arch, + Os: entity.EnvInfo.Os, + OsRelease: entity.EnvInfo.OsRelease, + OsVersion: entity.EnvInfo.OsVersion, + } + } + + if entity.SdkInfo != nil { + boltEntity.SdkInfo = &persistence.SdkInfo{ + Branch: entity.SdkInfo.Branch, + Revision: entity.SdkInfo.Revision, + Type: entity.SdkInfo.Type, + Version: entity.SdkInfo.Version, + } + } + fillPersistenceInfo(boltEntity, entity.EnvInfo, entity.SdkInfo) + return boltEntity, nil } + +func fillModelInfo(identity *Identity, envInfo *persistence.EnvInfo, sdkInfo *persistence.SdkInfo) { + if envInfo != nil { + identity.EnvInfo = &EnvInfo{ + Arch: envInfo.Arch, + Os: envInfo.Os, + OsRelease: envInfo.OsRelease, + OsVersion: envInfo.OsVersion, + } + } + + if sdkInfo != nil { + identity.SdkInfo = &SdkInfo{ + Branch: sdkInfo.Branch, + Revision: sdkInfo.Revision, + Type: sdkInfo.Type, + Version: sdkInfo.Version, + } + } +} + +func fillPersistenceInfo(identity *persistence.Identity, envInfo *EnvInfo, sdkInfo *SdkInfo) { + if envInfo != nil { + identity.EnvInfo = &persistence.EnvInfo{ + Arch: envInfo.Arch, + Os: envInfo.Os, + OsRelease: envInfo.OsRelease, + OsVersion: envInfo.OsVersion, + } + } + + if sdkInfo != nil { + identity.SdkInfo = &persistence.SdkInfo{ + Branch: sdkInfo.Branch, + Revision: sdkInfo.Revision, + Type: sdkInfo.Type, + Version: sdkInfo.Version, + } + } +} + func (entity *Identity) toBoltEntityForUpdate(*bbolt.Tx, Handler) (boltz.Entity, error) { - return &persistence.Identity{ + boltEntity := &persistence.Identity{ Name: entity.Name, IdentityTypeId: entity.IdentityTypeId, BaseExtEntity: *boltz.NewExtEntity(entity.Id, entity.Tags), RoleAttributes: entity.RoleAttributes, - }, nil + } + + fillPersistenceInfo(boltEntity, entity.EnvInfo, entity.SdkInfo) + + return boltEntity, nil } func (entity *Identity) toBoltEntityForPatch(tx *bbolt.Tx, handler Handler) (boltz.Entity, error) { @@ -72,6 +152,8 @@ func (entity *Identity) fillFrom(_ Handler, _ *bbolt.Tx, boltEntity boltz.Entity entity.IsAdmin = boltIdentity.IsAdmin entity.RoleAttributes = boltIdentity.RoleAttributes + fillModelInfo(entity, boltIdentity.EnvInfo, boltIdentity.SdkInfo) + return nil } diff --git a/controller/persistence/identity_store.go b/controller/persistence/identity_store.go index d31073eb7..734f86221 100644 --- a/controller/persistence/identity_store.go +++ b/controller/persistence/identity_store.go @@ -34,6 +34,15 @@ const ( FieldIdentityEnrollments = "enrollments" FieldIdentityAuthenticators = "authenticators" FieldIdentityServiceConfigs = "serviceConfigs" + + FieldIdentityEnvInfoArch = "envInfoArch" + FieldIdentityEnvInfoOs = "envInfoOs" + FieldIdentityEnvInfoOsRelease = "envInfoRelease" + FieldIdentityEnvInfoOsVersion = "envInfoVersion" + FieldIdentitySdkInfoBranch = "sdkInfoBranch" + FieldIdentitySdkInfoRevision = "sdkInfoRevision" + FieldIdentitySdkInfoType = "sdkInfoType" + FieldIdentitySdkInfoVersion = "sdkInfoVersion" ) func newIdentity(name string, identityTypeId string, roleAttributes ...string) *Identity { @@ -45,6 +54,20 @@ func newIdentity(name string, identityTypeId string, roleAttributes ...string) * } } +type EnvInfo struct { + Arch string + Os string + OsRelease string + OsVersion string +} + +type SdkInfo struct { + Branch string + Revision string + Type string + Version string +} + type Identity struct { boltz.BaseExtEntity Name string @@ -54,6 +77,8 @@ type Identity struct { Enrollments []string Authenticators []string RoleAttributes []string + SdkInfo *SdkInfo + EnvInfo *EnvInfo } type ServiceConfig struct { @@ -72,6 +97,20 @@ func (entity *Identity) LoadValues(_ boltz.CrudStore, bucket *boltz.TypedBucket) entity.Authenticators = bucket.GetStringList(FieldIdentityAuthenticators) entity.Enrollments = bucket.GetStringList(FieldIdentityEnrollments) entity.RoleAttributes = bucket.GetStringList(FieldRoleAttributes) + + entity.SdkInfo = &SdkInfo{ + Branch: bucket.GetStringWithDefault(FieldIdentitySdkInfoBranch, ""), + Revision: bucket.GetStringWithDefault(FieldIdentitySdkInfoRevision, ""), + Type: bucket.GetStringWithDefault(FieldIdentitySdkInfoType, ""), + Version: bucket.GetStringWithDefault(FieldIdentitySdkInfoVersion, ""), + } + + entity.EnvInfo = &EnvInfo{ + Arch: bucket.GetStringWithDefault(FieldIdentityEnvInfoArch, ""), + Os: bucket.GetStringWithDefault(FieldIdentityEnvInfoOs, ""), + OsRelease: bucket.GetStringWithDefault(FieldIdentityEnvInfoOsRelease, ""), + OsVersion: bucket.GetStringWithDefault(FieldIdentityEnvInfoOsVersion, ""), + } } func (entity *Identity) SetValues(ctx *boltz.PersistContext) { @@ -88,6 +127,21 @@ func (entity *Identity) SetValues(ctx *boltz.PersistContext) { ctx.SetLinkedIds(FieldIdentityAuthenticators, entity.Authenticators) ctx.SetStringList(FieldRoleAttributes, entity.RoleAttributes) + if entity.EnvInfo != nil { + ctx.SetString(FieldIdentityEnvInfoArch, entity.EnvInfo.Arch) + ctx.SetString(FieldIdentityEnvInfoOs, entity.EnvInfo.Os) + ctx.SetString(FieldIdentityEnvInfoOsRelease, entity.EnvInfo.OsRelease) + ctx.SetString(FieldIdentityEnvInfoOsVersion, entity.EnvInfo.OsVersion) + } + + if entity.SdkInfo != nil { + ctx.SetString(FieldIdentitySdkInfoBranch, entity.SdkInfo.Branch) + ctx.SetString(FieldIdentitySdkInfoRevision, entity.SdkInfo.Revision) + ctx.SetString(FieldIdentitySdkInfoType, entity.SdkInfo.Type) + ctx.SetString(FieldIdentitySdkInfoVersion, entity.SdkInfo.Version) + + } + // index change won't fire if we don't have any roles on create, but we need to evaluate if we match any #all roles if ctx.IsCreate && len(entity.RoleAttributes) == 0 { store.rolesChanged(ctx.Bucket.Tx(), []byte(entity.Id), nil, nil, ctx.Bucket) diff --git a/migration/certOLD/a_certOLD-packr.go b/migration/certOLD/a_certOLD-packr.go index 83dfa34a5..9f667177b 100644 --- a/migration/certOLD/a_certOLD-packr.go +++ b/migration/certOLD/a_certOLD-packr.go @@ -7,14 +7,14 @@ import "github.com/gobuffalo/packr" // You can use the "packr clean" command to clean up this, // and any other packr generated files. func init() { - packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20180905100349_initial-tables.down.sql", "\"H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA=\"") - packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20180905100349_initial-tables.up.sql", "\"H4sIAAAAAAAA/+RUwXLTMBC9+yv2VmeGYcq1PYlYAQ9GAdVm6Ekj7G2itpEz8pqEMvw7Y5MIp3WDPYETOtma1XtPem93KjlLOaTsdcLhwZBRWCzwpa5piZZMrql0KkdHVRAGAACmAL+yLI7gg4zfM3kN7/g19C8xT0FkSfJiB9AA0zdlil8Af16HADfGLtCtnbEEn5icvmUyfHV+PhkMkDvUhIXSBEBmhRXp1Ro2hpbtLzyUFiHiM5YlKdhyE04eAdTr4jQA0otqr+22Ku2IN/C4Z99/nMHFRXv+SzC5DAKWpFwOsrIBZFEE07m4SiWLRQo9ZWpnlcHmU6mbO5jNJY/fiNbssOPkBCSfccnFlF91uH8DNNWNxl3eMhF/zDjEIuKfe6k7JitVG1vgtlU9F8evBmHn5BjCzmVGEnaf4TLwjI998GVoXXl/v0JLqqTevqprU5zUVy3A8EztQlne4T6JX7XLl9qN7CutPO1QBf7w7Yb8LuGWRsvH7do4rI435VH5/9VYeDaO8HQ2HNb60sOe+RvT4d9JbbP5VGS7/Yy8XO91/QwAAP//+s+d+CUHAAA=\"") - packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190430154639_add-enrollment-certs.down.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1UvNK8rPyclNzSuJT04tKikGBAAA//+rh7R4JQAAAA==\"") - packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190430154639_add-enrollment-certs.up.sql", "\"H4sIAAAAAAAA/6SQUU7DMAyG33uK/22bhDjAOEzkJe7ImjpV4qh0iLujhFFg6gMCv9n6P3+ybWJShtIpMK5evWF35keWFEMYWdRYTpq7fQcA3qEU7yBRISWENqxlo2RN5EVxj5pp4AVT8iOlBQMvD436FvvT1h+8Mf2AxD0nFst585D84bX06fuVpsXr+jVda1Nl6aa4zArlF10Pupnbq50hhfqRs9I4Yfb63FpcozAc91RCJef94Y4vk/sXr3TOuOQoa2r3+rY7Huvo9PX8w1P3HgAA//8fQtADFQIAAA==\"") - packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190503092315_add-authenticator-cert-auth-fk.down.sql", "\"H4sIAAAAAAAA/5yRwW4CIRRF93zF3akLTVwbv2XyhDsOGQYMPNrYr2+Y2mQ0to1lSS7nnfuQoMxQOQXiw6vv6M7cSdWBUb0VTbmzzFoMAIhzsCnUKcK7FtBr5x1q9e5gzH9YsWgWH3XJ67p+nCPt9CnTnyNGXrFehDbI7JkZLcti2i3hWQ7GmO0WU3rjnexJ7AhNeOZVL070D3mINYV3wjhiXRhoFbJb3vc5TT/RCgTvAzPnNzhC7MM47zbmK7HHEfvXNzynn/xX049JEWsIL1NdTpdv6KNv27ljoNL8Wv1Wa6IOqVVfNfzqYMxnAAAA//8b8A4mjwIAAA==\"") - packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190503092315_add-authenticator-cert-auth-fk.up.sql", "\"H4sIAAAAAAAA/5xUwW7bOhC86yvmJuklDiC8FA1kpJc2hwK9tTkLDLmyCFOkQK7suMjHF5QsJYrhNCkvhM3hzs7sUMIwebB4MITfmnVFakNXoueGLGsp2PlKkueQAIBQCsszrdD3Wq2T5OOVpLOBvdCWT4pWVb0dcHHVzpPeWGzpgOw1MoenmjxZSeEcb1gnSbJaje1DUS16w7i///4Nu2tsyJKPsEgErRAcNEN6EkwKHXl4t3+PvqO0ASid6Vs7lCOeOaNXlbbZrC0utyNvxCGb9lZ9yrywyrVZXpZMj4ynJ6RlGjdpnNxWrFsKLNpuQuTojJDabpBep6i9a1H8ny9opjUB2VUNPWa1cc7PfPgPWVFghRtcoMhxgZu8LLXlqZOx9Oe8LGVgr+0mXw/eStcdQI86cKwdbcEwbay+4JVJ2gbyDG3ZnXUy0yr+4EOl1SVa4sapUU728+7H3ddfC2kvwYuDNPaQQgTwoaPxaFDwZkLzMS+eWrejeXZaPUfl39OgvOumkuvnVC4uXmkVWz55aZkIoW8poCiLIayx29FrYdXsAvaNlg1C43qj8EBg31Oe9J0S/Je3CSGHvJ5Q3yILZEgyROzuLQ8DBPYNeRqg82BwCyFf/pEfUcVtMRrRii0tmaNh1jFsb8z7PzBLz0+kRH1T0ZH4OOjZP62Oly9h3R5iJ7QZaJ09L7oTnix/oMshCXMwZlvWSfInAAD//yH7bieVBQAA\"") - packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190514084942_remove-old-ott-table.down.sql", "\"H4sIAAAAAAAA/6SRQU/DMAyF7/sVvq2TEBrX8WMiL3ndvKZJlbh0HeK/o3algyIQE77Z8nvvs2wTWEHKew+6iIqBO+BRHIKK9gYhRe9rBDVRNa+KFRGROGpbcRSiUmi9H4dD2RiyJpag9JOFaSr0s2CoJknNqacK/cNkP0nvz7nFfDIxpqy+JCaUSAgW+fvNgnyl0Fgh0Asne+RUPG23m5njumD5A/AerlH1NyLLE8qpU1KcdQGAcyMJ2bCSSo2sXDfUiR7Hli4xYIk8vtv9qnAoufVDVlcsT24b9y+98iHTKccwb61f39a73TDa3968eX4PAAD//9v/oDWYAgAA\"") - packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190514084942_remove-old-ott-table.up.sql", "\"H4sIAAAAAAAA/6RSzW7UQAy+z1P4loRmkVYUUaVXLjxAz9Ew401NZ8aRx9luUR8ebaJJBwRCCF9sf7K+z3+UMooCJWX4Tkoj+gnfYxIOIWLS3JLvgTwmJX0Zr4nyE6YeIuoj+x7wMpNgHq324AStol/jZfZ7rHbKnckY0CmQ7w1sVvMWbKMvWcOqzZ5VWgWqJAtUKe+kdsrmJByrIXfxt2lHVs33xpjDAaz3YMHjyS5B4eHhy2c438KECcUqC5xYgDxkBtLSBcwoIPxsbFAUUPs14G/XOjoUzWt3W6njsMS0EqLuqstCfqTUljFW4zNKsC9t8dF/bMUmz7HthkHxovD6Cs3QXJ0L7J5GpYhZbZxLRQdzsI7SBM1tA+tijh+6n2SKlULl8REv7Skwy64H76A9HuEAd3ADxw5u4K4bBkpaOtmoP3XD4LIKpam7N+ZvT7dtp62A6985u7pvz1q/UgX/24EFI59xXzX5t9v+z/m88FxIr0Jr/ivTHzv7EQAA///u4X2ajwMAAA==\"") - packr.PackJSONBytes("../certOLD/embedded", "schemas/ca.json", "\"H4sIAAAAAAAA/0zLMQ7CMAxG4T2niAwjjffepsIONSo2in8GQNwd0Yn16X3vUisdTWiutAL3mfllsEnlos0VPR4u49ksOM+r3pbkANo1w+m026H9h0W7ucHCsy3bth8H/qtsMiUGlU8p3wAAAP//R6EDwXYAAAA=\"") - packr.PackJSONBytes("../certOLD/embedded", "schemas/ott.json", "\"H4sIAAAAAAAA/xTLwQ3DIAwAwL+nQFafLf6zDS1ucZXYKDgPEmX3iAHuhBDwIQVTwOreEtEhLi8uP47K/rVdyzaiGPVP5TV3Mvf476b4nNZH44nfZgtnRbgA7gAAAP//5oK0DlUAAAA=\"") + _ = packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20180905100349_initial-tables.down.sql", "\"H4sIAAAAAAAA/wEAAP//AAAAAAAAAAA=\"") + _ = packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20180905100349_initial-tables.up.sql", "\"H4sIAAAAAAAA/+RUwXLTMBC9+yv2VmeGYcq1PYlYAQ9GAdVm6Ekj7G2itpEz8pqEMvw7Y5MIp3WDPYETOtma1XtPem93KjlLOaTsdcLhwZBRWCzwpa5piZZMrql0KkdHVRAGAACmAL+yLI7gg4zfM3kN7/g19C8xT0FkSfJiB9AA0zdlil8Af16HADfGLtCtnbEEn5icvmUyfHV+PhkMkDvUhIXSBEBmhRXp1Ro2hpbtLzyUFiHiM5YlKdhyE04eAdTr4jQA0otqr+22Ku2IN/C4Z99/nMHFRXv+SzC5DAKWpFwOsrIBZFEE07m4SiWLRQo9ZWpnlcHmU6mbO5jNJY/fiNbssOPkBCSfccnFlF91uH8DNNWNxl3eMhF/zDjEIuKfe6k7JitVG1vgtlU9F8evBmHn5BjCzmVGEnaf4TLwjI998GVoXXl/v0JLqqTevqprU5zUVy3A8EztQlne4T6JX7XLl9qN7CutPO1QBf7w7Yb8LuGWRsvH7do4rI435VH5/9VYeDaO8HQ2HNb60sOe+RvT4d9JbbP5VGS7/Yy8XO91/QwAAP//+s+d+CUHAAA=\"") + _ = packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190430154639_add-enrollment-certs.down.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1UvNK8rPyclNzSuJT04tKikGBAAA//+rh7R4JQAAAA==\"") + _ = packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190430154639_add-enrollment-certs.up.sql", "\"H4sIAAAAAAAA/6SQUU7DMAyG33uK/22bhDjAOEzkJe7ImjpV4qh0iLujhFFg6gMCv9n6P3+ybWJShtIpMK5evWF35keWFEMYWdRYTpq7fQcA3qEU7yBRISWENqxlo2RN5EVxj5pp4AVT8iOlBQMvD436FvvT1h+8Mf2AxD0nFst585D84bX06fuVpsXr+jVda1Nl6aa4zArlF10Pupnbq50hhfqRs9I4Yfb63FpcozAc91RCJef94Y4vk/sXr3TOuOQoa2r3+rY7Huvo9PX8w1P3HgAA//8fQtADFQIAAA==\"") + _ = packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190503092315_add-authenticator-cert-auth-fk.down.sql", "\"H4sIAAAAAAAA/5yRwW4CIRRF93zF3akLTVwbv2XyhDsOGQYMPNrYr2+Y2mQ0to1lSS7nnfuQoMxQOQXiw6vv6M7cSdWBUb0VTbmzzFoMAIhzsCnUKcK7FtBr5x1q9e5gzH9YsWgWH3XJ67p+nCPt9CnTnyNGXrFehDbI7JkZLcti2i3hWQ7GmO0WU3rjnexJ7AhNeOZVL070D3mINYV3wjhiXRhoFbJb3vc5TT/RCgTvAzPnNzhC7MM47zbmK7HHEfvXNzynn/xX049JEWsIL1NdTpdv6KNv27ljoNL8Wv1Wa6IOqVVfNfzqYMxnAAAA//8b8A4mjwIAAA==\"") + _ = packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190503092315_add-authenticator-cert-auth-fk.up.sql", "\"H4sIAAAAAAAA/5xUwW7bOhC86yvmJuklDiC8FA1kpJc2hwK9tTkLDLmyCFOkQK7suMjHF5QsJYrhNCkvhM3hzs7sUMIwebB4MITfmnVFakNXoueGLGsp2PlKkueQAIBQCsszrdD3Wq2T5OOVpLOBvdCWT4pWVb0dcHHVzpPeWGzpgOw1MoenmjxZSeEcb1gnSbJaje1DUS16w7i///4Nu2tsyJKPsEgErRAcNEN6EkwKHXl4t3+PvqO0ASid6Vs7lCOeOaNXlbbZrC0utyNvxCGb9lZ9yrywyrVZXpZMj4ynJ6RlGjdpnNxWrFsKLNpuQuTojJDabpBep6i9a1H8ny9opjUB2VUNPWa1cc7PfPgPWVFghRtcoMhxgZu8LLXlqZOx9Oe8LGVgr+0mXw/eStcdQI86cKwdbcEwbay+4JVJ2gbyDG3ZnXUy0yr+4EOl1SVa4sapUU728+7H3ddfC2kvwYuDNPaQQgTwoaPxaFDwZkLzMS+eWrejeXZaPUfl39OgvOumkuvnVC4uXmkVWz55aZkIoW8poCiLIayx29FrYdXsAvaNlg1C43qj8EBg31Oe9J0S/Je3CSGHvJ5Q3yILZEgyROzuLQ8DBPYNeRqg82BwCyFf/pEfUcVtMRrRii0tmaNh1jFsb8z7PzBLz0+kRH1T0ZH4OOjZP62Oly9h3R5iJ7QZaJ09L7oTnix/oMshCXMwZlvWSfInAAD//yH7bieVBQAA\"") + _ = packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190514084942_remove-old-ott-table.down.sql", "\"H4sIAAAAAAAA/6SRQU/DMAyF7/sVvq2TEBrX8WMiL3ndvKZJlbh0HeK/o3algyIQE77Z8nvvs2wTWEHKew+6iIqBO+BRHIKK9gYhRe9rBDVRNa+KFRGROGpbcRSiUmi9H4dD2RiyJpag9JOFaSr0s2CoJknNqacK/cNkP0nvz7nFfDIxpqy+JCaUSAgW+fvNgnyl0Fgh0Asne+RUPG23m5njumD5A/AerlH1NyLLE8qpU1KcdQGAcyMJ2bCSSo2sXDfUiR7Hli4xYIk8vtv9qnAoufVDVlcsT24b9y+98iHTKccwb61f39a73TDa3968eX4PAAD//9v/oDWYAgAA\"") + _ = packr.PackJSONBytes("../certOLD/embedded", "db/postgres/migrations/20190514084942_remove-old-ott-table.up.sql", "\"H4sIAAAAAAAA/6RSzW7UQAy+z1P4loRmkVYUUaVXLjxAz9Ew401NZ8aRx9luUR8ebaJJBwRCCF9sf7K+z3+UMooCJWX4Tkoj+gnfYxIOIWLS3JLvgTwmJX0Zr4nyE6YeIuoj+x7wMpNgHq324AStol/jZfZ7rHbKnckY0CmQ7w1sVvMWbKMvWcOqzZ5VWgWqJAtUKe+kdsrmJByrIXfxt2lHVs33xpjDAaz3YMHjyS5B4eHhy2c438KECcUqC5xYgDxkBtLSBcwoIPxsbFAUUPs14G/XOjoUzWt3W6njsMS0EqLuqstCfqTUljFW4zNKsC9t8dF/bMUmz7HthkHxovD6Cs3QXJ0L7J5GpYhZbZxLRQdzsI7SBM1tA+tijh+6n2SKlULl8REv7Skwy64H76A9HuEAd3ADxw5u4K4bBkpaOtmoP3XD4LIKpam7N+ZvT7dtp62A6985u7pvz1q/UgX/24EFI59xXzX5t9v+z/m88FxIr0Jr/ivTHzv7EQAA///u4X2ajwMAAA==\"") + _ = packr.PackJSONBytes("../certOLD/embedded", "schemas/ca.json", "\"H4sIAAAAAAAA/0zLMQ7CMAxG4T2niAwjjffepsIONSo2in8GQNwd0Yn16X3vUisdTWiutAL3mfllsEnlos0VPR4u49ksOM+r3pbkANo1w+m026H9h0W7ucHCsy3bth8H/qtsMiUGlU8p3wAAAP//R6EDwXYAAAA=\"") + _ = packr.PackJSONBytes("../certOLD/embedded", "schemas/ott.json", "\"H4sIAAAAAAAA/xTLwQ3DIAwAwL+nQFafLf6zDS1ucZXYKDgPEmX3iAHuhBDwIQVTwOreEtEhLi8uP47K/rVdyzaiGPVP5TV3Mvf476b4nNZH44nfZgtnRbgA7gAAAP//5oK0DlUAAAA=\"") } diff --git a/migration/updbOLD/a_updbOLD-packr.go b/migration/updbOLD/a_updbOLD-packr.go index df43ace81..88327cb47 100644 --- a/migration/updbOLD/a_updbOLD-packr.go +++ b/migration/updbOLD/a_updbOLD-packr.go @@ -7,14 +7,14 @@ import "github.com/gobuffalo/packr" // You can use the "packr clean" command to clean up this, // and any other packr generated files. func init() { - packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20180905100348_initial-tables.down.sql", "\"H4sIAAAAAAAA/ypITM5OTE9VyM1ML0osyczPK+YCBAAA///k5Nx8EwAAAA==\"") - packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20180905100348_initial-tables.up.sql", "\"H4sIAAAAAAAA/6SSwU7jMBCG73mKuTWRVqvutT15ExciggOug+jJcmvTGmgSxY4KRbw7cmiqFFXQlDnZmpnvH4//kGLEMDD0P8Gw1VZzJZfqr6jtSuVWL4QtKl6Xcm483wMA0BL2kWVxBDc0vkZ0Bld4BseDpAxIliR/dgAHtq9cy0/Az3EIqI2qcrFW7nyHaHiJqP9vOAxOBhjxbNvMWYBSGLMpKnk2YFEpYZXkwgJYvVbGinUJG21XzRW2Ra4gwhOUJQzyYuMHX3dQyt8BrFiadrZHU+Q9fmHPHby9D2A0avrnXjD2PJQwTE8ykwOiKIIwJVNGUUwYHCnjHbNw/vAEk5Ti+II0ZvM7yQAonmCKSYinHeVdhVbGVbsJd37PSHybYYhJhO+PCrcm47zWuVQvzcAp+f5V4LdtfaScHXvKuJY+Egdr7KXU3fHY+wgAAP//BUpBPy4EAAA=\"") - packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20190506084751_add-authenticator-updb-auth-fk.down.sql", "\"H4sIAAAAAAAA/5yRQW6DMBBF9z7F3yVZJFLWiLOgAX+ChbGRPW6Vnr6CphKJ0lYpS/T85o0tXpmg0nriw6lraC88SdGBQV0nGlNTZttmAwBiLbroyxTg7ALotXEWpThbGfMfV8iaxAXd+pqmH1dk+fqY6C4BI6/Yb6ADEnsmho55M+1GOObKGHM8YopvvIttpRuhEc+6ymxF/4iHFJN5F4wa+0zPTiGn7f8+xeknW4bgfWDiegY1pDyMc/Zgvogzapxfv+GVfvJeS36IilC8f9lqU5y/pY+9lTGWnkrz6+a3rSbqEJfNd4t9V30GAAD//9B9JG2MAgAA\"") - packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20190506084751_add-authenticator-updb-auth-fk.up.sql", "\"H4sIAAAAAAAA/5xUwW7bOhC86yvmZuklDiC8FA1kpJc2hwK9tTkLDLmyCFOkQC7tuMjHF5QsJY7hNCkvhOnhzs7sUMIwebB4MITfmnVNak1XInJLlrUU7Hwde/UQMgAQSuH4P60Qo1arLPt4JelsYC+05ZOidd1sBlxajfOk1xYb2iN/jSzgqSFPVlI4xxtWWZYtl2P7UNSIaBj399+/YXuNNVnyCZaIoBWCg2ZIT4JJoScP73bv0XeQNgClM7GzQznimTN5VWubz9rSclvyRuzzae/Up9wLq1yXF1XF9Mh4esKiWqRNGic3NeuOAouunxAFeiOktmssrhdovOtQ/l8c0UxrArKrW3rMG+Ocn/nwH/KyxBI3uEBZ4AI3RVVpy1MnY+nPRVXJwF7bdbEavJWu34MedeBUO9kCSZ4Dll/wyiRtA3mGtuzOOplrlX7wvtbqEh1x61SR5T/vftx9/TXKeokYTxYpXwuIAN73lI29vpnFYkyGp85taZ6SVs+h+Pe5K+/6qeTqOX9HF6+0Su2evKlchBA7Ciircohl8nJ0VVg1S8eu1bJFaF00Cg8E9pGKLPZK8F9eIUQcknlCfYs8kCHJEKm7tzwMENi15GmAztPALUR8eVAcUOVtORrRiQ0dMyfDrGPYaMz7PyXHnp9ISfqmoiPxYdCzf1odLl/Cuh3EVmgz0Dp7XnQvPFn+QJdDEuZgzLassuxPAAAA//9db58DfwUAAA==\"") - packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20190508132642_add-updb-enrollment-table.down.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1UvNK8rPyclNzSuJLy1ISSq2BgQAAP//u+YjMiYAAAA=\"") - packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20190508132642_add-updb-enrollment-table.up.sql", "\"H4sIAAAAAAAA/7SRwU7DMAyG73kK37ZKCAHiNB4mcht3C02cyHEYHeLdES3TOlQhDuCb/zj/9yfuhFAJFNtAcPLqLbk93RJLCiESq63ZtcVsDQCAd7CoWq/7H4uTAtcQzFnoEhcV9KzwjWbzQCNk8RFlhIHGm+nSYsq7/4NfYaztBxDqSYg7Kqs/VOZ4tZAwRpoBLyjdAWV7f/fw2Pw23peRhMWZ0qvO+rwqZ1En3UcqijHD0ethauGUmMBRjzUocDpum3VAdn9jpLgvl6TPJfHq885Gm7f3zW73OdZeNtI8GWM+AgAA//+9sucdhgIAAA==\"") - packr.PackJSONBytes("../updbOLD/embedded", "schema/updb.admin.create.post.json", "\"H4sIAAAAAAAA/5TOv07DQAzH8T1PYVmMcCkSYsgzMLAjBjfnNq4a32E7glL13VHCv6oDEsMtX50/+h0bALySjB3gEFG7tn2XkBvOW07KsSmTZjskKa33A4/kLU0xsIb0FMXSVPM6UR5FU29MwakWj7Tzong943GoPOtlveM+PhvlLCFFaf9opbKFsGMHG9o7Lx+MXyYxnmc9NQAAWMn9tVheAACcnE1pZGwAnpebek4dL66+y9kgDxPdfnkAOIo+sG5jwA7ufyu9/dTb1WrJp8sN/9Tv/tab+Z2ajwAAAP//MCQ4NpsBAAA=\"") - packr.PackJSONBytes("../updbOLD/embedded", "schema/updb.admin.set.put.json", "\"H4sIAAAAAAAA/1zOsU4DMQwG4D1PYUWMkCsLwz0DAzticC/unaueE2JHUKq+O0oQcOrg5dPvX//FAfg7jn4Ev5jlcRi+2PiB4kxByA6pSiznwGnQaaEVdcBqC4nxhJZKqDnuA8aVJeRq4ahJ/H0rtXOm1pr2R5rsxzBGNk6Cp5eSMhVjUj/CAU9KPVDovXKhNufVAQD4jKofqUTvAN56Jm9fLzepX9kMUCsscx/QfWV5Jplt8SM8/St+/unjbtf56tpd3XcAAAD//w9p0/UlAQAA\"") - packr.PackJSONBytes("../updbOLD/embedded", "schema/updb.enroll.post.json", "\"H4sIAAAAAAAA/1zOsU7DQAwG4P2ewjoxwqUsDHkGBnbEcM25iavUPmxHUKq+O8ohIOrg5dPvX/8lAMQ7KrGHOLnXvuu+yOkBy4iJ0Q+ycNFzIulsmPCUrcuLT8hOQ3bRtNSyT8gq85yqmKejCcf7tdbPFdde2R9x8B/LpZCTcJ5fVCqqE1rs4ZBnwxZQfF9IcR30GgAAYs1mH6IlBoC3lqnb18tN6lc2A8yVeGwDmp+In5FHn2IPT/+aP//0cbdrfA3rXcN3AAAA//+i77QqJwEAAA==\"") - packr.PackJSONBytes("../updbOLD/embedded", "schema/updb.user.update.put.json", "\"H4sIAAAAAAAA/6yOv04DMQzG9zyFZTFCriwM9wwM7IghvXy9c9U6IXEEpeq7o7vy59gZLFk/ff75OzsivpHIPfFklvuu+xCTO8QRXmG71DSWk5fU1WHCMdQuNJugJkOwVHzLcetbxbIFg8/N/L4m5dtZbaeM2Z22ewx2ZSFGMUkaDk8lZRQTVO5pFw4VS6DgtUnBXOrZERHx0EqBXu+JWPHGjuhlSee15Pw3/w1WTaoV0fHLRMRH0UfoaBP39PBLw/sPvd9sFnxZff9fsZvn4j4DAAD//xlvefiNAQAA\"") + _ = packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20180905100348_initial-tables.down.sql", "\"H4sIAAAAAAAA/ypITM5OTE9VyM1ML0osyczPK+YCBAAA///k5Nx8EwAAAA==\"") + _ = packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20180905100348_initial-tables.up.sql", "\"H4sIAAAAAAAA/6SSwU7jMBCG73mKuTWRVqvutT15ExciggOug+jJcmvTGmgSxY4KRbw7cmiqFFXQlDnZmpnvH4//kGLEMDD0P8Gw1VZzJZfqr6jtSuVWL4QtKl6Xcm483wMA0BL2kWVxBDc0vkZ0Bld4BseDpAxIliR/dgAHtq9cy0/Az3EIqI2qcrFW7nyHaHiJqP9vOAxOBhjxbNvMWYBSGLMpKnk2YFEpYZXkwgJYvVbGinUJG21XzRW2Ra4gwhOUJQzyYuMHX3dQyt8BrFiadrZHU+Q9fmHPHby9D2A0avrnXjD2PJQwTE8ykwOiKIIwJVNGUUwYHCnjHbNw/vAEk5Ti+II0ZvM7yQAonmCKSYinHeVdhVbGVbsJd37PSHybYYhJhO+PCrcm47zWuVQvzcAp+f5V4LdtfaScHXvKuJY+Egdr7KXU3fHY+wgAAP//BUpBPy4EAAA=\"") + _ = packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20190506084751_add-authenticator-updb-auth-fk.down.sql", "\"H4sIAAAAAAAA/5yRQW6DMBBF9z7F3yVZJFLWiLOgAX+ChbGRPW6Vnr6CphKJ0lYpS/T85o0tXpmg0nriw6lraC88SdGBQV0nGlNTZttmAwBiLbroyxTg7ALotXEWpThbGfMfV8iaxAXd+pqmH1dk+fqY6C4BI6/Yb6ADEnsmho55M+1GOObKGHM8YopvvIttpRuhEc+6ymxF/4iHFJN5F4wa+0zPTiGn7f8+xeknW4bgfWDiegY1pDyMc/Zgvogzapxfv+GVfvJeS36IilC8f9lqU5y/pY+9lTGWnkrz6+a3rSbqEJfNd4t9V30GAAD//9B9JG2MAgAA\"") + _ = packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20190506084751_add-authenticator-updb-auth-fk.up.sql", "\"H4sIAAAAAAAA/5xUwW7bOhC86yvmZuklDiC8FA1kpJc2hwK9tTkLDLmyCFOkQC7tuMjHF5QsJY7hNCkvhOnhzs7sUMIwebB4MITfmnVNak1XInJLlrUU7Hwde/UQMgAQSuH4P60Qo1arLPt4JelsYC+05ZOidd1sBlxajfOk1xYb2iN/jSzgqSFPVlI4xxtWWZYtl2P7UNSIaBj399+/YXuNNVnyCZaIoBWCg2ZIT4JJoScP73bv0XeQNgClM7GzQznimTN5VWubz9rSclvyRuzzae/Up9wLq1yXF1XF9Mh4esKiWqRNGic3NeuOAouunxAFeiOktmssrhdovOtQ/l8c0UxrArKrW3rMG+Ocn/nwH/KyxBI3uEBZ4AI3RVVpy1MnY+nPRVXJwF7bdbEavJWu34MedeBUO9kCSZ4Dll/wyiRtA3mGtuzOOplrlX7wvtbqEh1x61SR5T/vftx9/TXKeokYTxYpXwuIAN73lI29vpnFYkyGp85taZ6SVs+h+Pe5K+/6qeTqOX9HF6+0Su2evKlchBA7Ciircohl8nJ0VVg1S8eu1bJFaF00Cg8E9pGKLPZK8F9eIUQcknlCfYs8kCHJEKm7tzwMENi15GmAztPALUR8eVAcUOVtORrRiQ0dMyfDrGPYaMz7PyXHnp9ISfqmoiPxYdCzf1odLl/Cuh3EVmgz0Dp7XnQvPFn+QJdDEuZgzLassuxPAAAA//9db58DfwUAAA==\"") + _ = packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20190508132642_add-updb-enrollment-table.down.sql", "\"H4sIAAAAAAAA/0opyi9QKElMyklVqMosyYxPTUlP1UvNK8rPyclNzSuJLy1ISSq2BgQAAP//u+YjMiYAAAA=\"") + _ = packr.PackJSONBytes("../updbOLD/embedded", "db/postgres/migrations/20190508132642_add-updb-enrollment-table.up.sql", "\"H4sIAAAAAAAA/7SRwU7DMAyG73kK37ZKCAHiNB4mcht3C02cyHEYHeLdES3TOlQhDuCb/zj/9yfuhFAJFNtAcPLqLbk93RJLCiESq63ZtcVsDQCAd7CoWq/7H4uTAtcQzFnoEhcV9KzwjWbzQCNk8RFlhIHGm+nSYsq7/4NfYaztBxDqSYg7Kqs/VOZ4tZAwRpoBLyjdAWV7f/fw2Pw23peRhMWZ0qvO+rwqZ1En3UcqijHD0ethauGUmMBRjzUocDpum3VAdn9jpLgvl6TPJfHq885Gm7f3zW73OdZeNtI8GWM+AgAA//+9sucdhgIAAA==\"") + _ = packr.PackJSONBytes("../updbOLD/embedded", "schema/updb.admin.create.post.json", "\"H4sIAAAAAAAA/5TOv07DQAzH8T1PYVmMcCkSYsgzMLAjBjfnNq4a32E7glL13VHCv6oDEsMtX50/+h0bALySjB3gEFG7tn2XkBvOW07KsSmTZjskKa33A4/kLU0xsIb0FMXSVPM6UR5FU29MwakWj7Tzong943GoPOtlveM+PhvlLCFFaf9opbKFsGMHG9o7Lx+MXyYxnmc9NQAAWMn9tVheAACcnE1pZGwAnpebek4dL66+y9kgDxPdfnkAOIo+sG5jwA7ufyu9/dTb1WrJp8sN/9Tv/tab+Z2ajwAAAP//MCQ4NpsBAAA=\"") + _ = packr.PackJSONBytes("../updbOLD/embedded", "schema/updb.admin.set.put.json", "\"H4sIAAAAAAAA/1zOsU4DMQwG4D1PYUWMkCsLwz0DAzticC/unaueE2JHUKq+O0oQcOrg5dPvX//FAfg7jn4Ev5jlcRi+2PiB4kxByA6pSiznwGnQaaEVdcBqC4nxhJZKqDnuA8aVJeRq4ahJ/H0rtXOm1pr2R5rsxzBGNk6Cp5eSMhVjUj/CAU9KPVDovXKhNufVAQD4jKofqUTvAN56Jm9fLzepX9kMUCsscx/QfWV5Jplt8SM8/St+/unjbtf56tpd3XcAAAD//w9p0/UlAQAA\"") + _ = packr.PackJSONBytes("../updbOLD/embedded", "schema/updb.enroll.post.json", "\"H4sIAAAAAAAA/1zOsU7DQAwG4P2ewjoxwqUsDHkGBnbEcM25iavUPmxHUKq+O8ohIOrg5dPvX/8lAMQ7KrGHOLnXvuu+yOkBy4iJ0Q+ycNFzIulsmPCUrcuLT8hOQ3bRtNSyT8gq85yqmKejCcf7tdbPFdde2R9x8B/LpZCTcJ5fVCqqE1rs4ZBnwxZQfF9IcR30GgAAYs1mH6IlBoC3lqnb18tN6lc2A8yVeGwDmp+In5FHn2IPT/+aP//0cbdrfA3rXcN3AAAA//+i77QqJwEAAA==\"") + _ = packr.PackJSONBytes("../updbOLD/embedded", "schema/updb.user.update.put.json", "\"H4sIAAAAAAAA/6yOv04DMQzG9zyFZTFCriwM9wwM7IghvXy9c9U6IXEEpeq7o7vy59gZLFk/ff75OzsivpHIPfFklvuu+xCTO8QRXmG71DSWk5fU1WHCMdQuNJugJkOwVHzLcetbxbIFg8/N/L4m5dtZbaeM2Z22ewx2ZSFGMUkaDk8lZRQTVO5pFw4VS6DgtUnBXOrZERHx0EqBXu+JWPHGjuhlSee15Pw3/w1WTaoV0fHLRMRH0UfoaBP39PBLw/sPvd9sFnxZff9fsZvn4j4DAAD//xlvefiNAQAA\"") } diff --git a/specs/swagger.yml b/specs/swagger.yml index 659f20e7c..ceeb569bf 100644 --- a/specs/swagger.yml +++ b/specs/swagger.yml @@ -3565,6 +3565,28 @@ definitions: enrollment: properties: {} type: object + envInfo: + type: "object" + properties: + arch: + type: "string" + os: + type: "string" + osRelease: + type: "string" + osVersion: + type: "string" + sdkInfo: + type: "object" + properties: + branch: + type: "string" + revision: + type: "string" + type: + type: "string" + version: + type: "string" ################################################################### # Authenticator ################################################################## diff --git a/tests/auth_cert_test.go b/tests/auth_cert_test.go index 59401d615..1ba3c65a5 100644 --- a/tests/auth_cert_test.go +++ b/tests/auth_cert_test.go @@ -232,6 +232,84 @@ func (test *authCertTests) testAuthenticateValidCertValidClientInfoBody(t *testi _, err = data.ObjectP("data.identity") r.NoError(err, "session token property in 'data.token' is empty") }) + + t.Run("client info is set on the identity", func(t *testing.T) { + test.ctx.testContextChanged(t) + r := test.ctx.req + + data, err := gabs.ParseJSON(resp.Body()) + + r.NoError(err) + + r.True(data.ExistsP("data.identity.id"), "identity id not found") + identityId := data.Path("data.identity.id").Data().(string) + r.NotEmpty(identityId) + + r.True(data.ExistsP("data.token"), "token not found") + token := data.Path("data.token").Data().(string) + r.NotEmpty(token) + + resp, err := test.ctx.AdminSession.newRequest(test.ctx).Get("identities/" + identityId) + r.NoError(err) + + r.Equal(http.StatusOK, resp.StatusCode()) + + identity, err := gabs.ParseJSON(resp.Body()) + r.NoError(err) + + sentInfo, err := gabs.ParseJSON([]byte(bodyJson)) + r.NoError(err) + + sentEnvInfo := sentInfo.Path("envInfo").Data().(map[string]interface{}) + sentSdkInfo := sentInfo.Path("sdkInfo").Data().(map[string]interface{}) + + envInfo := identity.Path("data.envInfo").Data().(map[string]interface{}) + r.Equal(sentEnvInfo, envInfo) + + sdkInfo := identity.Path("data.sdkInfo").Data().(map[string]interface{}) + r.Equal(sentSdkInfo, sdkInfo) + }) + + t.Run("client info is updated on the identity", func(t *testing.T) { + test.ctx.testContextChanged(t) + r := test.ctx.req + + secondInfo := `{ + "envInfo": {"os": "updatedValueOs", "arch": "updatedValueArch", "osRelease": "updatedValueRelease", "osVersion": "updatedValueOsRelease"}, + "sdkInfo": {"type": "updatedValueType", "branch": "updatedValueBranch", "version": "updatedValueVersion", "revision": "updatedValueRevision"} +}` + authResp, err := testClient.NewRequest(). + SetHeader("Content-Type", "application/json"). + SetBody(secondInfo). + Post("/authenticate?method=cert") + r.NoError(err) + r.Equal(http.StatusOK, authResp.StatusCode()) + + authData, err := gabs.ParseJSON(authResp.Body()) + r.NoError(err) + + identityId := authData.Path("data.identity.id").Data().(string) + + resp, err := test.ctx.AdminSession.newRequest(test.ctx).Get("identities/" + identityId) + r.NoError(err) + + r.Equal(http.StatusOK, resp.StatusCode()) + + identity, err := gabs.ParseJSON(resp.Body()) + r.NoError(err) + + sentInfo, err := gabs.ParseJSON([]byte(secondInfo)) + r.NoError(err) + + sentEnvInfo := sentInfo.Path("envInfo").Data().(map[string]interface{}) + sentSdkInfo := sentInfo.Path("sdkInfo").Data().(map[string]interface{}) + + envInfo := identity.Path("data.envInfo").Data().(map[string]interface{}) + r.Equal(sentEnvInfo, envInfo) + + sdkInfo := identity.Path("data.sdkInfo").Data().(map[string]interface{}) + r.Equal(sentSdkInfo, sdkInfo) + }) } func (test *authCertTests) testAuthenticateValidCertInvalidJson(t *testing.T) {