mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
binding, captcha, cache and session came from gitea.com/go-chi — Gitea forks of
Martini/Macaron middleware, ~6000 LOC across 27 files. They are in-tree now:
modules/binding (23 consumers repointed)
modules/captcha
modules/cache/chi (modules/cache already ours; upstream goes beneath)
modules/session/chi
Not a zip migration, and that is deliberate. zip has no session layer and no
captcha layer — this forge authenticates every web request through a session,
so porting to zip is not a port, it is an auth rewrite. Vendoring removes the
gitea.com dependency, which is what was actually being asked for, at zero risk
to the auth path. The zip migration stays available and is now a decision about
the router alone rather than one entangled with sessions.
Trimmed while vendoring:
- session/ledis, cache/{ledis,nodb} deleted. The supported providers are
memory/file/kv/mysql/postgres/couchbase/memcache/db, so those backends were
dead code dragging ledisdb and nodb into the module graph.
- backend tests needing a live memcache/mysql/postgres/couchbase/redis
removed. They had never run here (they lived in an external module) and
would have been red forever. The hermetic memory/file/session tests stay
and pass.
Remaining gitea.com deps are three real upstream projects, not middleware:
runner, dingtalk_webhook, levelqueue.
Everything green; integration compile gate green.
Co-authored-by: Hanzo Dev <[email protected]>
100 lines
3.5 KiB
Go
100 lines
3.5 KiB
Go
// Copyright 2026 Hanzo AI, Inc. All rights reserved.
|
|
// Copyright 2014 The Gogs Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package forms
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/hanzoai/git/modules/structs"
|
|
"github.com/hanzoai/git/modules/web/middleware"
|
|
"github.com/hanzoai/git/services/context"
|
|
|
|
"github.com/hanzoai/git/modules/binding"
|
|
)
|
|
|
|
// AdminCreateUserForm form for admin to create user
|
|
type AdminCreateUserForm struct {
|
|
LoginType string `binding:"Required"`
|
|
LoginName string
|
|
UserName string `binding:"Required;Username;MaxSize(40)"`
|
|
Email string `binding:"Required;Email;MaxSize(254)"`
|
|
Password string `binding:"MaxSize(255)"`
|
|
SendNotify bool
|
|
MustChangePassword bool
|
|
Visibility structs.VisibleType
|
|
}
|
|
|
|
// AdminCreateBadgeForm form for admin to create badge
|
|
type AdminCreateBadgeForm struct {
|
|
Slug string `binding:"Required;BadgeSlug" locale:"admin.badges.slug"`
|
|
Description string `binding:"Required" locale:"admin.badges.description"`
|
|
ImageURL string `binding:"ValidUrl" locale:"admin.badges.image_url"`
|
|
}
|
|
|
|
// AdminEditBadgeForm form for admin to edit badge
|
|
type AdminEditBadgeForm struct {
|
|
Description string `binding:"Required" locale:"admin.badges.description"`
|
|
ImageURL string `binding:"ValidUrl" locale:"admin.badges.image_url"`
|
|
}
|
|
|
|
// Validate validates form fields
|
|
func (f *AdminCreateBadgeForm) Validate(req *http.Request, errs binding.Errors) binding.Errors {
|
|
ctx := context.GetValidateContext(req)
|
|
return middleware.Validate(errs, ctx.Data, f, ctx.Locale)
|
|
}
|
|
|
|
// Validate validates form fields
|
|
func (f *AdminEditBadgeForm) Validate(req *http.Request, errs binding.Errors) binding.Errors {
|
|
ctx := context.GetValidateContext(req)
|
|
return middleware.Validate(errs, ctx.Data, f, ctx.Locale)
|
|
}
|
|
|
|
// Validate validates form fields
|
|
func (f *AdminCreateUserForm) Validate(req *http.Request, errs binding.Errors) binding.Errors {
|
|
ctx := context.GetValidateContext(req)
|
|
return middleware.Validate(errs, ctx.Data, f, ctx.Locale)
|
|
}
|
|
|
|
// AdminEditUserForm form for admin to create user
|
|
type AdminEditUserForm struct {
|
|
LoginType string `binding:"Required"`
|
|
UserName string `binding:"Username;MaxSize(40)"`
|
|
LoginName string
|
|
FullName string `binding:"MaxSize(100)"`
|
|
Email string `binding:"Required;Email;MaxSize(254)"`
|
|
Password string `binding:"MaxSize(255)"`
|
|
Website string `binding:"ValidUrl;MaxSize(255)"`
|
|
Location string `binding:"MaxSize(50)"`
|
|
Language string `binding:"MaxSize(5)"`
|
|
MaxRepoCreation int
|
|
Active bool
|
|
Admin bool
|
|
Restricted bool
|
|
AllowGitHook bool
|
|
AllowImportLocal bool
|
|
AllowCreateOrganization bool
|
|
ProhibitLogin bool
|
|
Reset2FA bool `form:"reset_2fa"`
|
|
Visibility structs.VisibleType
|
|
}
|
|
|
|
// Validate validates form fields
|
|
func (f *AdminEditUserForm) Validate(req *http.Request, errs binding.Errors) binding.Errors {
|
|
ctx := context.GetValidateContext(req)
|
|
return middleware.Validate(errs, ctx.Data, f, ctx.Locale)
|
|
}
|
|
|
|
// AdminDashboardForm form for admin dashboard operations
|
|
type AdminDashboardForm struct {
|
|
Op string `binding:"required"`
|
|
From string
|
|
}
|
|
|
|
// Validate validates form fields
|
|
func (f *AdminDashboardForm) Validate(req *http.Request, errs binding.Errors) binding.Errors {
|
|
ctx := context.GetValidateContext(req)
|
|
return middleware.Validate(errs, ctx.Data, f, ctx.Locale)
|
|
}
|