Skip to content

Commit

Permalink
Changed format of status files to JSON
Browse files Browse the repository at this point in the history
  • Loading branch information
hknutzen committed Oct 25, 2024
1 parent 98a1334 commit 5a7a253
Show file tree
Hide file tree
Showing 6 changed files with 85 additions and 102 deletions.
1 change: 1 addition & 0 deletions Changes
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{{$NEXT}}

- Changed format of status file for command 'missing-approve' to JSON.
- Fixed URL for committing changes to device of type PAN-OS.
Previously the URL looked like
https://address/api/?key=xxx&https://address/api/?key=xxx&type=commit
Expand Down
16 changes: 8 additions & 8 deletions go/cmd/missing-approve/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,20 +86,20 @@ func check(device, statusDir, base, policy string) {
v := status.Read(statusDir, device)

devicePolicy := ""
approveTime := ""
approveTime := int64(0)

// Check status of last approve.
switch v[status.APP_STATUS] {
case "OK", "***WARNINGS***":
devicePolicy = v[status.APP_POLICY]
approveTime = v[status.COMP_DTIME]
switch v.Approve.Result {
case "OK", "WARNINGS":
devicePolicy = v.Approve.Policy
approveTime = v.Approve.Time
}

// Check status of last compare.
if status.TimeLess(approveTime, v[status.COMP_TIME]) {
switch v[status.COMP_RESULT] {
if approveTime < v.Compare.Time {
switch v.Compare.Result {
case "UPTODATE":
devicePolicy = v[status.COMP_POLICY]
devicePolicy = v.Compare.Policy
case "DIFF":
devicePolicy = ""
}
Expand Down
58 changes: 42 additions & 16 deletions go/cmd/missing-approve/testdata/test.t
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,13 @@ IPv4 code
--p1/code/ipv6/B
Old IPv6 code
--status/A
f1;f2;p1;OK;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980299;1519980388;
{"approve":{"result":"OK","policy":"p1","time":1519980388},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980299}
}
--status/B
f1;f2;p2;***ERRORS***;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980492;1519980388;
{"approve":{"result":"ERRORS","policy":"p2","time":1519980388},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980492}
}
=OUTPUT=
A
B
Expand All @@ -80,9 +84,13 @@ IPv4 code
--p1/code/ipv6/B
IPv6 code
--status/A
f1;f2;p1;OK;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980299;1519980388;
{"approve":{"result":"WARNINGS","policy":"p1","time":1519980388},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980299}
}
--status/B
f1;f2;p2;***ERRORS***;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980492;1519980388;
{"approve":{"result":"ERRORS","policy":"p2","time":1519980388},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980492}
}
=OUTPUT=NONE

############################################################
Expand All @@ -93,7 +101,9 @@ Code for device A
--p1/code/A
Code for device A
--status/A
f1;f2;p2;***ERRORS***;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980492;1519980500;
{"approve":{"result":"ERRORS","policy":"p2","time":1519980500},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980492}
}
=OUTPUT=NONE

############################################################
Expand All @@ -104,7 +114,9 @@ Code for device A
--p1/code/A
Code for device A
--status/A
f1;f2;p1;OK;f5;f6;f7;f8;f9;f10;f11;f12;DIFF;p2;f15;1519980492;1519980388;
{"approve":{"result":"OK","policy":"p1","time":1519980388},
"compare":{"result":"DIFF","policy":"p2","time":1519980492}
}
=OUTPUT=
A
=END=
Expand All @@ -115,7 +127,9 @@ A
--p2/code/A
Code for device A
--status/A
f1;f2;p2;***ERRORS***;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980492;1519980500;
{"approve":{"result":"ERRORS","policy":"p2","time":1519980500},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980492}
}
=OUTPUT=
A
=END=
Expand All @@ -125,8 +139,6 @@ A
=INPUT=
--p2/code/A
Code for device A
--status/A
f1;f2;;;f5;f6;f7;f8;f9;f10;f11;f12;;;f15;;;
=OUTPUT=
A
=END=
Expand All @@ -137,7 +149,9 @@ A
--p2/code/A
Code for device A
--status/A
f1;f2;p2;OK;f5;f6;f7;f8;f9;f10;f11;f12;;;f15;;1519980388;
{"approve":{"result":"OK","policy":"p2","time":1519980388},
"compare":{"result":"","policy":"","time":0}
}
=OUTPUT=NONE

############################################################
Expand All @@ -146,7 +160,9 @@ f1;f2;p2;OK;f5;f6;f7;f8;f9;f10;f11;f12;;;f15;;1519980388;
--p2/code/A
Code for device A
--status/A
f1;f2;;;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p2;f15;1519980492;;
{"approve":{"result":"","policy":"","time":0},
"compare":{"result":"UPTODATE","policy":"p2","time":1519980492}
}
=OUTPUT=NONE

############################################################
Expand All @@ -157,7 +173,9 @@ Code for device A
--p1/code/A
Code for device A
--status/A
f1;f2;;;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980492;;
{"approve":{"result":"","policy":"","time":0},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980492}
}
=SETUP=
bzip2 p1/code/A
=OUTPUT=NONE
Expand All @@ -170,7 +188,9 @@ Code for device A
--p1/code/A
Code for device A
--status/A
f1;f2;;;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980492;;
{"approve":{"result":"","policy":"","time":0},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980492}
}
=SETUP=
gzip p1/code/A
=OUTPUT=
Expand All @@ -185,7 +205,9 @@ Code for device A
--p1/code/A
Old code for device A
--status/A
f1;f2;;;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980492;;
{"approve":{"result":"","policy":"","time":0},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980492}
}
=SETUP=
bzip2 p1/code/A
=OUTPUT=
Expand All @@ -204,7 +226,9 @@ Code for device A
--p1/code/A.info
version 1
--status/A
f1;f2;;;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980492;;
{"approve":{"result":"","policy":"","time":0},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980492}
}
=OUTPUT=NONE

############################################################
Expand All @@ -219,7 +243,9 @@ Code for device A
--p1/code/A.raw
raw1
--status/A
f1;f2;;;f5;f6;f7;f8;f9;f10;f11;f12;UPTODATE;p1;f15;1519980492;;
{"approve":{"result":"","policy":"","time":0},
"compare":{"result":"UPTODATE","policy":"p1","time":1519980492}
}
=OUTPUT=
A
=END=
4 changes: 2 additions & 2 deletions go/pkg/doapprove/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,9 @@ func Main() int {
} else {
result := "OK"
if errors {
result = "***ERRORS***"
result = "ERRORS"
} else if warnings {
result = "***WARNINGS***"
result = "WARNINGS"
}
status.SetApprove(dir, devName, policy, result)
}
Expand Down
86 changes: 20 additions & 66 deletions go/pkg/status/status.go
Original file line number Diff line number Diff line change
@@ -1,49 +1,26 @@
package status

import (
"encoding/json"
"os"
"path"
"strconv"
"strings"

"github.com/hknutzen/Netspoc-Approve/go/pkg/mytime"
)

const (
DEVICENAME int = iota
APP_MESSAGE
APP_POLICY
APP_STATUS // same as for DEV_STATUS
APP_TIME // date cleartext
APP_USER
DEV_MESSAGE
DEV_POLICY
DEV_STATUS // ***WARNINGS***, ***ERRORS*** or OK
DEV_TIME // date cleartext
DEV_USER
COMP_COMP
COMP_RESULT // DIFF or UPTODATE
COMP_POLICY
COMP_CTIME // date cleartext
COMP_TIME // seconds since 1970
COMP_DTIME // DEV_TIME in seconds
STATUS_LEN
)
type action struct {
Result string `json:"result"`
Policy string `json:"policy"`
Time int64 `json:"time"`
}
type status struct {
Approve action `json:"approve"`
Compare action `json:"compare"`
}

func SetApprove(statusDir, device, policy, result string) {
v := Read(statusDir, device)
change(v, map[int]string{
APP_STATUS: result,
APP_POLICY: policy,
COMP_DTIME: getUnixTime(),
// Unused
DEV_POLICY: "",
DEV_STATUS: "",
APP_TIME: "",
DEV_TIME: "",
APP_USER: "",
DEV_USER: "",
})
v.Approve = action{result, policy, mytime.Now().Unix()}
write(statusDir, device, v)
}

Expand All @@ -52,53 +29,30 @@ func SetCompare(statusDir, device, policy string, changed bool) {
result := ""
if !changed {
result = "UPTODATE"
} else if v[COMP_RESULT] != "DIFF" || TimeLess(v[COMP_TIME], v[COMP_DTIME]) {
} else if v.Compare.Result != "DIFF" || v.Compare.Time < v.Approve.Time {
// Only update compare status,
// - if status changes to diff for first time,
// - or device was approved since last compare.
result = "DIFF"
} else {
return
}
change(v, map[int]string{
COMP_RESULT: result,
COMP_POLICY: policy,
COMP_TIME: getUnixTime(),
// Unused
COMP_CTIME: "",
})
v.Compare = action{result, policy, mytime.Now().Unix()}
write(statusDir, device, v)
}

func Read(statusDir, device string) []string {
func Read(statusDir, device string) status {
fname := path.Join(statusDir, device)
data, _ := os.ReadFile(fname)
values := make([]string, STATUS_LEN)
copy(values, strings.Split(string(data), ";"))
return values
}

func change(values []string, change map[int]string) {
for i, v := range change {
values[i] = v
}
var v status
json.Unmarshal(data, &v)
return v
}

func write(statusDir, device string, values []string) {
func write(statusDir, device string, v status) {
fname := path.Join(statusDir, device)
values[0] = device
result := strings.Join(values, ";") + ";\n"
if err := os.WriteFile(fname, []byte(result), 0644); err != nil {
data, _ := json.Marshal(v)
if err := os.WriteFile(fname, data, 0644); err != nil {
panic(err)
}
}

func getUnixTime() string {
return strconv.FormatInt(mytime.Now().Unix(), 10)
}

func TimeLess(t1, t2 string) bool {
i1, _ := strconv.ParseInt(t1, 10, 64)
i2, _ := strconv.ParseInt(t2, 10, 64)
return i1 < i2
}
Loading

0 comments on commit 5a7a253

Please sign in to comment.