gitea源码

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package devtest
  4. import (
  5. "net/http"
  6. "strings"
  7. "code.gitea.io/gitea/modules/templates"
  8. "code.gitea.io/gitea/services/context"
  9. "code.gitea.io/gitea/services/mailer"
  10. "gopkg.in/yaml.v3"
  11. )
  12. func MailPreviewRender(ctx *context.Context) {
  13. tmplName := ctx.PathParam("*")
  14. mockDataContent, err := templates.AssetFS().ReadFile("mail/" + tmplName + ".devtest.yml")
  15. mockData := map[string]any{}
  16. if err == nil {
  17. err = yaml.Unmarshal(mockDataContent, &mockData)
  18. if err != nil {
  19. http.Error(ctx.Resp, "Failed to parse mock data: "+err.Error(), http.StatusInternalServerError)
  20. return
  21. }
  22. }
  23. mockData["locale"] = ctx.Locale
  24. err = mailer.LoadedTemplates().BodyTemplates.ExecuteTemplate(ctx.Resp, tmplName, mockData)
  25. if err != nil {
  26. _, _ = ctx.Resp.Write([]byte(err.Error()))
  27. }
  28. }
  29. func prepareMailPreviewRender(ctx *context.Context, tmplName string) {
  30. tmplSubject := mailer.LoadedTemplates().SubjectTemplates.Lookup(tmplName)
  31. if tmplSubject == nil {
  32. ctx.Data["RenderMailSubject"] = "default subject"
  33. } else {
  34. var buf strings.Builder
  35. err := tmplSubject.Execute(&buf, nil)
  36. if err != nil {
  37. ctx.Data["RenderMailSubject"] = err.Error()
  38. } else {
  39. ctx.Data["RenderMailSubject"] = buf.String()
  40. }
  41. }
  42. ctx.Data["RenderMailTemplateName"] = tmplName
  43. }
  44. func MailPreview(ctx *context.Context) {
  45. ctx.Data["MailTemplateNames"] = mailer.LoadedTemplates().TemplateNames
  46. tmplName := ctx.FormString("tmpl")
  47. if tmplName != "" {
  48. prepareMailPreviewRender(ctx, tmplName)
  49. }
  50. ctx.HTML(http.StatusOK, "devtest/mail-preview")
  51. }