|
@@ -2,6 +2,7 @@ package samba
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
+ "log"
|
|
|
"net/http"
|
|
|
"path/filepath"
|
|
|
"strings"
|
|
@@ -224,14 +225,13 @@ func (s *ShareManager) DelSambaShare(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
// Add a new samba user
|
|
|
func (s *ShareManager) NewSambaUser(w http.ResponseWriter, r *http.Request) {
|
|
|
- //TODO: Replace the GetPara to Post
|
|
|
- username, err := utils.GetPara(r, "username")
|
|
|
+ username, err := utils.PostPara(r, "username")
|
|
|
if err != nil {
|
|
|
utils.SendErrorResponse(w, "username not given")
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- password, err := utils.GetPara(r, "password")
|
|
|
+ password, err := utils.PostPara(r, "password")
|
|
|
if err != nil {
|
|
|
utils.SendErrorResponse(w, "password not set")
|
|
|
return
|
|
@@ -246,9 +246,9 @@ func (s *ShareManager) NewSambaUser(w http.ResponseWriter, r *http.Request) {
|
|
|
utils.SendOK(w)
|
|
|
}
|
|
|
|
|
|
-// Remove a samba user
|
|
|
+// Remove a samba user, check for admin before calling
|
|
|
func (s *ShareManager) DelSambaUser(w http.ResponseWriter, r *http.Request) {
|
|
|
- username, err := utils.GetPara(r, "username")
|
|
|
+ username, err := utils.PostPara(r, "username")
|
|
|
if err != nil {
|
|
|
utils.SendErrorResponse(w, "username not given")
|
|
|
return
|
|
@@ -275,3 +275,87 @@ func (s *ShareManager) ListSambaUsers(w http.ResponseWriter, r *http.Request) {
|
|
|
js, _ := json.Marshal(userInfo)
|
|
|
utils.SendJSONResponse(w, string(js))
|
|
|
}
|
|
|
+
|
|
|
+// Activate a user account from arozos into samba user
|
|
|
+func (s *ShareManager) ActivateUserAccount(w http.ResponseWriter, r *http.Request, username string, password string) {
|
|
|
+ //Register this user to samba if not exists
|
|
|
+ sambaUserExists, err := s.SambaUserExists(username)
|
|
|
+ if err != nil {
|
|
|
+ utils.SendErrorResponse(w, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ userInfo, _ := s.UserHandler.GetUserInfoFromRequest(w, r)
|
|
|
+ if !sambaUserExists {
|
|
|
+ //This user account not activated yet. Activate it
|
|
|
+ err = s.AddSambaUser(userInfo.Username, password)
|
|
|
+ if err != nil {
|
|
|
+ utils.SendErrorResponse(w, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //Create the user root share folders
|
|
|
+ for _, fsh := range userInfo.GetAllAccessibleFileSystemHandler() {
|
|
|
+ if fsh.IsLocalDrive() {
|
|
|
+ //Samba can only work with drives locally hosted on this server
|
|
|
+ fshID := fsh.UUID
|
|
|
+ fshSharePath := fsh.Path
|
|
|
+ if fsh.RequierUserIsolation() {
|
|
|
+ //User seperated storage. Only mount the user one
|
|
|
+ fshID = fsh.UUID + "_" + userInfo.Username
|
|
|
+ fshSharePath = filepath.Join(fsh.Path, "/users/", userInfo.Username+"/")
|
|
|
+ }
|
|
|
+
|
|
|
+ fshID = sanitizeShareName(fshID)
|
|
|
+
|
|
|
+ //Check if the share already exists
|
|
|
+ shareExists, err := s.ShareExists(fshID)
|
|
|
+ if err != nil {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ if !shareExists {
|
|
|
+ //Try to create the share
|
|
|
+ fshShareAbsolutePath, err := filepath.Abs(fshSharePath)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("[Samba] Unable to generate share config for path: " + fshSharePath)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ //Check if that folder exists
|
|
|
+ if utils.FileExists(fshShareAbsolutePath) {
|
|
|
+ //Folder not exists. Continue
|
|
|
+ log.Println("[Samba] Path not exists for file system handler: " + fshSharePath)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ //Ok! Create the share with this username
|
|
|
+ err = s.CreateNewSambaShare(&ShareConfig{
|
|
|
+ Name: fshID,
|
|
|
+ Path: fshShareAbsolutePath,
|
|
|
+ ValidUsers: []string{userInfo.Username},
|
|
|
+ ReadOnly: false,
|
|
|
+ Browseable: true,
|
|
|
+ GuestOk: false,
|
|
|
+ })
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ log.Println("[Samba] Failed to create share: " + err.Error())
|
|
|
+ utils.SendErrorResponse(w, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //Share exists. Add this user to such share
|
|
|
+ err = s.AddUserToSambaShare(fshID, userInfo.Username)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("[Samba] Failed to add user " + userInfo.Username + " to share " + fshID + ": " + err.Error())
|
|
|
+ utils.SendErrorResponse(w, err.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ utils.SendOK(w)
|
|
|
+}
|