move common proxy to CasaOS-Common (#643)
...and use gateway proxy from CasaOS-Common
This commit is contained in:
parent
f210f29ae5
commit
0fb5cab480
8 changed files with 11 additions and 218 deletions
|
@ -1,86 +0,0 @@
|
|||
package common
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
CasaOSURLFilename = "casaos.url"
|
||||
APICasaOSNotify = "/v1/notify"
|
||||
)
|
||||
|
||||
type NotifyService interface {
|
||||
SendNotify(path string, message map[string]interface{}) error
|
||||
SendSystemStatusNotify(message map[string]interface{}) error
|
||||
}
|
||||
type notifyService struct {
|
||||
address string
|
||||
}
|
||||
|
||||
func (n *notifyService) SendNotify(path string, message map[string]interface{}) error {
|
||||
url := strings.TrimSuffix(n.address, "/") + APICasaOSNotify + "/" + path
|
||||
body, err := json.Marshal(message)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
response, err := http.Post(url, "application/json", bytes.NewBuffer(body))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if response.StatusCode != http.StatusOK {
|
||||
return errors.New("failed to send notify (status code: " + fmt.Sprint(response.StatusCode) + ")")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// disk: "sys_disk":{"size":56866869248,"avail":5855485952,"health":true,"used":48099700736}
|
||||
// usb: "sys_usb":[{"name": "sdc","size": 7747397632,"model": "DataTraveler_2.0","avail": 7714418688,"children": null}]
|
||||
func (n *notifyService) SendSystemStatusNotify(message map[string]interface{}) error {
|
||||
url := strings.TrimSuffix(n.address, "/") + APICasaOSNotify + "/system_status"
|
||||
|
||||
body, err := json.Marshal(message)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
response, err := http.Post(url, "application/json", bytes.NewBuffer(body))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if response.StatusCode != http.StatusOK {
|
||||
return errors.New("failed to send notify (status code: " + fmt.Sprint(response.StatusCode) + ")")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewNotifyService(runtimePath string) (NotifyService, error) {
|
||||
casaosAddressFile := filepath.Join(runtimePath, CasaOSURLFilename)
|
||||
|
||||
buf, err := os.ReadFile(casaosAddressFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
address := string(buf)
|
||||
|
||||
response, err := http.Get(address + "/ping")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if response.StatusCode != http.StatusOK {
|
||||
return nil, errors.New("failed to ping casaos service")
|
||||
}
|
||||
|
||||
return ¬ifyService{
|
||||
address: address,
|
||||
}, nil
|
||||
}
|
|
@ -1,29 +0,0 @@
|
|||
package common
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestSendNotify(t *testing.T) {
|
||||
notify, err := NewNotifyService("/var/run/casaos")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = notify.SendNotify("test", map[string]interface{}{
|
||||
"test": "test",
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSendSystemStatusNotify(t *testing.T) {
|
||||
notify, err := NewNotifyService("/var/run/casaos")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = notify.SendSystemStatusNotify(map[string]interface{}{
|
||||
"sys_usb": `[{"name": "sdc","size": 7747397632,"model": "DataTraveler_2.0","avail": 7714418688,"children": null}]`,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
|
@ -1,78 +0,0 @@
|
|||
package common
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
APICasaOSShare = "/v1/samba/shares"
|
||||
)
|
||||
|
||||
type ShareService interface {
|
||||
DeleteShare(id string) error
|
||||
}
|
||||
type shareService struct {
|
||||
address string
|
||||
}
|
||||
|
||||
func (n *shareService) DeleteShare(id string) error {
|
||||
url := strings.TrimSuffix(n.address, "/") + APICasaOSShare + "/" + id
|
||||
fmt.Println(url)
|
||||
message := "{}"
|
||||
body, err := json.Marshal(message)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
client := &http.Client{}
|
||||
|
||||
// Create request
|
||||
req, err := http.NewRequest("DELETE", url, bytes.NewBuffer(body))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Fetch Request
|
||||
response, err := client.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer response.Body.Close()
|
||||
|
||||
if response.StatusCode != http.StatusOK {
|
||||
return errors.New("failed to send share (status code: " + fmt.Sprint(response.StatusCode) + ")")
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func NewShareService(runtimePath string) (ShareService, error) {
|
||||
casaosAddressFile := filepath.Join(runtimePath, CasaOSURLFilename)
|
||||
|
||||
buf, err := os.ReadFile(casaosAddressFile)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
address := string(buf)
|
||||
|
||||
response, err := http.Get(address + "/ping")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if response.StatusCode != 200 {
|
||||
return nil, errors.New("failed to ping casaos service")
|
||||
}
|
||||
|
||||
return &shareService{
|
||||
address: address,
|
||||
}, nil
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
package common
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestDeleteShare(t *testing.T) {
|
||||
share, err := NewShareService("/var/run/casaos")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
err = share.DeleteShare("1")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
2
go.mod
2
go.mod
|
@ -4,7 +4,7 @@ go 1.16
|
|||
|
||||
require (
|
||||
github.com/Curtis-Milo/nat-type-identifier-go v0.0.0-20220215191915-18d42168c63d
|
||||
github.com/IceWhaleTech/CasaOS-Common v0.0.0-20220929035515-b1287110d6d8
|
||||
github.com/IceWhaleTech/CasaOS-Common v0.3.7-1
|
||||
github.com/IceWhaleTech/CasaOS-Gateway v0.3.6
|
||||
github.com/Microsoft/go-winio v0.5.0 // indirect
|
||||
github.com/ambelovsky/go-structs v1.1.0 // indirect
|
||||
|
|
4
go.sum
4
go.sum
|
@ -84,8 +84,8 @@ github.com/Curtis-Milo/nat-type-identifier-go v0.0.0-20220215191915-18d42168c63d
|
|||
github.com/Curtis-Milo/nat-type-identifier-go v0.0.0-20220215191915-18d42168c63d/go.mod h1:lW9x+yEjqKdPbE3+cf2fGPJXCw/hChX3Omi9QHTLFsQ=
|
||||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||
github.com/IceWhaleTech/CasaOS-Common v0.0.0-20220901034123-ca130f6b5ce9/go.mod h1:2MiivEMzvh41codhEKUcn46WK3Ffesop/04qa9jsvQk=
|
||||
github.com/IceWhaleTech/CasaOS-Common v0.0.0-20220929035515-b1287110d6d8 h1:r8nhgQ6tnrn6ikXN9aLH/K4H4H64Nc0hZ6jyW2B22x0=
|
||||
github.com/IceWhaleTech/CasaOS-Common v0.0.0-20220929035515-b1287110d6d8/go.mod h1:2MiivEMzvh41codhEKUcn46WK3Ffesop/04qa9jsvQk=
|
||||
github.com/IceWhaleTech/CasaOS-Common v0.3.7-1 h1:paay9dFGAWjNcjtCrN6ymvuU21KtxPoIpNG3wo10ufk=
|
||||
github.com/IceWhaleTech/CasaOS-Common v0.3.7-1/go.mod h1:2MiivEMzvh41codhEKUcn46WK3Ffesop/04qa9jsvQk=
|
||||
github.com/IceWhaleTech/CasaOS-Gateway v0.3.6 h1:2tQQo85+jzbbjqIsKKn77QlAA73bc7vZsVCFvWnK4mg=
|
||||
github.com/IceWhaleTech/CasaOS-Gateway v0.3.6/go.mod h1:hnZwGUzcOyiufMpVO7l3gu2gAm6Ws4TY4Nlj3kMshXA=
|
||||
github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
|
||||
|
|
6
main.go
6
main.go
|
@ -8,7 +8,7 @@ import (
|
|||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/IceWhaleTech/CasaOS-Gateway/common"
|
||||
"github.com/IceWhaleTech/CasaOS-Common/model"
|
||||
"github.com/IceWhaleTech/CasaOS/model/notify"
|
||||
"github.com/IceWhaleTech/CasaOS/pkg/cache"
|
||||
"github.com/IceWhaleTech/CasaOS/pkg/config"
|
||||
|
@ -112,7 +112,7 @@ func main() {
|
|||
}
|
||||
routers := []string{"sys", "apps", "container", "app-categories", "port", "file", "folder", "batch", "image", "samba", "notify"}
|
||||
for _, v := range routers {
|
||||
err = service.MyService.Gateway().CreateRoute(&common.Route{
|
||||
err = service.MyService.Gateway().CreateRoute(&model.Route{
|
||||
Path: "/v1/" + v,
|
||||
Target: "http://" + listener.Addr().String(),
|
||||
})
|
||||
|
@ -126,7 +126,7 @@ func main() {
|
|||
time.Sleep(time.Second * 2)
|
||||
// v0.3.6
|
||||
if config.ServerInfo.HttpPort != "" {
|
||||
changePort := common.ChangePortRequest{}
|
||||
changePort := model.ChangePortRequest{}
|
||||
changePort.Port = config.ServerInfo.HttpPort
|
||||
err := service.MyService.Gateway().ChangePort(&changePort)
|
||||
if err == nil {
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
gateway "github.com/IceWhaleTech/CasaOS-Gateway/common"
|
||||
"github.com/IceWhaleTech/CasaOS-Common/external"
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/patrickmn/go-cache"
|
||||
"gorm.io/gorm"
|
||||
|
@ -35,12 +35,12 @@ type Repository interface {
|
|||
System() SystemService
|
||||
Shares() SharesService
|
||||
Connections() ConnectionsService
|
||||
Gateway() gateway.ManagementService
|
||||
Gateway() external.ManagementService
|
||||
}
|
||||
|
||||
func NewService(db *gorm.DB, RuntimePath string) Repository {
|
||||
|
||||
gatewayManagement, err := gateway.NewManagementService(RuntimePath)
|
||||
gatewayManagement, err := external.NewManagementService(RuntimePath)
|
||||
if err != nil && len(RuntimePath) > 0 {
|
||||
panic(err)
|
||||
}
|
||||
|
@ -68,10 +68,10 @@ type store struct {
|
|||
system SystemService
|
||||
shares SharesService
|
||||
connections ConnectionsService
|
||||
gateway gateway.ManagementService
|
||||
gateway external.ManagementService
|
||||
}
|
||||
|
||||
func (c *store) Gateway() gateway.ManagementService {
|
||||
func (c *store) Gateway() external.ManagementService {
|
||||
return c.gateway
|
||||
}
|
||||
func (s *store) Connections() ConnectionsService {
|
||||
|
|
Loading…
Reference in a new issue