LINT + Server.extractParameters is now private + add management for errors : 'UncallableController' and 'UncallableMethod'
This commit is contained in:
parent
0ccee7c950
commit
6ebdd61325
|
@ -3,6 +3,7 @@ package request
|
|||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"git.xdrm.io/go/aicra/err"
|
||||
"git.xdrm.io/go/aicra/response"
|
||||
"log"
|
||||
"net/http"
|
||||
|
@ -93,7 +94,7 @@ func FetchFormData(req *http.Request) map[string]interface{} {
|
|||
|
||||
// LoadController tries to load a controller from its uri
|
||||
// checks for its given method ('Get', 'Post', 'Put', or 'Delete')
|
||||
func (i *Request) LoadController(method string) (func(response.Arguments, *response.Response) response.Response, error) {
|
||||
func (i *Request) LoadController(method string) (func(response.Arguments, *response.Response) response.Response, err.Error) {
|
||||
|
||||
/* (1) Build controller path */
|
||||
path := strings.Join(i.Path, "-")
|
||||
|
@ -111,21 +112,21 @@ func (i *Request) LoadController(method string) (func(response.Arguments, *respo
|
|||
/* (2) Try to load plugin */
|
||||
p, err2 := plugin.Open(path)
|
||||
if err2 != nil {
|
||||
return nil, err2
|
||||
return nil, err.UncallableController
|
||||
}
|
||||
|
||||
/* (3) Try to extract method */
|
||||
m, err2 := p.Lookup(method)
|
||||
if err2 != nil {
|
||||
return nil, err2
|
||||
return nil, err.UncallableMethod
|
||||
}
|
||||
|
||||
/* (4) Check signature */
|
||||
callable, validSignature := m.(func(response.Arguments, *response.Response) response.Response)
|
||||
if !validSignature {
|
||||
return nil, fmt.Errorf("Invalid signature for method %s", method)
|
||||
return nil, err.UncallableMethod
|
||||
}
|
||||
|
||||
return callable, nil
|
||||
return callable, err.Success
|
||||
|
||||
}
|
||||
|
|
15
server.go
15
server.go
|
@ -38,7 +38,7 @@ func New(path string) (*Server, error) {
|
|||
|
||||
}
|
||||
|
||||
// Listens and binds the server to the given port
|
||||
// Listen binds the server to the given port
|
||||
func (s *Server) Listen(port uint16) error {
|
||||
|
||||
/* (1) Bind router */
|
||||
|
@ -83,7 +83,7 @@ func (s *Server) routeRequest(res http.ResponseWriter, httpReq *http.Request) {
|
|||
|
||||
/* (4) Check parameters
|
||||
---------------------------------------------------------*/
|
||||
parameters, paramError := s.ExtractParameters(req, method.Parameters)
|
||||
parameters, paramError := s.extractParameters(req, method.Parameters)
|
||||
|
||||
// Fail if argument check failed
|
||||
if paramError.Code != e.Success.Code {
|
||||
|
@ -93,8 +93,9 @@ func (s *Server) routeRequest(res http.ResponseWriter, httpReq *http.Request) {
|
|||
|
||||
/* (5) Load controller
|
||||
---------------------------------------------------------*/
|
||||
callable, err := req.LoadController(httpReq.Method)
|
||||
if err != nil {
|
||||
callable, callErr := req.LoadController(httpReq.Method)
|
||||
if callErr.Code != e.Success.Code {
|
||||
httpError(res, callErr)
|
||||
log.Printf("[err] %s\n", err)
|
||||
return
|
||||
}
|
||||
|
@ -129,12 +130,12 @@ func (s *Server) routeRequest(res http.ResponseWriter, httpReq *http.Request) {
|
|||
|
||||
}
|
||||
|
||||
// ExtractParameters extracts parameters for the request and checks
|
||||
// extractParameters extracts parameters for the request and checks
|
||||
// every single one according to configuration options
|
||||
func (s *Server) ExtractParameters(req *request.Request, methodParam map[string]*config.Parameter) (map[string]interface{}, e.Error) {
|
||||
func (s *Server) extractParameters(req *request.Request, methodParam map[string]*config.Parameter) (map[string]interface{}, e.Error) {
|
||||
|
||||
// init vars
|
||||
var err e.Error = e.Success
|
||||
err := e.Success
|
||||
parameters := make(map[string]interface{})
|
||||
|
||||
// for each param of the config
|
||||
|
|
4
types.go
4
types.go
|
@ -6,6 +6,10 @@ import (
|
|||
"git.xdrm.io/go/aicra/middleware"
|
||||
)
|
||||
|
||||
// Server represents an AICRA instance featuring:
|
||||
// * its type checkers
|
||||
// * its middlewares
|
||||
// * its configuration (controllers)
|
||||
type Server struct {
|
||||
config *config.Controller
|
||||
Params map[string]interface{}
|
||||
|
|
4
util.go
4
util.go
|
@ -55,8 +55,8 @@ func httpPrint(r http.ResponseWriter, res response.Response) {
|
|||
|
||||
// Prints an error as HTTP response
|
||||
func httpError(r http.ResponseWriter, e err.Error) {
|
||||
Json, _ := e.MarshalJSON()
|
||||
JSON, _ := e.MarshalJSON()
|
||||
r.Header().Add("Content-Type", "application/json")
|
||||
r.Write(Json)
|
||||
r.Write(JSON)
|
||||
log.Printf("[http.fail] %s\n", e.Reason)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue