added controllers and handlers for connectors, triggers, templates

This commit is contained in:
Vistaar Juneja 2023-08-22 11:26:59 +01:00
parent 23f612162a
commit 2870aaaabc
32 changed files with 1054 additions and 19 deletions

View File

@ -18,6 +18,7 @@ import (
gitrpcserver "github.com/harness/gitness/gitrpc/server" gitrpcserver "github.com/harness/gitness/gitrpc/server"
gitrpccron "github.com/harness/gitness/gitrpc/server/cron" gitrpccron "github.com/harness/gitness/gitrpc/server/cron"
checkcontroller "github.com/harness/gitness/internal/api/controller/check" checkcontroller "github.com/harness/gitness/internal/api/controller/check"
"github.com/harness/gitness/internal/api/controller/connector"
"github.com/harness/gitness/internal/api/controller/execution" "github.com/harness/gitness/internal/api/controller/execution"
"github.com/harness/gitness/internal/api/controller/githook" "github.com/harness/gitness/internal/api/controller/githook"
controllerlogs "github.com/harness/gitness/internal/api/controller/logs" controllerlogs "github.com/harness/gitness/internal/api/controller/logs"
@ -29,6 +30,8 @@ import (
"github.com/harness/gitness/internal/api/controller/service" "github.com/harness/gitness/internal/api/controller/service"
"github.com/harness/gitness/internal/api/controller/serviceaccount" "github.com/harness/gitness/internal/api/controller/serviceaccount"
"github.com/harness/gitness/internal/api/controller/space" "github.com/harness/gitness/internal/api/controller/space"
"github.com/harness/gitness/internal/api/controller/template"
"github.com/harness/gitness/internal/api/controller/trigger"
"github.com/harness/gitness/internal/api/controller/user" "github.com/harness/gitness/internal/api/controller/user"
controllerwebhook "github.com/harness/gitness/internal/api/controller/webhook" controllerwebhook "github.com/harness/gitness/internal/api/controller/webhook"
"github.com/harness/gitness/internal/auth/authn" "github.com/harness/gitness/internal/auth/authn"
@ -106,6 +109,9 @@ func initSystem(ctx context.Context, config *types.Config) (*cliserver.System, e
livelog.WireSet, livelog.WireSet,
controllerlogs.WireSet, controllerlogs.WireSet,
secret.WireSet, secret.WireSet,
connector.WireSet,
template.WireSet,
trigger.WireSet,
) )
return &cliserver.System{}, nil return &cliserver.System{}, nil
} }

View File

@ -8,7 +8,6 @@ package main
import ( import (
"context" "context"
"github.com/harness/gitness/cli/server" "github.com/harness/gitness/cli/server"
"github.com/harness/gitness/encrypt" "github.com/harness/gitness/encrypt"
"github.com/harness/gitness/events" "github.com/harness/gitness/events"
@ -16,6 +15,7 @@ import (
server3 "github.com/harness/gitness/gitrpc/server" server3 "github.com/harness/gitness/gitrpc/server"
"github.com/harness/gitness/gitrpc/server/cron" "github.com/harness/gitness/gitrpc/server/cron"
check2 "github.com/harness/gitness/internal/api/controller/check" check2 "github.com/harness/gitness/internal/api/controller/check"
"github.com/harness/gitness/internal/api/controller/connector"
"github.com/harness/gitness/internal/api/controller/execution" "github.com/harness/gitness/internal/api/controller/execution"
"github.com/harness/gitness/internal/api/controller/githook" "github.com/harness/gitness/internal/api/controller/githook"
logs2 "github.com/harness/gitness/internal/api/controller/logs" logs2 "github.com/harness/gitness/internal/api/controller/logs"
@ -28,6 +28,8 @@ import (
"github.com/harness/gitness/internal/api/controller/serviceaccount" "github.com/harness/gitness/internal/api/controller/serviceaccount"
"github.com/harness/gitness/internal/api/controller/space" "github.com/harness/gitness/internal/api/controller/space"
"github.com/harness/gitness/internal/api/controller/system" "github.com/harness/gitness/internal/api/controller/system"
"github.com/harness/gitness/internal/api/controller/template"
"github.com/harness/gitness/internal/api/controller/trigger"
"github.com/harness/gitness/internal/api/controller/user" "github.com/harness/gitness/internal/api/controller/user"
webhook2 "github.com/harness/gitness/internal/api/controller/webhook" webhook2 "github.com/harness/gitness/internal/api/controller/webhook"
"github.com/harness/gitness/internal/auth/authn" "github.com/harness/gitness/internal/auth/authn"
@ -109,6 +111,12 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro
return nil, err return nil, err
} }
secretController := secret.ProvideController(db, pathUID, pathStore, encrypter, secretStore, authorizer, spaceStore) secretController := secret.ProvideController(db, pathUID, pathStore, encrypter, secretStore, authorizer, spaceStore)
triggerStore := database.ProvideTriggerStore(db)
triggerController := trigger.ProvideController(db, authorizer, triggerStore, pipelineStore, spaceStore)
connectorStore := database.ProvideConnectorStore(db)
connectorController := connector.ProvideController(db, pathUID, connectorStore, authorizer, spaceStore)
templateStore := database.ProvideTemplateStore(db)
templateController := template.ProvideController(db, pathUID, pathStore, templateStore, authorizer, spaceStore)
pullReqStore := database.ProvidePullReqStore(db, principalInfoCache) pullReqStore := database.ProvidePullReqStore(db, principalInfoCache)
pullReqActivityStore := database.ProvidePullReqActivityStore(db, principalInfoCache) pullReqActivityStore := database.ProvidePullReqActivityStore(db, principalInfoCache)
codeCommentView := database.ProvideCodeCommentView(db) codeCommentView := database.ProvideCodeCommentView(db)
@ -163,7 +171,7 @@ func initSystem(ctx context.Context, config *types.Config) (*server.System, erro
checkStore := database.ProvideCheckStore(db, principalInfoCache) checkStore := database.ProvideCheckStore(db, principalInfoCache)
checkController := check2.ProvideController(db, authorizer, repoStore, checkStore, gitrpcInterface) checkController := check2.ProvideController(db, authorizer, repoStore, checkStore, gitrpcInterface)
systemController := system.NewController(principalStore, config) systemController := system.NewController(principalStore, config)
apiHandler := router.ProvideAPIHandler(config, authenticator, repoController, executionController, logsController, spaceController, pipelineController, secretController, pullreqController, webhookController, githookController, serviceaccountController, controller, principalController, checkController, systemController) apiHandler := router.ProvideAPIHandler(config, authenticator, repoController, executionController, logsController, spaceController, pipelineController, secretController, triggerController, connectorController, templateController, pullreqController, webhookController, githookController, serviceaccountController, controller, principalController, checkController, systemController)
gitHandler := router.ProvideGitHandler(config, provider, repoStore, authenticator, authorizer, gitrpcInterface) gitHandler := router.ProvideGitHandler(config, provider, repoStore, authenticator, authorizer, gitrpcInterface)
webHandler := router.ProvideWebHandler(config) webHandler := router.ProvideWebHandler(config)
routerRouter := router.ProvideRouter(config, apiHandler, gitHandler, webHandler) routerRouter := router.ProvideRouter(config, apiHandler, gitHandler, webHandler)

View File

@ -15,7 +15,6 @@ import (
type Controller struct { type Controller struct {
db *sqlx.DB db *sqlx.DB
uidCheck check.PathUID uidCheck check.PathUID
pathStore store.PathStore
connectorStore store.ConnectorStore connectorStore store.ConnectorStore
authorizer authz.Authorizer authorizer authz.Authorizer
spaceStore store.SpaceStore spaceStore store.SpaceStore
@ -25,14 +24,12 @@ func NewController(
db *sqlx.DB, db *sqlx.DB,
uidCheck check.PathUID, uidCheck check.PathUID,
authorizer authz.Authorizer, authorizer authz.Authorizer,
pathStore store.PathStore,
connectorStore store.ConnectorStore, connectorStore store.ConnectorStore,
spaceStore store.SpaceStore, spaceStore store.SpaceStore,
) *Controller { ) *Controller {
return &Controller{ return &Controller{
db: db, db: db,
uidCheck: uidCheck, uidCheck: uidCheck,
pathStore: pathStore,
connectorStore: connectorStore, connectorStore: connectorStore,
authorizer: authorizer, authorizer: authorizer,
spaceStore: spaceStore, spaceStore: spaceStore,

View File

@ -20,10 +20,9 @@ var WireSet = wire.NewSet(
func ProvideController(db *sqlx.DB, func ProvideController(db *sqlx.DB,
uidCheck check.PathUID, uidCheck check.PathUID,
pathStore store.PathStore,
connectorStore store.ConnectorStore, connectorStore store.ConnectorStore,
authorizer authz.Authorizer, authorizer authz.Authorizer,
spaceStore store.SpaceStore, spaceStore store.SpaceStore,
) *Controller { ) *Controller {
return NewController(db, uidCheck, authorizer, pathStore, connectorStore, spaceStore) return NewController(db, uidCheck, authorizer, connectorStore, spaceStore)
} }

View File

@ -25,14 +25,12 @@ func NewController(
db *sqlx.DB, db *sqlx.DB,
uidCheck check.PathUID, uidCheck check.PathUID,
authorizer authz.Authorizer, authorizer authz.Authorizer,
pathStore store.PathStore,
templateStore store.TemplateStore, templateStore store.TemplateStore,
spaceStore store.SpaceStore, spaceStore store.SpaceStore,
) *Controller { ) *Controller {
return &Controller{ return &Controller{
db: db, db: db,
uidCheck: uidCheck, uidCheck: uidCheck,
pathStore: pathStore,
templateStore: templateStore, templateStore: templateStore,
authorizer: authorizer, authorizer: authorizer,
spaceStore: spaceStore, spaceStore: spaceStore,

View File

@ -25,5 +25,5 @@ func ProvideController(db *sqlx.DB,
authorizer authz.Authorizer, authorizer authz.Authorizer,
spaceStore store.SpaceStore, spaceStore store.SpaceStore,
) *Controller { ) *Controller {
return NewController(db, uidCheck, authorizer, pathStore, templateStore, spaceStore) return NewController(db, uidCheck, authorizer, templateStore, spaceStore)
} }

View File

@ -0,0 +1,36 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"github.com/harness/gitness/internal/auth/authz"
"github.com/harness/gitness/internal/store"
"github.com/jmoiron/sqlx"
)
type Controller struct {
db *sqlx.DB
authorizer authz.Authorizer
triggerStore store.TriggerStore
pipelineStore store.PipelineStore
spaceStore store.SpaceStore
}
func NewController(
db *sqlx.DB,
authorizer authz.Authorizer,
triggerStore store.TriggerStore,
pipelineStore store.PipelineStore,
spaceStore store.SpaceStore,
) *Controller {
return &Controller{
db: db,
authorizer: authorizer,
triggerStore: triggerStore,
pipelineStore: pipelineStore,
spaceStore: spaceStore,
}
}

View File

@ -0,0 +1,67 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"context"
"fmt"
"time"
apiauth "github.com/harness/gitness/internal/api/auth"
"github.com/harness/gitness/internal/auth"
"github.com/harness/gitness/types"
"github.com/harness/gitness/types/enum"
)
// TODO: Add more as needed.
type CreateInput struct {
Description string `json:"description"`
UID string `json:"uid"`
Data string `json:"data"`
}
func (c *Controller) Create(
ctx context.Context,
session *auth.Session,
spaceRef string,
uid string,
in *CreateInput,
) (*types.Trigger, error) {
space, err := c.spaceStore.FindByRef(ctx, spaceRef)
if err != nil {
return nil, fmt.Errorf("could not find space: %w", err)
}
pipeline, err := c.pipelineStore.FindByUID(ctx, space.ID, uid)
if err != nil {
return nil, fmt.Errorf("could not find pipeline: %w", err)
}
err = apiauth.CheckPipeline(ctx, c.authorizer, session, space.Path, pipeline.UID, enum.PermissionPipelineExecute)
if err != nil {
return nil, fmt.Errorf("failed to authorize: %w", err)
}
pipeline, err = c.pipelineStore.IncrementSeqNum(ctx, pipeline)
if err != nil {
return nil, fmt.Errorf("failed to increment sequence number: %w", err)
}
now := time.Now().UnixMilli()
trigger := &types.Trigger{
Description: in.Description,
UID: in.UID,
PipelineID: pipeline.ID,
Created: now,
Updated: now,
Version: 0,
}
err = c.triggerStore.Create(ctx, trigger)
if err != nil {
return nil, fmt.Errorf("trigger creation failed: %w", err)
}
return trigger, nil
}

View File

@ -0,0 +1,41 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"context"
"fmt"
apiauth "github.com/harness/gitness/internal/api/auth"
"github.com/harness/gitness/internal/auth"
"github.com/harness/gitness/types/enum"
)
func (c *Controller) Delete(
ctx context.Context,
session *auth.Session,
spaceRef string,
pipelineUID string,
triggerUID string,
) error {
space, err := c.spaceStore.FindByRef(ctx, spaceRef)
if err != nil {
return fmt.Errorf("could not find parent space: %w", err)
}
pipeline, err := c.pipelineStore.FindByUID(ctx, space.ID, pipelineUID)
if err != nil {
return fmt.Errorf("could not find pipeline: %w", err)
}
err = apiauth.CheckPipeline(ctx, c.authorizer, session, space.Path, pipeline.UID, enum.PermissionPipelineDelete)
if err != nil {
return fmt.Errorf("could not authorize: %w", err)
}
err = c.triggerStore.DeleteByUID(ctx, pipeline.ID, triggerUID)
if err != nil {
return fmt.Errorf("could not delete trigger: %w", err)
}
return nil
}

View File

@ -0,0 +1,45 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"context"
"fmt"
apiauth "github.com/harness/gitness/internal/api/auth"
"github.com/harness/gitness/internal/auth"
"github.com/harness/gitness/types"
"github.com/harness/gitness/types/enum"
)
func (c *Controller) Find(
ctx context.Context,
session *auth.Session,
spaceRef string,
pipelineUID string,
triggerUID string,
) (*types.Trigger, error) {
space, err := c.spaceStore.FindByRef(ctx, spaceRef)
if err != nil {
return nil, fmt.Errorf("could not find parent space: %w", err)
}
pipeline, err := c.pipelineStore.FindByUID(ctx, space.ID, pipelineUID)
if err != nil {
return nil, fmt.Errorf("could not find pipeline: %w", err)
}
err = apiauth.CheckPipeline(ctx, c.authorizer, session, space.Path, pipeline.UID, enum.PermissionPipelineView)
if err != nil {
return nil, fmt.Errorf("could not authorize: %w", err)
}
trigger, err := c.triggerStore.FindByUID(ctx, pipeline.ID, triggerUID)
if err != nil {
return nil, fmt.Errorf("could not find trigger %s: %w", triggerUID, err)
}
return trigger, nil
}

View File

@ -0,0 +1,59 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"context"
"fmt"
apiauth "github.com/harness/gitness/internal/api/auth"
"github.com/harness/gitness/internal/auth"
"github.com/harness/gitness/store/database/dbtx"
"github.com/harness/gitness/types"
"github.com/harness/gitness/types/enum"
)
func (c *Controller) List(
ctx context.Context,
session *auth.Session,
spaceRef string,
pipelineUID string,
filter types.ListQueryFilter,
) ([]*types.Trigger, int64, error) {
space, err := c.spaceStore.FindByRef(ctx, spaceRef)
if err != nil {
return nil, 0, fmt.Errorf("failed to find parent space: %w", err)
}
pipeline, err := c.pipelineStore.FindByUID(ctx, space.ID, pipelineUID)
if err != nil {
return nil, 0, fmt.Errorf("failed to find pipeline: %w", err)
}
err = apiauth.CheckPipeline(ctx, c.authorizer, session, space.Path, pipeline.UID, enum.PermissionPipelineView)
if err != nil {
return nil, 0, fmt.Errorf("failed to authorize: %w", err)
}
var count int64
var triggers []*types.Trigger
err = dbtx.New(c.db).WithTx(ctx, func(ctx context.Context) (err error) {
count, err = c.triggerStore.Count(ctx, pipeline.ID, filter)
if err != nil {
return fmt.Errorf("failed to count child triggers: %w", err)
}
triggers, err = c.triggerStore.List(ctx, pipeline.ID, filter)
if err != nil {
return fmt.Errorf("failed to list child triggers: %w", err)
}
return
}, dbtx.TxDefaultReadOnly)
if err != nil {
return triggers, count, fmt.Errorf("failed to fetch list: %w", err)
}
return triggers, count, nil
}

View File

@ -0,0 +1,61 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"context"
"fmt"
apiauth "github.com/harness/gitness/internal/api/auth"
"github.com/harness/gitness/internal/auth"
"github.com/harness/gitness/types"
"github.com/harness/gitness/types/enum"
)
// UpdateInput is used for updating a trigger.
type UpdateInput struct {
Description string `json:"description"`
UID string `json:"uid"`
}
func (c *Controller) Update(
ctx context.Context,
session *auth.Session,
spaceRef string,
pipelineUID string,
triggerUID string,
in *UpdateInput) (*types.Trigger, error) {
space, err := c.spaceStore.FindByRef(ctx, spaceRef)
if err != nil {
return nil, fmt.Errorf("could not find space: %w", err)
}
err = apiauth.CheckPipeline(ctx, c.authorizer, session, space.Path, pipelineUID, enum.PermissionPipelineEdit)
if err != nil {
return nil, fmt.Errorf("failed to check auth: %w", err)
}
pipeline, err := c.pipelineStore.FindByUID(ctx, space.ID, pipelineUID)
if err != nil {
return nil, fmt.Errorf("failed to find pipeline: %w", err)
}
trigger, err := c.triggerStore.FindByUID(ctx, pipeline.ID, triggerUID)
if err != nil {
return nil, fmt.Errorf("failed to find trigger: %w", err)
}
return c.triggerStore.UpdateOptLock(ctx,
trigger, func(original *types.Trigger) error {
// update values only if provided
if in.Description != "" {
original.Description = in.Description
}
if in.UID != "" {
original.UID = in.UID
}
return nil
})
}

View File

@ -0,0 +1,27 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"github.com/harness/gitness/internal/auth/authz"
"github.com/harness/gitness/internal/store"
"github.com/google/wire"
"github.com/jmoiron/sqlx"
)
// WireSet provides a wire set for this package.
var WireSet = wire.NewSet(
ProvideController,
)
func ProvideController(db *sqlx.DB,
authorizer authz.Authorizer,
triggerStore store.TriggerStore,
pipelineStore store.PipelineStore,
spaceStore store.SpaceStore,
) *Controller {
return NewController(db, authorizer, triggerStore, pipelineStore, spaceStore)
}

View File

@ -0,0 +1,37 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package connector
import (
"encoding/json"
"net/http"
"github.com/harness/gitness/internal/api/controller/connector"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
)
// HandleCreate returns a http.HandlerFunc that creates a new connector.
func HandleCreate(connectorCtrl *connector.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
in := new(connector.CreateInput)
err := json.NewDecoder(r.Body).Decode(in)
if err != nil {
render.BadRequestf(w, "Invalid Request Body: %s.", err)
return
}
connector, err := connectorCtrl.Create(ctx, session, in)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.JSON(w, http.StatusCreated, connector)
}
}

View File

@ -0,0 +1,39 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package connector
import (
"net/http"
"github.com/harness/gitness/internal/api/controller/connector"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
func HandleDelete(connectorCtrl *connector.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
connectorRef, err := request.GetConnectorRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, connectorUID, err := paths.DisectLeaf(connectorRef)
if err != nil {
render.TranslatedUserError(w, err)
return
}
err = connectorCtrl.Delete(ctx, session, spaceRef, connectorUID)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.DeleteSuccessful(w)
}
}

View File

@ -0,0 +1,39 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package connector
import (
"net/http"
"github.com/harness/gitness/internal/api/controller/connector"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
// HandleFind finds a connector from the database.
func HandleFind(connectorCtrl *connector.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
connectorRef, err := request.GetConnectorRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, connectorUID, err := paths.DisectLeaf(connectorRef)
if err != nil {
render.TranslatedUserError(w, err)
}
connector, err := connectorCtrl.Find(ctx, session, spaceRef, connectorUID)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.JSON(w, http.StatusOK, connector)
}
}

View File

@ -0,0 +1,47 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package connector
import (
"encoding/json"
"net/http"
"github.com/harness/gitness/internal/api/controller/connector"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
func HandleUpdate(connectorCtrl *connector.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
in := new(connector.UpdateInput)
err := json.NewDecoder(r.Body).Decode(in)
if err != nil {
render.BadRequestf(w, "Invalid Request Body: %s.", err)
return
}
connectorRef, err := request.GetConnectorRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, connectorUID, err := paths.DisectLeaf(connectorRef)
if err != nil {
render.TranslatedUserError(w, err)
}
connector, err := connectorCtrl.Update(ctx, session, spaceRef, connectorUID, in)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.JSON(w, http.StatusOK, connector)
}
}

View File

@ -0,0 +1,37 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package template
import (
"encoding/json"
"net/http"
"github.com/harness/gitness/internal/api/controller/template"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
)
// HandleCreate returns a http.HandlerFunc that creates a new template.
func HandleCreate(templateCtrl *template.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
in := new(template.CreateInput)
err := json.NewDecoder(r.Body).Decode(in)
if err != nil {
render.BadRequestf(w, "Invalid Request Body: %s.", err)
return
}
template, err := templateCtrl.Create(ctx, session, in)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.JSON(w, http.StatusCreated, template)
}
}

View File

@ -0,0 +1,39 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package template
import (
"net/http"
"github.com/harness/gitness/internal/api/controller/template"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
func HandleDelete(templateCtrl *template.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
templateRef, err := request.GetTemplateRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, templateUID, err := paths.DisectLeaf(templateRef)
if err != nil {
render.TranslatedUserError(w, err)
return
}
err = templateCtrl.Delete(ctx, session, spaceRef, templateUID)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.DeleteSuccessful(w)
}
}

View File

@ -0,0 +1,39 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package template
import (
"net/http"
"github.com/harness/gitness/internal/api/controller/template"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
// HandleFind finds a template from the database.
func HandleFind(templateCtrl *template.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
templateRef, err := request.GetTemplateRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, templateUID, err := paths.DisectLeaf(templateRef)
if err != nil {
render.TranslatedUserError(w, err)
}
template, err := templateCtrl.Find(ctx, session, spaceRef, templateUID)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.JSON(w, http.StatusOK, template)
}
}

View File

@ -0,0 +1,47 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package template
import (
"encoding/json"
"net/http"
"github.com/harness/gitness/internal/api/controller/template"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
func HandleUpdate(templateCtrl *template.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
in := new(template.UpdateInput)
err := json.NewDecoder(r.Body).Decode(in)
if err != nil {
render.BadRequestf(w, "Invalid Request Body: %s.", err)
return
}
templateRef, err := request.GetTemplateRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, templateUID, err := paths.DisectLeaf(templateRef)
if err != nil {
render.TranslatedUserError(w, err)
}
template, err := templateCtrl.Update(ctx, session, spaceRef, templateUID, in)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.JSON(w, http.StatusOK, template)
}
}

View File

@ -0,0 +1,47 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"encoding/json"
"net/http"
"github.com/harness/gitness/internal/api/controller/trigger"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
func HandleCreate(triggerCtrl *trigger.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
pipelineRef, err := request.GetPipelineRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, pipelineUID, err := paths.DisectLeaf(pipelineRef)
if err != nil {
render.TranslatedUserError(w, err)
return
}
in := new(trigger.CreateInput)
err = json.NewDecoder(r.Body).Decode(in)
if err != nil {
render.BadRequestf(w, "Invalid Request Body: %s.", err)
return
}
trigger, err := triggerCtrl.Create(ctx, session, spaceRef, pipelineUID, in)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.JSON(w, http.StatusCreated, trigger)
}
}

View File

@ -0,0 +1,44 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"net/http"
"github.com/harness/gitness/internal/api/controller/trigger"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
func HandleDelete(triggerCtrl *trigger.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
pipelineRef, err := request.GetPipelineRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, pipelineUID, err := paths.DisectLeaf(pipelineRef)
if err != nil {
render.TranslatedUserError(w, err)
return
}
n, err := request.GetTriggerUIDFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
err = triggerCtrl.Delete(ctx, session, spaceRef, pipelineUID, n)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.DeleteSuccessful(w)
}
}

View File

@ -0,0 +1,44 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"net/http"
"github.com/harness/gitness/internal/api/controller/trigger"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
func HandleFind(triggerCtrl *trigger.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
pipelineRef, err := request.GetPipelineRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
triggerUID, err := request.GetTriggerUIDFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, pipelineUID, err := paths.DisectLeaf(pipelineRef)
if err != nil {
render.TranslatedUserError(w, err)
return
}
trigger, err := triggerCtrl.Find(ctx, session, spaceRef, pipelineUID, triggerUID)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.JSON(w, http.StatusOK, trigger)
}
}

View File

@ -0,0 +1,42 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"net/http"
"github.com/harness/gitness/internal/api/controller/trigger"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
func HandleList(triggerCtrl *trigger.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
pipelineRef, err := request.GetPipelineRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, pipelineUID, err := paths.DisectLeaf(pipelineRef)
if err != nil {
render.TranslatedUserError(w, err)
return
}
filter := request.ParseListQueryFilterFromRequest(r)
repos, totalCount, err := triggerCtrl.List(ctx, session, spaceRef, pipelineUID, filter)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.Pagination(r, w, filter.Page, filter.Size, int(totalCount))
render.JSON(w, http.StatusOK, repos)
}
}

View File

@ -0,0 +1,53 @@
// Copyright 2022 Harness Inc. All rights reserved.
// Use of this source code is governed by the Polyform Free Trial License
// that can be found in the LICENSE.md file for this repository.
package trigger
import (
"encoding/json"
"net/http"
"github.com/harness/gitness/internal/api/controller/trigger"
"github.com/harness/gitness/internal/api/render"
"github.com/harness/gitness/internal/api/request"
"github.com/harness/gitness/internal/paths"
)
func HandleUpdate(triggerCtrl *trigger.Controller) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ctx := r.Context()
session, _ := request.AuthSessionFrom(ctx)
in := new(trigger.UpdateInput)
err := json.NewDecoder(r.Body).Decode(in)
if err != nil {
render.BadRequestf(w, "Invalid Request Body: %s.", err)
return
}
pipelineRef, err := request.GetPipelineRefFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
spaceRef, pipelineUID, err := paths.DisectLeaf(pipelineRef)
if err != nil {
render.TranslatedUserError(w, err)
return
}
triggerUID, err := request.GetTriggerUIDFromPath(r)
if err != nil {
render.TranslatedUserError(w, err)
return
}
pipeline, err := triggerCtrl.Update(ctx, session, spaceRef, pipelineUID, triggerUID, in)
if err != nil {
render.TranslatedUserError(w, err)
return
}
render.JSON(w, http.StatusOK, pipeline)
}
}

View File

@ -0,0 +1,20 @@
package request
import (
"net/http"
"net/url"
)
const (
PathParamConnectorRef = "connector_ref"
)
func GetConnectorRefFromPath(r *http.Request) (string, error) {
rawRef, err := PathParamOrError(r, PathParamConnectorRef)
if err != nil {
return "", err
}
// paths are unescaped
return url.PathUnescape(rawRef)
}

View File

@ -14,6 +14,7 @@ const (
PathParamExecutionNumber = "execution_number" PathParamExecutionNumber = "execution_number"
PathParamStageNumber = "stage_number" PathParamStageNumber = "stage_number"
PathParamStepNumber = "step_number" PathParamStepNumber = "step_number"
PathParamTriggerRef = "trigger_ref"
) )
func GetPipelineRefFromPath(r *http.Request) (string, error) { func GetPipelineRefFromPath(r *http.Request) (string, error) {
@ -37,3 +38,13 @@ func GetStageNumberFromPath(r *http.Request) (int64, error) {
func GetStepNumberFromPath(r *http.Request) (int64, error) { func GetStepNumberFromPath(r *http.Request) (int64, error) {
return PathParamAsPositiveInt64(r, PathParamStepNumber) return PathParamAsPositiveInt64(r, PathParamStepNumber)
} }
func GetTriggerUIDFromPath(r *http.Request) (string, error) {
rawRef, err := PathParamOrError(r, PathParamTriggerRef)
if err != nil {
return "", err
}
// paths are unescaped
return url.PathUnescape(rawRef)
}

View File

@ -0,0 +1,20 @@
package request
import (
"net/http"
"net/url"
)
const (
PathParamTemplateRef = "template_ref"
)
func GetTemplateRefFromPath(r *http.Request) (string, error) {
rawRef, err := PathParamOrError(r, PathParamTemplateRef)
if err != nil {
return "", err
}
// paths are unescaped
return url.PathUnescape(rawRef)
}

View File

@ -10,6 +10,7 @@ import (
"github.com/harness/gitness/githook" "github.com/harness/gitness/githook"
"github.com/harness/gitness/internal/api/controller/check" "github.com/harness/gitness/internal/api/controller/check"
"github.com/harness/gitness/internal/api/controller/connector"
"github.com/harness/gitness/internal/api/controller/execution" "github.com/harness/gitness/internal/api/controller/execution"
controllergithook "github.com/harness/gitness/internal/api/controller/githook" controllergithook "github.com/harness/gitness/internal/api/controller/githook"
"github.com/harness/gitness/internal/api/controller/logs" "github.com/harness/gitness/internal/api/controller/logs"
@ -21,10 +22,13 @@ import (
"github.com/harness/gitness/internal/api/controller/serviceaccount" "github.com/harness/gitness/internal/api/controller/serviceaccount"
"github.com/harness/gitness/internal/api/controller/space" "github.com/harness/gitness/internal/api/controller/space"
"github.com/harness/gitness/internal/api/controller/system" "github.com/harness/gitness/internal/api/controller/system"
"github.com/harness/gitness/internal/api/controller/template"
"github.com/harness/gitness/internal/api/controller/trigger"
"github.com/harness/gitness/internal/api/controller/user" "github.com/harness/gitness/internal/api/controller/user"
"github.com/harness/gitness/internal/api/controller/webhook" "github.com/harness/gitness/internal/api/controller/webhook"
"github.com/harness/gitness/internal/api/handler/account" "github.com/harness/gitness/internal/api/handler/account"
handlercheck "github.com/harness/gitness/internal/api/handler/check" handlercheck "github.com/harness/gitness/internal/api/handler/check"
handlerconnector "github.com/harness/gitness/internal/api/handler/connector"
handlerexecution "github.com/harness/gitness/internal/api/handler/execution" handlerexecution "github.com/harness/gitness/internal/api/handler/execution"
handlergithook "github.com/harness/gitness/internal/api/handler/githook" handlergithook "github.com/harness/gitness/internal/api/handler/githook"
handlerlogs "github.com/harness/gitness/internal/api/handler/logs" handlerlogs "github.com/harness/gitness/internal/api/handler/logs"
@ -37,6 +41,8 @@ import (
handlerserviceaccount "github.com/harness/gitness/internal/api/handler/serviceaccount" handlerserviceaccount "github.com/harness/gitness/internal/api/handler/serviceaccount"
handlerspace "github.com/harness/gitness/internal/api/handler/space" handlerspace "github.com/harness/gitness/internal/api/handler/space"
handlersystem "github.com/harness/gitness/internal/api/handler/system" handlersystem "github.com/harness/gitness/internal/api/handler/system"
handlertemplate "github.com/harness/gitness/internal/api/handler/template"
handlertrigger "github.com/harness/gitness/internal/api/handler/trigger"
handleruser "github.com/harness/gitness/internal/api/handler/user" handleruser "github.com/harness/gitness/internal/api/handler/user"
"github.com/harness/gitness/internal/api/handler/users" "github.com/harness/gitness/internal/api/handler/users"
handlerwebhook "github.com/harness/gitness/internal/api/handler/webhook" handlerwebhook "github.com/harness/gitness/internal/api/handler/webhook"
@ -63,7 +69,8 @@ type APIHandler interface {
var ( var (
// terminatedPathPrefixesAPI is the list of prefixes that will require resolving terminated paths. // terminatedPathPrefixesAPI is the list of prefixes that will require resolving terminated paths.
terminatedPathPrefixesAPI = []string{"/v1/spaces/", "/v1/repos/", "/v1/pipelines/", "/v1/secrets/"} terminatedPathPrefixesAPI = []string{"/v1/spaces/", "/v1/repos/", "/v1/pipelines/",
"/v1/secrets/", "/v1/connectors", "/v1/templates"}
) )
// NewAPIHandler returns a new APIHandler. // NewAPIHandler returns a new APIHandler.
@ -76,6 +83,9 @@ func NewAPIHandler(
spaceCtrl *space.Controller, spaceCtrl *space.Controller,
pipelineCtrl *pipeline.Controller, pipelineCtrl *pipeline.Controller,
secretCtrl *secret.Controller, secretCtrl *secret.Controller,
triggerCtrl *trigger.Controller,
connectorCtrl *connector.Controller,
templateCtrl *template.Controller,
pullreqCtrl *pullreq.Controller, pullreqCtrl *pullreq.Controller,
webhookCtrl *webhook.Controller, webhookCtrl *webhook.Controller,
githookCtrl *controllergithook.Controller, githookCtrl *controllergithook.Controller,
@ -106,9 +116,9 @@ func NewAPIHandler(
r.Use(middlewareauthn.Attempt(authenticator, authn.SourceRouterAPI)) r.Use(middlewareauthn.Attempt(authenticator, authn.SourceRouterAPI))
r.Route("/v1", func(r chi.Router) { r.Route("/v1", func(r chi.Router) {
setupRoutesV1(r, repoCtrl, executionCtrl, logCtrl, pipelineCtrl, setupRoutesV1(r, repoCtrl, executionCtrl, triggerCtrl, logCtrl, pipelineCtrl,
secretCtrl, spaceCtrl, pullreqCtrl, webhookCtrl, githookCtrl, connectorCtrl, templateCtrl, secretCtrl, spaceCtrl, pullreqCtrl,
saCtrl, userCtrl, principalCtrl, checkCtrl, sysCtrl) webhookCtrl, githookCtrl, saCtrl, userCtrl, principalCtrl, checkCtrl, sysCtrl)
}) })
// wrap router in terminatedPath encoder. // wrap router in terminatedPath encoder.
@ -131,8 +141,11 @@ func corsHandler(config *types.Config) func(http.Handler) http.Handler {
func setupRoutesV1(r chi.Router, func setupRoutesV1(r chi.Router,
repoCtrl *repo.Controller, repoCtrl *repo.Controller,
executionCtrl *execution.Controller, executionCtrl *execution.Controller,
triggerCtrl *trigger.Controller,
logCtrl *logs.Controller, logCtrl *logs.Controller,
pipelineCtrl *pipeline.Controller, pipelineCtrl *pipeline.Controller,
connectorCtrl *connector.Controller,
templateCtrl *template.Controller,
secretCtrl *secret.Controller, secretCtrl *secret.Controller,
spaceCtrl *space.Controller, spaceCtrl *space.Controller,
pullreqCtrl *pullreq.Controller, pullreqCtrl *pullreq.Controller,
@ -146,7 +159,9 @@ func setupRoutesV1(r chi.Router,
) { ) {
setupSpaces(r, spaceCtrl) setupSpaces(r, spaceCtrl)
setupRepos(r, repoCtrl, pullreqCtrl, webhookCtrl, checkCtrl) setupRepos(r, repoCtrl, pullreqCtrl, webhookCtrl, checkCtrl)
setupPipelines(r, pipelineCtrl, executionCtrl, logCtrl) setupPipelines(r, pipelineCtrl, executionCtrl, triggerCtrl, logCtrl)
setupConnectors(r, connectorCtrl)
setupTemplates(r, templateCtrl)
setupSecrets(r, secretCtrl) setupSecrets(r, secretCtrl)
setupUser(r, userCtrl) setupUser(r, userCtrl)
setupServiceAccounts(r, saCtrl) setupServiceAccounts(r, saCtrl)
@ -299,6 +314,7 @@ func setupPipelines(
r chi.Router, r chi.Router,
pipelineCtrl *pipeline.Controller, pipelineCtrl *pipeline.Controller,
executionCtrl *execution.Controller, executionCtrl *execution.Controller,
triggerCtrl *trigger.Controller,
logCtrl *logs.Controller) { logCtrl *logs.Controller) {
r.Route("/pipelines", func(r chi.Router) { r.Route("/pipelines", func(r chi.Router) {
// Create takes path and parentId via body, not uri // Create takes path and parentId via body, not uri
@ -307,7 +323,38 @@ func setupPipelines(
r.Get("/", handlerpipeline.HandleFind(pipelineCtrl)) r.Get("/", handlerpipeline.HandleFind(pipelineCtrl))
r.Patch("/", handlerpipeline.HandleUpdate(pipelineCtrl)) r.Patch("/", handlerpipeline.HandleUpdate(pipelineCtrl))
r.Delete("/", handlerpipeline.HandleDelete(pipelineCtrl)) r.Delete("/", handlerpipeline.HandleDelete(pipelineCtrl))
setupExecutions(r, pipelineCtrl, executionCtrl, logCtrl) setupExecutions(r, executionCtrl, logCtrl)
setupTriggers(r, triggerCtrl)
})
})
}
func setupConnectors(
r chi.Router,
connectorCtrl *connector.Controller,
) {
r.Route("/connectors", func(r chi.Router) {
// Create takes path and parentId via body, not uri
r.Post("/", handlerconnector.HandleCreate(connectorCtrl))
r.Route(fmt.Sprintf("/{%s}", request.PathParamConnectorRef), func(r chi.Router) {
r.Get("/", handlerconnector.HandleFind(connectorCtrl))
r.Patch("/", handlerconnector.HandleUpdate(connectorCtrl))
r.Delete("/", handlerconnector.HandleDelete(connectorCtrl))
})
})
}
func setupTemplates(
r chi.Router,
templateCtrl *template.Controller,
) {
r.Route("/templates", func(r chi.Router) {
// Create takes path and parentId via body, not uri
r.Post("/", handlertemplate.HandleCreate(templateCtrl))
r.Route(fmt.Sprintf("/{%s}", request.PathParamTemplateRef), func(r chi.Router) {
r.Get("/", handlertemplate.HandleFind(templateCtrl))
r.Patch("/", handlertemplate.HandleUpdate(templateCtrl))
r.Delete("/", handlertemplate.HandleDelete(templateCtrl))
}) })
}) })
} }
@ -326,7 +373,6 @@ func setupSecrets(r chi.Router, secretCtrl *secret.Controller) {
func setupExecutions( func setupExecutions(
r chi.Router, r chi.Router,
pipelineCtrl *pipeline.Controller,
executionCtrl *execution.Controller, executionCtrl *execution.Controller,
logCtrl *logs.Controller, logCtrl *logs.Controller,
) { ) {
@ -352,6 +398,21 @@ func setupExecutions(
}) })
} }
func setupTriggers(
r chi.Router,
triggerCtrl *trigger.Controller,
) {
r.Route("/triggers", func(r chi.Router) {
r.Get("/", handlertrigger.HandleList(triggerCtrl))
r.Post("/", handlertrigger.HandleCreate(triggerCtrl))
r.Route(fmt.Sprintf("/{%s}", request.PathParamTriggerRef), func(r chi.Router) {
r.Get("/", handlertrigger.HandleFind(triggerCtrl))
r.Patch("/", handlertrigger.HandleUpdate(triggerCtrl))
r.Delete("/", handlertrigger.HandleDelete(triggerCtrl))
})
})
}
func setupInternal(r chi.Router, githookCtrl *controllergithook.Controller) { func setupInternal(r chi.Router, githookCtrl *controllergithook.Controller) {
r.Route("/internal", func(r chi.Router) { r.Route("/internal", func(r chi.Router) {
SetupGitHooks(r, githookCtrl) SetupGitHooks(r, githookCtrl)

View File

@ -7,6 +7,7 @@ package router
import ( import (
"github.com/harness/gitness/gitrpc" "github.com/harness/gitness/gitrpc"
"github.com/harness/gitness/internal/api/controller/check" "github.com/harness/gitness/internal/api/controller/check"
"github.com/harness/gitness/internal/api/controller/connector"
"github.com/harness/gitness/internal/api/controller/execution" "github.com/harness/gitness/internal/api/controller/execution"
"github.com/harness/gitness/internal/api/controller/githook" "github.com/harness/gitness/internal/api/controller/githook"
"github.com/harness/gitness/internal/api/controller/logs" "github.com/harness/gitness/internal/api/controller/logs"
@ -18,6 +19,8 @@ import (
"github.com/harness/gitness/internal/api/controller/serviceaccount" "github.com/harness/gitness/internal/api/controller/serviceaccount"
"github.com/harness/gitness/internal/api/controller/space" "github.com/harness/gitness/internal/api/controller/space"
"github.com/harness/gitness/internal/api/controller/system" "github.com/harness/gitness/internal/api/controller/system"
"github.com/harness/gitness/internal/api/controller/template"
"github.com/harness/gitness/internal/api/controller/trigger"
"github.com/harness/gitness/internal/api/controller/user" "github.com/harness/gitness/internal/api/controller/user"
"github.com/harness/gitness/internal/api/controller/webhook" "github.com/harness/gitness/internal/api/controller/webhook"
"github.com/harness/gitness/internal/auth/authn" "github.com/harness/gitness/internal/auth/authn"
@ -67,6 +70,9 @@ func ProvideAPIHandler(
spaceCtrl *space.Controller, spaceCtrl *space.Controller,
pipelineCtrl *pipeline.Controller, pipelineCtrl *pipeline.Controller,
secretCtrl *secret.Controller, secretCtrl *secret.Controller,
triggerCtrl *trigger.Controller,
connectorCtrl *connector.Controller,
templateCtrl *template.Controller,
pullreqCtrl *pullreq.Controller, pullreqCtrl *pullreq.Controller,
webhookCtrl *webhook.Controller, webhookCtrl *webhook.Controller,
githookCtrl *githook.Controller, githookCtrl *githook.Controller,
@ -76,8 +82,9 @@ func ProvideAPIHandler(
checkCtrl *check.Controller, checkCtrl *check.Controller,
sysCtrl *system.Controller, sysCtrl *system.Controller,
) APIHandler { ) APIHandler {
return NewAPIHandler(config, authenticator, repoCtrl, executionCtrl, logCtrl, spaceCtrl, pipelineCtrl, secretCtrl, return NewAPIHandler(config, authenticator, repoCtrl, executionCtrl, logCtrl, spaceCtrl, pipelineCtrl,
pullreqCtrl, webhookCtrl, githookCtrl, saCtrl, userCtrl, principalCtrl, checkCtrl, sysCtrl) secretCtrl, triggerCtrl, connectorCtrl, templateCtrl, pullreqCtrl, webhookCtrl, githookCtrl,
saCtrl, userCtrl, principalCtrl, checkCtrl, sysCtrl)
} }
func ProvideWebHandler(config *types.Config) WebHandler { func ProvideWebHandler(config *types.Config) WebHandler {

View File

@ -40,6 +40,9 @@ var WireSet = wire.NewSet(
ProvideWebhookExecutionStore, ProvideWebhookExecutionStore,
ProvideCheckStore, ProvideCheckStore,
ProvideReqCheckStore, ProvideReqCheckStore,
ProvideConnectorStore,
ProvideTemplateStore,
ProvideTriggerStore,
) )
// migrator is helper function to set up the database by performing automated // migrator is helper function to set up the database by performing automated
@ -103,6 +106,21 @@ func ProvideSecretStore(db *sqlx.DB) store.SecretStore {
return NewSecretStore(db) return NewSecretStore(db)
} }
// ProvideConnectorStore provides a connector store.
func ProvideConnectorStore(db *sqlx.DB) store.ConnectorStore {
return NewConnectorStore(db)
}
// ProvideTemplateStore provides a template store.
func ProvideTemplateStore(db *sqlx.DB) store.TemplateStore {
return NewTemplateStore(db)
}
// ProvideTriggerStore provides a trigger store.
func ProvideTriggerStore(db *sqlx.DB) store.TriggerStore {
return NewTriggerStore(db)
}
// ProvideExecutionStore provides an execution store. // ProvideExecutionStore provides an execution store.
func ProvideExecutionStore(db *sqlx.DB) store.ExecutionStore { func ProvideExecutionStore(db *sqlx.DB) store.ExecutionStore {
return NewExecutionStore(db) return NewExecutionStore(db)