hotfixes for repo. Now works.

This commit is contained in:
afeiszli
2021-03-25 22:29:36 -04:00
parent 6343207ea5
commit e489a18492
25 changed files with 232 additions and 757 deletions
Binary file not shown.
+3 -2
View File
@@ -79,7 +79,8 @@ func grpcAuthorize(ctx context.Context) error {
groupexists, err := functions.GroupExists(group)
if err != nil {
return err
return status.Errorf(codes.Unauthenticated, "Unauthorized. Group does not exist: " + group)
}
emptynode := models.Node{}
node, err := functions.GetNodeByMacAddress(group, mac)
@@ -122,7 +123,7 @@ func (s *NodeServiceServer) Login(ctx context.Context, req *nodepb.LoginRequest)
//Search DB for node with Mac Address. Ignore pending nodes (they should not be able to authenticate with API untill approved).
collection := mongoconn.Client.Database("wirecat").Collection("nodes")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
var err = collection.FindOne(ctx, bson.M{ "macaddress": macaddress, "ispending": false }).Decode(&result)
var err = collection.FindOne(ctx, bson.M{ "macaddress": macaddress}).Decode(&result)
defer cancel()
+1 -3
View File
@@ -1,7 +1,6 @@
package controller
import (
// "github.com/davecgh/go-spew/spew"
"gopkg.in/go-playground/validator.v9"
"log"
"fmt"
@@ -345,7 +344,6 @@ func CreateNode(node models.Node, groupName string) (models.Node, error) {
func NodeCheckIn(node models.Node, groupName string) (models.CheckInResponse, error) {
var response models.CheckInResponse
parentgroup, err := functions.GetParentGroup(groupName)
@@ -360,6 +358,7 @@ func NodeCheckIn(node models.Node, groupName string) (models.CheckInResponse, er
return response, err
}
if parentnode.IsPending {
err = fmt.Errorf("%w; Node checking in is still pending: " + node.MacAddress, err)
response.IsPending = true
return response, err
}
@@ -377,7 +376,6 @@ func NodeCheckIn(node models.Node, groupName string) (models.CheckInResponse, er
if parentnodelm < grouplm {
response.NeedConfigUpdate = true
}
if peerlistlm < peerslm {
response.NeedPeerUpdate = true
}
+5 -10
View File
@@ -1,17 +1,11 @@
package controller
import (
// "github.com/davecgh/go-spew/spew"
"context"
"context"
"fmt"
// "errors"
// "time"
// "go.mongodb.org/mongo-driver/bson"
// "golang.org/x/crypto/bcrypt"
nodepb "github.com/gravitl/netmaker/grpc"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/functions"
// "github.com/gravitl/netmaker/mongoconn"
"go.mongodb.org/mongo-driver/mongo"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -145,7 +139,7 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.CreateNo
func (s *NodeServiceServer) CheckIn(ctx context.Context, req *nodepb.CheckInReq) (*nodepb.CheckInRes, error) {
// Get the protobuf node type from the protobuf request type
// Essentially doing req.Node to access the struct with a nil check
data := req.GetNode()
data := req.GetNode()
//postchanges := req.GetPostchanges()
// Now we have to convert this into a NodeItem type to convert into BSON
node := models.Node{
@@ -164,12 +158,13 @@ func (s *NodeServiceServer) CheckIn(ctx context.Context, req *nodepb.CheckInReq)
checkinresponse, err := NodeCheckIn(node, node.Group)
if err != nil {
err = fmt.Errorf("%w; Couldnt Check in", err)
// return internal gRPC error to be handled later
if checkinresponse == (models.CheckInResponse{}) || !checkinresponse.IsPending {
return nil, status.Errorf(
codes.Internal,
fmt.Sprintf("Internal error: %v", err),
)
}
}
// return the node in a CreateNodeRes type
response := &nodepb.CheckInRes{
@@ -268,7 +263,7 @@ func (s *NodeServiceServer) DeleteNode(ctx context.Context, req *nodepb.DeleteNo
return nil, status.Errorf(codes.NotFound, fmt.Sprintf("Could not find/delete node with mac address %s", macaddress))
}
fmt.Println("updating group last modified of" + req.GetGroupName())
fmt.Println("updating group last modified of " + req.GetGroupName())
err = SetGroupNodesLastModified(req.GetGroupName())
if err != nil {
fmt.Println("Error updating Group")
+16 -2
View File
@@ -150,8 +150,14 @@ func authorize(groupCheck bool, authGroup string, next http.Handler) http.Handle
if len(tokenSplit) > 1 {
authToken = tokenSplit[1]
} else {
errorResponse = models.ErrorResponse{
Code: http.StatusUnauthorized, Message: "W1R3: Missing Auth Token.",
}
returnErrorResponse(w, r, errorResponse)
}
//This checks if
//A: the token is the master password
//B: the token corresponds to a mac address, and if so, which one
@@ -159,7 +165,10 @@ func authorize(groupCheck bool, authGroup string, next http.Handler) http.Handle
macaddress, _, err := functions.VerifyToken(authToken)
if err != nil {
return
errorResponse = models.ErrorResponse{
Code: http.StatusUnauthorized, Message: "W1R3: Error Verifying Auth Token.",
}
returnErrorResponse(w, r, errorResponse)
}
var isAuthorized = false
@@ -179,7 +188,10 @@ func authorize(groupCheck bool, authGroup string, next http.Handler) http.Handle
case "group":
node, err := functions.GetNodeByMacAddress(params["group"], macaddress)
if err != nil {
return
errorResponse = models.ErrorResponse{
Code: http.StatusUnauthorized, Message: "W1R3: Missing Auth Token.",
}
returnErrorResponse(w, r, errorResponse)
}
isAuthorized = (node.Group == params["group"])
case "node":
@@ -567,6 +579,8 @@ func uncordonNode(w http.ResponseWriter, r *http.Request) {
mongoconn.GetError(errN, w)
return
}
fmt.Println("Node " + node.Name + " uncordoned.")
json.NewEncoder(w).Encode("SUCCESS")
}
+10 -3
View File
@@ -129,7 +129,12 @@ func authorizeUser(next http.Handler) http.HandlerFunc {
if len(tokenSplit) > 1 {
authToken = tokenSplit[1]
}
} else {
errorResponse = models.ErrorResponse{
Code: http.StatusUnauthorized, Message: "W1R3: Missing Auth Token.",
}
returnErrorResponse(w, r, errorResponse)
}
//This checks if
//A: the token is the master password
@@ -138,8 +143,10 @@ func authorizeUser(next http.Handler) http.HandlerFunc {
username, _, err := functions.VerifyUserToken(authToken)
if err != nil {
json.NewEncoder(w).Encode(err)
return
errorResponse = models.ErrorResponse{
Code: http.StatusUnauthorized, Message: "W1R3: Error Verifying Auth Token.",
}
returnErrorResponse(w, r, errorResponse)
}
isAuthorized := username != ""
+1 -1
View File
@@ -3,7 +3,7 @@
# if i've done my work correctly, this file will be defunct
# refer to config folder for new method
export API_PORT=8081
export GRPC_PORT=5051
export GRPC_PORT=50051
export MONGO_USER=mongoadmin
export MONGO_PASS=mongopass
export MONGO_HOST=localhost
+2 -1
View File
@@ -66,7 +66,8 @@ func GroupExists(name string) (bool, error) {
if err == mongo.ErrNoDocuments {
return false, err
}
log.Fatal(err)
fmt.Println("ERROR RETRIEVING GROUP!")
fmt.Println(err)
}
return true, err
}
+5 -7
View File
@@ -6,7 +6,7 @@ require (
github.com/davecgh/go-spew v1.1.1
github.com/dgrijalva/jwt-go v3.2.0+incompatible
github.com/go-playground/universal-translator v0.17.0 // indirect
github.com/golang/protobuf v1.4.3
github.com/golang/protobuf v1.5.1
github.com/gorilla/handlers v1.5.1
github.com/gorilla/mux v1.8.0
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0
@@ -18,14 +18,12 @@ require (
github.com/takama/daemon v1.0.0
github.com/vishvananda/netlink v1.1.0
go.mongodb.org/mongo-driver v1.4.3
golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72
golang.org/x/net v0.0.0-20210119194325-5f4716e94777 // indirect
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c // indirect
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
golang.org/x/net v0.0.0-20210324205630-d1beb07c2056 // indirect
golang.org/x/text v0.3.5 // indirect
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20200609130330-bd2cb7843e1b
google.golang.org/genproto v0.0.0-20210201151548-94839c025ad4 // indirect
google.golang.org/grpc v1.35.0
google.golang.org/protobuf v1.25.0 // indirect
google.golang.org/genproto v0.0.0-20210325141258-5636347f2b14 // indirect
google.golang.org/grpc v1.36.0
gopkg.in/go-playground/validator.v9 v9.31.0
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
)
+35
View File
@@ -105,6 +105,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1 h1:jAbXjIeW2ZSW2AwFxlGTDoc2CjI2XujLkV3ArsZFCvc=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@@ -115,6 +118,7 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
@@ -279,6 +283,7 @@ github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhe
github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc h1:n+nNi93yXLkJvKwXNP9d55HC7lGK4H/SRcwB5IaUZLo=
github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.mongodb.org/mongo-driver v1.4.3 h1:moga+uhicpVshTyaqY9L23E6QqwcHRUv1sqyOsoyOO8=
go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc=
@@ -297,8 +302,11 @@ golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5 h1:58fnuSXlxZmFdJyvtTFVmVhcMLU6v5fEb/ok4wyqtNU=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72 h1:+ELyKg6m8UBf0nPFSqD0mi7zUfwPyXo23HNjMnXPz7w=
golang.org/x/crypto v0.0.0-20200204104054-c9f3fb736b72/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -313,10 +321,13 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -336,8 +347,12 @@ golang.org/x/net v0.0.0-20191003171128-d98b1b443823/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20191007182048-72f939374954/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew=
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
golang.org/x/net v0.0.0-20210324205630-d1beb07c2056 h1:sANdAef76Ioam9aQUUdcAqricwY/WUaMc4+7LY4eGg8=
golang.org/x/net v0.0.0-20210324205630-d1beb07c2056/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -349,6 +364,8 @@ golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -374,9 +391,15 @@ golang.org/x/sys v0.0.0-20191003212358-c178f38b412c/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200722175500-76b94024e4b6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210324051608-47abb6519492 h1:Paq34FxTluEPvVyayQqMPgHm+vTOrIifmcYxFBx9TLg=
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -409,8 +432,13 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.zx2c4.com/wireguard v0.0.20200121 h1:vcswa5Q6f+sylDfjqyrVNNrjsFUUbPsgAQTBCAg/Qf8=
golang.zx2c4.com/wireguard v0.0.20200121/go.mod h1:P2HsVp8SKwZEufsnezXZA4GRX/T49/HlU7DGuelXsU4=
golang.zx2c4.com/wireguard v0.0.20201119 h1:WJ4IKfT3SLG+YbM9aeZlgYB+X7hKzO66GEGBmxJPhjE=
@@ -438,6 +466,8 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaR
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20210201151548-94839c025ad4 h1:HPkKL4eEh/nemF/FRzYMrFsAh1ZPm5t8NqKBI/Ejlg0=
google.golang.org/genproto v0.0.0-20210201151548-94839c025ad4/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210325141258-5636347f2b14 h1:0VNRpy5TroA/6mYt3pPEq+E3oomxLJ+FUit3+oIsUy4=
google.golang.org/genproto v0.0.0-20210325141258-5636347f2b14/go.mod h1:f2Bd7+2PlaVKmvKQ52aspJZXIDaRQBVdOOBfJ5i8OEs=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -447,6 +477,8 @@ google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.35.0 h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.0 h1:o1bcQ6imQMIOpdrO3SWf2z5RV72WbDwdXuK0MDlc8As=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -459,6 +491,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-12
View File
@@ -1,6 +1,4 @@
//TODO: er is the wrapper of the service method implementation. It is the resUpdate README with new functions
//TODO: Harden. Add failover for every method and agent calls
//TODO: Make configurable. Use the config file for settings
//TODO: Figure out why mongodb keeps failing (log rotation?)
package main
@@ -32,16 +30,10 @@ func main() {
go runGRPC(&waitgroup)
}
//TODO: We need to break up this package for clarity
//We need groupController and nodeController, and then
//here we will call some third package with HandleRequests
//which will just set up and call the other 2
if config.Config.Server.RestBackend {
waitgroup.Add(1)
controller.HandleRESTRequests(&waitgroup)
}
if !config.Config.Server.RestBackend && !config.Config.Server.AgentBackend {
fmt.Println("Oops! No Server Mode selected. Nothing being served.")
}
@@ -75,14 +67,10 @@ func runGRPC(wg *sync.WaitGroup) {
log.Fatalf("Unable to listen on port" + grpcport + ": %v", err)
}
// Set options, here we can configure things like TLS support
//opts := []grpc.ServerOption{}
// Create new gRPC server with (blank) options
s := grpc.NewServer(
authServerUnaryInterceptor(),
authServerStreamInterceptor(),
)
//s := grpc.NewServer(opts...)
// Create NodeService type
srv := &service.NodeServiceServer{}
+35 -26
View File
@@ -6,7 +6,7 @@ import (
"fmt"
"log"
"gopkg.in/yaml.v3"
homedir "github.com/mitchellh/go-homedir"
//homedir "github.com/mitchellh/go-homedir"
)
var Config *ClientConfig
@@ -42,15 +42,23 @@ type NodeConfig struct {
//reading in the env file
func Write(config *ClientConfig) error{
nofile := false
home, err := homedir.Dir()
//home, err := homedir.Dir()
_, err := os.Stat("/etc/netclient")
if os.IsNotExist(err) {
os.Mkdir("/etc/netclient", 744)
} else if err != nil {
return err
}
home := "/etc/netclient"
if err != nil {
log.Fatal(err)
}
file := fmt.Sprintf(home + "/.wcconfig")
file := fmt.Sprintf(home + "/.netconfig")
f, err := os.OpenFile(file, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, os.ModePerm)
if err != nil {
nofile = true
//fmt.Println("Could not access " + home + "/.wcconfig, proceeding...")
//fmt.Println("Could not access " + home + "/.netconfig, proceeding...")
}
defer f.Close()
@@ -62,7 +70,7 @@ func Write(config *ClientConfig) error{
}
} else {
newf, err := os.Create(home + "/.wcconfig")
newf, err := os.Create(home + "/.netconfig")
err = yaml.NewEncoder(newf).Encode(config)
defer newf.Close()
if err != nil {
@@ -75,17 +83,22 @@ func Write(config *ClientConfig) error{
}
func WriteServer(server string, accesskey string) error{
nofile := false
home, err := homedir.Dir()
if err != nil {
fmt.Println("couldnt find home dir")
//home, err := homedir.Dir()
_, err := os.Stat("/etc/netclient")
if os.IsNotExist(err) {
os.Mkdir("/etc/netclient", 744)
} else if err != nil {
fmt.Println("couldnt find or create /etc/netclient")
return err
}
file := fmt.Sprintf(home + "/.wcconfig")
home := "/etc/netclient"
file := fmt.Sprintf(home + "/.netconfig")
//f, err := os.Open(file)
f, err := os.OpenFile(file, os.O_CREATE|os.O_RDWR, 0666)
//f, err := ioutil.ReadFile(file)
if err != nil {
fmt.Println("couldnt open wcconfig")
fmt.Println("couldnt open netconfig")
fmt.Println(err)
nofile = true
//err = nil
@@ -97,7 +110,7 @@ func WriteServer(server string, accesskey string) error{
var cfg ClientConfig
if !nofile {
fmt.Println("Writing to existing config file at " + home + "/.wcconfig")
fmt.Println("Writing to existing config file at " + home + "/.netconfig")
decoder := yaml.NewDecoder(f)
err = decoder.Decode(&cfg)
//err = yaml.Unmarshal(f, &cfg)
@@ -108,7 +121,7 @@ func WriteServer(server string, accesskey string) error{
f.Close()
f, err = os.OpenFile(file, os.O_CREATE|os.O_RDWR|os.O_TRUNC, 0666)
if err != nil {
fmt.Println("couldnt open wcconfig")
fmt.Println("couldnt open netconfig")
fmt.Println(err)
nofile = true
//err = nil
@@ -131,12 +144,12 @@ func WriteServer(server string, accesskey string) error{
return err
}
} else {
fmt.Println("Creating new config file at " + home + "/.wcconfig")
fmt.Println("Creating new config file at " + home + "/.netconfig")
cfg.Server.Address = server
cfg.Server.AccessKey = accesskey
newf, err := os.Create(home + "/.wcconfig")
newf, err := os.Create(home + "/.netconfig")
err = yaml.NewEncoder(newf).Encode(cfg)
defer newf.Close()
if err != nil {
@@ -152,18 +165,16 @@ func WriteServer(server string, accesskey string) error{
func(config *ClientConfig) ReadConfig() {
nofile := false
home, err := homedir.Dir()
if err != nil {
log.Fatal(err)
}
file := fmt.Sprintf(home + "/.wcconfig")
//home, err := homedir.Dir()
home := "/etc/netclient"
file := fmt.Sprintf(home + "/.netconfig")
//f, err := os.Open(file)
f, err := os.OpenFile(file, os.O_RDONLY, 0666)
if err != nil {
fmt.Println("trouble opening file")
fmt.Println(err)
nofile = true
//fmt.Println("Could not access " + home + "/.wcconfig, proceeding...")
//fmt.Println("Could not access " + home + "/.netconfig, proceeding...")
}
defer f.Close()
@@ -185,15 +196,13 @@ func(config *ClientConfig) ReadConfig() {
func readConfig() *ClientConfig {
nofile := false
home, err := homedir.Dir()
if err != nil {
log.Fatal(err)
}
file := fmt.Sprintf(home + "/.wcconfig")
//home, err := homedir.Dir()
home := "/etc/netclient"
file := fmt.Sprintf(home + "/.netconfig")
f, err := os.Open(file)
if err != nil {
nofile = true
fmt.Println("Could not access " + home + "/.wcconfig, proceeding...")
fmt.Println("Could not access " + home + "/.netconfig, proceeding...")
}
defer f.Close()
Binary file not shown.
+8 -7
View File
@@ -3,7 +3,7 @@ package functions
import (
"github.com/gravitl/netmaker/netclient/config"
"fmt"
"os"
// "os"
"context"
"io/ioutil"
"google.golang.org/grpc/metadata"
@@ -15,15 +15,16 @@ import (
// CreateJWT func will used to create the JWT while signing in and signing out
func SetJWT(client nodepb.NodeServiceClient) (context.Context, error) {
home, err := os.UserHomeDir()
tokentext, err := ioutil.ReadFile(home + "/.wctoken")
//home, err := os.UserHomeDir()
home := "/etc/netclient"
tokentext, err := ioutil.ReadFile(home + "/.nettoken")
if err != nil {
fmt.Println("Error reading token. Logging in to retrieve new token.")
err = AutoLogin(client)
if err != nil {
return nil, status.Errorf(codes.Unauthenticated, fmt.Sprintf("Something went wrong with Auto Login: %v", err))
}
tokentext, err = ioutil.ReadFile(home + "/.wctoken")
tokentext, err = ioutil.ReadFile(home + "/.nettoken")
if err != nil {
return nil, status.Errorf(codes.Unauthenticated, fmt.Sprintf("Something went wrong: %v", err))
}
@@ -38,7 +39,8 @@ func SetJWT(client nodepb.NodeServiceClient) (context.Context, error) {
}
func AutoLogin(client nodepb.NodeServiceClient) error {
home, err := os.UserHomeDir()
//home, err := os.UserHomeDir()
home := "/etc/netclient"
nodecfg := config.Config.Node
login := &nodepb.LoginRequest{
Password: nodecfg.Password,
@@ -49,9 +51,8 @@ func AutoLogin(client nodepb.NodeServiceClient) error {
if err != nil {
return err
}
fmt.Printf("Token: %s\n", res.Accesstoken)
tokenstring := []byte(res.Accesstoken)
err = ioutil.WriteFile(home + "/.wctoken", tokenstring, 0644)
err = ioutil.WriteFile(home + "/.nettoken", tokenstring, 0644)
if err != nil {
return err
}
+60 -22
View File
@@ -20,7 +20,7 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
"golang.zx2c4.com/wireguard/wgctrl/wgtypes"
homedir "github.com/mitchellh/go-homedir"
//homedir "github.com/mitchellh/go-homedir"
)
var (
@@ -241,7 +241,7 @@ func Install(accesskey string, password string, server string, group string, noa
Endpoint: endpoint,
}
fmt.Println("Writing node settings to wcconfig file.")
fmt.Println("Writing node settings to netconfig file.")
err = modConfig(postnode)
if err != nil {
return err
@@ -284,7 +284,7 @@ func Install(accesskey string, password string, server string, group string, noa
fmt.Println("Node is marked as PENDING.")
fmt.Println("Awaiting approval from Admin before configuring WireGuard.")
if !noauto {
fmt.Println("Configuring WireCat Service.")
fmt.Println("Configuring Netmaker Service.")
err = ConfigureSystemD()
return err
}
@@ -555,14 +555,17 @@ func CheckIn() error {
node := getNode()
nodecfg := config.Config.Node
servercfg := config.Config.Server
fmt.Println("Checking into server: " + servercfg.Address)
setupcheck := true
var wcclient nodepb.NodeServiceClient
var requestOpts grpc.DialOption
requestOpts = grpc.WithInsecure()
conn, err := grpc.Dial(servercfg.Address, requestOpts)
if err != nil {
fmt.Printf("Cant dial GRPC server: %v", err)
return err
log.Fatalf("Unable to establish client connection to localhost:50051: %v", err)
}
wcclient = nodepb.NewNodeServiceClient(conn)
@@ -570,10 +573,11 @@ func CheckIn() error {
fmt.Println("Authenticating with GRPC Server")
ctx, err = SetJWT(wcclient)
if err != nil {
fmt.Printf("Failed to authenticate: %v", err)
return err
log.Fatalf("Failed to authenticate: %v", err)
}
fmt.Println("Authenticated")
fmt.Println("Checking In.")
var header metadata.MD
@@ -585,16 +589,14 @@ func CheckIn() error {
grpc.Header(&header),
)
if err != nil {
if checkinres != nil && checkinres.Checkinresponse.Ispending {
fmt.Println("Node is in pending status. Waiting for Admin approval of node before making furtherupdates.")
return nil
}
fmt.Printf("Unable to process Check In request: %v", err)
return err
log.Fatalf("Unable to process Check In request: %v", err)
}
fmt.Println("Checked in.")
/*
if nodecfg.PostChanges && checkinres.Checkinresponse.Nodeupdated {
nodecfg.PostChanges = false
modConfig(readres, false)
}
*/
if checkinres.Checkinresponse.Ispending {
fmt.Println("Node is in pending status. Waiting for Admin approval of node before making furtherupdates.")
return err
@@ -621,10 +623,12 @@ func CheckIn() error {
return err
log.Fatalf("Error: %v", err)
}
setupcheck = false
} else if nodecfg.PostChanges == "true" {
fmt.Println("Node has requested to update remote config.")
fmt.Println("Posting local config to remote server.")
postnode := getNode()
currentinterface := postnode.Interface
req := &nodepb.UpdateNodeReq{
Node: &postnode,
}
@@ -634,16 +638,24 @@ func CheckIn() error {
log.Fatalf("Error: %v", err)
}
res.Node.Postchanges = "false"
newinterface := res.Node.Interface
err = modConfig(res.Node)
if err != nil {
return err
log.Fatalf("Error: %v", err)
}
if currentinterface != newinterface {
err := DeleteInterface(currentinterface)
if err != nil {
fmt.Println("ERROR DELETING INTERFACE: " + currentinterface)
}
}
err = setWGConfig()
if err != nil {
return err
log.Fatalf("Error: %v", err)
}
setupcheck = false
}
if checkinres.Checkinresponse.Needpeerupdate {
fmt.Println("Server has requested that node update peer list.")
@@ -653,7 +665,20 @@ func CheckIn() error {
return err
log.Fatalf("Unable to process Set Peers request: %v", err)
}
setupcheck = false
}
if setupcheck {
iface := nodecfg.Interface
_, err := net.InterfaceByName(iface)
if err != nil {
fmt.Println("interface " + iface + " does not currently exist. Setting up WireGuard.")
err = setWGConfig()
if err != nil {
return err
log.Fatalf("Error: %v", err)
}
}
}
return nil
}
func getNode() nodepb.Node {
@@ -694,9 +719,9 @@ func Remove() error {
var requestOpts grpc.DialOption
requestOpts = grpc.WithInsecure()
conn, err := grpc.Dial(servercfg.Address, requestOpts)
if err != nil {
return err
log.Fatalf("Unable to establish client connection to localhost:50051: %v", err)
if err != nil {
log.Printf("Unable to establish client connection to " + servercfg.Address + ": %v", err)
return err
}
wcclient = nodepb.NewNodeServiceClient(conn)
@@ -745,15 +770,13 @@ func WipeLocal() error{
nodecfg := config.Config.Node
ifacename := nodecfg.Interface
home, err := homedir.Dir()
if err != nil {
log.Fatal(err)
}
err = os.Remove(home + "/.wcconfig")
//home, err := homedir.Dir()
home := "/etc/netclient"
err := os.Remove(home + "/.netconfig")
if err != nil {
fmt.Println(err)
}
err = os.Remove(home + "/.wctoken")
err = os.Remove(home + "/.nettoken")
if err != nil {
fmt.Println(err)
}
@@ -773,6 +796,21 @@ func WipeLocal() error{
}
func DeleteInterface(ifacename string) error{
ipExec, err := exec.LookPath("ip")
cmdIPLinkDel := &exec.Cmd {
Path: ipExec,
Args: []string{ ipExec, "link", "del", ifacename },
Stdout: os.Stdout,
Stderr: os.Stdout,
}
err = cmdIPLinkDel.Run()
if err != nil {
fmt.Println(err)
}
return err
}
func getPeers(macaddress string, group string, server string) ([]wgtypes.PeerConfig, error) {
//need to implement checkin on server side
@@ -784,7 +822,7 @@ func getPeers(macaddress string, group string, server string) ([]wgtypes.PeerCon
keepalive := nodecfg.KeepAlive
keepalivedur, err := time.ParseDuration(strconv.FormatInt(int64(keepalive), 10) + "s")
if err != nil {
log.Fatalf("Issue with format of keepalive value. Please update wcconfig: %v", err)
log.Fatalf("Issue with format of keepalive value. Please update netconfig: %v", err)
}
+35 -28
View File
@@ -18,9 +18,17 @@ func ConfigureSystemD() error {
return err
}
binarypath := path + "/meshclient"
binarypath := path + "/netclient"
_, err = copy(binarypath, "/usr/local/bin/meshclient")
_, err = os.Stat("/etc/netclient")
if os.IsNotExist(err) {
os.Mkdir("/etc/netclient", 744)
} else if err != nil {
fmt.Println("couldnt find or create /etc/netclient")
return err
}
_, err = copy(binarypath, "/etc/netclient/netclient")
if err != nil {
log.Println(err)
return err
@@ -29,22 +37,22 @@ func ConfigureSystemD() error {
systemservice := `[Unit]
Description=Regularly checks for updates in peers and local config
Wants=wirecat.timer
Wants=netclient.timer
[Service]
Type=oneshot
ExecStart=/usr/local/bin/meshclient -c checkin
ExecStart=/etc/netclient/netclient -c checkin
[Install]
WantedBy=multi-user.target
`
systemtimer := `[Unit]
Description=Calls the WireCat Mesh Client Service
Requires=wirecat.service
Description=Calls the Netmaker Mesh Client Service
Requires=netmaker.service
[Timer]
Unit=wirecat.service
Unit=netmaker.service
OnCalendar=*:*:0/30
[Install]
@@ -54,13 +62,13 @@ WantedBy=timers.target
servicebytes := []byte(systemservice)
timerbytes := []byte(systemtimer)
err = ioutil.WriteFile("/etc/systemd/system/wirecat.service", servicebytes, 0644)
err = ioutil.WriteFile("/etc/systemd/system/netmaker.service", servicebytes, 0644)
if err != nil {
log.Println(err)
return err
}
err = ioutil.WriteFile("/etc/systemd/system/wirecat.timer", timerbytes, 0644)
err = ioutil.WriteFile("/etc/systemd/system/netmaker.timer", timerbytes, 0644)
if err != nil {
log.Println(err)
return err
@@ -70,13 +78,13 @@ WantedBy=timers.target
cmdSysEnableService := &exec.Cmd {
Path: sysExec,
Args: []string{ sysExec, "enable", "wirecat.service" },
Args: []string{ sysExec, "enable", "netmaker.service" },
Stdout: os.Stdout,
Stderr: os.Stdout,
}
cmdSysStartService := &exec.Cmd {
Path: sysExec,
Args: []string{ sysExec, "start", "wirecat.service"},
Args: []string{ sysExec, "start", "netmaker.service"},
Stdout: os.Stdout,
Stderr: os.Stdout,
}
@@ -88,25 +96,25 @@ WantedBy=timers.target
}
cmdSysEnableTimer := &exec.Cmd {
Path: sysExec,
Args: []string{ sysExec, "enable", "wirecat.timer" },
Args: []string{ sysExec, "enable", "netmaker.timer" },
Stdout: os.Stdout,
Stderr: os.Stdout,
}
cmdSysStartTimer := &exec.Cmd {
Path: sysExec,
Args: []string{ sysExec, "start", "wirecat.timer"},
Args: []string{ sysExec, "start", "netmaker.timer"},
Stdout: os.Stdout,
Stderr: os.Stdout,
}
err = cmdSysEnableService.Run()
if err != nil {
fmt.Println("Error enabling wirecat.service. Please investigate.")
fmt.Println("Error enabling netmaker.service. Please investigate.")
fmt.Println(err)
}
err = cmdSysStartService.Run()
if err != nil {
fmt.Println("Error starting wirecat.service. Please investigate.")
fmt.Println("Error starting netmaker.service. Please investigate.")
fmt.Println(err)
}
err = cmdSysDaemonReload.Run()
@@ -116,12 +124,12 @@ WantedBy=timers.target
}
err = cmdSysEnableTimer.Run()
if err != nil {
fmt.Println("Error enabling wirecat.timer. Please investigate.")
fmt.Println("Error enabling netmaker.timer. Please investigate.")
fmt.Println(err)
}
err = cmdSysStartTimer.Run()
if err != nil {
fmt.Println("Error starting wirecat.timer. Please investigate.")
fmt.Println("Error starting netmaker.timer. Please investigate.")
fmt.Println(err)
}
return nil
@@ -132,13 +140,13 @@ func RemoveSystemDServices() error {
cmdSysStopService := &exec.Cmd {
Path: sysExec,
Args: []string{ sysExec, "stop", "wirecat.service" },
Args: []string{ sysExec, "stop", "netmaker.service" },
Stdout: os.Stdout,
Stderr: os.Stdout,
}
cmdSysDisableService := &exec.Cmd {
Path: sysExec,
Args: []string{ sysExec, "disable", "wirecat.service"},
Args: []string{ sysExec, "disable", "netmaker.service"},
Stdout: os.Stdout,
Stderr: os.Stdout,
}
@@ -150,41 +158,40 @@ func RemoveSystemDServices() error {
}
cmdSysStopTimer := &exec.Cmd {
Path: sysExec,
Args: []string{ sysExec, "stop", "wirecat.timer" },
Args: []string{ sysExec, "stop", "netmaker.timer" },
Stdout: os.Stdout,
Stderr: os.Stdout,
}
cmdSysDisableTimer := &exec.Cmd {
Path: sysExec,
Args: []string{ sysExec, "disable", "wirecat.timer"},
Args: []string{ sysExec, "disable", "netmaker.timer"},
Stdout: os.Stdout,
Stderr: os.Stdout,
}
err = cmdSysStopService.Run()
if err != nil {
fmt.Println("Error stopping wirecat.service. Please investigate.")
fmt.Println("Error stopping netmaker.service. Please investigate.")
fmt.Println(err)
}
err = cmdSysDisableService.Run()
if err != nil {
fmt.Println("Error disabling wirecat.service. Please investigate.")
fmt.Println("Error disabling netmaker.service. Please investigate.")
fmt.Println(err)
}
err = cmdSysStopTimer.Run()
if err != nil {
fmt.Println("Error stopping wirecat.timer. Please investigate.")
fmt.Println("Error stopping netmaker.timer. Please investigate.")
fmt.Println(err)
}
err = cmdSysDisableTimer.Run()
if err != nil {
fmt.Println("Error disabling wirecat.timer. Please investigate.")
fmt.Println("Error disabling netmaker.timer. Please investigate.")
fmt.Println(err)
}
err = os.Remove("/etc/systemd/system/wirecat.service")
err = os.Remove("/etc/systemd/system/wirecat.timer")
//err = os.Remove("/usr/local/bin/meshclient")
err = os.Remove("/etc/systemd/system/netmaker.service")
err = os.Remove("/etc/systemd/system/netmaker.timer")
if err != nil {
fmt.Println("Error removing file. Please investigate.")
fmt.Println(err)
-99
View File
@@ -1,99 +0,0 @@
/*
Copyright © 2021 NAME HERE <EMAIL ADDRESS>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"fmt"
"context"
"net/http"
"io/ioutil"
nodepb "github.com/gravitl/netmaker/grpc"
"github.com/spf13/cobra"
)
// createCmd represents the create command
var createCmd = &cobra.Command{
Use: "create",
Short: "Create a new node",
Long: `hi`,
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
// Get the data from our flags
nodegroup, err := cmd.Flags().GetString("nodegroup")
password, err := cmd.Flags().GetString("password")
macaddress, err := cmd.Flags().GetString("macaddress")
name, err := cmd.Flags().GetString("name")
listenport, err := cmd.Flags().GetInt32("listenport")
publickey, err := cmd.Flags().GetString("publickey")
endpoint, err := cmd.Flags().GetString("endpoint")
if err != nil {
return err
}
if endpoint == "" {
resp, err := http.Get("https://ifconfig.me")
if err != nil {
return err
}
defer resp.Body.Close()
if resp.StatusCode == http.StatusOK {
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
endpoint = string(bodyBytes)
}
}
// Create a blog protobuffer message
node := &nodepb.Node{
Password: password,
Macaddress: macaddress,
Nodegroup: nodegroup,
Listenport: listenport,
Publickey: publickey,
Name: name,
Endpoint: endpoint,
}
// RPC call
res, err := client.CreateNode(
context.TODO(),
// wrap the blog message in a CreateBlog request message
&nodepb.CreateNodeReq{
Node: node,
},
)
if err != nil {
return err
}
fmt.Printf("Node created: %s\n", res.Node.Id)
return err
},
}
func init() {
createCmd.Flags().StringP("name", "n", "", "The node name")
createCmd.Flags().StringP("listenport", "l", "", "The wireguard port")
createCmd.Flags().StringP("endpoint", "e", "", "The public IP")
createCmd.Flags().StringP("macaddress", "m", "", "The local macaddress")
createCmd.Flags().StringP("password", "p", "", "The password")
createCmd.Flags().StringP("nodegroup", "g", "", "The group this will be added to")
createCmd.Flags().StringP("publickey", "k", "", "The wireguard public key")
createCmd.MarkFlagRequired("nodegroup")
createCmd.MarkFlagRequired("password")
createCmd.MarkFlagRequired("macaddress")
rootCmd.AddCommand(createCmd)
}
-66
View File
@@ -1,66 +0,0 @@
/*
Copyright © 2021 NAME HERE <EMAIL ADDRESS>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"fmt"
"context"
"github.com/gravitl/netmaker/wcagent/functions"
nodepb "github.com/gravitl/netmaker/grpc"
"github.com/spf13/cobra"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc"
)
var deleteCmd = &cobra.Command{
Use: "delete",
Short: "Delete a Nodeby its MAC",
Long: `Delete a node post by it's macaddress in mongodb.
If no node is found with the MAC it will return a 'Not Found' error`,
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
macaddress, err := cmd.Flags().GetString("macaddress")
if err != nil {
return err
}
req := &nodepb.DeleteNodeReq{
Macaddress: macaddress,
}
ctx := context.Background()
ctx, err = functions.SetJWT(client)
if err != nil {
return err
}
var header metadata.MD
_, err = client.DeleteNode(ctx, req, grpc.Header(&header))
if err != nil {
return err
}
fmt.Printf("Succesfully deleted the node with macaddress %s\n", macaddress)
return nil
},
}
func init() {
deleteCmd.Flags().StringP("macaddress", "m", "", "The macaddress of the node")
deleteCmd.MarkFlagRequired("macaddress")
rootCmd.AddCommand(deleteCmd)
}
-97
View File
@@ -1,97 +0,0 @@
/*
Copyright © 2021 NAME HERE <EMAIL ADDRESS>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"fmt"
nodepb "github.com/gravitl/netmaker/grpc"
"context"
"io"
"github.com/spf13/cobra"
"github.com/gravitl/netmaker/wcagent/functions"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc"
)
// getpeersCmd represents the getpeers command
var getpeersCmd = &cobra.Command{
Use: "getpeers",
Short: "A brief description of your command",
Long: `A longer description that spans multiple lines and likely contains examples
and usage of using your command. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println("read called")
group, err := cmd.Flags().GetString("group")
if err != nil {
return err
}
req := &nodepb.GetPeersReq{
Group: group,
}
ctx := context.Background()
ctx, err = functions.SetJWT(client)
if err != nil {
return err
}
var header metadata.MD
stream, err := client.GetPeers(ctx, req, grpc.Header(&header))
if err != nil {
return err
}
//fmt.Println(res)
for {
// stream.Recv returns a pointer to a ListBlogRes at the current iteration
res, err := stream.Recv()
// If end of stream, break the loop
if err == io.EOF {
break
}
// if err, return an error
if err != nil {
return err
}
// If everything went well use the generated getter to print the blog message
fmt.Println(res.Peers)
}
return nil
},
}
func init() {
getpeersCmd.Flags().StringP("group", "g", "", "The group of the node")
getpeersCmd.MarkFlagRequired("group")
rootCmd.AddCommand(getpeersCmd)
// Here you will define your flags and configuration settings.
// Cobra supports Persistent Flags which will work for this command
// and all subcommands, e.g.:
// getpeersCmd.PersistentFlags().String("foo", "", "A help for foo")
// Cobra supports local flags which will only run when this command
// is called directly, e.g.:
// getpeersCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
-83
View File
@@ -1,83 +0,0 @@
/*
Copyright © 2021 NAME HERE <EMAIL ADDRESS>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"fmt"
"os"
"encoding/json"
"io/ioutil"
nodepb "github.com/gravitl/netmaker/grpc"
"context"
"github.com/spf13/cobra"
)
// loginCmd represents the login command
var loginCmd = &cobra.Command{
Use: "login",
Short: "Get auth token",
Long: `Get auth token`,
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
password, err := cmd.Flags().GetString("password")
macaddress, err := cmd.Flags().GetString("macaddress")
if err != nil {
return err
}
home, err := os.UserHomeDir()
data := SetConfiguration{
MacAddress: macaddress,
Password: password,
}
file, err := json.MarshalIndent(data, "", " ")
err = ioutil.WriteFile(home + "/.wcconfig", file, 0644)
if err != nil {
return err
}
login := &nodepb.LoginRequest{
Password: password,
Macaddress: macaddress,
}
// RPC call
res, err := client.Login(context.TODO(), login)
if err != nil {
return err
}
fmt.Printf("Token: %s\n", res.Accesstoken)
tokenstring := []byte(res.Accesstoken)
err = ioutil.WriteFile(home + "/.wctoken", tokenstring, 0644)
if err != nil {
return err
}
return err
},
}
func init() {
loginCmd.Flags().StringP("macaddress", "m", "", "The local macaddress")
loginCmd.Flags().StringP("password", "p", "", "The password")
loginCmd.MarkFlagRequired("password")
loginCmd.MarkFlagRequired("macaddress")
rootCmd.AddCommand(loginCmd)
}
type SetConfiguration struct {
MacAddress string
Password string
}
-82
View File
@@ -1,82 +0,0 @@
/*
Copyright © 2021 NAME HERE <EMAIL ADDRESS>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"fmt"
"context"
nodepb "github.com/gravitl/netmaker/grpc"
"github.com/gravitl/netmaker/wcagent/functions"
"github.com/spf13/cobra"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc"
)
// readCmd represents the read command
var readCmd = &cobra.Command{
Use: "read",
Short: "Find a Node by its Mac Address",
Long: `Find a node by it's macaddress, stored in mongoDB.
If no node is found with the corresponding MAC it will return a 'Not Found' error`,
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
fmt.Println("read called")
macaddress, err := cmd.Flags().GetString("macaddress")
group, err := cmd.Flags().GetString("group")
if err != nil {
return err
}
req := &nodepb.ReadNodeReq{
Macaddress: macaddress,
Group: group,
}
ctx := context.Background()
ctx, err = functions.SetJWT(client)
if err != nil {
return err
}
var header metadata.MD
res, err := client.ReadNode(ctx, req, grpc.Header(&header))
if err != nil {
return err
}
fmt.Println(res)
return nil
},
}
func init() {
readCmd.Flags().StringP("macaddress", "m", "", "The macaddress of the node")
readCmd.Flags().StringP("group", "g", "", "The group of the node")
readCmd.MarkFlagRequired("macaddress")
readCmd.MarkFlagRequired("group")
rootCmd.AddCommand(readCmd)
// Here you will define your flags and configuration settings.
// Cobra supports Persistent Flags which will work for this command
// and all subcommands, e.g.:
// readCmd.PersistentFlags().String("foo", "", "A help for foo")
// Cobra supports local flags which will only run when this command
// is called directly, e.g.:
// readCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
}
-113
View File
@@ -1,113 +0,0 @@
/*
Copyright © 2021 NAME HERE <EMAIL ADDRESS>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"fmt"
"os"
"github.com/spf13/cobra"
"context"
homedir "github.com/mitchellh/go-homedir"
"github.com/spf13/viper"
"time"
"log"
nodepb "github.com/gravitl/netmaker/grpc"
"google.golang.org/grpc"
)
var cfgFile string
var client nodepb.NodeServiceClient
var requestCtx context.Context
var requestOpts grpc.DialOption
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "grpc-test",
Short: "A test cli which may or may not turn into a real one",
Long: `huh. this isn't very long at all, is it?`,
// Uncomment the following line if your bare application
// has an action associated with it:
// Run: func(cmd *cobra.Command, args []string) { },
}
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
func Execute() {
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(1)
}
}
func init() {
cobra.OnInitialize(initConfig)
// Here you will define your flags and configuration settings.
// Cobra supports persistent flags, which, if defined here,
// will be global for your application.
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.blogclient.yaml)")
// Cobra also supports local flags, which will only run
// when this action is called directly.
rootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
fmt.Println("Starting Node Service Client")
// Establish context to timeout after 10 seconds if server does not respond
requestCtx, _ = context.WithTimeout(context.Background(), 10*time.Second)
// Establish insecure grpc options (no TLS)
requestOpts = grpc.WithInsecure()
// Dial the server, returns a client connection
conn, err := grpc.Dial("localhost:50051", requestOpts)
if err != nil {
log.Fatalf("Unable to establish client connection to localhost:50051: %v", err)
}
// Instantiate the BlogServiceClient with our client connection to the server
client = nodepb.NewNodeServiceClient(conn)
}
// initConfig reads in config file and ENV variables if set.
func initConfig() {
if cfgFile != "" {
// Use config file from the flag.
viper.SetConfigFile(cfgFile)
} else {
// Find home directory.
home, err := homedir.Dir()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// Search config in home directory with name ".grpc-test" (without extension).
viper.AddConfigPath(home)
viper.SetConfigName(".grpc-test")
}
viper.AutomaticEnv() // read in environment variables that match
// If a config file is found, read it in.
if err := viper.ReadInConfig(); err == nil {
fmt.Println("Using config file:", viper.ConfigFileUsed())
}
}
-88
View File
@@ -1,88 +0,0 @@
/*
Copyright © 2021 NAME HERE <EMAIL ADDRESS>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package cmd
import (
"fmt"
"context"
nodepb "github.com/gravitl/netmaker/grpc"
"github.com/spf13/cobra"
"github.com/gravitl/netmaker/wcagent/functions"
"google.golang.org/grpc/metadata"
"google.golang.org/grpc"
)
var updateCmd = &cobra.Command{
Use: "update",
Short: "Find a Node by its Macaddress",
Long: `Find a node by it's mongoDB Unique macaddressentifier.
If no node is found for the Macaddress it will return a 'Not Found' error`,
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
// Get the flags from CLI
nodegroup, err := cmd.Flags().GetString("nodegroup")
password, err := cmd.Flags().GetString("password")
macaddress, err := cmd.Flags().GetString("macaddress")
name, err := cmd.Flags().GetString("name")
listenport, err := cmd.Flags().GetInt32("listenport")
publickey, err := cmd.Flags().GetString("publickey")
endpoint, err := cmd.Flags().GetString("endpoint")
// Create an UpdateNodeRequest
node := &nodepb.Node{
Password: password,
Macaddress: macaddress,
Nodegroup: nodegroup,
Listenport: listenport,
Publickey: publickey,
Name: name,
Endpoint: endpoint,
}
req := &nodepb.UpdateNodeReq{
Node: node,
}
ctx := context.Background()
ctx, err = functions.SetJWT(client)
if err != nil {
return err
}
var header metadata.MD
res, err := client.UpdateNode(ctx, req, grpc.Header(&header))
if err != nil {
return err
}
fmt.Println(res)
return nil
},
}
func init() {
updateCmd.Flags().StringP("name", "n", "", "The node name")
updateCmd.Flags().StringP("listenport", "l", "", "The wireguard port")
updateCmd.Flags().StringP("endpoint", "e", "", "The public IP")
updateCmd.Flags().StringP("macaddress", "m", "", "The local macaddress")
updateCmd.Flags().StringP("password", "p", "", "The password")
updateCmd.Flags().StringP("nodegroup", "g", "", "The group this will be added to")
updateCmd.Flags().StringP("publickey", "k", "", "The wireguard public key")
updateCmd.MarkFlagRequired("nodegroup")
updateCmd.MarkFlagRequired("password")
updateCmd.MarkFlagRequired("macaddress")
rootCmd.AddCommand(updateCmd)
}
+14 -3
View File
@@ -34,7 +34,7 @@ func main() {
taccesskey := flag.String("k", "badkey", "an access key generated by the server and used for one-time access (install only)")
tserver := flag.String("s", "localhost:50051", "The location (including port) of the remote gRPC server.")
tgroup := flag.String("g", "badgroup", "The node group you are attempting to join.")
tnoauto := flag.Bool("na", false, "No auto mode. If true, wirecat will not be installed as a system service and you will have to retrieve updates manually via checkin command.")
tnoauto := flag.Bool("na", false, "No auto mode. If true, netmaker will not be installed as a system service and you will have to retrieve updates manually via checkin command.")
command := flag.String("c", "required", "The command to run")
@@ -51,10 +51,15 @@ func main() {
err := functions.Install(*taccesskey, *tpassword, *tserver, *tgroup, *tnoauto)
if err != nil {
fmt.Println("Error installing: ", err)
fmt.Println("Removing artifacts")
fmt.Println("Cleaning up (uninstall)")
err = functions.Remove()
if err != nil {
fmt.Println("Error removing artifacts: ", err)
fmt.Println("Error uninstalling: ", err)
fmt.Println("Wiping local.")
err = functions.WipeLocal()
if err != nil {
fmt.Println("Error removing artifacts: ", err)
}
}
os.Exit(1)
}
@@ -83,6 +88,12 @@ func main() {
fmt.Println("Beginning node cleanup.")
err := functions.Remove()
if err != nil {
fmt.Println("Error uninstalling: ", err)
fmt.Println("Wiping local.")
err = functions.WipeLocal()
if err != nil {
fmt.Println("Error removing artifacts: ", err)
}
fmt.Println("Error deleting node: ", err)
os.Exit(1)
}
+2 -2
View File
@@ -3,8 +3,8 @@ sudo ip link del wc-skynet
curl -X DELETE -H "Authorization: Bearer secretkey" -H 'Content-Type: application/json' localhost:8081/api/skynet/nodes/8c:89:a5:03:f0:d7 | jq
sudo cp /root/.wcconfig.bkup /root/.wcconfig
sudo rm /root/.wctoken
sudo cp /root/.netconfig.bkup /root/.netconfig
sudo rm /root/.nettoken
sudo go run ./main.go remove
sudo wg show