mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	fix repo setting and delete repo
This commit is contained in:
		| @@ -307,6 +307,9 @@ func DeleteRepository(userId, repoId int64, userName string) (err error) { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	session := orm.NewSession() | 	session := orm.NewSession() | ||||||
|  | 	if err = session.Begin(); err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
| 	if _, err = session.Delete(&Repository{Id: repoId}); err != nil { | 	if _, err = session.Delete(&Repository{Id: repoId}); err != nil { | ||||||
| 		session.Rollback() | 		session.Rollback() | ||||||
| 		return err | 		return err | ||||||
|   | |||||||
| @@ -17,7 +17,6 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| type CreateRepoForm struct { | type CreateRepoForm struct { | ||||||
| 	UserId      int64  `form:"userId"` |  | ||||||
| 	RepoName    string `form:"repo" binding:"Required;AlphaDash"` | 	RepoName    string `form:"repo" binding:"Required;AlphaDash"` | ||||||
| 	Visibility  string `form:"visibility"` | 	Visibility  string `form:"visibility"` | ||||||
| 	Description string `form:"desc" binding:"MaxSize(100)"` | 	Description string `form:"desc" binding:"MaxSize(100)"` | ||||||
| @@ -52,9 +51,3 @@ func (f *CreateRepoForm) Validate(errors *binding.Errors, req *http.Request, con | |||||||
|  |  | ||||||
| 	validate(errors, data, f) | 	validate(errors, data, f) | ||||||
| } | } | ||||||
|  |  | ||||||
| type DeleteRepoForm struct { |  | ||||||
| 	UserId   int64  `form:"userId" binding:"Required"` |  | ||||||
| 	UserName string `form:"userName" binding:"Required"` |  | ||||||
| 	RepoId   int64  `form:"repoId" binding:"Required"` |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -20,50 +20,36 @@ func Create(ctx *middleware.Context, form auth.CreateRepoForm) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if ctx.HasError() { | 	if _, err := models.CreateRepository(ctx.User, | ||||||
| 		ctx.Render.HTML(200, "repo/create", ctx.Data) |  | ||||||
| 		return |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	// TODO: access check |  | ||||||
|  |  | ||||||
| 	user, err := models.GetUserById(form.UserId) |  | ||||||
| 	if err != nil { |  | ||||||
| 		if err.Error() == models.ErrUserNotExist.Error() { |  | ||||||
| 			ctx.RenderWithErr("User does not exist", "repo/create", &form) |  | ||||||
| 			return |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if err == nil { |  | ||||||
| 		if _, err = models.CreateRepository(user, |  | ||||||
| 		form.RepoName, form.Description, form.Language, form.License, | 		form.RepoName, form.Description, form.Language, form.License, | ||||||
| 		form.Visibility == "private", form.InitReadme == "on"); err == nil { | 		form.Visibility == "private", form.InitReadme == "on"); err == nil { | ||||||
| 			ctx.Render.Redirect("/"+user.Name+"/"+form.RepoName, 302) | 		ctx.Render.Redirect("/"+ctx.User.Name+"/"+form.RepoName, 302) | ||||||
| 		return | 		return | ||||||
| 		} | 	} else if err == models.ErrRepoAlreadyExist { | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if err.Error() == models.ErrRepoAlreadyExist.Error() { |  | ||||||
| 		ctx.RenderWithErr("Repository name has already been used", "repo/create", &form) | 		ctx.RenderWithErr("Repository name has already been used", "repo/create", &form) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx.Handle(200, "repo.Create", err) |  | ||||||
| } | } | ||||||
|  |  | ||||||
| func Delete(ctx *middleware.Context, form auth.DeleteRepoForm) { | func SettingPost(ctx *middleware.Context) { | ||||||
| 	ctx.Data["Title"] = "Delete repository" | 	if !ctx.Repo.IsOwner { | ||||||
|  | 		ctx.Render.Error(404) | ||||||
| 	if ctx.Req.Method == "GET" { |  | ||||||
| 		ctx.Render.HTML(200, "repo/delete", ctx.Data) |  | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if err := models.DeleteRepository(form.UserId, form.RepoId, form.UserName); err != nil { | 	switch ctx.Query("action") { | ||||||
|  | 	case "delete": | ||||||
|  | 		if len(ctx.Repo.Repository.Name) == 0 || ctx.Repo.Repository.Name != ctx.Query("repository") { | ||||||
|  | 			ctx.Data["ErrorMsg"] = "Please make sure you entered repository name is correct." | ||||||
|  | 			ctx.Render.HTML(200, "repo/setting", ctx.Data) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		if err := models.DeleteRepository(ctx.User.Id, ctx.Repo.Repository.Id, ctx.User.LowerName); err != nil { | ||||||
| 			ctx.Handle(200, "repo.Delete", err) | 			ctx.Handle(200, "repo.Delete", err) | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	ctx.Render.Redirect("/", 302) | 	ctx.Render.Redirect("/", 302) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -65,7 +65,8 @@ func Single(ctx *middleware.Context, params martini.Params) { | |||||||
| } | } | ||||||
|  |  | ||||||
| func Setting(ctx *middleware.Context, params martini.Params) { | func Setting(ctx *middleware.Context, params martini.Params) { | ||||||
| 	if !ctx.Repo.IsValid { | 	if !ctx.Repo.IsOwner { | ||||||
|  | 		ctx.Render.Error(404) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,12 +0,0 @@ | |||||||
| {{template "base/head" .}} |  | ||||||
| {{template "base/navbar" .}} |  | ||||||
| <div class="container"> |  | ||||||
| 	<form action="/repo/delete" method="post" class="form-horizontal"> |  | ||||||
| 		<div class="form-group"> |  | ||||||
| 		    <div class="col-md-offset-4 col-md-3"> |  | ||||||
| 		    	<button type="submit" class="btn btn-danger">Delete repository</button> |  | ||||||
| 		    </div> |  | ||||||
| 		</div> |  | ||||||
| 	</form> |  | ||||||
| </div> |  | ||||||
| {{template "base/footer" .}} |  | ||||||
| @@ -4,31 +4,61 @@ | |||||||
| {{template "repo/toolbar" .}} | {{template "repo/toolbar" .}} | ||||||
| <div id="gogs-body" class="container"> | <div id="gogs-body" class="container"> | ||||||
|     <div id="gogs-user-setting-nav" class="col-md-3"> |     <div id="gogs-user-setting-nav" class="col-md-3"> | ||||||
|         <h4>Repository Settings</h4> |  | ||||||
|         <ul class="list-group" data-init="tabs"> |         <ul class="list-group" data-init="tabs"> | ||||||
|             <li class="list-group-item"><a href="#options" data-toggle="tab">Options</a></li> |             <li class="list-group-item active"><a href="/{{.Owner.Name}}/{{.Repository.Name}}/settings">Options</a></li> | ||||||
|             <!--<li class="list-group-item" data-toggle="tab"><a href="#">Collaborators</a></li> |             <!--<li class="list-group-item"><a href="#">Collaborators</a></li> | ||||||
|             <li class="list-group-item" data-toggle="tab"><a href="#">Notifications</a></li>--> |             <li class="list-group-item"><a href="#">Notifications</a></li>--> | ||||||
|             <li class="list-group-item"><a href="#delete" data-toggle="tab">Delete</a></li> |  | ||||||
|         </ul> |         </ul> | ||||||
|     </div> |     </div> | ||||||
|     <div id="gogs-repo-setting-container" class="col-md-9 tab-content"> |     <div id="gogs-repo-setting-container" class="col-md-9"> | ||||||
|         <div id="options" class="tab-pane"> |         {{if .ErrorMsg}}<p class="alert alert-danger">{{.ErrorMsg}}</p>{{end}} | ||||||
|             <h4>Repository Options</h4> |         <div class="panel panel-default"> | ||||||
|  |             <div class="panel-heading"> | ||||||
|  |                 Repository Options | ||||||
|             </div> |             </div> | ||||||
|         <div id="delete" class="tab-pane"> |             <div class="panel-body"> | ||||||
|             <h4>Delete Repository</h4> |  | ||||||
|             <p class="alert alert-warning">Unexpected bad things will happen if you don't read this!</p> |  | ||||||
|             <p>This action <strong>CANNOT</strong> be undone. This will delete the repository, wiki, issues, and comments permanently. </p> |  | ||||||
|                  |                  | ||||||
|             <form action="/repo/delete" method="post"> |             </div> | ||||||
|                 <input type="hidden" name="userId" value="{{.Owner.Id}}"/> |         </div> | ||||||
|                 <input type="hidden" name="userName" value="{{.Owner.Name}}"/> |         <div class="panel panel-warning"> | ||||||
|                 <input type="hidden" name="repoId" value="{{.Repository.Id}}"/> |             <div class="panel-heading"> | ||||||
|                 <hr/> |                 Danger Zone | ||||||
|  |             </div> | ||||||
|  |             <div class="panel-body"> | ||||||
|  |                 <button type="button" class="btn btn-default pull-right" href="#delete-repository-modal" data-toggle="modal"> | ||||||
|  |                     Delete this repository | ||||||
|  |                 </button> | ||||||
|  |                 <dd> | ||||||
|  |                     <dt>Delete this repository.</dt> | ||||||
|  |                     <dl>Once you delete a repository, there is no going back. Please be certain.</dl> | ||||||
|  |                 </dd> | ||||||
|  |  | ||||||
|  |                 <div class="modal fade" id="delete-repository-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> | ||||||
|  |                     <div class="modal-dialog"> | ||||||
|  |                         <form action="/{{.Owner.Name}}/{{.Repository.Name}}/settings" method="post" class="modal-content"> | ||||||
|  |                             <input type="hidden" name="action" value="delete"> | ||||||
|  |  | ||||||
|  |                             <div class="modal-header"> | ||||||
|  |                                 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||||||
|  |                                 <h4 class="modal-title" id="myModalLabel">Delete repository</h4> | ||||||
|  |                             </div> | ||||||
|  |  | ||||||
|  |                             <div class="modal-body"> | ||||||
|  |                                 <div class="form-group"> | ||||||
|  |                                     <label>Please enter your repository name "<strong class="text-danger">{{.Repository.Name}}</strong>"</label> | ||||||
|  |                                     <input name="repository" class="form-control" type="text" placeholder="Type your repository name" required="required"> | ||||||
|  |                                 </div> | ||||||
|  |                             </div> | ||||||
|  |  | ||||||
|  |                             <div class="modal-footer"> | ||||||
|  |                                 <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button> | ||||||
|                                 <button class="btn btn-danger btn-lg">I understand the consequences, delete this repository</button> |                                 <button class="btn btn-danger btn-lg">I understand the consequences, delete this repository</button> | ||||||
|  |                             </div> | ||||||
|                         </form> |                         </form> | ||||||
|                     </div> |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
| </div> | </div> | ||||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||||
							
								
								
									
										5
									
								
								web.go
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								web.go
									
									
									
									
									
								
							| @@ -68,11 +68,12 @@ func runWeb(*cli.Context) { | |||||||
| 	m.Get("/user/:username", middleware.SignInRequire(false), user.Profile) | 	m.Get("/user/:username", middleware.SignInRequire(false), user.Profile) | ||||||
|  |  | ||||||
| 	m.Any("/repo/create", middleware.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) | 	m.Any("/repo/create", middleware.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create) | ||||||
| 	m.Any("/repo/delete", middleware.SignInRequire(true), binding.Bind(auth.DeleteRepoForm{}), repo.Delete) |  | ||||||
|  |  | ||||||
| 	m.Get("/help", routers.Help) | 	m.Get("/help", routers.Help) | ||||||
|  |  | ||||||
| 	m.Get("/:username/:reponame/settings", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Setting) | 	m.Post("/:username/:reponame/settings", middleware.SignInRequire(true), middleware.RepoAssignment(true), repo.SettingPost) | ||||||
|  | 	m.Get("/:username/:reponame/settings", middleware.SignInRequire(true), middleware.RepoAssignment(true), repo.Setting) | ||||||
|  |  | ||||||
| 	m.Get("/:username/:reponame/commits", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Commits) | 	m.Get("/:username/:reponame/commits", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Commits) | ||||||
| 	m.Get("/:username/:reponame/issues", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Issues) | 	m.Get("/:username/:reponame/issues", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Issues) | ||||||
| 	m.Get("/:username/:reponame/pulls", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Pulls) | 	m.Get("/:username/:reponame/pulls", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Pulls) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user