From 94e545b3880171194e4d845af336511dbea604aa Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 16:30:25 +1300 Subject: [PATCH 01/19] non anonymous samba shares --- model/share.go | 1 + route/v1/samba.go | 3 ++- service/model/o_shares.go | 1 + service/shares.go | 12 ++++++++---- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/model/share.go b/model/share.go index f164db1..dd5adea 100644 --- a/model/share.go +++ b/model/share.go @@ -14,4 +14,5 @@ type Shares struct { ID uint `json:"id"` Anonymous bool `json:"anonymous"` Path string `json:"path"` + Valid_users []string{} `json:"valid_users"` } diff --git a/route/v1/samba.go b/route/v1/samba.go index 7170bb8..3b9fa07 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -85,8 +85,9 @@ func PostSambaSharesCreate(ctx echo.Context) error { } for _, v := range shares { shareDBModel := model2.SharesDBModel{} - shareDBModel.Anonymous = true + shareDBModel.Anonymous = v.Anonymous shareDBModel.Path = v.Path + shareDBModel.Valid_users = v.Valid_users shareDBModel.Name = filepath.Base(v.Path) os.Chmod(v.Path, 0o777) service.MyService.Shares().CreateShare(shareDBModel) diff --git a/service/model/o_shares.go b/service/model/o_shares.go index a887522..93fb5ff 100644 --- a/service/model/o_shares.go +++ b/service/model/o_shares.go @@ -13,6 +13,7 @@ package model type SharesDBModel struct { ID uint `gorm:"column:id;primary_key" json:"id"` Anonymous bool `json:"anonymous"` + Valid_users []string {} `json:"valid_users"` Path string `json:"path"` Name string `json:"name"` Updated int64 `gorm:"autoUpdateTime"` diff --git a/service/shares.go b/service/shares.go index 70e482c..c7076a1 100644 --- a/service/shares.go +++ b/service/shares.go @@ -79,16 +79,20 @@ func (s *sharesStruct) UpdateConfigFile() { configStr += ` [` + dirName + `] comment = CasaOS share ` + dirName + ` -public = Yes +public = ` + if (share.Anonymous){`Yes`} else {`No`} + ` path = ` + share.Path + ` browseable = Yes read only = No -guest ok = Yes +guest ok = ` + if (share.Anonymous){`Yes`} else {`No`} + ` create mask = 0777 directory mask = 0777 -force user = root +` + if (share.Anonymous){`force user = root`} else {`#force user = root`} + + if (!share.Anonymous) {`valid users` + + for _, user := range share.Valid_users { + user + } + } -` } // write config file file.WriteToPath([]byte(configStr), "/etc/samba", "smb.casa.conf") From 85a72a6a151380ccc29119ce2f38052aabe4ef00 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 16:48:33 +1300 Subject: [PATCH 02/19] send valid_users to api --- route/v1/samba.go | 1 + 1 file changed, 1 insertion(+) diff --git a/route/v1/samba.go b/route/v1/samba.go index 3b9fa07..70c6d72 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -60,6 +60,7 @@ func GetSambaSharesList(ctx echo.Context) error { shareList = append(shareList, model.Shares{ Anonymous: v.Anonymous, Path: v.Path, + Valid_users: v.Valid_users, ID: v.ID, }) } From 873e2a5ac7e4d0cd4cfd42025f31291409c37ba2 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 17:11:14 +1300 Subject: [PATCH 03/19] get samba users --- route/v1.go | 5 +++++ route/v1/samba.go | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/route/v1.go b/route/v1.go index 19905ba..9904dd7 100644 --- a/route/v1.go +++ b/route/v1.go @@ -176,6 +176,11 @@ func InitV1Router() http.Handler { v1SharesGroup.DELETE("/:id", v1.DeleteSambaShares) v1SharesGroup.GET("/status", v1.GetSambaStatus) } + v1SharesGroup := v1SambaGroup.Group("/users") + v1SharesGroup.Use() + { + v1SharesGroup.GET("", v1.ListSambaUsers) + } } v1NotifyGroup := v1Group.Group("/notify") v1NotifyGroup.Use() diff --git a/route/v1/samba.go b/route/v1/samba.go index 70c6d72..170e9a6 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -17,6 +17,8 @@ import ( "os" "path/filepath" "strings" + "os/exec" + "strings" "github.com/IceWhaleTech/CasaOS-Common/utils/logger" "github.com/IceWhaleTech/CasaOS-Common/utils/systemctl" @@ -67,6 +69,18 @@ func GetSambaSharesList(ctx echo.Context) error { return ctx.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: shareList}) } +func ListSambaUsers(ctx echo.Context) error { + out, err := exec.Command("pdbedit -L").Output() + + if err != nil { + return ctx.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.Failed, Message: common_err.GetMsg(common_err.Failed)}) + } + + users := strings.Split("\n") + + return ctx.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: users}) +} + func PostSambaSharesCreate(ctx echo.Context) error { shares := []model.Shares{} ctx.Bind(&shares) From ea5d050f41a1425eaf24dcc41778cae46b22e277 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 17:35:11 +1300 Subject: [PATCH 04/19] smb_users --- model/smb_users.go | 16 ++++++++++++++++ route/v1.go | 3 ++- route/v1/samba.go | 24 ++++++++++++++++++++---- 3 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 model/smb_users.go diff --git a/model/smb_users.go b/model/smb_users.go new file mode 100644 index 0000000..d7b62bb --- /dev/null +++ b/model/smb_users.go @@ -0,0 +1,16 @@ +/* +* @Author: Drew Fitzgerald/Sheep26 drew@sheepland.xyz +* @Date: 2024-12-03 +* @LastEditors: Drew Fitzgerald/Sheep26 +* @LastEditTime: 2024-12-03 +* @FilePath: /CasaOS/service/model/o_smb_users.go +* @Website: https://www.casaos.io +* Copyright (c) 2024 by icewhale, All Rights Reserved. +*/ + +package model + +type SMBUsers struct { + Name string "json:name" + Password string "json:password" +} \ No newline at end of file diff --git a/route/v1.go b/route/v1.go index 9904dd7..851103d 100644 --- a/route/v1.go +++ b/route/v1.go @@ -179,7 +179,8 @@ func InitV1Router() http.Handler { v1SharesGroup := v1SambaGroup.Group("/users") v1SharesGroup.Use() { - v1SharesGroup.GET("", v1.ListSambaUsers) + v1SharesGroup.GET("/list", v1.ListSambaUsers) + v1SharesGroup.POST("/add", v1.AddSambaUser) } } v1NotifyGroup := v1Group.Group("/notify") diff --git a/route/v1/samba.go b/route/v1/samba.go index 170e9a6..dbfd334 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -1,12 +1,12 @@ /* * @Author: LinkLeong link@icewhale.com * @Date: 2022-07-26 11:08:48 - * @LastEditors: LinkLeong - * @LastEditTime: 2022-08-17 18:25:42 + * @LastEditors: Drew Fitzgerald/Sheep26 + * @LastEditTime: 2024-12-03 * @FilePath: /CasaOS/route/v1/samba.go * @Description: * @Website: https://www.casaos.io - * Copyright (c) 2022 by icewhale, All Rights Reserved. + * Copyright (c) 2024 by icewhale, All Rights Reserved. */ package v1 @@ -73,7 +73,7 @@ func ListSambaUsers(ctx echo.Context) error { out, err := exec.Command("pdbedit -L").Output() if err != nil { - return ctx.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.Failed, Message: common_err.GetMsg(common_err.Failed)}) + return ctx.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.SERVICE_ERROR, Message: common_err.GetMsg(common_err.SERVICE_ERROR)}) } users := strings.Split("\n") @@ -81,6 +81,22 @@ func ListSambaUsers(ctx echo.Context) error { return ctx.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: users}) } +func AddSambaUser(ctx echo.Context) error { + users := []mode.SMBUsers{} + ctx.Bind(&users) + + for _, v := range users { + out, err := exec.Command("echo " + v.Password + " | smbpasswd -a -s " + v.User).Output() + + if (err != null) { + if (v.User == "" || v.Password == "") return ctx.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.CLIENT_ERROR, Message: common_err.GetMsg(common_err.CLIENT_ERROR)}) + else return ctx.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.SERVICE_ERROR, Message: common_err.GetMsg(common_err.SERVICE_ERROR)}) + } + } + + return ctx.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: users}) +} + func PostSambaSharesCreate(ctx echo.Context) error { shares := []model.Shares{} ctx.Bind(&shares) From 6407472a23bab6da39e485228448be6f89d0a43a Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 21:57:33 +1300 Subject: [PATCH 05/19] change order --- route/v1/samba.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/route/v1/samba.go b/route/v1/samba.go index dbfd334..4bcd571 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -86,7 +86,7 @@ func AddSambaUser(ctx echo.Context) error { ctx.Bind(&users) for _, v := range users { - out, err := exec.Command("echo " + v.Password + " | smbpasswd -a -s " + v.User).Output() + out, err := exec.Command("echo " + v.Password + " | smbpasswd -s -a " + v.User).Output() if (err != null) { if (v.User == "" || v.Password == "") return ctx.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.CLIENT_ERROR, Message: common_err.GetMsg(common_err.CLIENT_ERROR)}) From 8ca900d6f213ca5218430571f21d90bd572cffc9 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 22:36:26 +1300 Subject: [PATCH 06/19] syntax fixes --- .../sysroot/usr/share/casaos/shell/helper.sh | 13 ++++++ model/share.go | 8 ++-- route/v1.go | 2 +- route/v1/samba.go | 34 ++++++++-------- service/model/o_shares.go | 14 +++---- service/shares.go | 40 ++++++++++++++----- 6 files changed, 73 insertions(+), 38 deletions(-) diff --git a/build/sysroot/usr/share/casaos/shell/helper.sh b/build/sysroot/usr/share/casaos/shell/helper.sh index c6f576d..24d3795 100644 --- a/build/sysroot/usr/share/casaos/shell/helper.sh +++ b/build/sysroot/usr/share/casaos/shell/helper.sh @@ -341,6 +341,19 @@ EditSmabaUserPassword(){ $sudo_cmd smbpasswd $1 } +EditSmabaUserPassword(){ + $sudo_cmd smbpasswd $1 +} + + +EditSambaUserPasswordSTDIN(){ + $sudo_cmd smbpasswd -s $2 $1 +} + +ListSambaUsers(){ + $sudo_cmd pdbedit -L +} + AddSmabaUser(){ $sudo_cmd useradd $1 $sudo_cmd smbpasswd -a $1 < 0 { + users := `valid users =` + for _, user := range share.Valid_users { + users += " " + user + } + return users + "\n" + } + return "" + }() } // write config file file.WriteToPath([]byte(configStr), "/etc/samba", "smb.casa.conf") From 21492682c3f76827083bd91d34b79a95f88e54ce Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 22:48:31 +1300 Subject: [PATCH 07/19] gorm update --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 6c341c9..040f569 100644 --- a/go.mod +++ b/go.mod @@ -43,7 +43,7 @@ require ( golang.org/x/oauth2 v0.7.0 golang.org/x/sync v0.3.0 golang.org/x/sys v0.20.0 - gorm.io/gorm v1.25.0 + gorm.io/gorm v1.25.12 gotest.tools v2.2.0+incompatible ) diff --git a/go.sum b/go.sum index b355474..4021be6 100644 --- a/go.sum +++ b/go.sum @@ -387,6 +387,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/gorm v1.25.0 h1:+KtYtb2roDz14EQe4bla8CbQlmb9dN3VejSai3lprfU= gorm.io/gorm v1.25.0/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= +gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= modernc.org/libc v1.22.4 h1:wymSbZb0AlrjdAVX3cjreCHTPCpPARbQXNz6BHPzdwQ= From c8d542dbe3ee3b78bf6f2754ba8ffecf651b75b6 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Wed, 4 Dec 2024 11:16:15 +1300 Subject: [PATCH 08/19] fix --- build/scripts/setup/script.d/03-setup-casaos.sh | 0 route/v1/samba.go | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) mode change 100755 => 100644 build/scripts/setup/script.d/03-setup-casaos.sh diff --git a/build/scripts/setup/script.d/03-setup-casaos.sh b/build/scripts/setup/script.d/03-setup-casaos.sh old mode 100755 new mode 100644 diff --git a/route/v1/samba.go b/route/v1/samba.go index 427d0f4..28131a9 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -92,7 +92,7 @@ func AddSambaUser(ctx echo.Context) error { for _, v := range users { if !strings.Contains(out, v.Name) { - command.OnlyExec("source " + config.AppInfo.ShellPath + "/helper.sh ;EditSmabaUserPasswordSTDIN " + v.Name + " " + v.Password) + command.OnlyExec("source " + config.AppInfo.ShellPath + "/helper.sh ;AddSmabaUser " + v.Name + " " + v.Password) } } From bc97dfa59db4a091e1b3451b436905d41fdb1299 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 16:30:25 +1300 Subject: [PATCH 09/19] non anonymous samba shares --- model/share.go | 1 + route/v1/samba.go | 3 ++- service/model/o_shares.go | 1 + service/shares.go | 12 ++++++++---- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/model/share.go b/model/share.go index f164db1..dd5adea 100644 --- a/model/share.go +++ b/model/share.go @@ -14,4 +14,5 @@ type Shares struct { ID uint `json:"id"` Anonymous bool `json:"anonymous"` Path string `json:"path"` + Valid_users []string{} `json:"valid_users"` } diff --git a/route/v1/samba.go b/route/v1/samba.go index 7170bb8..3b9fa07 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -85,8 +85,9 @@ func PostSambaSharesCreate(ctx echo.Context) error { } for _, v := range shares { shareDBModel := model2.SharesDBModel{} - shareDBModel.Anonymous = true + shareDBModel.Anonymous = v.Anonymous shareDBModel.Path = v.Path + shareDBModel.Valid_users = v.Valid_users shareDBModel.Name = filepath.Base(v.Path) os.Chmod(v.Path, 0o777) service.MyService.Shares().CreateShare(shareDBModel) diff --git a/service/model/o_shares.go b/service/model/o_shares.go index a887522..93fb5ff 100644 --- a/service/model/o_shares.go +++ b/service/model/o_shares.go @@ -13,6 +13,7 @@ package model type SharesDBModel struct { ID uint `gorm:"column:id;primary_key" json:"id"` Anonymous bool `json:"anonymous"` + Valid_users []string {} `json:"valid_users"` Path string `json:"path"` Name string `json:"name"` Updated int64 `gorm:"autoUpdateTime"` diff --git a/service/shares.go b/service/shares.go index 70e482c..c7076a1 100644 --- a/service/shares.go +++ b/service/shares.go @@ -79,16 +79,20 @@ func (s *sharesStruct) UpdateConfigFile() { configStr += ` [` + dirName + `] comment = CasaOS share ` + dirName + ` -public = Yes +public = ` + if (share.Anonymous){`Yes`} else {`No`} + ` path = ` + share.Path + ` browseable = Yes read only = No -guest ok = Yes +guest ok = ` + if (share.Anonymous){`Yes`} else {`No`} + ` create mask = 0777 directory mask = 0777 -force user = root +` + if (share.Anonymous){`force user = root`} else {`#force user = root`} + + if (!share.Anonymous) {`valid users` + + for _, user := range share.Valid_users { + user + } + } -` } // write config file file.WriteToPath([]byte(configStr), "/etc/samba", "smb.casa.conf") From 00e17b5b6c4355e426ff28639d9d319d7158f89a Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 16:48:33 +1300 Subject: [PATCH 10/19] send valid_users to api --- route/v1/samba.go | 1 + 1 file changed, 1 insertion(+) diff --git a/route/v1/samba.go b/route/v1/samba.go index 3b9fa07..70c6d72 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -60,6 +60,7 @@ func GetSambaSharesList(ctx echo.Context) error { shareList = append(shareList, model.Shares{ Anonymous: v.Anonymous, Path: v.Path, + Valid_users: v.Valid_users, ID: v.ID, }) } From 9e7619b4811171c6b88f1e52cadc7c73ce7461e9 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 17:11:14 +1300 Subject: [PATCH 11/19] get samba users --- route/v1.go | 5 +++++ route/v1/samba.go | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/route/v1.go b/route/v1.go index 19905ba..9904dd7 100644 --- a/route/v1.go +++ b/route/v1.go @@ -176,6 +176,11 @@ func InitV1Router() http.Handler { v1SharesGroup.DELETE("/:id", v1.DeleteSambaShares) v1SharesGroup.GET("/status", v1.GetSambaStatus) } + v1SharesGroup := v1SambaGroup.Group("/users") + v1SharesGroup.Use() + { + v1SharesGroup.GET("", v1.ListSambaUsers) + } } v1NotifyGroup := v1Group.Group("/notify") v1NotifyGroup.Use() diff --git a/route/v1/samba.go b/route/v1/samba.go index 70c6d72..170e9a6 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -17,6 +17,8 @@ import ( "os" "path/filepath" "strings" + "os/exec" + "strings" "github.com/IceWhaleTech/CasaOS-Common/utils/logger" "github.com/IceWhaleTech/CasaOS-Common/utils/systemctl" @@ -67,6 +69,18 @@ func GetSambaSharesList(ctx echo.Context) error { return ctx.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: shareList}) } +func ListSambaUsers(ctx echo.Context) error { + out, err := exec.Command("pdbedit -L").Output() + + if err != nil { + return ctx.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.Failed, Message: common_err.GetMsg(common_err.Failed)}) + } + + users := strings.Split("\n") + + return ctx.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: users}) +} + func PostSambaSharesCreate(ctx echo.Context) error { shares := []model.Shares{} ctx.Bind(&shares) From 571ce2c4acd494ad0038b218b347752e1d13739d Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 17:35:11 +1300 Subject: [PATCH 12/19] smb_users --- model/smb_users.go | 16 ++++++++++++++++ route/v1.go | 3 ++- route/v1/samba.go | 24 ++++++++++++++++++++---- 3 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 model/smb_users.go diff --git a/model/smb_users.go b/model/smb_users.go new file mode 100644 index 0000000..d7b62bb --- /dev/null +++ b/model/smb_users.go @@ -0,0 +1,16 @@ +/* +* @Author: Drew Fitzgerald/Sheep26 drew@sheepland.xyz +* @Date: 2024-12-03 +* @LastEditors: Drew Fitzgerald/Sheep26 +* @LastEditTime: 2024-12-03 +* @FilePath: /CasaOS/service/model/o_smb_users.go +* @Website: https://www.casaos.io +* Copyright (c) 2024 by icewhale, All Rights Reserved. +*/ + +package model + +type SMBUsers struct { + Name string "json:name" + Password string "json:password" +} \ No newline at end of file diff --git a/route/v1.go b/route/v1.go index 9904dd7..851103d 100644 --- a/route/v1.go +++ b/route/v1.go @@ -179,7 +179,8 @@ func InitV1Router() http.Handler { v1SharesGroup := v1SambaGroup.Group("/users") v1SharesGroup.Use() { - v1SharesGroup.GET("", v1.ListSambaUsers) + v1SharesGroup.GET("/list", v1.ListSambaUsers) + v1SharesGroup.POST("/add", v1.AddSambaUser) } } v1NotifyGroup := v1Group.Group("/notify") diff --git a/route/v1/samba.go b/route/v1/samba.go index 170e9a6..dbfd334 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -1,12 +1,12 @@ /* * @Author: LinkLeong link@icewhale.com * @Date: 2022-07-26 11:08:48 - * @LastEditors: LinkLeong - * @LastEditTime: 2022-08-17 18:25:42 + * @LastEditors: Drew Fitzgerald/Sheep26 + * @LastEditTime: 2024-12-03 * @FilePath: /CasaOS/route/v1/samba.go * @Description: * @Website: https://www.casaos.io - * Copyright (c) 2022 by icewhale, All Rights Reserved. + * Copyright (c) 2024 by icewhale, All Rights Reserved. */ package v1 @@ -73,7 +73,7 @@ func ListSambaUsers(ctx echo.Context) error { out, err := exec.Command("pdbedit -L").Output() if err != nil { - return ctx.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.Failed, Message: common_err.GetMsg(common_err.Failed)}) + return ctx.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.SERVICE_ERROR, Message: common_err.GetMsg(common_err.SERVICE_ERROR)}) } users := strings.Split("\n") @@ -81,6 +81,22 @@ func ListSambaUsers(ctx echo.Context) error { return ctx.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: users}) } +func AddSambaUser(ctx echo.Context) error { + users := []mode.SMBUsers{} + ctx.Bind(&users) + + for _, v := range users { + out, err := exec.Command("echo " + v.Password + " | smbpasswd -a -s " + v.User).Output() + + if (err != null) { + if (v.User == "" || v.Password == "") return ctx.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.CLIENT_ERROR, Message: common_err.GetMsg(common_err.CLIENT_ERROR)}) + else return ctx.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.SERVICE_ERROR, Message: common_err.GetMsg(common_err.SERVICE_ERROR)}) + } + } + + return ctx.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: users}) +} + func PostSambaSharesCreate(ctx echo.Context) error { shares := []model.Shares{} ctx.Bind(&shares) From f39ae50cd99fbfd305b9a5d52d831eaa56bfd22e Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 21:57:33 +1300 Subject: [PATCH 13/19] change order --- route/v1/samba.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/route/v1/samba.go b/route/v1/samba.go index dbfd334..4bcd571 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -86,7 +86,7 @@ func AddSambaUser(ctx echo.Context) error { ctx.Bind(&users) for _, v := range users { - out, err := exec.Command("echo " + v.Password + " | smbpasswd -a -s " + v.User).Output() + out, err := exec.Command("echo " + v.Password + " | smbpasswd -s -a " + v.User).Output() if (err != null) { if (v.User == "" || v.Password == "") return ctx.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.CLIENT_ERROR, Message: common_err.GetMsg(common_err.CLIENT_ERROR)}) From 601b78d0c8a6c9789c56e2006d60a9dffb2dba50 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 22:36:26 +1300 Subject: [PATCH 14/19] syntax fixes --- .../sysroot/usr/share/casaos/shell/helper.sh | 13 ++++++ model/share.go | 8 ++-- route/v1.go | 2 +- route/v1/samba.go | 34 ++++++++-------- service/model/o_shares.go | 14 +++---- service/shares.go | 40 ++++++++++++++----- 6 files changed, 73 insertions(+), 38 deletions(-) diff --git a/build/sysroot/usr/share/casaos/shell/helper.sh b/build/sysroot/usr/share/casaos/shell/helper.sh index c6f576d..24d3795 100644 --- a/build/sysroot/usr/share/casaos/shell/helper.sh +++ b/build/sysroot/usr/share/casaos/shell/helper.sh @@ -341,6 +341,19 @@ EditSmabaUserPassword(){ $sudo_cmd smbpasswd $1 } +EditSmabaUserPassword(){ + $sudo_cmd smbpasswd $1 +} + + +EditSambaUserPasswordSTDIN(){ + $sudo_cmd smbpasswd -s $2 $1 +} + +ListSambaUsers(){ + $sudo_cmd pdbedit -L +} + AddSmabaUser(){ $sudo_cmd useradd $1 $sudo_cmd smbpasswd -a $1 < 0 { + users := `valid users =` + for _, user := range share.Valid_users { + users += " " + user + } + return users + "\n" + } + return "" + }() } // write config file file.WriteToPath([]byte(configStr), "/etc/samba", "smb.casa.conf") From 479a29ef3a84e20e34aae4e2db771d5a3a427960 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Tue, 3 Dec 2024 22:48:31 +1300 Subject: [PATCH 15/19] gorm update --- go.mod | 2 +- go.sum | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index ad58d4c..0f91f8e 100644 --- a/go.mod +++ b/go.mod @@ -43,7 +43,7 @@ require ( golang.org/x/oauth2 v0.7.0 golang.org/x/sync v0.3.0 golang.org/x/sys v0.20.0 - gorm.io/gorm v1.25.0 + gorm.io/gorm v1.25.12 gotest.tools v2.2.0+incompatible ) diff --git a/go.sum b/go.sum index 8cebdb3..38b20d9 100644 --- a/go.sum +++ b/go.sum @@ -389,6 +389,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/gorm v1.25.0 h1:+KtYtb2roDz14EQe4bla8CbQlmb9dN3VejSai3lprfU= gorm.io/gorm v1.25.0/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8= +gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= modernc.org/libc v1.22.4 h1:wymSbZb0AlrjdAVX3cjreCHTPCpPARbQXNz6BHPzdwQ= From 7e98f0f56339a3083ab341d06c972a282340f752 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Wed, 4 Dec 2024 11:16:15 +1300 Subject: [PATCH 16/19] fix --- build/scripts/setup/script.d/03-setup-casaos.sh | 0 route/v1/samba.go | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) mode change 100755 => 100644 build/scripts/setup/script.d/03-setup-casaos.sh diff --git a/build/scripts/setup/script.d/03-setup-casaos.sh b/build/scripts/setup/script.d/03-setup-casaos.sh old mode 100755 new mode 100644 diff --git a/route/v1/samba.go b/route/v1/samba.go index 427d0f4..28131a9 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -92,7 +92,7 @@ func AddSambaUser(ctx echo.Context) error { for _, v := range users { if !strings.Contains(out, v.Name) { - command.OnlyExec("source " + config.AppInfo.ShellPath + "/helper.sh ;EditSmabaUserPasswordSTDIN " + v.Name + " " + v.Password) + command.OnlyExec("source " + config.AppInfo.ShellPath + "/helper.sh ;AddSmabaUser " + v.Name + " " + v.Password) } } From 9c6c8db784c748a4dd2626e1485930e78e67c6e5 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Sun, 8 Dec 2024 09:21:52 +1300 Subject: [PATCH 17/19] possible fixed potential issue with edit samba password --- build/sysroot/usr/share/casaos/shell/helper.sh | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/build/sysroot/usr/share/casaos/shell/helper.sh b/build/sysroot/usr/share/casaos/shell/helper.sh index 24d3795..9ec473c 100644 --- a/build/sysroot/usr/share/casaos/shell/helper.sh +++ b/build/sysroot/usr/share/casaos/shell/helper.sh @@ -336,18 +336,12 @@ RestartSMBD(){ $sudo_cmd systemctl restart smbd } -# edit user password $1:username +# edit user password EditSmabaUserPassword(){ - $sudo_cmd smbpasswd $1 -} - -EditSmabaUserPassword(){ - $sudo_cmd smbpasswd $1 -} - - -EditSambaUserPasswordSTDIN(){ - $sudo_cmd smbpasswd -s $2 $1 + $sudo_cmd smbpasswd -a $1 < Date: Sat, 18 Jan 2025 13:52:05 +1300 Subject: [PATCH 18/19] refactor the fix issues --- route/v1/samba.go | 17 +++----------- service/shares.go | 59 +++++++++++++++++++++++------------------------ 2 files changed, 32 insertions(+), 44 deletions(-) diff --git a/route/v1/samba.go b/route/v1/samba.go index 28131a9..7bc3eb2 100644 --- a/route/v1/samba.go +++ b/route/v1/samba.go @@ -69,22 +69,11 @@ func GetSambaSharesList(ctx echo.Context) error { return ctx.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: shareList}) } -func ListSambaUsers(ctx echo.Context) error { - out, err := command.OnlyExec("source " + config.AppInfo.ShellPath + "/helper.sh ;ListSambaUsers ") - - if err != nil { - return ctx.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.SERVICE_ERROR, Message: common_err.GetMsg(common_err.SERVICE_ERROR)}) - } - - users := strings.Split(out, "\n") - - return ctx.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: users}) -} - func AddSambaUser(ctx echo.Context) error { + source := "source " + config.AppInfo.ShellPath users := []model.SMBUsers{} ctx.Bind(&users) - out, err := command.OnlyExec("source " + config.AppInfo.ShellPath + "/helper.sh ;ListSambaUsers ") + out, err := command.OnlyExec(source + "/helper.sh ;ListSambaUsers ") if err != nil { return ctx.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.SERVICE_ERROR, Message: common_err.GetMsg(common_err.SERVICE_ERROR)}) @@ -92,7 +81,7 @@ func AddSambaUser(ctx echo.Context) error { for _, v := range users { if !strings.Contains(out, v.Name) { - command.OnlyExec("source " + config.AppInfo.ShellPath + "/helper.sh ;AddSmabaUser " + v.Name + " " + v.Password) + command.OnlyExec(source + "/helper.sh ;AddSmabaUser " + v.Name + " " + v.Password) } } diff --git a/service/shares.go b/service/shares.go index 106af6a..0cf44a2 100644 --- a/service/shares.go +++ b/service/shares.go @@ -69,6 +69,31 @@ func (s *sharesStruct) DeleteShare(id string) { s.UpdateConfigFile() } +func getAnonymous(share model2.SharesDBModel) string { + if share.Anonymous { + return `Yes` + } + return `No` +} + +func forceRoot(share model2.SharesDBModel) string { + if share.Anonymous { + return `force user = root` + } + return `#force user = root` +} + +func getValidUsers(share model2.SharesDBModel) string { + if !share.Anonymous && len(share.Valid_users) > 0 { + users := `valid users =` + for _, user := range share.Valid_users { + users += " " + user + } + return users + "\n" + } + return "" +} + func (s *sharesStruct) UpdateConfigFile() { shares := []model2.SharesDBModel{} s.db.Select("anonymous,path,valid_users").Find(&shares) @@ -79,41 +104,15 @@ func (s *sharesStruct) UpdateConfigFile() { configStr += ` [` + dirName + `] comment = CasaOS share ` + dirName + ` -public = ` + func() string { - if share.Anonymous { - return "Yes" - } - return "No" - }() + ` +public = ` + getAnonymous(share) + ` path = ` + share.Path + ` browseable = Yes read only = No -guest ok = ` + func() string { - if share.Anonymous { - return "Yes" - } - return "No" - }() + ` +guest ok = ` + getAnonymous(share) + ` create mask = 0777 directory mask = 0777 -` + func() string { - if share.Anonymous { - return `force user = root -` - } - return `#force user = root -` - }() + func() string { - if !share.Anonymous && len(share.Valid_users) > 0 { - users := `valid users =` - for _, user := range share.Valid_users { - users += " " + user - } - return users + "\n" - } - return "" - }() - } +` + forceRoot(share) + ` +` + getValidUsers(share) // write config file file.WriteToPath([]byte(configStr), "/etc/samba", "smb.casa.conf") // restart samba From 8d6726c6e2de52749061c317495d7f7d9e2109a6 Mon Sep 17 00:00:00 2001 From: Sheep26 Date: Sat, 18 Jan 2025 13:58:00 +1300 Subject: [PATCH 19/19] fix parsing error due to missing close bracket --- service/shares.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/service/shares.go b/service/shares.go index 0cf44a2..1b42ef0 100644 --- a/service/shares.go +++ b/service/shares.go @@ -87,7 +87,7 @@ func getValidUsers(share model2.SharesDBModel) string { if !share.Anonymous && len(share.Valid_users) > 0 { users := `valid users =` for _, user := range share.Valid_users { - users += " " + user + users = " " + user } return users + "\n" } @@ -113,6 +113,7 @@ create mask = 0777 directory mask = 0777 ` + forceRoot(share) + ` ` + getValidUsers(share) + } // write config file file.WriteToPath([]byte(configStr), "/etc/samba", "smb.casa.conf") // restart samba