aboutsummaryrefslogtreecommitdiff
path: root/rpc.go
diff options
context:
space:
mode:
Diffstat (limited to 'rpc.go')
-rw-r--r--rpc.go54
1 files changed, 21 insertions, 33 deletions
diff --git a/rpc.go b/rpc.go
index dc41be4..9d18d16 100644
--- a/rpc.go
+++ b/rpc.go
@@ -1,11 +1,9 @@
package goxy
import (
- "encoding/json"
"errors"
"fmt"
"net/rpc"
- "os"
)
var (
@@ -16,16 +14,6 @@ var (
const RPCPort = ":8000"
-type Entries map[string]Entry
-
-// Entry holds routing settings
-type Entry struct {
- Host string // URL
- Upstream string // URL
- Cert []byte // PEM
- Key []byte // PEM
-}
-
type GoXY struct {
server *Server
}
@@ -43,13 +31,31 @@ func DialRPC(server string) (*rpc.Client, error) {
}
// Add adds a new route
-func (s *GoXY) Add(e Entry, _ *struct{}) error {
- return s.server.AddEntry(e)
+func (s *GoXY) Add(r Route, _ *struct{}) error {
+ if r.Host == "" || r.Upstream == "" {
+ return ErrNoHost
+ }
+ slug, isTLS, err := Slug(r.Host)
+ if err != nil {
+ return err
+ }
+ if isTLS && (r.Cert == nil || r.Key == nil) {
+ return ErrNoCert
+ }
+ s.server.Routes[slug] = r
+ defer s.server.Save(s.server.DataFile)
+ return s.server.UpdateMux()
}
// Del removes a route
func (s *GoXY) Del(host string, _ *struct{}) error {
- return s.server.DelEntry(host)
+ slug, _, err := Slug(host)
+ if err != nil {
+ return err
+ }
+ delete(s.server.Routes, slug)
+ defer s.server.Save(s.server.DataFile)
+ return s.server.UpdateMux()
}
// List routes
@@ -59,21 +65,3 @@ func (s GoXY) List(_ struct{}, ret *[]string) error {
}
return nil
}
-
-func (e Entries) Save(fname string) error {
- fd, err := os.Create(fname)
- if err != nil {
- return err
- }
- defer fd.Close()
- return json.NewEncoder(fd).Encode(e)
-}
-
-func (e *Entries) Load(fname string) error {
- fd, err := os.Open(fname)
- if err != nil {
- return err
- }
- defer fd.Close()
- return json.NewDecoder(fd).Decode(e)
-}