X-Git-Url: https://git.r.bdr.sh/rbdr/mobius/blobdiff_plain/16a4ad707a05df25c9d12b8cc89fb3a9e3be0dba..d1cd666473e5d9097b34bad3388c8c0595612089:/hotline/server.go?ds=sidebyside diff --git a/hotline/server.go b/hotline/server.go index 0828385..5ff8842 100644 --- a/hotline/server.go +++ b/hotline/server.go @@ -359,6 +359,38 @@ func (s *Server) NewUser(login, name, password string, access []byte) error { return FS.WriteFile(s.ConfigDir+"Users/"+login+".yaml", out, 0666) } +func (s *Server) UpdateUser(login, newLogin, name, password string, access []byte) error { + s.mux.Lock() + defer s.mux.Unlock() + + fmt.Printf("login: %v, newLogin: %v: ", login, newLogin) + + // update renames the user login + if login != newLogin { + err := os.Rename(s.ConfigDir+"Users/"+login+".yaml", s.ConfigDir+"Users/"+newLogin+".yaml") + if err != nil { + return err + } + s.Accounts[newLogin] = s.Accounts[login] + delete(s.Accounts, login) + } + + account := s.Accounts[newLogin] + account.Access = &access + account.Name = name + account.Password = password + + out, err := yaml.Marshal(&account) + if err != nil { + return err + } + if err := os.WriteFile(s.ConfigDir+"Users/"+newLogin+".yaml", out, 0666); err != nil { + return err + } + + return nil +} + // DeleteUser deletes the user account func (s *Server) DeleteUser(login string) error { s.mux.Lock() @@ -656,9 +688,11 @@ func (s *Server) handleFileTransfer(conn io.ReadWriteCloser) error { s.Logger.Infow("File download started", "filePath", fullFilePath, "transactionRef", fileTransfer.ReferenceNumber) - // Start by sending flat file object to client - if _, err := conn.Write(ffo.BinaryMarshal()); err != nil { - return err + if fileTransfer.options == nil { + // Start by sending flat file object to client + if _, err := conn.Write(ffo.BinaryMarshal()); err != nil { + return err + } } file, err := FS.Open(fullFilePath)