]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/server.go
Implement file preview
[rbdr/mobius] / hotline / server.go
index 0828385dc2ed9027f13075605af634ee0a399490..5ff88420a331372ca33b3a092739ee0436411b28 100644 (file)
@@ -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)