diff --git a/internal/apps/benchmark/request.go b/internal/apps/benchmark/request.go index 3aa37e67..1f5240a2 100644 --- a/internal/apps/benchmark/request.go +++ b/internal/apps/benchmark/request.go @@ -1,6 +1,6 @@ package benchmark type Test struct { - Name string `json:"name" validate:"required,oneof=image machine compile encryption compression physics json memory disk"` + Name string `json:"name" validate:"required|in:image,machine,compile,encryption,compression,physics,json,memory,disk"` Multi bool `json:"multi"` } diff --git a/internal/apps/mysql/request.go b/internal/apps/mysql/request.go index 50f68ae1..3bee6ea2 100644 --- a/internal/apps/mysql/request.go +++ b/internal/apps/mysql/request.go @@ -5,5 +5,5 @@ type UpdateConfig struct { } type SetRootPassword struct { - Password string `form:"password" json:"password" validate:"required,password"` + Password string `form:"password" json:"password" validate:"required|password"` } diff --git a/internal/apps/phpmyadmin/request.go b/internal/apps/phpmyadmin/request.go index 894e9a6e..acdbc8d4 100644 --- a/internal/apps/phpmyadmin/request.go +++ b/internal/apps/phpmyadmin/request.go @@ -5,5 +5,5 @@ type UpdateConfig struct { } type UpdatePort struct { - Port uint `form:"port" json:"port" validate:"required,number,gte=1,lte=65535"` + Port uint `form:"port" json:"port" validate:"required|number|min:1|max:65535"` } diff --git a/internal/apps/pureftpd/request.go b/internal/apps/pureftpd/request.go index 8de5a843..d9c1860d 100644 --- a/internal/apps/pureftpd/request.go +++ b/internal/apps/pureftpd/request.go @@ -2,7 +2,7 @@ package pureftpd type Create struct { Username string `form:"username" json:"username" validate:"required"` - Password string `form:"password" json:"password" validate:"required,password"` + Password string `form:"password" json:"password" validate:"required|password"` Path string `form:"path" json:"path" validate:"required"` } @@ -12,9 +12,9 @@ type Delete struct { type ChangePassword struct { Username string `form:"username" json:"username" validate:"required"` - Password string `form:"password" json:"password" validate:"required,password"` + Password string `form:"password" json:"password" validate:"required|password"` } type UpdatePort struct { - Port uint `form:"port" json:"port" validate:"required,number,gte=1,lte=65535"` + Port uint `form:"port" json:"port" validate:"required|number|min:1|max:65535"` } diff --git a/internal/apps/supervisor/request.go b/internal/apps/supervisor/request.go index 3412b4df..554ec2b2 100644 --- a/internal/apps/supervisor/request.go +++ b/internal/apps/supervisor/request.go @@ -18,5 +18,5 @@ type CreateProcess struct { User string `form:"user" json:"user" validate:"required"` Path string `form:"path" json:"path" validate:"required"` Command string `form:"command" json:"command" validate:"required"` - Num int `form:"num" json:"num" validate:"required,gte=1"` + Num int `form:"num" json:"num" validate:"required|min:1"` } diff --git a/internal/apps/toolbox/request.go b/internal/apps/toolbox/request.go index c3e70f81..d67083f1 100644 --- a/internal/apps/toolbox/request.go +++ b/internal/apps/toolbox/request.go @@ -8,7 +8,7 @@ type DNS struct { } type SWAP struct { - Size int64 `form:"size" json:"size" validate:"gte=0"` + Size int64 `form:"size" json:"size" validate:"min:0"` } type Timezone struct { @@ -20,7 +20,7 @@ type Time struct { } type Hostname struct { - Hostname string `form:"hostname" json:"hostname" validate:"required,regex=^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$"` + Hostname string `form:"hostname" json:"hostname" validate:"required|regex:^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9]$"` } type Hosts struct { @@ -28,5 +28,5 @@ type Hosts struct { } type Password struct { - Password string `form:"password" json:"password" validate:"required,password"` + Password string `form:"password" json:"password" validate:"required|password"` } diff --git a/internal/http/request/app.go b/internal/http/request/app.go index 774b2a43..f47b4d2b 100644 --- a/internal/http/request/app.go +++ b/internal/http/request/app.go @@ -1,7 +1,7 @@ package request type App struct { - Slug string `json:"slug" form:"slug" validate:"required,not_exists=apps slug"` + Slug string `json:"slug" form:"slug" validate:"required|not_exists:apps,slug"` Channel string `json:"channel" form:"channel" validate:"required"` } @@ -10,6 +10,6 @@ type AppSlug struct { } type AppUpdateShow struct { - Slug string `json:"slug" form:"slug" validate:"required,exists=apps slug"` + Slug string `json:"slug" form:"slug" validate:"required|exists:apps,slug"` Show bool `json:"show" form:"show"` } diff --git a/internal/http/request/backup.go b/internal/http/request/backup.go index 38b3188d..835b5433 100644 --- a/internal/http/request/backup.go +++ b/internal/http/request/backup.go @@ -1,22 +1,22 @@ package request type BackupList struct { - Type string `json:"type" form:"type" validate:"required,oneof=path website mysql postgres redis panel"` + Type string `json:"type" form:"type" validate:"required|in:path,website,mysql,postgres,redis,panel"` } type BackupCreate struct { - Type string `json:"type" form:"type" validate:"required,oneof=website mysql postgres redis panel"` + Type string `json:"type" form:"type" validate:"required|in:website,mysql,postgres,redis,panel"` Target string `json:"target" form:"target" validate:"required"` Path string `json:"path" form:"path"` } type BackupFile struct { - Type string `json:"type" form:"type" validate:"required,oneof=website mysql postgres redis panel"` + Type string `json:"type" form:"type" validate:"required|in:website,mysql,postgres,redis,panel"` File string `json:"file" form:"file" validate:"required"` } type BackupRestore struct { - Type string `json:"type" form:"type" validate:"required,oneof=website mysql postgres redis panel"` + Type string `json:"type" form:"type" validate:"required|in:website,mysql,postgres,redis,panel"` File string `json:"file" form:"file" validate:"required"` Target string `json:"target" form:"target" validate:"required"` } diff --git a/internal/http/request/cert.go b/internal/http/request/cert.go index 231395c4..26856a67 100644 --- a/internal/http/request/cert.go +++ b/internal/http/request/cert.go @@ -6,8 +6,8 @@ type CertUpload struct { } type CertCreate struct { - Type string `form:"type" json:"type" validate:"required,oneof=P256 P384 2048 3072 4096"` - Domains []string `form:"domains" json:"domains" validate:"min=1,dive,required"` + Type string `form:"type" json:"type" validate:"required|in:P256,P384,2048,3072,4096"` + Domains []string `form:"domains" json:"domains" validate:"required"` AutoRenew bool `form:"auto_renew" json:"auto_renew"` AccountID uint `form:"account_id" json:"account_id"` DNSID uint `form:"dns_id" json:"dns_id"` @@ -15,9 +15,9 @@ type CertCreate struct { } type CertUpdate struct { - ID uint `form:"id" json:"id" validate:"required,exists=certs id"` - Type string `form:"type" json:"type" validate:"required,oneof=upload P256 P384 2048 3072 4096"` - Domains []string `form:"domains" json:"domains" validate:"min=1,dive,required"` + ID uint `form:"id" json:"id" validate:"required|exists:certs,id"` + Type string `form:"type" json:"type" validate:"required|in:P256,P384,2048,3072,4096"` + Domains []string `form:"domains" json:"domains" validate:"required"` Cert string `form:"cert" json:"cert"` Key string `form:"key" json:"key"` AutoRenew bool `form:"auto_renew" json:"auto_renew"` @@ -27,6 +27,6 @@ type CertUpdate struct { } type CertDeploy struct { - ID uint `form:"id" json:"id" validate:"required,exists=certs id"` + ID uint `form:"id" json:"id" validate:"required,exists:certs,id"` WebsiteID uint `form:"website_id" json:"website_id" validate:"required"` } diff --git a/internal/http/request/cert_account.go b/internal/http/request/cert_account.go index 2b8d1c18..956fb464 100644 --- a/internal/http/request/cert_account.go +++ b/internal/http/request/cert_account.go @@ -1,18 +1,18 @@ package request type CertAccountCreate struct { - CA string `form:"ca" json:"ca" validate:"required,oneof=googlecn google letsencrypt buypass zerossl sslcom"` + CA string `form:"ca" json:"ca" validate:"required|in:googlecn,google,letsencrypt,buypass,zerossl,sslcom"` Email string `form:"email" json:"email" validate:"required"` Kid string `form:"kid" json:"kid"` HmacEncoded string `form:"hmac_encoded" json:"hmac_encoded"` - KeyType string `form:"key_type" json:"key_type" validate:"required,oneof=P256 P384 2048 3072 4096"` + KeyType string `form:"key_type" json:"key_type" validate:"required|in:P256,P384,2048,3072,4096"` } type CertAccountUpdate struct { - ID uint `form:"id" json:"id" validate:"required,exists=cert_accounts id"` - CA string `form:"ca" json:"ca" validate:"required,oneof=googlecn google letsencrypt buypass zerossl sslcom"` + ID uint `form:"id" json:"id" validate:"required|exists:cert_accounts,id"` + CA string `form:"ca" json:"ca" validate:"required|in:googlecn,google,letsencrypt,buypass,zerossl,sslcom"` Email string `form:"email" json:"email" validate:"required"` Kid string `form:"kid" json:"kid"` HmacEncoded string `form:"hmac_encoded" json:"hmac_encoded"` - KeyType string `form:"key_type" json:"key_type" validate:"required,oneof=P256 P384 2048 3072 4096"` + KeyType string `form:"key_type" json:"key_type" validate:"required|in:P256,P384,2048,3072,4096"` } diff --git a/internal/http/request/cert_dns.go b/internal/http/request/cert_dns.go index dac58834..20fe4714 100644 --- a/internal/http/request/cert_dns.go +++ b/internal/http/request/cert_dns.go @@ -9,7 +9,7 @@ type CertDNSCreate struct { } type CertDNSUpdate struct { - ID uint `form:"id" json:"id" validate:"required,exists=cert_dns id"` + ID uint `form:"id" json:"id" validate:"required|exists:cert_dns,id"` Type string `form:"type" json:"type" validate:"required"` Name string `form:"name" json:"name" validate:"required"` Data acme.DNSParam `form:"data" json:"data"` diff --git a/internal/http/request/common.go b/internal/http/request/common.go index b6fe9c3a..5881b294 100644 --- a/internal/http/request/common.go +++ b/internal/http/request/common.go @@ -1,5 +1,5 @@ package request type ID struct { - ID uint `json:"id" form:"id" query:"id" validate:"required,number"` + ID uint `json:"id" form:"id" query:"id" validate:"required|number"` } diff --git a/internal/http/request/cron.go b/internal/http/request/cron.go index 333af9bc..c53ca1b3 100644 --- a/internal/http/request/cron.go +++ b/internal/http/request/cron.go @@ -1,9 +1,9 @@ package request type CronCreate struct { - Name string `form:"name" json:"name" validate:"required,not_exists=crons name"` + Name string `form:"name" json:"name" validate:"required|not_exists:crons,name"` Type string `form:"type" json:"type" validate:"required"` - Time string `form:"time" json:"time" validate:"required,cron"` + Time string `form:"time" json:"time" validate:"required|cron"` Script string `form:"script" json:"script"` BackupType string `form:"backup_type" json:"backup_type" validate:"required"` BackupPath string `form:"backup_path" json:"backup_path"` @@ -12,13 +12,13 @@ type CronCreate struct { } type CronUpdate struct { - ID uint `form:"id" json:"id" validate:"required,exists=crons id"` + ID uint `form:"id" json:"id" validate:"required|exists:crons,id"` Name string `form:"name" json:"name" validate:"required"` - Time string `form:"time" json:"time" validate:"required,cron"` + Time string `form:"time" json:"time" validate:"required|cron"` Script string `form:"script" json:"script" validate:"required"` } type CronStatus struct { - ID uint `form:"id" json:"id" validate:"required,exists=crons id"` + ID uint `form:"id" json:"id" validate:"required|exists:crons,id"` Status bool `form:"status" json:"status"` } diff --git a/internal/http/request/database.go b/internal/http/request/database.go index b99dea3f..45fb0e60 100644 --- a/internal/http/request/database.go +++ b/internal/http/request/database.go @@ -1,22 +1,22 @@ package request type DatabaseCreate struct { - ServerID uint `form:"server_id" json:"server_id" validate:"required,exists=database_servers id"` + ServerID uint `form:"server_id" json:"server_id" validate:"required|exists:database_servers,id"` Name string `form:"name" json:"name" validate:"required"` CreateUser bool `form:"create_user" json:"create_user"` - Username string `form:"username" json:"username" validate:"required_if=CreateUser true"` - Password string `form:"password" json:"password" validate:"required_if=CreateUser true"` + Username string `form:"username" json:"username" validate:"required_if:CreateUser,true"` + Password string `form:"password" json:"password" validate:"required_if:CreateUser,true"` Host string `form:"host" json:"host"` Comment string `form:"comment" json:"comment"` } type DatabaseDelete struct { - ServerID uint `form:"server_id" json:"server_id" validate:"required,exists=database_servers id"` + ServerID uint `form:"server_id" json:"server_id" validate:"required|exists:database_servers,id"` Name string `form:"name" json:"name" validate:"required"` } type DatabaseComment struct { - ServerID uint `form:"server_id" json:"server_id" validate:"required,exists=database_servers id"` + ServerID uint `form:"server_id" json:"server_id" validate:"required|exists:database_servers,id"` Name string `form:"name" json:"name" validate:"required"` Comment string `form:"comment" json:"comment"` } diff --git a/internal/http/request/database_server.go b/internal/http/request/database_server.go index e4021a63..dbb31f67 100644 --- a/internal/http/request/database_server.go +++ b/internal/http/request/database_server.go @@ -1,26 +1,26 @@ package request type DatabaseServerCreate struct { - Name string `form:"name" json:"name" validate:"required,not_exists=database_servers name"` - Type string `form:"type" json:"type" validate:"required,oneof=mysql postgresql redis"` + Name string `form:"name" json:"name" validate:"required|not_exists:database_servers,name"` + Type string `form:"type" json:"type" validate:"required|in:mysql,postgresql,redis"` Host string `form:"host" json:"host" validate:"required"` - Port uint `form:"port" json:"port" validate:"required,number,gte=1,lte=65535"` + Port uint `form:"port" json:"port" validate:"required|number|min:1|max:65535"` Username string `form:"username" json:"username"` Password string `form:"password" json:"password"` Remark string `form:"remark" json:"remark"` } type DatabaseServerUpdate struct { - ID uint `form:"id" json:"id" validate:"required,exists=database_servers id"` + ID uint `form:"id" json:"id" validate:"required|exists:database_servers,id"` Name string `form:"name" json:"name" validate:"required"` Host string `form:"host" json:"host" validate:"required"` - Port uint `form:"port" json:"port" validate:"required,number,gte=1,lte=65535"` + Port uint `form:"port" json:"port" validate:"required|number|min:1|max:65535"` Username string `form:"username" json:"username"` Password string `form:"password" json:"password"` Remark string `form:"remark" json:"remark"` } type DatabaseServerUpdateRemark struct { - ID uint `form:"id" json:"id" validate:"required,exists=database_servers id"` + ID uint `form:"id" json:"id" validate:"required|exists:database_servers,id"` Remark string `form:"remark" json:"remark"` } diff --git a/internal/http/request/database_user.go b/internal/http/request/database_user.go index 660b6cba..dae511d7 100644 --- a/internal/http/request/database_user.go +++ b/internal/http/request/database_user.go @@ -1,7 +1,7 @@ package request type DatabaseUserCreate struct { - ServerID uint `form:"server_id" json:"server_id" validate:"required,exists=database_servers id"` + ServerID uint `form:"server_id" json:"server_id" validate:"required|exists:database_servers,id"` Username string `form:"username" json:"username" validate:"required"` Password string `form:"password" json:"password" validate:"required"` Host string `form:"host" json:"host"` @@ -10,13 +10,13 @@ type DatabaseUserCreate struct { } type DatabaseUserUpdate struct { - ID uint `form:"id" json:"id" validate:"required,exists=database_users id"` + ID uint `form:"id" json:"id" validate:"required|exists:database_users,id"` Password string `form:"password" json:"password"` Privileges []string `form:"privileges" json:"privileges"` Remark string `form:"remark" json:"remark"` } type DatabaseUserUpdateRemark struct { - ID uint `form:"id" json:"id" validate:"required,exists=database_users id"` + ID uint `form:"id" json:"id" validate:"required|exists:database_users,id"` Remark string `form:"remark" json:"remark"` } diff --git a/internal/http/request/file.go b/internal/http/request/file.go index 62e8fbfe..e678ddb5 100644 --- a/internal/http/request/file.go +++ b/internal/http/request/file.go @@ -45,7 +45,7 @@ type FilePermission struct { type FileCompress struct { Dir string `form:"dir" json:"dir" validate:"required"` - Paths []string `form:"paths" json:"paths" validate:"min=1,dive,required"` + Paths []string `form:"paths" json:"paths" validate:"required"` File string `form:"file" json:"file" validate:"required"` } diff --git a/internal/http/request/firewall.go b/internal/http/request/firewall.go index 0119cee8..dfc74fe9 100644 --- a/internal/http/request/firewall.go +++ b/internal/http/request/firewall.go @@ -6,26 +6,26 @@ type FirewallStatus struct { type FirewallRule struct { Type string `json:"type"` - Family string `json:"family" validate:"required,oneof=ipv4 ipv6"` - PortStart uint `json:"port_start" validate:"required,gte=1,lte=65535"` - PortEnd uint `json:"port_end" validate:"required,gte=1,lte=65535"` - Protocol string `json:"protocol" validate:"min=1,oneof=tcp udp tcp/udp"` + Family string `json:"family" validate:"required|in:ipv4,ipv6"` + PortStart uint `json:"port_start" validate:"required|min:1|max:65535"` + PortEnd uint `json:"port_end" validate:"required|min:1|max:65535"` + Protocol string `json:"protocol" validate:"required|in:tcp,udp,tcp/udp"` Address string `json:"address"` - Strategy string `json:"strategy" validate:"required,oneof=accept drop reject"` + Strategy string `json:"strategy" validate:"required|in:accept,drop,reject"` Direction string `json:"direction"` } type FirewallIPRule struct { - Family string `json:"family" validate:"required,oneof=ipv4 ipv6"` - Protocol string `json:"protocol" validate:"min=1,oneof=tcp udp tcp/udp"` + Family string `json:"family" validate:"required|in:ipv4,ipv6"` + Protocol string `json:"protocol" validate:"required|in:tcp,udp,tcp/udp"` Address string `json:"address"` - Strategy string `json:"strategy" validate:"required,oneof=accept drop reject"` + Strategy string `json:"strategy" validate:"required|in:accept,drop,reject"` Direction string `json:"direction"` } type FirewallForward struct { - Protocol string `json:"protocol" validate:"min=1,oneof=tcp udp tcp/udp"` - Port uint `json:"port" validate:"required,gte=1,lte=65535"` + Protocol string `json:"protocol" validate:"required|in:tcp,udp,tcp/udp"` + Port uint `json:"port" validate:"required|min:1|max:65535"` TargetIP string `json:"target_ip" validate:"required"` - TargetPort uint `json:"target_port" validate:"required,gte=1,lte=65535"` + TargetPort uint `json:"target_port" validate:"required|min:1|max:65535"` } diff --git a/internal/http/request/paginate.go b/internal/http/request/paginate.go index 432a4486..2126e761 100644 --- a/internal/http/request/paginate.go +++ b/internal/http/request/paginate.go @@ -5,8 +5,8 @@ import ( ) type Paginate struct { - Page uint `json:"page" form:"page" query:"page" validate:"required,number,gte=1"` - Limit uint `json:"limit" form:"limit" query:"limit" validate:"required,number,gte=1,lte=10000"` + Page uint `json:"page" form:"page" query:"page" validate:"required|number|min:1"` + Limit uint `json:"limit" form:"limit" query:"limit" validate:"required|number|min:1|max:10000"` } func (r *Paginate) Messages(_ *http.Request) map[string]string { diff --git a/internal/http/request/safe.go b/internal/http/request/safe.go index 9181874f..47e912ef 100644 --- a/internal/http/request/safe.go +++ b/internal/http/request/safe.go @@ -1,7 +1,7 @@ package request type SafeUpdateSSH struct { - Port uint `json:"port" form:"port" validate:"required,number,gte=1,lte=65535"` + Port uint `json:"port" form:"port" validate:"number|min:1|max:65535"` Status bool `json:"status" form:"status"` } diff --git a/internal/http/request/setting.go b/internal/http/request/setting.go index 5e667b18..980b4f7f 100644 --- a/internal/http/request/setting.go +++ b/internal/http/request/setting.go @@ -10,7 +10,7 @@ type PanelSetting struct { Username string `json:"username" validate:"required"` Password string `json:"password" validate:"password"` Email string `json:"email" validate:"required"` - Port uint `json:"port" validate:"required,number,gte=1,lte=65535"` + Port uint `json:"port" validate:"number|min:1|max:65535"` HTTPS bool `json:"https"` Cert string `json:"cert" validate:"required"` Key string `json:"key" validate:"required"` diff --git a/internal/http/request/ssh.go b/internal/http/request/ssh.go index e091280a..37c08bdf 100644 --- a/internal/http/request/ssh.go +++ b/internal/http/request/ssh.go @@ -3,22 +3,22 @@ package request type SSHCreate struct { Name string `json:"name" form:"name"` Host string `json:"host" form:"host" validate:"required"` - Port uint `json:"port" form:"port" validate:"required,number,gte=1,lte=65535"` - AuthMethod string `json:"auth_method" form:"auth_method" validate:"required,oneof=password publickey"` - User string `json:"user" form:"user" validate:"required_if=AuthMethod password"` - Password string `json:"password" form:"password" validate:"required_if=AuthMethod password"` - Key string `json:"key" form:"key" validate:"required_if=AuthMethod publickey"` + Port uint `json:"port" form:"port" validate:"number|min:1|max:65535"` + AuthMethod string `json:"auth_method" form:"auth_method" validate:"required|in:password,publickey"` + User string `json:"user" form:"user" validate:"required_if:AuthMethod,password"` + Password string `json:"password" form:"password" validate:"required_if:AuthMethod,password"` + Key string `json:"key" form:"key" validate:"required_if:AuthMethod,publickey"` Remark string `json:"remark" form:"remark"` } type SSHUpdate struct { - ID uint `form:"id" json:"id" validate:"required,exists=sshes id"` + ID uint `form:"id" json:"id" validate:"required|exists:sshes,id"` Name string `json:"name" form:"name"` Host string `json:"host" form:"host" validate:"required"` - Port uint `json:"port" form:"port" validate:"required,number,gte=1,lte=65535"` - AuthMethod string `json:"auth_method" form:"auth_method" validate:"required,oneof=password publickey"` - User string `json:"user" form:"user" validate:"required_if=AuthMethod password"` - Password string `json:"password" form:"password" validate:"required_if=AuthMethod password"` - Key string `json:"key" form:"key" validate:"required_if=AuthMethod publickey"` + Port uint `json:"port" form:"port" validate:"number|min:1|max:65535"` + AuthMethod string `json:"auth_method" form:"auth_method" validate:"required|in:password,publickey"` + User string `json:"user" form:"user" validate:"required_if:AuthMethod,password"` + Password string `json:"password" form:"password" validate:"required_if:AuthMethod,password"` + Key string `json:"key" form:"key" validate:"required_if:AuthMethod,publickey"` Remark string `json:"remark" form:"remark"` } diff --git a/internal/http/request/website.go b/internal/http/request/website.go index c28ac7d4..2b334dea 100644 --- a/internal/http/request/website.go +++ b/internal/http/request/website.go @@ -8,50 +8,50 @@ type WebsiteDefaultConfig struct { } type WebsiteCreate struct { - Name string `form:"name" json:"name" validate:"required,not_exists=websites name"` - Listens []string `form:"listens" json:"listens" validate:"min=1,dive,required"` - Domains []string `form:"domains" json:"domains" validate:"min=1,dive,required"` + Name string `form:"name" json:"name" validate:"required|not_exists:websites,name"` + Listens []string `form:"listens" json:"listens" validate:"required"` + Domains []string `form:"domains" json:"domains" validate:"required"` Path string `form:"path" json:"path"` - PHP int `form:"php" json:"php" validate:"number,gte=0"` + PHP int `form:"php" json:"php"` DB bool `form:"db" json:"db"` - DBType string `form:"db_type" json:"db_type"` - DBName string `form:"db_name" json:"db_name"` - DBUser string `form:"db_user" json:"db_user"` - DBPassword string `form:"db_password" json:"db_password" validate:"password"` + DBType string `form:"db_type" json:"db_type" validate:"required_if:DB,true"` + DBName string `form:"db_name" json:"db_name" validate:"required_if:DB,true"` + DBUser string `form:"db_user" json:"db_user" validate:"required_if:DB,true"` + DBPassword string `form:"db_password" json:"db_password" validate:"required_if:DB,true"` Remark string `form:"remark" json:"remark"` } type WebsiteDelete struct { - ID uint `form:"id" json:"id" validate:"required,exists=websites id"` + ID uint `form:"id" json:"id" validate:"required|exists:websites,id"` Path bool `form:"path" json:"path"` DB bool `form:"db" json:"db"` } type WebsiteUpdate struct { - ID uint `form:"id" json:"id" validate:"required,exists=websites id"` - Listens []types.WebsiteListen `form:"listens" json:"listens" validate:"min=1"` - Domains []string `form:"domains" json:"domains" validate:"min=1,dive,required"` + ID uint `form:"id" json:"id" validate:"required|exists:websites,id"` + Listens []types.WebsiteListen `form:"listens" json:"listens" validate:"required"` + Domains []string `form:"domains" json:"domains" validate:"required"` HTTPS bool `form:"https" json:"https"` OCSP bool `form:"ocsp" json:"ocsp"` HSTS bool `form:"hsts" json:"hsts"` HTTPRedirect bool `form:"http_redirect" json:"http_redirect"` OpenBasedir bool `form:"open_basedir" json:"open_basedir"` - Index []string `form:"index" json:"index" validate:"min=1,dive,required"` + Index []string `form:"index" json:"index" validate:"required"` Path string `form:"path" json:"path" validate:"required"` // 网站目录 Root string `form:"root" json:"root" validate:"required"` // 运行目录 Raw string `form:"raw" json:"raw"` Rewrite string `form:"rewrite" json:"rewrite"` PHP int `form:"php" json:"php"` - SSLCertificate string `form:"ssl_certificate" json:"ssl_certificate" validate:"required_if=HTTPS true"` - SSLCertificateKey string `form:"ssl_certificate_key" json:"ssl_certificate_key" validate:"required_if=HTTPS true"` + SSLCertificate string `form:"ssl_certificate" json:"ssl_certificate" validate:"required_if:HTTPS,true"` + SSLCertificateKey string `form:"ssl_certificate_key" json:"ssl_certificate_key" validate:"required_if:HTTPS,true"` } type WebsiteUpdateRemark struct { - ID uint `form:"id" json:"id" validate:"required,exists=websites id"` + ID uint `form:"id" json:"id" validate:"required|exists:websites,id"` Remark string `form:"remark" json:"remark"` } type WebsiteUpdateStatus struct { - ID uint `json:"id" form:"id" validate:"required,exists=websites id"` + ID uint `json:"id" form:"id" validate:"required|exists:websites,id"` Status bool `json:"status" form:"status"` } diff --git a/internal/http/request/ws.go b/internal/http/request/ws.go deleted file mode 100644 index 725b8fc2..00000000 --- a/internal/http/request/ws.go +++ /dev/null @@ -1 +0,0 @@ -package request diff --git a/internal/http/rule/cron.go b/internal/http/rule/cron.go new file mode 100644 index 00000000..586362c8 --- /dev/null +++ b/internal/http/rule/cron.go @@ -0,0 +1,22 @@ +package rule + +import ( + "regexp" + + "github.com/spf13/cast" +) + +// Cron 校验规则 +type Cron struct { + re *regexp.Regexp +} + +func NewCron() *Cron { + return &Cron{ + re: regexp.MustCompile(`(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)|((((\d+,)+\d+|((\*|\d+)(\/|-)\d+)|\d+|\*) ?){5,7})`), + } +} + +func (s *Cron) Passes(val any, options ...any) bool { + return s.re.MatchString(cast.ToString(val)) +} diff --git a/internal/http/rule/rule.go b/internal/http/rule/rule.go index 0331741b..75266e38 100644 --- a/internal/http/rule/rule.go +++ b/internal/http/rule/rule.go @@ -10,10 +10,12 @@ func GlobalRules(db *gorm.DB) { "exists": NewExists(db).Passes, "not_exists": NewNotExists(db).Passes, "password": NewPassword().Passes, + "cron": NewCron().Passes, }) validate.AddGlobalMessages(map[string]string{ "exists": "{field} 不存在", "not_exists": "{field} 已存在", "password": "密码不满足要求(8-20位,至少包含字母、数字、特殊字符中的两种)", + "cron": "Cron 表达式不合法", }) }