From 035ad926c85b8e7d5a341253253a3453ac0e4ef9 Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Sat, 8 Sep 2018 17:33:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9B=EF=BC=9A=E6=8A=8Apath?= =?UTF-8?q?=E4=B8=AD=E7=9A=84params=E5=90=88=E5=B9=B6=E5=88=B0querystring?= =?UTF-8?q?=E4=B8=AD=EF=BC=8C=E8=BF=99=E6=A0=B7=E5=85=81=E8=AE=B8=E5=9C=A8?= =?UTF-8?q?listItemFilter=E4=B8=AD=E8=AE=BF=E9=97=AE=E8=BF=99=E4=BA=9Bpara?= =?UTF-8?q?ms=E5=8F=82=E6=95=B0=EF=BC=8C=E5=B9=B6=E4=B8=94=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E5=AF=B9=E6=95=B0=E6=8D=AE=E7=9A=84=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/appsrv/dispatcher/dispatcher.go | 38 ++++++++++++++++-------- pkg/appsrv/dispatcher/jointdispatcher.go | 16 +++++----- pkg/cloudcommon/db/db_dispatcher.go | 21 ------------- 3 files changed, 34 insertions(+), 41 deletions(-) diff --git a/pkg/appsrv/dispatcher/dispatcher.go b/pkg/appsrv/dispatcher/dispatcher.go index ea95a458f9..349f12f1aa 100644 --- a/pkg/appsrv/dispatcher/dispatcher.go +++ b/pkg/appsrv/dispatcher/dispatcher.go @@ -7,6 +7,7 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/log" + "yunion.io/x/pkg/utils" "yunion.io/x/onecloud/pkg/appctx" "yunion.io/x/onecloud/pkg/appsrv" @@ -107,9 +108,22 @@ func _fetchEnv(ctx context.Context, w http.ResponseWriter, r *http.Request) (map return params, query, body } +func mergeQueryParams(params map[string]string, query jsonutils.JSONObject, excludes ...string) jsonutils.JSONObject { + if query == nil { + query = jsonutils.NewDict() + } + queryDict := query.(*jsonutils.JSONDict) + for k, v := range params { + if !utils.IsInStringArray(k, excludes) { + queryDict.Add(jsonutils.NewString(v), k[1:len(k)-1]) + } + } + return queryDict +} + func listHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { - manager, _, query, _ := fetchEnv(ctx, w, r) - handleList(ctx, w, manager, "", query) + manager, params, query, _ := fetchEnv(ctx, w, r) + handleList(ctx, w, manager, "", mergeQueryParams(params, query)) } func handleList(ctx context.Context, w http.ResponseWriter, manager IModelDispatchHandler, ctxId string, query jsonutils.JSONObject) { @@ -124,7 +138,7 @@ func handleList(ctx context.Context, w http.ResponseWriter, manager IModelDispat func listInContextHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { manager, params, query, _ := fetchEnv(ctx, w, r) ctxId := params[""] - handleList(ctx, w, manager, ctxId, query) + handleList(ctx, w, manager, ctxId, mergeQueryParams(params, query, "")) } func wrapBody(body jsonutils.JSONObject, key string) jsonutils.JSONObject { @@ -139,7 +153,7 @@ func wrapBody(body jsonutils.JSONObject, key string) jsonutils.JSONObject { func getHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { manager, params, query, _ := fetchEnv(ctx, w, r) - result, err := manager.Get(ctx, params[""], query) + result, err := manager.Get(ctx, params[""], mergeQueryParams(params, query, "")) if err != nil { httperrors.GeneralServerError(w, err) return @@ -149,7 +163,7 @@ func getHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { func getSpecHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { manager, params, query, _ := fetchEnv(ctx, w, r) - result, err := manager.GetSpecific(ctx, params[""], params[""], query) + result, err := manager.GetSpecific(ctx, params[""], params[""], mergeQueryParams(params, query, "", "")) if err != nil { httperrors.GeneralServerError(w, err) return @@ -158,8 +172,8 @@ func getSpecHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) } func createHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { - manager, _, query, body := fetchEnv(ctx, w, r) - handleCreate(ctx, w, manager, "", query, body) + manager, params, query, body := fetchEnv(ctx, w, r) + handleCreate(ctx, w, manager, "", mergeQueryParams(params, query), body) } func handleCreate(ctx context.Context, w http.ResponseWriter, manager IModelDispatchHandler, ctxId string, query jsonutils.JSONObject, body jsonutils.JSONObject) { @@ -197,7 +211,7 @@ func handleCreate(ctx context.Context, w http.ResponseWriter, manager IModelDisp func createInContextHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { manager, params, query, body := fetchEnv(ctx, w, r) ctxId := params[""] - handleCreate(ctx, w, manager, ctxId, query, body) + handleCreate(ctx, w, manager, ctxId, mergeQueryParams(params, query, ""), body) } func performClassActionHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { @@ -212,7 +226,7 @@ func performClassActionHandler(ctx context.Context, w http.ResponseWriter, r *ht } else { data = jsonutils.NewDict() } - results, err := manager.PerformClassAction(ctx, params[""], query, data) + results, err := manager.PerformClassAction(ctx, params[""], mergeQueryParams(params, query, ""), data) if err != nil { httperrors.GeneralServerError(w, err) return @@ -226,7 +240,7 @@ func performActionHandler(ctx context.Context, w http.ResponseWriter, r *http.Re if data == nil { data = jsonutils.NewDict() } - result, err := manager.PerformAction(ctx, params[""], params[""], query, data) + result, err := manager.PerformAction(ctx, params[""], params[""], mergeQueryParams(params, query, "", ""), data) if err != nil { httperrors.GeneralServerError(w, err) return @@ -260,7 +274,7 @@ func updateHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) fmt.Sprintf("No request key: %s", manager.Keyword())) return } - result, err := manager.Update(ctx, params[""], query, data) + result, err := manager.Update(ctx, params[""], mergeQueryParams(params, query, ""), data) if err != nil { httperrors.GeneralServerError(w, err) return @@ -301,7 +315,7 @@ func deleteHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) return } } - result, err := manager.Delete(ctx, params[""], query, data) + result, err := manager.Delete(ctx, params[""], mergeQueryParams(params, query, ""), data) if err != nil { httperrors.GeneralServerError(w, err) return diff --git a/pkg/appsrv/dispatcher/jointdispatcher.go b/pkg/appsrv/dispatcher/jointdispatcher.go index 4e3fd2e65e..87570460e9 100644 --- a/pkg/appsrv/dispatcher/jointdispatcher.go +++ b/pkg/appsrv/dispatcher/jointdispatcher.go @@ -100,8 +100,8 @@ func fetchJointEnv(ctx context.Context, w http.ResponseWriter, r *http.Request) } func jointListHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { - manager, _, query, _ := fetchJointEnv(ctx, w, r) - listResult, err := manager.List(ctx, query, "") + manager, params, query, _ := fetchJointEnv(ctx, w, r) + listResult, err := manager.List(ctx, mergeQueryParams(params, query), "") if err != nil { httperrors.GeneralServerError(w, err) return @@ -114,9 +114,9 @@ func jointListDescendentHandler(ctx context.Context, w http.ResponseWriter, r *h var listResult *modules.ListResult var err error if _, ok := params[""]; ok { - listResult, err = manager.ListMasterDescendent(ctx, params[""], query) + listResult, err = manager.ListMasterDescendent(ctx, params[""], mergeQueryParams(params, query, "")) } else if _, ok := params[""]; ok { - listResult, err = manager.ListSlaveDescendent(ctx, params[""], query) + listResult, err = manager.ListSlaveDescendent(ctx, params[""], mergeQueryParams(params, query, "")) } if err != nil { httperrors.GeneralServerError(w, err) @@ -127,7 +127,7 @@ func jointListDescendentHandler(ctx context.Context, w http.ResponseWriter, r *h func jointGetHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) { manager, params, query, _ := fetchJointEnv(ctx, w, r) - result, err := manager.Get(ctx, params[""], params[""], query) + result, err := manager.Get(ctx, params[""], params[""], mergeQueryParams(params, query, "", "")) if err != nil { httperrors.GeneralServerError(w, err) return @@ -145,7 +145,7 @@ func attachHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) if data == nil { data = jsonutils.NewDict() } - result, err := manager.Attach(ctx, params[""], params[""], query, data) + result, err := manager.Attach(ctx, params[""], params[""], mergeQueryParams(params, query, "", ""), data) if err != nil { httperrors.GeneralServerError(w, err) return @@ -160,7 +160,7 @@ func updateJointHandler(ctx context.Context, w http.ResponseWriter, r *http.Requ httperrors.GeneralServerError(w, err) return } - result, err := manager.Update(ctx, params[""], params[""], query, data) + result, err := manager.Update(ctx, params[""], params[""], mergeQueryParams(params, query, "", ""), data) if err != nil { httperrors.GeneralServerError(w, err) return @@ -174,7 +174,7 @@ func detachHandler(ctx context.Context, w http.ResponseWriter, r *http.Request) if body != nil { data, _ = body.Get(manager.Keyword()) } - result, err := manager.Detach(ctx, params[""], params[""], query, data) + result, err := manager.Detach(ctx, params[""], params[""], mergeQueryParams(params, query, "", ""), data) if err != nil { httperrors.GeneralServerError(w, err) return diff --git a/pkg/cloudcommon/db/db_dispatcher.go b/pkg/cloudcommon/db/db_dispatcher.go index 32b133341f..b005ae1407 100644 --- a/pkg/cloudcommon/db/db_dispatcher.go +++ b/pkg/cloudcommon/db/db_dispatcher.go @@ -53,33 +53,12 @@ func (dispatcher *DBModelDispatcher) ContextKeywordPlural() []string { return nil } -/* -const ( - AUTH_TOKEN = appctx.AppContextKey("X_AUTH_TOKEN") -) -*/ func (dispatcher *DBModelDispatcher) Filter(f appsrv.FilterHandler) appsrv.FilterHandler { return auth.Authenticate(f) - /*return func(ctx context.Context, w http.ResponseWriter, r *http.Request) { - tokenStr := r.Header.Get("X-Auth-Token") - if len(tokenStr) == 0 { - httperrors.UnauthorizedError(w, "Unauthorized") - return - } - token, err := auth.Verify(tokenStr) - if err != nil { - log.Errorf("Verify token failed: %s", err) - httperrors.UnauthorizedError(w, "InvalidToken") - return - } - ctx = context.WithValue(ctx, AUTH_TOKEN, token) - f(ctx, w, r) - } */ } func fetchUserCredential(ctx context.Context) mcclient.TokenCredential { - // token, ok := ctx.Value(AUTH_TOKEN).(mcclient.TokenCredential) token := auth.FetchUserCredential(ctx) if token == nil { log.Fatalf("user token credential not found?")