From d945e6ac721abc3a1e893e8d12d0309470839893 Mon Sep 17 00:00:00 2001 From: Anthony Wang Date: Mon, 15 Aug 2022 11:15:21 -0500 Subject: [PATCH] Start working on Ticket object endpoint implementation --- routers/api/v1/activitypub/ticket.go | 50 ++++++++++++++++++++++++++++ routers/api/v1/api.go | 1 + templates/swagger/v1_json.tmpl | 40 ++++++++++++++++++++++ 3 files changed, 91 insertions(+) create mode 100644 routers/api/v1/activitypub/ticket.go diff --git a/routers/api/v1/activitypub/ticket.go b/routers/api/v1/activitypub/ticket.go new file mode 100644 index 0000000000..76fdf614d5 --- /dev/null +++ b/routers/api/v1/activitypub/ticket.go @@ -0,0 +1,50 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package activitypub + +import ( + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/forgefed" + "code.gitea.io/gitea/modules/setting" + + ap "github.com/go-ap/activitypub" +) + +// Ticket function returns the Ticket object for an issue or PR +func Ticket(ctx *context.APIContext) { + // swagger:operation GET /activitypub/ticket/{username}/{reponame}/{id} activitypub forgefedTicket + // --- + // summary: Returns the Ticket object for an issue or PR + // produces: + // - application/activity+json + // parameters: + // - name: username + // in: path + // description: username of the user + // type: string + // required: true + // - name: reponame + // in: path + // description: name of the repo + // type: string + // required: true + // - name: id + // in: path + // description: ID number of the issue or PR + // type: string + // required: true + // responses: + // "200": + // "$ref": "#/responses/ActivityPub" + + link := setting.AppURL + "api/v1/activitypub/ticket/" + ctx.ContextUser.Name + "/" + ctx.Repo.Repository.Name + "/" + ctx.Params("id") + + ticket := forgefed.TicketNew() + ticket.ID = ap.IRI(link) + + // TODO: Add other ticket fields according to https://forgefed.org/modeling.html#ticket + + response(ctx, ticket) +} diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index e07a90fa0c..40423d913c 100644 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -659,6 +659,7 @@ func Routes() *web.Route { m.Get("/outbox", activitypub.RepoOutbox) m.Get("/followers", activitypub.RepoFollowers) }, repoAssignment()) + m.Get("/ticket/{username}/{reponame}/{id}", repoAssignment(), activitypub.Ticket) }) } m.Get("/signing-key.gpg", misc.SigningKey) diff --git a/templates/swagger/v1_json.tmpl b/templates/swagger/v1_json.tmpl index 9eb8427efd..2c4d8a6772 100644 --- a/templates/swagger/v1_json.tmpl +++ b/templates/swagger/v1_json.tmpl @@ -155,6 +155,46 @@ } } }, + "/activitypub/ticket/{username}/{reponame}/{id}": { + "get": { + "produces": [ + "application/activity+json" + ], + "tags": [ + "activitypub" + ], + "summary": "Returns the Ticket object for an issue or PR", + "operationId": "forgefedTicket", + "parameters": [ + { + "type": "string", + "description": "username of the user", + "name": "username", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "name of the repo", + "name": "reponame", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "ID number of the issue or PR", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "$ref": "#/responses/ActivityPub" + } + } + } + }, "/activitypub/user/{username}": { "get": { "produces": [