MCPcopy Index your code
hub / github.com/bytebase/bytebase / AddWebhook

Method AddWebhook

backend/api/v1/project_service.go:755–801  ·  view source on GitHub ↗

AddWebhook adds a webhook to a given project.

(ctx context.Context, req *connect.Request[v1pb.AddWebhookRequest])

Source from the content-addressed store, hash-verified

753
754// AddWebhook adds a webhook to a given project.
755func (s *ProjectService) AddWebhook(ctx context.Context, req *connect.Request[v1pb.AddWebhookRequest]) (*connect.Response[v1pb.Project], error) {
756 projectID, err := common.GetProjectID(req.Msg.Project)
757 if err != nil {
758 return nil, connect.NewError(connect.CodeInvalidArgument, err)
759 }
760 workspaceID := common.GetWorkspaceIDFromContext(ctx)
761 project, err := s.store.GetProject(ctx, &store.FindProjectMessage{
762 Workspace: workspaceID,
763 ResourceID: &projectID,
764 })
765 if err != nil {
766 return nil, connect.NewError(connect.CodeInternal, err)
767 }
768 if project == nil {
769 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("project %q not found", req.Msg.Project))
770 }
771 if project.Deleted {
772 return nil, connect.NewError(connect.CodeNotFound, errors.Errorf("project %q has been deleted", req.Msg.Project))
773 }
774
775 if _, err := utils.GetEffectiveExternalURL(ctx, s.store, s.profile, common.GetWorkspaceIDFromContext(ctx)); err != nil {
776 return nil, err
777 }
778
779 create, err := convertToStoreProjectWebhookMessage(req.Msg.Webhook)
780 if err != nil {
781 return nil, connect.NewError(connect.CodeInvalidArgument, err)
782 }
783
784 // Validate webhook URL against allowed domains
785 if err := webhookplugin.ValidateWebhookURL(create.Payload.GetType(), create.Payload.GetUrl()); err != nil {
786 return nil, connect.NewError(connect.CodeInvalidArgument, errors.Wrapf(err, "invalid webhook URL"))
787 }
788
789 if _, err := s.store.CreateProjectWebhook(ctx, project.ResourceID, create); err != nil {
790 return nil, connect.NewError(connect.CodeInternal, err)
791 }
792
793 project, err = s.store.GetProject(ctx, &store.FindProjectMessage{
794 Workspace: workspaceID,
795 ResourceID: &projectID,
796 })
797 if err != nil {
798 return nil, connect.NewError(connect.CodeInternal, err)
799 }
800 return connect.NewResponse(convertToProject(project)), nil
801}
802
803// UpdateWebhook updates a webhook.
804func (s *ProjectService) UpdateWebhook(ctx context.Context, req *connect.Request[v1pb.UpdateWebhookRequest]) (*connect.Response[v1pb.Project], error) {

Callers 1

UpdateWebhookMethod · 0.95

Calls 10

GetProjectIDFunction · 0.92
GetEffectiveExternalURLFunction · 0.92
convertToProjectFunction · 0.85
ErrorfMethod · 0.80
CreateProjectWebhookMethod · 0.80
GetProjectMethod · 0.65
GetTypeMethod · 0.45
GetUrlMethod · 0.45

Tested by

no test coverage detected