-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathbrowser_routing.go
More file actions
97 lines (81 loc) · 2.5 KB
/
browser_routing.go
File metadata and controls
97 lines (81 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package kernel
import (
"os"
"strings"
"github.com/kernel/kernel-go-sdk/internal/requestconfig"
"github.com/kernel/kernel-go-sdk/lib/browserrouting"
"github.com/kernel/kernel-go-sdk/option"
)
const browserRoutingSubresourcesEnv = "KERNEL_BROWSER_ROUTING_SUBRESOURCES"
type browserRoutingOption struct {
cache *browserrouting.RouteCache
subresources []string
}
type browserRouteCacheOption struct {
cache *browserrouting.RouteCache
}
func withBrowserRoutingSubresources(cache *browserrouting.RouteCache, subresources []string) option.RequestOption {
return &browserRoutingOption{cache: cache, subresources: subresources}
}
func (o *browserRoutingOption) Apply(r *requestconfig.RequestConfig) error {
r.Middlewares = append(r.Middlewares, browserrouting.DirectVMRoutingMiddleware(o.cache, o.subresources))
return nil
}
func (o *browserRoutingOption) browserRouteCache() *browserrouting.RouteCache {
return o.cache
}
func (o *browserRouteCacheOption) Apply(*requestconfig.RequestConfig) error {
return nil
}
func (o *browserRouteCacheOption) browserRouteCache() *browserrouting.RouteCache {
return o.cache
}
func withBrowserRouteCache(cache *browserrouting.RouteCache) option.RequestOption {
return &browserRouteCacheOption{cache: cache}
}
func browserRouteCacheFromOptions(opts []option.RequestOption) *browserrouting.RouteCache {
for _, opt := range opts {
if carrier, ok := opt.(interface{ browserRouteCache() *browserrouting.RouteCache }); ok {
if cache := carrier.browserRouteCache(); cache != nil {
return cache
}
}
}
return nil
}
func storeBrowserRouteCache(opts []option.RequestOption, refs ...browserrouting.Ref) {
cache := browserRouteCacheFromOptions(opts)
for _, ref := range refs {
route, ok := browserRouteFromRef(ref)
if cache != nil && ok {
cache.Store(route)
}
}
}
func browserRouteFromRef(ref browserrouting.Ref) (browserrouting.Route, bool) {
norm, err := ref.Normalize()
if err != nil {
return browserrouting.Route{}, false
}
return browserrouting.Route{
SessionID: norm.SessionID,
BaseURL: norm.BaseURL,
JWT: norm.JWT,
}, true
}
func browserRoutingSubresourcesFromEnv() []string {
raw, ok := os.LookupEnv(browserRoutingSubresourcesEnv)
if !ok {
return []string{"curl"}
}
if strings.TrimSpace(raw) == "" {
return []string{}
}
subresources := make([]string, 0)
for _, part := range strings.Split(raw, ",") {
if trimmed := strings.TrimSpace(part); trimmed != "" {
subresources = append(subresources, trimmed)
}
}
return subresources
}