new edit webhook UI
This commit is contained in:
		
							parent
							
								
									4217c2333c
								
							
						
					
					
						commit
						c08600c59b
					
				
					 9 changed files with 126 additions and 172 deletions
				
			
		
							
								
								
									
										25
									
								
								cmd/web.go
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								cmd/web.go
									
									
									
									
									
								
							|  | @ -414,11 +414,11 @@ func runWeb(ctx *cli.Context) { | |||
| 					m.Get("/:type/new", repo.WebhooksNew) | ||||
| 					m.Post("/gogs/new", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksNewPost) | ||||
| 					m.Post("/slack/new", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksNewPost) | ||||
| 					m.Get("/:id", repo.WebHooksEdit) | ||||
| 					m.Post("/gogs/:id", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksEditPost) | ||||
| 					m.Post("/slack/:id", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksEditPost) | ||||
| 				}) | ||||
| 
 | ||||
| 				m.Get("/hooks/:id", repo.WebHooksEdit) | ||||
| 				m.Post("/hooks/gogs/:id", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksEditPost) | ||||
| 				m.Post("/hooks/slack/:id", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksEditPost) | ||||
| 				m.Route("/delete", "GET,POST", org.SettingsDelete) | ||||
| 			}) | ||||
| 
 | ||||
|  | @ -452,18 +452,17 @@ func runWeb(ctx *cli.Context) { | |||
| 				m.Get("/:type/new", repo.WebhooksNew) | ||||
| 				m.Post("/gogs/new", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksNewPost) | ||||
| 				m.Post("/slack/new", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksNewPost) | ||||
| 				m.Get("/:id", repo.WebHooksEdit) | ||||
| 				m.Post("/gogs/:id", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksEditPost) | ||||
| 				m.Post("/slack/:id", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksEditPost) | ||||
| 
 | ||||
| 				m.Group("/git", func() { | ||||
| 					m.Get("", repo.GitHooks) | ||||
| 					m.Combo("/:name").Get(repo.GitHooksEdit). | ||||
| 						Post(repo.GitHooksEditPost) | ||||
| 				}, middleware.GitHookService()) | ||||
| 			}) | ||||
| 
 | ||||
| 			m.Get("/hooks/:id", repo.WebHooksEdit) | ||||
| 			m.Post("/hooks/gogs/:id", bindIgnErr(auth.NewWebhookForm{}), repo.WebHooksEditPost) | ||||
| 			m.Post("/hooks/slack/:id", bindIgnErr(auth.NewSlackHookForm{}), repo.SlackHooksEditPost) | ||||
| 
 | ||||
| 			m.Group("/hooks/git", func() { | ||||
| 				m.Get("", repo.GitHooks) | ||||
| 				m.Combo("/:name").Get(repo.GitHooksEdit). | ||||
| 					Post(repo.GitHooksEditPost) | ||||
| 			}, middleware.GitHookService()) | ||||
| 
 | ||||
| 			m.Group("/keys", func() { | ||||
| 				m.Combo("").Get(repo.DeployKeys). | ||||
| 					Post(bindIgnErr(auth.AddSSHKeyForm{}), repo.DeployKeysPost) | ||||
|  |  | |||
|  | @ -66,7 +66,6 @@ func (f *RepoSettingForm) Validate(ctx *macaron.Context, errs binding.Errors) bi | |||
| //        \/       \/    \/     \/     \/            \/
 | ||||
| 
 | ||||
| type WebhookForm struct { | ||||
| 	HookType string `binding:"Required"` | ||||
| 	PushOnly bool | ||||
| 	Active   bool | ||||
| } | ||||
|  |  | |||
							
								
								
									
										2
									
								
								public/css/gogs.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								public/css/gogs.min.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							|  | @ -59,27 +59,6 @@ | |||
| 		} | ||||
| 	} | ||||
| } | ||||
| .repository.edit.githook { | ||||
| 	form { | ||||
| 		@input-padding: 25%!important; | ||||
| 		.inline.field > label { | ||||
| 			text-align: right; | ||||
| 			width: @input-padding; | ||||
| 			word-wrap: break-word; | ||||
| 		} | ||||
| 		input, | ||||
| 		textarea { | ||||
| 			width: 50%!important; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| .repository.edit.githook { | ||||
| 	form { | ||||
| 		textarea { | ||||
| 			width: 70%!important; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| .new.webhook { | ||||
| 	form { | ||||
|  |  | |||
|  | @ -368,103 +368,6 @@ func WebHooksNewPost(ctx *middleware.Context, form auth.NewWebhookForm) { | |||
| 	ctx.Redirect(orCtx.Link + "/settings/hooks") | ||||
| } | ||||
| 
 | ||||
| func WebHooksEdit(ctx *middleware.Context) { | ||||
| 	ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksEdit"] = true | ||||
| 
 | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "getOrgRepoCtx", err) | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.Data["BaseLink"] = orCtx.Link | ||||
| 
 | ||||
| 	w, err := models.GetWebhookById(ctx.ParamsInt64(":id")) | ||||
| 	if err != nil { | ||||
| 		if err == models.ErrWebhookNotExist { | ||||
| 			ctx.Handle(404, "GetWebhookById", nil) | ||||
| 		} else { | ||||
| 			ctx.Handle(500, "GetWebhookById", err) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	switch w.HookTaskType { | ||||
| 	case models.SLACK: | ||||
| 		ctx.Data["SlackHook"] = w.GetSlackHook() | ||||
| 		ctx.Data["HookType"] = "slack" | ||||
| 	default: | ||||
| 		ctx.Data["HookType"] = "gogs" | ||||
| 	} | ||||
| 	w.GetEvent() | ||||
| 	ctx.Data["Webhook"] = w | ||||
| 
 | ||||
| 	ctx.HTML(200, orCtx.NewTemplate) | ||||
| } | ||||
| 
 | ||||
| func WebHooksEditPost(ctx *middleware.Context, form auth.NewWebhookForm) { | ||||
| 	ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksEdit"] = true | ||||
| 
 | ||||
| 	w, err := models.GetWebhookById(ctx.ParamsInt64(":id")) | ||||
| 	if err != nil { | ||||
| 		if err == models.ErrWebhookNotExist { | ||||
| 			ctx.Handle(404, "GetWebhookById", nil) | ||||
| 		} else { | ||||
| 			ctx.Handle(500, "GetWebhookById", err) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// set data per HookTaskType
 | ||||
| 	switch w.HookTaskType { | ||||
| 	case models.SLACK: | ||||
| 		ctx.Data["SlackHook"] = w.GetSlackHook() | ||||
| 		ctx.Data["HookType"] = "Slack" | ||||
| 	default: | ||||
| 		ctx.Data["HookType"] = "Gogs" | ||||
| 	} | ||||
| 	w.GetEvent() | ||||
| 	ctx.Data["Webhook"] = w | ||||
| 
 | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "getOrgRepoCtx", err) | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.Data["BaseLink"] = orCtx.Link | ||||
| 
 | ||||
| 	if ctx.HasError() { | ||||
| 		ctx.HTML(200, orCtx.NewTemplate) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	ct := models.JSON | ||||
| 	if models.HookContentType(form.ContentType) == models.FORM { | ||||
| 		ct = models.FORM | ||||
| 	} | ||||
| 
 | ||||
| 	w.URL = form.PayloadURL | ||||
| 	w.ContentType = ct | ||||
| 	w.Secret = form.Secret | ||||
| 	w.HookEvent = &models.HookEvent{ | ||||
| 		PushOnly: form.PushOnly, | ||||
| 	} | ||||
| 	w.IsActive = form.Active | ||||
| 	if err := w.UpdateEvent(); err != nil { | ||||
| 		ctx.Handle(500, "UpdateEvent", err) | ||||
| 		return | ||||
| 	} else if err := models.UpdateWebhook(w); err != nil { | ||||
| 		ctx.Handle(500, "WebHooksEditPost", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	ctx.Flash.Success(ctx.Tr("repo.settings.update_hook_success")) | ||||
| 	ctx.Redirect(orCtx.Link + "/settings/hooks") | ||||
| } | ||||
| 
 | ||||
| func SlackHooksNewPost(ctx *middleware.Context, form auth.NewSlackHookForm) { | ||||
| 	ctx.Data["Title"] = ctx.Tr("repo.settings") | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
|  | @ -473,7 +376,7 @@ func SlackHooksNewPost(ctx *middleware.Context, form auth.NewSlackHookForm) { | |||
| 
 | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "SlackHooksNewPost(getOrgRepoCtx)", err) | ||||
| 		ctx.Handle(500, "getOrgRepoCtx", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
|  | @ -486,7 +389,7 @@ func SlackHooksNewPost(ctx *middleware.Context, form auth.NewSlackHookForm) { | |||
| 		Channel: form.Channel, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "SlackHooksNewPost: JSON marshal failed: ", err) | ||||
| 		ctx.Handle(500, "Marshal", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
|  | @ -494,7 +397,6 @@ func SlackHooksNewPost(ctx *middleware.Context, form auth.NewSlackHookForm) { | |||
| 		RepoID:      orCtx.RepoID, | ||||
| 		URL:         form.PayloadURL, | ||||
| 		ContentType: models.JSON, | ||||
| 		Secret:      "", | ||||
| 		HookEvent: &models.HookEvent{ | ||||
| 			PushOnly: form.PushOnly, | ||||
| 		}, | ||||
|  | @ -515,44 +417,123 @@ func SlackHooksNewPost(ctx *middleware.Context, form auth.NewSlackHookForm) { | |||
| 	ctx.Redirect(orCtx.Link + "/settings/hooks") | ||||
| } | ||||
| 
 | ||||
| func SlackHooksEditPost(ctx *middleware.Context, form auth.NewSlackHookForm) { | ||||
| 	ctx.Data["Title"] = ctx.Tr("repo.settings") | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksEdit"] = true | ||||
| 
 | ||||
| 	hookId := com.StrTo(ctx.Params(":id")).MustInt64() | ||||
| 	if hookId == 0 { | ||||
| 		ctx.Handle(404, "SlackHooksEditPost(hookId)", nil) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "SlackHooksEditPost(getOrgRepoCtx)", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	w, err := models.GetWebhookById(hookId) | ||||
| func checkWebhook(ctx *middleware.Context) *models.Webhook { | ||||
| 	w, err := models.GetWebhookById(ctx.ParamsInt64(":id")) | ||||
| 	if err != nil { | ||||
| 		if err == models.ErrWebhookNotExist { | ||||
| 			ctx.Handle(404, "GetWebhookById", nil) | ||||
| 		} else { | ||||
| 			ctx.Handle(500, "GetWebhookById", err) | ||||
| 		} | ||||
| 		return | ||||
| 		return nil | ||||
| 	} | ||||
| 
 | ||||
| 	switch w.HookTaskType { | ||||
| 	case models.SLACK: | ||||
| 		ctx.Data["SlackHook"] = w.GetSlackHook() | ||||
| 		ctx.Data["HookType"] = "slack" | ||||
| 	default: | ||||
| 		ctx.Data["HookType"] = "gogs" | ||||
| 	} | ||||
| 	w.GetEvent() | ||||
| 	return w | ||||
| } | ||||
| 
 | ||||
| func WebHooksEdit(ctx *middleware.Context) { | ||||
| 	ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksEdit"] = true | ||||
| 
 | ||||
| 	ctx.Data["Webhook"] = checkWebhook(ctx) | ||||
| 	if ctx.Written() { | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "getOrgRepoCtx", err) | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.Data["BaseLink"] = orCtx.Link | ||||
| 
 | ||||
| 	ctx.HTML(200, orCtx.NewTemplate) | ||||
| } | ||||
| 
 | ||||
| func WebHooksEditPost(ctx *middleware.Context, form auth.NewWebhookForm) { | ||||
| 	ctx.Data["Title"] = ctx.Tr("repo.settings.update_webhook") | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksEdit"] = true | ||||
| 
 | ||||
| 	w := checkWebhook(ctx) | ||||
| 	if ctx.Written() { | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.Data["Webhook"] = w | ||||
| 
 | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "getOrgRepoCtx", err) | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.Data["BaseLink"] = orCtx.Link | ||||
| 
 | ||||
| 	if ctx.HasError() { | ||||
| 		ctx.HTML(200, orCtx.NewTemplate) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	contentType := models.JSON | ||||
| 	if models.HookContentType(form.ContentType) == models.FORM { | ||||
| 		contentType = models.FORM | ||||
| 	} | ||||
| 
 | ||||
| 	w.URL = form.PayloadURL | ||||
| 	w.ContentType = contentType | ||||
| 	w.Secret = form.Secret | ||||
| 	w.HookEvent = &models.HookEvent{ | ||||
| 		PushOnly: form.PushOnly, | ||||
| 	} | ||||
| 	w.IsActive = form.Active | ||||
| 	if err := w.UpdateEvent(); err != nil { | ||||
| 		ctx.Handle(500, "UpdateEvent", err) | ||||
| 		return | ||||
| 	} else if err := models.UpdateWebhook(w); err != nil { | ||||
| 		ctx.Handle(500, "WebHooksEditPost", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	ctx.Flash.Success(ctx.Tr("repo.settings.update_hook_success")) | ||||
| 	ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, w.ID)) | ||||
| } | ||||
| 
 | ||||
| func SlackHooksEditPost(ctx *middleware.Context, form auth.NewSlackHookForm) { | ||||
| 	ctx.Data["Title"] = ctx.Tr("repo.settings") | ||||
| 	ctx.Data["PageIsSettingsHooks"] = true | ||||
| 	ctx.Data["PageIsSettingsHooksEdit"] = true | ||||
| 
 | ||||
| 	w := checkWebhook(ctx) | ||||
| 	if ctx.Written() { | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.Data["Webhook"] = w | ||||
| 
 | ||||
| 	orCtx, err := getOrgRepoCtx(ctx) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "getOrgRepoCtx", err) | ||||
| 		return | ||||
| 	} | ||||
| 	ctx.Data["BaseLink"] = orCtx.Link | ||||
| 
 | ||||
| 	if ctx.HasError() { | ||||
| 		ctx.HTML(200, orCtx.NewTemplate) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	meta, err := json.Marshal(&models.Slack{ | ||||
| 		Channel: form.Channel, | ||||
| 	}) | ||||
| 	if err != nil { | ||||
| 		ctx.Handle(500, "SlackHooksNewPost: JSON marshal failed: ", err) | ||||
| 		ctx.Handle(500, "Marshal", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
|  | @ -566,12 +547,12 @@ func SlackHooksEditPost(ctx *middleware.Context, form auth.NewSlackHookForm) { | |||
| 		ctx.Handle(500, "UpdateEvent", err) | ||||
| 		return | ||||
| 	} else if err := models.UpdateWebhook(w); err != nil { | ||||
| 		ctx.Handle(500, "SlackHooksEditPost", err) | ||||
| 		ctx.Handle(500, "UpdateWebhook", err) | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	ctx.Flash.Success(ctx.Tr("repo.settings.update_hook_success")) | ||||
| 	ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, hookId)) | ||||
| 	ctx.Redirect(fmt.Sprintf("%s/settings/hooks/%d", orCtx.Link, w.ID)) | ||||
| } | ||||
| 
 | ||||
| func DeleteWebhook(ctx *middleware.Context) { | ||||
|  |  | |||
|  | @ -10,15 +10,15 @@ | |||
| 				  {{.i18n.Tr "repo.settings.githooks"}} | ||||
| 				</h4> | ||||
| 				<div class="ui attached segment"> | ||||
| 					<p class="center">{{.i18n.Tr "repo.settings.githook_edit_desc"}}</p> | ||||
| 					<p>{{.i18n.Tr "repo.settings.githook_edit_desc"}}</p> | ||||
| 		      <form class="ui form" action="{{.Link}}" method="post"> | ||||
| 	          {{.CsrfTokenHtml}} | ||||
| 	          {{with .Hook}} | ||||
| 	          <div class="inline field"> | ||||
|               <label>{{$.i18n.Tr "repo.settings.githook_name"}}</label> | ||||
|               <label class="text left">{{.Name}}</label> | ||||
|               <span>{{.Name}}</span> | ||||
| 	          </div> | ||||
| 					  <div class="inline field"> | ||||
| 					  <div class="field"> | ||||
| 					    <label for="content">{{$.i18n.Tr "repo.settings.githook_content"}}</label> | ||||
| 					    <textarea id="content" name="content" rows="20" wrap="off">{{if .IsActive}}{{.Content}}{{else}}{{.Sample}}{{end}}</textarea> | ||||
| 					  </div> | ||||
|  |  | |||
|  | @ -1,6 +1,6 @@ | |||
| {{if eq .HookType "gogs"}} | ||||
| <p>{{.i18n.Tr "repo.settings.add_webhook_desc" "http://gogs.io/docs/features/webhook.html" | Str2html}}</p> | ||||
| <form class="ui form" action="{{.BaseLink}}/settings/hooks/{{if .PageIsSettingsHooksNew}}gogs/new{{else}}{{.Webhook.ID}}{{end}}" method="post"> | ||||
| <form class="ui form" action="{{.BaseLink}}/settings/hooks/gogs/{{if .PageIsSettingsHooksNew}}new{{else}}{{.Webhook.ID}}{{end}}" method="post"> | ||||
|   {{.CsrfTokenHtml}} | ||||
|   <div class="required field {{if .Err_PayloadURL}}error{{end}}"> | ||||
|     <label for="payload_url">{{.i18n.Tr "repo.settings.payload_url"}}</label> | ||||
|  |  | |||
|  | @ -1,12 +1,8 @@ | |||
| {{if .PageIsSettingsHooksEdit}} | ||||
| <div id="setting-content"> | ||||
|       <div id="repo-hooks-history-panel" class="panel panel-radius"> | ||||
|           <div class="panel-header"> | ||||
|           	<strong>{{.i18n.Tr "repo.settings.recent_deliveries"}}</strong> | ||||
|           </div> | ||||
|           <ul class="panel-body setting-list"> | ||||
|             	<li>Coming soon!</li> | ||||
|           </ul> | ||||
|       </div> | ||||
| <h4 class="ui top attached header"> | ||||
|   {{.i18n.Tr "repo.settings.recent_deliveries"}} | ||||
| </h4> | ||||
| <div class="ui attached segment"> | ||||
| 	Coming soon! | ||||
| </div> | ||||
| {{end}} | ||||
|  | @ -1,6 +1,6 @@ | |||
| {{if eq .HookType "slack"}} | ||||
| <p>{{.i18n.Tr "repo.settings.add_slack_hook_desc" "http://slack.com" | Str2html}}</p> | ||||
| <form class="ui form" action="{{.BaseLink}}/settings/hooks/{{if .PageIsSettingsHooksNew}}slack/new{{else}}{{.Webhook.ID}}{{end}}" method="post"> | ||||
| <form class="ui form" action="{{.BaseLink}}/settings/hooks/slack/{{if .PageIsSettingsHooksNew}}new{{else}}{{.Webhook.ID}}{{end}}" method="post"> | ||||
| 	{{.CsrfTokenHtml}} | ||||
|   <div class="required field {{if .Err_PayloadURL}}error{{end}}"> | ||||
|     <label for="payload_url">{{.i18n.Tr "repo.settings.payload_url"}}</label> | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue