From d54a1abe2e42f551feb2592cdc15a5834a51a9b3 Mon Sep 17 00:00:00 2001 From: Steven Tracey Date: Fri, 19 May 2023 14:43:13 -0400 Subject: [PATCH] Update --- .gitignore | 3 +- .idea/inspectionProfiles/Project_Default.xml | 20 +++++ .idea/vcs.xml | 7 ++ Main.go | 61 ------------- assets/information.png | Bin 0 -> 4486 bytes assets/warning.png | Bin 0 -> 4260 bytes c_libs/.idea/.gitignore | 8 ++ c_libs/.idea/c_libs.iml | 2 + c_libs/.idea/misc.xml | 4 + c_libs/.idea/modules.xml | 8 ++ c_libs/.idea/vcs.xml | 6 ++ c_libs/CMakeLists.txt | 9 ++ c_libs/cnotification.cpp | 0 c_libs/notification.cpp | 5 ++ c_libs/notification.h | 12 +++ c_libs/notification.hpp | 9 ++ ezconf | 2 +- filetransfer.go | 24 ++++++ go.mod | 9 +- go.sum | 19 ++++ main.go | 86 +++++++++++++++++++ notifications.go | 7 ++ serverconnection.go | 35 +++++--- sfsproto.go | 23 +++++ 24 files changed, 284 insertions(+), 75 deletions(-) create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/vcs.xml delete mode 100644 Main.go create mode 100644 assets/information.png create mode 100644 assets/warning.png create mode 100644 c_libs/.idea/.gitignore create mode 100644 c_libs/.idea/c_libs.iml create mode 100644 c_libs/.idea/misc.xml create mode 100644 c_libs/.idea/modules.xml create mode 100644 c_libs/.idea/vcs.xml create mode 100644 c_libs/CMakeLists.txt create mode 100644 c_libs/cnotification.cpp create mode 100644 c_libs/notification.cpp create mode 100644 c_libs/notification.h create mode 100644 c_libs/notification.hpp create mode 100644 main.go create mode 100644 notifications.go create mode 100644 sfsproto.go diff --git a/.gitignore b/.gitignore index e2c1618..a7961a7 100644 --- a/.gitignore +++ b/.gitignore @@ -126,4 +126,5 @@ fabric.properties # Android studio 3.1+ serialized cache file .idea/caches/build_file_checksums.ser -config.ini \ No newline at end of file +config.ini +public.cer diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..e62755d --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,20 @@ + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..0f1af6e --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Main.go b/Main.go deleted file mode 100644 index 1f6a634..0000000 --- a/Main.go +++ /dev/null @@ -1,61 +0,0 @@ -package main - -import ( - "crypto/tls" - "fmt" - "git.nevets.tech/Steven/ezconf" - "github.com/getlantern/systray" - "os" - "time" -) - -var Config *ezconf.Configuration -var Connection *tls.Conn - -func main() { - Config = ezconf.NewConfiguration("./config.ini") - Connection = New(Config.GetAsString("General.server"), Config.GetAsInt("General.port")) - - systray.Run(onReady, onExit) -} - -func onReady() { - systray.SetIcon(getIcon("assets/icon.ico")) - systray.SetTooltip("SimpleFileSync") - itemOne := systray.AddMenuItem("Item-1", "Highlighted Item 1") - systray.AddSeparator() - sync := systray.AddMenuItem("Sync", "Trigger Sync Now") - systray.AddSeparator() - quit := systray.AddMenuItem("Quit", "Quit") - - go func() { - for { - select { - case <-itemOne.ClickedCh: - if itemOne.Checked() { - itemOne.Uncheck() - } else { - itemOne.Check() - } - case <-sync.ClickedCh: - sync.SetTitle("Syncing...") - time.Sleep(1000) - sync.SetTitle("Last sync at " + time.Now().Format(time.TimeOnly)) - case <-quit.ClickedCh: - systray.Quit() - } - } - }() -} - -func onExit() { - -} - -func getIcon(location string) []byte { - bytes, err := os.ReadFile(location) - if err != nil { - fmt.Print(err) - } - return bytes -} diff --git a/assets/information.png b/assets/information.png new file mode 100644 index 0000000000000000000000000000000000000000..d47243dd9ab1adf0ac5520f80c698cb0ee6d2a46 GIT binary patch literal 4486 zcmV;15qa*3P)1TvDqdkIP2 zeeX`^oc-$``%HIuLtYFn?C-7f?!D*iv(Ns0f8+k`eUyms|C#hJdjP*|a%Z}rlu}rL z)GIff(?S9mnL*W6=Xs@+0~7%taCr4=i2)*@1vEq?%3o{)Kq=(|l}~-)ZI@pAp382k zlq=_Xo>w{fXPz#lIeC8-1i{o)ZEDATcmDLoFMaw4TY)JNX(iWF0F+WLFnIlqZ+gQ= zK7QTpEl&7T;W&{rbKSKw)|<`KZ86;-%y!061uE`hd}g zIBm=(qmV?-i6%%#TfvBdEVQdU0J#AhB*&1X%@We5X9vmOz&3uFqH<9Zt9KxU$uDG3s5 zqsio+(*!dI01D7zaweci)jRpEM5RV+O+sNJAq=d9!5J%VSrL$fDr)BW&Igf10QE{`UrbodXlaC|C>p*n_}6;^)+6>0->Em>tbyX zE3~|ISx{p0Fa|o(`yLuVo1;q<4W(l+l8B&DD1w$DXc=1dh+5Tf;pn@$V*PJ1GO!F| z3{eyjh9Smuqo2@BKBvDt!t2)j1{bZphJ7zR%_F<-;K1ZhDEB+~B?r&9T9K%HHa-m! zC9c~79`n{ood772$RcLFN)CkB!6as9gjNs{)D5+%kYUzy{ndX(r94CwMYLKi;v@?I ztrs?>NVH}3;`4aTlE2{a(dW5y>*uL94pOeTct+!S+VV^yJZUqFR154hpv|q$=mTOr zAnylagA)VIx}jAIsUA1H{oGG;>AJTeA_PHT?^J5e3~?bD;l6FR@U!vn z&_Co5m0b!Y1v)l}g!x$V2>^5X01ar1_>4nF47BQoW-X%evd<^4y_KQL7*P}~FhC4A8NTfX)1 zr!ivz#%TPq1{F(QB;`S*D+;ItjXVI#NYv)3la3H*)+6fEArgQ=5S$k7byJiPsTtURZmmFM)c>bwEQR`+q= zmjCLK^xPo4mg~;Hf$GsFK_en)MQvkGj~-#L%V16H14OWKRUnFlX5BD78FKmZ53_u9 z&AbLS+fnq(tXQ_1Ldl^}b|{t|`UYKAFJ0Hwc0OQSdEvWQ?rmUtGNf5IL~*v6@E~G& z>!dCKMA|h#L}=9`nzay_8swd?|JW%ruarV-&3muuJ&00vS9(D0CS1POk6`2TQ1f}BGFGAQ7YSoYrT>e=+x6sweLTUZlD>-ZB z_u0PhC-j#`SiAhSIC{o9EzmL3>yYSBWigkmdN13KeiO%caeO<+keH9iq&{HAOi<;+ zpdgq4!j>?3q{Ue)FYcMOoeCBFGMB7-OZt1ZjB!46)%thy;CFAK)bHR1pgntDvM@Mn zBBb((kO%}Vp)nnC*_rR5Tn%#xASEa|&|#`G?nf`jKMluDw2fmr}hfHJws zkcsS+wlN)W$?M*F()oNRHG>9^@4TNKdmiJ!__MTvIxEJ`;y2%TJ*$?Sy#RK5Kl`FH zui=3`+bIkvoJgUaI1ex>06k5>0w5+e0TWpe>QfP(Q#d8{-1M`%x$XO(ry11kM5dq- zfrC4q<O+Tk-F`Bxy~f$iVq!1NZpq9$w!6Z>o2z3Jch)Cc~4!TslHcwi|(!-hg5f|eu` zY+nw00P^jxdhI*Y@2)QJ<@+`>Hdv-uRs;>7iDL(UVSZv{ za2Y`m5d{Vlfw=LMxW{~WMiUSOV;~F-VJNhMrmf)gU~WDXhGF{s*yIuF)d*uiyWsko zfx#sw)#q$&MXc`%LxV9otv}9Y0txB734l#DvvPfP)HGq@*b68fm-CabE+i(~4LN)D#Ta9{%4Q2WCQcl}aTVGTJ2On@0%;yFTS+WR3kVh#!7n--I~^Z%(_OFKyXzA6~&Bsb!~Oy+^&ThN$DXx2l{UA2KIic%Bkb7o{Nz47C#hXDmJc7v^6! zJ#nX<2NV^`g=Cc|mj}$K0h-hak{;SsIG$!;#OJ5Ge#qh27tF-qY?5oVY8;(9falpN zd(e!KrpMUO$^|o=f7a0xFLM9ZJ17r(IG#pn)y7NC3F=M&awV~3(AMsh0>@W)Wkq?w zVdH~0FGw{-gvqI+IIf@^8=k_@;OY`#7|vURW&`*??)e%ZM<|$hI*F7 zl$gu}5-_wACo5w9=O5v@gHJ99 z;LT5dkDUh}VQ8t3UvhA~Y&k4#*P|XVYe_6Qlva4YqCBV>Sy|+c`@h5^KmWl=*}gFb zM|-?$!zXA=1+*Fwj;AOMxZLx|zjM>AALSpvb32KG8ZT!<6H&9#@Q5i1a`U>qTjFA*f zNLGmEULDrPL>)U81Tdg9PC?-q&ES|v)HM9dcR$1Lzx_roJ@=YZ7y)0s`$jI?^#C7w>t`qx=H5{kMG;d|Q)sQ@B{xZJeZCZgEjB)MGyl8w+YF3( z3@M@*%w!B%}# zTv}1ef}oUxb`*Z8#LI_|^R@5&C13o+_ZP(2T(ooFPx;Z-Z}ao#AEq?uvSe+E@_?-@ zS*ItqmI1MgAahTKl+_f|<_83WO4i_WiIn4G+bM^k$Y=eccb$|f&qd?M4zhFa zV?6Z4UA!={n_|Ubc!f`8*rV9z;Q9)u5SP9?)ZRM08~~E;cAI^9TyhgZ`#V|Vm-OBw zK}seY#t8Kj5pTZcw`T-k`<_QRd}I%Ul~D%!Mi{J&Fwi%GR+?)4I8(J_RBOjMRvqWL zgHQ78!6!IY9Y;HgQoqCEH6@A_heAo?cs3$sCGWhgx33E(=a@k*ohHzBV@3whu_o9* ziIEDLLZcRO`P%oecxV;1TCMB;2e)nH_WS<w>b4_p4|VaHAcignm}&KlMN!p`W`2{TiT4NDtr$@RVITyx2(P}F-+kX7GhMB< zIk$Rqnmadrh0Rah#n4ip@{kL0nJo&0D6r3QJi80baqR{u$5FTiI|tF)f|4+Ahm%#V zGcXhNH?ht4vj4W}aL=NsO0uRl?;oqY01_CY5KI8gnxS8v!JmHkKM9+rErEIT>3iAu z(9KK-#~5BwU|`I}E9$sEhqkB`^QGbltsI5p*oc#Cq01!Mq0M&?{+RbqOdb_kcVt?B`lJeOLfVi!lKqLjl{Ai+< zp*dwZaacHK?L|Dc{Q-WoWh1-yKgIFs38w3lcm=ylWAqH4ay&2he8KT0m0%)=&J87r zvzmV($uh}K=2HN2U}#iV551#62jZgQ-C_cwKy=7MPk+Zoz*u6sPqAcK0k5cWJzGX| zeQUdRKVPTrE}XiUOuo&)y#3w#@iX`UX>))U1e<1hMHpJ#GK zl8&n<0I41|tI~AJlJ0`&0zoU3&XVd*GKrm>7U~UX8YUN%ylA=0T5x|plFTn zZ5~~5L1B4hvZbs}5YqEA@_G6s-}`ah&+BB~(JqJgHjiT89;;z_P5}skX`s6Kwuy&- z=WkZM+b#HRejyc`iwc>Qg~$e0Sscrf-Zt{_=s~e&ENz zZeUzQB>&o+4=e}H2F?S{1qQIMm%N&(1xx}vfgQju;E=@c4tBmcSq4V2Z&r;0!`K&$ zUd>boUIvZ;hk+v^QcEuOdUe(X27xl*@vHIbY=Cuq=?jwybpeoGuztbiR|9}hW?=OH Y0K-t<-~Hb6^uyiX#k1IeNFV9wF6Z8R&htOdcAj&t5)uAClm4(f@L`kPtwJfK2mn$a zTzB3V62M3oQCF?^l~NXv2VB77qc0@}@PP(U6A?dMnE^m4c9B% zEkDxUv?G;C#MD!tTLNS1eb$&I8ST`d>Kv*#hOq~m|MG)}ZvFbbk30>`iiigx0HMD3 z0;30i^$(AZ_Ea~UnTgZ~Rmaoh;=?i%(sHClNRkUZu$5yAg+1q8bLWk~F<@RqB+_pS z$N_5x`-`t=YbLdud|Q^zy)0V28bcU zytFhJF)r!rZXG=hJK7pbTjSWOB_IjCS2*$#p&gBW<~+q)3$+0dOF)`=LIzbb=8}OX?lio z&7E&yJ$f!D0!)vMGi)65*1;M9A+LRAlwb2O#A zjbm$au7&GpEFFyqEh3(odU5l8lm^BaId?1Slef{VSDBgG$KhQM zqGxu~TeQhJnq1BzX9p@0cc_Ex4m8%+PWvk{G2Fg`Q!yeELtQm2YL@@q4Jv?xDYAq zhXcQUk|QtN$4GwwLMd;dRU`$5VALZ3qCq{q5!8SdlXinCTM&-E5usf3S*ZF<&f0wZ z)_YV9TL`q7^=*6$%Al=3=O+E@irc0d9N(4=%b zI!UzT3~sufg_)fc zatcSQV8)2FdI6w=3Pchh5*WWm!(+bEWPIzjZ6cR0QKZ(bWJfqUPh4$sZ}}zNj_>=7 z|JHTPSDG{$9-f~z>ZezM&<2=zWP&-nVQ!&`?Uv5U2mwJv)+zy}Qz9m+UY^uhPM*1i zCT7sW7!|UcnG3W55Z@5v#Wp~~Oir!gQRo>wEBc>MoS`9#HO>~mg`Od54G+&Zfm73g zJ(Fxgq)SFf{FDR;UenO@eDYz`w;Vd{h<306XA9s$?+8uL$7==?wtMaOsje zxLD_tNRw3DE^+;t(ALt#oTywQg%$ zl(uT!){Y)yC1w89QCu5rO)5taM}ip%=r9-XlF?BHtqsN8(g0Y@6-H&t6*n_e7RuEo z|gyi zQ~O^5;KKFW@kPgZg-)~_wK(wl6Ab5cpa!Y5m?RPqQ+ra>_;F)eDU=fOj^g^aO?0VvRD-y|0rBUH0)j+AYAyhRV?o|gtQl~5ed0-GroKY|s`KNQR${S548Oep8@xC1O90kxxrWbt z>F-f$`T4|j`{mgw_B{U(7meBEY=y1Ky4z$f&^0HRN{I!=Lo30xp|_wI>e0OV_;M>)Cg zInEn#>B(#Ic4Pok^NvIXy1PLmtw~XXrG>l$Lp_R3V|jKx_Rs9w_1KDZ-x$M|D{l=~ zha>kSY`yBX6$3iC?^Ry>@x81YaTzFT@=o9aTlp|cSQ!fSB(2whFU{E+-%*SYS~Qw2 z&pz~Ra>YT$HhrS)6N^#L&^Vv?;|F=~`F}_JI+y+KS1AmQ$BQaUB@tn2|EoOpAAiYc zkI&eEOWq+^E|VmrU+P={Kx6!t9SgzAic(N;6$UtW#G&B{JAe2!uK41&ShwxkWp%t> zuhTcWkxOs67l1~i!TkJu8*_`%(RW_p>HGhh(LTe5QJ21gqUb7gZ24OOh!;k>0zi@u zOM?(?gV5w1!OscjueN~(&phxqyf<+@m)~?JPQGW!Ak5CrVp$fzX#=26_z~?a*I@q8o(2A_)M3NdeFfYWr-k4233BD0dmVLH=>b9-`Ouq9Rvs3#h^sXY`J4~T>6}g^a zl-AVC({ZWHPI2Pk>l{D0i^}X2wpI-ESZrOJqrYTP%2~L!qTniAE8MP=VKMqAyS!T1%x;X#-*J3;)S$Kl?{4W$?m*=|+}@ zVouYa*PJ`%&|lOPTusr{xQ@cLz_C;F{PdofjO9;@ee`VX0J#a%|J(8M+b~K z3QH**8w!rXv4RazwxxpD-U_$PiAjN&N~>k`KMfG+^RBDI5a$EJ20~F66iR~ha-(Ue z`_S;9Trm5S1D!MWB7 z$5L2Iuq+jfcD&Oo#dOSAG+2SBiuW>QMnB;(ebKf=5Z<1VeF;bv~fFC(KoZeJ7!J^KbL+>%U;)*&R$BoS-^? zoJM7qf~)AwYc`C#43!kc9ORu~E}`&a57HKEweqtR$}pBqW^c)L%T-dl;lk6l^!9HINjunWnYX#>)QZfoq-UkX9lun}F$~*+ydly?B zP9z|?6@A0C6gnK)pek5$QYwrJbzrz+Njp0^)Q%)+amwm=N9I%aI|2}YVY+PU19{11 zKafa*t;1APhb~12>8RXifw~%pPGGd$2d2xWp1LWJ0N?`^pfPdSKY7(A`y4UNmJg-W zA);=Zm)<9d?@Aqk$=*}iVdAiVlHl*L3IWeC03J{V=I{Q={PR2R82EhAb?rT_S4jAU=wiF<~7!5 zzI9XYrQ6o#1_q1TMd>hF(I|praBTr9$mWLig!L*4nN{j}!u#=aX{icqkHo=DXp6#Y z$xLv + \ No newline at end of file diff --git a/c_libs/.idea/misc.xml b/c_libs/.idea/misc.xml new file mode 100644 index 0000000..79b3c94 --- /dev/null +++ b/c_libs/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/c_libs/.idea/modules.xml b/c_libs/.idea/modules.xml new file mode 100644 index 0000000..2ae9efd --- /dev/null +++ b/c_libs/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/c_libs/.idea/vcs.xml b/c_libs/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/c_libs/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/c_libs/CMakeLists.txt b/c_libs/CMakeLists.txt new file mode 100644 index 0000000..f522dfc --- /dev/null +++ b/c_libs/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.25) +project(c_libs C) + +set(CMAKE_C_STANDARD 11) + +include_directories(.) + +add_executable(c_libs + notification.h notification.hpp notification.cpp cnotification.cpp) diff --git a/c_libs/cnotification.cpp b/c_libs/cnotification.cpp new file mode 100644 index 0000000..e69de29 diff --git a/c_libs/notification.cpp b/c_libs/notification.cpp new file mode 100644 index 0000000..e8fbd78 --- /dev/null +++ b/c_libs/notification.cpp @@ -0,0 +1,5 @@ +#include "notification.hpp" + +void Notification::buildNotification(void) { + +} diff --git a/c_libs/notification.h b/c_libs/notification.h new file mode 100644 index 0000000..33562f2 --- /dev/null +++ b/c_libs/notification.h @@ -0,0 +1,12 @@ +#ifndef NOTIFICATION_H +#define NOTIFICATION_H +#include + +typedef struct Notification { + FILE *icon; + char title[16]; + char message[]; +} Notification; + +int buildNotification(char title[], char message[], FILE *icon); +#endif \ No newline at end of file diff --git a/c_libs/notification.hpp b/c_libs/notification.hpp new file mode 100644 index 0000000..771757d --- /dev/null +++ b/c_libs/notification.hpp @@ -0,0 +1,9 @@ +class Notification { +public: + FILE icon; + char title[16]; + char message[]; + + Notification(FILE _icon, char _title[16], char _message[]):icon(_icon)title(_title){} + void buildNotification(); +}; \ No newline at end of file diff --git a/ezconf b/ezconf index 397365d..e5bdaa6 160000 --- a/ezconf +++ b/ezconf @@ -1 +1 @@ -Subproject commit 397365ddd2fa6359058b7f6dd62eb516387e3994 +Subproject commit e5bdaa67f6b2ad812b8aa5674316af02ae87e652 diff --git a/filetransfer.go b/filetransfer.go index 06ab7d0..ca83694 100644 --- a/filetransfer.go +++ b/filetransfer.go @@ -1 +1,25 @@ package main + +import ( + "fmt" + "net" + "os" +) + +func testClient() { + conn, err := net.Dial("tcp", "localhost:2455") + if err != nil { + fmt.Printf("Error connecting to server: %v", err) + os.Exit(1) + } + _, err = conn.Write(NewSFS(254).ToBytes()) + if err != nil { + fmt.Printf("Error sending data: %v", err) + os.Exit(1) + } + err = conn.Close() + if err != nil { + fmt.Printf("Error closing connection: %v", err) + os.Exit(1) + } +} diff --git a/go.mod b/go.mod index 8e5087e..fea80b1 100644 --- a/go.mod +++ b/go.mod @@ -7,9 +7,12 @@ replace git.nevets.tech/Steven/ezconf v0.0.0-20230501190348-397365ddd2fa => ./ez require ( git.nevets.tech/Steven/ezconf v0.0.0-20230501190348-397365ddd2fa github.com/getlantern/systray v1.2.1 + github.com/sqweek/dialog v0.0.0-20220809060634-e981b270ebbf ) require ( + github.com/TheTitanrain/w32 v0.0.0-20200114052255-2654d97dbd3d // indirect + github.com/gen2brain/beeep v0.0.0-20230307103607-6e717729cb4f // indirect github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 // indirect github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7 // indirect github.com/getlantern/golog v0.0.0-20190830074920-4ef2e798c2d7 // indirect @@ -17,8 +20,12 @@ require ( github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 // indirect github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f // indirect github.com/go-stack/stack v1.8.0 // indirect + github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d // indirect github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect - golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9 // indirect + github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af // indirect + golang.org/x/sys v0.8.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index ee63953..473039e 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,11 @@ +github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf h1:FPsprx82rdrX2jiKyS17BH6IrTmUBYqZa/CXT4uvb+I= +github.com/TheTitanrain/w32 v0.0.0-20180517000239-4f5cfb03fabf/go.mod h1:peYoMncQljjNS6tZwI9WVyQB3qZS6u79/N3mBOcnd3I= +github.com/TheTitanrain/w32 v0.0.0-20200114052255-2654d97dbd3d h1:2xp1BQbqcDDaikHnASWpVZRjibOxu7y9LhAv04whugI= +github.com/TheTitanrain/w32 v0.0.0-20200114052255-2654d97dbd3d/go.mod h1:peYoMncQljjNS6tZwI9WVyQB3qZS6u79/N3mBOcnd3I= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gen2brain/beeep v0.0.0-20230307103607-6e717729cb4f h1:oRm7Hy2dQWfHgOuOWRaYZf+kZcWJst7fxAlq+yjdLss= +github.com/gen2brain/beeep v0.0.0-20230307103607-6e717729cb4f/go.mod h1:0W7dI87PvXJ1Sjs0QPvWXKcQmNERY77e8l7GFhZB/s4= github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 h1:NRUJuo3v3WGC/g5YiyF790gut6oQr5f3FBI88Wv0dx4= github.com/getlantern/context v0.0.0-20190109183933-c447772a6520/go.mod h1:L+mq6/vvYHKjCX2oez0CgEAJmbq1fbb/oNJIWQkBybY= github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7 h1:6uJ+sZ/e03gkbqZ0kUG6mfKoqDb4XMAzMIwlajq19So= @@ -16,15 +22,28 @@ github.com/getlantern/systray v1.2.1 h1:udsC2k98v2hN359VTFShuQW6GGprRprw6kD6539J github.com/getlantern/systray v1.2.1/go.mod h1:AecygODWIsBquJCJFop8MEQcJbWFfw/1yWbVabNgpCM= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4 h1:qZNfIGkIANxGv/OqtnntR4DfOY2+BgwR60cAcu/i3SE= +github.com/go-toast/toast v0.0.0-20190211030409-01e6764cf0a4/go.mod h1:kW3HQ4UdaAyrUCSSDR4xUzBKW6O2iA4uHhk7AtyYp10= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d h1:VhgPp6v9qf9Agr/56bj7Y/xa04UccTW04VP0Qed4vnQ= +github.com/nu7hatch/gouuid v0.0.0-20131221200532-179d4d0c4d8d/go.mod h1:YUTz3bUH2ZwIWBy3CJBeOBEugqcmXREj14T+iG/4k4U= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sqweek/dialog v0.0.0-20220809060634-e981b270ebbf h1:pCxn3BCfu8n8VUhYl4zS1BftoZoYY0J4qVF3dqAQ4aU= +github.com/sqweek/dialog v0.0.0-20220809060634-e981b270ebbf/go.mod h1:/qNPSY91qTz/8TgHEMioAUc6q7+3SOybeKczHMXFcXw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af h1:6yITBqGTE2lEeTPG04SN9W+iWHCRyHqlVYILiSXziwk= +github.com/tadvi/systray v0.0.0-20190226123456-11a2b8fa57af/go.mod h1:4F09kP5F+am0jAwlQLddpoMDM+iewkxxt6nxUQ5nq5o= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9 h1:YTzHMGlqJu67/uEo1lBv0n3wBXhXNeUbB1XfN2vmTm0= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= diff --git a/main.go b/main.go new file mode 100644 index 0000000..8c4d2eb --- /dev/null +++ b/main.go @@ -0,0 +1,86 @@ +package main + +import ( + "crypto/tls" + "fmt" + "git.nevets.tech/Steven/ezconf" + "github.com/getlantern/systray" + "github.com/sqweek/dialog" + "os" + "time" +) + +var Config *ezconf.Configuration +var Connection *tls.Conn + +func main() { + Config = ezconf.NewConfiguration("./config.ini") + //var err error + //Connection, err = NewConnection(Config.GetAsString("General.server"), Config.GetAsInt("General.port")) + //if err != nil { + // fmt.Printf("Error establishing connection: %v", err) + // os.Exit(1) + //} + + //_, err = Connection.Write(NewSFS(254).ToBytes()) + //if err != nil { + // fmt.Printf("Error sending data: %v", err) + // os.Exit(1) + //} + // + //rawData := make([]byte, 1) + //_, err = Connection.Read(rawData) + //if err != nil { + // fmt.Printf("Error reading data: %v", err) + // os.Exit(1) + //} + //sfsData := NewSFSFromBytes(rawData) + //fmt.Printf("SFS Data: %v", sfsData) + // + //err = Connection.Close() + //if err != nil { + // fmt.Printf("Error closing connection: %v", err) + // os.Exit(1) + //} + + sendNotification("Notification", "This is the message displayed!") + + systray.Run(onReady, onExit) +} + +func onReady() { + systray.SetIcon(getIcon("assets/icon.ico")) + systray.SetTooltip("SimpleFileSync") + itemOne := systray.AddMenuItem("Dialog", "Opens Dialog Box") + systray.AddSeparator() + sync := systray.AddMenuItem("Sync", "Trigger Sync Now") + systray.AddSeparator() + quit := systray.AddMenuItem("Quit", "Quit") + + go func() { + for { + select { + case <-itemOne.ClickedCh: + dialog.Message("This is a popup from Simple File Sync!").Title("Simple File Sync").Info() + case <-sync.ClickedCh: + sync.SetTitle("Syncing...") + time.Sleep(1000) + sync.SetTitle("Last sync at " + time.Now().Format(time.TimeOnly)) + case <-quit.ClickedCh: + systray.Quit() + } + } + }() +} + +func onExit() { + Config.Save() +} + +func getIcon(location string) []byte { + bytes, err := os.ReadFile(location) + if err != nil { + fmt.Print(err) + } + return bytes +} diff --git a/notifications.go b/notifications.go new file mode 100644 index 0000000..38785e0 --- /dev/null +++ b/notifications.go @@ -0,0 +1,7 @@ +package main + +import "github.com/TheTitanrain/w32" + +func sendNotification(title string, message string) { + w32.DialogBox() +} diff --git a/serverconnection.go b/serverconnection.go index 6e0a573..40a491b 100644 --- a/serverconnection.go +++ b/serverconnection.go @@ -20,32 +20,45 @@ type Credentials struct { pass string } -func New(host string, port int) *tls.Conn { - cert, err := os.ReadFile("./public.pem") +func NewConnection(host string, port int) (*tls.Conn, error) { + _, err := os.Stat("./public.cer") if err != nil { - fmt.Printf("Error reading cert from ./public.pem: %v", err) - os.Exit(1) + getPublicKey() + } + + cert, err := os.ReadFile("./public.cer") + if err != nil { + return nil, fmt.Errorf("error reading cert from ./public.cer: %v", err) } certPool := x509.NewCertPool() if ok := certPool.AppendCertsFromPEM(cert); !ok { - fmt.Printf("Error loading certificate %v into cert pool", cert) - os.Exit(1) + return nil, fmt.Errorf("error loading certificate %v into cert pool", cert) } - config := &tls.Config{RootCAs: certPool} - conn, err := tls.Dial("tcp", host+":"+string(rune(port)), config) - return conn + config := &tls.Config{ + RootCAs: certPool, + CipherSuites: []uint16{ + tls.TLS_AES_128_GCM_SHA256, + tls.TLS_AES_256_GCM_SHA384, + tls.TLS_CHACHA20_POLY1305_SHA256, + }, + } + conn, err := tls.Dial("tcp", fmt.Sprintf("%s:%d", host, port), config) + if err != nil { + return nil, err + } + return conn, nil } func getPublicKey() { - out, err := os.Create("./public.pem") + out, err := os.Create("./public.cer") if err != nil { fmt.Printf("Error closing file writer: %v", err) os.Exit(1) } defer out.Close() - resp, err := http.Get(Config.GetAsString("General.http-server") + "/public.pem") + resp, err := http.Get(Config.GetAsString("General.http-server") + "/public.cer") if err != nil { fmt.Printf("Error fetching public key: %v", err) os.Exit(1) diff --git a/sfsproto.go b/sfsproto.go new file mode 100644 index 0000000..096f8c0 --- /dev/null +++ b/sfsproto.go @@ -0,0 +1,23 @@ +package main + +type SFSData struct { + length uint8 +} + +func NewSFSFromBytes(data []byte) *SFSData { + return &SFSData{ + length: data[0], + } +} + +func NewSFS(length uint8) *SFSData { + return &SFSData{ + length: length, + } +} + +func (sfs *SFSData) ToBytes() []byte { + return []byte{ + sfs.length, + } +}