feat: 增删改查接口实现

This commit is contained in:
ssongliu 2022-08-05 11:06:27 +08:00
parent 3ba1283b88
commit 8573a99a27
43 changed files with 681 additions and 187 deletions

View file

@ -10,11 +10,11 @@ jwt:
mysql:
path: '127.0.0.1'
path: 'localhost'
port: '3306'
db_name: '1panel'
db_name: '1Panel'
username: 'root'
password: 'Calong@2015'
password: 'KubeOperator123@mysql'
max_idle_conns: 10
max_open_conns: 100

View file

@ -0,0 +1,13 @@
package v1
import "1Panel/app/service"
type ApiGroup struct {
BaseApi
}
var ApiGroupApp = new(ApiGroup)
var (
userService = service.ServiceGroupApp.UserService
)

114
backend/app/api/v1/user.go Normal file
View file

@ -0,0 +1,114 @@
package v1
import (
"1Panel/app/dto"
"1Panel/global"
"strconv"
"github.com/gin-gonic/gin"
)
type BaseApi struct{}
func (b *BaseApi) Login(c *gin.Context) {
}
func (b *BaseApi) Register(c *gin.Context) {
var req dto.UserCreate
_ = c.ShouldBindJSON(&req)
if err := global.Validator.Struct(req); err != nil {
dto.NewResult(c).ErrorCode(500, err.Error())
return
}
if err := userService.Register(req); err != nil {
global.Logger.Error("注册失败!", err)
dto.NewResult(c).ErrorCode(500, err.Error())
return
}
dto.NewResult(c).Success()
}
func (b *BaseApi) GetUserList(c *gin.Context) {
// 这里到时候一起拦截一下
p, ok1 := c.GetQuery("page")
ps, ok2 := c.GetQuery("pageSize")
if !(ok1 && ok2) {
dto.NewResult(c).ErrorCode(500, "参数错误")
return
}
page, err := strconv.Atoi(p)
if err != nil {
global.Logger.Error("获取失败!", err)
dto.NewResult(c).ErrorCode(500, err.Error())
return
}
pageSize, err := strconv.Atoi(ps)
if err != nil {
global.Logger.Error("获取失败!", err)
dto.NewResult(c).ErrorCode(500, err.Error())
return
}
total, list, err := userService.Page(page, pageSize)
if err != nil {
global.Logger.Error("获取失败!", err)
dto.NewResult(c).ErrorCode(500, err.Error())
return
}
dto.NewResult(c).SuccessWithData(dto.PageResult{
Items: list,
Total: total,
})
}
func (b *BaseApi) DeleteUser(c *gin.Context) {
var req dto.OperationWithName
_ = c.ShouldBindJSON(&req)
if err := global.Validator.Struct(req); err != nil {
dto.NewResult(c).ErrorCode(500, err.Error())
return
}
if err := userService.Delete(req.Name); err != nil {
global.Logger.Error("删除失败!", err)
dto.NewResult(c).ErrorCode(500, err.Error())
return
}
dto.NewResult(c).Success()
}
func (b *BaseApi) UpdateUser(c *gin.Context) {
var req dto.UserUpdate
_ = c.ShouldBindJSON(&req)
if err := global.Validator.Struct(req); err != nil {
dto.NewResult(c).ErrorCode(500, err.Error())
return
}
upMap := make(map[string]interface{})
upMap["email"] = req.Email
if err := userService.Update(upMap); err != nil {
global.Logger.Error("更新失败!", err)
dto.NewResult(c).ErrorCode(500, err.Error())
return
}
dto.NewResult(c).Success()
}
func (b *BaseApi) GetUserInfo(c *gin.Context) {
name, ok := c.Params.Get("name")
if !ok {
dto.NewResult(c).ErrorCode(500, "参数错误")
return
}
user, err := userService.Get(name)
if err != nil {
global.Logger.Error("更新失败!", err)
dto.NewResult(c).ErrorCode(500, err.Error())
return
}
dto.NewResult(c).SuccessWithData(user)
}

View file

@ -1,20 +0,0 @@
package v1
import "github.com/1Panel-dev/1Panel/app/service"
type UserController interface {
}
type userController struct {
userService service.UserService
}
func NewUserController() UserController {
return &userController{
userService: service.NewUserService(),
}
}
func (u userController) GetUser() {
}

View file

@ -0,0 +1,15 @@
package dto
type PageInfo struct {
Page int `json:"page" validate:"required,number"`
PageSize int `json:"pageSize" validate:"required,number"`
}
type OperationWithName struct {
Name string `json:"name" validate:"required"`
}
type OperationWithNameAndType struct {
Name string `json:"name" validate:"required"`
Type string `json:"type" validate:"required"`
}

View file

@ -1,11 +1,17 @@
package result
package dto
import (
"github.com/1Panel-dev/1Panel/app/i18n"
"github.com/gin-gonic/gin"
"1Panel/i18n"
"net/http"
"github.com/gin-gonic/gin"
)
type PageResult struct {
Total int64 `json:"total"`
Items interface{} `json:"items"`
}
type Response struct {
Code int `json:"code"` //提示代码
Msg string `json:"msg"` //提示信息

30
backend/app/dto/user.go Normal file
View file

@ -0,0 +1,30 @@
package dto
import (
"1Panel/app/model"
"time"
)
type UserCreate struct {
Name string `json:"name" validate:"name,required"`
Password string `json:"password" validate:"password,required"`
Email string `json:"email" validate:"required,email"`
}
type UserUpdate struct {
Email string `json:"email" validate:"required,email"`
}
type UserBack struct {
Name string `json:"name"`
Email string `json:"email"`
CreatedAt time.Time `json:"createdAt"`
}
func (u UserCreate) UserCreateToMo() model.User {
return model.User{
Name: u.Name,
Password: u.Password,
Email: u.Email,
}
}

View file

@ -1,9 +0,0 @@
package common
import "time"
type BaseModel struct {
ID uint `gorm:"primarykey"`
CreatedAt time.Time `gorm:"autoCreateTime"`
UpdatedAt time.Time `gorm:"autoUpdateTime"`
}

View file

@ -1,12 +0,0 @@
package entity
import "github.com/1Panel-dev/1Panel/app/entity/common"
type User struct {
common.BaseModel
Name string `gorm:"primarykey"`
Email string
Tel string
NickName string
Password string
}

View file

@ -1,12 +0,0 @@
package i18n
import ginI18n "github.com/gin-contrib/i18n"
func GetMsg(msg string) string {
content := ginI18n.MustGetMessage(msg)
if content == "" {
return msg
} else {
return content
}
}

View file

@ -1,9 +1,9 @@
package entity
package model
import "github.com/1Panel-dev/1Panel/app/entity/common"
import "gorm.io/gorm"
type OperateLog struct {
common.BaseModel
gorm.Model
Name string `gorm:"type:varchar(64)"`
Type string `gorm:"type:varchar(64)"`
User string `gorm:"type:varchar(64)"`

10
backend/app/model/user.go Normal file
View file

@ -0,0 +1,10 @@
package model
import "gorm.io/gorm"
type User struct {
gorm.Model
Name string `json:"name" gorm:"type:varchar(64);not null;"`
Password string `json:"password" gorm:"type:varchar(64)"`
Email string `json:"email" gorm:"type:varchar(64);not null;"`
}

View file

@ -0,0 +1,31 @@
package repo
import "gorm.io/gorm"
type DBOption func(*gorm.DB) *gorm.DB
type ICommonRepo interface {
WithByID(id uint) DBOption
WithByName(name string) DBOption
WithOrderBy(orderStr string) DBOption
}
type CommonRepo struct{}
func (c *CommonRepo) WithByID(id uint) DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("id = ?", id)
}
}
func (c *CommonRepo) WithByName(name string) DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Where("name = ?", name)
}
}
func (c *CommonRepo) WithOrderBy(orderStr string) DBOption {
return func(g *gorm.DB) *gorm.DB {
return g.Order(orderStr)
}
}

View file

@ -0,0 +1,8 @@
package repo
type RepoGroup struct {
UserRepo
CommonRepo
}
var RepoGroupApp = new(RepoGroup)

View file

@ -1,30 +1,75 @@
package repo
import (
"github.com/1Panel-dev/1Panel/global"
"github.com/1Panel-dev/1Panel/internal/entity"
"1Panel/app/model"
"1Panel/global"
)
type UserRepo interface {
CreateUser(user *entity.User) error
ListUser() (entity.User, error)
type UserRepo struct{}
type IUserRepo interface {
Get(opts ...DBOption) (model.User, error)
GetList(opts ...DBOption) ([]model.User, error)
Page(limit, offset int, opts ...DBOption) (int64, []model.User, error)
Create(user *model.User) error
Update(vars map[string]interface{}) error
Save(user model.User) error
Delete(opts ...DBOption) error
}
func NewUserRepo() UserRepo {
return &userRepo{}
func NewIUserService() IUserRepo {
return &UserRepo{}
}
type userRepo struct {
func (u *UserRepo) Get(opts ...DBOption) (model.User, error) {
var user model.User
db := global.DB
for _, opt := range opts {
db = opt(db)
}
err := db.First(&user).Error
return user, err
}
func (u *userRepo) CreateUser(user *entity.User) error {
func (u *UserRepo) GetList(opts ...DBOption) ([]model.User, error) {
var users []model.User
db := global.DB
for _, opt := range opts {
db = opt(db)
}
err := db.Find(&users).Error
return users, err
}
func (u *UserRepo) Page(page, size int, opts ...DBOption) (int64, []model.User, error) {
var users []model.User
db := global.DB.Model(&model.User{})
for _, opt := range opts {
db = opt(db)
}
count := int64(0)
db = db.Count(&count)
err := db.Limit(page).Offset(size * (page - 1)).Find(&users).Error
return count, users, err
}
func (u *UserRepo) Create(user *model.User) error {
return global.DB.Create(user).Error
}
func (u *userRepo) ListUser() (entity.User, error) {
var user entity.User
if err := global.DB.Model(&entity.User{}).First(&user).Error; err != nil {
return user, err
}
return user, nil
func (u *UserRepo) Update(vars map[string]interface{}) error {
return global.DB.Model(&model.User{}).Updates(vars).Error
}
func (u *UserRepo) Save(user model.User) error {
return global.DB.Save(user).Error
}
func (u *UserRepo) Delete(opts ...DBOption) error {
db := global.DB
for _, opt := range opts {
db = opt(db)
}
return db.Delete(&model.User{}).Error
}

View file

@ -0,0 +1,14 @@
package service
import "1Panel/app/repo"
type ServiceGroup struct {
UserService
}
var ServiceGroupApp = new(ServiceGroup)
var (
userRepo = repo.RepoGroupApp.UserRepo
commonRepo = repo.RepoGroupApp.CommonRepo
)

View file

@ -0,0 +1,88 @@
package service
import (
"1Panel/app/dto"
"1Panel/app/model"
"1Panel/global"
"errors"
"gorm.io/gorm"
)
type UserService struct{}
type IUserService interface {
Get(name string) (*dto.UserBack, error)
Page(page, size int) (int64, interface{}, error)
Register(userDto dto.UserCreate) error
Login(info *model.User) (*dto.UserBack, error)
Delete(name string) error
Save(req model.User) error
Update(upMap map[string]interface{}) error
}
func NewIUserService() IUserService {
return &UserService{}
}
func (u *UserService) Get(name string) (*dto.UserBack, error) {
user, err := userRepo.Get(commonRepo.WithByName(name))
if err != nil {
return nil, err
}
dtoUser := &dto.UserBack{
Name: user.Name,
Email: user.Email,
CreatedAt: user.CreatedAt,
}
return dtoUser, nil
}
func (u *UserService) Page(page, size int) (int64, interface{}, error) {
total, users, err := userRepo.Page(page, size)
var dtoUsers []dto.UserBack
for _, user := range users {
dtoUsers = append(dtoUsers, dto.UserBack{
Name: user.Name,
Email: user.Email,
CreatedAt: user.CreatedAt,
})
}
return total, dtoUsers, err
}
func (u *UserService) Register(userDto dto.UserCreate) error {
user := userDto.UserCreateToMo()
if !errors.Is(global.DB.Where("name = ?", user.Name).First(&user).Error, gorm.ErrRecordNotFound) {
return errors.New("用户名已注册")
}
return userRepo.Create(&user)
}
func (u *UserService) Login(info *model.User) (*dto.UserBack, error) {
user, err := userRepo.Get(commonRepo.WithByName(info.Name))
if err != nil {
return nil, err
}
if user.Password != info.Password {
return nil, errors.New("登录失败")
}
dtoUser := &dto.UserBack{
Name: user.Name,
Email: user.Email,
CreatedAt: user.CreatedAt,
}
return dtoUser, err
}
func (u *UserService) Delete(name string) error {
return userRepo.Delete(commonRepo.WithByName(name))
}
func (u *UserService) Save(req model.User) error {
return userRepo.Save(req)
}
func (u *UserService) Update(upMap map[string]interface{}) error {
return userRepo.Update(upMap)
}

View file

@ -1,17 +0,0 @@
package service
import "github.com/1Panel-dev/1Panel/internal/repo"
type UserService interface {
}
func NewUserService() UserService {
return &userService{}
}
type userService struct {
userRepo repo.UserRepo
}
func (u *userService) Get() {
}

View file

@ -1,8 +1,8 @@
package errres
import (
"1Panel/app/dto"
"errors"
"github.com/1Panel-dev/1Panel/app/result"
)
const (
@ -15,10 +15,10 @@ const (
)
var (
OK = result.NewSuccess(Success, "Ok")
InvalidParam = result.NewError(InvalidParams, "InvalidParams")
JwtExpired = result.NewError(InvalidJwtExpired, "JwtExpired")
JwtNotFound = result.NewError(InvalidJwtNotFound, "JwtNotFound")
OK = dto.NewSuccess(Success, "Ok")
InvalidParam = dto.NewError(InvalidParams, "InvalidParams")
JwtExpired = dto.NewError(InvalidJwtExpired, "JwtExpired")
JwtNotFound = dto.NewError(InvalidJwtNotFound, "JwtNotFound")
)
var (

View file

@ -1,13 +1,16 @@
package global
import (
"github.com/1Panel-dev/1Panel/configs"
"1Panel/configs"
"github.com/go-playground/validator/v10"
"github.com/sirupsen/logrus"
"gorm.io/gorm"
)
var (
DB *gorm.DB
Logger *logrus.Logger
Config configs.ServerConfig
DB *gorm.DB
Logger *logrus.Logger
Config configs.ServerConfig
Validator *validator.Validate
)

View file

@ -1,32 +1,34 @@
module github.com/1Panel-dev/1Panel
module 1Panel
go 1.18
require (
github.com/fsnotify/fsnotify v1.5.4
github.com/fvbock/endless v0.0.0-20170109170031-447134032cb6
github.com/gin-contrib/i18n v0.0.1
github.com/gin-gonic/gin v1.8.1
github.com/go-gormigrate/gormigrate/v2 v2.0.2
github.com/go-playground/validator/v10 v10.11.0
github.com/golang-jwt/jwt/v4 v4.4.2
github.com/jinzhu/copier v0.3.5
github.com/natefinch/lumberjack v2.0.0+incompatible
github.com/pelletier/go-toml/v2 v2.0.2
github.com/pkg/errors v0.9.1
github.com/sirupsen/logrus v1.9.0
github.com/spf13/viper v1.12.0
golang.org/x/text v0.3.7
gorm.io/driver/mysql v1.3.5
gorm.io/driver/sqlite v1.3.6
gorm.io/gorm v1.23.8
)
require (
github.com/gin-contrib/i18n v0.0.1 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-bindata/go-bindata v3.1.2+incompatible // indirect
github.com/go-gormigrate/gormigrate/v2 v2.0.2 // indirect
github.com/go-playground/locales v0.14.0 // indirect
github.com/go-playground/universal-translator v0.18.0 // indirect
github.com/go-playground/validator/v10 v10.11.0 // indirect
github.com/go-sql-driver/mysql v1.6.0 // indirect
github.com/goccy/go-json v0.9.10 // indirect
github.com/golang-jwt/jwt/v4 v4.4.2 // indirect
github.com/goccy/go-json v0.9.7 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/jinzhu/copier v0.3.5 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
@ -37,22 +39,19 @@ require (
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/nicksnyder/go-i18n/v2 v2.2.0 // indirect
github.com/nicksnyder/go-i18n/v2 v2.1.2 // indirect
github.com/pelletier/go-toml v1.9.5 // indirect
github.com/pelletier/go-toml/v2 v2.0.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/spf13/afero v1.9.2 // indirect
github.com/spf13/afero v1.8.2 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.4.0 // indirect
github.com/subosito/gotenv v1.3.0 // indirect
github.com/ugorji/go/codec v1.2.7 // indirect
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect
golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b // indirect
golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704 // indirect
golang.org/x/text v0.3.7 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/ini.v1 v1.66.6 // indirect
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect
golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
google.golang.org/protobuf v1.28.0 // indirect
gopkg.in/ini.v1 v1.66.4 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect

View file

@ -38,8 +38,6 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU=
github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
@ -53,6 +51,7 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/denisenkom/go-mssqldb v0.12.0 h1:VtrkII767ttSPNRfFekePK3sctr+joXgO58stqQbtUA=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@ -71,8 +70,6 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY=
github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8=
github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk=
github.com/go-bindata/go-bindata v3.1.2+incompatible h1:5vjJMVhowQdPzjE1LdxyFF7YFTXg5IgGVW4gBr5IbvE=
github.com/go-bindata/go-bindata v3.1.2+incompatible/go.mod h1:xK8Dsgwmeed+BBsSy2XTopBn/8uK2HWuGSnA11C3Joo=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
@ -91,10 +88,12 @@ github.com/go-playground/validator/v10 v10.11.0 h1:0W+xRM511GY47Yy3bZUbJVitCNg2B
github.com/go-playground/validator/v10 v10.11.0/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/goccy/go-json v0.9.10 h1:hCeNmprSNLB8B8vQKWl6DpuH0t60oEs+TAk9a7CScKc=
github.com/goccy/go-json v0.9.10/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM=
github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs=
github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188 h1:+eHOFJl1BaXrQxKX+T06f78590z4qA2ZzBTqahsKSE4=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@ -159,6 +158,14 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
github.com/jackc/pgconn v1.12.1 h1:rsDFzIpRk7xT4B8FufgpCCeyjdNpKyghZeSefViE5W8=
github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE=
github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM=
github.com/jackc/pgproto3/v2 v2.3.0 h1:brH0pCGBDkBW07HWlN/oSBXrmo3WB0UvZd1pIuDcL8Y=
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg=
github.com/jackc/pgtype v1.11.0 h1:u4uiGPz/1hryuXzyaBhSk6dnIyyG2683olG2OV+UUgs=
github.com/jackc/pgx/v4 v4.16.1 h1:JzTglcal01DrghUqt+PmzWsZx/Yh7SC/CTQmSBMTd0Y=
github.com/jinzhu/copier v0.3.5 h1:GlvfUwHk62RokgqVNvYsku0TATCF7bAHVwEXoBh3iJg=
github.com/jinzhu/copier v0.3.5/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
@ -166,6 +173,7 @@ github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkr
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
@ -201,9 +209,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/natefinch/lumberjack v2.0.0+incompatible h1:4QJd3OLAMgj7ph+yZTuX13Ld4UpgHp07nNdFX7mqFfM=
github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk=
github.com/nicksnyder/go-i18n/v2 v2.1.2 h1:QHYxcUJnGHBaq7XbvgunmZ2Pn0focXFqTD61CkH146c=
github.com/nicksnyder/go-i18n/v2 v2.1.2/go.mod h1:d++QJC9ZVf7pa48qrsRWhMJ5pSHIPmS3OLqK1niyLxs=
github.com/nicksnyder/go-i18n/v2 v2.2.0 h1:MNXbyPvd141JJqlU6gJKrczThxJy+kdCNivxZpBQFkw=
github.com/nicksnyder/go-i18n/v2 v2.2.0/go.mod h1:4OtLfzqyAxsscyCb//3gfqSvBc81gImX91LrZzczN1o=
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw=
@ -221,8 +228,8 @@ github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUA
github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/afero v1.9.2 h1:j49Hj62F0n+DaZ1dDCvhABaPNSGNkt32oRFxI33IEMw=
github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo=
github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo=
github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w=
github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
@ -240,10 +247,9 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs=
github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo=
github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI=
github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo=
github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0=
@ -266,8 +272,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA=
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@ -333,8 +339,8 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b h1:3ogNYyK4oIQdIKzTu68hQrr4iuVxF3AxKl9Aj/eDrw0=
golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 h1:NWy5+hlRbC7HK+PmcXVUmW1IMyFce7to56IUvhUFm7Y=
golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@ -393,11 +399,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220731174439-a90be440212d h1:Sv5ogFZatcgIMMtBSTTAgMYsicp25MXBubjXNDKwm80=
golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704 h1:Y7NOhdqIOU8kYI7BxsgL38d0ot0raxvcW+EMQU2QrT4=
golang.org/x/sys v0.0.0-20220803195053-6e608f9ce704/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@ -551,15 +554,15 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI=
gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4=
gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8=
gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@ -573,8 +576,10 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/mysql v1.3.5 h1:iWBTVW/8Ij5AG4e0G/zqzaJblYkBI1VIL1LG2HUGsvY=
gorm.io/driver/mysql v1.3.5/go.mod h1:sSIebwZAVPiT+27jK9HIwvsqOGKx3YMPmrA3mBJR10c=
gorm.io/driver/postgres v1.3.7 h1:FKF6sIMDHDEvvMF/XJvbnCl0nu6KSKUaPXevJ4r+VYQ=
gorm.io/driver/sqlite v1.3.6 h1:Fi8xNYCUplOqWiPa3/GuCeowRNBRGTf62DEmhMDHeQQ=
gorm.io/driver/sqlite v1.3.6/go.mod h1:Sg1/pvnKtbQ7jLXxfZa+jSHvoX8hoZA8cn4xllOMTgE=
gorm.io/driver/sqlserver v1.3.2 h1:yYt8f/xdAKLY7lCCyXxIUEgZ/WsURos3dHrx8MKFGAk=
gorm.io/gorm v1.23.4/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
gorm.io/gorm v1.23.8 h1:h8sGJ+biDgBA1AD1Ha9gFCx7h8npU7AsLdlkX0n2TpE=
gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=

11
backend/i18n/i18n.go Normal file
View file

@ -0,0 +1,11 @@
package i18n
func GetMsg(msg string) string {
// content := ginI18n.MustGetMessage(msg)
// if content == "" {
// return msg
// } else {
// return content
// }
return ""
}

View file

@ -1,6 +1,6 @@
package db
import "github.com/1Panel-dev/1Panel/global"
import "1Panel/global"
func Init() {
switch global.Config.System.DbType {

View file

@ -1,7 +1,8 @@
package db
import (
"github.com/1Panel-dev/1Panel/global"
"1Panel/global"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)

View file

@ -1,7 +1,8 @@
package db
import (
"github.com/1Panel-dev/1Panel/global"
"1Panel/global"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)

View file

@ -1,11 +1,12 @@
package log
import (
"github.com/1Panel-dev/1Panel/configs"
"github.com/1Panel-dev/1Panel/global"
"1Panel/configs"
"1Panel/global"
"path"
"github.com/natefinch/lumberjack"
"github.com/sirupsen/logrus"
"path"
)
func Init() {

View file

@ -1,8 +1,9 @@
package migration
import (
"github.com/1Panel-dev/1Panel/global"
"github.com/1Panel-dev/1Panel/init/migration/migrations"
"1Panel/global"
"1Panel/init/migration/migrations"
"github.com/go-gormigrate/gormigrate/v2"
)

View file

@ -1,7 +1,8 @@
package migrations
import (
"github.com/1Panel-dev/1Panel/app/entity"
"1Panel/app/model"
"github.com/go-gormigrate/gormigrate/v2"
"gorm.io/gorm"
)
@ -9,12 +10,12 @@ import (
var InitTable = &gormigrate.Migration{
ID: "20220803-init-table",
Migrate: func(tx *gorm.DB) error {
return tx.AutoMigrate(&entity.User{})
return tx.AutoMigrate(&model.User{})
},
}
var user = entity.User{
Name: "admin", Email: "admin@fit2cloud.com", NickName: "admin", Password: "Calong@2015",
var user = model.User{
Name: "admin", Email: "admin@fit2cloud.com", Password: "Calong@2015",
}
var AddData = &gormigrate.Migration{

View file

@ -0,0 +1,27 @@
package router
import (
rou "1Panel/router"
"github.com/gin-gonic/gin"
)
func Routers() *gin.Engine {
Router := gin.Default()
systemRouter := rou.RouterGroupApp
PublicGroup := Router.Group("")
{
PublicGroup.GET("/health", func(c *gin.Context) {
c.JSON(200, "ok")
})
}
{
systemRouter.InitBaseRouter(PublicGroup) // 注册基础功能路由 不做鉴权
}
PrivateGroup := Router.Group("")
{
systemRouter.InitUserRouter(PrivateGroup) // 注册用户路由
}
return Router
}

View file

@ -0,0 +1,64 @@
package validator
import (
"1Panel/global"
"regexp"
"unicode"
"github.com/go-playground/validator/v10"
)
func Init() {
validator := validator.New()
if err := validator.RegisterValidation("name", checkNamePattern); err != nil {
panic(err)
}
if err := validator.RegisterValidation("ip", checkIpPattern); err != nil {
panic(err)
}
if err := validator.RegisterValidation("password", checkPasswordPattern); err != nil {
panic(err)
}
global.Validator = validator
}
func checkNamePattern(fl validator.FieldLevel) bool {
value := fl.Field().String()
result, err := regexp.MatchString("^[a-zA-Z\u4e00-\u9fa5]{1}[a-zA-Z0-9_\u4e00-\u9fa5]{0,30}$", value)
if err != nil {
global.Logger.Errorf("regexp matchString failed, %v", err)
}
return result
}
func checkIpPattern(fl validator.FieldLevel) bool {
value := fl.Field().String()
result, err := regexp.MatchString(`^((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}$`, value)
if err != nil {
global.Logger.Errorf("regexp check ip matchString failed, %v", err)
}
return result
}
func checkPasswordPattern(fl validator.FieldLevel) bool {
value := fl.Field().String()
if len(value) < 8 || len(value) > 30 {
return false
}
hasNum := false
hasLetter := false
for _, r := range value {
if unicode.IsLetter(r) && !hasLetter {
hasLetter = true
}
if unicode.IsNumber(r) && !hasNum {
hasNum = true
}
if hasLetter && hasNum {
return true
}
}
return false
}

View file

@ -1,9 +1,10 @@
package viper
import (
"1Panel/configs"
"1Panel/global"
"fmt"
"github.com/1Panel-dev/1Panel/configs"
"github.com/1Panel-dev/1Panel/global"
"github.com/fsnotify/fsnotify"
"github.com/spf13/viper"
)

View file

@ -1,6 +1,6 @@
package main
import "github.com/1Panel-dev/1Panel/server"
import "1Panel/server"
func main() {
server.Start()

View file

@ -1,10 +1,11 @@
package middlerware
import (
"github.com/1Panel-dev/1Panel/configs"
"github.com/1Panel-dev/1Panel/global"
"github.com/gin-gonic/gin"
"1Panel/configs"
"1Panel/global"
"net/http"
"github.com/gin-gonic/gin"
)
func Cors() gin.HandlerFunc {

View file

@ -1,18 +1,19 @@
package middlerware
import (
"1Panel/app/dto"
"1Panel/constant/errres"
"1Panel/utils"
"errors"
"github.com/1Panel-dev/1Panel/app/constant/errres"
"github.com/1Panel-dev/1Panel/app/result"
"github.com/1Panel-dev/1Panel/utils"
"github.com/gin-gonic/gin"
"time"
"github.com/gin-gonic/gin"
)
func JwtAuth() gin.HandlerFunc {
return func(c *gin.Context) {
token := c.Request.Header.Get("Authorization")
re := result.NewResult(c)
re := dto.NewResult(c)
if token == "" {
re.Error(errres.JwtNotFound)
return

View file

@ -1,20 +1,21 @@
package middlerware
import (
"github.com/1Panel-dev/1Panel/app/entity"
"github.com/1Panel-dev/1Panel/global"
"1Panel/app/model"
"1Panel/global"
"github.com/gin-gonic/gin"
)
func Logger() gin.HandlerFunc {
return func(c *gin.Context) {
path := c.Request.URL.Path
operateLog := entity.OperateLog{
operateLog := model.OperateLog{
Path: path,
IP: c.ClientIP(),
UserAgent: c.Request.UserAgent(),
}
global.DB.Model(entity.OperateLog{}).Save(&operateLog)
global.DB.Model(model.OperateLog{}).Save(&operateLog)
c.Next()
}
}

8
backend/router/entry.go Normal file
View file

@ -0,0 +1,8 @@
package router
type RouterGroup struct {
BaseRouter
UserRouter
}
var RouterGroupApp = new(RouterGroup)

17
backend/router/ro_base.go Normal file
View file

@ -0,0 +1,17 @@
package router
import (
v1 "1Panel/app/api/v1"
"github.com/gin-gonic/gin"
)
type BaseRouter struct{}
func (s *BaseRouter) InitBaseRouter(Router *gin.RouterGroup) (R gin.IRoutes) {
baseRouter := Router.Group("base")
baseApi := v1.ApiGroupApp.BaseApi
{
baseRouter.POST("login", baseApi.Login)
}
return baseRouter
}

20
backend/router/ro_user.go Normal file
View file

@ -0,0 +1,20 @@
package router
import (
v1 "1Panel/app/api/v1"
"github.com/gin-gonic/gin"
)
type UserRouter struct{}
func (s *UserRouter) InitUserRouter(Router *gin.RouterGroup) {
userRouter := Router.Group("users")
baseApi := v1.ApiGroupApp.BaseApi
{
userRouter.POST("", baseApi.Register)
userRouter.DELETE("", baseApi.DeleteUser)
userRouter.GET("", baseApi.GetUserList)
userRouter.GET(":name", baseApi.GetUserInfo)
}
}

View file

@ -1,10 +1,11 @@
package router
import (
"github.com/1Panel-dev/1Panel/middlerware"
"1Panel/middlerware"
"html/template"
ginI18n "github.com/gin-contrib/i18n"
"github.com/gin-gonic/gin"
"html/template"
)
func Routers() *gin.Engine {

View file

@ -1,16 +1,18 @@
package server
import (
"1Panel/global"
"1Panel/init/db"
"1Panel/init/log"
"1Panel/init/migration"
"1Panel/init/router"
"1Panel/init/validator"
"1Panel/init/viper"
"fmt"
"github.com/1Panel-dev/1Panel/global"
"github.com/1Panel-dev/1Panel/init/db"
"github.com/1Panel-dev/1Panel/init/log"
"github.com/1Panel-dev/1Panel/init/migration"
"github.com/1Panel-dev/1Panel/init/viper"
"github.com/1Panel-dev/1Panel/router"
"time"
"github.com/fvbock/endless"
"github.com/gin-gonic/gin"
"time"
)
func Start() {
@ -18,6 +20,7 @@ func Start() {
log.Init()
db.Init()
migration.Init()
validator.Init()
routers := router.Routers()
address := fmt.Sprintf(":%d", global.Config.System.Port)
s := initServer(address, routers)

View file

@ -0,0 +1,22 @@
package copier
import (
"encoding/json"
"github.com/pkg/errors"
)
// Copy 从一个结构体复制到另一个结构体
func Copy(to, from interface{}) error {
b, err := json.Marshal(from)
if err != nil {
return errors.Wrap(err, "marshal from data err")
}
err = json.Unmarshal(b, to)
if err != nil {
return errors.Wrap(err, "unmarshal to data err")
}
return nil
}

View file

@ -1,11 +1,12 @@
package utils
import (
"github.com/1Panel-dev/1Panel/app/constant/errres"
"github.com/1Panel-dev/1Panel/app/dto"
"github.com/1Panel-dev/1Panel/global"
"github.com/golang-jwt/jwt/v4"
"1Panel/app/dto"
"1Panel/constant/errres"
"1Panel/global"
"time"
"github.com/golang-jwt/jwt/v4"
)
type JWT struct {