// MsgSyncReq: sync data on the remote host // SPDX-License-Identifier: GPL-3.0-or-later // Copyright (C) 2021-2024 Simon Ruderich package sync import ( "fmt" "os/user" "ruderich.org/simon/safcm" "ruderich.org/simon/safcm/remote/log" "ruderich.org/simon/safcm/remote/run" ) type Sync struct { req safcm.MsgSyncReq resp safcm.MsgSyncResp defaultUser string defaultGroup string triggers []string triggersActive map[string]bool cmd *run.Cmd log *log.Logger } func Handle(req safcm.MsgSyncReq, runner run.Runner, fun log.LogFunc) safcm.MsgSyncResp { s := &Sync{ req: req, log: log.NewLogger(fun), } s.cmd = run.NewCmd(runner, s.log) err := s.setDefaults() if err != nil { s.resp.Error = fmt.Sprintf("%v", err) return s.resp } err = s.syncFiles() if err != nil { s.resp.Error = fmt.Sprintf("files: %v", err) return s.resp } err = s.syncPackages() if err != nil { s.resp.Error = fmt.Sprintf("packages: %v", err) return s.resp } err = s.syncServices() if err != nil { s.resp.Error = fmt.Sprintf("services: %v", err) return s.resp } err = s.syncCommands() if err != nil { s.resp.Error = fmt.Sprintf("commands: %v", err) return s.resp } return s.resp } func (s *Sync) setDefaults() error { u, err := user.Current() if err != nil { return err } s.defaultUser = u.Username g, err := user.LookupGroupId(u.Gid) if err != nil { return err } s.defaultGroup = g.Name s.triggersActive = make(map[string]bool) return nil }