123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /*
- * @Author: LinkLeong link@icewhale.org
- * @Date: 2022-07-26 11:21:14
- * @LastEditors: LinkLeong
- * @LastEditTime: 2022-08-18 11:16:25
- * @FilePath: /CasaOS/service/shares.go
- * @Description:
- * @Website: https://www.casaos.io
- * Copyright (c) 2022 by icewhale, All Rights Reserved.
- */
- package service
- import (
- "path/filepath"
- "strings"
- "github.com/IceWhaleTech/CasaOS/pkg/config"
- command2 "github.com/IceWhaleTech/CasaOS/pkg/utils/command"
- "github.com/IceWhaleTech/CasaOS/pkg/utils/file"
- "github.com/IceWhaleTech/CasaOS/service/model"
- model2 "github.com/IceWhaleTech/CasaOS/service/model"
- "gorm.io/gorm"
- )
- type SharesService interface {
- GetSharesList() (shares []model2.SharesDBModel)
- GetSharesByPath(path string) (shares []model2.SharesDBModel)
- GetSharesByName(name string) (shares []model2.SharesDBModel)
- CreateShare(share model2.SharesDBModel)
- DeleteShare(id string)
- UpdateConfigFile()
- InitSambaConfig()
- DeleteShareByPath(path string)
- }
- type sharesStruct struct {
- db *gorm.DB
- }
- func (s *sharesStruct) DeleteShareByPath(path string) {
- s.db.Where("path LIKE ?", path+"%").Delete(&model.SharesDBModel{})
- s.UpdateConfigFile()
- }
- func (s *sharesStruct) GetSharesByName(name string) (shares []model2.SharesDBModel) {
- s.db.Select("anonymous,path,id").Where("name = ?", name).Find(&shares)
- return
- }
- func (s *sharesStruct) GetSharesByPath(path string) (shares []model2.SharesDBModel) {
- s.db.Select("anonymous,path,id").Where("path = ?", path).Find(&shares)
- return
- }
- func (s *sharesStruct) GetSharesList() (shares []model2.SharesDBModel) {
- s.db.Select("anonymous,path,id").Find(&shares)
- return
- }
- func (s *sharesStruct) CreateShare(share model2.SharesDBModel) {
- s.db.Create(&share)
- s.InitSambaConfig()
- s.UpdateConfigFile()
- }
- func (s *sharesStruct) DeleteShare(id string) {
- s.db.Where("id= ?", id).Delete(&model.SharesDBModel{})
- s.UpdateConfigFile()
- }
- func (s *sharesStruct) UpdateConfigFile() {
- shares := []model2.SharesDBModel{}
- s.db.Select("anonymous,path").Find(&shares)
- //generated config file
- var configStr = ""
- for _, share := range shares {
- dirName := filepath.Base(share.Path)
- configStr += `
- [` + dirName + `]
- comment = CasaOS share ` + dirName + `
- public = Yes
- path = ` + share.Path + `
- browseable = Yes
- read only = No
- guest ok = Yes
- create mask = 0777
- directory mask = 0777
- force user = root
- `
- }
- //write config file
- file.WriteToPath([]byte(configStr), "/etc/samba", "smb.casa.conf")
- //restart samba
- command2.ExecResultStrArray("source " + config.AppInfo.ShellPath + "/helper.sh ;RestartSMBD")
- }
- func (s *sharesStruct) InitSambaConfig() {
- if file.Exists("/etc/samba/smb.conf") {
- str := file.ReadLine(1, "/etc/samba/smb.conf")
- if strings.Contains(str, "# Copyright (c) 2021-2022 CasaOS Inc. All rights reserved.") {
- return
- }
- file.MoveFile("/etc/samba/smb.conf", "/etc/samba/smb.conf.bak")
- var smbConf = ""
- smbConf += `# Copyright (c) 2021-2022 CasaOS Inc. All rights reserved.
- #
- #
- # ______ _______
- # ( __ \ ( ___ )
- # | ( \ ) | ( ) |
- # | | ) | | | | |
- # | | | | | | | |
- # | | ) | | | | |
- # | (__/ ) | (___) |
- # (______/ (_______)
- #
- # _ _______ _________
- # ( ( /| ( ___ ) \__ __/
- # | \ ( | | ( ) | ) (
- # | \ | | | | | | | |
- # | (\ \) | | | | | | |
- # | | \ | | | | | | |
- # | ) \ | | (___) | | |
- # |/ )_) (_______) )_(
- #
- # _______ _______ ______ _________ _______
- # ( ) ( ___ ) ( __ \ \__ __/ ( ____ \ |\ /|
- # | () () | | ( ) | | ( \ ) ) ( | ( \/ ( \ / )
- # | || || | | | | | | | ) | | | | (__ \ (_) /
- # | |(_)| | | | | | | | | | | | | __) \ /
- # | | | | | | | | | | ) | | | | ( ) (
- # | ) ( | | (___) | | (__/ ) ___) (___ | ) | |
- # |/ \| (_______) (______/ \_______/ |/ \_/
- #
- #
- # IMPORTANT: CasaOS will not provide technical support for any issues
- # caused by unauthorized modification to the configuration.
- [global]
- ## fruit settings
- min protocol = SMB2
- ea support = yes
- ## vfs objects = fruit streams_xattr
- fruit:metadata = stream
- fruit:model = Macmini
- fruit:veto_appledouble = no
- fruit:posix_rename = yes
- fruit:zero_file_id = yes
- fruit:wipe_intentionally_left_blank_rfork = yes
- fruit:delete_empty_adfiles = yes
- map to guest = bad user
- include=/etc/samba/smb.casa.conf`
- file.WriteToPath([]byte(smbConf), "/etc/samba", "smb.conf")
- }
- }
- func NewSharesService(db *gorm.DB) SharesService {
- return &sharesStruct{db: db}
- }
|