Skip to content

Commit ef744d1

Browse files
pangea-andrestr3dcrossekenany
authored
Add SOS support (#155)
Co-authored-by: David Wayman <[email protected]> Co-authored-by: Kenan Yildirim <[email protected]>
1 parent 9867e58 commit ef744d1

22 files changed

+2300
-48
lines changed

examples/.examples-ci.yml

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ go-sdk-examples:
1111
- intel
1212
- redact
1313
- vault
14+
- share
1415
image: golang:${GO_VERSION}
1516
before_script:
1617
- export PANGEA_AUDIT_CONFIG_ID="${PANGEA_AUDIT_CONFIG_ID_1_LVE_AWS}"
@@ -31,6 +32,7 @@ go-sdk-examples:
3132
- export PANGEA_URL_INTEL_TOKEN="${PANGEA_INTEGRATION_TOKEN_LVE_AWS}"
3233
- export PANGEA_USER_INTEL_TOKEN="${PANGEA_INTEGRATION_TOKEN_LVE_AWS}"
3334
- export PANGEA_VAULT_TOKEN="${PANGEA_INTEGRATION_TOKEN_LVE_AWS}"
35+
- export PANGEA_SHARE_TOKEN="${PANGEA_INTEGRATION_TOKEN_LVE_AWS}"
3436
script:
3537
- cd examples/${EXAMPLE_FOLDER}
3638
- bash ../../dev/run_examples.sh

examples/file_scan/file_scan_async_crowdstrike.go

+21-9
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,28 @@ func main() {
5858
}
5959
fmt.Println("Accepted error received (as expected).")
6060

61-
fmt.Println("Sleep some time before polling.")
62-
// multiple polling attempts may be required
63-
time.Sleep(time.Duration(20 * time.Second))
61+
var pr *pangea.PangeaResponse[any]
62+
i := 0
63+
maxRetry := 24
6464

65-
fmt.Println("File Scan poll result...")
66-
pr, err := client.PollResultByError(ctx, *ae)
67-
if err != nil {
68-
log.Fatal(err)
65+
fmt.Println("Let's try to poll result...")
66+
for i < maxRetry {
67+
// Wait for result
68+
time.Sleep(time.Duration(10 * time.Second))
69+
70+
pr, err = client.PollResultByError(ctx, *ae)
71+
if err == nil {
72+
break
73+
}
74+
i++
75+
fmt.Printf("Result is not ready yet. Retry: %d\n", i)
6976
}
7077

71-
fmt.Println("File Scan poll result success.")
72-
fmt.Println(pangea.Stringify(pr.Result))
78+
if i == maxRetry {
79+
log.Fatal("Result still not ready")
80+
} else {
81+
r := (*pr.Result).(*file_scan.FileScanResult)
82+
fmt.Println("File Scan success.")
83+
fmt.Println(pangea.Stringify(r))
84+
}
7385
}

examples/file_scan/file_scan_async_reversinglabs.go

+21-9
Original file line numberDiff line numberDiff line change
@@ -58,16 +58,28 @@ func main() {
5858
}
5959
fmt.Println("Accepted error received (as expected).")
6060

61-
fmt.Println("Sleep some time before polling.")
62-
// multiple polling attempts may be required
63-
time.Sleep(time.Duration(20 * time.Second))
61+
var pr *pangea.PangeaResponse[any]
62+
i := 0
63+
maxRetry := 24
6464

65-
fmt.Println("File Scan poll result...")
66-
pr, err := client.PollResultByError(ctx, *ae)
67-
if err != nil {
68-
log.Fatal(err)
65+
fmt.Println("Let's try to poll result...")
66+
for i < maxRetry {
67+
// Wait for result
68+
time.Sleep(time.Duration(10 * time.Second))
69+
70+
pr, err = client.PollResultByError(ctx, *ae)
71+
if err == nil {
72+
break
73+
}
74+
i++
75+
fmt.Printf("Result is not ready yet. Retry: %d\n", i)
6976
}
7077

71-
fmt.Println("File Scan poll result success.")
72-
fmt.Println(pangea.Stringify(pr.Result))
78+
if i == maxRetry {
79+
log.Fatal("Result still not ready")
80+
} else {
81+
r := (*pr.Result).(*file_scan.FileScanResult)
82+
fmt.Println("File Scan success.")
83+
fmt.Println(pangea.Stringify(r))
84+
}
7385
}
+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"os"
8+
"time"
9+
10+
"github.com/pangeacyber/pangea-go/pangea-sdk/v3/pangea"
11+
"github.com/pangeacyber/pangea-go/pangea-sdk/v3/service/share"
12+
)
13+
14+
func main() {
15+
var t = time.Now().Format("20060102_150405")
16+
var path = "/sdk_example/delete/" + t
17+
18+
// Load pangea token from environment variables
19+
token := os.Getenv("PANGEA_SHARE_TOKEN")
20+
if token == "" {
21+
log.Fatal("Unauthorized: No token present.")
22+
}
23+
24+
ctx, cancelFn := context.WithTimeout(context.Background(), 60*time.Second)
25+
defer cancelFn()
26+
27+
// create a new store client with pangea token and domain
28+
client := share.New(&pangea.Config{
29+
Token: token,
30+
Domain: os.Getenv("PANGEA_DOMAIN"),
31+
})
32+
33+
// Create a FolderCreateRequest and set the path of the folder to be created
34+
input := &share.FolderCreateRequest{
35+
Path: path,
36+
}
37+
38+
fmt.Printf("Let's create a folder: %s\n", path)
39+
// Send the CreateRequest
40+
out, err := client.FolderCreate(ctx, input)
41+
if err != nil {
42+
log.Fatalf("unexpected error: %v", err)
43+
}
44+
45+
id := out.Result.Object.ID
46+
fmt.Printf("Folder created. ID: %s.\n", id)
47+
48+
fmt.Printf("Let's create this folder now\n")
49+
// Create a DeleteRequest and set the ID of the item to be deleted
50+
input2 := &share.DeleteRequest{
51+
ID: id,
52+
}
53+
54+
// Send the DeleteRequest
55+
rDel, err := client.Delete(ctx, input2)
56+
if err != nil {
57+
log.Fatalf("unexpected error: %v", err)
58+
}
59+
60+
fmt.Printf("Folder deleted. Deleted %d items.\n", rDel.Result.Count)
61+
}

examples/share/go.mod

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module examples/share
2+
3+
go 1.19
4+
5+
require github.com/pangeacyber/pangea-go/pangea-sdk/v3 v3.7.0
6+
7+
require (
8+
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
9+
github.com/hashicorp/go-retryablehttp v0.7.5 // indirect
10+
github.com/mattn/go-colorable v0.1.13 // indirect
11+
github.com/mattn/go-isatty v0.0.20 // indirect
12+
github.com/rs/zerolog v1.31.0 // indirect
13+
golang.org/x/sys v0.15.0 // indirect
14+
)
15+
16+
replace github.com/pangeacyber/pangea-go/pangea-sdk/v3 v3.7.0 => ../../pangea-sdk/v3

examples/share/go.sum

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
2+
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
3+
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
4+
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
5+
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
6+
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
7+
github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI=
8+
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
9+
github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M=
10+
github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
11+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
12+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
13+
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
14+
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
15+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
16+
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
17+
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
18+
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
19+
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
20+
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
21+
github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
22+
github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
23+
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
24+
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
25+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
26+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
27+
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
28+
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
29+
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
30+
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

0 commit comments

Comments
 (0)