-
Notifications
You must be signed in to change notification settings - Fork 44
/
Copy pathresolver.go
45 lines (38 loc) · 905 Bytes
/
resolver.go
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
package apisix
import (
"context"
pkgHTTP "github.com/apache/apisix-go-plugin-runner/pkg/http"
"github.com/go-saas/saas"
"regexp"
)
type Resolver struct {
r pkgHTTP.Request
key string
pathRegex string
}
func NewResolver(r pkgHTTP.Request, key, pathRegex string) *Resolver {
return &Resolver{
r: r,
key: key,
pathRegex: pathRegex,
}
}
var _ saas.TenantResolver = (*Resolver)(nil)
func (r *Resolver) Resolve(ctx context.Context) (saas.TenantResolveResult, context.Context, error) {
// default host side
var t = ""
if v := r.r.Header().Get(r.key); len(v) > 0 {
t = v
}
if v := r.r.Args().Get(r.key); len(v) > 0 {
t = v
}
if len(r.pathRegex) > 0 {
reg := regexp.MustCompile(r.pathRegex)
f := reg.FindAllStringSubmatch(string(r.r.Path()), -1)
if f != nil {
t = f[0][1]
}
}
return saas.TenantResolveResult{TenantIdOrName: t}, ctx, nil
}