@@ -1118,15 +1118,15 @@ func DeleteIssue(ctx *context.Context) {
11181118}
11191119
11201120// ValidateRepoMetas check and returns repository's meta information
1121- func ValidateRepoMetas (ctx * context.Context , form forms.CreateIssueForm , isPull bool ) ([]int64 , []int64 , int64 , int64 ) {
1121+ func ValidateRepoMetas (ctx * context.Context , form forms.CreateIssueForm , isPull bool ) ([]int64 , []int64 , [] int64 , int64 , int64 ) {
11221122 var (
11231123 repo = ctx .Repo .Repository
11241124 err error
11251125 )
11261126
11271127 labels := RetrieveRepoMetas (ctx , ctx .Repo .Repository , isPull )
11281128 if ctx .Written () {
1129- return nil , nil , 0 , 0
1129+ return nil , nil , nil , 0 , 0
11301130 }
11311131
11321132 var labelIDs []int64
@@ -1135,7 +1135,7 @@ func ValidateRepoMetas(ctx *context.Context, form forms.CreateIssueForm, isPull
11351135 if len (form .LabelIDs ) > 0 {
11361136 labelIDs , err = base .StringsToInt64s (strings .Split (form .LabelIDs , "," ))
11371137 if err != nil {
1138- return nil , nil , 0 , 0
1138+ return nil , nil , nil , 0 , 0
11391139 }
11401140 labelIDMark := make (container.Set [int64 ])
11411141 labelIDMark .AddMultiple (labelIDs ... )
@@ -1158,11 +1158,11 @@ func ValidateRepoMetas(ctx *context.Context, form forms.CreateIssueForm, isPull
11581158 milestone , err := issues_model .GetMilestoneByRepoID (ctx , ctx .Repo .Repository .ID , milestoneID )
11591159 if err != nil {
11601160 ctx .ServerError ("GetMilestoneByID" , err )
1161- return nil , nil , 0 , 0
1161+ return nil , nil , nil , 0 , 0
11621162 }
11631163 if milestone .RepoID != repo .ID {
11641164 ctx .ServerError ("GetMilestoneByID" , err )
1165- return nil , nil , 0 , 0
1165+ return nil , nil , nil , 0 , 0
11661166 }
11671167 ctx .Data ["Milestone" ] = milestone
11681168 ctx .Data ["milestone_id" ] = milestoneID
@@ -1172,11 +1172,11 @@ func ValidateRepoMetas(ctx *context.Context, form forms.CreateIssueForm, isPull
11721172 p , err := project_model .GetProjectByID (ctx , form .ProjectID )
11731173 if err != nil {
11741174 ctx .ServerError ("GetProjectByID" , err )
1175- return nil , nil , 0 , 0
1175+ return nil , nil , nil , 0 , 0
11761176 }
11771177 if p .RepoID != ctx .Repo .Repository .ID && p .OwnerID != ctx .Repo .Repository .OwnerID {
11781178 ctx .NotFound ("" , nil )
1179- return nil , nil , 0 , 0
1179+ return nil , nil , nil , 0 , 0
11801180 }
11811181
11821182 ctx .Data ["Project" ] = p
@@ -1188,26 +1188,26 @@ func ValidateRepoMetas(ctx *context.Context, form forms.CreateIssueForm, isPull
11881188 if len (form .AssigneeIDs ) > 0 {
11891189 assigneeIDs , err = base .StringsToInt64s (strings .Split (form .AssigneeIDs , "," ))
11901190 if err != nil {
1191- return nil , nil , 0 , 0
1191+ return nil , nil , nil , 0 , 0
11921192 }
11931193
11941194 // Check if the passed assignees actually exists and is assignable
11951195 for _ , aID := range assigneeIDs {
11961196 assignee , err := user_model .GetUserByID (ctx , aID )
11971197 if err != nil {
11981198 ctx .ServerError ("GetUserByID" , err )
1199- return nil , nil , 0 , 0
1199+ return nil , nil , nil , 0 , 0
12001200 }
12011201
12021202 valid , err := access_model .CanBeAssigned (ctx , assignee , repo , isPull )
12031203 if err != nil {
12041204 ctx .ServerError ("CanBeAssigned" , err )
1205- return nil , nil , 0 , 0
1205+ return nil , nil , nil , 0 , 0
12061206 }
12071207
12081208 if ! valid {
12091209 ctx .ServerError ("canBeAssigned" , repo_model.ErrUserDoesNotHaveAccessToRepo {UserID : aID , RepoName : repo .Name })
1210- return nil , nil , 0 , 0
1210+ return nil , nil , nil , 0 , 0
12111211 }
12121212 }
12131213 }
@@ -1217,7 +1217,34 @@ func ValidateRepoMetas(ctx *context.Context, form forms.CreateIssueForm, isPull
12171217 assigneeIDs = append (assigneeIDs , form .AssigneeID )
12181218 }
12191219
1220- return labelIDs , assigneeIDs , milestoneID , form .ProjectID
1220+ // Check reviewers
1221+ var reviewerIDs []int64
1222+ if len (form .ReviewerIDs ) > 0 {
1223+ reviewerIDs , err = base .StringsToInt64s (strings .Split (form .ReviewerIDs , "," ))
1224+ if err != nil {
1225+ return nil , nil , nil , 0 , 0
1226+ }
1227+
1228+ // Check if the passed reviewers actually exist
1229+ for _ , rID := range reviewerIDs {
1230+ if rID < 0 {
1231+ _ , err := organization .GetTeamByID (ctx , - rID )
1232+ if err != nil {
1233+ ctx .ServerError ("GetTeamByID" , err )
1234+ return nil , nil , nil , 0 , 0
1235+ }
1236+ continue
1237+ }
1238+
1239+ _ , err := user_model .GetUserByID (ctx , rID )
1240+ if err != nil {
1241+ ctx .ServerError ("GetUserByID" , err )
1242+ return nil , nil , nil , 0 , 0
1243+ }
1244+ }
1245+ }
1246+
1247+ return labelIDs , assigneeIDs , reviewerIDs , milestoneID , form .ProjectID
12211248}
12221249
12231250// NewIssuePost response for creating new issue
@@ -1235,7 +1262,7 @@ func NewIssuePost(ctx *context.Context) {
12351262 attachments []string
12361263 )
12371264
1238- labelIDs , assigneeIDs , milestoneID , projectID := ValidateRepoMetas (ctx , * form , false )
1265+ labelIDs , assigneeIDs , _ , milestoneID , projectID := ValidateRepoMetas (ctx , * form , false )
12391266 if ctx .Written () {
12401267 return
12411268 }
0 commit comments