mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
stop riding the short bus, no clue why this stuff is here. only adds confusion, removing (#1)
server exposes Router field
This commit is contained in:
committed by
Travis Reeder
parent
85f7a53cc0
commit
53cbe2d5a4
@@ -144,10 +144,6 @@ var (
|
|||||||
code: http.StatusBadRequest,
|
code: http.StatusBadRequest,
|
||||||
error: errors.New("Negative idle timeout"),
|
error: errors.New("Negative idle timeout"),
|
||||||
}
|
}
|
||||||
ErrNoSpecialHandlerFound = err{
|
|
||||||
code: http.StatusNotFound,
|
|
||||||
error: errors.New("Path not found"),
|
|
||||||
}
|
|
||||||
ErrCallNotFound = err{
|
ErrCallNotFound = err{
|
||||||
code: http.StatusNotFound,
|
code: http.StatusNotFound,
|
||||||
error: errors.New("Call not found"),
|
error: errors.New("Call not found"),
|
||||||
|
|||||||
@@ -28,31 +28,6 @@ type runnerResponse struct {
|
|||||||
Error *models.ErrorBody `json:"error,omitempty"`
|
Error *models.ErrorBody `json:"error,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) handleSpecial(c *gin.Context) {
|
|
||||||
ctx := c.Request.Context()
|
|
||||||
|
|
||||||
ctx = context.WithValue(ctx, api.AppName, "")
|
|
||||||
c.Set(api.AppName, "")
|
|
||||||
ctx = context.WithValue(ctx, api.Path, c.Request.URL.Path)
|
|
||||||
c.Set(api.Path, c.Request.URL.Path)
|
|
||||||
|
|
||||||
r, err := s.UseSpecialHandlers(c.Writer, c.Request)
|
|
||||||
if err != nil {
|
|
||||||
handleErrorResponse(c, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.Request = r
|
|
||||||
c.Set(api.AppName, r.Context().Value(api.AppName).(string))
|
|
||||||
if c.MustGet(api.AppName).(string) == "" {
|
|
||||||
handleErrorResponse(c, models.ErrRoutesNotFound)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// now call the normal runner call
|
|
||||||
s.handleRequest(c, nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
func toEnvName(envtype, name string) string {
|
func toEnvName(envtype, name string) string {
|
||||||
name = strings.ToUpper(strings.Replace(name, "-", "_", -1))
|
name = strings.ToUpper(strings.Replace(name, "-", "_", -1))
|
||||||
if envtype == "" {
|
if envtype == "" {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
@@ -50,7 +51,6 @@ type Server struct {
|
|||||||
|
|
||||||
apiURL string
|
apiURL string
|
||||||
|
|
||||||
specialHandlers []SpecialHandler
|
|
||||||
appListeners []AppListener
|
appListeners []AppListener
|
||||||
middlewares []Middleware
|
middlewares []Middleware
|
||||||
runnerListeners []RunnerListener
|
runnerListeners []RunnerListener
|
||||||
@@ -385,8 +385,10 @@ func (s *Server) bindHandlers(ctx context.Context) {
|
|||||||
engine.Any("/r/:app", s.handleRunnerRequest)
|
engine.Any("/r/:app", s.handleRunnerRequest)
|
||||||
engine.Any("/r/:app/*route", s.handleRunnerRequest)
|
engine.Any("/r/:app/*route", s.handleRunnerRequest)
|
||||||
|
|
||||||
// This final route is used for extensions, see Server.Add
|
engine.NoRoute(func(c *gin.Context) {
|
||||||
engine.NoRoute(s.handleSpecial)
|
logrus.Debugln("not found", c.Request.URL.Path)
|
||||||
|
c.JSON(http.StatusNotFound, simpleError(errors.New("Path not found")))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
type appResponse struct {
|
type appResponse struct {
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
package server
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
|
|
||||||
"github.com/fnproject/fn/api/models"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SpecialHandler verysimilar to a handler but since it is not used as middle ware no way
|
|
||||||
// to get context without returning it. So we just return a request which could have newly made
|
|
||||||
// contexts.
|
|
||||||
type SpecialHandler interface {
|
|
||||||
Handle(w http.ResponseWriter, r *http.Request) (*http.Request, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// AddSpecialHandler adds the SpecialHandler to the specialHandlers list.
|
|
||||||
func (s *Server) AddSpecialHandler(handler SpecialHandler) {
|
|
||||||
s.specialHandlers = append(s.specialHandlers, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
// UseSpecialHandlers execute all special handlers
|
|
||||||
func (s *Server) UseSpecialHandlers(resp http.ResponseWriter, req *http.Request) (*http.Request, error) {
|
|
||||||
if len(s.specialHandlers) == 0 {
|
|
||||||
return req, models.ErrNoSpecialHandlerFound
|
|
||||||
}
|
|
||||||
var r *http.Request
|
|
||||||
var err error
|
|
||||||
|
|
||||||
for _, l := range s.specialHandlers {
|
|
||||||
r, err = l.Handle(resp, req)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return r, nil
|
|
||||||
}
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
package server
|
|
||||||
|
|
||||||
import (
|
|
||||||
"net/http"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
type testSpecialHandler struct{}
|
|
||||||
|
|
||||||
func (h *testSpecialHandler) Handle(w http.ResponseWriter, r *http.Request) (*http.Request, error) {
|
|
||||||
// r = r.WithContext(context.WithValue(r.Context(), api.AppName, "test"))
|
|
||||||
return r, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSpecialHandlerSet(t *testing.T) {
|
|
||||||
// todo: temporarily commented as we may remove special handlers
|
|
||||||
// ctx := context.Background()
|
|
||||||
|
|
||||||
// tasks := make(chan task.Request)
|
|
||||||
// ctx, cancel := context.WithCancel(context.Background())
|
|
||||||
// defer cancel()
|
|
||||||
|
|
||||||
// rnr, cancelrnr := testRunner(t)
|
|
||||||
// defer cancelrnr()
|
|
||||||
|
|
||||||
// s := &Server{
|
|
||||||
// Runner: rnr,
|
|
||||||
// Router: gin.New(),
|
|
||||||
// Datastore: &datastore.Mock{
|
|
||||||
// Apps: []*models.App{
|
|
||||||
// {Name: "test"},
|
|
||||||
// },
|
|
||||||
// Routes: []*models.Route{
|
|
||||||
// {Path: "/test", Image: "funcy/hello", AppName: "test"},
|
|
||||||
// },
|
|
||||||
// },
|
|
||||||
// MQ: &mqs.Mock{},
|
|
||||||
// tasks: tasks,
|
|
||||||
// Enqueue: DefaultEnqueue,
|
|
||||||
// }
|
|
||||||
|
|
||||||
// router := s.Router
|
|
||||||
// router.Use(prepareMiddleware(ctx))
|
|
||||||
// s.bindHandlers()
|
|
||||||
// s.AddSpecialHandler(&testSpecialHandler{})
|
|
||||||
|
|
||||||
// _, rec := routerRequest(t, router, "GET", "/test", nil)
|
|
||||||
// if rec.Code != 200 {
|
|
||||||
// dump, _ := httputil.DumpResponse(rec.Result(), true)
|
|
||||||
// t.Fatalf("Test SpecialHandler: expected special handler to run functions successfully. Response:\n%s", dump)
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user