]> ruderich.org/simon Gitweb - safcm/safcm.git/blob - remote/sync/sync.go
Use SPDX license identifiers
[safcm/safcm.git] / remote / sync / sync.go
1 // MsgSyncReq: sync data on the remote host
2
3 // SPDX-License-Identifier: GPL-3.0-or-later
4 // Copyright (C) 2021-2024  Simon Ruderich
5
6 package sync
7
8 import (
9         "fmt"
10         "os/user"
11
12         "ruderich.org/simon/safcm"
13         "ruderich.org/simon/safcm/remote/log"
14         "ruderich.org/simon/safcm/remote/run"
15 )
16
17 type Sync struct {
18         req  safcm.MsgSyncReq
19         resp safcm.MsgSyncResp
20
21         defaultUser  string
22         defaultGroup string
23
24         triggers       []string
25         triggersActive map[string]bool
26
27         cmd *run.Cmd
28         log *log.Logger
29 }
30
31 func Handle(req safcm.MsgSyncReq,
32         runner run.Runner, fun log.LogFunc) safcm.MsgSyncResp {
33
34         s := &Sync{
35                 req: req,
36                 log: log.NewLogger(fun),
37         }
38         s.cmd = run.NewCmd(runner, s.log)
39
40         err := s.setDefaults()
41         if err != nil {
42                 s.resp.Error = fmt.Sprintf("%v", err)
43                 return s.resp
44         }
45
46         err = s.syncFiles()
47         if err != nil {
48                 s.resp.Error = fmt.Sprintf("files: %v", err)
49                 return s.resp
50         }
51         err = s.syncPackages()
52         if err != nil {
53                 s.resp.Error = fmt.Sprintf("packages: %v", err)
54                 return s.resp
55         }
56         err = s.syncServices()
57         if err != nil {
58                 s.resp.Error = fmt.Sprintf("services: %v", err)
59                 return s.resp
60         }
61         err = s.syncCommands()
62         if err != nil {
63                 s.resp.Error = fmt.Sprintf("commands: %v", err)
64                 return s.resp
65         }
66         return s.resp
67 }
68
69 func (s *Sync) setDefaults() error {
70         u, err := user.Current()
71         if err != nil {
72                 return err
73         }
74         s.defaultUser = u.Username
75         g, err := user.LookupGroupId(u.Gid)
76         if err != nil {
77                 return err
78         }
79         s.defaultGroup = g.Name
80
81         s.triggersActive = make(map[string]bool)
82
83         return nil
84 }