From 00fde9263bd4da46c947b7e5e2b18f9e643a9dc2 Mon Sep 17 00:00:00 2001 From: Jared Goodwin Date: Mon, 25 Feb 2019 14:03:55 -0800 Subject: [PATCH] Rebranding. --- Remotely_Agent/Remotely_Agent.csproj | 2 +- .../Resources/Remotely_ScreenCapture.exe | Bin 1182208 -> 1181696 bytes Remotely_Agent/Services/Bash.cs | 4 +- Remotely_Agent/Services/CMD.cs | 4 +- Remotely_Agent/Services/ClientSocket.cs | 14 +- Remotely_Agent/Services/PSCore.cs | 2 +- Remotely_Agent/Services/Updater.cs | 2 +- Remotely_Agent/Services/WindowsPS.cs | 4 +- Remotely_Library/Models/CommandContext.cs | 4 +- .../Models/CommandContext.cs.d.ts | 2 +- Remotely_Library/Models/ConnectionInfo.cs | 2 +- .../Models/{Machine.cs => Device.cs} | 26 +- Remotely_Library/Models/Drive.cs | 2 +- Remotely_Library/Models/EventLog.cs | 2 +- .../Models/GenericCommandResult.cs | 2 +- .../Models/GenericCommandResult.cs.d.ts | 2 +- Remotely_Library/Models/InviteLink.cs | 2 +- Remotely_Library/Models/Machine.cs.d.ts | 32 - Remotely_Library/Models/Organization.cs | 14 +- .../Models/PSCoreCommandResult.cs | 2 +- .../Models/PSCoreCommandResult.cs.d.ts | 2 +- Remotely_Library/Models/PermissionGroup.cs | 6 +- Remotely_Library/Models/RemotelyUser.cs | 6 +- Remotely_Library/Models/SharedFile.cs | 2 +- Remotely_Library/Remotely_Library.csproj | 6 +- Remotely_ScreenCast/Capture/BitBltCapture.cs | 14 - Remotely_ScreenCast/Capture/DXCapture.cs | 11 +- Remotely_ScreenCast/Program.cs | 10 +- .../Sockets/MessageHandlers.cs | 4 +- .../Sockets/OutgoingMessages.cs | 2 +- Remotely_Server/API/CommandsController.cs | 6 +- ...inesController.cs => DevicesController.cs} | 14 +- .../Pages/Account/ForgotPassword.cshtml | 4 +- .../Areas/Identity/Pages/Account/Login.cshtml | 4 +- .../Pages/Account/Manage/Options.cshtml | 2 +- .../Pages/Account/Manage/_Layout.cshtml | 4 +- .../Identity/Pages/Account/Register.cshtml | 6 +- Remotely_Server/Data/ApplicationDbContext.cs | 43 +- Remotely_Server/Data/DataService.cs | 206 +++--- ....cs => 20190225192927_Initial.Designer.cs} | 627 +++++++++--------- ...1_Initial.cs => 20190225192927_Initial.cs} | 447 +++++++------ .../ApplicationDbContextModelSnapshot.cs | 625 ++++++++--------- Remotely_Server/Pages/Clients.cshtml | 2 +- Remotely_Server/Pages/Privacy.cshtml | 2 +- Remotely_Server/Pages/RemoteControl.cshtml | 2 +- Remotely_Server/Pages/_DataGrid.cshtml | 8 +- Remotely_Server/Pages/_IndexLoggedIn.cshtml | 12 +- Remotely_Server/Remotely_Server.csproj | 4 +- Remotely_Server/Services/BrowserSocketHub.cs | 228 +++---- Remotely_Server/Services/DeviceSocketHub.cs | 218 +++--- Remotely_Server/Services/RCDeviceSocketHub.cs | 8 +- Remotely_Server/Startup.cs | 14 +- .../wwwroot/Downloads/Install-Linux-x64.sh | 2 +- .../wwwroot/Downloads/Install-Win10-x64.ps1 | 4 +- .../wwwroot/Downloads/Install-Win10-x86.ps1 | 4 +- .../wwwroot/css/Themes/cyborg.custom.css | 6 +- .../wwwroot/scripts/BrowserSockets.js | 30 +- .../wwwroot/scripts/BrowserSockets.js.map | 2 +- .../wwwroot/scripts/BrowserSockets.ts | 32 +- .../wwwroot/scripts/CommandCompletion.js | 2 +- .../wwwroot/scripts/CommandCompletion.js.map | 2 +- .../wwwroot/scripts/CommandCompletion.ts | 2 +- .../wwwroot/scripts/CommandProcessor.js | 28 +- .../wwwroot/scripts/CommandProcessor.js.map | 2 +- .../wwwroot/scripts/CommandProcessor.ts | 28 +- .../wwwroot/scripts/Commands/WebCommands.js | 140 ++-- .../scripts/Commands/WebCommands.js.map | 2 +- .../wwwroot/scripts/Commands/WebCommands.ts | 146 ++-- Remotely_Server/wwwroot/scripts/DataGrid.js | 96 +-- .../wwwroot/scripts/DataGrid.js.map | 2 +- Remotely_Server/wwwroot/scripts/DataGrid.ts | 100 +-- .../wwwroot/scripts/InputEventHandlers.js | 18 +- .../wwwroot/scripts/InputEventHandlers.js.map | 2 +- .../wwwroot/scripts/InputEventHandlers.ts | 18 +- .../wwwroot/scripts/Models/CommandContext.ts | 2 +- .../wwwroot/scripts/Models/Device.js | 1 + .../wwwroot/scripts/Models/Device.js.map | 1 + .../scripts/Models/{Machine.ts => Device.ts} | 4 +- .../scripts/Models/GenericCommandResult.ts | 2 +- .../wwwroot/scripts/Models/Machine.js | 1 - .../wwwroot/scripts/Models/Machine.js.map | 1 - .../scripts/Models/PSCoreCommandResult.ts | 2 +- .../scripts/RemoteControl/BrowserRTC.js | 8 +- .../scripts/RemoteControl/BrowserRTC.js.map | 2 +- .../scripts/RemoteControl/BrowserRTC.ts | 8 +- .../scripts/RemoteControl/RCBrowserSockets.js | 36 +- .../RemoteControl/RCBrowserSockets.js.map | 2 +- .../scripts/RemoteControl/RCBrowserSockets.ts | 35 +- .../wwwroot/scripts/RemoteControl/UI.js | 4 +- .../wwwroot/scripts/RemoteControl/UI.js.map | 2 +- .../wwwroot/scripts/RemoteControl/UI.ts | 7 +- .../wwwroot/scripts/ResultsParser.js | 32 +- .../wwwroot/scripts/ResultsParser.js.map | 2 +- .../wwwroot/scripts/ResultsParser.ts | 32 +- Remotely_Server/wwwroot/scripts/UI.js | 16 +- Remotely_Server/wwwroot/scripts/UI.js.map | 2 +- Remotely_Server/wwwroot/scripts/UI.ts | 16 +- 97 files changed, 1811 insertions(+), 1748 deletions(-) rename Remotely_Library/Models/{Machine.cs => Device.cs} (90%) delete mode 100644 Remotely_Library/Models/Machine.cs.d.ts rename Remotely_Server/API/{MachinesController.cs => DevicesController.cs} (71%) rename Remotely_Server/Migrations/{20190118025611_Initial.Designer.cs => 20190225192927_Initial.Designer.cs} (78%) rename Remotely_Server/Migrations/{20190118025611_Initial.cs => 20190225192927_Initial.cs} (81%) create mode 100644 Remotely_Server/wwwroot/scripts/Models/Device.js create mode 100644 Remotely_Server/wwwroot/scripts/Models/Device.js.map rename Remotely_Server/wwwroot/scripts/Models/{Machine.ts => Device.ts} (87%) delete mode 100644 Remotely_Server/wwwroot/scripts/Models/Machine.js delete mode 100644 Remotely_Server/wwwroot/scripts/Models/Machine.js.map diff --git a/Remotely_Agent/Remotely_Agent.csproj b/Remotely_Agent/Remotely_Agent.csproj index 029f8c26..a632906c 100644 --- a/Remotely_Agent/Remotely_Agent.csproj +++ b/Remotely_Agent/Remotely_Agent.csproj @@ -4,7 +4,7 @@ Exe netcoreapp2.2 false - Copyright © 2018 Translucency Software + Copyright © 2019 Translucency Software Background service that maintains a connection to the DoXM server. The service is used for remote support and maintenance by this computer's administrators. https://doxm.app/EULA Jared Goodwin diff --git a/Remotely_Agent/Resources/Remotely_ScreenCapture.exe b/Remotely_Agent/Resources/Remotely_ScreenCapture.exe index 6b775bdc085c37980dee56ef4a8cc96a423a1e03..8519b93f3f46e785a4aeb924af033493cf62e3bc 100644 GIT binary patch delta 24194 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 MJN@6Pjxxvp0W*6pF delta 24608 zcmbV!31Ade@^`(SdnQ-Uu(Qf%BT8)^AovE;h!=)9vBn%ONO7$VnNVPKRP^GVfLxjT2O?7san;T3mgWDg(e{EI*D)L)<=OY%Kv zi~O;h{265ED8T0m9m65UGGTeFr#Rkfog6;=_`CjDP9sJUWf1A4g`R+k*E#)bji!dL zLeHW5ARy=TpQD2NO@Y_eW$_RTX8aY#)6*dgtp`87n5nDT!7M;{HdBwVVd!C?UmZ&t zM5J8dIZ$+d+Pl}Ec0(MxgDp}*tNB2?Q}SuXTTyXxmzYAUAj}K@3QRoa+=#=Bx$M6c zFf)lLE&N;O>8Yhjg(?9Vr=^sz9}SZSGgV(8A6M=?!X8=k4kL$Xd)DV=gfx zq1SNGw9r3ri1BNoMNoy8bS~;sp%!;O-6z|)4gyon^LjnFpf`vy-oQSd5g*;^|Izq) z%lK&=Lrc-T^)QFW33s;s0q0r%=r8Y@ud(I6?)V9x#$x($>-%U{S=p5DV&v{a%OLT& ziYrJn;|Ya{IwKi+=Iv7rkh6I0wg^TS3oQ z&h2(^5Y?D$L?X)2J1nv2S3rj%Y&QjfCOS(u@<$q_5ZMg@pGBpEyo zoflh)%`C8F6c|RzQnxGA8^iQET@|00D-P|-{!7CZ=yvA+reWv6tlZ8oGBb^pFbe&P zN2G;5z(G6a+=au8zd;_podY-JVU#~tGVw$&LvIKbTh|IwPHSJIpitFl(~3CG&cefZ%y79w-(w7<6|oMn8HSy zVD+lG!*_PR63jL}g3`?4Y%QhLfzGt#)&L(u4h|Y4_!=gJRL`+NT$rudT7`hX-X#zM z+yZ?O z%WbBjD}kqLbFjs8LXip|S>vFhGB{vGcr^xe<78XPxMOx?BgPFQ1EXQ*ROE>^AT1^I zRo9qZP)e*q@CfacsSy=RVCMGahK)934ZOE{nAGO*A$%7E^O8X2m89g)O9XMuc@TbQ ztc4=4jWr=7jc1mlLn}VaxQE^NSYQTyFL-mD95;gQ4%BL5YQs3~d0S&lPkaccv+G## zBs@-o-Z>92JSaX{XoS0^>mePFzW!kRP}I1GEl!Ev@jh%!JjE4pE_0S;l@+NJEVN`S zoc$QA=5(1m-4e9GYI3&9qHwkHs?ao}=NfqgCLvtmpqx%vJ0jmBazCnL6zbn^55gI> zK8hxOdvfbza?BjtimMX{%;v3+TMYNrinFem;(7tcl-4KtXn@!xg1MVStMGFOnu>xf0me~;g{IO?pWPZ?AATumzmqu!;Y;`|H&!IVVtnMu|4O!`!XZo zCBF|R(;f?j&pBS*tNVKC-tcRn!>G&#-SV9}fiHEu zq{n*Zya^)omSHxCLzA~fz1h` ze}b5YD*|u$y{M>jX@2iK*`u}4H|U&j9hx3UBt0>-fLUt;hqCj{{84IRXP>@lM(K?2 zpljnzsj$=*UJY+ICLgmE2C!V8$I>X3?Ts%pyf(p#fELEN8ysU-q4R<(j-lz_Vv)^g zgkrWP6T)XhZ*ifm2h+#W;B@INHWDlqbJ&ZqXJE;?*j2T?+ZA`^)uewP_K`=xw)IBH zw&Y~6yb4lGud)EzlA+SNRc05aDg~-}+|*R_wD;=Sv={5Sy{w#=d2BCa>^xSP>&dc^ zg@Ti+71;zX#HA>1)s_m=E;_9TjW-!~_dM1n>yFTexUlt-XC7NvyqBb$ip$AnMq#cp zGYp|6crzAL7w}Z4Dx&0ow;DSck+|2r9pV?YQ8B2BG|RX* zOFO3(^fEYR-P`5u_IW0sGR~5~SC_0;mkf@&WWBp&aEJ>b-J3ctfRdHQH%?9+kL@Ey zj~QHv3q|pqtlQ;y#PZ7U{iF5|IIBVs(_tld;yNv%Aa+6yb2uv zhr^dR%)r%#_lDl+F^oFK_GFi!V|hQYV?VH4`+>(COeho1Lmu9Cox77=#V(hnw}v>m zsKzMgAvyvc?7bP3oPdI{OX1q3n51;DaL%<6)^^V#H?96q)b)u)ZfPo{ z%KuA|W71D7aFf%=Y&zn8A3yYTR z!f8kuChKnAB(M-%QZP|IIS^Y7MOU%MT7?}OE%w-Gu`^{AyB-^@b*8#%JyvR+tDGrw zNALWlB#p zXHIA62MBPL;}8k2FH_>^IfrJ(&4jx>y4^iqcX-BIOS35Zg!%4iYt3zEsI1noq3qhY z0t+YD!iTsYsr(K;HMvpnF7`@8oM&8%1DO1v|UsB8(AxQLLPa;sWz1dF9Z&B`8ML zh-CUd{)`bh<&GLs5b~h!7{7WRP*<31s-s1gJAj~8Pg zyS*MHEEEgjF4JH}9B8jI#53u0C5GbJUUL=B%Yu)2*#KtWntztc^P~DehJJpS~3toW7eEMiO_# zCeza$kX;SvA+tFlI}gx9wx4D7t`lTiz)p{M8z%@CxFOsD=+Stz2eMUw9x_~rPn~`a zpoeTb%L;ra$Q}hdJt5`<*_~jgAL^1B=18uJh42|b4~PBYAiEvVLsk_J*%CkxnI{3V z^8h_$dsvpLpCFqLcKS0X%5n`qgckyOH2x>cemGH9AAsy)fN96`GF@bUkIH09;u2w( z0qEiHT$WuGl}THXJ(oyEPlwXjnRG(qX0X%$a-!^Emi=&|?80QoZUFS?_*0f0J5e?~ z1+uFFrrr4x_4_Q$?bRg|*=n%U-#bw@us3A00n)f|rICX?q=b^OB2y|h!yw#+PL^yD$lD`0%jD4fz5M{E0UDRxpp`W1tn^p7lV z@O9tq%}yFyz_=(BQ|hIZhOtFXx>y?T$l}K9^BKeSj3*bzl*ZBGS`Okd32}jnDb1#3 zSvL-F(v>3F*`F=1$YuPYB0I)OON$IXJd>RrlTS}HoPl_^in}=)8{JWS$`C)z?!T_y zN%JA`)5AlUUWx9#w776=k(VB;99vXM*Oj&pLAC~RCffQk{>{u>F4KRlVmw^>LZOpJ zi0A9It$sh9IdGj(Ur4XPsh>s-WY^0OwUeHZk>$Xhmo{W`H!G_duc-UD&`TYaddRxOGEKYC-H^CIC>g%9Q7XZ($Hl3R*mr_(=)(S+LXDUl4*1!OLmLov;OTh4RC>E+Kc&(&z+{?H$L<~#+6|jja%Jtu zgR2KBxYe;t_HzW@GU%^OD|IhL{2v!)(1!ji^$c24zfw=7g^ld(7y?Q)=-wbRufQEr z8f4Q82eawP`Rs0FkR6>>y;65lyDYlRCD}1vszfHRFooVWl<7ySPHFbi#Z{c4IRhC# ztYG=+>71wI6(#+hRMvb7@QobCp=B&LE~wxHK2UN$cIoB8`};X*WHrxI;Sg5eSi`38 z$U0vh;#nM2z?hHOP0=13#Fa9+FWX!iVjL+LEMWRwp}!W~EH&-F<(= zwG&Y|a=c2fGVX%Mq2!_7coItV=}_i;7S|__xmb%EC|nXaFP^V`juLL5Y>T@A_e&b^ zz{%8|?_;hnlFUArx!6mQ#Z8W5t_mD`*^nO3rlT!(r#L+aoCC@$BipO7UrdcWzGrbmBexFH3ykl?n!87G7U`nj?~bHMa+vSlUEbAFz!_1YY2hZ~p1x<@oaLeph_9@XZH zmosI}JPwX6I|iOM*g?;MW1lOB-c-xnHDrTs3Q?q{M)&Ea^B1(mVzhJ6O_8xR`hZ}v zo%{SiTS<6pKy!o7k@YotFQYL3qdW(Fr#&q`58#~UpkK9ZVs+a< z)*aK{74C2zb2i)V9wSP$eM@UlU~yF+Vb+pu-;3qLg>0E@JKDptk4;l;i2BC?Eq(`O z+VCC%f4hw)?l9LDud?Xo^!}7ZYtl~wwxy2%{--3Ieikezq>oijXOsVkHm0pG{+QN9 zpC0S7G3~RBX}jDV2i)mlOcT7y$@D8iA536ci!j0%TG;JI|n+Hv1~A-O(b&% zFul2$@!QOHn=z&>kSC0Y)>bq9n&A8Z(?fS`2{+L(< z>f)I;9J~$&2|Y$<$)I?~196PM3663weVd!HT_i6G8V||gR>6h@b~HrXT`CwG&ywfG z=`XR|_$=vWs^Btldbc<&j`1PHJ`KQx%E8O+PP(<>2XaClMk}pQ7~_ zGMy@T`B0|k2;zMy=;P93RntA_<#x^B!#a(-NpEDV68xqLw6!E_s@Bp-ol>SV`ZMa% z<%n{oDV?!0kg1+3n9`cXaa%m#L8AGB|TZ`sV9b?*_h+%wK=tV+z zx>+(#@I#TmA@U+G%Rd*%Hb}bsjC21Ad7+oFQ|J{=reF0jK4HZ0;X`5G5c*-E7YTjD z!`dQg{JF@tLEh#11KsT$)3!T?akG>0Q6OvYL7uMj#X_=DFvrXE%|a(ArYC5Ow|Wdd z+-GMz7Q=X#7^NpL{f#v1r!)O`7h{@8ZWQ~Ugq|mKlF(NRJ<-FKlg0jd@$-z}!-8Kq zSvys5L~QJtV7?MXl87#pX7Q$}1e7iG_Y#&8`cA=SH#@pV=qCh!m9}+}SxtJGksz_0 zAvjsEQ}9*6p9C+JE*}#|?+Q94_TlCT1jB+Z8Q<@MLnV}-1uG=PZv}r8{7Wo{wXZRr z4+)aG0fIGxlLYS)%=fd+P{GmSZi3)xaV#GcncS?Gl^?e;Qz!BMS@2tF+}FYKanjpY z(pjuTcYkC{vtAJE64POV7e|ga>jPXh!iPYfpk5<4B>w1x?Fr$32u^*{w_AvqCHjmSJL)3 zgw&&G+)^|^6b%qX14PjPQ8d6?4G$ksG(Z#$5Jdw-(Ew32KokuSMFT|908unR6b%qX z14PjPQ8Yjl4G={GM9~0IG(Z#$5Jdw-(Evxpo+TntplBdM(Ew32z^^1A6b)z;4G={G zM9~0IG(Z#$5Jdw-(E#fri-ws+0|rF{M9~0IG(Z#$5Jdw-(Ew32KokuSMFT|904EEg zXh5TAfG8RuiUx?H0itMtC>kJ&28f~oa?#*`q5-04fG8RuiUx?H0itMtC>kJ&28f~o zqG*7FB7Yrj77Z8_4G={GM9~0IG(Z#$5Jdw-(E#s{d@$TB8Zamt;Kh;H5oXbV850>X z!YmpvC>kJ&28f~oqG*698X$@Wh@t_aXn-ghmI#fa0ga*oqG*698X$@Wh@t_aXn-gh zAc_Wvq5*Qz;DDk5qG*698X$@Wh@t_aXn-ghAc_Xq+Zo9|#Vi_dC>kJ&28f~oqG*69 z8X$@Wh@t_aXn-ghAc_Wvq5-04fG8TAYRq>azq;xm`NGTirkybm%Xpicag>A6Z^$7| zM3sW~NrO(oct0DNHV&~QvB?!&BsNRp*``5fOcs1ecY+6!%MvK~eux8oV!!n|y5f0pwldd%-mck{T!Dy`XVdu#B%!XUnDS0>QRo zzIfctmyOig#MhaJni-4aD%3T^$8U5}3VLhB9k6LE#=b=*rI-j@)FN7Fxl2=faS_v+kFRh4hdVl_@ULH4JC#@_v)r-}Y#yG2)aa$wf zRFT}9#dKa7;{$b!(<&HK>fwRD9F*g8Qva%ukNchNOE##93||%nGwy}r>wJ!G(!j~F zPFgFG?xt9e-!*Ir!`)uSJh}FaHGcf3y_;7CMMHn>Yb?5dBvRSOS5V~ZyekV zTqoEk(PulWZC<~bz!v{Z+ZjQ=qtelXdkv2?Eo4J}388? zp?_z63XcEU40Kp9INNTq;Lfb7uosz1a8-d*?0CA)rr-`&ongl_bc;(XA8Y3aO{Q*m z)nDwmb!~DNc*?@|<}NOHYSUls!=l{bs)hE`EY4USyj;KD{wK=p%Mu>bB=bu@(&0~8 z-`LNJHoPeCgZ=C%*Ae)+2X|)eQGULLKMu5_(&HE(HaTz~6n`8{adna-Y;hgI z{lO8AsZpH~TYZ+}swi93bb+Ha%4H4s#@-&~R@f&w=0~})1ExBzjdI6^%yKO5<{EX! zby03h`8W1%Zddt@jvJ!7MTY)2$FeBv?Ej7Z<|uc-p5*9^a-O=o9k)ce9rlMDw?(;c z%XJ4HWa5vyJW0K?UDEDFGH}-p? zoWJok$9+-m?-lPl9*A<6#D36&8=d)${lTbiV&*Q#`Y3mD<}RZLJJ-Lb2Up#+-|=wN zw4w5A$D>j1f%09BjWkr2thuvoq%(wD?#?b;DCh(z7y3g&U)LuJ<2V}de{AKl;d_E&@E;zsDG{B^Djy$VD)mkuHO&# zU6fd8a$^VRj$LH*x7b+~b3MDL+2YzN=X!S27>m0ex;=D>#oYwmr!?2%J}roNKBr3A zv6j;(#Tz{P>7d2kQL)AIZ<<+bcDSZ;i{}gZ{5l77(g59ifadluVPyvms>uYqTR1a` zU(&x#ot(M8?AAqI9IY2je4}cc_BFSaC4XQ@gZCTiRm!}%Aby}+;g-|k{8io`=!Gcv zw)YUNE@R8(^uW+$-;dp{vG*PB<|3z!!Lv6$Z~odXgvqaTZaFt!K&R3w->-C&a2)l6 zzTaq#aP97M`)}|aq4lPY`WJo#&fTBeEu>!gO)!v{cdsFb2rA?yG>z<$0vC9)n(~8!P0SprBm(cVd*@<(%Hk(m_#nM z4IcpOa_Tz4)TP$R>1nyUS5;A*TRkFNhdZyT9NZ>LcS*21&ZC~QbXNy!!M$eb?n~R{ z@T#{h?)kJ2!0oWOsv>LavI9{A#M4xH~C?&oKnlOyN4n zlei@=pf+1v?2zL4B%{Y%Orm7fjEB`-YdrZ6x-&#)u9D;vrYTts;m@4Veotxc^7s_h zY;kqDw}U&w;u;Fq$M;fGE$;W6<=~8~EjA9Oy;Qq!3*A*kpW1q>B^EcVXe+pzEz6G5 zPi?7crN!M>x)t17%ksnO&6K7dw75gn8{*T{M$2+vU{id$ddA`o2VMgAhJ02Aao3b? zrao$qrTkOrhWI{e93C_C)Fo^sT2yLR_y1N-awD%Ro-4Xg&2Y;jH5o2jqLsFMq1Y$n+o;`^$Q zsgyB=)YT?OvlGYZA(dOtPR+fqQ1uhe+(--6>B8;z@QfC!u@=V@TBt6tI9?Y;>Jp3N zby1{df-`v0@WLoo5lhMQTdeN1IG*2Pwa(&r4olRd7RPf~qMorhp2AY~p2hJLma2vZ z!rwx7X8otOGBv{DO6s?QJDWKJ@5~3*PojRR4bOxTjLcI%wfJP_%<=X+Vb=PoTST{j z9-uG%{S@2b?LjP$usq7~2)j8RVE?F&^VG!|uf=kry4crZdGr-gQyzVkbMO+XjOsWS z-5lqlo8w#zh+1+k2B_5%_Huf#Fh4L*O&P&qFE{AH$}<9k)J9 zM*CffLrxfdox0^utTQuH_Xpi-(Ji1CsWP!nZ89w>uIRMHdi6#Z*L+Q4gX(v>cp>BQ zinWQ2>OzaXw&bJ4X7xps`!4Y$ zY51tmvTBXu=ogf%qFFhH2B!~aX>j^5+;w%cFPkOXf;N$8g4|#o-kB=ejd!F%2YG}{ z<85$IqeN_9Hu@|dpGBmx*q|J=BVR*sO`sJWEalNBp{&SjfkHCX=+I)rBU&;Zay zt6}PMWe5WvbzjihS=$)BK`@6UyCTn zK~YfASvefm_%gykrX!bjD#R4v;~dD1lfFYhhN5J# za>)nhFR8)G4QTEKUuoxVaB~RfWJT1-q8&Nh_#!0APNyfb>+wK*h*C!I8^)y3B|sZZ z1KR0!Tn;mVOjTZ$f#p&r0TjG=fRm%?2m ztEp!RCrZ%)F@iSg?k+#i>olN-j}%yz|0zM+$!M#nUuJjP4`Hu~&#oT(Wg1=4;Rcq( zbqP?D)Y+s1yA_J5Wz?t)lhy6wkKLe4bo`H6g%JNKYp4isCU7?jS4a{Na0ara(N85< z|E5TzCd`MT#{R7M82PZ#=RiC4ll8Gy8q|sFnG%GVvu@f(XT#D?Y^mrbj1~9ldbIjG zYDBX#-Ax<+r)K8-nVogh|EE@*gRaiH>HpHopuSjc8ty#uh+|Pmb~+#{*<7FI^8A0L z`^((_CK)wxrYybhu*WDe@pAO2$an#>qS4_r?tXqhPGAbk%t6DkwiRV%G0qf6i)CuQ z#6_qLx42pUy@T7HFOIrx_!cS4cOdyTu~AekMa%YzE`&FYhQL3xhKSx2+>7E-^q;s) z&Jq8ASc9uS3;^#GG~9q@+LV~REGsZr^ndT#!T@g4kR%x)SAq z8O6@5h_CH6>n!)GY)yO(ui*|fJ9^%nZ%OIO$f%3-6r)%TqmO9>6)T-;s|Vs-%b($k zkx%u-$fx=|kWZp4!9*HSeuY+E5gtN|KZZTHi%?013dvVYMY z6U9@4FA8oal|9?duG`(e()yeuz_EeNxYdvcET@vX7|#^3oJM==8a#|AdnVI8c_Sg; z9yrr86WTTIDKsFn1(KI*FZXoN)4`8Cx|*4_$H3v*ro#|r6gj-*v^3M_%~G74a(cgN zEAXBn1H6OO!Xh2`WNwV7K)um;vA00+E&aK0eHk^VmuqKw%cWI=dT;P7udbf2+~a9b zdj~Io{QjaFy(84@x|_YD)C0M?w?SRq7(p*dSzF1-QlDjRr7X1$cn#dmR9Wif{;zv) zkfLu8!L)-gs(^ zxC834l7(^KtHR6;zRBvC|E9S0G8m;jnR{29M>8hmKZ^rLbT<@}knlk1R=S&PrMdCt zbZh2JuSeq`JQ{cJ(YSkE%f`Es6)FbrZr9V|tX=WC#^csC9(M;%M0{`UXz__ zr5!A|E3QGSt*+BY0oS-2v?~&u^#%kziKfvoZ8L3@Al7If)~?oDU^9tYv~B7!{TcD5 ztI_o@>C+(pSYM-^-msb0XlFKluHUcC%QU{yXKBCmKde8dr3^Z%Kczi`r(;iPn*@8| ziP%%x`;|T$k7-uI67B68&A&vurp5)FQ5OSTg=cC@w5_mTqHV6xA^GbNrWfEj@)FHm zk?h~Ajl;vuz1kyqzPv<>&r0)mAe5lLU2AMCH2f>H^K#DzewQiM`*k$C*@Bmx4?V?Bgqijo>ABW^> z1T+nW_jkW;>x-vQ9cpv!3-Fd4eBD3Z#@>3{h6Ug8XW9BgYqZ#$jXV64Z5P(R1J^u% z1u~Zf+8K53K!G+9IL)@aIzBL&s+$u9`vhj$ILYm{&4o3vxwW7Hl53kr20GNYxmN@_ zpxqFEzwMFc*?~2n4M^T9SrmB8wq)qCz$-E--0I%I3PT*}+B%(=L$QA|ZGn1L!V25c z!p8%;Dye%qplb)3Z;01zyu_y2{$2Gu0y?irB~G(dmZ`+YY`-~j@rm7$>A8td*)}y7 zCcbFfp1qZJ+J=?=C2^;%Ztx|ETWr_mgcG-myc~Pzm7tGQ%u8HiGY;o>;_z(XZ!pSf zem=3BQi}(8x7cnfc{T9>f_n?v<^A7Jyqgvj><7)8NjXL8d28C+JQJ301=5lj^OAnG z-B@*IlCpF6Z_&3+Es!+VPfFSjKL=@x?d9evu-pWEOX_R8ZMIQ!l{CI4@hyyd5(;m7 zAUA%5){?a_Nw@QA-)Y-gur#SR=ne5%K&%Gfhe?Bg2dP1Dgy1N_@q#UalLe;%x7ub2 z-7dI9(1Y({Z2HR-{oz>SrkGoj;^>x`wMkic$2J7NjgjL?OD?4}&(S2@1{CypY>?PI zUqW)k&GJKnUkQHZX8A|%y})$;<<_bMnB=B1)X#ywTNUQ zeuHe;Y<cb8az_E%4>EX5h#o#vAK~1D_0@3Vhzd_ywauYjc>nzW*7(orA^zn{uy9 zAUdh=CZJ#FkwwcvKUm6mxOycpKJgCVnWaqE47wlqQ~d=xv;!{&UXaalvu#grriY$w z%ggK8X-^}w*&j{av;$YW3H1J^1#NnfGTy}nr=s_O8hwDWQ}i#v59uUGb_#w%!yw-S z)MziVtmspqMxP|)&)8)Dy4$h*VviPmwXu2rC$FbBQ$MJL~z5+$+9IB|a<9HsW zHu3R%%Er$Ck!qo9%J?{u=E(6P^1;q&n?#-lmQSXm_3ZyLsu{}s;AAz8 z_6J!pgJQwgt1GDp9n`D8Qq};L&!QD}=I78@;aln05SANstkF)*s-3o!J8@h(wH1_Gh~#bO7y1T~D4mJ}#vlb{F4$TSniOyI|NsHgViZWjNNWTPaca2&GDc z74(?|@HhGv9g1z{k?+aYw40$)Tg?KMrSgAA5E0w{dBS%AEdc{_Wux7 zV}QoV>Je%{s_NBa^guZukJB4f9vqcAFvLUlHu%8K(EX?6?q(03p1>PUzHiX|=cTdo zh`6T=KhuXdsqC%W9~R5p$f#@efEp9I=vuvR(n{3xiLUUA9FaA!FwVeDkw3Jib@ePe zv6psv+{1FLFv?3Jx($hD`k%dtRt`7mk5Y*q+H2D9BoocX7t-10KnmnzOnN@rru}Tv ztMQ#)TA#spA&G85gHJ9o=>QtkJ#5mo=-{q@nRF}U2k}d9Y@Z7I#*<9?TG%8lG3m1* z-*?!gkM_csAwWVy4(p4vfa&=N6eBgAUx^xP?A~`;%vm!Velj zek17I*G)PTcXd9U6(jOpkbkhnq<=;SC*2S$^39Mx_>xJFL}#mUbDaIWg1)v4H|gh6 zXfQpr&SYxgH2F^a&@POop+Q~-ek&3*ev5#1{>h{#pz(ywCVhS6vPJqQBZtw+bP9IF z)9_TC|LpXRJRq^t#{;;zot_)Oa(pvb|3FRtNZ=y5x5$Xedl=>d8DgF^^b>Jg)$P;ld(eI6~KEEFg8F9trnYDj8 z|NM&TP0udTD{YBG8ZVkO`HH5NsWY$SpAD$J5V}p@-Jp9l@6?v*Gbc}+JhkPDO+VeJ zr{sCNO*gqV>K(34+n&}}s!g+=)fZ};GG5TfIX2z=s(y)WQ`{DPm(9_9(Ug{1kppk( zmu@=eZQZLjUAR?$PE#e3hV6P{>{)aX&A`9O6s9XSoxNR;NlCcl_v|TmFZ=nF%?~}g zZ`O>$OE*pZLeKX3itSE++b@9j;!Ud#={6gF4+Y=v1RGiRvtAS%vMgzJNm--Vd4o9q`d7&h3IEQEzu(hXqDPAJ%89 z;>fncdbV;z4jtC>46~`-skeJLh*(FE{B2vDL4?q@1??e+Ye<21NZsBbMLPuFMY~)! zjg8r|-Qx^uDm_5#hGi~BchIKXZoOT1e``bEDK}Z!aE-u{`q{xO}^df7Fju1!2 zgX|USa=7)jz35Uy8>fr`A3ElQy4_yQRIz2yWht4-LYCUrA(fDua}-Q;+04d0F(yIT zGAJPfU-Hi&w^tda($keKH|MxLOL7dS5XYKyfzyTG!*pxN20C)_==|*^4mWp*=p_Pw zdpXB4fMF2BP=*Gcz>}C7!EhR99J9uAqB(;>>H|9u2JPlKI>{-50UpHl5EjUQ$j)E! zahU;T5TkH_wcCN`uNfp0(;$;Np8GhDp@rchhRF<pD>o+FG8amtO=kw#wDCvb|H;A zIAu?yGlsl8-;xyMO>uHqyd)BLMDL~aNZ%v)j{LKIxSss&FPcHU3d)X*I$WgsI54s# zm&@P&EC_%576?GLzum{-3u3MDs1X+X++oJB!{NdL!2E2-{bw9@cFoF8UIySfCH{7F zvJ>vOO*OdmUJ3X)W`EmKmBH26g)!TpNBEg67 zMQU>?Y<`*+poD;hekZ<>U_us^i#i(GhA4`#y$4@{qL`APTBS5DI032t*y&G$s^J*uCodPfc&)n88O z`k{V40bYey8-97ejr@^!j_JL7{Y>~Zle3!7TJcLs%RTqL-2B{^lfQrR-l5MgKdxWs v4_ZIGk499>bg&~U*@mCvk8~c_=R|@||I{bq{J%MH18S4*^na&1`nmoWLr;Xr diff --git a/Remotely_Agent/Services/Bash.cs b/Remotely_Agent/Services/Bash.cs index 80231357..ecfb852d 100644 --- a/Remotely_Agent/Services/Bash.cs +++ b/Remotely_Agent/Services/Bash.cs @@ -127,7 +127,7 @@ namespace Remotely_Agent.Services var partialResult = new GenericCommandResult() { CommandContextID = LastInputID, - MachineID = Utilities.GetConnectionInfo().MachineID, + DeviceID = Utilities.GetConnectionInfo().DeviceID, CommandType = "Bash", StandardOutput = StandardOut, ErrorOutput = "WARNING: The command execution froze and was forced to return before finishing. " + @@ -143,7 +143,7 @@ namespace Remotely_Agent.Services return new GenericCommandResult() { CommandContextID = LastInputID, - MachineID = Utilities.GetConnectionInfo().MachineID, + DeviceID = Utilities.GetConnectionInfo().DeviceID, CommandType = "Bash", StandardOutput = StandardOut, ErrorOutput = ErrorOut diff --git a/Remotely_Agent/Services/CMD.cs b/Remotely_Agent/Services/CMD.cs index 70eb0b56..76783b05 100644 --- a/Remotely_Agent/Services/CMD.cs +++ b/Remotely_Agent/Services/CMD.cs @@ -128,7 +128,7 @@ namespace Remotely_Agent.Services var partialResult = new GenericCommandResult() { CommandContextID = LastInputID, - MachineID = Utilities.GetConnectionInfo().MachineID, + DeviceID = Utilities.GetConnectionInfo().DeviceID, CommandType = "CMD", StandardOutput = StandardOut, ErrorOutput = "WARNING: The command execution froze and was forced to return before finishing. " + @@ -144,7 +144,7 @@ namespace Remotely_Agent.Services return new GenericCommandResult() { CommandContextID = LastInputID, - MachineID = Utilities.GetConnectionInfo().MachineID, + DeviceID = Utilities.GetConnectionInfo().DeviceID, CommandType = "CMD", StandardOutput = StandardOut, ErrorOutput = ErrorOut diff --git a/Remotely_Agent/Services/ClientSocket.cs b/Remotely_Agent/Services/ClientSocket.cs index 4e3755ef..b6fe3868 100644 --- a/Remotely_Agent/Services/ClientSocket.cs +++ b/Remotely_Agent/Services/ClientSocket.cs @@ -39,9 +39,9 @@ namespace Remotely_Agent.Services await HubConnection.StartAsync(); - var machine = Machine.Create(ConnectionInfo); + var device = Device.Create(ConnectionInfo); - await HubConnection.InvokeAsync("MachineCameOnline", machine); + await HubConnection.InvokeAsync("DeviceCameOnline", device); if (string.IsNullOrWhiteSpace(ConnectionInfo.ServerVerificationToken)) { @@ -67,8 +67,8 @@ namespace Remotely_Agent.Services public static void SendHeartbeat() { - var currentInfo = Machine.Create(ConnectionInfo); - HubConnection.InvokeAsync("MachineHeartbeat", currentInfo); + var currentInfo = Device.Create(ConnectionInfo); + HubConnection.InvokeAsync("DeviceHeartbeat", currentInfo); } private static async Task ExecuteCommand(string mode, string command, string commandID, string senderConnectionID) @@ -153,7 +153,7 @@ namespace Remotely_Agent.Services catch (Exception ex) { Logger.Write(ex); - await HubConnection.InvokeAsync("DisplayConsoleMessage", $"There was an error executing the command. It has been logged on the client machine.", senderConnectionID); + await HubConnection.InvokeAsync("DisplayConsoleMessage", $"There was an error executing the command. It has been logged on the client device.", senderConnectionID); } } @@ -305,7 +305,7 @@ namespace Remotely_Agent.Services var result = Win32Interop.OpenInteractiveProcess(filePath + $" -mode unattended -requester {requesterID} -serviceid {serviceID} -hostname {Utilities.GetConnectionInfo().Host.Split("//").Last()}", "default", true, out procInfo); if (!result) { - await hubConnection.InvokeAsync("DisplayConsoleMessage", "Remote control failed to download or start on target machine.", requesterID); + await hubConnection.InvokeAsync("DisplayConsoleMessage", "Remote control failed to start on target device.", requesterID); } } @@ -320,7 +320,7 @@ namespace Remotely_Agent.Services } catch { - await hubConnection.InvokeAsync("DisplayConsoleMessage", "Remote control failed to download or start on target machine.", requesterID); + await hubConnection.InvokeAsync("DisplayConsoleMessage", "Remote control failed to start on target device.", requesterID); throw; } }); diff --git a/Remotely_Agent/Services/PSCore.cs b/Remotely_Agent/Services/PSCore.cs index 11459f84..1a598bdd 100644 --- a/Remotely_Agent/Services/PSCore.cs +++ b/Remotely_Agent/Services/PSCore.cs @@ -78,7 +78,7 @@ namespace Remotely_Agent.Services return new PSCoreCommandResult() { CommandContextID = commandID, - MachineID = Utilities.GetConnectionInfo().MachineID, + DeviceID = Utilities.GetConnectionInfo().DeviceID, DebugOutput = debugOut, ErrorOutput = errorOut, VerboseOutput = verboseOut, diff --git a/Remotely_Agent/Services/Updater.cs b/Remotely_Agent/Services/Updater.cs index 3a514707..7ee24ff6 100644 --- a/Remotely_Agent/Services/Updater.cs +++ b/Remotely_Agent/Services/Updater.cs @@ -54,7 +54,7 @@ namespace Remotely_Agent.Services var wc = new WebClient(); var latestVersion = wc.DownloadString(Utilities.GetConnectionInfo().Host + $"/API/CoreVersion/{platform}"); - var thisVersion = FileVersionInfo.GetVersionInfo("Remote_Agent.dll").FileVersion.ToString(); + var thisVersion = FileVersionInfo.GetVersionInfo("Remotely_Agent.dll").FileVersion.ToString(); if (thisVersion != latestVersion) { Logger.Write($"Service Updater: Downloading update. Current Version: {thisVersion}. Latest Version: {latestVersion}."); diff --git a/Remotely_Agent/Services/WindowsPS.cs b/Remotely_Agent/Services/WindowsPS.cs index 8dd46807..10c481b6 100644 --- a/Remotely_Agent/Services/WindowsPS.cs +++ b/Remotely_Agent/Services/WindowsPS.cs @@ -125,7 +125,7 @@ namespace Remotely_Agent.Services var partialResult = new GenericCommandResult() { CommandContextID = LastInputID, - MachineID = Utilities.GetConnectionInfo().MachineID, + DeviceID = Utilities.GetConnectionInfo().DeviceID, CommandType = "WinPS", StandardOutput = StandardOut, ErrorOutput = "WARNING: The command execution froze and was forced to return before finishing. " + @@ -141,7 +141,7 @@ namespace Remotely_Agent.Services return new GenericCommandResult() { CommandContextID = LastInputID, - MachineID = Utilities.GetConnectionInfo().MachineID, + DeviceID = Utilities.GetConnectionInfo().DeviceID, CommandType = "WinPS", StandardOutput = StandardOut, ErrorOutput = ErrorOut diff --git a/Remotely_Library/Models/CommandContext.cs b/Remotely_Library/Models/CommandContext.cs index c54de771..311b42ca 100644 --- a/Remotely_Library/Models/CommandContext.cs +++ b/Remotely_Library/Models/CommandContext.cs @@ -14,12 +14,12 @@ namespace Remotely_Library.Models public string CommandText { get; set; } public string SenderUserID { get; set; } public string SenderConnectionID { get; set; } - public string[] TargetMachineIDs { get; set; } + public string[] TargetDeviceIDs { get; set; } public List PSCoreResults { get; set; } = new List(); public List CommandResults { get; set; } = new List(); public DateTime TimeStamp { get; set; } = DateTime.Now; [IgnoreDataMember] - public Organization Organization { get; set; } + public virtual Organization Organization { get; set; } public string OrganizationID { get; set; } } } diff --git a/Remotely_Library/Models/CommandContext.cs.d.ts b/Remotely_Library/Models/CommandContext.cs.d.ts index 8e8aa30c..12ea1458 100644 --- a/Remotely_Library/Models/CommandContext.cs.d.ts +++ b/Remotely_Library/Models/CommandContext.cs.d.ts @@ -4,7 +4,7 @@ CommandText: string; SenderUserID: string; SenderConnectionID: string; - TargetMachineIDs: string[]; + TargetDeviceIDs: string[]; PSCoreResults: any[]; CommandResults: any[]; TimeStamp: Date; diff --git a/Remotely_Library/Models/ConnectionInfo.cs b/Remotely_Library/Models/ConnectionInfo.cs index 3d075391..c04f7d5b 100644 --- a/Remotely_Library/Models/ConnectionInfo.cs +++ b/Remotely_Library/Models/ConnectionInfo.cs @@ -6,7 +6,7 @@ namespace Remotely_Library.Models { public class ConnectionInfo { - public string MachineID { get; set; } = Guid.NewGuid().ToString(); + public string DeviceID { get; set; } = Guid.NewGuid().ToString(); private string host; public string Host { diff --git a/Remotely_Library/Models/Machine.cs b/Remotely_Library/Models/Device.cs similarity index 90% rename from Remotely_Library/Models/Machine.cs rename to Remotely_Library/Models/Device.cs index 3854520d..5759eb1c 100644 --- a/Remotely_Library/Models/Machine.cs +++ b/Remotely_Library/Models/Device.cs @@ -11,7 +11,7 @@ using System.Runtime.InteropServices; namespace Remotely_Library.Models { - public class Machine + public class Device { public string CurrentUser { get; set; } public virtual List Drives { get; set; } @@ -29,7 +29,7 @@ namespace Remotely_Library.Models public DateTime LastOnline { get; set; } - public string MachineName { get; set; } + public string DeviceName { get; set; } public virtual Organization Organization { get; set; } public string OrganizationID { get; set; } @@ -37,7 +37,7 @@ namespace Remotely_Library.Models public string OSDescription { get; set; } - public List PermissionGroups { get; set; } = new List(); + public virtual List PermissionGroups { get; set; } = new List(); public string Platform { get; set; } public int ProcessorCount { get; set; } @@ -47,7 +47,7 @@ namespace Remotely_Library.Models public double TotalMemory { get; set; } public double TotalStorage { get; set; } - public static Machine Create(ConnectionInfo connectionInfo) + public static Device Create(ConnectionInfo connectionInfo) { OSPlatform platform = OSUtils.GetPlatform(); DriveInfo systemDrive; @@ -67,10 +67,10 @@ namespace Remotely_Library.Models x.RootDirectory.FullName == Path.GetPathRoot(Environment.CurrentDirectory)); } - var machine = new Machine() + var device = new Device() { - ID = connectionInfo.MachineID, - MachineName = Environment.MachineName, + ID = connectionInfo.DeviceID, + DeviceName = Environment.MachineName, Platform = platform.ToString(), ProcessorCount = Environment.ProcessorCount, OSArchitecture = RuntimeInformation.OSArchitecture, @@ -92,9 +92,9 @@ namespace Remotely_Library.Models if (systemDrive != null && systemDrive.TotalSize > 0 && systemDrive.TotalFreeSpace > 0) { - machine.TotalStorage = Math.Round((double)(systemDrive.TotalSize / 1024 / 1024 / 1024), 2); + device.TotalStorage = Math.Round((double)(systemDrive.TotalSize / 1024 / 1024 / 1024), 2); var freeStorage = Math.Round((double)(systemDrive.TotalFreeSpace / 1024 / 1024 / 1024), 2); - machine.FreeStorage = freeStorage / machine.TotalStorage; + device.FreeStorage = freeStorage / device.TotalStorage; } Tuple totalMemory = new Tuple(0, 0); @@ -110,15 +110,15 @@ namespace Remotely_Library.Models if (totalMemory.Item2 > 0) { - machine.FreeMemory = totalMemory.Item1 / totalMemory.Item2; + device.FreeMemory = totalMemory.Item1 / totalMemory.Item2; } else { - machine.FreeMemory = 0; + device.FreeMemory = 0; } - machine.TotalMemory = totalMemory.Item2; + device.TotalMemory = totalMemory.Item2; - return machine; + return device; } diff --git a/Remotely_Library/Models/Drive.cs b/Remotely_Library/Models/Drive.cs index 482d92c2..e5be3586 100644 --- a/Remotely_Library/Models/Drive.cs +++ b/Remotely_Library/Models/Drive.cs @@ -17,6 +17,6 @@ namespace Remotely_Library.Models public double FreeSpace { get; internal set; } public double TotalSize { get; internal set; } public string VolumeLabel { get; internal set; } - public string MachineID { get; set; } + public string DeviceID { get; set; } } } diff --git a/Remotely_Library/Models/EventLog.cs b/Remotely_Library/Models/EventLog.cs index 728a243e..46a8dc6a 100644 --- a/Remotely_Library/Models/EventLog.cs +++ b/Remotely_Library/Models/EventLog.cs @@ -17,7 +17,7 @@ namespace Remotely_Library.Models public string OrganizationID { get; set; } public DateTime TimeStamp { get; set; } = DateTime.Now; [JsonIgnore] - public Organization Organization { get; set; } + public virtual Organization Organization { get; set; } } public enum EventTypes { diff --git a/Remotely_Library/Models/GenericCommandResult.cs b/Remotely_Library/Models/GenericCommandResult.cs index 066d0950..c5199b7d 100644 --- a/Remotely_Library/Models/GenericCommandResult.cs +++ b/Remotely_Library/Models/GenericCommandResult.cs @@ -6,7 +6,7 @@ namespace Remotely_Library.Models { public class GenericCommandResult { - public string MachineID { get; set; } + public string DeviceID { get; set; } public string CommandContextID { get; set; } public string CommandType { get; set; } public string StandardOutput { get; set; } diff --git a/Remotely_Library/Models/GenericCommandResult.cs.d.ts b/Remotely_Library/Models/GenericCommandResult.cs.d.ts index 82cff77a..d2d900d5 100644 --- a/Remotely_Library/Models/GenericCommandResult.cs.d.ts +++ b/Remotely_Library/Models/GenericCommandResult.cs.d.ts @@ -1,5 +1,5 @@ interface GenericCommandResult { - MachineID: string; + DeviceID: string; CommandContextID: string; CommandType: string; StandardOutput: string; diff --git a/Remotely_Library/Models/InviteLink.cs b/Remotely_Library/Models/InviteLink.cs index fc9e7846..db4d15df 100644 --- a/Remotely_Library/Models/InviteLink.cs +++ b/Remotely_Library/Models/InviteLink.cs @@ -12,6 +12,6 @@ namespace Remotely_Library.Models public string InvitedUser { get; set; } public bool IsAdmin { get; set; } public DateTime DateSent { get; set; } - public Organization Organization { get; set; } + public virtual Organization Organization { get; set; } } } diff --git a/Remotely_Library/Models/Machine.cs.d.ts b/Remotely_Library/Models/Machine.cs.d.ts deleted file mode 100644 index e926b14e..00000000 --- a/Remotely_Library/Models/Machine.cs.d.ts +++ /dev/null @@ -1,32 +0,0 @@ - interface Machine { - Drives: any[]; - ID: string; - Is64Bit: boolean; - IsOnline: boolean; - LastOnline: Date; - MachineName: string; - OrganizationID: string; - Organization: { - ID: string; - OrganizationName: string; - RemotelyUsers: any[]; - Machines: server.Machine[]; - CommandContexts: any[]; - EventLogs: any[]; - PermissionGroups: any[]; - InviteLinks: any[]; - SharedFiles: any[]; - }; - OSArchitecture: any; - OSDescription: string; - Platform: string; - ProcessorCount: number; - TotalMemory: number; - FreeStorage: number; - TotalStorage: number; - FreeMemory: number; - CurrentUser: string; - PermissionGroups: any[]; - Tags: string; - ServerVerificationToken: string; - } diff --git a/Remotely_Library/Models/Organization.cs b/Remotely_Library/Models/Organization.cs index dabc462d..1013be02 100644 --- a/Remotely_Library/Models/Organization.cs +++ b/Remotely_Library/Models/Organization.cs @@ -12,12 +12,12 @@ namespace Remotely_Library.Models [StringLength(25)] public string OrganizationName { get; set; } - public List RemotelyUsers { get; set; } - public List Machines { get; set; } - public List CommandContexts { get; set; } - public List EventLogs { get; set; } - public List PermissionGroups { get; set; } = new List(); - public List InviteLinks { get; set; } - public List SharedFiles { get; set; } + public virtual List RemotelyUsers { get; set; } + public virtual List Devices { get; set; } + public virtual List CommandContexts { get; set; } + public virtual List EventLogs { get; set; } + public virtual List PermissionGroups { get; set; } = new List(); + public virtual List InviteLinks { get; set; } + public virtual List SharedFiles { get; set; } } } \ No newline at end of file diff --git a/Remotely_Library/Models/PSCoreCommandResult.cs b/Remotely_Library/Models/PSCoreCommandResult.cs index d89166a2..a6dffea1 100644 --- a/Remotely_Library/Models/PSCoreCommandResult.cs +++ b/Remotely_Library/Models/PSCoreCommandResult.cs @@ -8,7 +8,7 @@ namespace Remotely_Library.Models public class PSCoreCommandResult { public string CommandContextID { get; set; } - public string MachineID { get; set; } + public string DeviceID { get; set; } public List VerboseOutput { get; set; } public List DebugOutput { get; set; } public List ErrorOutput { get; set; } diff --git a/Remotely_Library/Models/PSCoreCommandResult.cs.d.ts b/Remotely_Library/Models/PSCoreCommandResult.cs.d.ts index 577f72b5..7e4f17f5 100644 --- a/Remotely_Library/Models/PSCoreCommandResult.cs.d.ts +++ b/Remotely_Library/Models/PSCoreCommandResult.cs.d.ts @@ -1,6 +1,6 @@ interface PSCoreCommandResult { CommandContextID: string; - MachineID: string; + DeviceID: string; VerboseOutput: string[]; DebugOutput: string[]; ErrorOutput: string[]; diff --git a/Remotely_Library/Models/PermissionGroup.cs b/Remotely_Library/Models/PermissionGroup.cs index d2d8dd03..73b247cd 100644 --- a/Remotely_Library/Models/PermissionGroup.cs +++ b/Remotely_Library/Models/PermissionGroup.cs @@ -12,6 +12,8 @@ namespace Remotely_Library.Models public string ID { get; set; } = Guid.NewGuid().ToString(); [StringLength(100)] public string Name { get; set; } - public Organization Organization { get; set; } - } + public virtual Organization Organization { get; set; } + public virtual List Devices { get; set; } + public virtual List RemotelyUsers { get; set; } + } } diff --git a/Remotely_Library/Models/RemotelyUser.cs b/Remotely_Library/Models/RemotelyUser.cs index 99c19047..692ace54 100644 --- a/Remotely_Library/Models/RemotelyUser.cs +++ b/Remotely_Library/Models/RemotelyUser.cs @@ -14,12 +14,12 @@ namespace Remotely_Library.Models UserOptions = new RemotelyUserOptions(); Organization = new Organization(); } - public RemotelyUserOptions UserOptions { get; set; } + public virtual RemotelyUserOptions UserOptions { get; set; } - public Organization Organization { get; set; } + public virtual Organization Organization { get; set; } public string OrganizationID { get; set; } - public List PermissionGroups { get; set; } = new List(); + public virtual List PermissionGroups { get; set; } = new List(); public bool IsAdministrator { get; set; } = true; } diff --git a/Remotely_Library/Models/SharedFile.cs b/Remotely_Library/Models/SharedFile.cs index a2e75262..557dd65e 100644 --- a/Remotely_Library/Models/SharedFile.cs +++ b/Remotely_Library/Models/SharedFile.cs @@ -13,6 +13,6 @@ namespace Remotely_Library.Models public string ContentType { get; set; } public byte[] FileContents { get; set; } public DateTime Timestamp { get; set; } = DateTime.Now; - public Organization Organization { get; set; } + public virtual Organization Organization { get; set; } } } diff --git a/Remotely_Library/Remotely_Library.csproj b/Remotely_Library/Remotely_Library.csproj index c9e2deac..667a2962 100644 --- a/Remotely_Library/Remotely_Library.csproj +++ b/Remotely_Library/Remotely_Library.csproj @@ -6,8 +6,8 @@ - - Machine.cs + + Device.cs True True @@ -39,7 +39,7 @@ GenericCommandResult.cs.d.ts DtsGenerator - + Machine.cs.d.ts DtsGenerator diff --git a/Remotely_ScreenCast/Capture/BitBltCapture.cs b/Remotely_ScreenCast/Capture/BitBltCapture.cs index 53597fb5..395c1f57 100644 --- a/Remotely_ScreenCast/Capture/BitBltCapture.cs +++ b/Remotely_ScreenCast/Capture/BitBltCapture.cs @@ -73,20 +73,6 @@ namespace Remotely_ScreenCast.Capture desktopName = Win32Interop.GetCurrentDesktop(); } - public async void BeginCapturing(string participantID) - { - CursorIconWatcher.Current.OnChange += CursorIcon_OnChange; - while (IsCapturing) - { - Capture(); - - - await Task.Delay(PauseForMilliseconds); - PauseForMilliseconds = 1; - } - CursorIconWatcher.Current.OnChange -= CursorIcon_OnChange; - } - private void CursorIcon_OnChange(object sender, int e) { //AditClient.SocketMessageHandler.SendIconUpdate(e); diff --git a/Remotely_ScreenCast/Capture/DXCapture.cs b/Remotely_ScreenCast/Capture/DXCapture.cs index b5107408..5b29d725 100644 --- a/Remotely_ScreenCast/Capture/DXCapture.cs +++ b/Remotely_ScreenCast/Capture/DXCapture.cs @@ -19,10 +19,6 @@ namespace Remotely_ScreenCast.Capture { public class DXCapture : ICapturer { - public DXCapture() - { - Init(); - } public Bitmap PreviousFrame { get; set; } public Bitmap CurrentFrame { get; set; } public Size CurrentScreenSize @@ -64,7 +60,7 @@ namespace Remotely_ScreenCast.Capture NeedsInit = true; } } - public bool NeedsInit { get; set; } + public bool NeedsInit { get; set; } = true; private string desktopName; private Factory1 factory; @@ -102,7 +98,10 @@ namespace Remotely_ScreenCast.Capture var newHeight = output.Description.DesktopBounds.Bottom - output.Description.DesktopBounds.Top; if (newWidth != width || newHeight != height) { - ScreenChanged(this, new Size(newWidth, newHeight)); + if (ScreenChanged != null) + { + ScreenChanged(this, new Size(newWidth, newHeight)); + } } width = newWidth; height = newHeight; diff --git a/Remotely_ScreenCast/Program.cs b/Remotely_ScreenCast/Program.cs index 9ba7bfd8..925929bf 100644 --- a/Remotely_ScreenCast/Program.cs +++ b/Remotely_ScreenCast/Program.cs @@ -34,6 +34,7 @@ namespace Remotely_ScreenCast static void Main(string[] args) { + AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; var argDict = ProcessArgs(args); Mode = argDict["mode"]; RequesterID = argDict["requester"]; @@ -52,8 +53,9 @@ namespace Remotely_ScreenCast Capturer = new DXCapture(); CaptureMode = CaptureMode.DirectX; } - catch + catch (Exception ex) { + Logger.Write(ex); Capturer = new BitBltCapture(); CaptureMode = CaptureMode.BitBtl; } @@ -63,11 +65,13 @@ namespace Remotely_ScreenCast MessageHandlers.ApplyConnectionHandlers(Connection, OutgoingMessages, Capturer); OutgoingMessages.NotifyRequesterUnattendedReady(RequesterID).Wait(); + + Console.ReadKey(); } - internal static void BeginCapturing() + private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { - + Logger.Write((Exception)e.ExceptionObject); } private static async void HandleScreenChanged(object sender, Size size) diff --git a/Remotely_ScreenCast/Sockets/MessageHandlers.cs b/Remotely_ScreenCast/Sockets/MessageHandlers.cs index 3647afc8..782f8fe2 100644 --- a/Remotely_ScreenCast/Sockets/MessageHandlers.cs +++ b/Remotely_ScreenCast/Sockets/MessageHandlers.cs @@ -14,8 +14,8 @@ namespace Remotely_ScreenCapture.Sockets public class MessageHandlers { public static void ApplyConnectionHandlers(HubConnection hubConnection, - OutgoingMessages outgoingMessages, - ICapturer capturer) + OutgoingMessages outgoingMessages, + ICapturer capturer) { hubConnection.Closed += (ex) => { diff --git a/Remotely_ScreenCast/Sockets/OutgoingMessages.cs b/Remotely_ScreenCast/Sockets/OutgoingMessages.cs index 7ccf0a57..09aa1add 100644 --- a/Remotely_ScreenCast/Sockets/OutgoingMessages.cs +++ b/Remotely_ScreenCast/Sockets/OutgoingMessages.cs @@ -32,7 +32,7 @@ namespace Remotely_ScreenCapture.Sockets public async Task NotifyRequesterUnattendedReady(string requesterID) { - await Connection.SendAsync("UnattendedSessionReady", requesterID); + await Connection.SendAsync("NotifyRequesterUnattendedReady", requesterID); } } } diff --git a/Remotely_Server/API/CommandsController.cs b/Remotely_Server/API/CommandsController.cs index 49ca86b7..854f4d67 100644 --- a/Remotely_Server/API/CommandsController.cs +++ b/Remotely_Server/API/CommandsController.cs @@ -81,11 +81,11 @@ namespace Remotely_Server.API } // GET api//5 - [HttpGet("PSCoreResult/{commandID}/{machineID}")] + [HttpGet("PSCoreResult/{commandID}/{deviceID}")] [Authorize] - public PSCoreCommandResult PSCoreResult(string commandID, string machineID) + public PSCoreCommandResult PSCoreResult(string commandID, string deviceID) { - return DataService.GetCommandContext(commandID, User.Identity.Name).PSCoreResults.Find(x => x.MachineID == machineID); + return DataService.GetCommandContext(commandID, User.Identity.Name).PSCoreResults.Find(x => x.DeviceID == deviceID); } // POST api/ diff --git a/Remotely_Server/API/MachinesController.cs b/Remotely_Server/API/DevicesController.cs similarity index 71% rename from Remotely_Server/API/MachinesController.cs rename to Remotely_Server/API/DevicesController.cs index a44d71c4..7a2c19aa 100644 --- a/Remotely_Server/API/MachinesController.cs +++ b/Remotely_Server/API/DevicesController.cs @@ -15,10 +15,10 @@ namespace Remotely_Server.API [Authorize] [ApiController] [Route("api/[controller]")] - public class MachinesController : Controller + public class DevicesController : Controller { - public MachinesController(DataService dataService, UserManager userManager) + public DevicesController(DataService dataService, UserManager userManager) { this.DataService = dataService; this.UserManager = userManager; @@ -28,19 +28,19 @@ namespace Remotely_Server.API // GET: api/ [HttpGet] - public async Task> Get() + public async Task> Get() { var user = await UserManager.GetUserAsync(User); - var machines = DataService.GetAllMachines(user.Id); - return machines; + var devices = DataService.GetAllDevicesForUser(user.Id); + return devices; } // GET api//5 [HttpGet("{id}")] - public async Task Get(string id) + public async Task Get(string id) { var user = await UserManager.GetUserAsync(User); - return DataService.GetMachine(user.Id, id); + return DataService.GetDeviceForUser(user.Id, id); } } } diff --git a/Remotely_Server/Areas/Identity/Pages/Account/ForgotPassword.cshtml b/Remotely_Server/Areas/Identity/Pages/Account/ForgotPassword.cshtml index 605de843..c636d161 100644 --- a/Remotely_Server/Areas/Identity/Pages/Account/ForgotPassword.cshtml +++ b/Remotely_Server/Areas/Identity/Pages/Account/ForgotPassword.cshtml @@ -4,8 +4,8 @@ ViewData["Title"] = "Forgot your password?"; } -

@ViewData["Title"]

-

Enter your email.

+

@ViewData["Title"]

+
Enter your email.

diff --git a/Remotely_Server/Areas/Identity/Pages/Account/Login.cshtml b/Remotely_Server/Areas/Identity/Pages/Account/Login.cshtml index c91c9b4a..8165defa 100644 --- a/Remotely_Server/Areas/Identity/Pages/Account/Login.cshtml +++ b/Remotely_Server/Areas/Identity/Pages/Account/Login.cshtml @@ -6,12 +6,12 @@ ViewData["Title"] = "Log in"; } -

@ViewData["Title"]

+

@ViewData["Title"]

-

Use your Remotely account to log in.

+
Use your Remotely account to log in.

diff --git a/Remotely_Server/Areas/Identity/Pages/Account/Manage/Options.cshtml b/Remotely_Server/Areas/Identity/Pages/Account/Manage/Options.cshtml index 52ed31b3..c2450243 100644 --- a/Remotely_Server/Areas/Identity/Pages/Account/Manage/Options.cshtml +++ b/Remotely_Server/Areas/Identity/Pages/Account/Manage/Options.cshtml @@ -78,8 +78,8 @@