Set gist URL and title via push options (#216)

This commit is contained in:
Thomas Miceli
2024-01-30 01:02:28 +01:00
parent db6d6a5eba
commit 86ad88fb09
8 changed files with 131 additions and 78 deletions

View File

@ -6,6 +6,7 @@ import (
"encoding/json"
"errors"
"fmt"
"github.com/thomiceli/opengist/internal/utils"
"io"
"net/http"
"net/url"
@ -63,7 +64,7 @@ func processRegister(ctx echo.Context) error {
}
if err := ctx.Validate(dto); err != nil {
addFlash(ctx, validationMessages(&err), "error")
addFlash(ctx, utils.ValidationMessages(&err), "error")
return html(ctx, "auth_form.html")
}

View File

@ -10,6 +10,7 @@ import (
"github.com/thomiceli/opengist/internal/git"
"github.com/thomiceli/opengist/internal/index"
"github.com/thomiceli/opengist/internal/render"
"github.com/thomiceli/opengist/internal/utils"
"html/template"
"net/url"
"path/filepath"
@ -539,7 +540,7 @@ func processCreate(ctx echo.Context) error {
err = ctx.Validate(dto)
if err != nil {
addFlash(ctx, validationMessages(&err), "error")
addFlash(ctx, utils.ValidationMessages(&err), "error")
if isCreate {
return html(ctx, "create.html")
} else {

View File

@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"github.com/thomiceli/opengist/internal/index"
"github.com/thomiceli/opengist/internal/utils"
htmlpkg "html"
"html/template"
"io"
@ -205,7 +206,7 @@ func NewServer(isDev bool) *Server {
e.Use(sessionInit)
e.Validator = NewValidator()
e.Validator = utils.NewValidator()
if !dev {
parseManifestEntries()

View File

@ -5,6 +5,7 @@ import (
"fmt"
"github.com/thomiceli/opengist/internal/config"
"github.com/thomiceli/opengist/internal/git"
"github.com/thomiceli/opengist/internal/utils"
"os"
"path/filepath"
"strconv"
@ -73,7 +74,7 @@ func sshKeysProcess(ctx echo.Context) error {
}
if err := ctx.Validate(dto); err != nil {
addFlash(ctx, validationMessages(&err), "error")
addFlash(ctx, utils.ValidationMessages(&err), "error")
return redirect(ctx, "/settings")
}
key := dto.ToSSHKey()
@ -126,7 +127,7 @@ func passwordProcess(ctx echo.Context) error {
dto.Username = user.Username
if err := ctx.Validate(dto); err != nil {
addFlash(ctx, validationMessages(&err), "error")
addFlash(ctx, utils.ValidationMessages(&err), "error")
return html(ctx, "settings.html")
}
@ -154,7 +155,7 @@ func usernameProcess(ctx echo.Context) error {
dto.Password = user.Password
if err := ctx.Validate(dto); err != nil {
addFlash(ctx, validationMessages(&err), "error")
addFlash(ctx, utils.ValidationMessages(&err), "error")
return redirect(ctx, "/settings")
}

View File

@ -7,7 +7,6 @@ import (
"encoding/base64"
"errors"
"fmt"
"github.com/go-playground/validator/v10"
"github.com/gorilla/sessions"
"github.com/labstack/echo/v4"
"github.com/thomiceli/opengist/internal/config"
@ -16,7 +15,6 @@ import (
"golang.org/x/crypto/argon2"
"html/template"
"net/http"
"regexp"
"strconv"
"strings"
)
@ -129,72 +127,6 @@ func loadSettings(ctx echo.Context) error {
return nil
}
type OpengistValidator struct {
v *validator.Validate
}
func NewValidator() *OpengistValidator {
v := validator.New()
_ = v.RegisterValidation("notreserved", validateReservedKeywords)
_ = v.RegisterValidation("alphanumdash", validateAlphaNumDash)
_ = v.RegisterValidation("alphanumdashorempty", validateAlphaNumDashOrEmpty)
return &OpengistValidator{v}
}
func (cv *OpengistValidator) Validate(i interface{}) error {
if err := cv.v.Struct(i); err != nil {
return err
}
return nil
}
func validationMessages(err *error) string {
errs := (*err).(validator.ValidationErrors)
messages := make([]string, len(errs))
for i, e := range errs {
switch e.Tag() {
case "max":
messages[i] = e.Field() + " is too long"
case "required":
messages[i] = e.Field() + " should not be empty"
case "excludes":
messages[i] = e.Field() + " should not include a sub directory"
case "alphanum":
messages[i] = e.Field() + " should only contain alphanumeric characters"
case "alphanumdash":
case "alphanumdashorempty":
messages[i] = e.Field() + " should only contain alphanumeric characters and dashes"
case "min":
messages[i] = "Not enough " + e.Field()
case "notreserved":
messages[i] = "Invalid " + e.Field()
}
}
return strings.Join(messages, " ; ")
}
func validateReservedKeywords(fl validator.FieldLevel) bool {
name := fl.Field().String()
restrictedNames := map[string]struct{}{}
for _, restrictedName := range []string{"assets", "register", "login", "logout", "settings", "admin-panel", "all", "search", "init", "healthcheck"} {
restrictedNames[restrictedName] = struct{}{}
}
// if the name is not in the restricted names, it is valid
_, ok := restrictedNames[name]
return !ok
}
func validateAlphaNumDash(fl validator.FieldLevel) bool {
return regexp.MustCompile(`^[a-zA-Z0-9-]+$`).MatchString(fl.Field().String())
}
func validateAlphaNumDashOrEmpty(fl validator.FieldLevel) bool {
return regexp.MustCompile(`^$|^[a-zA-Z0-9-]+$`).MatchString(fl.Field().String())
}
func getPage(ctx echo.Context) int {
page := ctx.QueryParam("page")
if page == "" {