From aa6fd89c2ebe80f8967ee9cd9a1317479bd11531 Mon Sep 17 00:00:00 2001 From: kevintellier Date: Wed, 12 Mar 2025 18:42:33 +0100 Subject: [PATCH 01/14] changes --- Policies.png | Bin 0 -> 122240 bytes preview.png | Bin 0 -> 176904 bytes roadlib/pyproject.toml | 35 + roadrecon/.dockerignore | 1 + roadrecon/.gitignore | 4 + roadrecon/Dockerfile | 11 + roadrecon/docker-compose.yml | 21 + roadrecon/frontend-ng/.gitignore | 5 + roadrecon/frontend-ng/CHANGELOG.md | 57 ++ roadrecon/frontend-ng/Dockerfile | 29 + roadrecon/frontend-ng/README.md | 13 + roadrecon/frontend-ng/index.html | 20 + roadrecon/frontend-ng/nginx.conf | 16 + roadrecon/frontend-ng/postcss.config.cjs | 6 + roadrecon/frontend-ng/public/_redirects | 1 + roadrecon/frontend-ng/public/favicon.ico | Bin 0 -> 4286 bytes roadrecon/frontend-ng/src/App.vue | 45 ++ .../src/css/additional-styles/flatpickr.css | 239 ++++++ .../additional-styles/utility-patterns.css | 138 ++++ roadrecon/frontend-ng/src/css/style.css | 11 + roadrecon/frontend-ng/src/images/logo.svg | 1 + roadrecon/frontend-ng/src/main.js | 45 ++ .../src/pages/AdministrativeUnits.vue | 86 ++ .../src/pages/ApplicationRoles.vue | 87 ++ .../frontend-ng/src/pages/Applications.vue | 106 +++ roadrecon/frontend-ng/src/pages/Dashboard.vue | 407 ++++++++++ roadrecon/frontend-ng/src/pages/Devices.vue | 99 +++ .../frontend-ng/src/pages/DirectoryRoles.vue | 113 +++ roadrecon/frontend-ng/src/pages/Groups.vue | 101 +++ .../src/pages/OAuth2Permissions.vue | 88 +++ roadrecon/frontend-ng/src/pages/Policies.vue | 716 +++++++++++++++++ roadrecon/frontend-ng/src/pages/RowDetail.vue | 742 ++++++++++++++++++ .../src/pages/ServicePrincipals.vue | 105 +++ roadrecon/frontend-ng/src/pages/Users.vue | 101 +++ roadrecon/frontend-ng/src/partials/Banner.vue | 28 + roadrecon/frontend-ng/src/partials/Header.vue | 69 ++ .../frontend-ng/src/partials/Sidebar.vue | 164 ++++ .../src/partials/SidebarLinkGroup.vue | 26 + .../src/partials/dashboard/ObjectTable.vue | 294 +++++++ roadrecon/frontend-ng/src/plugins/axios.ts | 15 + roadrecon/frontend-ng/src/presets/Noir.js | 53 ++ roadrecon/frontend-ng/src/router.js | 113 +++ roadrecon/frontend-ng/src/services/toast.js | 12 + roadrecon/frontend-ng/src/utils/Utils.js | 34 + roadrecon/frontend-ng/tailwind.config.js | 139 ++++ roadrecon/frontend-ng/vite.config.docker.js | 45 ++ roadrecon/frontend-ng/vite.config.js | 47 ++ roadrecon/pyproject.toml | 49 ++ roadrecon/requirements.txt | 10 + 49 files changed, 4547 insertions(+) create mode 100644 Policies.png create mode 100644 preview.png create mode 100644 roadlib/pyproject.toml create mode 100644 roadrecon/.dockerignore create mode 100644 roadrecon/.gitignore create mode 100644 roadrecon/Dockerfile create mode 100644 roadrecon/docker-compose.yml create mode 100644 roadrecon/frontend-ng/.gitignore create mode 100644 roadrecon/frontend-ng/CHANGELOG.md create mode 100644 roadrecon/frontend-ng/Dockerfile create mode 100644 roadrecon/frontend-ng/README.md create mode 100644 roadrecon/frontend-ng/index.html create mode 100644 roadrecon/frontend-ng/nginx.conf create mode 100644 roadrecon/frontend-ng/postcss.config.cjs create mode 100644 roadrecon/frontend-ng/public/_redirects create mode 100644 roadrecon/frontend-ng/public/favicon.ico create mode 100644 roadrecon/frontend-ng/src/App.vue create mode 100644 roadrecon/frontend-ng/src/css/additional-styles/flatpickr.css create mode 100644 roadrecon/frontend-ng/src/css/additional-styles/utility-patterns.css create mode 100644 roadrecon/frontend-ng/src/css/style.css create mode 100644 roadrecon/frontend-ng/src/images/logo.svg create mode 100644 roadrecon/frontend-ng/src/main.js create mode 100644 roadrecon/frontend-ng/src/pages/AdministrativeUnits.vue create mode 100644 roadrecon/frontend-ng/src/pages/ApplicationRoles.vue create mode 100644 roadrecon/frontend-ng/src/pages/Applications.vue create mode 100644 roadrecon/frontend-ng/src/pages/Dashboard.vue create mode 100644 roadrecon/frontend-ng/src/pages/Devices.vue create mode 100644 roadrecon/frontend-ng/src/pages/DirectoryRoles.vue create mode 100644 roadrecon/frontend-ng/src/pages/Groups.vue create mode 100644 roadrecon/frontend-ng/src/pages/OAuth2Permissions.vue create mode 100644 roadrecon/frontend-ng/src/pages/Policies.vue create mode 100644 roadrecon/frontend-ng/src/pages/RowDetail.vue create mode 100644 roadrecon/frontend-ng/src/pages/ServicePrincipals.vue create mode 100644 roadrecon/frontend-ng/src/pages/Users.vue create mode 100644 roadrecon/frontend-ng/src/partials/Banner.vue create mode 100644 roadrecon/frontend-ng/src/partials/Header.vue create mode 100644 roadrecon/frontend-ng/src/partials/Sidebar.vue create mode 100644 roadrecon/frontend-ng/src/partials/SidebarLinkGroup.vue create mode 100644 roadrecon/frontend-ng/src/partials/dashboard/ObjectTable.vue create mode 100644 roadrecon/frontend-ng/src/plugins/axios.ts create mode 100644 roadrecon/frontend-ng/src/presets/Noir.js create mode 100644 roadrecon/frontend-ng/src/router.js create mode 100644 roadrecon/frontend-ng/src/services/toast.js create mode 100644 roadrecon/frontend-ng/src/utils/Utils.js create mode 100644 roadrecon/frontend-ng/tailwind.config.js create mode 100644 roadrecon/frontend-ng/vite.config.docker.js create mode 100644 roadrecon/frontend-ng/vite.config.js create mode 100644 roadrecon/pyproject.toml create mode 100644 roadrecon/requirements.txt diff --git a/Policies.png b/Policies.png new file mode 100644 index 0000000000000000000000000000000000000000..263b1e1fae0564a5de16cf248918c03d8fd7fc9c GIT binary patch literal 122240 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

a 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 literal 0 HcmV?d00001 diff --git a/preview.png b/preview.png new file mode 100644 index 0000000000000000000000000000000000000000..e96e3c7b5807ce81f2fd080027e95159ac0659b2 GIT binary patch literal 176904 zcmdRVXH=6*_b=!XRN6u5RZ&2tNtYUtE&|d!2nYm1C{jX4MS2sI-n+Df5I0RaJ-vXY!80l|$~ z0)oGWuU`R1>|X!O1Ag6bQZjHMARzz#=RaW_7dayV!5so+IT>w_)U_#?E7L-4`?igH zHMlC4+aMmQT+L2f`(8ri6=PW;#~zFLhd1v&P(26VNbA3K>(1Mi#uS?8V8RIg4UsnL zL(^d_I;qyb#NEAGDgL$R!p<2JxlO0UrljED$U>@Fx@TOrjODdaPP!lmx*#}x9h~?o zArIB~n8!WgKth1D|M_ruE7B4m8Rg3#hK<^@v8g2t^}C@!e{XroYlzng{WFUoGp00$ zgutElhqa1Jfz|wL3FF=<__d42U^#_w-&9qN$(0ocb#XHhqJN%zOMe?db8;m$!n)GhXrnKV+JCnLTn>6ucQna=F;$$1p65U@EPHf4 z>L9Jc#OCThPrk9_NwwY)FkCBGQ}eFxZBO`gvCo0|Iz18aT98%cb{EAz3*M4HeGz!} zxu*>idNH$~5O`xo#n^BZ@5LCw$-O_jQZ>1eUM!7z`r?w61ckB+B>y}jASkrlT)uLk zl@-zO(w%~*u`)ge@`X1Ap#c4Y)N_2J?VyQ#s;EbNG5;0pZjNfztAr*p-!|giV-ewR zRkm5)`$FC(29JuLVIQ(7C}J)qza=kM(TGV-!{jhSWCZt+C9CDMo+r%t-r}NyFS=GY zxLCM?HooX*RE!^}`ymiHDi}nPeqw~x=@f3vvN~CuwQ0VtbHPx8w^Khy zSFQ_;A7qIQ$r?;O8w+%94=_0i|#ie$>;H*n54Chil_& z{8*{^Q&GnZ=Yt|LLj}|N$*vj8`}8~)Zz`j>lLO5;CRFq~VV>?LXpN!i#?F}52pXrq z)NN|ChIp%9znGgTTgC!48YUCV!o78eUAI~&IEuP>NHES!4=u)dMQl+=E1&tg!A=$9 zE_H0ptpjY-{xWS}Hfr;u5pm^BpGF1Zonx%K-jPxa+)au7U;9Mt15?dBGAToqw3Kh) zbR6Syd`bEW?A@;#T=BbzVKE4*TT0E)ou+^iU3u1Cbr|pW44U6 z4-8*@VG);_m(UI}VHYZwl!MXt4cp6V+1l|QaaimDh{ z3F0@{&B($L3vD~kO$Qysq88QR5n>{Wot+m}NzhO98d;htAyrtPMAK=!XKv%)6DPBI z!|>ZZh22&uix=CN>E-UDuuYcBCEkyX0NIN24^z1p799k|wiZ)OQ1V;{tNN3p3mAEr zFSX{*KEO4Za_+xUt~C8FPnI}&sOZ(j_ft4xSGH+N?^0dfn#d_kXf~&&PdDAx^cgzF zf09Pli&QPPyP9{TK$hzf_b*SXs^u>Jejf~jXU$)C>>CJ@;QDc>Y6OyiPQ9S?oQiR` zEXxYi%L`{JB0kTlbGNa*Tp2r#>&$(Pl+X~|DS3(~ENsZ>FhcN`sjC6J*WG!P$JW=Vu~S&etw>cGto|HIi^$wrf*x@CZ(<#>B?x{2v zul>fG-6s(GN)7SZcj2q~FO9gc(uz_t#7t4t!vo|dG%DA|kpi7@YiIMB+r=7!ae8{_ zt#=y%TJ8wIN%3tZrx2a>JbrsK0!uJ?it$XQ7Gt*)QII<)r3mekn z<7&QJpTk2-(r5>dCi(4K%a(76iyC$%K z7}D&T!$U%1c5BDv){Zb}@j8zOEalN(7u5A{09>@iu9or4k2iEwIj2|pKsjYW!c3BR8I$)n!?APz#+j|)^y}EDZ%`mPRm?3=m_U(@KSSRh0{m$?1sr|M4OUV7* z)CGtD*&J05Ot;_c0S`1aa#tx6PNrvtT#@YrlgWQbxUiWrgk9g`kO+|*iX$8Y&$6rg zy2^1_0e>&lgJl%=yp#+HvMbfuw5(u(-b?G#c~`o$k=t6-Nz41U7Xp37icUB0-!SoT z%3#nHpQ1E1Oaf6w>j~d=hyAI#lP&q)VYuo(RnV_-? zlY*K{1om7UhQOV9#pF#owHZ+z#jwE6xK(wKUodp+3Cym;yKd2Og4D%6N-e0|u-rFK zT>f=kkA`{W0%Ki>nH+uvv8$hbk{5Q|xcYYtkH|i#s8}lfa^I&XfZx_!d=D$;FdpI6 zqK^{tpWRx*;QJRN+?#5i$u+%9(_&g#Y`&?nIJU;yO6TyQBp_jY4Q+n8#Q~EK_N($i zaw$E?ABo-lT78--yz6;bmt;ikR#z&82|SZ=Gu`MsF7EoYXaBgsMq>Ih3V2$d8C@-A z%eW}si9wTsWV?9n*Q-SQ8zFPXhsR?gW`FcWc{hV$hnCT+n8Tpx%Tj^ctr)+zgx_++`v=e+7fCaKR;t)^8g1X7Y?e`~!*CNbedK z*(L@J=@*+!-PnX`TtO7C4d1^)sJFwFZmxvjz@X{i__I~`Q+M^2 z$bB~wsy_au(%{<$GmiX+Py&MFRxhOYyZS3`tYaoFQ1TJIxd&zt5?qg#sD$7dTNq6l z#-5gvM~X9XVgmhg!1)JTk&&ODV#37+Z*?b{+^`O58IH`GTFAZLWQndtL?tH9&6UUd z-D=qLyp_DmDE#fzJLz#L!^a4-JM{%Q*5NKEH+M5p*tbtjl^0{9d+u=to(3;BGh2Ae z$>oJ!m=3{cKsn1g3(v<1%!Ge7$noudCZs*g=_!_rX%Wk>>GJgin`K$`?OHM-pz~ku zMibzfP)bdUMw2cSeCo7~ZL-6T)m>Hl!ss5h(Yq2dcyR^-D5+@OI{`%Z)wI01jb)2{dO`=p4WCL zM;yKCtKgf2rn@RI>~V)Y~Raod&k9GCmTZec`4JwO@^DdVe**0M+VR2pgB_Bv53+c*wy z7ZR?Z_wrgw4(Q!Ipm&sd@)R?@qvO9&dFZ+;A0+)2N?unrv~un9&0n zALsaF&`vQuP3lZpo}_JxJ#k95Yt=#OH&&SAEWt7PVRz#(v7#-~Oe9hCn~{*h8aZVl zt7}A~drFS0&XIP|GJ6mQTi9T}-lclJibgsf42*M$ig#h;@dj8^QNfd7o6nhga-_i$ zA2DWf?>*11Oc4dP+w}PSY;?${?+*(BHba*r*yFt@2L$RoyqQ0H&^l(wwlLZj7Zg`X z$jQMxeWVnGv=YZ(T0gW;v%xKi%}CiH>`&w0O#PaJosCU|w?9@`X&&%$`pB}nd>MJY z^=)q&Q{=jZYADLSmO2rC;vMxjrIeJBT!VaMIpjDDk-AWPyWr(jvh*M4h0JbIAxGX( zYGx9xUb--wYdaM7speJ|1!0*Bs>Zl#9*4!kA{K zX|p&A>*?EJ2Jl>DLYn*z4DNX9xkN)&@Cim1QB|!fux(0KoY4 z1jmo$jjwvLH*Z{Rov<@0Tq>-5OJ_8}o&g%$>Yj zZ5WKhN!YYe1=pL--}OGWGjf@#xm008iygg=6wG!&pWoZ=CH zFAz9*Yce(1;eX#?mNuxGQK ztks+e(+a34idComfz(k1N>@%=$0S-TyN0EdxP3*2(xCWDLY)93$YJec@R{4Ey{DqB zPbB93r)PWlBUGN5QWnxKu<4V)cb=s?4zp&- z4wIMJs)`WfwNQi1lRK2#2hvY0e-`lY8HeYVJ^xahZ%Qd9Jx}4-@JhWBF71sN68uT~ zcg&pd`7ZgPT+ik$$`}gmB?gsq>}~Qx{$x}_7Hifu!S7#Gz)z;LM-{?CIvDY*g+*O| z8<|CZ=N2z9*3+RxeZBS4uGtkw)n+X%NP=<9cI{ZdzYwtZ0!{ zRf|E;Fva|PkM$IVya+VtJ3rfcoAPZSoZM&9D;N?!r%Xm=EXelTK=4JG0zY;}{#(L4 z0t`RzF~>2cE?|Klfu%-s$QLTg)<1ajZojJyPPW^^NOs04pHNVxmM@MCN~fAuGXilo zPc&pQ8kT4{2tG@@Y1d{-H?0e)mUtu@R8!SK;BDVgr_2B{mei#%j6Qt4Hw`#@ zEOknVy=E+h3u7BtifVd#^!u&K31~GZ(?;cBg<_pVv@5J>aOA7~I%T=mrS}2{_*O=v zUz2!A^!U}LP@KoNIwZYHwIbk5QV~rkgxTXvl^W09H3y54q2}H5$cmJWvrwR4af& zCm+8?peL4I0{HmJ^t0HZ8}`FO7_>C|Km>V}be+U;;dzShyB_@4d%o{hj|Qwkauimf z+xD66;TFZTdEdeI^;37NF>AJLnx&(F(x3CqQ^(X_*+=OyREL%#;Cb@WPN!e;@jfHGM~0 z)ja+EwrCZ*k@zk6#tKt65BVZZ3SnuZt4_g+`WUverM@Yff0nGu8uE#-RLO9jt23+j zM^^WS#6vZbS`ofZ++qfNy=$&lk|k6_P)=bvYfjkT8+>A9WEt!LHz(!KCR~S-_dPe-@xT+0@Uo?Sf1*KROuu77ze6@4%cjZKiPDew zSDvgmr>==7*SV z!{CL}kK`%Di$rYcJuNDWr;C??gOV4)q{BVsC5w98&L1I%pu+4h?D=UQnsUnPy=d`qLzoBI!A zlz^*`|9q6l^1%J0QE_QM@SU8?%;D|u-TyDYmBU;Kzcszk z8L8r0oh208`*5hovz0Abxndy1@x0%S>aZBmjD~gT>D<;DORsU>6@am8) z=bC0wQ&v_}R`b#>XZq?$kxy4A&--%%f}$9OT#e7KlCwzK zpU!{sJNvHHhZ#mEUA;+CcfP)1BvICK7M%USU4rDzKebul%0!OPHKOkLm|Z1-&!Fx! zvS!AAd#wHV;2}9H=pZpPN0B^5;=JJNwj!(B(Tz{h^kNoZ2ZyMkS#B>q3GdQMLAulY_f{f`wV7I%sJjYQ@*^!7H2(MnQC8obS~#{RLC<)2_Yl=+ z(Q;HimR3=-`5=woA0(Cq{l37qIQ=R-uU}VXt3K#tdXH^HF#if$<)ucH}#ro zBwxp-`?OerdZH6JBO%Mf>7t-;exCdT@4}?Kk5F|&LULdT?415 zPfuPQk1Iy|NSw9T%-|kx6bY(>RyHXn>8GdbpzWjE?c{4_Z>Ct`;^5(}-deH4>GO`y zHfH1*J-t7heoYGcyG_POc^^D>_5E3~&?kAgs&}4(KHa^@xsil`5S!7CqkAVa!B(Kic34(PEFJbN^P%Cl!}8dt>upO~dJcz97}7 zWgaxWm7p$tQc+m!wa@Ld6uGop4Qc| z-0z>z0@)X}+zlXZIyGs=+|p%K@P>)`rR0O^WHU`mcIgL-^gz!(_tJ5vzn$*jxrY zRN|-}!s~y8pC~0PjpLL$``OOYu+>ocI|_vFICCZ})d_0f-MR`(eT-YqwV{@;UFbup z`@jKSi<LkKJISEEiYO=gX$bW4<1deH=PcW#F`3Qj1mGiM?w@ZqjoZz zqb@yz^bFr$i%T#Q%FNBEm9YEX4>Ix2tA)_D!DjkAa3eMTN6yvzMX1R)Cg*;>JyW+i zSbf*{Z}&{)b?Hv}VFEDt?Rb9>&e+7a(et$02rhWrp?G6zha*BlU#@y{l;8W{6fk{J zk4CmPGbT032o<^a&A))HkCs36i8_pDKj>tq#fz`}OXKNh#EA~BL(mRo8waaEM4aE2 z=rYi!a(uA9uB?tapKVX~SjBBMA4(tPHf7Cb@Ai>zswI0Qdaiev%l53-Oyho4OWm+r0xj&{B(VPR!c0c(xxwc z2I05~xCAqQ!S$VDI7#5MSuGHs34Yj;BCv*Jr=E;O=+)1`g;05-faVm3`gR6KK*0Rl zTh5Dbne+0NjGY#WbRhC_IwKQ~_4wZ;y~@Y&7wR=05kWJ0?{k8lK1@)6Q9{D8ajt1g zA)4iyQMG+#R1)e{Owxe0mGx^6$ys;J=mnRiu{3c5KF{qqQ8Vvd6BMZb1-ntT18SoU zMRcWkYomViY^iLUIOEOW_Ushg(^IXWRTAQcT|W%GYDjq_@LA22^ZAi8aSE%s^ue<7 zY=j8P8&htnkfhhRwZmu)Wc6l#`%{dLjsDG^HbF2>)zpu1aRypiTx^JjgI+E~<2|-C ziKP$kWdt*+W3G|V7;ydEoEElKI9a~k*Ce=q4;wQVmGpY5@eCf^LRcCCPIhmfqKE{& zwnzCjern+O=hSbjfxzM$i%iV@jHRk^q-{7H%N85I_=tDavwJ|%*!`y`nvguAkpho|!LR;tjnkS|4sfIsdJ zps3ql1Q`%NNzq^YgZfbt0v`PYF7<%sqRdYFymT@96w*(z zWO3|9h&eG6Y%+$Jl;sKdm2$%5@4_Vj`gu=lUs2KvTF)o)-;=*jb@Qy^&3<&{ zV&nNNXSko~`0xTXb)2(er-io-(7~kVUXXdo zk(JJ*j!OJ@!sJAonL8+hVdy=g`OldCeHhA6qAPu4ZJ2L z?d$F*zhtfwQ7~+!g!i2Rp1`qTrI!c+!*Ed)mm*Xo_4SM#r+RujZ^f*oE-xi8HcWrl z7xL*hE)(G_;BTxRvllfzujk^Gnu*9T;^LR@?d%NGHA>i{WEgknyPzolZ~zaTe_ zG&HJghvK&mT+~nJG6NJ63mQykTI4|pgG#@j71TlIr|TONvAqW)=lQCM9)pM|(D7C) zIkT{ZzPZfdS3=ISReh5o_}NhDx{klDg7xp_?h;b0gN|xsh_;?iisImugO1Le#rT$t zOHD<^qXy?QR(RcUSa{D|9h}d!!hU4ctxK;YwdPkrp<`2jPzA)!E_;N-|1b65G8d$p z$S9DwHUJ2yCT@{hd(s0NYGt%+kE$R-9!hQXEtz>u8FL?eQSK4OhD`X8- z0+eC4HHb-gr3{EUe$Il8s}JUHbI$nA+{?4FTHm>Tm1s|kiXE=8|E>9IX}#4#99sqS zgnTz7`@vP>&-%3e)G>EuiS%JLjx%@J9AM+@v>6bVQ@}Oi_u<5kxESUpNYxoX4e#tM z2dAk#_nKHgc=>?p*wxzm0D zYmvV-!2)&w)xX0gyAaw(^+unhmx)43WJ-}xrgw3n|j z0&1LrMMEcGXEHAiC!MvFQEkKk!H3hHF3~MlcGqal{28Z5E8I>}#Ynp6Xw95@&F3ii z|2H;N_DTMjJX@St5f-juv#5NC_V$$IcbrQu=Cw8IG4t6kbvs1Vm|#$5X1kOdwR8Eu zv(up|^#5=?^PvxxPAM(L;p+hmW6Z%;q^hdo!cIQgU^UU>UyGSEsdNaaohpD044vao zu#Sy-8U|uz{y)!6oSjikKSBjh8$8CUp%OPq7*C#O_^f3CaQSNEG{aSuk>6q&hmvk( zs`dC;Q99v%zqjAoWOqmU{HSzA(0XJT9m(XEDV#}06o6=y9+~w0#TwnXd+aj%*Z7KS z!%hnd1q8`KWGN>HJS?ydI+w&5)}wY*`b|g2Nu>OckW1P)5OV&GQ7o{Z{3-@QOAwZ%4P=Izowp~*Ayv*p z@g%&BZFNuAU_;jSGvzr(82IeeTvVFtWcjD=N)Vr^*Du0=ISzi(xkc3E$?wYOpxZAK zx;$rbHYOf;1Ls!21DI`kIniePuv;vt1>l(Y^Pa@-GUrg60?FM$zGB^!dY47s)Ak&7 zlk?!>*7~sQ`;DvVs546(A6M&yj?PGi|8~#zr|6rT+bc!+rIcb3}55&BnR(BstYCo`omlsUOw16PSN7baP3VN#+I}P zH2*p`agkMpn*3(x(u3FH^Cdp@9;_o-c~QseadA4zePJCzktuvfJ;E+aJd;&LmPe=f z8B=c;Pfz*Zg*NH_`_2BR5*xpAqCqaLJuo0|%B>s`6*4}nXEgKL=fO4`IiMUDI)y_6 zAa+@*{KselFn}+`b#)4Z zdQ*2ZfY`A@7&ln9OT#U`GdcwSy4DgJ9Le=y%|Xi^i*`IZs^rV?-O!0{9~z$jga1cK zoT)D8!eG@Wub-aBrmm^o<0nySxP`Zwn!2Gei`MIdoiTaLpcgGox<8>HFa(j;?MbvRBuG8PN!G5s3zzk4{Pti%k#d_+L z26eA-B#0*5ij5hwr28Jc`=SrxqtZhLq3Rq6fw+R3d|vhgW|Iq15*+XWR{4*K5)fzx z|EngYfx8~SyYrF;+QN2Q@iu`bu)Moc|sRG zUa|Zko2G^VP)~4CM){?aMq{uh)fVzlll2Y1f3XitTVEWFUU3p<833ab#pyWMysg!M_iT)6roQ0KE4%Jo{__ zU~@XA2HQi~8PA_T5A)h*c&VwWr-!mw;4`X$PN=G1md6R!AuuZ>``K~a9+s1>`Kc3L zorJ8Ft{;U8iI6z@we_~;^nC`+851dy{QaJVBFaKX@R9jqcS(2m)nL*awpm+cZj2)K zGfh$rCMJ4ZYzg- z87zW8TusznYS-MWii*6(b{5!T%|4n<7VBYnJ*^h3lJlu)sW%_+3<;H1R0yEFVXcqt z>>$({a=A@SaAZk$DjEo<=|p_y@_SNh?BRu_Cbf1t<}!ZnY9jw7#FmXta91brud8S3 z{izS7L4~WWm0Mhh_K5Z&H#hf#2cy-NCwyFbWDHMUO*RuJ#3gtRN?p5#V-#`N!TD?m z)r7pZu{q=(ZuvAkGNPlcBgPyB6nJ{O_x`%l%n}$FWUj5FyPjWgY1(fOs_F&CpWvo; zeWlIhb>gx^fOG^%v5`im=|x4w82F99&KkqL4_BrpSg)5DSFI-K6n6uqI+B~aBrOwI zGy+iqPnL3={zZ5-+-t95Y~;AE?iz`I_P<&_zD+;-x2L&h zoy7lYiUInH|Ns1E>9`w5?p-%AHs;_mwr(5tC5$b|JS02BTxkyV{cl;yACDv2S|cs9 zC&C^C(S?QF%~on5o#lV-N<>M?e_wo>$ubROKsH-1#|QDlA0=D1>D!cPProLMRA-?Iy+7N-6~E24?P3UdY-ZeYs@kyh zRn(R)h%P9LF`F@HdU3}5LKb)S$72T`g~i68r#{8gMq*nEvlAt(i3;cj=_*6nQ?(e{ zzkd${u1CW>o$tqMk+z0(^I88@D5T4_y(_9CJ9lc4hAIzA#I**H%7=D4Dm^I@;#5ln zX$E+@sL(L{r03}ad%jJyiRfi5Y-YfU>_#Z82`cz0S&&&pD#6-FbP>rZ_pac7iF8MVeK-OCAiYOcxjQJyS1x1Oa@vD_ z)i@eK`a|5`o-C$!K#4Bt3F>~*%-|V)(#&zlERGC&8dEQq&VTIJjf>3B7+9mG;rEVV zHw?Jt+4h0KV%i)@lsCq}jcD76h$)lAGc%}m^Zi_OjIih78B~}&wHCK8{c~HgsD1yS z;1Ue9yCN2s9>ge4@bY?zT2>k$!WM@~6PX4bi-0-nUBw zJIi7BF+Y9a7O7$e|9E(+J^nQ_QelrX&fc#J*r_|{wftpM!YjxAx(KxSp~v73L;WN6 z>PkU|Ea3qeuJWnkf&3mN_1wGw5g)du09^)Rjuf+7;$TM0U&~e&`b*L4yj2IjZSL-E zumq7PHBH%h3l(B0(pkup3|*ynuklCuZVEFpo}nAZ1N?#|<`Q*z+y4|4!N{Zl1PLcL zJCR6$d(?ivX0D58)wU-a)DOrW1?OEvBi~H3+~`Xuk}Umx>))@g7aGq^_8~Kj8QmCZ zyZRHI2`viH&CW8ZWJbo85tSzHs>I^h{m91eV=F}lWFXU$p0L6^uh2bTLri8QQBn*; z@@l4z1qAF)W>^^@azHQd?nXBL702#OW@vjZ3{LTD>re+tDrgu^QITJmMy@H=f~P*2 zrjiI6yD3Us$dswDc~AyIjUp-yslBzXCJz1) z+s;uU!>AfOx2SGx11o^^Gu#lqUm}w-I-5LCe{Uk*#=bg0#QY5Nl^pW{1{UJ?9|E`} z8w%-vK2QH?xc`W}XDj7j?b2)40KE~JYP1uoB`TGx(}SHbAO{bG!I1}M0U`{A$;}5F z#sTPY8AjRsE5Qj6&2l8>H zVcM0j+H_@5G-N6y-%NODVLaE&a>;8IHa7cMJsxC|qiR*oa_} zkRmye))xFz#q|K$G5s=-o?qh?L{Q5k%%Cth$9$f*REALkWu7)u<{l+7)Hwcv>;|Mi zSvV1U#4-H$F1Zns2-+>N_Es3&@$Jkp?=b?7C2uZ!9HM^w9g3_W1$2C227a z^#jmgKtwV1$TnYi@3J3=8vgp6|gtBL42E;|M96Vv_)tp@3T1T_QXJw`ucGX6wdnJgw8 zklaAqz`QWhg3M5bZ1FUne7xf{Ui~KLdS+a_q@@cpvIil<$ZSc}`p^_G9bopq0QpsP z0Tmg;#LmD}1qG?2zJx>$G$L$Y;_JX$w6^Bp?!koLoU54J{a+N*Zhe(peq(pgT--*= zi|Qha_2*K|(<4HSB@K4yk_aw+nQq8R30!&6dF#uH!&DC)@p(!rBiW-?l|N z@EbgbT}b3Bm(+|t1Fz2Cufd*jVoxy9=_X(LTzn50Hu|mp-7^bMRaDQ zLQxDZ&k9f>kstjqUD@u_FkI~`K_+O1F!{^cP|I zTPY)~z|;2n_*J$J*m%@?JQ2`zIx#u`=Zh!j(CCA$DftpN58u=xJ@e- zXNeJMkIj#IYR*pDS^cAWZwsO<+;t3Pe~)?~oPV{cPRyMDN^$X*5|faqEGnx0^5DF) ztB=n8RcLlcw*lzD6XuQL^pOlDg+H)c+1$y8Vvx9AD$n z=Uy=bmnFW&L%a>72+~TJWmh@nG{xS|EC|of-`E!g`P!^5&DwPL^x)^JXrox9zCVsg zs`NWv%0cMr>Trd{CdK&StZZ0B{Isp}ZN@4_q9ud9aHFy|y~f&FM&~VpuqRBbLw!x6{YFC%g~Vq!(&oeuiI9 zKg>nbfgI-BGyDp$$7hFU+rRi_0ngFe*OVyj-rav&J@LtYW1sNU6a3d3vJ_0ec2CSa z*K_2<^-^7b=W_8$02M*&ru_q(90lgb)_d=g;V2xsU>jShAP(k{ahnY3;EZ7e?g&Cf zdJ@>Tf%xjIrbS5}TQk#do_04-NG6_}G%tB+1B{xZrgYSQ4N@ zz!(%kC;cl^LzYT@aLCx?jf?b&{c(vHDBPUe7+HcuK4&xkC3UE3P-h=$uH@|895Q>g z2eIui-Y}Pbk|9DmH?g_YaQyqMAj5rc$qfH^yDT6q>?RzwGRtbstxZ)}QdD~qH519~ z@+*RscG?efJFP-M#9{nV*zfJ!nd7A{lAHBVeU$w7El*$nx>-UK3|Z@wxnWBh9{d8Z zzW^z2H6=-F<~X6K2yOa$YE4pYIWzLSRtN)NBr$Z&Tg|6t+l8YSrNWF1yIE>ZS)Z+#%AY~tIy zAEt7Ce(a5|CK-Y@&RbOiwe~#^XDAMO8=A}+vT|OQu=x~c)+GBIpNfv5p zY(wP1V-SEIOrU?rHO?sR0}jn!fuNx)$qBoYf;D=&!#?{xYk$1q6W8xY+xJ>5H|h>o zqCrXSTg|eH(M&$Q2JKRZzlr%8j%1F8nu6e*uFGM-yo~LFtH1n{tq>)Z_fL?1L%%!q zfM5r4mgr2?5}9#CfCx?y07VF{%;h!^(%6i$9)st8yAXII$WPJY{>pECulg$xtcl}e z2}a$R>m#WAUjU6j=Q3AbVb=4ohU4zi-#Zz4m0uj%y-ANkB9HAdukDZI(Ir z`Zi`s*O65+bx9mLFJVU75kF`dEj?V?=!SINUOSgn)IbGD_C9v&&+b8wL?J?RRMt`xA?IJb{Ix@29^@%RU zXz`bF8gj}iE-a68zwcD@U@Mb1ADf@)DeDJR>i`Y}$LOET56XHC>EFl=&?OBebG|L% zYPqNmM2cnAV}Fu`QkhWSHs8JT42E*?IwpekHl>dh-s??_gi7rA2!La!?1W`l@h!d^ zf7o{QKWsaX=^vLK2f`1?{XO3>`tOGMH^TjNYk;W3(9WrDZLXaHbT+J9RCKVK^amms z7<|sX_Jk?N%5ya3dZlc3B9cfHNm+&L<}*L$hq5Ilt-xk*6F8E1Ro_kQB=6XnN|<$@ zNr`^A;BEQP5AWH^cb&BU=>{&ey;IXS*1)3(cY%=(J8`A%cf`g7r*Ut1v^WvrzdO^G_m2I zsxjNi=3_c5SAPnsDk|uk*4BdvwL^Rq6c+PKgApeF9TqW@sSPWYx;?2PUPUKLEE(s^ z+g&__6|;bNs_3jE24uud z>zEULp&)Ugr(JwU{AD;#O?!t(wYvm&2<%Ne6bWlqx*;Sbsb9v3O$o{MLfww1$iXNT&+UHRP-^(^~ z@Wc1d?rLfJJwC}Mn*MNLwpHdad*7vKnr$TYJ%VNvrGN6?gc45~VXpU%?>*oB7yOnF z){@0u@~nCD-m0MEr^2F^F%M5usOtUM`c0a5nk~M+d>vxa;jj~4Wz)p=_tlI(uIhW) z!{7J~SM~16zY&{ilqOdieIqL=Ery1MaRarb`oF6|uoG$Dmf4joxWq(%8QF$nwSo8z&VOdees zF7cq>kjXH;*+&lN{-(4BjfT%iBf^YWGWu=_5^0PSTeQD)eULWb{{tbzrPk=yJkzdu z!Z#iyexen!jzUc_2#+D9@b_TewrnChm+t zfZ|)tgf|G3$dmpexc}kL0k~ish4xlP(bdL~{vCg-h11T?yH|8leiW;Ot2w_w*grqx zo5J^PLCwzt`A_MQ_pU$^Xd+x_n3>r3zN2!Fj!S-=aCZAri70im{lNJ1l-%YS2hDl^ zqFnF{@|8dFzkr4Tr z!0`l3K)@!ybM&F-9@DBroIoQjK&C!-Jn7FacFk)l@9snrJoWtb79c(N1#psQe;ki; ztnwr3`WK~1ZW-6+9Iv&OyH;^YbtpFGIJqL6mdjt2?W&)E0(>F}4QY0v!%7x1=cn(p zI$Q807O(csZAQQ9pSM^%@NjAV2%UWiZVsjje`hd;vth-_pDfXm8xHaJpV9h!iooA6 z(!13q6zqd5B%|zf|Pb8<2p8DKw(Sb{wP@lX?7$pVp&;cinCa0$|h!2NAt}!o?eP0S@4EK#&6)Q1AYZ=$zT|DQaNC7L}ums2{w#zQ}n7g+hEGVIW-tRV12 zUvvLaG5EZjZkZ6%g1^RP9JprLY}qCqR+35m#f?{Y)^JT?KB3?LCp9uc)xXUse4kG; z2sCpS1wQv#l%^@nT%e82dL?DZ_R`TL#WC~|9efe}<&ihR7gKJUa0X+_#Du2%e;n>x z`Rge^*#F=dA=AhIg0%|k*dmQ;enVcqf?wtjA^n=??fM{{hMVJWN@ThaN5Wu|U~Q6P z&bV44p33*t;PY!I9VMpJmG9%PPqnwan{Dy^k}3>V-lkh#EXk%u=D}sS{=SOJ3`?L2 z&EhyK=~TWc>Q4AnL(>XX10X9wqP~x*!OVNWO0PIQ{g1D?5qFOhFoU;m-!OgDt`>+I zSX}yh$A&5j9-14*&TbS?omuzUkCD=w%&@LVvqcz8ADGikM|b-?3`N9a$r`@L*9L&m zoBu`ISB6!&c3Uq*0Yyp#loSw<7LZPn5Rj5?rMtUT6afK|?(UM7Mg{5amhSHUCi^|_ zd(QcOeSf}ndF^X&+^qFH&wbB1#~fqKd&vQFO!e!`s8O!;{b6?ooz{m4`RDD&V3??_Jm4SKwW8vkF#5{2CxaJW3)qLHg&}<*|}IB8Ml1_`lYWFbcn|iqt||d6Tp1 zmr~1V-g~N`1=SCS-Jj!rz*}RANdn2)dwJ3Uf7;}626HKNpOm98k|5UxSrt9-clXr= zifo=Y?-Rh9-nZl|J!U=k4FAUln`bvZ`4Uk^G9->bAT7K^haJ_>CRn3fTi39};xUZqptf#i>kVe()3@}F9D z`}&d0o64j-*?Yi9J}+*lsjPh`#2!Ok`2_f9br;%{_vP02iy*ImSzVlE3405lbJzYV z?fd)kq$`U4lRMc-RI}@;S$EWX;bE1(y_SnP8@zk>Qp+hUAe$$yiMa7o@#ZERvvGmAz> zi$*GMo@`Gy5kF=suWUU0Ul(2`=d#H2-;+((f9JjX^TB`9BiBC>8vOtFlaQRv>yNm8 zC7F+ymj}t@9&M%O@?ygevP$&z_0!Vm-rOV?6cps-RM`a^=jwwm*OUHXNC8cz16eo$ zO_CB4GkYh4B-g6W`O=doPreXy|LU}OpOIl`zwcY?b`;O&!ph5=Sv3d0=3SL4MG&Br zt6XZ*|EWn=>7_53K;!W#6P%CW_;DWvA;OEUKsJLOeW3O5mEESSD*rUN>)t_OLWLU)wj80NlnLzP1%Xyf3pFao9Ew70~p=%k5|i~X*e zx73~Z8V)#G>=d+r@?G~#=ZE#>K(>Oguy9=5r&8lyil^I;0-D-dTe;m1<9zsIV`9ce zRMXQh(9lL?E!2wjcfOJ{>HTSR+!)iEZ9resjvo%6bZ>WHmK4R9{bddHHWns^M*}rg|o$ z3;QdfK3^jk9okra+riRB%P8^jQ4igCi-Noo>t<>0-RJ*X>~Sp#DmmS-fF3 zH7Mz|LjPTi!02%Y2Zzn+dMUJ`q9P0|FAY<{8#?kk$4EH@e~f{*mn;I?%g)@DIDc1r zdn&$Xf4>FL2*Ea%MX zYT)nRzp1u5J30p1+u4|yf=E*_Fg-`=y{@XAwj`&xh16`gh~3USH#c!RJ3Chbt)_gg z*KndTX&PGL<6}%xKI6VLKae*1`udody5J8vdGO)-sN2R^ec3)~u~;A>%B^^K-pLgZ ziw}v24mQS}mV0Kx!x$lI;=g^nM@E(y6Qlm{0#`WeEjcZ1wqa+?<-zbvUfycYi*-Q{ zN$jy7x@;PF>m)+be+)}tZ^NtFVU5TAc>6Z4rh-EM7dV>`gwNYon2;iU(8pWMyY7y|hxwrjxaJ`Oxlq;ozYf4`jVHH;;R)SBi{^xja2R zGg36S|G)@C_S1i@i;7aW!^CSTy?MFjkQXExrY4Fz;>bcxDONM6S>siX8p^vvLo{s3%XglTo|+D$2`_SJx*Ur{kJmZQZIGBTT!)lQa{p$v@GM_Yp1$2;}6 z$qx@N7CUzEPnq;8h~x3q?4 z9=m(`Vs2=Z8q2#RhR4TSn3)Y1#JeaCoV6`qHTrp}m-T6VZ^&fjL46`|ae6=_o3Ov! z`l?nk4bh(RLih-TY5+M0&YBIdRg;pVx&q`Cm% zCMLGAzJaRP_rTiJH0F~SIz}MAy877MpTH|fr2dkWWQiYziR`%I{5#FVYn>46L&XN| z8s!7My}fHg`ORQSg>=Qhz;kwDk^Qx+wsxu1bWnX)(g~3@le0VUDU78;aXnk|glTJF zTmN$jH~iH8i(^}(&5{hU=2N%R_oMyY@myS^7UoKxJP5f@7(}ioyC1R0Qgn5vbSiCo zdu^WX4LWYT!X%xzTI|dn8ClL%Va6ij2=g?V`E}CTdfV-2)6v$}efRNW@)=5prcAwN zOz|LM*Q3qO=3o{q(uuv@7%E0atwFb2awdiyQDXcf zg-X;d;0+-ppe*fg2`fzN7cbc$reRJGz7Iran;?+xdApgHD~IXgUtLPxBm(@csMuGo)i(XB%zQ)J9i> z3U0Ktw2X`&QToL3y9LE~wvCR4j3x~v)^KsZqo${qTELZRXWAFzq5SAuf4P)ce@pqT zz4doNr_ERP_WJhr^WpT7Fx?~CY3Q}o)d^)7TUfo^T*4@S_F+e3BiExhTTpHFbf>1P z96b6SbGrU)nW}Z8qM`BmB%rLIFkWJ$0`~^_(tNTCvTU>`Z}G#=L+}_E+9L(LE(eC4 zLOzMv0qj&BdWVb(vCi$denl$a{$yVZi%fu+_t0yy>Hw;qoU$_hV7EVBd(_1MzMWW{E^e4-; zU+zheye}s9$-abII_5Ezhop?m_oAW<&zjcOk4pKbrlz?ng?BMLh>3_U{{G}AOT2Xh zJ>L&a$OrPDPW9o|=A;`MxyR`Uw%EN?lwm!+R01Z=M_)&?L`ogj@Y&c(_LjPv8f&~x z_gg!n`=jY?KBK9=*~;27+MSnxTq&F2)A&aWaEZm=2BZ$Iz%O@^Zydg+`2<@nme&cB z-y#p;;!-(UQcK47gMi?OoPy%KCFDg$M#ii=9zy964Gkx}=;_yf`$pw!Tx2yR=jG>D z+ZQE`qg^nzx3!6h)k(|9L~->7j=r_tzL=lCsWUB__BV5WW21FlvT?@u^BUt#UsMFU zQg$YX&sT^HnK&*|5|Wd}PI@aVS^V6VDD-gpPgrD&b0v=$7@h%)0_Sdedb&ngpMdSW z^{b9EPAhFD^?6DvswQ*Ug^1U(O#X>EXtmqp_4O}oZG}_CFm98NSDeYCJ`fHTLL z^Z-s1#1e$UbzT(D#3N6WPyGa8aB;?qEi4v9{2WyRl|g3l@dE#QI=^Ebd5N95mnb}qq({=D$=BQw0ONHtS;`n!*a!S9q$hYWdYC5BT|+LxE(xt_xax)+dV zv)6P5JK?^c!+L--H-$G9^GF096`yW1u?Rj0ER6j>vkWIYz z?AbHJ?!&37gYMxVb7Y4davp+% zV+bHoWo2bBDSwsA9yNL6=xC)g8;+n03sIO)*GoQ9SxNu?TDOY1=HQ?QEOD-blOD5m z9&S8Nn_&?V5m8YC1@Wy_4rUPyJ5)X*A|ie9HSQ;LJf|;qxClTN5hg&8OopC2TOs1bWKMh9Q3e7QRcuqrcQ8c(ng0_MI`*1efFOIw+N#kVxk>XzcJfSIu?vA$=bX09zfH`_owJS;5Bb>i)B)6Tx+0lIvxYIRdH zvwotB^YV)=FI)f|Qv3(IF=a;G1(+mbndvZ*WT2*YAmDNO*x`2gA3kN5)BT4Bw=f^{ zBwB(o89AWo^zz~ipvX;KIdC;QZtVWB(E~jBEg_*Gf6}(?elVoozPYg3n~#KFy<#92 z(bi5-TdvV!g4Y$ zWQUEC@^?#%_0eX$eY7owA+^(9LwtoXZ)Ncux}Fz~0b@pyfdjo;NC$~Y;s47eu_aGRL$5b65!9}87v*$2*;O($q`nAq zx!L#q?FV`lrXV6tWl_$h)JZbu0pMOA2MBI`UhQc_Z!`4VbsG|M&~3pGJ!mu6Zn zsZPhr$$11Vmk&0kZ)&o9b>_}+uZgIZ6Mfz1mohRkn%6I4yD!QrD#L>gDM3L~4evf2 z?C)pw`@z62;e!Vi7G|Xmxn$(}Ki{9ItEov=u2NXcDN}^7&adb?fb`~jr zr{31rxBK_!1vxoZR~)zKWGk=7=`-P$kLU!Gll)moALi%vb*8BlwJwi$=1k8p$b7I@ z4L8JtNsWw_&d;_mgkR<=kHK2q=oC4hZ!&*$AIvBD8q?+Z^5f-VypG4X!uZVEkC~Ze z(M%?*9L&x03b(!mkubU*uGc#6ycTX5Dbj;>d;&fS%ReBXq@)Do^aPM~E0tR;jxE3RPA;|O3PJG&;BNPtb)_YkyKYtZ@kVU({AZK z8hHQ#b4rGt@o>T9*-jy$;EbJC4HGQH|Qn^lB+CE>&Uwq=`;c?m+ zyXZ-7`2KyVW5>apaA9Xo?s~oQUz*e#m~tgUn+z!I^;Y^fG3Vp)St)LRf%7K^uIQLp z2-CdRvKEkE!y_Zl_E!{!3;6He{bFtbj^i)>NBvN9Wa6vr*M{^KJJfuzv9OMsgA*SR z62`_l@!2gxdTQLTr;uT~8D>Aj$;CC&)s>*G?z}p%;^=q?=rCitiSGu>)2FXqy#hR} zwA7_#Zf?%&So-qiOBm`PN1$cWZw=EqB9205%zPYtJ1uTq0FX`!d7vR`367-=S0L zf#_RkD4>&Di=DU|Yr}>6`@N``#OL6(AWze&ue&*lVw&lPJ1G;-(_2w!0kjT4rJmki zlS%aoAZQ@Y1W+=de9bQ{0d`VXwJ!*IL;nTRMPMN8q}4$)pReD)e}_kfE3By*cT?T} zxHVu@=m{NVQ&W@0R84r>OS7Ror~#MTGhXrzSK8VojEvO^W$ixLbbOGCl$63>9~GFX zNUc6H?WNE$)n7P0AW~%259+-q9KoO_7Jqhpwv|?HY*z8O#ZZpWFg_(NZX!pC{@1UB zu0+8K;8%1Hdw}oyh`!|ekzcDw_aSs+>h_dG?(YO)ebVYq_(zY zgZCvaP1QZ&0?o=ccay=K!4#FmK+ydkIQwA3x|DcbAqjs5TyJ8s@){X`70UX+3Tb3J z+z1u9h=hb+j1twOH(rSX9+|JA#TeayxeyCH;8FlR8d>};<^37)>|qUSXM`ME zxT|SuTG~LRosn?MVy8wnku~7%61$~>S*=^QZoyLt$F{vZ7d34!(rdm=?k;e(yFl-Q z-HYl*6|aegZ8M{Ca}npIwe|PZ)ROr43z%X?BiG#A+L~7Q{9O-`EMg=h5tJlJwW#tK z0d;Nz>Kq3JT~&P1+kWc6?99%XoC-FM&!7DZ2Cyu8gj^=uM6s;2oUJKatSGU`qTVN{%L!2ojmOC;ouP}$8#9ziF|Puicap(2b{!t<2} zKY3%anwgzlT192)^uP=fIk)RG>xmylwzfa|aaTVdA3LuG-L$h~OZF;Sn4j1BK8YJ~RH>U|LM!xvR^8?cerN@lJ|$<-~7aWStu4=Tt1P zsowtnv_4sVwmGTM+ZzJMfK+~>urJa`j?c`@WV^cg;zi;&-4!M(s*kQ;qoXA}n99;P zq3fiCCal{^L!FTQYtNh0eG_QN)<=r+wRmxHwpiKNVBD@bl!ja(QzrS6{R${YpcJyv z-Xmw(J5@=bP(xFCntLW$Kj)x?lvE_)cR8!+x^yxcYHIm1cKe`>soL=f#@GU2 z1AyBw>K4wfowL5lOaV)9@b~8npRX=^iy|UEfK2rUbMT;Kifo|?v8VLunVQn!%vHFr z4m^DQ^%-!~z*6q+?RCd-tJG)!q)gYg`Z2uG6S4)D1;D(6iG2ZjPXlV{+lT=dpiQIN{&^hw(_@5eS#o1B$f9_BV zqI|OBcY=4jA>^(iZ#LaonguVit5XG^XV2Asr4++2Tf+4Q3I@R|kMPsvfW?mWiB|Wf zm`*`9ug;ygV%L@TSC!oqJ`CD_4UGET_73@V>b(-58qUwuYMfPnf%$YwpHfctw)x z2r`+psvbOi$isu_Xit28G)-gJxtlUA92wpd6?%Z~d?ipN9<2Ssx5|ENY7$t}ww#J^ zrL7`8@$vDa=8FV5ROo>OoUvi@P}aa;q0(-NL96Oj($5+fyX;meGCnjzrbT%o!2Z9N z_8<_33nDUQ6UlwfFE0RxB=}%EI2;f#C*TOzx#Kv5L~@4-w<#4;TF=PB2<9d}#85mm zr9j_97Ut%;CdkJ}>mY`=-_l3K{mk<|wl*9p`1P2V;yH<(MQq zjWDOEq9P6?UTbS_YwOO=91W0U)wTDN7|AnFaae%i9zqbcP|LW$3-S@peugYAg2CX^I)2H_9QMN%HpM{7(E={* zHu(*D_sD$>0T2lC)Yy0&*OM|b#Ha#!oi_b{93(4JY5i;OKfcVy*n6B#NW+Y?^sCSq zdMZKp<0R;y^!4W_tB-(I+8oR^g0kBf{5-CMwhIR)&6&u3)bl?{Jb#{?^gQ8M-p`xz zVV1TMr`Q=SxyeM@LjgM@>6oXVuy=X*bVpY^Z~L{vZdX_D)YBEzuJnxUUaAjtmJKh+ z&Ca=NyIk$qACyYdg)N*=?`*fUYJ$p}+c1}Tn;iIwP@|4i%d!WHtWRiYjs~L9AxvsL z&t#Id`S11!2a0xH4p-XIzzG6d(^nJPASMtK6Qhya*pRJ6!1`;InPQNO0MFKMx46I3 z4@^(F`RMMCA6&vMfO8_5btI->;>ZS-=&w3T;FzVcv5*x+E$9}MK8=ly_k?$MJ#mE<74I-_^qPe}eMm^y*3u%^ zJPMskl>-aQj%*QOF~$IstE;QeS2((W)#~r(fPer$KZ`+0H{d~je+qna`C)CY#JfpX z9@%#g+wzvYlG4W5LAQPyP}z$DfyAj! zPfLpw?NmOc7X2|zx}AG5r@Os@k-?S|HTziPA_{ZeUsi2)Ztsf( z5isjqbuMW0JDK;dQUS=iWK#9UO+w)TCfU=o?*02;EB#ln@q7FFRwpX^e||X2_7cy= z!z5%kJw89_hkI95JD~OfH2s=pn~#)PF!AW`^KAf#tHXs`YilniU+1T%9{|ImQBj}} zaPPLmY~#-IatpUzO?IZd{8qM(oakiRO}PzWVbWVS*E30jNqA2e+Lz#c>zuZ_+9SJH zkj7xEybicM=m;Bq#^e2h7J$36l=(UEYr~;Gchs2^nFoS zE1rM$-W<6M(;@Z6&NvQ`3$kb{pbCwZwF5`Hys|PnqM9gh5gZV}My`K$NK#g%uDkvB zIfP~NTy#`abgWa_)!yE?7+O(TnUbPn8d1Q%`y^0$Z9xhKFB2?B410gG(a!|_>Jf8% z_Hg{*X6U)7eXP0SfL?t%oe+KyfSr;zA*8Ne<-GLsCsw`ti7=X4o%=%v*$U{#*h3+iK6`+whe{rD%jE-ipzK!wnoM?c17Sh=I`uYps8z5(Ln+}YO z@d`eICE!U6qR-2Gl$3MOxA}a%g}w+VY`XqRXnFq^w0FY=7gA_Dhlc|_#xiKIRp3Cd zIe=pz%s!Dogr^O7e=IIu-B{*|!cIv`E7fhX{U^ne3ETy(R`Euf@+7s-k1ClbCiQuF zuHs^K7?^d_d1?y6FHKDe!yjj#?ICjF-@g|Iqd{0$*!6pFY?L`|SqirR?+EA-XUDT0 z&SYsNUQ{xCb zu8(jSb}TFBmtx$#i_f^5TsH-5Nt@Fw1GZq0e$tqd76~J{h?-jVyW($OO7C8GcRS*) zVy>>Ad^`+|jD`yf8zxc|b^Nfu9nc3r*V)lz)U7kVzd2RpQSCtQo*>}G{!r?u!F{n+2&_modluR7$_1km!B`L4%HeoTpwU zEGxSO+<8YNkfILf$J0Jv2L?(}vEFNG#sw2|6O&#>bQ(T<@BsTdT3&WmvztX6U0%3p zY0+?Tb9-D}YH3ubmzLU#iB0YaYx|!%mq0)RW@^{Wk4H9NW=?xfFdE0 zln4%mpC3@+Zr*n8IvX6BzoVecOA=)G&r>q@|g5%7qqsfqjW;ldC1N{&eM z-!$W5XY3q!PVVRNRhW4r8IC^BO9+JU`ichwO_`-@aI^6*N>-g*x@`uUm4y@x==F7d$gBvN=hwc1e>i-UdwTS_3=i3VC2%tg>^-44lY zVp+$%wr09WItGYx#YCI2g~1t=qNkgxr;GdT+y40S;_X-yk&5tgN2yNS%r3Vsomm#M zgdBf=(agi9Sfl}LUo6x^kl2C$g1rtX2rMK3#1o&HuzH+6M~i0ByY?7RQc&1CIDklf z0vie_zSiQ3Tb&eZVv+-$ZX`rF;QBVj=O45;&+w3jo_h(#WTfG2Pf#%Vpzpz}u zn!`ytU>?z_ySsNZUFW<*A>0B9XL5pCR1|ND8A$w6>lq5p3W*diV|Gm-)>v%X%B4xum%GKHi$RhzK;oa2VT;u7`Mw z;iDp;F7kEilReIY2DIeBFt$3<`wKdW_=ibUK71ahc}`Zbpxt<$AG6TV(9qMZ5UW4Nz+5n z1wi+~BISd%kAy1zr@47+WM*sr*<*fwtzQT_iEJbS0$3cAzWM!qd+?1xnx<9AAQ2#b zS^LbOt+f71U}sGwqNqsT^)wi0CauzFA$Wv6;(&9$eX_#_Mz4cD3_PALIzghYF(UArTQ7J*4LsP6b-kOyuOr z(nS0Q2I(vPMpM;JiKBnPUF5XB4g6(5PL3(8u#Y1Jgi= z+aQ0Lf))Z7PhjIi86$Mg_3fQ$vuSU+-NFGARg>B(o7>kH)1_o9!7qO6>I!D0r7tX8 zF7BNa+p^MO5S8~?_Ex64{6=Y8V$#+swndJN)fo!z88CL7?P0=?_1OG1xc}wunzq(> zd9Oyb32)ht^%GoF?$^Zi@kl2pC#1N|bb~6zM11etJ9VmmWvU!8@g9-NynJO#s6U;q z;QRCU)e(!pTOdK9wb7f%P>4V4h~{?op8S;0iyJDyi&0v!IoWCAV^%tXF8v%MG9gAe zQ0hm2Rx*h|B271w4e@=1DJFhEdQMK;5)9F^va^K> zRcck)Pfbj?&;5}GjwEMO^{?Pfm{G$A6=l~j32kLW4cOwP0XaK-Aq$n2I?qle#KhJAgu z>qXj60~Qq{N@f}Y5?oHVpS$$KR}&dC0(P5x-6lXlw6(SHc^w!Y{=yr0`hBa|p`VZX z%SF4Wni}`%i!W=6g~2<*1pyY@<0rB0B!Y%M{*u2(ejGovb7v7kM{JWdFYVnjtVBX! z=Kv|CxoIUXPJoL$2mOKgjqfqw`uC9@-Z^rWdZp3>gCCf*@iG_Iww;hk zB%|Bld$E%Ifr3y~RW&v-F*P=RW}Kv1nD8EOQdrnCa-a5#_|VYU@B?~&eoAt3a)C<) z6ZDX+4PFDKB)-3KdRrlVLe}JV z-9Lt2g^phr?92bWvM|GW#nwvfrH`v$+NhKA+0M!@mq=oO+gs=rqk1X0d&<1Le8FiO zxe^Gq4=j6=B}P_2u}k{r7pPa-9zgcb<-LQDI5|B9;5fgqaO)=V56I%fh10WhbAZ9v zjk?U8jwE(>ZEtMs?d}5kJ8EA3<;&gL`~E>P^d#}hbIn&p;O3s6%i6b+kDMOUK|X! zK!j{ed%bD$S8}1sYr;f0y#9cK0i-#$u)DiEGIFpS5%3ZahtMoUVt)$@bD#Ou)YH?m zyo{w&=MIg`-yP@uaXdUckb3)vhB(;R9IU?&4-Y$8f9HH^%xgZ<0tBg2JLx}%VKjL4 z09emL1sV30v@~AtYk&!(qqGzh6p!aaJ{w*GJW}_I)3TKJHxXILbWYc2DJJ2Apg9f> zFMx&1j3FT*(18MRezY^!47kt0@Uo+=t*g6xX~!9i8t}v;XABxv&~C zSc2oNsa&TZdQV7y}K>5+MG2;;0BYr#IL4_%}F^Xt*D_)a%OQ z*Rs8ee7-{A zK0iGO7^7fh+*svFz_y+FB?{&RgVl|mWFac51!$7XtgL_|BE`p7PX2jA2qPTC7qs3U z$i?i>e=EB#G3sIEoa}6C-Y;AWx<9IRZ)C~YU z0cXW7W~HX3h{$|jdOLU$UQQ7qgyP?^Tz_ktFxtvMc4}xSCHZ4PL9ezj6KHwbdnMf6 z&(BZLttNipVSg6~suv2JKI$H_ zWzar(V!t_oqgRT!!U1s?h-LO?&;D9-fnWFmmvsY}`yh_oc4pJh&)scYzlMa^*b@T} zWO&VGx*sx__h&GM_?l)LG`u_YGYBCrBy8YN)fV{Dz!+eC>7ll|A$zOObjDhPg?KR{E9(esaL)V7EbKk6F(a9@hK8+h2?^D4kZuU&;{fqY zOgxbjULG4e4pa-|p;&ga)wz;}cC#VDtGKZWtHcJrci<$qv@8e;`e2~1pT#KXbqQUX zvyhOGu&}Pf`t?(SSJ?Z(6pN+RAfzPMw9Jem)x6c9_i_XlC+-P+ywz2DNXN2nR|3NF z@+{2Eg`xqtdLT~qDz^I4fMd@++r z%_mQdT4@9l$?n~=oo#Gg^}|9WDL*G+Jar=D1g_qEa7V5lvR-eu>zxJf0lqUe2{M0} zv%4PFg75d-n&P(pi|Dn0(cvPS>aef@{|n=5w4y1Uo7(gMF5)fZ8dHI|cL?w60p!&* zXuN+^N&~OF1Y*yP8<>iJMIH(NdpLg;MZEbZy)pwdOz8MidWETcz=N95O^Netti|6_1C*F>*$ef7UjiTh{o0NjFT z{$DR8)c=Q{i04!xBfS0Rm$^o!y{e-Ep`ivF3U$hJ@bm%4XZ-eUZ>b3`80x?f0B#3p zZ#=;N1_cWbhZ!-T31z}=sq1h%3ceU=s+Zkibss2z&wGbp2Lj9v#~g=L_BJ-ILj#9L z`~)%ZhMM{hucP_!_1MH`f%BezGk*JJY;^Ph<$U$Q!osNd`1q)(<8`%>O1tOKp{Yo; zAmq^hrOhDhq+nhOmMS7UbeAL-CXt3(O{_s^TwRq`R8s2e?*}TC5Fa1^zCHQl$3ERl zk+dj?ELMMie{eC6j2;XQTcu_U{m|w=fjfcj!2M|R;#yjBJ1RKV0C9PuAYMXEFv~zH zeqv(6AMGK+lo;4gR8%*xfWlSh8Bs`@@hlf0_`y+r?ph1!+2W-b42mr+EiUi(xVe>6G zx^58gBmEWp*rW^TjKwIZqO`P>Yh!INw?en67(hjlDub&Y^fLc?U7ecEgWZUqzgACA zkDgH!Bj?_F<^VW1+@+UNp`^_q@=}?;?-JsYoKEm#Xv#_B{zZJ zts`Nh7Wz04f>cz%gd+8}K+l^e9lSi>oKgx4z2^QnyhBo_#t&eJAu^!!fnk)mv_Z)A zLoQkc%JAFW9uT6-i;4;wz9NzwO@{JTK#O3|e&z1gKrTL%Hg+A5M}L9V{Ra0-M-ty3KbBPr`@Azrr9qjh$OD-xT6Itb2^z_(t2S}{`P98~U zgVp-4H)L2aI*WE30;SrM{NeQU^u{`)PB&;BY@n~Aw(BJ)DG^zc zQ&UqOXZVJnU;quuxZ;oujKyW7q`XeHK@!SOPDv?tJCXt2WtBF#8PpQ|hYx9I8AEBR z*>d#&f)5pF8JU}p!56NOknm##X9KgCu46Is{U1dr{9AGVvmY9!k zVjS2#!N8!)r?&G?NJwg-Vy`SOSN^!`wnrW3sidv#*?LdsHsww4JH7cD!@yhg$(EGZ z4dtmB84mqyX-NYf#?{pV45(3iM8NLa!r0J0C|&U)I*Qk`IlZX_k?rZzyU@xqh@s0h zKcS_ynD_xl>hGMN*cmO6gFS#zV-IKb&%}O_^4M3 zx{HBFHP|HtJj|CfVGe4!H}xp_#XEr15|Wab=;#`C?jK9`K1qY3VjEo-vJv0WHG6!!gqj?-o zBN#oQ52f*ebC(lg;&1!S5;Qhd&q1+fWZ+Q|UWZugOxQ@z&zI)!>g>eJdW)yP9i((U zhad!f)X%eHX-_bwWqvgypU|8?v_pS42XhMJjMN zIp`+X2om6ue}3>?Mq$7=+ng93#D-!Z17$8tAqv+Tc#4RFjSi$?fZbn+IO~o{l9;t? zMoLZEfyB(Z@;rYj{*zdU1keVL<-{>~Prx!9wi0;f&K;N%OHKqu$Le5}onj1Gh{O?+ z7d?F}(3>f-aGGDAXob&L=rmvsR6a=>OvAylAt|L`gi}c^2YX1>b7| ztXxD{s4a0WfCmp$VRkl)`|;D$6}bBXoqBSK23Q8*gjw|Nw6B3u0K8}ua|Dxm>G5yh z2d5^(1zHaF>PqsT5pwMSCz3Yhpk9WABqvf+QAHkXfO3$MczR+%Q1yn9T)!F9iaHi9#mfu0O>$ORyuA>+tv&>8$E})*Q{o!TJWt%**!gwSdW1#1bG4ygdu)? zM4H#tWk)7-Wq2SSj@orR42HhsX|M|-sSD;?LAsfTDcAn(?F#UtM5ZRfv*_8NW!AZq zsQZ}joN>MiPq364 z1~<>)Z+B}e6f%Q4+R8!F@;nWDWBi%op7&J*xcCs!w4!0(2n0w?;^^6!2t1H42-O1XebgAwBery8)@#%bjiuGpx3Nq zuB`mp5|Ee6YIc{D9>GMg>i{zehMSjy7`Jg=n`!hB!5m96IOR^^+X2S$h=~!3oapH2 zi~UJSdsJnh$kxN~#i>ao6TU{psgkZfLQVzR*rd%jOs@NIX8@!wFOKA)h#L|?sRrN$ zmWygAy$$2iukJAOyB}lk!F(dXdeWcYVngj{?ZzYsko zWr@uk3jSKRZ8@}TAjlW~_<=|oYU%32x4WL*&dsFZ@Hr#|2a3fd zrMe}SZ>Dg#59o38FX{)Cmuy!o39>ufb5r%y_XjEsD0qpN#8fdSJiU@yeqdJbdbWBSW@I0TNsy)MlGaD6o7ae*#I$%`rF;3ugt($moZ%)>;Z;_GBN(zW4O6*^H zIV}1{+)nk`6jIaXnX8d+YzewEy!CBslO(m&%Xf3I8pwJ+(R@6KBwjH2Ljfn`#sF&v zi#ljOhHoWpw6#m>ysjL#|Gsq%h>0P*;DWK$t4l;Oa_KXe-2vN8G<-+#XAZ=+&YL%H z{?4#OdsaE*>HuG6`UMqXiVnqNv7bz^PxKl7_1AHgz1F?qO=t-ISio>8q13Za`Sq_G-aI~94vCG1C8Oprqv^rRK}SnpF#6+S zG(csXqu`kZjr@$4hv>%!kMU1j7-$}c=M6J+qoXcFD$EI7Z|zsMZf4mLaw_WyNWXlk zS!!IAZg2#xR+*X6=H@23oOiK)tM1}=%ZpS0eLXu!fs`i!GT{BGq8;T}44|HG>Pj z-$JeW{M=OjA6{E6zVcK8#kG@MAI45`HqE}$Kgl9KYpi{Cj)xtk+Jp+v7KX=z*A+t0v^h>E#hQrs3#CjkrGWw{HK z>c}8;J1>d18~s8tG3_e7xIoQ;KmD2G%$i(@?QBL}c>x3-^KNeua_>e*r7ef@Xsa3S z-!bZT1m=f!ngXdoHfP(&fv*+${8L=~uu4JP8HI_i?kv2klr{DVf9}(}B@SzbM6m*z z{)vfKpchFk{6)wa!YBy5GF}ypS36z7l?J%aTie_J-MPG2zD3r16yS(7RL&Bov2GF_4bBUld6{b-+Zyo zjYbx_$Wl}D@$hWzw!Nn&aMWXBG%Kwc_6xSANV?b$Z0mU;`&et2%wGluAYE!R5vdGk zT_(ytKxz{e{xuFp3ZRr5MqTu#xUqosU*9nL99+|z>dRiiaPM{#o1hoz-25}at-WSo zut1V)&gU>6`R;k)n(l~%*j9k?nCl0ie6+!f{qUh$&;pWoVnCyJ`ozoRlbqM0TJG%p zwId(mZ!~lpz@P(+F-@%2xS-#;8WYgjbyJ?%afa5NgjN4(Lg7bpJhx88GR_z-mfdEDvc9Xue(tz6tLEp~Ucu1rp z3s4dPYDQYQApS0Wi;H8Z%gN4`e`)BK59D}+R5T(LGdJ!^a1H`J!27Dh<HjmRx z&Y)C$#w%jR`**NNc;{B;G-fGtRkB}+(9%}EsD+1NdPTOxPtVIsNg4VXaM%0vwS=ac zM=5v##I`rzKMV>Gr1GMs0Ic)#;%t4&>j@PV`xP#Bk@!f>B>Q8&Z=ZcAddo5B8PsEL z-9!OM%f@s$h*uv=5whIc|G;kxfuPIF$}-*=G##`DYVf59V7e@&T>MBFCrW)EgiUfG z;vOEbd!xasX~P*G8_ zn?)SGdN$kq*`)7y8WJQ7eFBT`E(cq`fEQuKOo4WM+>CfiazHoaxSY9};BBa9@a`|c z66^KH-fI_4md^rr?sGFrCWStiuXLqFVET<{U;0*Rqgu(jr`yNi#x=*JUdPl>U#>@Z zhlqsV`ScBDC$8*|w-fg+9uf6%UA@7~LQvNkYKCohv2ZXOi>5&{Az0N;vso?KqUy?SXXov8iB#2&Qw^)`DU zTEZ`GNf5932Ow{b`u-f2I6L}M( z(W6ZIk872wHE-b2ZsM%g`-S-sOb`;1k&PyZ+MDMC{t=_j2w=p&ewn;qr`xMW|H1sY z;-M;e0GCs39A`)d;A1k5Zgn&^_H@cvnEyn|3u}nWc71mnT^Ia`i#tYB=B$-7UFjMc z7ID~?qwmW$?~0;hp)*~X8ARq;FGsA8Z#l}oJ6K1KBEEb?h4FRUvwhIJuJv&5>3w>7 zTpS-H(q^tq`bF(@JK1mnyUARclciB@!lwLO@X8Z3z2wYH0rL?eb6^#CywRNhrq(ay z!f}6*vJ{(ufJq=4`grviav4fPd`kwG2vdkfla83uZKw^=8ypdGK=#+OJ=j_-+8OjAg;I^ORhU~DZ4?(F;y z>D06^vB&ikz+jX+ogB5L$Huxp#=?S3ZYmuE({Si(lU85fXe|~Iu}bYSB|OtNu3yK| z0=<(xXs>Oxz0&QTujJK9GDiFO-bFWWS`>?f%Q&n9zp`jw*><_dF6vc(nuv9vSn%Ph zvz;A*mZw*aX;9c=Myw!Blei^i4#u|bqYHop!(qPw=LML;w_>wX#qH4tyR42INH z{`ZHp7N>?Cx}~;@DT?_^^UPYP1&bD?!9nha%u_yejQj}(lKf!(>-7|uH-f{$YPydf z!D`m`7fMI7mhGl)U)du3$zCzV=)9ZF*1l}_YQ0ic()PVYJoMlzoE z#)%kfSU5S)DuPZIyOV2ck#>XQXC*>+p%M5}*&CC@?r>+&r9BGXlAb<6YnwB_Vf438rQSQ@Fbl{mQ8@LM z+8I~sY>qU4W+3CWttd(!$Zlwh|2!D8x}0?|?sUNO#XMSdl*iuX_OA|Vt+TRlEHc62 z?vmV=Bt_bGhdVue6g-`CGb+q>tV0`(qUSFR-M>do-CJTp>qBPvoLEakSvjzyFp>p; zFripasznf8KOJ-N_pdWKk6gO&xUhY7%zZ!X_&~z41xrR1!gd^d{5D(Sfq|XPjYnZz z&zBb#Uh3&JW@wfz)G$KL>2P0tO7ke^J4-C9{uUH_sr^|@2RfNFc&yU_*=aFG6+CsW zFZW}88mb7}^Stmp`)H7HTh&5bkg2|j-=X{R<#(rF&o+ahkrS$cgN}xR+hGSnFS^t2 z4R}vH2;$!OqEOhea@rsd0{nnV`}G(kr%OBbquzhKZFRh0?wwYA~-p{#KspY?U-@RX_Yv{BJq(T^;*AmlJ2&ywp;v34JCeC%fY~p8zJYT%c=i9 z<*lcuCtx=ileaDisW@!YJcfv`(KIu&w3zU@uC5mJU^EfJulUn@z8y3GP#@s9Es4md z0?=zPm6Ezecp7;3_VwKDk98};gudQ9_h~Ymvc6<&JS23D? z5W}}daO67uTAFeu6Le!;?}B=0v3{Ufp5?TGV<-jeFHjL192zoyrKqnAk|&T!l)9B$ z%gDTjL>yqbtEAdxs5tsWa&6BmJx!a;PsXo|aZfk0h38dN{r{+*=1H9mL0uyVsh?BJMseWXTTnhF;uP>f1p7U-dL zh37J_D7@ff&1Q1Ah->ynZZT>F(D z=!Mi0AvkD_k|i>qwH<=T)fcCpWzz(97U%YYQc97c^AYiUJO1=L`dTCOW{qNHO61J4 zbFoTp(#lp#C^IADFv{}$Hq&m9YSqm;`l|eaK;;`stsc)u&uF;s}lP@0|rf2z~U2YA$ zamqk*1B0dM>9+GVfbG?%=nwiAJ#gu=u6zQGJ(y+@dtVRwsGv%$`u(MBY7`;b%;V;W zudQNAh(rbm0WrpsPZTAwx&X?_{c=kmrDi?db2%x{niw?}G$F zZ!<|8bvzUu$oL$@5VE48$*TFrxV?P51|ziKq0D8YS-4?%?mP38*ig{Y=>G}NIy zOtBpRqHKYgZvkK&kUr~(tqg9Pg_HiVevY+;w%|~{Ne66x4;b4ZB3Da%_8GWUP;Gwa zE$ZOt2=Z5@Wi98Pa)Pmtx{COQtc(;750$9Rw<`hRu&cLMR!;5^V&VIX!ZI?Apne5q zgX=>YE;Op1Lf;+P1mZFFC83TwUQW`PES+Tz{ZF$Yq^PLq+=K#B7% znmF>Y0-WUE2TJ%H9rUjwZsqR3O&{SmGIrSK$dG>>biAl@InRF`!DKK=|MfE(TJtTP z|IvBZzw#Tn^WU%X$a(ueMN0=C|9^Knaq-wb&83&nWU8+EYB9!vz`ErV?QHwU93VTq z0XoPz!jc!zSf9X;ISh{_5f(5s!E9dI1Ml7|3!({$R4LvTF%W{6Od*5SxZ^;0ckm0m z$L}x1U(SETR|yIxhT)^X{v{>8=LVY0m=fcZzU1gQ*APq9508$bhKshyQtQ=8|%kWu(y+us;aZGOx3u3DqGG zJ=4E|kEC{Ze7pB58mj8zHMGWC9Ps5T{MeZJ z7l%*OL)$yyE$a)~=oO)vV^;$l6!fInx|8@z>{v~787r&N#9+fooN^gp!u3HRsczFT z=qUxWq6;11;OJjfAR-Sy1y&?IIUn1f7-=^H&Tk2|*OmWx{56`4Ke65&UpM;v`Ev~= zx#Qvfv!G(F^)>28A_|R?c8~93Q@K9BRYWnfWVbK;GZ~lknXvHa_Sazy3$0LobLs&y zA%hR7Nw|*B4ui8AxM*~SgHJ?s!f-JwJR>flp-?%OTy%b4&jlVz96J!#;7lNSOqaEU}MK>J0KOl5thQxqA^IM+JaQ&&E*Zge*oRVF9C6X6qZT|<;Q?aUMhd8^O!N)^WDrWAQUlkOlA)R%fih#luZ znN(5TlXZ_*hst zTGFED$3o}WDm*UzWzy}Dx?tI?Uf+L9u=K35s)~j0so3$&FLM6h-zbry-NoX5LL;0) zMYa3I^9yeIz`KY`6ZT%lm(cXQ;lBO(^4Ix~%JdvQWhcfDRT0-Q-BaS?UcTt?K!q^c z5OJogy9MaB^qGE3OLcTOv&%?Rbj{p@S-4HV^44r-YKui>&usFI-FIfV5jkr=CskT~!w4;>t}KqEYVf}uk~d^5vR+5W z;ScaL*;1y|r>0K7Wwu1zL(bw-of}4o3=R)mEHe-n)~zXA$F;S!;bYdsyn2%+z7ypw zP9gaDB)^8)Bl>|S3eFhu1+~wOsHVL5Bgyuv05xo)4ya&L1k|I4hM@4kwL}VlMxm9qKy0<6Wl<^=rR1e(-)WY4D|C^O#rv+ z=JS@Fo%8nfcUW&~26{U;yuVCh`J~7S>mqnu^_U|w0RxIWJap%CC3kM>cb^)-$zW9d z>o37FOWp~MsVl`=^vCf7hi{_$Vo<1ifnqP(^)H|~PLUI)?8FeApQzIRcA_(~L5)q! zL^oD7Nc4MVknB zc8?SDXqc46CEj7m`zsY9qEN5RF{{N)HBv2)m5fbiBh&Q?JXQ+L{g*58))qZa)soSE zWIZF7zL_G9=Ejf$#w>R5-JdT{fB%Tj$J6r3;)4(?vIBVSrYf8 za@fd>52IsMxJf#alZYaLwe#N3mllDKKMOUW(Q*nTQmewPeD7}2>i8V-BJn-#K*t7Z zx5MLiZ{ECdl#u6iXULrknKL-z^B3^-p#=Nnf$TucrJgkT^tp5{i=G|@wFpjMmt!hA z_BW^zJBzi^@*6sNcX@rBzABuCqX}Wi8em;NKXb+ZKJ!_{AZ&U(4=oIGF}Myv5gDa7 zP_nr<87MK|p~B?&Xg=ftc6Un9hONtH1GN>#vUVm)`OTd z$_1>4E>Tk_{#CesIK1=Sv^RdeGaF#?NSn=^@rc>&cNZpy{FofEmhGq8XEqBM2zb}H zU!xkP2mJ~qUCu0z)-JknnM;SW7)NfuKOt{`LT}Tw8L`(Quigiz&&_I_->%;Bdt^Bz zFDhCpdokhY@fYeMQjhAB5BWFI6xh%2!JpxW@8T5VSkci`;%=dPY}G-+#Z;M)o*L`_40{RQ$BTi&hv z2W+K^D&nsWdp7w?ZGU!lqFiwbwU^hvZ-^F027j)(;NsI5FWdq3z=2xmtc>0wx3{#V zjW;ggxj~ww78VJffzDV@q6$}}PLIP;#tQw>f(;dl67nJff-H|rM`=Q9_r#HU217Rf z<5BLA}woZOh(BAm04QEi&fm z?F(W;{~5Y9$G9}`5Gc!MJ-yLwaI-k!KXHrx zx?bW!`y{ol~hMh3sDCGQ`Y{KN6Zzh95`@p28z`{xB0^yPh=M7qS!FF7Y@(-S#%er7@r zR5D+`Z880mRtVjnkS7SZq!6zuYx4n@` z&Oi6>vzBcl7i&g4A1MssCm2slwqUx_Z!7cqqoQds|bGveQG_T#F+KcBdK|8c;Tzu!vnNAiu|(f{+@|9UQBaCaQy z{@fL1440DgKaWyOAx`@z#hUrrD1iO@13bzUqvkRHuad8t(B-b)9)c>eiA8qpxzP7R-zxso{D+=GvBXaLTpbu2r(@CS!C@5WeqA%^3e;X0lg9D`6L3kLhOt z%|iXDh3RBwP*j?WOm^akj#CRAqjf!;SNXu+0KJdBUwmm_GRbe>k(G&2GHB}{7sSRR z*;|r)()5hU?LoDCP95 znoIx7(lwD;^lPJCwOBv?TPa*PcRJTPm%D+y2koNinVN|k%tqX?p9Bd7$gL(zRP&Fv zI7IGZtJ)f=O}!OsY;JzcigN#t5()2Z&CqAFVT+5z)5)#( z`8r^SsHuN`e{hrdJSF%!6FmDMhhh9b9Ycw{#t8OjfWnN> z=++#1?-l=ru^+?h7U!mMk;xUh^H&O)@;NOm7e@lo+_T(VOZwB*<~Q6zKk_QyTDLzC z&fE%!=gcb@Fo{i?6nHl zgOnqt?m0=+0`#64+n%dNgd^XLnCcF`Zxb|qskPpHB}@I$Q{;IwdNA)Wrn3KJc?@cd zX>!GKkDXQWSlKMP_+W%O%#}voMRAv`7d4n8

IjTfdjiIzi_6QDJtY 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%0DYFpBVlHY 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 rcmDDNZzWSmct?4 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 Mkb`xJ<%R2i0t>K5r2qf` literal 0 HcmV?d00001 diff --git a/roadlib/pyproject.toml b/roadlib/pyproject.toml new file mode 100644 index 00000000..c64963ed --- /dev/null +++ b/roadlib/pyproject.toml @@ -0,0 +1,35 @@ +[build-system] +requires = [ + "setuptools" +] +build-backend = "setuptools.build_meta" + +[project] +name = "roadtools" +version = "0.27.0" +description = "ROADtools common components library" +license = {text = "MIT"} +classifiers = [ + 'Intended Audience :: Information Technology', + 'License :: OSI Approved :: MIT License', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', +] +authors = [ + {name = "Dirk-jan Mollema", email = "dirkjan@dirkjanm.io"}, +] +dependencies = [ + "adal", + "sqlalchemy", + "pyjwt", +] + +[project.urls] +Repository = "https://github.com/dirkjanm/ROADtools/" + +[tool.setuptools.packages.find] +include = ["roadtools.*"] \ No newline at end of file diff --git a/roadrecon/.dockerignore b/roadrecon/.dockerignore new file mode 100644 index 00000000..13c3b7dc --- /dev/null +++ b/roadrecon/.dockerignore @@ -0,0 +1 @@ +roadrecon.db \ No newline at end of file diff --git a/roadrecon/.gitignore b/roadrecon/.gitignore new file mode 100644 index 00000000..3e86d488 --- /dev/null +++ b/roadrecon/.gitignore @@ -0,0 +1,4 @@ +**/.roadtools_auth +**/roadrecon.db +venv/** +caps.html diff --git a/roadrecon/Dockerfile b/roadrecon/Dockerfile new file mode 100644 index 00000000..5a62d29a --- /dev/null +++ b/roadrecon/Dockerfile @@ -0,0 +1,11 @@ +FROM python:3.11-slim AS dev +COPY . /app +WORKDIR /app +RUN pip install -r requirements.txt +CMD [ "python3","/app/roadtools/roadrecon/server.py","--debug" ] + +FROM python:3.11-slim AS prod +COPY . /app +WORKDIR /app +RUN pip install -r requirements.txt +CMD [ "python3","/app/roadtools/roadrecon/server.py" ] \ No newline at end of file diff --git a/roadrecon/docker-compose.yml b/roadrecon/docker-compose.yml new file mode 100644 index 00000000..14500b69 --- /dev/null +++ b/roadrecon/docker-compose.yml @@ -0,0 +1,21 @@ +services: + frontend: + build: + context: frontend-ng + target: ${TARGET:-prod} + ports: + - 5173:5173 + volumes: + - ./frontend-ng/:/usr/src/app/ + restart: always + depends_on: + - backend + backend: + build: + context: . + target: ${TARGET:-prod} + volumes: + - ./:/app/ + ports: + - 5000:5000 + restart: always diff --git a/roadrecon/frontend-ng/.gitignore b/roadrecon/frontend-ng/.gitignore new file mode 100644 index 00000000..53f7466a --- /dev/null +++ b/roadrecon/frontend-ng/.gitignore @@ -0,0 +1,5 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local \ No newline at end of file diff --git a/roadrecon/frontend-ng/CHANGELOG.md b/roadrecon/frontend-ng/CHANGELOG.md new file mode 100644 index 00000000..a4386b3c --- /dev/null +++ b/roadrecon/frontend-ng/CHANGELOG.md @@ -0,0 +1,57 @@ +# CHANGELOG.md + +## [3.0.0] - 2024-07-05 + +- Mosaic Redesign + +## [2.1.0] - 2023-12-08 + +Update to Vite 5 +Update dependencies + +## [2.0.1] - 2023-10-04 + +- Dependencies update + +## [2.0.0] - 2023-06-01 + +- Dark version added + +## [1.4.3] - 2023-04-11 + +- Update dependencies + +## [1.4.2] - 2023-02-13 + +- Update dependencies +- Improve sidebar icons color logic + +## [1.4.0] - 2022-08-30 + +- Update sidebar + +## [1.3.0] - 2022-07-15 + +- Replace Sass with CSS files +- Update dependencies + +## [1.1.0] - 2021-12-13 + +- Update Tailwind 3 +- Several improvements + +## [1.0.3] - 2021-12-10 + +- Alignment issue + +## [1.0.2] - 2021-11-23 + +- Alignment issue + +## [1.0.1] - 2021-11-22 + +Fix dashboard icon color + +## [1.0.0] - 2021-11-22 + +First release \ No newline at end of file diff --git a/roadrecon/frontend-ng/Dockerfile b/roadrecon/frontend-ng/Dockerfile new file mode 100644 index 00000000..a6a71b47 --- /dev/null +++ b/roadrecon/frontend-ng/Dockerfile @@ -0,0 +1,29 @@ +# Build stage +FROM node:latest AS builder + +COPY package*.json /usr/src/ +WORKDIR /usr/src/ +RUN npm install +ENV PATH /usr/src/node_modules/.bin:$PATH +COPY . /usr/src/app +WORKDIR /usr/src/app +RUN npm run docker + +# Development stage +FROM node:latest AS dev +COPY package*.json /usr/src/ +WORKDIR /usr/src/ +RUN npm install --include=dev +ENV PATH /usr/src/node_modules/.bin:$PATH +COPY . /usr/src/app +WORKDIR /usr/src/app +EXPOSE 5173 +CMD ["npm", "run", "dev"] + +# Production stage +FROM nginx:alpine AS prod +COPY ./nginx.conf /etc/nginx/conf.d/default.conf +COPY --from=builder /usr/src/app/dist /usr/share/nginx/html + +EXPOSE 5173 +CMD ["nginx", "-g", "daemon off;"] \ No newline at end of file diff --git a/roadrecon/frontend-ng/README.md b/roadrecon/frontend-ng/README.md new file mode 100644 index 00000000..70ced9ec --- /dev/null +++ b/roadrecon/frontend-ng/README.md @@ -0,0 +1,13 @@ +# Roadrecon UI NG + +## New features + +- New Frontend based on Vite, VueJS and PrimeVue framework +- Backend pagination for better performance on large databases +- Added a Policies detail page + +## Credits + +- Dirk-jan Mollema as the original author of the backend and the tool suite +- Kevin Tellier for the new UI +- Template by [Cruip.com](https://cruip.com/) \ No newline at end of file diff --git a/roadrecon/frontend-ng/index.html b/roadrecon/frontend-ng/index.html new file mode 100644 index 00000000..c74165c7 --- /dev/null +++ b/roadrecon/frontend-ng/index.html @@ -0,0 +1,20 @@ + + + + + + + ROADrecon + + + +

+ + + diff --git a/roadrecon/frontend-ng/nginx.conf b/roadrecon/frontend-ng/nginx.conf new file mode 100644 index 00000000..2d97b216 --- /dev/null +++ b/roadrecon/frontend-ng/nginx.conf @@ -0,0 +1,16 @@ +server { + listen 5173; + + location / { + root /usr/share/nginx/html; + try_files $uri $uri/ /index.html; + } + + location /api/ { + proxy_pass http://backend:5000/api/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } +} \ No newline at end of file diff --git a/roadrecon/frontend-ng/postcss.config.cjs b/roadrecon/frontend-ng/postcss.config.cjs new file mode 100644 index 00000000..96bb01e7 --- /dev/null +++ b/roadrecon/frontend-ng/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} \ No newline at end of file diff --git a/roadrecon/frontend-ng/public/_redirects b/roadrecon/frontend-ng/public/_redirects new file mode 100644 index 00000000..f8243379 --- /dev/null +++ b/roadrecon/frontend-ng/public/_redirects @@ -0,0 +1 @@ +/* /index.html 200 \ No newline at end of file diff --git a/roadrecon/frontend-ng/public/favicon.ico b/roadrecon/frontend-ng/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/roadrecon/frontend-ng/src/App.vue b/roadrecon/frontend-ng/src/App.vue new file mode 100644 index 00000000..55e12f8b --- /dev/null +++ b/roadrecon/frontend-ng/src/App.vue @@ -0,0 +1,45 @@ + + + + + + diff --git a/roadrecon/frontend-ng/src/css/additional-styles/flatpickr.css b/roadrecon/frontend-ng/src/css/additional-styles/flatpickr.css new file mode 100644 index 00000000..c497d4bd --- /dev/null +++ b/roadrecon/frontend-ng/src/css/additional-styles/flatpickr.css @@ -0,0 +1,239 @@ +@import 'flatpickr/dist/flatpickr.min.css'; + +/* Customise flatpickr */ +* { + --calendarPadding: 24px; + --daySize: 36px; + --daysWidth: calc(var(--daySize)*7); +} + +@keyframes fpFadeInDown { + from { + opacity: 0; + transform: translate3d(0, -8px, 0); + } + to { + opacity: 1; + transform: translate3d(0, 0, 0); + } +} + +.flatpickr-calendar { + border: inherit; + @apply bg-white dark:bg-gray-800 rounded-lg shadow-lg border border-gray-200 dark:border-gray-700/60 left-1/2; + margin-left: calc(calc(var(--daysWidth) + calc(var(--calendarPadding)*2))*0.5*-1); + padding: var(--calendarPadding); + width: calc(var(--daysWidth) + calc(var(--calendarPadding)*2)); +} + +@screen lg { + .flatpickr-calendar { + @apply left-0 right-auto; + margin-left: 0; + } +} + +.flatpickr-right.flatpickr-calendar { + @apply right-0 left-auto; + margin-left: 0; +} + +.flatpickr-calendar.animate.open { + animation: fpFadeInDown 200ms ease-out; +} + +.flatpickr-calendar.static { + position: absolute; + top: calc(100% + 4px); +} + +.flatpickr-calendar.static.open { + z-index: 20; +} + +.flatpickr-days { + width: var(--daysWidth); +} + +.dayContainer { + width: var(--daysWidth); + min-width: var(--daysWidth); + max-width: var(--daysWidth); +} + +.flatpickr-day { + @apply bg-gray-50 dark:bg-gray-700/20 text-sm font-medium text-gray-600 dark:text-gray-100; + max-width: var(--daySize); + height: var(--daySize); + line-height: var(--daySize); +} + +.flatpickr-day, +.flatpickr-day.prevMonthDay, +.flatpickr-day.nextMonthDay { + border: none; +} + +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover, +.flatpickr-day.prevMonthDay, +.flatpickr-day.nextMonthDay, +.flatpickr-day.notAllowed, +.flatpickr-day.notAllowed.prevMonthDay, +.flatpickr-day.notAllowed.nextMonthDay { + @apply bg-transparent; +} + +.flatpickr-day, +.flatpickr-day.prevMonthDay, +.flatpickr-day.nextMonthDay, +.flatpickr-day.selected.startRange, +.flatpickr-day.startRange.startRange, +.flatpickr-day.endRange.startRange, +.flatpickr-day.selected.endRange, +.flatpickr-day.startRange.endRange, +.flatpickr-day.endRange.endRange, +.flatpickr-day.selected.startRange.endRange, +.flatpickr-day.startRange.startRange.endRange, +.flatpickr-day.endRange.startRange.endRange { + border-radius: 0; +} + +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover, +.flatpickr-day.prevMonthDay, +.flatpickr-day.nextMonthDay, +.flatpickr-day.notAllowed, +.flatpickr-day.notAllowed.prevMonthDay, +.flatpickr-day.notAllowed.nextMonthDay { + @apply text-gray-400 dark:text-gray-500; +} + +.rangeMode .flatpickr-day { + margin: 0; +} + +.flatpickr-day.selected, +.flatpickr-day.startRange, +.flatpickr-day.endRange, +.flatpickr-day.selected.inRange, +.flatpickr-day.startRange.inRange, +.flatpickr-day.endRange.inRange, +.flatpickr-day.selected:focus, +.flatpickr-day.startRange:focus, +.flatpickr-day.endRange:focus, +.flatpickr-day.selected:hover, +.flatpickr-day.startRange:hover, +.flatpickr-day.endRange:hover, +.flatpickr-day.selected.prevMonthDay, +.flatpickr-day.startRange.prevMonthDay, +.flatpickr-day.endRange.prevMonthDay, +.flatpickr-day.selected.nextMonthDay, +.flatpickr-day.startRange.nextMonthDay, +.flatpickr-day.endRange.nextMonthDay { + @apply bg-violet-600 text-violet-50; +} + +.flatpickr-day.inRange, +.flatpickr-day.prevMonthDay.inRange, +.flatpickr-day.nextMonthDay.inRange, +.flatpickr-day.today.inRange, +.flatpickr-day.prevMonthDay.today.inRange, +.flatpickr-day.nextMonthDay.today.inRange, +.flatpickr-day:hover, +.flatpickr-day.prevMonthDay:hover, +.flatpickr-day.nextMonthDay:hover, +.flatpickr-day:focus, +.flatpickr-day.prevMonthDay:focus, +.flatpickr-day.nextMonthDay:focus, +.flatpickr-day.today:hover, +.flatpickr-day.today:focus { + @apply bg-violet-500 text-violet-50; +} + +.flatpickr-day.inRange, +.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)), +.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)), +.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) { + box-shadow: none; +} + +.flatpickr-months { + align-items: center; + margin-top: -8px; + margin-bottom: 6px; +} + +.flatpickr-months .flatpickr-prev-month, +.flatpickr-months .flatpickr-next-month { + position: static; + height: auto; + @apply text-gray-400 hover:text-gray-900 dark:text-gray-500 dark:hover:text-gray-300; +} + +.flatpickr-months .flatpickr-prev-month svg, +.flatpickr-months .flatpickr-next-month svg { + width: 7px; + height: 11px; + fill: currentColor; +} + +.flatpickr-months .flatpickr-prev-month:hover svg, +.flatpickr-months .flatpickr-next-month:hover svg { + @apply fill-current; +} + +.flatpickr-months .flatpickr-prev-month { + margin-left: -10px; +} + +.flatpickr-months .flatpickr-next-month { + margin-right: -10px; +} + +.flatpickr-months .flatpickr-month { + @apply text-gray-800 dark:text-gray-100; + height: auto; + line-height: inherit; +} + +.flatpickr-current-month { + @apply text-sm font-medium; + position: static; + height: auto; + width: auto; + left: auto; + padding: 0; +} + +.flatpickr-current-month span.cur-month { + @apply font-medium m-0; +} + +.flatpickr-current-month span.cur-month:hover { + background: none; +} + +.flatpickr-current-month input.cur-year { + font-weight: inherit; + box-shadow: none !important; +} + +.numInputWrapper:hover { + background: none; +} + +.numInputWrapper span { + display: none; +} + +span.flatpickr-weekday { + @apply text-gray-400 dark:text-gray-500 font-medium text-xs; +} + +.flatpickr-calendar.arrowTop::before, +.flatpickr-calendar.arrowTop::after, +.flatpickr-calendar.arrowBottom::before, +.flatpickr-calendar.arrowBottom::after { + display: none; +} \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/css/additional-styles/utility-patterns.css b/roadrecon/frontend-ng/src/css/additional-styles/utility-patterns.css new file mode 100644 index 00000000..0fc35039 --- /dev/null +++ b/roadrecon/frontend-ng/src/css/additional-styles/utility-patterns.css @@ -0,0 +1,138 @@ +/* Typography */ +.h1 { + @apply text-4xl font-extrabold tracking-tighter; +} + +.h2 { + @apply text-3xl font-extrabold tracking-tighter; +} + +.h3 { + @apply text-3xl font-extrabold; +} + +.h4 { + @apply text-2xl font-extrabold tracking-tight; +} + +@screen md { + .h1 { + @apply text-5xl; + } + + .h2 { + @apply text-4xl; + } +} + +/* Buttons */ +.btn, +.btn-lg, +.btn-sm, +.btn-xs { + @apply font-medium text-sm inline-flex items-center justify-center border border-transparent rounded-lg leading-5 shadow-sm transition; +} + +.btn { + @apply px-3 py-2; +} + +.btn-lg { + @apply px-4 py-3; +} + +.btn-sm { + @apply px-2 py-1; +} + +.btn-xs { + @apply px-2 py-0.5; +} + +/* Forms */ +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-results-button, +input[type="search"]::-webkit-search-results-decoration { + -webkit-appearance: none; +} + +.form-input, +.form-textarea, +.form-multiselect, +.form-select, +.form-checkbox, +.form-radio { + @apply bg-white dark:bg-gray-900/30 border focus:ring-0 focus:ring-offset-0 dark:disabled:bg-gray-700/30 dark:disabled:border-gray-700 dark:disabled:hover:border-gray-700; +} + +.form-checkbox { + @apply rounded; +} + +.form-input, +.form-textarea, +.form-multiselect, +.form-select { + @apply text-sm text-gray-800 dark:text-gray-100 leading-5 py-2 px-3 border-gray-200 hover:border-gray-300 focus:border-gray-300 dark:border-gray-700/60 dark:hover:border-gray-600 dark:focus:border-gray-600 shadow-sm rounded-lg; +} + +.form-input, +.form-textarea { + @apply placeholder-gray-400 dark:placeholder-gray-500; +} + +.form-select { + @apply pr-10; +} + +.form-checkbox, +.form-radio { + @apply text-violet-500 checked:bg-violet-500 dark:checked:border-transparent border border-gray-300 focus:border-violet-300 dark:border-gray-700/60 dark:focus:border-violet-500/50; +} + +/* Switch element */ +.form-switch { + @apply relative select-none; + width: 44px; +} + +.form-switch label { + @apply block overflow-hidden cursor-pointer h-6 rounded-full; +} + +.form-switch label > span:first-child { + @apply absolute block rounded-full; + width: 20px; + height: 20px; + top: 2px; + left: 2px; + right: 50%; + transition: all .15s ease-out; +} + +.form-switch input[type="checkbox"]:checked + label { + @apply bg-violet-500; +} + +.form-switch input[type="checkbox"]:checked + label > span:first-child { + left: 22px; +} + +.form-switch input[type="checkbox"]:disabled + label { + @apply cursor-not-allowed bg-gray-100 dark:bg-gray-700/20 border border-gray-200 dark:border-gray-700/60; +} + +.form-switch input[type="checkbox"]:disabled + label > span:first-child { + @apply bg-gray-400 dark:bg-gray-600; +} + +/* Chrome, Safari and Opera */ +.no-scrollbar::-webkit-scrollbar { + display: none; +} + +.no-scrollbar { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ +} \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/css/style.css b/roadrecon/frontend-ng/src/css/style.css new file mode 100644 index 00000000..531f05c2 --- /dev/null +++ b/roadrecon/frontend-ng/src/css/style.css @@ -0,0 +1,11 @@ +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=fallback'); + +@import 'tailwindcss/base'; +@import 'tailwindcss/components'; + +/* Additional styles */ +@import 'additional-styles/utility-patterns.css'; +@import 'additional-styles/flatpickr.css'; + +@import 'tailwindcss/utilities'; +@import 'primeicons/primeicons' \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/images/logo.svg b/roadrecon/frontend-ng/src/images/logo.svg new file mode 100644 index 00000000..68b702ee --- /dev/null +++ b/roadrecon/frontend-ng/src/images/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/main.js b/roadrecon/frontend-ng/src/main.js new file mode 100644 index 00000000..a08878a7 --- /dev/null +++ b/roadrecon/frontend-ng/src/main.js @@ -0,0 +1,45 @@ +import { createApp } from 'vue' +import router from './router' +import App from './App.vue' +import axios from './plugins/axios' +import PrimeVue from 'primevue/config'; +import Noir from './presets/Noir.js'; +import ToastService from 'primevue/toastservice'; +import JsonViewer from "vue3-json-viewer"; + +import DataTable from 'primevue/datatable'; +import Column from 'primevue/column'; + +import './css/style.css' +import dayjs from 'dayjs' + +export const app = createApp(App) +app.use(router) +app.use(axios,{ + baseUrl: 'http://localhost:5000/' +}) +app.use(PrimeVue, { + theme: { + preset: Noir, + options: { + prefix: 'p', + darkModeSelector: '.p-dark', + cssLayer: false, + } + } +}); + +//Date conversion +app.config.globalProperties.$dayjs = dayjs + +//Notification service +app.use(ToastService) + +//JSON Viewer +app.use(JsonViewer); + +//Components +app.component("DataTable",DataTable) +app.component("Column",Column) + +app.mount('#app') diff --git a/roadrecon/frontend-ng/src/pages/AdministrativeUnits.vue b/roadrecon/frontend-ng/src/pages/AdministrativeUnits.vue new file mode 100644 index 00000000..6dc0fe18 --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/AdministrativeUnits.vue @@ -0,0 +1,86 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/ApplicationRoles.vue b/roadrecon/frontend-ng/src/pages/ApplicationRoles.vue new file mode 100644 index 00000000..9da32e12 --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/ApplicationRoles.vue @@ -0,0 +1,87 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/Applications.vue b/roadrecon/frontend-ng/src/pages/Applications.vue new file mode 100644 index 00000000..2e301538 --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/Applications.vue @@ -0,0 +1,106 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/Dashboard.vue b/roadrecon/frontend-ng/src/pages/Dashboard.vue new file mode 100644 index 00000000..ee1eb0db --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/Dashboard.vue @@ -0,0 +1,407 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/Devices.vue b/roadrecon/frontend-ng/src/pages/Devices.vue new file mode 100644 index 00000000..ede4e8a7 --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/Devices.vue @@ -0,0 +1,99 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/DirectoryRoles.vue b/roadrecon/frontend-ng/src/pages/DirectoryRoles.vue new file mode 100644 index 00000000..9c30281b --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/DirectoryRoles.vue @@ -0,0 +1,113 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/Groups.vue b/roadrecon/frontend-ng/src/pages/Groups.vue new file mode 100644 index 00000000..e4c9ede6 --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/Groups.vue @@ -0,0 +1,101 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/OAuth2Permissions.vue b/roadrecon/frontend-ng/src/pages/OAuth2Permissions.vue new file mode 100644 index 00000000..741a61d7 --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/OAuth2Permissions.vue @@ -0,0 +1,88 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/Policies.vue b/roadrecon/frontend-ng/src/pages/Policies.vue new file mode 100644 index 00000000..edc36b8d --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/Policies.vue @@ -0,0 +1,716 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/RowDetail.vue b/roadrecon/frontend-ng/src/pages/RowDetail.vue new file mode 100644 index 00000000..75b01d58 --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/RowDetail.vue @@ -0,0 +1,742 @@ + + + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/ServicePrincipals.vue b/roadrecon/frontend-ng/src/pages/ServicePrincipals.vue new file mode 100644 index 00000000..46948177 --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/ServicePrincipals.vue @@ -0,0 +1,105 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/pages/Users.vue b/roadrecon/frontend-ng/src/pages/Users.vue new file mode 100644 index 00000000..9fb9b096 --- /dev/null +++ b/roadrecon/frontend-ng/src/pages/Users.vue @@ -0,0 +1,101 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/partials/Banner.vue b/roadrecon/frontend-ng/src/partials/Banner.vue new file mode 100644 index 00000000..c9a55570 --- /dev/null +++ b/roadrecon/frontend-ng/src/partials/Banner.vue @@ -0,0 +1,28 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/partials/Header.vue b/roadrecon/frontend-ng/src/partials/Header.vue new file mode 100644 index 00000000..678d071b --- /dev/null +++ b/roadrecon/frontend-ng/src/partials/Header.vue @@ -0,0 +1,69 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/partials/Sidebar.vue b/roadrecon/frontend-ng/src/partials/Sidebar.vue new file mode 100644 index 00000000..81771abd --- /dev/null +++ b/roadrecon/frontend-ng/src/partials/Sidebar.vue @@ -0,0 +1,164 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/partials/SidebarLinkGroup.vue b/roadrecon/frontend-ng/src/partials/SidebarLinkGroup.vue new file mode 100644 index 00000000..4c6467c1 --- /dev/null +++ b/roadrecon/frontend-ng/src/partials/SidebarLinkGroup.vue @@ -0,0 +1,26 @@ + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/partials/dashboard/ObjectTable.vue b/roadrecon/frontend-ng/src/partials/dashboard/ObjectTable.vue new file mode 100644 index 00000000..4d259a94 --- /dev/null +++ b/roadrecon/frontend-ng/src/partials/dashboard/ObjectTable.vue @@ -0,0 +1,294 @@ + + + + + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/plugins/axios.ts b/roadrecon/frontend-ng/src/plugins/axios.ts new file mode 100644 index 00000000..5a21e250 --- /dev/null +++ b/roadrecon/frontend-ng/src/plugins/axios.ts @@ -0,0 +1,15 @@ +import axios from 'axios' +import type {App} from 'vue' + +interface AxiosOptions { + baseUrl?: string + token?: string +} + +export default { + install: (app: App, options: AxiosOptions) => { + app.config.globalProperties.$axios = axios.create({ + baseURL: options.baseUrl + }) + } +} \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/presets/Noir.js b/roadrecon/frontend-ng/src/presets/Noir.js new file mode 100644 index 00000000..b63a1b11 --- /dev/null +++ b/roadrecon/frontend-ng/src/presets/Noir.js @@ -0,0 +1,53 @@ +import { definePreset } from '@primevue/themes'; + import Aura from '@primevue/themes/aura'; + + const Noir = definePreset(Aura, { + semantic: { + primary: { + 50: '{surface.50}', + 100: '{surface.100}', + 200: '{surface.200}', + 300: '{surface.300}', + 400: '{surface.400}', + 500: '{surface.500}', + 600: '{surface.600}', + 700: '{surface.700}', + 800: '{surface.800}', + 900: '{surface.900}', + 950: '{surface.950}' + }, + colorScheme: { + light: { + primary: { + color: '{primary.950}', + contrastColor: '#ffffff', + hoverColor: '{primary.900}', + activeColor: '{primary.800}' + }, + highlight: { + background: '{primary.950}', + focusBackground: '{primary.700}', + color: '#ffffff', + focusColor: '#ffffff' + }, + }, + dark: { + primary: { + color: '{primary.50}', + contrastColor: '{primary.950}', + hoverColor: '{primary.100}', + activeColor: '{primary.200}' + }, + highlight: { + background: '{primary.50}', + focusBackground: '{primary.300}', + color: '{primary.950}', + focusColor: '{primary.950}' + } + } + } + } + }); + + export default Noir; + \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/router.js b/roadrecon/frontend-ng/src/router.js new file mode 100644 index 00000000..cf19de09 --- /dev/null +++ b/roadrecon/frontend-ng/src/router.js @@ -0,0 +1,113 @@ +import { createRouter, createWebHistory } from 'vue-router' +import Dashboard from './pages/Dashboard.vue' +import Users from './pages/Users.vue' +import Groups from './pages/Groups.vue' +import Devices from './pages/Devices.vue' +import AdministrativeUnits from './pages/AdministrativeUnits.vue' +import DirectoryRoles from './pages/DirectoryRoles.vue' +import Applications from './pages/Applications.vue' +import ServicePrincipals from './pages/ServicePrincipals.vue' +import ApplicationRoles from './pages/ApplicationRoles.vue' +import OAuth2Permissions from './pages/OAuth2Permissions.vue' +import Policies from './pages/Policies.vue' +import RowDetail from './pages/RowDetail.vue' + +const routerHistory = createWebHistory() + +export const routes = [ + { + path: '/', + name: 'Dashboard', + component: Dashboard, + props: {name: 'Dashboard'}, + icon: "pi pi-home" + }, + { + path: '/Users', + name: 'Users', + component: Users, + props: {name: 'Users'}, + icon: "pi pi-user" + }, + { + path: '/Groups', + name: 'Groups', + component: Groups, + props: {name: 'Groups'}, + icon: "pi pi-users" + }, + { + path: '/Devices', + name: 'Devices', + component: Devices, + props: {name: 'Devices'}, + icon: "pi pi-desktop" + }, + { + path: '/AdministrativeUnits', + name: 'Administrative Units', + component: AdministrativeUnits, + props: {name: 'Administrative Units'}, + icon: "pi pi-stop" + }, + { + path: '/DirectoryRoles', + name: 'Directory Roles', + component: DirectoryRoles, + props: {name: 'Directory Roles'}, + icon: "pi pi-stop" + }, + { + path: '/Applications', + name: 'Applications', + component: Applications, + props: {name: 'Applications'}, + icon: "pi pi-box" + }, + { + path: '/ServicePrincipals', + name: 'Service Principals', + component: ServicePrincipals, + props: {name: 'ServicePrincipals'}, + icon: "pi pi-crown" + }, + { + path: '/ApplicationRoles', + name: 'Application Roles', + component: ApplicationRoles, + props: {name: 'Application Roles'}, + icon: "pi pi-stop" + }, + { + path: '/OAuth2Permissions', + name: 'Oauth2 Permissions', + component: OAuth2Permissions, + props: {name: 'OAuth2 Permissions'}, + icon: "pi pi-stop" + }, + { + path: '/Policies', + name: 'Policies', + component: Policies, + props: {name: 'Policies'}, + icon: "pi pi-list-check" + }, + { + path: '/:objectType/:objectId', + name: 'RowDetail', + component: RowDetail, + hideNavbar: true, + }, + { + path: '/:catchAll(.*)', + redirect: '/' + } +] + +const router = createRouter({ + history: routerHistory, + routes: routes, + mode: 'history' +}) + +export default router diff --git a/roadrecon/frontend-ng/src/services/toast.js b/roadrecon/frontend-ng/src/services/toast.js new file mode 100644 index 00000000..a023e1f5 --- /dev/null +++ b/roadrecon/frontend-ng/src/services/toast.js @@ -0,0 +1,12 @@ +import {app} from '../main'; + +const lifeTime = 3000; + +export function showInfo(title = 'I am title', body = 'I am body') { + app.config.globalProperties.$toast.add({ severity: 'info', summary: title, detail: body, life: lifeTime }); +} + +export function showError(title = 'I am title', body = 'I am body') { + console.log("printing error") + app.config.globalProperties.$toast.add({ severity: 'error', summary: title, detail: body, life: lifeTime }); +} \ No newline at end of file diff --git a/roadrecon/frontend-ng/src/utils/Utils.js b/roadrecon/frontend-ng/src/utils/Utils.js new file mode 100644 index 00000000..d720abc3 --- /dev/null +++ b/roadrecon/frontend-ng/src/utils/Utils.js @@ -0,0 +1,34 @@ +import resolveConfig from 'tailwindcss/resolveConfig'; +import tailwindConfigFile from '@tailwindConfig' + +export const tailwindConfig = () => { + return resolveConfig(tailwindConfigFile) +} + +export const hexToRGB = (h) => { + let r = 0; + let g = 0; + let b = 0; + if (h.length === 4) { + r = `0x${h[1]}${h[1]}`; + g = `0x${h[2]}${h[2]}`; + b = `0x${h[3]}${h[3]}`; + } else if (h.length === 7) { + r = `0x${h[1]}${h[2]}`; + g = `0x${h[3]}${h[4]}`; + b = `0x${h[5]}${h[6]}`; + } + return `${+r},${+g},${+b}`; +}; + +export const formatValue = (value) => Intl.NumberFormat('en-US', { + style: 'currency', + currency: 'USD', + maximumSignificantDigits: 3, + notation: 'compact', +}).format(value); + +export const formatThousands = (value) => Intl.NumberFormat('en-US', { + maximumSignificantDigits: 3, + notation: 'compact', +}).format(value); diff --git a/roadrecon/frontend-ng/tailwind.config.js b/roadrecon/frontend-ng/tailwind.config.js new file mode 100644 index 00000000..c70db3c2 --- /dev/null +++ b/roadrecon/frontend-ng/tailwind.config.js @@ -0,0 +1,139 @@ +import plugin from "tailwindcss/plugin"; +import forms from '@tailwindcss/forms'; + +export default { + content: [ + './index.html', + './src/**/*.{vue,js,ts,jsx,tsx}', + ], + darkMode: 'class', + theme: { + extend: { + colors: { + gray: { + 50: '#F9FAFB', + 100: '#F3F4F6', + 200: '#E5E7EB', + 300: '#BFC4CD', + 400: '#9CA3AF', + 500: '#6B7280', + 600: '#4B5563', + 700: '#374151', + 800: '#1F2937', + 900: '#111827', + 950: '#030712', + }, + violet: { + 50: '#F1EEFF', + 100: '#E6E1FF', + 200: '#D2CBFF', + 300: '#B7ACFF', + 400: '#9C8CFF', + 500: '#8470FF', + 600: '#755FF8', + 700: '#5D47DE', + 800: '#4634B1', + 900: '#2F227C', + 950: '#1C1357', + }, + sky: { + 50: '#E3F3FF', + 100: '#D1ECFF', + 200: '#B6E1FF', + 300: '#A0D7FF', + 400: '#7BC8FF', + 500: '#67BFFF', + 600: '#56B1F3', + 700: '#3193DA', + 800: '#1C71AE', + 900: '#124D79', + 950: '#0B324F', + }, + green: { + 50: '#D2FFE2', + 100: '#B1FDCD', + 200: '#8BF0B0', + 300: '#67E294', + 400: '#4BD37D', + 500: '#3EC972', + 600: '#34BD68', + 700: '#239F52', + 800: '#15773A', + 900: '#0F5429', + 950: '#0A3F1E', + }, + red: { + 50: '#FFE8E8', + 100: '#FFD1D1', + 200: '#FFB2B2', + 300: '#FF9494', + 400: '#FF7474', + 500: '#FF5656', + 600: '#FA4949', + 700: '#E63939', + 800: '#C52727', + 900: '#941818', + 950: '#600F0F', + }, + yellow: { + 50: '#FFF2C9', + 100: '#FFE7A0', + 200: '#FFE081', + 300: '#FFD968', + 400: '#F7CD4C', + 500: '#F0BB33', + 600: '#DFAD2B', + 700: '#BC9021', + 800: '#816316', + 900: '#4F3D0E', + 950: '#342809', + }, + }, + fontFamily: { + inter: ['Inter', 'sans-serif'], + }, + fontSize: { + xs: ['0.75rem', { lineHeight: '1.5' }], + sm: ['0.875rem', { lineHeight: '1.5715' }], + base: ['1rem', { lineHeight: '1.5', letterSpacing: '-0.01em' }], + lg: ['1.125rem', { lineHeight: '1.5', letterSpacing: '-0.01em' }], + xl: ['1.25rem', { lineHeight: '1.5', letterSpacing: '-0.01em' }], + '2xl': ['1.5rem', { lineHeight: '1.33', letterSpacing: '-0.01em' }], + '3xl': ['1.88rem', { lineHeight: '1.33', letterSpacing: '-0.01em' }], + '4xl': ['2.25rem', { lineHeight: '1.25', letterSpacing: '-0.02em' }], + '5xl': ['3rem', { lineHeight: '1.25', letterSpacing: '-0.02em' }], + '6xl': ['3.75rem', { lineHeight: '1.2', letterSpacing: '-0.02em' }], + }, + screens: { + xs: '480px', + }, + borderWidth: { + 3: '3px', + }, + minWidth: { + 36: '9rem', + 44: '11rem', + 56: '14rem', + 60: '15rem', + 72: '18rem', + 80: '20rem', + }, + maxWidth: { + '8xl': '88rem', + '9xl': '96rem', + }, + zIndex: { + 60: '60', + }, + }, + }, + plugins: [ + forms, + // add custom variant for expanding sidebar + plugin(({ addVariant, e }) => { + addVariant('sidebar-expanded', ({ modifySelectors, separator }) => { + modifySelectors(({ className }) => `.sidebar-expanded .${e(`sidebar-expanded${separator}${className}`)}`); + }); + }), + ], +}; diff --git a/roadrecon/frontend-ng/vite.config.docker.js b/roadrecon/frontend-ng/vite.config.docker.js new file mode 100644 index 00000000..3bd027ee --- /dev/null +++ b/roadrecon/frontend-ng/vite.config.docker.js @@ -0,0 +1,45 @@ +import path from 'path' +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import svgLoader from 'vite-svg-loader' + +// https://vitejs.dev/config/ +export default defineConfig({ + define: { + 'process.env': process.env + }, + plugins: [vue(), svgLoader()], + resolve: { + alias: { + '@tailwindConfig': path.resolve(__dirname, 'tailwind.config.js'), + }, + }, + optimizeDeps: { + include: [ + '@tailwindConfig', + ] + }, + build: { + commonjsOptions: { + transformMixedEsModules: true, + } + }, + server:{ + host: '0.0.0.0', + port: 5173, + proxy: { + '/api': { + target: 'http://backend:5000', + changeOrigin: true, + }, + }, + fs: { + allow: [ + '/usr/src/app/node_modules/primeicons/', + '/usr/src/app/node_modules/vue3-json-viewer/', + '/usr/src/app/node_modules/vite/dist/client', + '/usr/src/app/src' + ] + } + } +}) diff --git a/roadrecon/frontend-ng/vite.config.js b/roadrecon/frontend-ng/vite.config.js new file mode 100644 index 00000000..5daf5018 --- /dev/null +++ b/roadrecon/frontend-ng/vite.config.js @@ -0,0 +1,47 @@ +import path from 'path' +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' +import svgLoader from 'vite-svg-loader' + +// https://vitejs.dev/config/ +export default defineConfig({ + define: { + 'process.env': process.env + }, + plugins: [vue(), svgLoader()], + resolve: { + alias: { + '@tailwindConfig': path.resolve(__dirname, 'tailwind.config.js'), + }, + }, + optimizeDeps: { + include: [ + '@tailwindConfig', + ] + }, + build: { + commonjsOptions: { + transformMixedEsModules: true, + }, + outDir: '../roadtools/roadrecon/dist_gui', + emptyOutDir: true, // also necessary + }, + server:{ + host: '0.0.0.0', + port: 5173, + proxy: { + '/api': { + target: 'http://backend:5000', + changeOrigin: true, + }, + }, + fs: { + allow: [ + '/usr/src/app/node_modules/primeicons/', + '/usr/src/app/node_modules/vue3-json-viewer/', + '/usr/src/app/node_modules/vite/dist/client', + '/usr/src/app/src' + ] + } + } +}) diff --git a/roadrecon/pyproject.toml b/roadrecon/pyproject.toml new file mode 100644 index 00000000..21cb7d97 --- /dev/null +++ b/roadrecon/pyproject.toml @@ -0,0 +1,49 @@ +[build-system] +requires = [ + "setuptools" +] +build-backend = "setuptools.build_meta" + +[project] +name = "roadtools" +version = "1.5.0" +description = "Azure AD recon for red and blue" +license = {text = "MIT"} +classifiers = [ + 'Intended Audience :: Information Technology', + 'License :: OSI Approved :: MIT License', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', +] +authors = [ + {name = "Dirk-jan Mollema", email = "dirkjan@dirkjanm.io"}, +] +dependencies = [ + "roadlib>=0.21", + "flask<3", + "sqlalchemy>=1.4", + "marshmallow", + "flask-sqlalchemy>=2.5", + "flask-marshmallow", + "flask-cors", + "marshmallow-sqlalchemy>=0.29", + "aiohttp", + "openpyxl" +] + +[project.urls] +Repository = "https://github.com/dirkjanm/ROADtools/" + +[tool.setuptools] +packages = ["roadtools.roadrecon", "roadtools.roadrecon.plugins"] + +[tool.setuptools.package-data] +"roadtools.roadrecon.plugins" = ["*.yaml"] + +[project.scripts] +roadrecon-gui = "roadtools.roadrecon.server:main" +roadrecon = "roadtools.roadrecon.main:main" \ No newline at end of file diff --git a/roadrecon/requirements.txt b/roadrecon/requirements.txt new file mode 100644 index 00000000..032499ec --- /dev/null +++ b/roadrecon/requirements.txt @@ -0,0 +1,10 @@ +roadlib>=0.21 +flask<3 +sqlalchemy>=1.4 +marshmallow +flask-sqlalchemy>=2.5 +flask-marshmallow +flask-cors +marshmallow-sqlalchemy>=0.29 +aiohttp +openpyxl \ No newline at end of file From 5b715086df6005788a298e37a6113095f8cd8b85 Mon Sep 17 00:00:00 2001 From: kevintellier Date: Thu, 13 Mar 2025 15:37:05 +0100 Subject: [PATCH 02/14] fixed gitignore and missing package.json --- .gitignore | 1 - roadrecon/frontend-ng/package.json | 37 ++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 roadrecon/frontend-ng/package.json diff --git a/.gitignore b/.gitignore index b8e017d4..d993b581 100644 --- a/.gitignore +++ b/.gitignore @@ -8,7 +8,6 @@ metadatastore/ .roadtools_auth Pipfile __pycache__ -*.json *.pem *.crt *.key diff --git a/roadrecon/frontend-ng/package.json b/roadrecon/frontend-ng/package.json new file mode 100644 index 00000000..8effba87 --- /dev/null +++ b/roadrecon/frontend-ng/package.json @@ -0,0 +1,37 @@ +{ + "name": "mosaic-vue", + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "docker": "vite build --config vite.config.docker.js", + "preview": "vite preview" + }, + "dependencies": { + "@primevue/themes": "^4.0.7", + "@tailwindcss/forms": "^0.5.7", + "@vueuse/core": "^10.7.0", + "axios": "^1.7.7", + "clipboard": "^2.0.11", + "cors": "^2.8.5", + "dayjs": "^1.11.13", + "flatpickr": "^4.6.13", + "moment": "^2.29.4", + "primeicons": "^7.0.0", + "primevue": "^4.0.7", + "vite-svg-loader": "^5.1.0", + "vue": "^3.2.20", + "vue-flatpickr-component": "^11.0.3", + "vue-router": "^4.2.5", + "vue3-json-viewer": "^2.2.2" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.5", + "@vue/compiler-sfc": "^3.2.20", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.32", + "tailwindcss": "^3.3.6", + "vite": "^5.4.5" + } +} From 93484a407c0ffa8c5217042e903969a831d880c5 Mon Sep 17 00:00:00 2001 From: kevintellier Date: Wed, 9 Apr 2025 20:04:59 +0200 Subject: [PATCH 03/14] merge --- roadtx/setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/roadtx/setup.py b/roadtx/setup.py index 1e64f9af..68b162fd 100644 --- a/roadtx/setup.py +++ b/roadtx/setup.py @@ -1,6 +1,7 @@ from setuptools import setup setup(name='roadtx', version='1.17.1', + version='1.10.0', description='ROADtools Token eXchange', author='Dirk-jan Mollema', author_email='dirkjan@outsidersecurity.nl', From e0c600c760c4821c703199bcfae90182a6947018 Mon Sep 17 00:00:00 2001 From: kevintellier Date: Tue, 3 Jun 2025 18:43:34 +0200 Subject: [PATCH 04/14] fixed vue3-json-viewer dependency --- roadrecon/frontend-ng/src/pages/RowDetail.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roadrecon/frontend-ng/src/pages/RowDetail.vue b/roadrecon/frontend-ng/src/pages/RowDetail.vue index 75b01d58..1a42d5d1 100644 --- a/roadrecon/frontend-ng/src/pages/RowDetail.vue +++ b/roadrecon/frontend-ng/src/pages/RowDetail.vue @@ -119,7 +119,7 @@ import Card from 'primevue/card'; import Tag from 'primevue/tag'; import DataView from 'primevue/dataview'; import {JsonViewer} from "vue3-json-viewer" -import "vue3-json-viewer/dist/index.css"; +import "vue3-json-viewer/dist/vue3-json-viewer.css"; import { showError } from '../services/toast'; const filters = ref(); From 01c030c352b5e1963eb118e8170593e2b768aaa0 Mon Sep 17 00:00:00 2001 From: kevintellier Date: Tue, 3 Jun 2025 18:52:51 +0200 Subject: [PATCH 05/14] fixed marshmallow version --- roadrecon/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roadrecon/requirements.txt b/roadrecon/requirements.txt index 032499ec..cbae20a5 100644 --- a/roadrecon/requirements.txt +++ b/roadrecon/requirements.txt @@ -1,7 +1,7 @@ roadlib>=0.21 flask<3 sqlalchemy>=1.4 -marshmallow +marshmallow<4 flask-sqlalchemy>=2.5 flask-marshmallow flask-cors From cbdc850d354e7f7213473f5dd531cf3607590d0f Mon Sep 17 00:00:00 2001 From: kevintellier Date: Wed, 4 Jun 2025 15:47:57 +0200 Subject: [PATCH 06/14] Fixed key errors for application roles --- roadrecon/roadtools/roadrecon/server.py | 260 ++++++++++++++++++++++-- 1 file changed, 242 insertions(+), 18 deletions(-) diff --git a/roadrecon/roadtools/roadrecon/server.py b/roadrecon/roadtools/roadrecon/server.py index 1b0c6ff2..f54ad469 100644 --- a/roadrecon/roadtools/roadrecon/server.py +++ b/roadrecon/roadtools/roadrecon/server.py @@ -212,6 +212,228 @@ def user_detail(id): abort(404) return user_schema.jsonify(user) +@app.route("/api/policies", methods=["GET"]) +def get_policies(): + policies = db.session.query(Policy).filter(or_(Policy.policyType == 18,Policy.policyType == 6)).order_by(Policy.displayName.asc()).all() + results = policies_schema.dump(policies) + + for policy in results: + if policy['policyType'] == 18: + policy['policyDetail'] = json.loads(policy['policyDetail'][0]) + if 'Conditions' in policy['policyDetail']: + conditions = policy['policyDetail']['Conditions'] + if 'Applications' in conditions: + applications = conditions['Applications'] + for key in applications.keys(): + resolved = [] + for (index, object_type) in enumerate(applications[key]): + if 'Application' in applications[key][index]: + for app in applications[key][index]['Applications']: + if app == "All": + resolved.append({ + 'displayName':'All', + 'objectId':'None' + }) + # If its an appId (UUID) + elif len(app) == 36: + application = db.session.query(ServicePrincipal).filter(ServicePrincipal.appId == app).first() + if application is not None: + resolved.append({ + 'displayName': application.displayName, + 'objectId': app + }) + else: + resolved.append({ + 'displayName': app, + 'objectId': app + }) + # Already resolved, just pass + else: + resolved.append({ + 'displayName':app, + 'objectId':'None' + }) + applications[key][index]['Applications'] = resolved + if 'ServicePrincipals' in conditions: + serviceprincipals = conditions['ServicePrincipals'] + for key in serviceprincipals.keys(): + resolved = [] + for (index, object_type) in enumerate(serviceprincipals[key]): + if 'ServicePrincipals' in serviceprincipals[key][index]: + for sp in serviceprincipals[key][index]['ServicePrincipals']: + if sp == "All": + resolved.append({ + 'displayName':'All', + 'objectId':'None' + }) + # If its an objectId (UUID) + elif len(sp) == 36: + serviceprincipal = db.session.query(ServicePrincipal).filter(ServicePrincipal.objectId == sp).first() + if serviceprincipal is not None: + resolved.append({ + 'displayName': serviceprincipal.displayName, + 'objectId': sp + }) + else: + resolved.append({ + 'displayName': sp, + 'objectId': sp + }) + elif sp == "None": + pass + # Already resolved, just pass + else: + resolved.append({ + 'displayName': sp, + 'objectId':'None' + }) + serviceprincipals[key][index]['ServicePrincipals'] = resolved + if 'Users' in conditions: + users = conditions['Users'] + for key in users.keys(): + for (index, object_type) in enumerate(users[key]): + if 'Users' in object_type: + resolved = [] + if 'Users' in users[key][index]: + for usr in users[key][index]['Users']: + if usr == 'None': + users[key][index] = users[key][index].pop('Users') + break + if usr == "All": + resolved.append({ + 'displayName':'All', + 'objectId':'None' + }) + # If its an appId (UUID) + elif len(usr) == 36: + user = db.session.query(User).filter(User.objectId == usr).first() + if user is not None: + resolved.append({ + 'displayName': user.displayName, + 'objectId': usr + }) + else: + resolved.append({ + 'displayName': usr, + 'objectId': usr + }) + # Already resolved, just pass + else: + resolved.append({ + 'displayName': usr, + 'objectId':'None' + }) + if len(resolved) > 0: + users[key][index]['Users'] = resolved + if 'Groups' in object_type: + resolved = [] + if 'Groups' in users[key][index]: + for grp in users[key][index]['Groups']: + if grp == "All": + resolved.append({ + 'displayName':'All', + 'objectId':'None' + }) + # If its an appId (UUID) + elif len(grp) == 36: + group = db.session.query(Group).filter(Group.objectId == grp).first() + if group is not None: + resolved.append({ + 'displayName': group.displayName, + 'objectId': grp + }) + else: + resolved.append({ + 'displayName': grp, + 'objectId': grp + }) + elif grp == "None": + pass + # Already resolved, just pass + else: + resolved.append({ + 'displayName': grp, + 'objectId':'None' + }) + users[key][index]['Groups'] = resolved + if 'Roles' in object_type: + resolved = [] + if 'Roles' in users[key][index]: + for rle in users[key][index]['Roles']: + if rle == "All": + resolved.append({ + 'displayName':'All', + 'objectId':'None' + }) + # If its an appId (UUID) + elif len(rle) == 36: + role = db.session.query(RoleDefinition).filter(RoleDefinition.objectId == rle).first() + if role is not None: + resolved.append({ + 'displayName': role.displayName, + 'objectId': rle + }) + else: + resolved.append({ + 'displayName': rle, + 'objectId': rle + }) + elif rle == "None": + pass + # Already resolved, just pass + else: + resolved.append({ + 'displayName': rle, + 'objectId':'None' + }) + users[key][index]['Roles'] = resolved + #Cleaning up data from DB + keys_to_remove = [] + for key, value in users.items(): + if isinstance(value, list) and all(isinstance(item, list) and item == ["None"] for item in value): + keys_to_remove.append(key) + for key in keys_to_remove: + del users[key] + if not users: + del conditions['Users'] + if 'Locations' in conditions: + locations = conditions['Locations'] + for key in locations.keys(): + for (index, object_type) in enumerate(locations[key]): + if "All" not in object_type['Locations']: + translated = _translate_locations(object_type['Locations']) + else: + translated = object_type['Locations'] + conditions['Locations'][key] = translated + elif policy['policyType'] == 6: + policy['policyDetail'] = json.loads(policy['policyDetail'][0]) + + detail = None + oldpolicy = False + + if 'KnownNetworkPolicies' in policy['policyDetail']: + detail = policy['policyDetail']['KnownNetworkPolicies'] + oldpolicy = True + else: + detail = policy['policyDetail'] + if not oldpolicy: + policy['trusted'] = ("trusted" in detail.get("Categories","") if detail.get("Categories") else False) + policy['appliestounknowncountry'] = str(detail.get("ApplyToUnknownCountry")) if detail.get("ApplyToUnknownCountry") is not None else False + policy['ipranges'] = ",".join(parse_compressed_cidr(detail)) + policy['categories'] = ",".join(detail.get("Categories")) if detail.get("Categories") is not None else "" + policy['associated_policies'] = ",".join(parse_associated_policies(policy['policyIdentifier'],policy['trusted'],policies)) + policy['country_codes'] = ",".join(detail.get("CountryIsoCodes")) if detail.get("CountryIsoCodes") else None + else: + policy['name'] = detail.get("NetworkName") + policy['trusted'] = ("trusted" in detail.get("Categories","") if detail.get("Categories") else False) + policy['appliestounknowncountry'] = str(detail.get("ApplyToUnknownCountry")) if detail.get("ApplyToUnknownCountry") is not None else False + policy['ipranges'] = ",".join(detail.get('CidrIpRanges')) if detail.get("CidrIpRanges") else "" + policy['categories'] = ", ".join(detail.get("Categories")) if detail.get("Categories") is not None else "" + policy['associated_policies'] = ",".join(parse_associated_policies(detail.get('NetworkId'),policy['trusted'],policies)) + policy['country_codes'] = ",".join(detail.get("CountryIsoCodes")) if detail.get("CountryIsoCodes") else None + + return jsonify(results) + @app.route("/api/devices", methods=["GET"]) def get_devices(): all_devices = db.session.query(Device).all() @@ -415,30 +637,32 @@ def process_approle(approles, ar): rsp = db.session.get(ServicePrincipal, ar.resourceId) if ar.principalType == 'ServicePrincipal': sp = db.session.get(ServicePrincipal, ar.principalId) - if ar.principalType == 'User': + elif ar.principalType == 'User': sp = db.session.get(User, ar.principalId) - if ar.principalType == 'Group': + elif ar.principalType == 'Group': sp = db.session.get(Group, ar.principalId) if ar.id == '00000000-0000-0000-0000-000000000000': - approles.append({'objid':sp.objectId, - 'ptype':ar.principalType, - 'pname':sp.displayName, - 'app':ar.resourceDisplayName, - 'value':'Default', - 'desc':'Default Role', - 'spid':ar.resourceId, - }) + if sp is not None and ar is not None: + approles.append({'objectId':sp.objectId, + 'principalType':ar.principalType, + 'principalDisplayName':sp.displayName, + 'resourceDisplayName':ar.resourceDisplayName, + 'value':'Default', + 'desc':'Default Role', + 'spid':ar.resourceId, + }) else: for approle in rsp.appRoles: if approle['id'] == ar.id: - approles.append({'objid':sp.objectId, - 'ptype':ar.principalType, - 'pname':sp.displayName, - 'app':ar.resourceDisplayName, - 'value':approle['value'], - 'desc':approle['displayName'], - 'spid':ar.resourceId, - }) + if sp is not None and ar is not None: + approles.append({'objectId':sp.objectId, + 'principalType':ar.principalType, + 'principalDisplayName':sp.displayName, + 'resourceDisplayName':ar.resourceDisplayName, + 'value':approle['value'], + 'desc':approle['displayName'], + 'spid':ar.resourceId, + }) @app.route("/api/approles", methods=["GET"]) def get_approles(): From 807cff4eb8745821b4ad22e111f85a8d5f3175f7 Mon Sep 17 00:00:00 2001 From: kevintellier Date: Mon, 9 Jun 2025 11:43:41 +0200 Subject: [PATCH 07/14] Cleaned PR --- .gitignore | 1 + roadlib/pyproject.toml | 35 --------------------------- roadrecon/.gitignore | 4 ---- roadrecon/pyproject.toml | 49 -------------------------------------- roadrecon/requirements.txt | 10 -------- roadtx/setup.py | 1 - 6 files changed, 1 insertion(+), 99 deletions(-) delete mode 100644 roadlib/pyproject.toml delete mode 100644 roadrecon/.gitignore delete mode 100644 roadrecon/pyproject.toml delete mode 100644 roadrecon/requirements.txt diff --git a/.gitignore b/.gitignore index d993b581..b8e017d4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ metadatastore/ .roadtools_auth Pipfile __pycache__ +*.json *.pem *.crt *.key diff --git a/roadlib/pyproject.toml b/roadlib/pyproject.toml deleted file mode 100644 index c64963ed..00000000 --- a/roadlib/pyproject.toml +++ /dev/null @@ -1,35 +0,0 @@ -[build-system] -requires = [ - "setuptools" -] -build-backend = "setuptools.build_meta" - -[project] -name = "roadtools" -version = "0.27.0" -description = "ROADtools common components library" -license = {text = "MIT"} -classifiers = [ - 'Intended Audience :: Information Technology', - 'License :: OSI Approved :: MIT License', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', -] -authors = [ - {name = "Dirk-jan Mollema", email = "dirkjan@dirkjanm.io"}, -] -dependencies = [ - "adal", - "sqlalchemy", - "pyjwt", -] - -[project.urls] -Repository = "https://github.com/dirkjanm/ROADtools/" - -[tool.setuptools.packages.find] -include = ["roadtools.*"] \ No newline at end of file diff --git a/roadrecon/.gitignore b/roadrecon/.gitignore deleted file mode 100644 index 3e86d488..00000000 --- a/roadrecon/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -**/.roadtools_auth -**/roadrecon.db -venv/** -caps.html diff --git a/roadrecon/pyproject.toml b/roadrecon/pyproject.toml deleted file mode 100644 index 21cb7d97..00000000 --- a/roadrecon/pyproject.toml +++ /dev/null @@ -1,49 +0,0 @@ -[build-system] -requires = [ - "setuptools" -] -build-backend = "setuptools.build_meta" - -[project] -name = "roadtools" -version = "1.5.0" -description = "Azure AD recon for red and blue" -license = {text = "MIT"} -classifiers = [ - 'Intended Audience :: Information Technology', - 'License :: OSI Approved :: MIT License', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', -] -authors = [ - {name = "Dirk-jan Mollema", email = "dirkjan@dirkjanm.io"}, -] -dependencies = [ - "roadlib>=0.21", - "flask<3", - "sqlalchemy>=1.4", - "marshmallow", - "flask-sqlalchemy>=2.5", - "flask-marshmallow", - "flask-cors", - "marshmallow-sqlalchemy>=0.29", - "aiohttp", - "openpyxl" -] - -[project.urls] -Repository = "https://github.com/dirkjanm/ROADtools/" - -[tool.setuptools] -packages = ["roadtools.roadrecon", "roadtools.roadrecon.plugins"] - -[tool.setuptools.package-data] -"roadtools.roadrecon.plugins" = ["*.yaml"] - -[project.scripts] -roadrecon-gui = "roadtools.roadrecon.server:main" -roadrecon = "roadtools.roadrecon.main:main" \ No newline at end of file diff --git a/roadrecon/requirements.txt b/roadrecon/requirements.txt deleted file mode 100644 index cbae20a5..00000000 --- a/roadrecon/requirements.txt +++ /dev/null @@ -1,10 +0,0 @@ -roadlib>=0.21 -flask<3 -sqlalchemy>=1.4 -marshmallow<4 -flask-sqlalchemy>=2.5 -flask-marshmallow -flask-cors -marshmallow-sqlalchemy>=0.29 -aiohttp -openpyxl \ No newline at end of file diff --git a/roadtx/setup.py b/roadtx/setup.py index 68b162fd..1e64f9af 100644 --- a/roadtx/setup.py +++ b/roadtx/setup.py @@ -1,7 +1,6 @@ from setuptools import setup setup(name='roadtx', version='1.17.1', - version='1.10.0', description='ROADtools Token eXchange', author='Dirk-jan Mollema', author_email='dirkjan@outsidersecurity.nl', From e57d24bb4caa61bac448e0dd0997156ec24ac894 Mon Sep 17 00:00:00 2001 From: kevintellier Date: Mon, 9 Jun 2025 15:09:28 +0200 Subject: [PATCH 08/14] fixed server.py --- roadrecon/roadtools/roadrecon/server.py | 267 ++++++++++++++++++++---- 1 file changed, 228 insertions(+), 39 deletions(-) diff --git a/roadrecon/roadtools/roadrecon/server.py b/roadrecon/roadtools/roadrecon/server.py index f54ad469..01e229a1 100644 --- a/roadrecon/roadtools/roadrecon/server.py +++ b/roadrecon/roadtools/roadrecon/server.py @@ -1,18 +1,28 @@ +import sys from flask import Flask, request, jsonify, abort, send_from_directory, redirect, send_file from flask_sqlalchemy import SQLAlchemy from flask_marshmallow import Marshmallow from flask_cors import CORS from marshmallow_sqlalchemy import ModelConverter from marshmallow import fields -from roadtools.roadlib.metadef.database import User, JSON, Group, DirectoryRole, ServicePrincipal, AppRoleAssignment, TenantDetail, Application, Device, OAuth2PermissionGrant, AuthorizationPolicy, DirectorySetting, AdministrativeUnit, RoleDefinition +from roadtools.roadlib.metadef.database import User, Policy, JSON, Group, DirectoryRole, ServicePrincipal, AppRoleAssignment, TenantDetail, Application, Device, OAuth2PermissionGrant, AuthorizationPolicy, DirectorySetting, AdministrativeUnit, RoleDefinition import os +import logging import argparse -from sqlalchemy import func, and_, or_, select +from sqlalchemy import func, and_, or_, select, desc, asc, cast +from sqlalchemy.event import listens_for +from sqlalchemy.pool import _ConnectionRecord import mimetypes +import json +import zlib +import base64 +from html import escape app = Flask(__name__) app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False +logging.getLogger('werkzeug').setLevel(logging.DEBUG) + # This will get initialized later on db = None ma = Marshmallow(app) @@ -41,7 +51,12 @@ class Meta: class UsersSchema(ma.Schema): class Meta: model = User - fields = ('objectId', 'objectType', 'userPrincipalName', 'displayName', 'mail', 'lastDirSyncTime', 'accountEnabled', 'department', 'lastPasswordChangeDateTime', 'jobTitle', 'mobile', 'dirSyncEnabled', 'strongAuthenticationDetail', 'userType', 'searchableDeviceKey') + fields = ('objectId', 'objectType', 'userPrincipalName', 'displayName', 'mail', 'lastDirSyncTime', 'accountEnabled', 'department', 'lastPasswordChangeDateTime', 'jobTitle', 'dirSyncEnabled', 'userType') + +class PoliciesSchema(ma.Schema): + class Meta: + model = Policy + fields = ('objectId', 'objectType', 'deletionTimestamp', 'displayName', 'keyCredentials', 'policyType', 'policyDetail', 'policyIdentifier', 'tenantDefaultPolicy') class DevicesSchema(ma.Schema): class Meta: @@ -51,7 +66,7 @@ class Meta: class DirectoryRoleSchema(ma.Schema): class Meta: model = DirectoryRole - fields = ('displayName', 'description') + fields = ('displayName', 'description', 'objectId', 'objectType') class OAuth2PermissionGrantsSchema(ma.SQLAlchemyAutoSchema): class Meta: @@ -111,6 +126,10 @@ class Meta(RTModelSchema.Meta): ownedApplications = fields.Nested(ApplicationsSchema, many=True) ownedGroups = fields.Nested(GroupsSchema, many=True) +class PolicySchema(RTModelSchema): + class Meta(RTModelSchema.Meta): + model = Policy + class DeviceSchema(RTModelSchema): class Meta(RTModelSchema.Meta): model = Device @@ -167,6 +186,7 @@ class Meta(RTModelSchema.Meta): # Instantiate all schemas user_schema = UserSchema() +policy_schema = PolicySchema() device_schema = DeviceSchema() group_schema = GroupSchema() application_schema = ApplicationSchema() @@ -176,6 +196,7 @@ class Meta(RTModelSchema.Meta): administrativeunit_schema = AdministrativeUnitSchema() authorizationpolicy_schema = AuthorizationPolicySchema(many=True) users_schema = UsersSchema(many=True) +policies_schema = PoliciesSchema(many=True) devices_schema = DevicesSchema(many=True) groups_schema = GroupsSchema(many=True) applications_schema = ApplicationsSchema(many=True) @@ -183,6 +204,114 @@ class Meta(RTModelSchema.Meta): directoryroles_schema = DirectoryRolesSchema(many=True) administrativeunits_schema = AdministrativeUnitsSchema(many=True) + +def _translate_locations(locs): + policies = db.session.query(Policy).filter(Policy.policyType == 6).all() + out = [] + # Not sure if there can be multiple + for policy in policies: + for pdetail in policy.policyDetail: + detaildata = json.loads(pdetail) + if 'KnownNetworkPolicies' in detaildata and detaildata['KnownNetworkPolicies']['NetworkId'] in locs: + out.append(detaildata['KnownNetworkPolicies']['NetworkName']) + # New format + for loc in locs: + policies = db.session.query(Policy).filter(Policy.policyType == 6, Policy.policyIdentifier == loc).all() + for policy in policies: + out.append(policy.displayName) + return out + +def parse_compressed_cidr(detail): + if not 'CompressedCidrIpRanges' in detail: + return '' + compressed = detail['CompressedCidrIpRanges'] + b = base64.b64decode(compressed) + cstr = zlib.decompress(b, -zlib.MAX_WBITS) + decoded_cidrs = escape(cstr.decode()).split(",") + return decoded_cidrs + +def parse_associated_policies(location_object, is_trusted_location,condition_policy_list): + found_pols = [] + + for pol in condition_policy_list: + if not pol.policyDetail: + continue + parsed = json.loads(pol.policyDetail[0]) + if not parsed.get('Conditions') or not parsed.get('Conditions').get('Locations'): + continue + + cloc = parsed.get('Conditions').get('Locations') + incl = cloc.get('Include') or [] + excl = cloc.get('Exclude') or [] + for i in incl: + if location_object in i.get('Locations') or (is_trusted_location and "AllTrusted" in i.get('Locations')): + found_pols.append(pol.displayName) + + for i in excl: + if location_object in i.get('Locations') or (is_trusted_location and "AllTrusted" in i.get('Locations')): + found_pols.append(pol.displayName) + + return found_pols + +# Function to build a dynamic filter +def build_dynamic_filter(schema, search_string): + search_string = f"%{search_string}%" # SQL wildcard for partial match + filters = [] + + # Iterate through each field defined in the schema's Meta class + for field in schema._declared_fields.keys(): + # Ensure the attribute exists in the User model + if hasattr(User, field): + filters.append(getattr(User, field).like(search_string)) # Build the filter for each field + + # Return an OR combination of all filters + return or_(*filters) + +def query_all_items(request,schema,model,fields): + page = request.args.get('page', type=int) + rows = request.args.get('rows', type=int) + search = request.args.get('search', type=str) + sortedField = request.args.get('sortedField', type=str) + sortOrder = request.args.get('sortOrder', type=int) + + query = db.session.query(model) + + if search: + # For now only search on the userPrincipalName and displayName fields, others will be added with advanced filtering + #filter = build_dynamic_filter(user_schema, search) + filters = [] + for field in fields: + filters.append(getattr(model,field).like(f'%{search}%')) + + query = query.filter(or_(*filters)) + + if sortedField: + field = getattr(model, sortedField) + if hasattr(field, 'type') and isinstance(field.type, JSON): + # For JSON fields, use the length of the JSON array for sorting + field = func.json_array_length(cast(field, db.Text)) + elif hasattr(field, 'property') and hasattr(field.property, 'direction'): + # Handle relationship fields + field = field.property.direction.mapper.class_.id + if sortOrder == 1: + query = query.order_by(field.desc()) + elif sortOrder == -1: + query = query.order_by(field.asc()) + + if page is None and rows is None: + all_items = query.all() + result = { + 'items': schema.dump(all_items), + 'total': None + } + else: + all_items = query.paginate(page=page, per_page=rows) + result = { + 'items': schema.dump(all_items), + 'total': all_items.total + } + return jsonify(result) + @app.route("/") def get_index(): return send_file('dist_gui/index.html') @@ -200,10 +329,7 @@ def get_gui(path): @app.route("/api/users", methods=["GET"]) def get_users(): - all_users = db.session.query(User).all() - result = users_schema.dump(all_users) - return jsonify(result) - + return query_all_items(request, users_schema, User, ["userPrincipalName"]) @app.route("/api/users/", methods=["GET"]) def user_detail(id): @@ -436,10 +562,7 @@ def get_policies(): @app.route("/api/devices", methods=["GET"]) def get_devices(): - all_devices = db.session.query(Device).all() - result = devices_schema.dump(all_devices) - return jsonify(result) - + return query_all_items(request, devices_schema, Device, ["displayName"]) @app.route("/api/devices/", methods=["GET"]) def device_detail(id): @@ -458,9 +581,7 @@ def user_groups(id): @app.route("/api/groups", methods=["GET"]) def get_groups(): - all_groups = db.session.query(Group).all() - result = groups_schema.dump(all_groups) - return jsonify(result) + return query_all_items(request, groups_schema, Group, ["displayName"]) @app.route("/api/groups/", methods=["GET"]) def group_detail(id): @@ -471,9 +592,7 @@ def group_detail(id): @app.route("/api/administrativeunits", methods=["GET"]) def get_administrativeunits(): - all_administrativeunits = db.session.query(AdministrativeUnit).all() - result = administrativeunits_schema.dump(all_administrativeunits) - return jsonify(result) + return query_all_items(request, administrativeunits_schema, AdministrativeUnit, ["displayName"]) @app.route("/api/administrativeunits/", methods=["GET"]) def administrativeunit_detail(id): @@ -484,15 +603,22 @@ def administrativeunit_detail(id): @app.route("/api/serviceprincipals", methods=["GET"]) def get_sps(): - all_sps = db.session.query(ServicePrincipal).all() - return serviceprincipals_schema.jsonify(all_sps) + return query_all_items(request, serviceprincipals_schema, ServicePrincipal, ["displayName"]) @app.route("/api/serviceprincipals/", methods=["GET"]) def sp_detail(id): sp = db.session.get(ServicePrincipal, id) if not sp: abort(404) - return serviceprincipal_schema.jsonify(sp) + result = serviceprincipal_schema.dump(sp) + for (i,elem) in enumerate(sp.appRolesAssigned): + resource_data = get_approle_by_resources_(sp.appRolesAssigned[i].resourceId) + result['appRolesAssigned'][i]['desc'] = resource_data[0]['desc'] + result['appRolesAssigned'][i]['value'] = resource_data[0]['value'] + if len(sp.appRolesAssignedTo) > 0: + principal_data = get_approles_by_principal_(sp.appRolesAssigned[0].resourceId) + result['appRolesAssignedTo'] = principal_data + return jsonify(result) @app.route("/api/serviceprincipals-by-appid/", methods=["GET"]) def sp_detail_by_appid(id): @@ -503,9 +629,7 @@ def sp_detail_by_appid(id): @app.route("/api/applications", methods=["GET"]) def get_applications(): - all_applications = db.session.query(Application).all() - result = applications_schema.dump(all_applications) - return jsonify(result) + return query_all_items(request, applications_schema, Application, ["displayName"]) @app.route("/api/mfa", methods=["GET"]) def get_mfa(): @@ -545,8 +669,7 @@ def get_mfa(): 'has_app': has_app, 'has_phonenr': has_phonenr, 'has_fido': has_fido, - 'strongAuthenticationDetail': user.strongAuthenticationDetail, - 'searchableDeviceKey': user.searchableDeviceKey + 'strongAuthenticationDetail': user.strongAuthenticationDetail }) return jsonify(out) @@ -666,38 +789,102 @@ def process_approle(approles, ar): @app.route("/api/approles", methods=["GET"]) def get_approles(): + page = request.args.get('page', type=int) + rows = request.args.get('rows', type=int) + search = request.args.get('search', type=str) + sortedField = request.args.get('sortedField', type=str) + sortOrder = request.args.get('sortOrder', type=int) + approles = [] - for ar in db.session.query(AppRoleAssignment).all(): + query = db.session.query(AppRoleAssignment) + + if search: + # For now only search on the userPrincipalName and displayName fields, others will be added with advanced filtering + #filter = build_dynamic_filter(user_schema, search) + filters = [] + filters.append(AppRoleAssignment.principalDisplayName.like(f'%{search}%')) + + query = query.filter(or_(*filters)) + + if sortedField: + if sortOrder == 1: + query = query.order_by(getattr(AppRoleAssignment,sortedField).desc()) + elif sortOrder == -1: + query = query.order_by(getattr(AppRoleAssignment,sortedField).asc()) + + if page is None and rows is None: + result = query.all() + else: + result = query.paginate(page=page, per_page=rows) + + for ar in result: process_approle(approles, ar) - return jsonify(approles) + + result = {'items':approles,'total':result.total} -@app.route("/api/approles_by_resource/", methods=["GET"]) -def get_approles_by_resource(spid): + return jsonify(result) + +def get_approle_by_resources_(spid): approles = [] for ar in db.session.query(AppRoleAssignment).filter(AppRoleAssignment.resourceId == spid): process_approle(approles, ar) - return jsonify(approles) + return approles -@app.route("/api/approles_by_principal/", methods=["GET"]) -def get_approles_by_principal(pid): +@app.route("/api/approles_by_resource/", methods=["GET"]) +def get_approles_by_resource(spid): + return jsonify(get_approle_by_resources_(spid)) + +def get_approles_by_principal_(pid): approles = [] for ar in db.session.query(AppRoleAssignment).filter(AppRoleAssignment.principalId == pid): process_approle(approles, ar) - return jsonify(approles) + return approles + +@app.route("/api/approles_by_principal/", methods=["GET"]) +def get_approles_by_principal(pid): + jsonify(get_approles_by_principal_(pid)) @app.route("/api/oauth2permissions", methods=["GET"]) def get_oauth2permissions(): + page = request.args.get('page', type=int) + rows = request.args.get('rows', type=int) + search = request.args.get('search', type=str) + sortedField = request.args.get('sortedField', type=str) + sortOrder = request.args.get('sortOrder', type=int) + + query = db.session.query(OAuth2PermissionGrant) + + if search: + # For now only search on the userPrincipalName and displayName fields, others will be added with advanced filtering + #filter = build_dynamic_filter(user_schema, search) + filters = [] + filters.append(ServicePrincipal.displayName.like(f'%{search}%')) + + query = query.filter(or_(*filters)) + + if sortedField: + if sortOrder == 1: + query = query.order_by(getattr(OAuth2PermissionGrant,sortedField).desc()) + elif sortOrder == -1: + query = query.order_by(getattr(OAuth2PermissionGrant,sortedField).asc()) + + if page is None and rows is None: + result = query.all() + result.total = len(result) + else: + result = query.paginate(page=page, per_page=rows) + oauth2permissions = [] - for permgrant in db.session.query(OAuth2PermissionGrant).all(): + for permgrant in result: grant = {} rsp = db.session.get(ServicePrincipal, permgrant.clientId) if permgrant.consentType == 'Principal': - grant['type'] = 'user' + grant['consentType'] = 'user' user = db.session.get(User, permgrant.principalId) grant['userid'] = user.objectId grant['userdisplayname'] = user.displayName else: - grant['type'] = 'all' + grant['consentType'] = 'all' grant['userid'] = None grant['userdisplayname'] = None targetapp = db.session.get(ServicePrincipal, permgrant.resourceId) @@ -708,7 +895,8 @@ def get_oauth2permissions(): grant['expiry'] = permgrant.expiryTime.strftime("%Y-%m-%dT%H:%M:%S") grant['scope'] = permgrant.scope oauth2permissions.append(grant) - return jsonify(oauth2permissions) + + return jsonify({'items':oauth2permissions,'total':result.total}) @app.route("/api/roledefinitions", methods=["GET"]) def get_allroles(): @@ -841,6 +1029,7 @@ def main(args=None): help='HTTP Server port (default=5000)', default=5000) args = parser.parse_args() + if not ':/' in args.database: if args.database[0] != '/': app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(os.getcwd(), args.database) @@ -852,7 +1041,7 @@ def main(args=None): if args.profile: from werkzeug.middleware.profiler import ProfilerMiddleware app.wsgi_app = ProfilerMiddleware(app.wsgi_app, restrictions=[5]) - app.run(debug=args.debug, port=args.port) + app.run(debug=args.debug, host='0.0.0.0', port=args.port) if __name__ == '__main__': main() From cc2cff4b2c2d085ac5f145b7dc03cf985f7e40ce Mon Sep 17 00:00:00 2001 From: kevintellier Date: Mon, 9 Jun 2025 18:17:29 +0200 Subject: [PATCH 09/14] Fixed directory roles --- roadrecon/frontend-ng/src/pages/DirectoryRoles.vue | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/roadrecon/frontend-ng/src/pages/DirectoryRoles.vue b/roadrecon/frontend-ng/src/pages/DirectoryRoles.vue index 9c30281b..1eb44d62 100644 --- a/roadrecon/frontend-ng/src/pages/DirectoryRoles.vue +++ b/roadrecon/frontend-ng/src/pages/DirectoryRoles.vue @@ -99,8 +99,15 @@ export default { for(var j=0;j Date: Mon, 9 Jun 2025 18:17:48 +0200 Subject: [PATCH 10/14] fixed dockerfile for backend dependency install --- roadrecon/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roadrecon/Dockerfile b/roadrecon/Dockerfile index 5a62d29a..f417a1be 100644 --- a/roadrecon/Dockerfile +++ b/roadrecon/Dockerfile @@ -1,11 +1,11 @@ FROM python:3.11-slim AS dev COPY . /app WORKDIR /app -RUN pip install -r requirements.txt +RUN pip install . CMD [ "python3","/app/roadtools/roadrecon/server.py","--debug" ] FROM python:3.11-slim AS prod COPY . /app WORKDIR /app -RUN pip install -r requirements.txt +RUN pip install . CMD [ "python3","/app/roadtools/roadrecon/server.py" ] \ No newline at end of file From df0e623c57af8e8c3fc5840c289444b3066516d6 Mon Sep 17 00:00:00 2001 From: kevintellier Date: Mon, 9 Jun 2025 18:18:15 +0200 Subject: [PATCH 11/14] fixed service principals table --- roadrecon/frontend-ng/src/pages/ServicePrincipals.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roadrecon/frontend-ng/src/pages/ServicePrincipals.vue b/roadrecon/frontend-ng/src/pages/ServicePrincipals.vue index 46948177..d3c8e488 100644 --- a/roadrecon/frontend-ng/src/pages/ServicePrincipals.vue +++ b/roadrecon/frontend-ng/src/pages/ServicePrincipals.vue @@ -87,8 +87,8 @@ export default { this.serviceprincipals[i].microsoftFirstParty = this.serviceprincipals[i].microsoftFirstParty ? "True" : "False" this.serviceprincipals[i].passwordCredentials = this.serviceprincipals[i].passwordCredentials.length > 0 ? "True" : "False" this.serviceprincipals[i].keyCredentials = this.serviceprincipals[i].keyCredentials.length > 0 ? "True" : "False" - this.serviceprincipals[i].appRoles = this.serviceprincipals[i].appRoles.length > 0 ? this.serviceprincipals[i].appRoles.length : "" - this.serviceprincipals[i].oauth2Permissions = this.serviceprincipals[i].oauth2Permissions.length > 0 ? this.serviceprincipals[i].oauth2Permissions.length : "" + this.serviceprincipals[i].appRoles = this.serviceprincipals[i].appRoles.length > 0 ? this.serviceprincipals[i].appRoles.length : 0 + this.serviceprincipals[i].oauth2Permissions = this.serviceprincipals[i].oauth2Permissions.length > 0 ? this.serviceprincipals[i].oauth2Permissions.length : 0 this.serviceprincipals[i].ownerUsers = this.serviceprincipals[i].ownerUsers.length > 0 ? "True" : "False" } }) From eb1b2ee654e0d3b5a60f3dd558c2639d90cec74d Mon Sep 17 00:00:00 2001 From: kevintellier Date: Mon, 9 Jun 2025 18:18:52 +0200 Subject: [PATCH 12/14] renamed field consenttype in OAuth2Permissions --- roadrecon/frontend-ng/src/pages/OAuth2Permissions.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/roadrecon/frontend-ng/src/pages/OAuth2Permissions.vue b/roadrecon/frontend-ng/src/pages/OAuth2Permissions.vue index 741a61d7..41041ebf 100644 --- a/roadrecon/frontend-ng/src/pages/OAuth2Permissions.vue +++ b/roadrecon/frontend-ng/src/pages/OAuth2Permissions.vue @@ -48,14 +48,14 @@ export default { return { oauth2permissions: [], columns: [ - { field: 'consentType', header: 'Approval type' }, + { field: 'type', header: 'Approval type' }, { field: 'userdisplayname', header: 'Principal Name' }, { field: 'sourceapplication', header: 'Source Application (permissions recipient)' }, { field: 'targetapplication', header: 'Target Application (permission to access)' }, { field: 'scope', header: 'Scope (permissions)' }, { field: 'expiry', header: 'Expiry' }, ], - filterFields:["consentType","userdisplayname","sourceapplication","targetapplication","scope","expiry","keyCredentials","appRoles","oauth2Permissions","ownerUsers"], + filterFields:["type","userdisplayname","sourceapplication","targetapplication","scope","expiry","keyCredentials","appRoles","oauth2Permissions","ownerUsers"], filters: { global: { value: null, matchMode: FilterMatchMode.CONTAINS }, }, From 2bd89719bf8f1441650ee717f944072edfd3d9cd Mon Sep 17 00:00:00 2001 From: kevintellier Date: Mon, 9 Jun 2025 18:19:09 +0200 Subject: [PATCH 13/14] Updated ObjectTable for consenttype --- roadrecon/frontend-ng/src/partials/dashboard/ObjectTable.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roadrecon/frontend-ng/src/partials/dashboard/ObjectTable.vue b/roadrecon/frontend-ng/src/partials/dashboard/ObjectTable.vue index 4d259a94..89162120 100644 --- a/roadrecon/frontend-ng/src/partials/dashboard/ObjectTable.vue +++ b/roadrecon/frontend-ng/src/partials/dashboard/ObjectTable.vue @@ -229,7 +229,7 @@ export default { if(event.data.principal){ this.$router.push({ name: 'RowDetail', params: { objectId: event.data.principal.objectId, objectType: event.data.principal.objectType } }); } - else if(event.data.consentType == "user"){ + else if(event.data.type == "user"){ this.$router.push({ name: 'RowDetail', params: { objectId: event.data.userid, objectType: "User" } }); } else{ From cea05c8ae8a814eeccf91794b3696bf829d507d6 Mon Sep 17 00:00:00 2001 From: kevintellier Date: Mon, 9 Jun 2025 18:19:39 +0200 Subject: [PATCH 14/14] Fixed apps bug in policies + access details --- roadrecon/frontend-ng/src/pages/Policies.vue | 21 ++++-- roadrecon/roadtools/roadrecon/server.py | 75 +++++++++++--------- 2 files changed, 59 insertions(+), 37 deletions(-) diff --git a/roadrecon/frontend-ng/src/pages/Policies.vue b/roadrecon/frontend-ng/src/pages/Policies.vue index edc36b8d..5efa29fa 100644 --- a/roadrecon/frontend-ng/src/pages/Policies.vue +++ b/roadrecon/frontend-ng/src/pages/Policies.vue @@ -182,7 +182,7 @@ v-if="policy.policyDetail.Conditions.Applications">Applications
+ v-if="policy.policyDetail.Conditions.Applications.Include.length > 0">
@@ -397,8 +397,8 @@

{{ control }}

Deny logon

-
  • -

    {{ resolve_authstrength(item.AuthStrengthIds) }}

    +
  • +

    {{ resolve_authstrength(stid) }}

  • @@ -419,7 +419,9 @@
    • -

      {{ item }}

      +

      {{ item }} : {{ policy.policyDetail.SignInFrequencyTimeSpan.split(".")[0] }} day(s) {{ policy.policyDetail.SignInFrequencyTimeSpan.split(".")[1] }}

      +

      {{ item }} : {{ policy.policyDetail.PersistentBrowserSessionMode }}

      +

      {{ item }}

    @@ -683,7 +685,16 @@ export default { '00000000-0000-0000-0000-000000000003': 'Passwordless MFA', '00000000-0000-0000-0000-000000000004': 'Phishing-resistant MFA' } - return built_in[guid] + try { + if (guid == null || guid == '') { + return 'No Auth Strength'; + } + result = built_in[guid] + } catch (e) { + console.error("Error resolving auth strength:", e); + return guid; + } + return result }, goto(refName) { var element = this.$refs[refName]; diff --git a/roadrecon/roadtools/roadrecon/server.py b/roadrecon/roadtools/roadrecon/server.py index 01e229a1..d3f01858 100644 --- a/roadrecon/roadtools/roadrecon/server.py +++ b/roadrecon/roadtools/roadrecon/server.py @@ -51,7 +51,7 @@ class Meta: class UsersSchema(ma.Schema): class Meta: model = User - fields = ('objectId', 'objectType', 'userPrincipalName', 'displayName', 'mail', 'lastDirSyncTime', 'accountEnabled', 'department', 'lastPasswordChangeDateTime', 'jobTitle', 'dirSyncEnabled', 'userType') + fields = ('objectId', 'objectType', 'userPrincipalName', 'displayName', 'mail', 'lastDirSyncTime', 'accountEnabled', 'department', 'lastPasswordChangeDateTime', 'jobTitle', 'mobile', 'dirSyncEnabled', 'strongAuthenticationDetail', 'userType', 'searchableDeviceKey') class PoliciesSchema(ma.Schema): class Meta: @@ -66,7 +66,7 @@ class Meta: class DirectoryRoleSchema(ma.Schema): class Meta: model = DirectoryRole - fields = ('displayName', 'description', 'objectId', 'objectType') + fields = ('displayName', 'description', 'objectId', 'objectType', 'objectId', 'objectType') class OAuth2PermissionGrantsSchema(ma.SQLAlchemyAutoSchema): class Meta: @@ -351,35 +351,41 @@ def get_policies(): if 'Applications' in conditions: applications = conditions['Applications'] for key in applications.keys(): - resolved = [] for (index, object_type) in enumerate(applications[key]): - if 'Application' in applications[key][index]: - for app in applications[key][index]['Applications']: - if app == "All": - resolved.append({ - 'displayName':'All', - 'objectId':'None' - }) - # If its an appId (UUID) - elif len(app) == 36: - application = db.session.query(ServicePrincipal).filter(ServicePrincipal.appId == app).first() - if application is not None: - resolved.append({ - 'displayName': application.displayName, - 'objectId': app - }) + resolved = [] + if 'Applications' in object_type: + if 'Applications' in applications[key][index]: + for app in applications[key][index]['Applications']: + if app == "All": + print(applications,file=sys.stderr) + break + # If its an appId (UUID) + elif len(app) == 36: + application = db.session.query(ServicePrincipal).filter(ServicePrincipal.appId == app).first() + if application is not None: + resolved.append({ + 'displayName': application.displayName, + 'objectId': app + }) + else: + resolved.append({ + 'displayName': app, + 'objectId': app + }) + # Already resolved, just pass else: resolved.append({ - 'displayName': app, - 'objectId': app + 'displayName':app, + 'objectId':'None' }) - # Already resolved, just pass - else: - resolved.append({ - 'displayName':app, - 'objectId':'None' - }) - applications[key][index]['Applications'] = resolved + if len(resolved) > 0: + applications[key][index]['Applications'] = resolved + else: + applications[key][index] = [] + if len(applications[key][index]) == 0: + del applications[key][index] + if len(applications[key]) == 0: + del conditions['Applications'] if 'ServicePrincipals' in conditions: serviceprincipals = conditions['ServicePrincipals'] for key in serviceprincipals.keys(): @@ -669,7 +675,8 @@ def get_mfa(): 'has_app': has_app, 'has_phonenr': has_phonenr, 'has_fido': has_fido, - 'strongAuthenticationDetail': user.strongAuthenticationDetail + 'strongAuthenticationDetail': user.strongAuthenticationDetail, + 'searchableDeviceKey': user.searchableDeviceKey }) return jsonify(out) @@ -760,9 +767,9 @@ def process_approle(approles, ar): rsp = db.session.get(ServicePrincipal, ar.resourceId) if ar.principalType == 'ServicePrincipal': sp = db.session.get(ServicePrincipal, ar.principalId) - elif ar.principalType == 'User': + if ar.principalType == 'User': sp = db.session.get(User, ar.principalId) - elif ar.principalType == 'Group': + if ar.principalType == 'Group': sp = db.session.get(Group, ar.principalId) if ar.id == '00000000-0000-0000-0000-000000000000': if sp is not None and ar is not None: @@ -879,12 +886,12 @@ def get_oauth2permissions(): grant = {} rsp = db.session.get(ServicePrincipal, permgrant.clientId) if permgrant.consentType == 'Principal': - grant['consentType'] = 'user' + grant['type'] = 'user' user = db.session.get(User, permgrant.principalId) grant['userid'] = user.objectId grant['userdisplayname'] = user.displayName else: - grant['consentType'] = 'all' + grant['type'] = 'all' grant['userid'] = None grant['userdisplayname'] = None targetapp = db.session.get(ServicePrincipal, permgrant.resourceId) @@ -920,6 +927,8 @@ def get_allroles(): 'scopeIds': sids } principalType, principal = resolve_objectid(assignment.principalId) + if principal == None: + break aobj['principal'] = principal roleobj['assignments'].append(aobj) @@ -947,6 +956,8 @@ def get_allroles(): 'scopeIds': sids } principalType, principal = resolve_objectid(assignment.principalId) + if principal == None: + break aobj['principal'] = principal roleobj['assignments'].append(aobj) if principalType == 'Group':