diff --git a/providers/gitlab/resources/gitlab.go b/providers/gitlab/resources/gitlab.go index 52ecd7bb32..e87742f4c6 100644 --- a/providers/gitlab/resources/gitlab.go +++ b/providers/gitlab/resources/gitlab.go @@ -363,3 +363,37 @@ func (p *mqlGitlabProject) projectFiles() ([]interface{}, error) { return mqlFiles, nil } + +// id function for a unique identifier for a resource instance gitlab.project.webhook +func (g *mqlGitlabProjectWebhook) id() (string, error) { + return g.Url.Data, nil +} + +// Function to fetch and check the webhooks for a project +func (p *mqlGitlabProject) webhooks() ([]interface{}, error) { + conn := p.MqlRuntime.Connection.(*connection.GitLabConnection) + + projectID := int(p.Id.Data) + + hooks, _, err := conn.Client().Projects.ListProjectHooks(projectID, nil) + if err != nil { + return nil, err + } + + var mqlWebhooks []interface{} + for _, hook := range hooks { + hookInfo := map[string]*llx.RawData{ + "url": llx.StringData(hook.URL), + "sslVerification": llx.BoolData(hook.EnableSSLVerification), + } + + mqlWebhook, err := CreateResource(p.MqlRuntime, "gitlab.project.webhook", hookInfo) + if err != nil { + return nil, err + } + + mqlWebhooks = append(mqlWebhooks, mqlWebhook) + } + + return mqlWebhooks, nil +} diff --git a/providers/gitlab/resources/gitlab.lr b/providers/gitlab/resources/gitlab.lr index 4a45e5010a..fe98cffdb7 100644 --- a/providers/gitlab/resources/gitlab.lr +++ b/providers/gitlab/resources/gitlab.lr @@ -94,6 +94,8 @@ gitlab.project @defaults("fullName visibility webURL") { projectMembers() []gitlab.project.member // List of files in the project repository projectFiles() []gitlab.project.file + // List of webhooks for the project + webhooks() []gitlab.project.webhook } @@ -156,4 +158,12 @@ private gitlab.project.file @defaults("path type") { name string // File content content string +} + +// GitLab project webhook +private gitlab.project.webhook @defaults("url sslVerification") { + // Webhook URL + url string + // Whether SSL verification is enabled + sslVerification bool } \ No newline at end of file diff --git a/providers/gitlab/resources/gitlab.lr.manifest.yaml b/providers/gitlab/resources/gitlab.lr.manifest.yaml index fa604ddca1..6ce637156a 100755 --- a/providers/gitlab/resources/gitlab.lr.manifest.yaml +++ b/providers/gitlab/resources/gitlab.lr.manifest.yaml @@ -78,6 +78,8 @@ resources: visibility: {} webURL: min_mondoo_version: 9.0.0 + webhooks: + min_mondoo_version: 9.0.0 wikiEnabled: min_mondoo_version: 9.0.0 maturity: experimental @@ -121,3 +123,9 @@ resources: name: {} is_private: true min_mondoo_version: 9.0.0 + gitlab.project.webhook: + fields: + sslVerification: {} + url: {} + is_private: true + min_mondoo_version: 9.0.0