2016-08-26 21:23:21 +03:00
// Copyright 2015 The Gogs Authors. All rights reserved.
2020-01-24 22:00:29 +03:00
// Copyright 2020 The Gitea Authors.
2016-08-26 21:23:21 +03:00
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
2016-11-24 10:04:31 +03:00
2016-08-26 21:23:21 +03:00
package repo
import (
2022-04-28 14:48:48 +03:00
stdCtx "context"
2019-02-18 23:55:04 +03:00
"errors"
2019-12-20 20:07:12 +03:00
"net/http"
2016-08-26 21:23:21 +03:00
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/models"
2022-05-11 13:09:36 +03:00
access_model "code.gitea.io/gitea/models/perm/access"
2022-01-01 17:12:25 +03:00
repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user"
2016-11-10 19:24:48 +03:00
"code.gitea.io/gitea/modules/context"
2020-10-17 07:23:08 +03:00
"code.gitea.io/gitea/modules/convert"
2019-05-11 13:21:34 +03:00
api "code.gitea.io/gitea/modules/structs"
2021-01-26 18:36:53 +03:00
"code.gitea.io/gitea/modules/web"
2020-01-13 19:02:24 +03:00
"code.gitea.io/gitea/routers/api/v1/utils"
2019-09-24 20:39:50 +03:00
comment_service "code.gitea.io/gitea/services/comments"
2016-08-26 21:23:21 +03:00
)
2016-11-24 10:04:31 +03:00
// ListIssueComments list all the comments of an issue
2016-08-26 21:23:21 +03:00
func ListIssueComments ( ctx * context . APIContext ) {
2018-05-08 09:05:18 +03:00
// swagger:operation GET /repos/{owner}/{repo}/issues/{index}/comments issue issueGetComments
2017-11-13 10:02:25 +03:00
// ---
// summary: List all comments on an issue
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
2018-06-12 17:59:22 +03:00
// - name: index
2017-11-13 10:02:25 +03:00
// in: path
// description: index of the issue
// type: integer
2018-10-21 06:40:42 +03:00
// format: int64
2017-11-13 10:02:25 +03:00
// required: true
2018-07-12 16:40:41 +03:00
// - name: since
2017-11-13 10:02:25 +03:00
// in: query
// description: if provided, only comments updated since the specified time are returned.
// type: string
2020-01-13 19:02:24 +03:00
// format: date-time
// - name: before
// in: query
// description: if provided, only comments updated before the provided time are returned.
// type: string
// format: date-time
2017-11-13 10:02:25 +03:00
// responses:
// "200":
// "$ref": "#/responses/CommentList"
2019-12-20 20:07:12 +03:00
2022-04-07 21:59:56 +03:00
before , since , err := context . GetQueryBeforeSince ( ctx . Context )
2020-01-13 19:02:24 +03:00
if err != nil {
2020-11-14 17:05:40 +03:00
ctx . Error ( http . StatusUnprocessableEntity , "GetQueryBeforeSince" , err )
2020-01-13 19:02:24 +03:00
return
2016-08-26 23:40:53 +03:00
}
2018-12-13 18:55:43 +03:00
issue , err := models . GetIssueByIndex ( ctx . Repo . Repository . ID , ctx . ParamsInt64 ( ":index" ) )
2016-08-26 21:23:21 +03:00
if err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "GetRawIssueByIndex" , err )
2016-08-26 21:23:21 +03:00
return
}
2019-04-18 08:00:03 +03:00
issue . Repo = ctx . Repo . Repository
2016-08-26 21:23:21 +03:00
2021-08-12 15:43:08 +03:00
opts := & models . FindCommentsOptions {
2017-06-21 04:00:44 +03:00
IssueID : issue . ID ,
2020-01-13 19:02:24 +03:00
Since : since ,
Before : before ,
2017-06-21 04:00:44 +03:00
Type : models . CommentTypeComment ,
2021-08-12 15:43:08 +03:00
}
2022-05-20 17:08:52 +03:00
comments , err := models . FindComments ( ctx , opts )
2016-08-26 23:40:53 +03:00
if err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "FindComments" , err )
2016-08-26 23:40:53 +03:00
return
2016-08-26 21:23:21 +03:00
}
2021-08-12 15:43:08 +03:00
totalCount , err := models . CountComments ( opts )
if err != nil {
ctx . InternalServerError ( err )
return
}
2019-04-18 08:00:03 +03:00
if err := models . CommentList ( comments ) . LoadPosters ( ) ; err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "LoadPosters" , err )
2018-12-13 18:55:43 +03:00
return
}
2019-04-18 08:00:03 +03:00
apiComments := make ( [ ] * api . Comment , len ( comments ) )
for i , comment := range comments {
comment . Issue = issue
2020-10-17 07:23:08 +03:00
apiComments [ i ] = convert . ToComment ( comments [ i ] )
2016-08-26 21:23:21 +03:00
}
2021-08-12 15:43:08 +03:00
ctx . SetTotalCountHeader ( totalCount )
2019-12-20 20:07:12 +03:00
ctx . JSON ( http . StatusOK , & apiComments )
2016-08-26 21:23:21 +03:00
}
2022-01-01 17:12:25 +03:00
// ListIssueCommentsAndTimeline list all the comments and events of an issue
func ListIssueCommentsAndTimeline ( ctx * context . APIContext ) {
// swagger:operation GET /repos/{owner}/{repo}/issues/{index}/timeline issue issueGetCommentsAndTimeline
// ---
// summary: List all comments and events on an issue
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
// - name: index
// in: path
// description: index of the issue
// type: integer
// format: int64
// required: true
// - name: since
// in: query
// description: if provided, only comments updated since the specified time are returned.
// type: string
// format: date-time
// - name: page
// in: query
// description: page number of results to return (1-based)
// type: integer
// - name: limit
// in: query
// description: page size of results
// type: integer
// - name: before
// in: query
// description: if provided, only comments updated before the provided time are returned.
// type: string
// format: date-time
// responses:
// "200":
// "$ref": "#/responses/TimelineList"
2022-04-07 21:59:56 +03:00
before , since , err := context . GetQueryBeforeSince ( ctx . Context )
2022-01-01 17:12:25 +03:00
if err != nil {
ctx . Error ( http . StatusUnprocessableEntity , "GetQueryBeforeSince" , err )
return
}
issue , err := models . GetIssueByIndex ( ctx . Repo . Repository . ID , ctx . ParamsInt64 ( ":index" ) )
if err != nil {
ctx . Error ( http . StatusInternalServerError , "GetRawIssueByIndex" , err )
return
}
issue . Repo = ctx . Repo . Repository
opts := & models . FindCommentsOptions {
ListOptions : utils . GetListOptions ( ctx ) ,
IssueID : issue . ID ,
Since : since ,
Before : before ,
Type : models . CommentTypeUnknown ,
}
2022-05-20 17:08:52 +03:00
comments , err := models . FindComments ( ctx , opts )
2022-01-01 17:12:25 +03:00
if err != nil {
ctx . Error ( http . StatusInternalServerError , "FindComments" , err )
return
}
if err := models . CommentList ( comments ) . LoadPosters ( ) ; err != nil {
ctx . Error ( http . StatusInternalServerError , "LoadPosters" , err )
return
}
var apiComments [ ] * api . TimelineComment
for _ , comment := range comments {
2022-04-28 14:48:48 +03:00
if comment . Type != models . CommentTypeCode && isXRefCommentAccessible ( ctx , ctx . Doer , comment , issue . RepoID ) {
2022-01-01 17:12:25 +03:00
comment . Issue = issue
2022-03-22 10:03:22 +03:00
apiComments = append ( apiComments , convert . ToTimelineComment ( comment , ctx . Doer ) )
2022-01-01 17:12:25 +03:00
}
}
ctx . SetTotalCountHeader ( int64 ( len ( apiComments ) ) )
ctx . JSON ( http . StatusOK , & apiComments )
}
2022-04-28 14:48:48 +03:00
func isXRefCommentAccessible ( ctx stdCtx . Context , user * user_model . User , c * models . Comment , issueRepoID int64 ) bool {
2022-01-01 17:12:25 +03:00
// Remove comments that the user has no permissions to see
if models . CommentTypeIsRef ( c . Type ) && c . RefRepoID != issueRepoID && c . RefRepoID != 0 {
var err error
// Set RefRepo for description in template
2022-04-28 14:48:48 +03:00
c . RefRepo , err = repo_model . GetRepositoryByIDCtx ( ctx , c . RefRepoID )
2022-01-01 17:12:25 +03:00
if err != nil {
return false
}
2022-05-11 13:09:36 +03:00
perm , err := access_model . GetUserRepoPermission ( ctx , c . RefRepo , user )
2022-01-01 17:12:25 +03:00
if err != nil {
return false
}
if ! perm . CanReadIssuesOrPulls ( c . RefIsPull ) {
return false
}
}
return true
}
2017-11-13 10:02:25 +03:00
// ListRepoIssueComments returns all issue-comments for a repo
2016-12-22 11:29:26 +03:00
func ListRepoIssueComments ( ctx * context . APIContext ) {
2017-11-13 10:02:25 +03:00
// swagger:operation GET /repos/{owner}/{repo}/issues/comments issue issueGetRepoComments
// ---
// summary: List all comments in a repository
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
2018-07-12 16:40:41 +03:00
// - name: since
2017-11-13 10:02:25 +03:00
// in: query
// description: if provided, only comments updated since the provided time are returned.
// type: string
2020-01-13 19:02:24 +03:00
// format: date-time
// - name: before
// in: query
// description: if provided, only comments updated before the provided time are returned.
// type: string
// format: date-time
2020-01-24 22:00:29 +03:00
// - name: page
// in: query
// description: page number of results to return (1-based)
// type: integer
// - name: limit
// in: query
2020-06-09 07:57:38 +03:00
// description: page size of results
2020-01-24 22:00:29 +03:00
// type: integer
2017-11-13 10:02:25 +03:00
// responses:
// "200":
// "$ref": "#/responses/CommentList"
2019-12-20 20:07:12 +03:00
2022-04-07 21:59:56 +03:00
before , since , err := context . GetQueryBeforeSince ( ctx . Context )
2020-01-13 19:02:24 +03:00
if err != nil {
2020-11-14 17:05:40 +03:00
ctx . Error ( http . StatusUnprocessableEntity , "GetQueryBeforeSince" , err )
2020-01-13 19:02:24 +03:00
return
2016-12-22 11:29:26 +03:00
}
2021-08-12 15:43:08 +03:00
opts := & models . FindCommentsOptions {
2020-01-24 22:00:29 +03:00
ListOptions : utils . GetListOptions ( ctx ) ,
RepoID : ctx . Repo . Repository . ID ,
Type : models . CommentTypeComment ,
Since : since ,
Before : before ,
2021-08-12 15:43:08 +03:00
}
2022-05-20 17:08:52 +03:00
comments , err := models . FindComments ( ctx , opts )
2016-12-22 11:29:26 +03:00
if err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "FindComments" , err )
2016-12-22 11:29:26 +03:00
return
}
2021-08-12 15:43:08 +03:00
totalCount , err := models . CountComments ( opts )
if err != nil {
ctx . InternalServerError ( err )
return
}
2018-12-13 18:55:43 +03:00
if err = models . CommentList ( comments ) . LoadPosters ( ) ; err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "LoadPosters" , err )
2018-12-13 18:55:43 +03:00
return
}
2016-12-22 11:29:26 +03:00
apiComments := make ( [ ] * api . Comment , len ( comments ) )
2019-04-18 08:00:03 +03:00
if err := models . CommentList ( comments ) . LoadIssues ( ) ; err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "LoadIssues" , err )
2019-04-18 08:00:03 +03:00
return
}
if err := models . CommentList ( comments ) . LoadPosters ( ) ; err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "LoadPosters" , err )
2019-04-18 08:00:03 +03:00
return
}
if _ , err := models . CommentList ( comments ) . Issues ( ) . LoadRepositories ( ) ; err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "LoadRepositories" , err )
2019-04-18 08:00:03 +03:00
return
}
2016-12-22 11:29:26 +03:00
for i := range comments {
2020-10-17 07:23:08 +03:00
apiComments [ i ] = convert . ToComment ( comments [ i ] )
2016-12-22 11:29:26 +03:00
}
2021-08-12 15:43:08 +03:00
ctx . SetTotalCountHeader ( totalCount )
2019-12-20 20:07:12 +03:00
ctx . JSON ( http . StatusOK , & apiComments )
2016-12-22 11:29:26 +03:00
}
2016-11-24 10:04:31 +03:00
// CreateIssueComment create a comment for an issue
2021-01-26 18:36:53 +03:00
func CreateIssueComment ( ctx * context . APIContext ) {
2017-11-13 10:02:25 +03:00
// swagger:operation POST /repos/{owner}/{repo}/issues/{index}/comments issue issueCreateComment
// ---
// summary: Add a comment to an issue
// consumes:
// - application/json
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
2018-06-12 17:59:22 +03:00
// - name: index
2017-11-13 10:02:25 +03:00
// in: path
// description: index of the issue
// type: integer
2018-10-21 06:40:42 +03:00
// format: int64
2017-11-13 10:02:25 +03:00
// required: true
// - name: body
// in: body
// schema:
2018-06-15 10:47:13 +03:00
// "$ref": "#/definitions/CreateIssueCommentOption"
2017-11-13 10:02:25 +03:00
// responses:
// "201":
// "$ref": "#/responses/Comment"
2019-12-20 20:07:12 +03:00
// "403":
// "$ref": "#/responses/forbidden"
2021-01-26 18:36:53 +03:00
form := web . GetForm ( ctx ) . ( * api . CreateIssueCommentOption )
2016-08-26 21:23:21 +03:00
issue , err := models . GetIssueByIndex ( ctx . Repo . Repository . ID , ctx . ParamsInt64 ( ":index" ) )
if err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "GetIssueByIndex" , err )
2016-08-26 21:23:21 +03:00
return
}
2022-03-22 10:03:22 +03:00
if issue . IsLocked && ! ctx . Repo . CanWriteIssuesOrPulls ( issue . IsPull ) && ! ctx . Doer . IsAdmin {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusForbidden , "CreateIssueComment" , errors . New ( ctx . Tr ( "repo.issues.comment_on_locked" ) ) )
2019-02-18 23:55:04 +03:00
return
}
2022-03-22 10:03:22 +03:00
comment , err := comment_service . CreateIssueComment ( ctx . Doer , ctx . Repo . Repository , issue , form . Body , nil )
2016-08-26 21:23:21 +03:00
if err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "CreateIssueComment" , err )
2016-08-26 21:23:21 +03:00
return
}
2020-10-17 07:23:08 +03:00
ctx . JSON ( http . StatusCreated , convert . ToComment ( comment ) )
2016-08-26 21:23:21 +03:00
}
2020-01-08 10:00:59 +03:00
// GetIssueComment Get a comment by ID
func GetIssueComment ( ctx * context . APIContext ) {
// swagger:operation GET /repos/{owner}/{repo}/issues/comments/{id} issue issueGetComment
// ---
// summary: Get a comment
// consumes:
// - application/json
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
// - name: id
// in: path
// description: id of the comment
// type: integer
// format: int64
// required: true
// responses:
// "200":
// "$ref": "#/responses/Comment"
// "204":
// "$ref": "#/responses/empty"
// "403":
// "$ref": "#/responses/forbidden"
// "404":
// "$ref": "#/responses/notFound"
2022-05-20 17:08:52 +03:00
comment , err := models . GetCommentByID ( ctx , ctx . ParamsInt64 ( ":id" ) )
2020-01-08 10:00:59 +03:00
if err != nil {
if models . IsErrCommentNotExist ( err ) {
ctx . NotFound ( err )
} else {
ctx . Error ( http . StatusInternalServerError , "GetCommentByID" , err )
}
return
}
if err = comment . LoadIssue ( ) ; err != nil {
ctx . InternalServerError ( err )
return
}
if comment . Issue . RepoID != ctx . Repo . Repository . ID {
ctx . Status ( http . StatusNotFound )
return
}
if comment . Type != models . CommentTypeComment {
ctx . Status ( http . StatusNoContent )
return
}
if err := comment . LoadPoster ( ) ; err != nil {
ctx . Error ( http . StatusInternalServerError , "comment.LoadPoster" , err )
return
}
2020-10-17 07:23:08 +03:00
ctx . JSON ( http . StatusOK , convert . ToComment ( comment ) )
2020-01-08 10:00:59 +03:00
}
2016-11-24 10:04:31 +03:00
// EditIssueComment modify a comment of an issue
2021-01-26 18:36:53 +03:00
func EditIssueComment ( ctx * context . APIContext ) {
2017-11-20 10:24:07 +03:00
// swagger:operation PATCH /repos/{owner}/{repo}/issues/comments/{id} issue issueEditComment
2017-11-13 10:02:25 +03:00
// ---
// summary: Edit a comment
// consumes:
// - application/json
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
// - name: id
// in: path
// description: id of the comment to edit
// type: integer
2018-10-21 06:40:42 +03:00
// format: int64
2017-11-13 10:02:25 +03:00
// required: true
// - name: body
// in: body
// schema:
// "$ref": "#/definitions/EditIssueCommentOption"
// responses:
// "200":
// "$ref": "#/responses/Comment"
2020-01-08 10:00:59 +03:00
// "204":
// "$ref": "#/responses/empty"
// "403":
// "$ref": "#/responses/forbidden"
// "404":
// "$ref": "#/responses/notFound"
2021-01-26 18:36:53 +03:00
form := web . GetForm ( ctx ) . ( * api . EditIssueCommentOption )
editIssueComment ( ctx , * form )
2017-11-20 10:24:07 +03:00
}
// EditIssueCommentDeprecated modify a comment of an issue
2021-01-26 18:36:53 +03:00
func EditIssueCommentDeprecated ( ctx * context . APIContext ) {
2017-11-20 10:24:07 +03:00
// swagger:operation PATCH /repos/{owner}/{repo}/issues/{index}/comments/{id} issue issueEditCommentDeprecated
// ---
// summary: Edit a comment
// deprecated: true
// consumes:
// - application/json
// produces:
// - application/json
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
// - name: index
// in: path
// description: this parameter is ignored
// type: integer
// required: true
// - name: id
// in: path
// description: id of the comment to edit
// type: integer
2018-10-21 06:40:42 +03:00
// format: int64
2017-11-20 10:24:07 +03:00
// required: true
// - name: body
// in: body
// schema:
// "$ref": "#/definitions/EditIssueCommentOption"
// responses:
// "200":
// "$ref": "#/responses/Comment"
2019-12-20 20:07:12 +03:00
// "204":
// "$ref": "#/responses/empty"
// "403":
// "$ref": "#/responses/forbidden"
2020-01-08 10:00:59 +03:00
// "404":
// "$ref": "#/responses/notFound"
2019-12-20 20:07:12 +03:00
2021-01-26 18:36:53 +03:00
form := web . GetForm ( ctx ) . ( * api . EditIssueCommentOption )
editIssueComment ( ctx , * form )
2017-11-20 10:24:07 +03:00
}
func editIssueComment ( ctx * context . APIContext , form api . EditIssueCommentOption ) {
2022-05-20 17:08:52 +03:00
comment , err := models . GetCommentByID ( ctx , ctx . ParamsInt64 ( ":id" ) )
2016-08-26 21:23:21 +03:00
if err != nil {
if models . IsErrCommentNotExist ( err ) {
2019-03-19 05:29:43 +03:00
ctx . NotFound ( err )
2016-08-26 21:23:21 +03:00
} else {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "GetCommentByID" , err )
2016-08-26 21:23:21 +03:00
}
return
}
2022-03-22 10:03:22 +03:00
if ! ctx . IsSigned || ( ctx . Doer . ID != comment . PosterID && ! ctx . Repo . IsAdmin ( ) ) {
2019-12-20 20:07:12 +03:00
ctx . Status ( http . StatusForbidden )
2016-08-26 21:23:21 +03:00
return
2022-01-18 20:28:38 +03:00
}
if comment . Type != models . CommentTypeComment && comment . Type != models . CommentTypeReview && comment . Type != models . CommentTypeCode {
2019-12-20 20:07:12 +03:00
ctx . Status ( http . StatusNoContent )
2016-08-26 21:23:21 +03:00
return
}
2018-05-16 17:01:55 +03:00
oldContent := comment . Content
2016-08-26 21:23:21 +03:00
comment . Content = form . Body
2022-03-22 10:03:22 +03:00
if err := comment_service . UpdateComment ( comment , ctx . Doer , oldContent ) ; err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "UpdateComment" , err )
2016-08-26 21:23:21 +03:00
return
}
2019-01-17 17:23:22 +03:00
2020-10-17 07:23:08 +03:00
ctx . JSON ( http . StatusOK , convert . ToComment ( comment ) )
2016-08-26 21:23:21 +03:00
}
2016-12-22 11:29:26 +03:00
// DeleteIssueComment delete a comment from an issue
func DeleteIssueComment ( ctx * context . APIContext ) {
2017-11-20 10:24:07 +03:00
// swagger:operation DELETE /repos/{owner}/{repo}/issues/comments/{id} issue issueDeleteComment
// ---
// summary: Delete a comment
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
// - name: id
// in: path
// description: id of comment to delete
// type: integer
2018-10-21 06:40:42 +03:00
// format: int64
2017-11-20 10:24:07 +03:00
// required: true
// responses:
// "204":
// "$ref": "#/responses/empty"
2019-12-20 20:07:12 +03:00
// "403":
// "$ref": "#/responses/forbidden"
2020-01-08 10:00:59 +03:00
// "404":
// "$ref": "#/responses/notFound"
2019-12-20 20:07:12 +03:00
2017-11-20 10:24:07 +03:00
deleteIssueComment ( ctx )
}
// DeleteIssueCommentDeprecated delete a comment from an issue
func DeleteIssueCommentDeprecated ( ctx * context . APIContext ) {
// swagger:operation DELETE /repos/{owner}/{repo}/issues/{index}/comments/{id} issue issueDeleteCommentDeprecated
2017-11-13 10:02:25 +03:00
// ---
// summary: Delete a comment
2017-11-20 10:24:07 +03:00
// deprecated: true
2017-11-13 10:02:25 +03:00
// parameters:
// - name: owner
// in: path
// description: owner of the repo
// type: string
// required: true
// - name: repo
// in: path
// description: name of the repo
// type: string
// required: true
2017-11-20 10:24:07 +03:00
// - name: index
// in: path
// description: this parameter is ignored
// type: integer
// required: true
2017-11-13 10:02:25 +03:00
// - name: id
// in: path
// description: id of comment to delete
// type: integer
2018-10-21 06:40:42 +03:00
// format: int64
2017-11-13 10:02:25 +03:00
// required: true
// responses:
// "204":
// "$ref": "#/responses/empty"
2019-12-20 20:07:12 +03:00
// "403":
// "$ref": "#/responses/forbidden"
2020-01-08 10:00:59 +03:00
// "404":
// "$ref": "#/responses/notFound"
2019-12-20 20:07:12 +03:00
2017-11-20 10:24:07 +03:00
deleteIssueComment ( ctx )
}
func deleteIssueComment ( ctx * context . APIContext ) {
2022-05-20 17:08:52 +03:00
comment , err := models . GetCommentByID ( ctx , ctx . ParamsInt64 ( ":id" ) )
2016-12-22 11:29:26 +03:00
if err != nil {
if models . IsErrCommentNotExist ( err ) {
2019-03-19 05:29:43 +03:00
ctx . NotFound ( err )
2016-12-22 11:29:26 +03:00
} else {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "GetCommentByID" , err )
2016-12-22 11:29:26 +03:00
}
return
}
2022-03-22 10:03:22 +03:00
if ! ctx . IsSigned || ( ctx . Doer . ID != comment . PosterID && ! ctx . Repo . IsAdmin ( ) ) {
2019-12-20 20:07:12 +03:00
ctx . Status ( http . StatusForbidden )
2016-12-22 11:29:26 +03:00
return
} else if comment . Type != models . CommentTypeComment {
2019-12-20 20:07:12 +03:00
ctx . Status ( http . StatusNoContent )
2016-12-22 11:29:26 +03:00
return
}
2022-03-22 10:03:22 +03:00
if err = comment_service . DeleteComment ( ctx . Doer , comment ) ; err != nil {
2019-12-20 20:07:12 +03:00
ctx . Error ( http . StatusInternalServerError , "DeleteCommentByID" , err )
2016-12-22 11:29:26 +03:00
return
}
2019-01-17 17:23:22 +03:00
2019-12-20 20:07:12 +03:00
ctx . Status ( http . StatusNoContent )
2016-12-22 11:29:26 +03:00
}