123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- package samba
- import (
- "encoding/json"
- "net/http"
- "imuslab.com/arozos/mod/utils"
- )
- // Get current samba service status
- func (s *ShareManager) SmbdStates(w http.ResponseWriter, r *http.Request) {
- set, err := utils.PostPara(r, "set")
- if err != nil {
- //return the current smbd states
- smbdRunning, err := IsSmbdRunning()
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- js, _ := json.Marshal(smbdRunning)
- utils.SendJSONResponse(w, string(js))
- return
- } else if set == "enable" {
- //Set smbd to enable
- err = SetSmbdEnableState(true)
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- utils.SendOK(w)
- return
- } else if set == "disable" {
- //Set smbd to disable
- err = SetSmbdEnableState(false)
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- utils.SendOK(w)
- return
- }
- utils.SendErrorResponse(w, "not support set state: "+set+". Only support enable /disable")
- return
- }
- // List all the samba shares
- func (s *ShareManager) ListSambaShares(w http.ResponseWriter, r *http.Request) {
- shares, err := s.ReadSambaShares()
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- //Remove those shares that is reserved by systems
- shares = s.FilterSystemCreatedShares(shares)
- js, _ := json.Marshal(shares)
- utils.SendJSONResponse(w, string(js))
- }
- // Add a samba share
- func (s *ShareManager) AddSambaShare(w http.ResponseWriter, r *http.Request) {
- shareName, err := utils.GetPara(r, "name")
- if err != nil {
- utils.SendErrorResponse(w, "share name not given")
- return
- }
- //TODO: Move hardcode to paramters
- shareToCreate := ShareConfig{
- Name: shareName,
- Path: "/home/aroz/test/",
- ValidUsers: []string{"aroz"},
- ReadOnly: false,
- Browseable: true,
- GuestOk: false,
- }
- //Add the new share to smb.conf
- err = s.CreateNewSambaShare(&shareToCreate)
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- //Restart smbd
- err = restartSmbd()
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- utils.SendOK(w)
- }
- // Remove a samba share by name
- func (s *ShareManager) DelSambaShare(w http.ResponseWriter, r *http.Request) {
- shareName, err := utils.GetPara(r, "name")
- if err != nil {
- utils.SendErrorResponse(w, "share name not given")
- return
- }
- //Check if share exists
- shareExists, err := s.ShareExists(shareName)
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- if !shareExists {
- utils.SendErrorResponse(w, "share to be remove not exists")
- return
- }
- //Remove the share from config file
- err = s.RemoveSambaShareConfig(shareName)
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- //Restart smbd
- err = restartSmbd()
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- utils.SendOK(w)
- }
- // 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")
- if err != nil {
- utils.SendErrorResponse(w, "username not given")
- return
- }
- password, err := utils.GetPara(r, "password")
- if err != nil {
- utils.SendErrorResponse(w, "password not set")
- return
- }
- err = s.AddSambaUser(username, password)
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- utils.SendOK(w)
- }
- // Remove a samba user
- func (s *ShareManager) DelSambaUser(w http.ResponseWriter, r *http.Request) {
- username, err := utils.GetPara(r, "username")
- if err != nil {
- utils.SendErrorResponse(w, "username not given")
- return
- }
- //Remove the samba user
- err = s.RemoveSmbUser(username)
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- utils.SendOK(w)
- }
- // List all samba users info
- func (s *ShareManager) ListSambaUsers(w http.ResponseWriter, r *http.Request) {
- userInfo, err := s.ListSambaUsersInfo()
- if err != nil {
- utils.SendErrorResponse(w, err.Error())
- return
- }
- js, _ := json.Marshal(userInfo)
- utils.SendJSONResponse(w, string(js))
- }
|