2017-03-31 01:11:58 +03:00
// Copyright 2017 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2017-03-31 01:11:58 +03:00
2017-03-30 02:31:47 +03:00
package repo
import (
"net/http"
"strconv"
2022-06-13 12:37:59 +03:00
issues_model "code.gitea.io/gitea/models/issues"
2017-03-30 02:31:47 +03:00
"code.gitea.io/gitea/modules/context"
2019-04-22 23:40:51 +03:00
"code.gitea.io/gitea/modules/log"
2017-03-30 02:31:47 +03:00
)
// IssueWatch sets issue watching
2018-11-28 14:26:14 +03:00
func IssueWatch ( ctx * context . Context ) {
issue := GetActionIssue ( ctx )
if ctx . Written ( ) {
2017-03-30 02:31:47 +03:00
return
}
2022-03-22 10:03:22 +03:00
if ! ctx . IsSigned || ( ctx . Doer . ID != issue . PosterID && ! ctx . Repo . CanReadIssuesOrPulls ( issue . IsPull ) ) {
2019-04-22 23:40:51 +03:00
if log . IsTrace ( ) {
if ctx . IsSigned {
issueType := "issues"
if issue . IsPull {
issueType = "pulls"
}
log . Trace ( "Permission Denied: User %-v not the Poster (ID: %d) and cannot read %s in Repo %-v.\n" +
"User in Repo has Permissions: %-+v" ,
2022-03-22 10:03:22 +03:00
ctx . Doer ,
2019-04-22 23:40:51 +03:00
log . NewColoredIDValue ( issue . PosterID ) ,
issueType ,
ctx . Repo . Repository ,
ctx . Repo . Permission )
} else {
log . Trace ( "Permission Denied: Not logged in" )
}
}
2021-04-05 18:30:52 +03:00
ctx . Error ( http . StatusForbidden )
2018-11-28 14:26:14 +03:00
return
}
watch , err := strconv . ParseBool ( ctx . Req . PostForm . Get ( "watch" ) )
if err != nil {
ctx . ServerError ( "watch is not bool" , err )
2017-03-30 02:31:47 +03:00
return
}
2022-06-13 12:37:59 +03:00
if err := issues_model . CreateOrUpdateIssueWatch ( ctx . Doer . ID , issue . ID , watch ) ; err != nil {
2018-11-28 14:26:14 +03:00
ctx . ServerError ( "CreateOrUpdateIssueWatch" , err )
2017-03-30 02:31:47 +03:00
return
}
2022-03-23 07:54:07 +03:00
ctx . Redirect ( issue . HTMLURL ( ) )
2017-03-30 02:31:47 +03:00
}