package common /* * This file is part of Autogits. * * Copyright © 2024 SUSE LLC * * Autogits is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation, either version 2 of the License, or (at your option) any later * version. * * Autogits is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * Foobar. If not, see . */ import ( "encoding/json" "fmt" "log" "os" ) type RequestType interface { GetAction() string } type Request struct { Type string Data RequestType } func ParseRequestJSON(reqType string, data []byte) (req *Request, err error) { req = &Request{ Type: reqType, } switch reqType { case RequestType_CreateBrachTag, RequestType_DeleteBranchTag: req.Data = &CreateWebhookEvent{} case RequestType_Fork: req.Data = &ForkWebhookEvent{} case RequestType_Push: req.Data = &PushWebhookEvent{} case RequestType_Repository: req.Data = &RepositoryWebhookEvent{} case RequestType_Release: req.Data = &ReleaseWebhookEvent{} case RequestType_Issue: req.Data = &IssueWebhookEvent{} case RequestType_IssueAssign: req.Data = &IssueWebhookEvent{} case RequestType_IssueComment, RequestType_PRComment: req.Data = &IssueCommentWebhookEvent{} case RequestType_IssueLabel: req.Data = &IssueWebhookEvent{} case RequestType_IssueMilestone: req.Data = &IssueWebhookEvent{} case RequestType_PR: req.Data = &PullRequestWebhookEvent{} case RequestType_PRLabel: req.Data = &PullRequestWebhookEvent{} case RequestType_PRMilestone: req.Data = &PullRequestWebhookEvent{} case RequestType_PRAssign: req.Data = &PullRequestWebhookEvent{} case RequestType_PRReviewRequest: req.Data = &PullRequestWebhookEvent{} case RequestType_PRReviewAccepted, RequestType_PRReviewRejected, RequestType_PRReviewComment: req.Data = &PullRequestWebhookEvent{} case RequestType_PRSync: req.Data = &PullRequestWebhookEvent{} case RequestType_Wiki: req.Data = &WikiWebhookEvent{} default: return nil, fmt.Errorf("Unknown webhook request type: %s", reqType) } if err := json.Unmarshal(data, req.Data); err != nil { return nil, err } return req, nil } type RequestHandler struct { StdLogger, ErrLogger *log.Logger Request *Request } func (r *RequestHandler) WriteError() { r.ErrLogger.Println("internal error sent") } func CreateRequestHandler() (*RequestHandler, error) { var h *RequestHandler = new(RequestHandler) h.StdLogger, h.ErrLogger = CreateStdoutLogger(os.Stdout, os.Stderr) /* var err error h.Git, err = CreateGitHandler(git_author, name) if err != nil { return nil, err } */ return h, nil }