This is an automated email from the ASF dual-hosted git repository.

mark4z pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/dubbo-go-pixiu.git


The following commit(s) were added to refs/heads/develop by this push:
     new 80462801 1.0.0 (#595)
80462801 is described below

commit 804628011ed9dd9e67d063234b123a8a1390bb0a
Author: Mark4z <36187602+mar...@users.noreply.github.com>
AuthorDate: Thu Nov 30 23:53:38 2023 +0800

    1.0.0 (#595)
    
    * V1.0.0 Changes (#588)
    
    * [feature] cors support options request (#591)
    
    * V1.0.0 Changes
    
    * [feature] cors support options request
---
 CHANGE.md                         | 51 ++++++++++++++++++++++++++++++++-------
 pixiu/pkg/common/constant/http.go | 10 +++++---
 pixiu/pkg/common/router/router.go |  2 +-
 pixiu/pkg/filter/cors/cors.go     | 36 +++++++++++++++++----------
 4 files changed, 72 insertions(+), 27 deletions(-)

diff --git a/CHANGE.md b/CHANGE.md
index 0031f07f..2690410f 100644
--- a/CHANGE.md
+++ b/CHANGE.md
@@ -1,6 +1,39 @@
 # Release Notes
 
 ---
+## 1.0.0
+
+### New Features
+- [fail inject](https://github.com/apache/dubbo-go-pixiu/pull/571)
+- [add support for header based 
route](https://github.com/apache/dubbo-go-pixiu/pull/565)
+- [Add Maglev hashing LB 
algorithm](https://github.com/apache/dubbo-go-pixiu/pull/554)
+- [triple proxy support import 
protosets](https://github.com/apache/dubbo-go-pixiu/pull/548)
+- [Add GracefulShutdown Signal For Windows 
](https://github.com/apache/dubbo-go-pixiu/pull/522)
+- [Tracing support dubbo 
invoke](https://github.com/apache/dubbo-go-pixiu/pull/559)
+
+### Enhancement
+- [refactor prometheus 
metric](https://github.com/apache/dubbo-go-pixiu/pull/573)
+- [remove unused pkg 
imports](https://github.com/apache/dubbo-go-pixiu/pull/574)
+- [chore: unnecessary use of 
fmt.Sprintf](https://github.com/apache/dubbo-go-pixiu/pull/575)
+- [chore:use wasm filter build tags add 
wasm](https://github.com/apache/dubbo-go-pixiu/pull/567)
+- [docs:format and change samples 
link](https://github.com/apache/dubbo-go-pixiu/pull/556)
+- [revert gatewayCmd to Run dubbo go 
pixiu](https://github.com/apache/dubbo-go-pixiu/pull/557)
+- [full import format](https://github.com/apache/dubbo-go-pixiu/pull/527)
+- [upgrade hessian2 to 
v1.11.3](https://github.com/apache/dubbo-go-pixiu/pull/516)
+
+### Bugfixes
+- [register hashing and array out of bounds and init 
hashing](https://github.com/apache/dubbo-go-pixiu/pull/530)
+- [optimize timeout 
statusCode](https://github.com/apache/dubbo-go-pixiu/pull/521)
+- [optimizing Metric 
Implementation](https://github.com/apache/dubbo-go-pixiu/pull/528)
+- [add and modify nacos config 
arguments](https://github.com/apache/dubbo-go-pixiu/pull/524)
+- [fix NPE when filter config is 
nil](https://github.com/apache/dubbo-go-pixiu/pull/517)
+- [use wasmer-go v1.0.4 which is compatible with mac 
arm](https://github.com/apache/dubbo-go-pixiu/pull/515)
+- [fix sample url using 
github.com/apache/dubbo-go-pixiu-samples](https://github.com/apache/dubbo-go-pixiu/pull/506)
+- [traffic filter fix weight strategy and error handle within Apply 
method](https://github.com/apache/dubbo-go-pixiu/pull/507)
+- [httpfilter loadbalancer does not work when it has spaces between multiple 
urls](https://github.com/apache/dubbo-go-pixiu/pull/513)
+
+Milestone: 
[https://github.com/apache/dubbo-go-pixiu/milestone/8](https://github.com/apache/dubbo-go-pixiu/milestone/8)
+
 ## 0.6.0
 
 ### New Features
@@ -17,7 +50,7 @@
 ### Enhancement
 - [Remove "Types" on Http to dubbo 
proxy](https://github.com/apache/dubbo-go-pixiu/pull/456)
 - [ASoC 2002: Optimization of Pixiu timeout feature 
](https://github.com/apache/dubbo-go-pixiu/pull/475)
-- 
+-
 
 ### Bugfixes
 
@@ -110,7 +143,7 @@ Milestone: 
[https://github.com/apache/dubbo-go-pixiu/milestone/6](https://github
 - [Fix filterManager get filters with random 
order](https://github.com/apache/dubbo-go-pixiu/pull/264)
 - [Fix nil issue for timeout 
filter](https://github.com/apache/dubbo-go-pixiu/pull/278)
 
-Milestone: 
[https://github.com/apache/dubbo-go-pixiu/milestone/5](https://github.com/apache/dubbo-go-pixiu/milestone/5)
 
+Milestone: 
[https://github.com/apache/dubbo-go-pixiu/milestone/5](https://github.com/apache/dubbo-go-pixiu/milestone/5)
 
 
 ## 0.3.0
@@ -120,25 +153,25 @@ Milestone: 
[https://github.com/apache/dubbo-go-pixiu/milestone/5](https://github
 - [add integrate test](https://github.com/apache/dubbo-go-pixiu/pull/183)
 - [handle rate limit config update 
event](https://github.com/apache/dubbo-go-pixiu/pull/196)
 - [add otel metric export to prometheus in 
pixiu](https://github.com/apache/dubbo-go-pixiu/pull/204)
-- [make Pixiu Admin config management 
finer-grained](https://github.com/apache/dubbo-go-pixiu/pull/171)     
-     
+- [make Pixiu Admin config management 
finer-grained](https://github.com/apache/dubbo-go-pixiu/pull/171)
+
 ### Enhancement
 - [update samples/admin](https://github.com/apache/dubbo-go-pixiu/pull/208)
 - [update ratelimit samples](https://github.com/apache/dubbo-go-pixiu/pull/206)
 - [make router case 
sensitive](https://github.com/apache/dubbo-go-pixiu/pull/209)
 - [add more test case](https://github.com/apache/dubbo-go-pixiu/pull/203)
 - [Enrich filter test case](https://github.com/apache/dubbo-go-pixiu/pull/202)
-- [Enrich response.go's test 
case](https://github.com/apache/dubbo-go-pixiu/pull/197)    
-          
+- [Enrich response.go's test 
case](https://github.com/apache/dubbo-go-pixiu/pull/197)
+
 ### Bugfixes
 - [Fix CI check status not match 
required](https://github.com/apache/dubbo-go-pixiu/pull/199)
 - [Fix timeout config 
overridden](https://github.com/apache/dubbo-go-pixiu/pull/190)
 - [Fix/quickstart](https://github.com/apache/dubbo-go-pixiu/pull/191)
 - [FixBug: can't delete node by 
path](https://github.com/apache/dubbo-go-pixiu/pull/201)
 - [Fix flow chart](https://github.com/apache/dubbo-go-pixiu/pull/205)
-- [Fix reviewdog](https://github.com/apache/dubbo-go-pixiu/pull/195)   
-     
-Milestone: 
[https://github.com/apache/dubbo-go-pixiu/milestone/4](https://github.com/apache/dubbo-go-pixiu/milestone/4)
 
+- [Fix reviewdog](https://github.com/apache/dubbo-go-pixiu/pull/195)
+
+Milestone: 
[https://github.com/apache/dubbo-go-pixiu/milestone/4](https://github.com/apache/dubbo-go-pixiu/milestone/4)
 
 
 ## 0.2.1
diff --git a/pixiu/pkg/common/constant/http.go 
b/pixiu/pkg/common/constant/http.go
index 69fa073f..1a17040c 100644
--- a/pixiu/pkg/common/constant/http.go
+++ b/pixiu/pkg/common/constant/http.go
@@ -21,6 +21,7 @@ const (
        HeaderKeyContextType = "Content-Type"
 
        HeaderKeyAccessControlAllowOrigin      = "Access-Control-Allow-Origin"
+       HeaderKeyAccessControlAllowHeaders     = "Access-Control-Allow-Headers"
        HeaderKeyAccessControlExposeHeaders    = "Access-Control-Expose-Headers"
        HeaderKeyAccessControlAllowMethods     = "Access-Control-Allow-Methods"
        HeaderKeyAccessControlMaxAge           = "Access-Control-Max-Age"
@@ -48,10 +49,11 @@ const (
 )
 
 const (
-       Get    = "GET"
-       Put    = "PUT"
-       Post   = "POST"
-       Delete = "DELETE"
+       Get     = "GET"
+       Put     = "PUT"
+       Post    = "POST"
+       Delete  = "DELETE"
+       Options = "OPTIONS"
 )
 
 const (
diff --git a/pixiu/pkg/common/router/router.go 
b/pixiu/pkg/common/router/router.go
index c807d3bd..d8cbc37d 100644
--- a/pixiu/pkg/common/router/router.go
+++ b/pixiu/pkg/common/router/router.go
@@ -137,7 +137,7 @@ func (rm *RouterCoordinator) OnAddRouter(r *model.Router) {
        rm.rw.Lock()
        defer rm.rw.Unlock()
        if r.Match.Methods == nil {
-               r.Match.Methods = []string{constant.Get, constant.Put, 
constant.Delete, constant.Post}
+               r.Match.Methods = []string{constant.Get, constant.Put, 
constant.Delete, constant.Post, constant.Options}
        }
        isPrefix := r.Match.Prefix != ""
        for _, method := range r.Match.Methods {
diff --git a/pixiu/pkg/filter/cors/cors.go b/pixiu/pkg/filter/cors/cors.go
index 4269c756..b76b8715 100644
--- a/pixiu/pkg/filter/cors/cors.go
+++ b/pixiu/pkg/filter/cors/cors.go
@@ -25,6 +25,7 @@ import (
        "github.com/apache/dubbo-go-pixiu/pixiu/pkg/common/constant"
        "github.com/apache/dubbo-go-pixiu/pixiu/pkg/common/extension/filter"
        "github.com/apache/dubbo-go-pixiu/pixiu/pkg/context/http"
+       "github.com/apache/dubbo-go-pixiu/pkg/http/headers"
 )
 
 const (
@@ -79,41 +80,50 @@ func (factory *FilterFactory) PrepareFilterChain(ctx 
*http.HttpContext, chain fi
 }
 
 func (f *Filter) Decode(ctx *http.HttpContext) filter.FilterStatus {
-       f.handleCors(ctx)
-       return filter.Continue
-}
-
-func (f *Filter) handleCors(ctx *http.HttpContext) {
+       writer := ctx.Writer
        c := f.cfg
        if c == nil {
-               return
+               return filter.Continue
+       }
+       if ctx.GetHeader(headers.Origin) == "" {
+               // not a cors request
+               return filter.Continue
        }
 
        domains := c.AllowOrigin
        if len(domains) != 0 {
                for _, domain := range domains {
-                       if ctx.Request.Host == domain || ctx.Request.URL.Host 
== domain ||
-                               ctx.GetHeader("Host") == domain || 
ctx.GetHeader("host") == domain {
-                               
ctx.SourceResp.(*stdHttp.Response).Header.Add(constant.HeaderKeyAccessControlAllowOrigin,
 domain)
+                       if domain == "*" || ctx.GetHeader("Origin") == domain {
+                               
writer.Header().Add(constant.HeaderKeyAccessControlAllowOrigin, domain)
+                               continue
                        }
                }
        }
 
        if c.AllowHeaders != "" {
-               
ctx.SourceResp.(*stdHttp.Response).Header.Add(constant.HeaderKeyAccessControlExposeHeaders,
 c.AllowHeaders)
+               
writer.Header().Add(constant.HeaderKeyAccessControlAllowHeaders, c.AllowHeaders)
+       }
+
+       if c.ExposeHeaders != "" {
+               
writer.Header().Add(constant.HeaderKeyAccessControlExposeHeaders, 
c.ExposeHeaders)
        }
 
        if c.AllowMethods != "" {
-               
ctx.SourceResp.(*stdHttp.Response).Header.Add(constant.HeaderKeyAccessControlAllowMethods,
 c.AllowMethods)
+               
writer.Header().Add(constant.HeaderKeyAccessControlAllowMethods, c.AllowMethods)
        }
 
        if c.MaxAge != "" {
-               
ctx.SourceResp.(*stdHttp.Response).Header.Add(constant.HeaderKeyAccessControlMaxAge,
 c.MaxAge)
+               writer.Header().Add(constant.HeaderKeyAccessControlMaxAge, 
c.MaxAge)
        }
 
        if c.AllowCredentials {
-               
ctx.SourceResp.(*stdHttp.Response).Header.Add(constant.HeaderKeyAccessControlAllowCredentials,
 "true")
+               
writer.Header().Add(constant.HeaderKeyAccessControlAllowCredentials, "true")
        }
+       if ctx.Request.Method == stdHttp.MethodOptions {
+               ctx.SendLocalReply(stdHttp.StatusOK, nil)
+               return filter.Stop
+       }
+       return filter.Continue
 }
 
 func (factory *FilterFactory) Apply() error {

Reply via email to