From d7801aca758231cd4cda0d9c0c3cb1ef42155996 Mon Sep 17 00:00:00 2001 From: Khanh Tran <32532742+khanhtc1202@users.noreply.github.com> Date: Thu, 10 Dec 2020 15:19:09 +0900 Subject: [PATCH] Add UpdateApplication to WebApi (#1228) **What this PR does / why we need it**: **Which issue(s) this PR fixes**: Fixes #1219 **Does this PR introduce a user-facing change?**: ```release-note NONE ``` This PR was merged by Kapetanios. --- pkg/app/api/grpcapi/web_api.go | 44 +++++++++++++++++++ .../api/service/webservice/service.pb.auth.go | 2 + pkg/app/api/service/webservice/service.proto | 14 ++++++ 3 files changed, 60 insertions(+) diff --git a/pkg/app/api/grpcapi/web_api.go b/pkg/app/api/grpcapi/web_api.go index eebe48408d..066d2e31cd 100644 --- a/pkg/app/api/grpcapi/web_api.go +++ b/pkg/app/api/grpcapi/web_api.go @@ -403,6 +403,50 @@ func (a *WebAPI) AddApplication(ctx context.Context, req *webservice.AddApplicat }, nil } +func (a *WebAPI) UpdateApplication(ctx context.Context, req *webservice.UpdateApplicationRequest) (*webservice.UpdateApplicationResponse, error) { + claims, err := rpcauth.ExtractClaims(ctx) + if err != nil { + a.logger.Error("failed to authenticate the current user", zap.Error(err)) + return nil, err + } + + piped, err := getPiped(ctx, a.pipedStore, req.PipedId, a.logger) + if err != nil { + return nil, err + } + + if piped.ProjectId != claims.Role.ProjectId { + return nil, status.Error(codes.InvalidArgument, "Requested piped does not belong to your project") + } + + gitpath, err := makeGitPath( + req.GitPath.Repo.Id, + req.GitPath.Path, + req.GitPath.ConfigFilename, + piped, + a.logger, + ) + if err != nil { + return nil, err + } + + err = a.applicationStore.UpdateApplication(ctx, req.ApplicationId, func(app *model.Application) error { + app.Name = req.Name + app.EnvId = req.EnvId + app.PipedId = req.PipedId + app.GitPath = gitpath + app.Kind = req.Kind + app.CloudProvider = req.CloudProvider + return nil + }) + if err != nil { + a.logger.Error("failed to update application", zap.Error(err)) + return nil, status.Error(codes.Internal, "Failed to update application") + } + + return &webservice.UpdateApplicationResponse{}, nil +} + func (a *WebAPI) EnableApplication(ctx context.Context, req *webservice.EnableApplicationRequest) (*webservice.EnableApplicationResponse, error) { if err := a.updateApplicationEnable(ctx, req.ApplicationId, true); err != nil { return nil, err diff --git a/pkg/app/api/service/webservice/service.pb.auth.go b/pkg/app/api/service/webservice/service.pb.auth.go index 9b0b733787..182181c181 100644 --- a/pkg/app/api/service/webservice/service.pb.auth.go +++ b/pkg/app/api/service/webservice/service.pb.auth.go @@ -56,6 +56,8 @@ func (a *authorizer) Authorize(method string, r model.Role) bool { return isAdmin(r) case "/pipe.api.service.webservice.WebService/AddApplication": return isAdmin(r) + case "/pipe.api.service.webservice.WebService/UpdateApplication": + return isAdmin(r) case "/pipe.api.service.webservice.WebService/EnableApplication": return isAdmin(r) case "/pipe.api.service.webservice.WebService/DisableApplication": diff --git a/pkg/app/api/service/webservice/service.proto b/pkg/app/api/service/webservice/service.proto index 91f0c83bfb..a42256e3e0 100644 --- a/pkg/app/api/service/webservice/service.proto +++ b/pkg/app/api/service/webservice/service.proto @@ -50,6 +50,7 @@ service WebService { // Application rpc AddApplication(AddApplicationRequest) returns (AddApplicationResponse) {} + rpc UpdateApplication(UpdateApplicationRequest) returns (UpdateApplicationResponse) {} rpc EnableApplication(EnableApplicationRequest) returns (EnableApplicationResponse) {} rpc DisableApplication(DisableApplicationRequest) returns (DisableApplicationResponse) {} rpc ListApplications(ListApplicationsRequest) returns (ListApplicationsResponse) {} @@ -179,6 +180,19 @@ message AddApplicationResponse { string application_id = 1 [(validate.rules).string.min_len = 1]; } +message UpdateApplicationRequest { + string application_id = 1 [(validate.rules).string.min_len = 1]; + string name = 2 [(validate.rules).string.min_len = 1]; + string env_id = 3 [(validate.rules).string.min_len = 1]; + string piped_id = 4 [(validate.rules).string.min_len = 1]; + model.ApplicationGitPath git_path = 5 [(validate.rules).message.required = true]; + model.ApplicationKind kind = 6 [(validate.rules).enum.defined_only = true]; + string cloud_provider = 7 [(validate.rules).string.min_len = 1]; +} + +message UpdateApplicationResponse { +} + message EnableApplicationRequest { string application_id = 1 [(validate.rules).string.min_len = 1]; }