Skip to content

Commit

Permalink
Fix permission change cannot be unmount (IceWhaleTech#902)
Browse files Browse the repository at this point in the history
  • Loading branch information
LinkLeong authored Feb 16, 2023
1 parent 85a803d commit 96ff550
Show file tree
Hide file tree
Showing 10 changed files with 170 additions and 10 deletions.
4 changes: 2 additions & 2 deletions build/sysroot/usr/lib/systemd/system/rclone.service
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
Description=rclone

[Service]
ExecStartPre=/usr/bin/rm -f /tmp/rclone.sock
ExecStart=/usr/bin/rclone rcd --rc-addr unix:///tmp/rclone.sock --rc-no-auth --rc-allow-origin "*"
ExecStartPre=/usr/bin/rm -f /var/run/rclone/rclone.sock
ExecStart=/usr/bin/rclone rcd --rc-addr unix:///var/run/rclone/rclone.sock --rc-no-auth --rc-allow-origin "*"
Restart=always
RestartSec=10

Expand Down
1 change: 1 addition & 0 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ func main() {
"/v1/driver",
"/v1/cloud",
"/v1/recover",
"/v1/other",
route.V2APIPath,
route.V2DocPath,
route.V3FilePath,
Expand Down
10 changes: 6 additions & 4 deletions model/search.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package model

type SearchFileInfo struct {
Path string `json:"path"`
Name string `json:"name"`
Type int `json:"type"`
type SearchEngine struct {
Name string `json:"name"`
Icon string `json:"icon"`
SearchUrl string `json:"search_url"`
RecoUrl string `json:"reco_url"`
Data []string `json:"data"`
}
2 changes: 1 addition & 1 deletion pkg/utils/httper/drive.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ var DefaultTimeout = time.Second * 30

func NewRestyClient() *resty.Client {

unixSocket := "/tmp/rclone.sock"
unixSocket := "/var/run/rclone/rclone.sock"

transport := http.Transport{
Dial: func(_, _ string) (net.Conn, error) {
Expand Down
6 changes: 6 additions & 0 deletions route/v1.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,12 @@ func InitV1Router() *gin.Engine {
// merge to system
v1NotifyGroup.POST("/system_status", v1.PostSystemStatusNotify)
}
v1OtherGroup := v1Group.Group("/other")
v1OtherGroup.Use()
{
v1OtherGroup.GET("/search", v1.GetSearchResult)

}
}

return r
Expand Down
26 changes: 26 additions & 0 deletions route/v1/other.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package v1

import (
"fmt"

"github.com/IceWhaleTech/CasaOS/model"
"github.com/IceWhaleTech/CasaOS/pkg/utils/common_err"
"github.com/IceWhaleTech/CasaOS/service"
"github.com/gin-gonic/gin"
)

func GetSearchResult(c *gin.Context) {
key := c.Query("key")
if key == "" {
c.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.INVALID_PARAMS, Message: common_err.GetMsg(common_err.INVALID_PARAMS), Data: "key is empty"})
return
}
data, err := service.MyService.Other().Search(key)
if err != nil {
fmt.Println(err)
c.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.SERVICE_ERROR, Message: common_err.GetMsg(common_err.SERVICE_ERROR), Data: err.Error()})
return
}

c.JSON(common_err.SUCCESS, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: data})
}
8 changes: 5 additions & 3 deletions route/v1/samba.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,15 +199,17 @@ func DeleteSambaConnections(c *gin.Context) {
c.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.Record_NOT_EXIST, Message: common_err.GetMsg(common_err.Record_NOT_EXIST)})
return
}
mountPointList, err := service.MyService.System().GetDirPath(connection.MountPoint)
mountPointList, err := samba.GetSambaSharesList(connection.Host, connection.Port, connection.Username, connection.Password)
//mountPointList, err := service.MyService.System().GetDirPath(connection.MountPoint)
if err != nil {
c.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.SERVICE_ERROR, Message: common_err.GetMsg(common_err.SERVICE_ERROR), Data: err.Error()})
return
}
baseHostPath := "/mnt/" + connection.Host
for _, v := range mountPointList {
err := service.MyService.Connections().UnmountSmaba(v.Path)
err := service.MyService.Connections().UnmountSmaba(baseHostPath + "/" + v)
if err != nil {
logger.Error("unmount smaba error", zap.Error(err), zap.Any("path", v.Path))
logger.Error("unmount smaba error", zap.Error(err), zap.Any("path", baseHostPath+"/"+v))
c.JSON(common_err.SERVICE_ERROR, model.Result{Success: common_err.SERVICE_ERROR, Message: common_err.GetMsg(common_err.SERVICE_ERROR), Data: err.Error()})
return
}
Expand Down
104 changes: 104 additions & 0 deletions service/other.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package service

import (
"net/url"
"strings"
"sync"
"time"

"github.com/IceWhaleTech/CasaOS-Common/utils/logger"
"github.com/IceWhaleTech/CasaOS/model"
"github.com/go-resty/resty/v2"
"github.com/tidwall/gjson"
"go.uber.org/zap"
)

type OtherService interface {
Search(key string) ([]model.SearchEngine, error)
}

type otherService struct{}

func (s *otherService) Search(key string) ([]model.SearchEngine, error) {

engines := []model.SearchEngine{}
engines = append(engines, model.SearchEngine{
Name: "bing",
Icon: "https://files.codelife.cc/itab/search/bing.svg",
SearchUrl: "https://www.bing.com/search?q=",
RecoUrl: "https://www.bing.com/osjson.aspx?query=", // + keyword
}, model.SearchEngine{
Name: "google",
Icon: "https://files.codelife.cc/itab/search/google.svg",
SearchUrl: "https://www.google.com/search?q=",
RecoUrl: "https://www.google.com/complete/search?client=gws-wiz&xssi=t&hl=en-US&authuser=0&dpr=1&q=", // + keyword
}, model.SearchEngine{
Name: "baidu",
Icon: "https://files.codelife.cc/itab/search/baidu.svg",
SearchUrl: "https://www.baidu.com/s?wd=",
RecoUrl: "https://www.baidu.com/sugrec?json=1&prod=pc&wd=", // + keyword
}, model.SearchEngine{
Name: "duckduckgo",
Icon: "https://files.codelife.cc/itab/search/duckduckgo.svg",
SearchUrl: "https://duckduckgo.com/?q=",
RecoUrl: "https://duckduckgo.com/ac/?type=list&q=", // + keyword
}, model.SearchEngine{
Name: "startpage",
Icon: "https://www.startpage.com/sp/cdn/favicons/apple-touch-icon-60x60--default.png",
SearchUrl: "https://www.startpage.com/do/search?q=",
RecoUrl: "https://www.startpage.com/suggestions?segment=startpage.udog&lui=english&q=", // + keyword
})

client := resty.New()
client.SetTimeout(3 * time.Second) // 设置全局超时时间
var wg sync.WaitGroup
for i := 0; i < len(engines); i++ {
wg.Add(1)
go func(i int, k string) {
name := engines[i].Name
url := engines[i].RecoUrl + url.QueryEscape(k)
defer wg.Done()
resp, err := client.R().Get(url)
if err != nil {
logger.Error("Then get search result error: %v", zap.Error(err), zap.String("name", name), zap.String("url", url))
return
}
res := []string{}
if name == "bing" {
r := gjson.Get(resp.String(), "1")
for _, v := range r.Array() {
res = append(res, v.String())
}
} else if name == "google" {
r := gjson.Get(strings.Replace(resp.String(), ")]}'", "", 1), "0.#.0")
for _, v := range r.Array() {
res = append(res, strings.ReplaceAll(strings.ReplaceAll(v.String(), "<b>", " "), "</b>", ""))
}
} else if name == "baidu" {
r := gjson.Get(resp.String(), "g.#.q")
for _, v := range r.Array() {
res = append(res, v.String())
}
} else if name == "duckduckgo" {
r := gjson.Get(resp.String(), "1")
for _, v := range r.Array() {
res = append(res, v.String())
}
} else if name == "startpage" {
r := gjson.Get(resp.String(), "suggestions.#.text")
for _, v := range r.Array() {
res = append(res, v.String())
}
}
engines[i].Data = res
}(i, key)
}
wg.Wait()

return engines, nil

}

func NewOtherService() OtherService {
return &otherService{}
}
12 changes: 12 additions & 0 deletions service/other_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package service

import (
"testing"
)

func TestSearch(t *testing.T) {
if d, e := NewOtherService().Search("test"); e != nil || d == nil {

t.Error("then test search error", e)
}
}
7 changes: 7 additions & 0 deletions service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ type Repository interface {
FsLinkService() FsLinkService
FsService() FsService
MessageBus() *message_bus.ClientWithResponses
Other() OtherService
}

func NewService(db *gorm.DB, RuntimePath string) Repository {
Expand All @@ -69,6 +70,7 @@ func NewService(db *gorm.DB, RuntimePath string) Repository {
fs_list: NewFsListService(),
fs_link: NewFsLinkService(),
fs: NewFsService(),
other: NewOtherService(),
}
}

Expand All @@ -88,6 +90,11 @@ type store struct {
fs_link FsLinkService
fs FsService
health HealthService
other OtherService
}

func (c *store) Other() OtherService {
return c.other
}

func (c *store) FsLinkService() FsLinkService {
Expand Down

0 comments on commit 96ff550

Please sign in to comment.