Prevent clones and pushes to disabled wiki (#11131)
Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		
							parent
							
								
									9588d2c622
								
							
						
					
					
						commit
						41f05588ed
					
				
					 2 changed files with 33 additions and 1 deletions
				
			
		|  | @ -329,8 +329,27 @@ func ServCommand(ctx *macaron.Context) { | ||||||
| 		results.RepoID = repo.ID | 		results.RepoID = repo.ID | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Finally if we're trying to touch the wiki we should init it
 |  | ||||||
| 	if results.IsWiki { | 	if results.IsWiki { | ||||||
|  | 		// Ensure the wiki is enabled before we allow access to it
 | ||||||
|  | 		if _, err := repo.GetUnit(models.UnitTypeWiki); err != nil { | ||||||
|  | 			if models.IsErrUnitTypeNotExist(err) { | ||||||
|  | 				ctx.JSON(http.StatusForbidden, map[string]interface{}{ | ||||||
|  | 					"results": results, | ||||||
|  | 					"type":    "ErrForbidden", | ||||||
|  | 					"err":     "repository wiki is disabled", | ||||||
|  | 				}) | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  | 			log.Error("Failed to get the wiki unit in %-v Error: %v", repo, err) | ||||||
|  | 			ctx.JSON(http.StatusInternalServerError, map[string]interface{}{ | ||||||
|  | 				"results": results, | ||||||
|  | 				"type":    "InternalServerError", | ||||||
|  | 				"err":     fmt.Sprintf("Failed to get the wiki unit in %s/%s Error: %v", ownerName, repoName, err), | ||||||
|  | 			}) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// Finally if we're trying to touch the wiki we should init it
 | ||||||
| 		if err = wiki_service.InitWiki(repo); err != nil { | 		if err = wiki_service.InitWiki(repo); err != nil { | ||||||
| 			log.Error("Failed to initialize the wiki in %-v Error: %v", repo, err) | 			log.Error("Failed to initialize the wiki in %-v Error: %v", repo, err) | ||||||
| 			ctx.JSON(http.StatusInternalServerError, map[string]interface{}{ | 			ctx.JSON(http.StatusInternalServerError, map[string]interface{}{ | ||||||
|  |  | ||||||
|  | @ -298,6 +298,19 @@ func HTTP(ctx *context.Context) { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if isWiki { | ||||||
|  | 		// Ensure the wiki is enabled before we allow access to it
 | ||||||
|  | 		if _, err := repo.GetUnit(models.UnitTypeWiki); err != nil { | ||||||
|  | 			if models.IsErrUnitTypeNotExist(err) { | ||||||
|  | 				ctx.HandleText(http.StatusForbidden, "repository wiki is disabled") | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  | 			log.Error("Failed to get the wiki unit in %-v Error: %v", repo, err) | ||||||
|  | 			ctx.ServerError("GetUnit(UnitTypeWiki) for "+repo.FullName(), err) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	environ = append(environ, models.ProtectedBranchRepoID+fmt.Sprintf("=%d", repo.ID)) | 	environ = append(environ, models.ProtectedBranchRepoID+fmt.Sprintf("=%d", repo.ID)) | ||||||
| 
 | 
 | ||||||
| 	w := ctx.Resp | 	w := ctx.Resp | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue