@@ -41,6 +41,8 @@ const (
4141 vboxShowVMInfo = "showvminfo"
4242)
4343
44+ var FileTransferRoot string
45+
4446func init () {
4547 zerolog .SetGlobalLevel (zerolog .Disabled )
4648}
@@ -257,6 +259,11 @@ func SetLocalRDP(ip string, port uint) VMOpt {
257259 return err
258260 }
259261
262+ _ , err = VBoxCmdContext (ctx , vboxModVM , vm .id , "--vrdemulticon" , "on" )
263+ if err != nil {
264+ return err
265+ }
266+
260267 return nil
261268 }
262269}
@@ -503,3 +510,97 @@ func VBoxCmdContext(ctx context.Context, cmd string, cmds ...string) ([]byte, er
503510
504511 return out , nil
505512}
513+
514+ func CreateFileTransferRoot (path string ) error {
515+ FileTransferRoot = path
516+ if _ , err := os .Stat (path ); ! os .IsNotExist (err ) {
517+ //If path exists
518+ log .Info ().Str ("transfer-root" , path ).Msg ("File transfer root already exists... Continuing." )
519+ return nil
520+ }
521+ log .Info ().Str ("transfer-root" , path ).Msg ("File transfer root does not exists... Creating folder" )
522+ err := os .MkdirAll (path , 0777 )
523+ if err != nil {
524+ log .Warn ().Msgf ("Error creating file transfer root: %s" , err )
525+ return err
526+ }
527+ err = os .Chmod (path , os .ModePerm )
528+ if err != nil {
529+ log .Warn ().Msgf ("Error setting folder perms on: %s error: %s" , path , err )
530+ return err
531+ }
532+ log .Info ().Msg ("File transfer root succesfully created!" )
533+ return nil
534+ }
535+
536+ func CreateEventFolder (tag string ) error {
537+ path := FileTransferRoot + "/" + tag
538+ if _ , err := os .Stat (path ); ! os .IsNotExist (err ) {
539+ //If path exists
540+ log .Info ().Str ("event-root" , path ).Msg ("Event root already exists... Continuing." )
541+ return nil
542+ }
543+ log .Info ().Str ("event-root" , path ).Msg ("Event root does not exists... Creating folder" )
544+ err := os .MkdirAll (path , os .ModePerm )
545+ if err != nil {
546+ log .Warn ().Msgf ("Error creating event root: %s" , err )
547+ return err
548+ }
549+ err = os .Chmod (path , os .ModePerm )
550+ if err != nil {
551+ log .Warn ().Msgf ("Error setting folder perms on: %s error: %s" , path , err )
552+ return err
553+ }
554+ log .Info ().Msg ("Event root succesfully created!" )
555+ return nil
556+ }
557+
558+ func RemoveEventFolder (eventTag string ) error {
559+ path := FileTransferRoot + "/" + eventTag
560+ if _ , err := os .Stat (path ); ! os .IsNotExist (err ) {
561+ //If path exists
562+ log .Info ().Str ("Event-folder" , path ).Msg ("Event-folder exists... Deleting." )
563+ err := os .RemoveAll (path )
564+ if err != nil {
565+ log .Warn ().Msgf ("Error deleting event folder: %s with error: %s" , path , err )
566+ return err
567+ }
568+ return nil
569+ } else {
570+ log .Info ().Str ("Event-folder" , path ).Msg ("Event-folder does not exists... Continueing" )
571+ return nil
572+ }
573+ }
574+
575+ func CreateUserFolder (teamId string , eventTag string ) error {
576+ path := FileTransferRoot + "/" + eventTag + "/" + teamId
577+ if _ , err := os .Stat (path ); ! os .IsNotExist (err ) {
578+ //If path exists
579+ log .Info ().Str ("User-folder" , path ).Msg ("User-folder already exists... Continuing." )
580+ return nil
581+ }
582+ log .Info ().Str ("User-folder" , path ).Msg ("User-folder does not exists... Creating folder" )
583+ err := os .MkdirAll (path , 0777 )
584+ if err != nil {
585+ log .Warn ().Msgf ("Error creating User-folder: %s" , err )
586+ return err
587+ }
588+ err = os .Chmod (path , os .ModePerm )
589+ if err != nil {
590+ log .Warn ().Msgf ("Error setting folder perms on: %s error: %s" , path , err )
591+ return err
592+ }
593+ log .Info ().Msg ("User-folder succesfully created!" )
594+ return nil
595+ }
596+
597+ func CreateFolderLink (vm string , eventTag string , teamId string ) error {
598+ log .Debug ().Msgf ("Trying to link shared folder to vm: %s" , vm )
599+ //todo Figure out a way to add the new folder and general setup of filetransfer folder and how to manage its content.
600+ _ , err := VBoxCmdContext (context .Background (), "sharedfolder" , "add" , vm , "--name" , "filetransfer" , "-hostpath" , FileTransferRoot + "/" + eventTag + "/" + teamId , "-transient" , "-automount" )
601+ if err != nil {
602+ log .Warn ().Msgf ("Error creating shared folder link: %s" , err )
603+ return err
604+ }
605+ return nil
606+ }
0 commit comments