diff --git a/examples/hello_world/index.html b/examples/hello_world/index.html
index 301f4ab..3898290 100644
--- a/examples/hello_world/index.html
+++ b/examples/hello_world/index.html
@@ -5,7 +5,7 @@
-
js 验证
+ Hello World
Hello World
diff --git a/global-types/globals.d.ts b/global-types/globals.d.ts
index 659109f..cc2d6f1 100644
--- a/global-types/globals.d.ts
+++ b/global-types/globals.d.ts
@@ -1,4 +1,4 @@
-// goja.d.ts
+// global.d.ts
declare global {
@@ -25,6 +25,7 @@ declare global {
put(key: string, value: string): Promise;
}
+ // @ts-ignore
const event: EventSystem;
// Request 相关类型
@@ -103,8 +104,8 @@ declare global {
}
interface KVSystem {
- repo(group: string): KVOps;
- org(group: string): KVOps;
+ repo(...group: string[]): KVOps;
+ org(...group: string[]): KVOps;
}
const kv: KVSystem;
@@ -118,6 +119,7 @@ declare global {
debug(...args: any[]): void;
}
+ // @ts-ignore
const console: Console;
}
diff --git a/pkg/core/domain.go b/pkg/core/domain.go
index db9452b..39d8197 100644
--- a/pkg/core/domain.go
+++ b/pkg/core/domain.go
@@ -12,17 +12,15 @@ import (
type PageDomain struct {
*ServerMeta
- alias *DomainAlias
baseDomain string
defaultBranch string
}
-func NewPageDomain(meta *ServerMeta, alias *DomainAlias, baseDomain, defaultBranch string) *PageDomain {
+func NewPageDomain(meta *ServerMeta, baseDomain, defaultBranch string) *PageDomain {
return &PageDomain{
baseDomain: baseDomain,
defaultBranch: defaultBranch,
ServerMeta: meta,
- alias: alias,
}
}
@@ -40,7 +38,7 @@ func (p *PageDomain) ParseDomainMeta(ctx context.Context, domain, path, branch s
}
pathArr := strings.Split(strings.TrimPrefix(path, "/"), "/")
if !strings.HasSuffix(domain, "."+p.baseDomain) {
- alias, err := p.alias.Query(ctx, domain) // 确定 alias 是否存在内容
+ alias, err := p.Alias.Query(ctx, domain) // 确定 alias 是否存在内容
if err != nil {
zap.L().Warn("unknown domain", zap.String("base", p.baseDomain), zap.String("domain", domain), zap.Error(err))
return nil, os.ErrNotExist
@@ -83,10 +81,6 @@ func (p *PageDomain) returnMeta(ctx context.Context, owner, repo, branch string,
result.Owner = owner
result.Repo = repo
result.Path = strings.Join(path, "/")
- // todo: 优化保存逻辑 ,减少写入
- if err = p.alias.Bind(ctx, meta.Alias, result.Owner, result.Repo, branch); err != nil {
- zap.L().Warn("alias binding error.", zap.Error(err))
- return nil, err
- }
+
return result, nil
}
diff --git a/pkg/core/meta.go b/pkg/core/meta.go
index 5e4db20..89398d8 100644
--- a/pkg/core/meta.go
+++ b/pkg/core/meta.go
@@ -24,6 +24,7 @@ import (
type ServerMeta struct {
Backend
Domain string
+ Alias *DomainAlias
client *http.Client
cache *tools.KVCache[PageMetaContent]
@@ -70,10 +71,11 @@ func (m *PageMetaContent) String() string {
return string(marshal)
}
-func NewServerMeta(client *http.Client, backend Backend, domain string, cache kv.KV, ttl time.Duration) *ServerMeta {
+func NewServerMeta(client *http.Client, backend Backend, domain string, alias *DomainAlias, cache kv.KV, ttl time.Duration) *ServerMeta {
return &ServerMeta{
Backend: backend,
Domain: domain,
+ Alias: alias,
client: client,
cache: tools.NewCache[PageMetaContent](cache, "meta", ttl),
locker: utils.NewLocker(),
@@ -144,7 +146,11 @@ func (s *ServerMeta) GetMeta(ctx context.Context, owner, repo, branch string) (*
_ = s.cache.Store(ctx, key, *rel)
return nil, err
}
-
+ // todo: 优化保存逻辑 ,减少写入
+ if err = s.Alias.Bind(ctx, rel.Alias, owner, repo, branch); err != nil {
+ zap.L().Warn("alias binding error.", zap.Error(err))
+ return nil, err
+ }
_ = s.cache.Store(ctx, key, *rel)
return rel, nil
}
diff --git a/pkg/filters/block.go b/pkg/filters/block.go
index 5ccc32f..cc80a9c 100644
--- a/pkg/filters/block.go
+++ b/pkg/filters/block.go
@@ -2,6 +2,7 @@ package filters
import (
"net/http"
+ "os"
"gopkg.d7z.net/gitea-pages/pkg/core"
)
@@ -16,7 +17,7 @@ func FilterInstBlock(_ core.Params) (core.FilterInstance, error) {
return nil, err
}
if param.Code == 0 {
- param.Code = http.StatusForbidden
+ return nil, os.ErrNotExist
}
if param.Message == "" {
param.Message = http.StatusText(param.Code)
diff --git a/pkg/filters/goja/goja.go b/pkg/filters/goja/goja.go
index 75edbcd..1687fcf 100644
--- a/pkg/filters/goja/goja.go
+++ b/pkg/filters/goja/goja.go
@@ -17,6 +17,7 @@ import (
)
// todo: 新增超时配置
+
func FilterInstGoJa(gl core.Params) (core.FilterInstance, error) {
var global struct {
Timeout time.Duration `json:"timeout"`
@@ -50,7 +51,7 @@ func FilterInstGoJa(gl core.Params) (core.FilterInstance, error) {
debug := NewDebug(global.EnableDebug && param.Debug && request.URL.Query().
Get("debug") == "true", request, w)
- program, err := goja.Compile("main.js", js, false)
+ program, err := goja.Compile(param.Exec, js, false)
if err != nil {
return debug.Flush(err)
}
diff --git a/pkg/filters/goja/var_kv.go b/pkg/filters/goja/var_kv.go
index 372f8da..acbb484 100644
--- a/pkg/filters/goja/var_kv.go
+++ b/pkg/filters/goja/var_kv.go
@@ -2,7 +2,6 @@ package goja
import (
"os"
- "strings"
"github.com/dop251/goja"
"github.com/pkg/errors"
@@ -12,22 +11,21 @@ import (
func KVInject(ctx core.FilterContext, jsCtx *goja.Runtime) error {
return jsCtx.GlobalObject().Set("kv", map[string]interface{}{
- "repo": func(group string) (goja.Value, error) {
- return kvResult(ctx.RepoDB)(ctx, jsCtx, group)
+ "repo": func(group ...string) (goja.Value, error) {
+ return kvResult(ctx.RepoDB)(ctx, jsCtx, group...)
},
- "org": func(group string) (goja.Value, error) {
- return kvResult(ctx.OrgDB)(ctx, jsCtx, group)
+ "org": func(group ...string) (goja.Value, error) {
+ return kvResult(ctx.OrgDB)(ctx, jsCtx, group...)
},
})
}
-func kvResult(db kv.CursorPagedKV) func(ctx core.FilterContext, jsCtx *goja.Runtime, group string) (goja.Value, error) {
- return func(ctx core.FilterContext, jsCtx *goja.Runtime, group string) (goja.Value, error) {
- group = strings.TrimSpace(group)
- if group == "" {
+func kvResult(db kv.CursorPagedKV) func(ctx core.FilterContext, jsCtx *goja.Runtime, group ...string) (goja.Value, error) {
+ return func(ctx core.FilterContext, jsCtx *goja.Runtime, group ...string) (goja.Value, error) {
+ if len(group) == 0 {
return goja.Undefined(), errors.New("invalid group")
}
- db := db.Child(group).(kv.CursorPagedKV)
+ db := db.Child(group...).(kv.CursorPagedKV)
return jsCtx.ToValue(map[string]interface{}{
"get": func(key string) (goja.Value, error) {
get, err := db.Get(ctx, key)
diff --git a/pkg/server.go b/pkg/server.go
index 47f681c..3396cdd 100644
--- a/pkg/server.go
+++ b/pkg/server.go
@@ -54,8 +54,9 @@ func NewPageServer(
errorHandler func(w http.ResponseWriter, r *http.Request, err error),
filterConfig map[string]map[string]any,
) (*Server, error) {
- svcMeta := core.NewServerMeta(client, backend, domain, cacheMeta, cacheMetaTTL)
- pageMeta := core.NewPageDomain(svcMeta, core.NewDomainAlias(db.Child("config", "alias")), domain, defaultBranch)
+ alias := core.NewDomainAlias(db.Child("config", "alias"))
+ svcMeta := core.NewServerMeta(client, backend, domain, alias, cacheMeta, cacheMetaTTL)
+ pageMeta := core.NewPageDomain(svcMeta, domain, defaultBranch)
globCache, err := lru.New[string, glob.Glob](512)
if err != nil {
return nil, err
diff --git a/tests/filter_block_test.go b/tests/filter_block_test.go
index 419a9d2..3b83a37 100644
--- a/tests/filter_block_test.go
+++ b/tests/filter_block_test.go
@@ -23,7 +23,7 @@ func Test_filter_block(t *testing.T) {
routes:
- path: "bad.html"
block:
- code:
+ code: 403
`)
data, _, err = server.OpenFile("https://org1.example.com/repo1/")
assert.NoError(t, err)
@@ -32,5 +32,5 @@ routes:
assert.Equal(t, 403, resp.StatusCode)
// 默认排除的内容
_, resp, _ = server.OpenFile("https://org1.example.com/repo1/.pages.yaml")
- assert.Equal(t, 403, resp.StatusCode)
+ assert.Equal(t, 404, resp.StatusCode)
}