This commit is contained in:
ljw
2024-09-25 22:41:57 +08:00
parent c9d70584cc
commit c99261c12d
31 changed files with 604 additions and 242 deletions

1
.gitignore vendored
View File

@@ -5,5 +5,6 @@ go.sum
resources/* resources/*
!resources/public/upload/.gitignore !resources/public/upload/.gitignore
!resources/web !resources/web
!resources/i18n
release release
data data

View File

@@ -21,6 +21,7 @@
- 地址簿 - 地址簿
- 群组 - 群组
- 授权登录,支持`github``google`登录,支持`web后台`授权登录 - 授权登录,支持`github``google`登录,支持`web后台`授权登录
- i18n
- Web Admin - Web Admin
- 用户管理 - 用户管理
- 设备管理 - 设备管理
@@ -29,6 +30,7 @@
- 群组管理 - 群组管理
- Oauth 管理 - Oauth 管理
- 快速使用web client - 快速使用web client
- i18n
- Web Client - Web Client
- 自动获取API server - 自动获取API server
- 自动获取ID服务器和KEY - 自动获取ID服务器和KEY
@@ -72,9 +74,11 @@
![pc_gr](docs/pc_gr.png) ![pc_gr](docs/pc_gr.png)
### Web Admin: ### Web Admin:
***使用前后端分离,提供用户友好的管理界面,主要用来管理和展示。前端代码在[rustdesk-api-web](https://github.com/lejianwen/rustdesk-api-web)*** **
*使用前后端分离,提供用户友好的管理界面,主要用来管理和展示。前端代码在[rustdesk-api-web](https://github.com/lejianwen/rustdesk-api-web)
***
***后台访问地址是`http://<your server>[:port]/_admin/`初次安装管理员为用户名密码为`admin` `admin`,请即时更改密码*** ***后台访问地址是`http://<your server>[:port]/_admin/`初次安装管理员为用户名密码为`admin` `admin`,请即时更改密码***
@@ -117,6 +121,7 @@
* 参考`conf/config.yaml`配置文件,修改相关配置。如果`gorm.type`是`sqlite`则不需要配置mysql相关配置。 * 参考`conf/config.yaml`配置文件,修改相关配置。如果`gorm.type`是`sqlite`则不需要配置mysql相关配置。
```yaml ```yaml
lang: "en"
gin: gin:
api-addr: "0.0.0.0:21114" api-addr: "0.0.0.0:21114"
mode: "release" mode: "release"
@@ -144,6 +149,7 @@ rustdesk:
| 变量名 | 说明 | 示例 | | 变量名 | 说明 | 示例 |
|-------------------------------------|--------------------------------------|-----------------------------| |-------------------------------------|--------------------------------------|-----------------------------|
| TZ | 时区 | Asia/Shanghai | | TZ | 时区 | Asia/Shanghai |
| RUSTDESK_API_LANG | 语言 | `en`,`zh-CN` |
| -----GIN配置----- | ---------- | ---------- | | -----GIN配置----- | ---------- | ---------- |
| RUSTDESK_API_GIN_TRUST_PROXY | 信任的代理IP列表以`,`分割,默认信任所有 | 192.168.1.2,192.168.1.3 | | RUSTDESK_API_GIN_TRUST_PROXY | 信任的代理IP列表以`,`分割,默认信任所有 | 192.168.1.2,192.168.1.3 |
| -----------GORM配置------------------ | ------------------------------------ | --------------------------- | | -----------GORM配置------------------ | ------------------------------------ | --------------------------- |

View File

@@ -20,6 +20,7 @@ desktop software that provides self-hosted solutions.
- Address Book - Address Book
- Groups - Groups
- Authorized login, supports `GitHub` and `Google` login, supports `web admin` authorized login - Authorized login, supports `GitHub` and `Google` login, supports `web admin` authorized login
- i18n
- Web Admin - Web Admin
- User Management - User Management
- Device Management - Device Management
@@ -28,6 +29,7 @@ desktop software that provides self-hosted solutions.
- Group Management - Group Management
- OAuth Management - OAuth Management
- Quick access to web client - Quick access to web client
- i18n
- Web Client - Web Client
- Automatically obtain API server - Automatically obtain API server
- Automatically obtain ID server and KEY - Automatically obtain ID server and KEY
@@ -59,7 +61,8 @@ desktop software that provides self-hosted solutions.
#### Login #### Login
- Added `GitHub` and `Google` login, which can be used after configuration in the admin panel. See the OAuth configuration section for details. - Added `GitHub` and `Google` login, which can be used after configuration in the admin panel. See the OAuth
configuration section for details.
- Added authorization login for the web admin panel. - Added authorization login for the web admin panel.
![pc_login](docs/pc_login.png) ![pc_login](docs/pc_login.png)
@@ -122,6 +125,7 @@ installation are `admin` `admin`, please change the password immediately.***
not required. not required.
```yaml ```yaml
lang: "en"
gin: gin:
api-addr: "0.0.0.0:21114" api-addr: "0.0.0.0:21114"
mode: "release" mode: "release"
@@ -144,12 +148,14 @@ rustdesk:
personal: 1 personal: 1
``` ```
* Environment variables, with the prefix `RUSTDESK_API_RUSTDESK_PERSONAL`, will override the settings in the configuration file if * Environment variables, with the prefix `RUSTDESK_API_RUSTDESK_PERSONAL`, will override the settings in the
configuration file if
present. present.
| Variable Name | Description | Example | | Variable Name | Description | Example |
|------------------------------------|-----------------------------------------------------------|--------------------------------| |------------------------------------|-----------------------------------------------------------|--------------------------------|
| TZ | timezone | Asia/Shanghai | | TZ | timezone | Asia/Shanghai |
| RUSTDESK_API_LANG | Language | `en`,`zh-CN` |
| ----- GIN Configuration ----- | --------------------------------------- | ------------------------------ | | ----- GIN Configuration ----- | --------------------------------------- | ------------------------------ |
| RUSTDESK_API_GIN_TRUST_PROXY | Trusted proxy IPs, separated by commas. | 192.168.1.2,192.168.1.3 | | RUSTDESK_API_GIN_TRUST_PROXY | Trusted proxy IPs, separated by commas. | 192.168.1.2,192.168.1.3 |
| ----- GORM Configuration ----- | --------------------------------------- | ------------------------------ | | ----- GORM Configuration ----- | --------------------------------------- | ------------------------------ |

View File

@@ -12,12 +12,17 @@ import (
"Gwen/model" "Gwen/model"
"Gwen/service" "Gwen/service"
"fmt" "fmt"
"github.com/BurntSushi/toml"
"github.com/gin-gonic/gin"
"github.com/go-playground/locales/en" "github.com/go-playground/locales/en"
"github.com/go-playground/locales/zh_Hans_CN" "github.com/go-playground/locales/zh_Hans_CN"
ut "github.com/go-playground/universal-translator" ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10" "github.com/go-playground/validator/v10"
en_translations "github.com/go-playground/validator/v10/translations/en"
zh_translations "github.com/go-playground/validator/v10/translations/zh" zh_translations "github.com/go-playground/validator/v10/translations/zh"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
"github.com/nicksnyder/go-i18n/v2/i18n"
"golang.org/x/text/language"
"reflect" "reflect"
) )
@@ -98,6 +103,7 @@ func main() {
//locker //locker
global.Lock = lock.NewLocal() global.Lock = lock.NewLocal()
InitI18n()
//gin //gin
http.ApiInit() http.ApiInit()
@@ -105,15 +111,25 @@ func main() {
func ApiInitValidator() { func ApiInitValidator() {
validate := validator.New() validate := validator.New()
// 定义不同的语言翻译
enT := en.New() enT := en.New()
cn := zh_Hans_CN.New() cn := zh_Hans_CN.New()
uni := ut.New(enT, cn) uni := ut.New(enT, cn)
trans, _ := uni.GetTranslator("cn")
err := zh_translations.RegisterDefaultTranslations(validate, trans) enTrans, _ := uni.GetTranslator("en")
zhTrans, _ := uni.GetTranslator("zh_Hans_CN")
err := zh_translations.RegisterDefaultTranslations(validate, zhTrans)
if err != nil { if err != nil {
//退出
panic(err) panic(err)
} }
err = en_translations.RegisterDefaultTranslations(validate, enTrans)
if err != nil {
panic(err)
}
validate.RegisterTagNameFunc(func(field reflect.StructField) string { validate.RegisterTagNameFunc(func(field reflect.StructField) string {
label := field.Tag.Get("label") label := field.Tag.Get("label")
if label == "" { if label == "" {
@@ -122,10 +138,16 @@ func ApiInitValidator() {
return label return label
}) })
global.Validator.Validate = validate global.Validator.Validate = validate
global.Validator.VTrans = trans global.Validator.UT = uni // 存储 Universal Translator
global.Validator.VTrans = zhTrans
global.Validator.ValidStruct = func(i interface{}) []string { global.Validator.ValidStruct = func(ctx *gin.Context, i interface{}) []string {
err := global.Validator.Validate.Struct(i) err := global.Validator.Validate.Struct(i)
lang := ctx.GetHeader("Accept-Language")
if lang == "" {
lang = global.Config.Lang
}
trans := getTranslatorForLang(lang)
errList := make([]string, 0, 10) errList := make([]string, 0, 10)
if err != nil { if err != nil {
if _, ok := err.(*validator.InvalidValidationError); ok { if _, ok := err.(*validator.InvalidValidationError); ok {
@@ -133,14 +155,18 @@ func ApiInitValidator() {
return errList return errList
} }
for _, err2 := range err.(validator.ValidationErrors) { for _, err2 := range err.(validator.ValidationErrors) {
errList = append(errList, err2.Translate(global.Validator.VTrans)) errList = append(errList, err2.Translate(trans))
} }
} }
return errList return errList
} }
global.Validator.ValidVar = func(field interface{}, tag string) []string { global.Validator.ValidVar = func(ctx *gin.Context, field interface{}, tag string) []string {
err := global.Validator.Validate.Var(field, tag) err := global.Validator.Validate.Var(field, tag)
fmt.Println(err) lang := ctx.GetHeader("Accept-Language")
if lang == "" {
lang = global.Config.Lang
}
trans := getTranslatorForLang(lang)
errList := make([]string, 0, 10) errList := make([]string, 0, 10)
if err != nil { if err != nil {
if _, ok := err.(*validator.InvalidValidationError); ok { if _, ok := err.(*validator.InvalidValidationError); ok {
@@ -148,14 +174,29 @@ func ApiInitValidator() {
return errList return errList
} }
for _, err2 := range err.(validator.ValidationErrors) { for _, err2 := range err.(validator.ValidationErrors) {
errList = append(errList, err2.Translate(global.Validator.VTrans)) errList = append(errList, err2.Translate(trans))
} }
} }
return errList return errList
} }
} }
func getTranslatorForLang(lang string) ut.Translator {
switch lang {
case "zh_CN":
fallthrough
case "zh-CN":
fallthrough
case "zh":
trans, _ := global.Validator.UT.GetTranslator("zh_Hans_CN")
return trans
case "en":
fallthrough
default:
trans, _ := global.Validator.UT.GetTranslator("en")
return trans
}
}
func DatabaseAutoUpdate() { func DatabaseAutoUpdate() {
version := 126 version := 126
@@ -251,3 +292,37 @@ func Migrate(version uint) {
} }
} }
func InitI18n() {
bundle := i18n.NewBundle(language.English)
bundle.RegisterUnmarshalFunc("toml", toml.Unmarshal)
bundle.LoadMessageFile(global.Config.Gin.ResourcesPath + "/i18n/en.toml")
bundle.LoadMessageFile(global.Config.Gin.ResourcesPath + "/i18n/zh_CN.toml")
global.Localizer = func(ctx *gin.Context) *i18n.Localizer {
lang := ctx.GetHeader("Accept-Language")
if lang == "" {
lang = global.Config.Lang
}
if lang == "en" {
return i18n.NewLocalizer(bundle, "en")
} else {
return i18n.NewLocalizer(bundle, lang, "en")
}
}
//personUnreadEmails := localizer.MustLocalize(&i18n.LocalizeConfig{
// DefaultMessage: &i18n.Message{
// ID: "PersonUnreadEmails",
// },
// PluralCount: 6,
// TemplateData: map[string]interface{}{
// "Name": "LE",
// "PluralCount": 6,
// },
//})
//personUnreadEmails, err := global.Localizer.LocalizeMessage(&i18n.Message{
// ID: "ParamsError",
//})
//fmt.Println(err, personUnreadEmails)
}

View File

@@ -1,3 +1,4 @@
lang: "en"
gin: gin:
api-addr: "0.0.0.0:21114" api-addr: "0.0.0.0:21114"
mode: "release" #release,debug,test mode: "release" #release,debug,test

View File

@@ -15,6 +15,7 @@ const (
) )
type Config struct { type Config struct {
Lang string `mapstructure:"lang"`
Gorm Gorm Gorm Gorm
Mysql Mysql Mysql Mysql
Gin Gin Gin Gin

View File

@@ -2455,7 +2455,6 @@ const docTemplateadmin = `{
"type": "object", "type": "object",
"required": [ "required": [
"group_id", "group_id",
"nickname",
"status", "status",
"username" "username"
], ],

View File

@@ -2448,7 +2448,6 @@
"type": "object", "type": "object",
"required": [ "required": [
"group_id", "group_id",
"nickname",
"status", "status",
"username" "username"
], ],

View File

@@ -165,7 +165,6 @@ definitions:
type: string type: string
required: required:
- group_id - group_id
- nickname
- status - status
- username - username
type: object type: object

View File

@@ -6,9 +6,11 @@ import (
"Gwen/lib/jwt" "Gwen/lib/jwt"
"Gwen/lib/lock" "Gwen/lib/lock"
"Gwen/lib/upload" "Gwen/lib/upload"
"github.com/gin-gonic/gin"
ut "github.com/go-playground/universal-translator" ut "github.com/go-playground/universal-translator"
"github.com/go-playground/validator/v10" "github.com/go-playground/validator/v10"
"github.com/go-redis/redis/v8" "github.com/go-redis/redis/v8"
"github.com/nicksnyder/go-i18n/v2/i18n"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/spf13/viper" "github.com/spf13/viper"
"gorm.io/gorm" "gorm.io/gorm"
@@ -23,11 +25,13 @@ var (
Cache cache.Handler Cache cache.Handler
Validator struct { Validator struct {
Validate *validator.Validate Validate *validator.Validate
UT *ut.UniversalTranslator
VTrans ut.Translator VTrans ut.Translator
ValidStruct func(interface{}) []string ValidStruct func(*gin.Context, interface{}) []string
ValidVar func(field interface{}, tag string) []string ValidVar func(ctx *gin.Context, field interface{}, tag string) []string
} }
Oss *upload.Oss Oss *upload.Oss
Jwt *jwt.Jwt Jwt *jwt.Jwt
Lock lock.Locker Lock lock.Locker
Localizer func(ctx *gin.Context) *i18n.Localizer
) )

6
go.mod
View File

@@ -20,7 +20,7 @@ require (
github.com/swaggo/gin-swagger v1.6.0 github.com/swaggo/gin-swagger v1.6.0
github.com/swaggo/swag v1.16.3 github.com/swaggo/swag v1.16.3
golang.org/x/oauth2 v0.23.0 golang.org/x/oauth2 v0.23.0
golang.org/x/text v0.15.0 golang.org/x/text v0.18.0
gorm.io/driver/mysql v1.5.7 gorm.io/driver/mysql v1.5.7
gorm.io/driver/sqlite v1.5.6 gorm.io/driver/sqlite v1.5.6
gorm.io/gorm v1.25.7 gorm.io/gorm v1.25.7
@@ -67,9 +67,9 @@ require (
github.com/ugorji/go/codec v1.2.9 // indirect github.com/ugorji/go/codec v1.2.9 // indirect
golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect
golang.org/x/crypto v0.23.0 // indirect golang.org/x/crypto v0.23.0 // indirect
golang.org/x/net v0.21.0 // indirect golang.org/x/net v0.25.0 // indirect
golang.org/x/sys v0.25.0 // indirect golang.org/x/sys v0.25.0 // indirect
golang.org/x/tools v0.7.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
google.golang.org/protobuf v1.33.0 // indirect google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/ini.v1 v1.63.2 // indirect gopkg.in/ini.v1 v1.63.2 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect

View File

@@ -31,14 +31,14 @@ func (ct *AddressBook) Detail(c *gin.Context) {
t := service.AllService.AddressBookService.InfoByRowId(uint(iid)) t := service.AllService.AddressBookService.InfoByRowId(uint(iid))
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id { if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id {
response.Fail(c, 101, "无权限") response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
return return
} }
if t.RowId > 0 { if t.RowId > 0 {
response.Success(c, t) response.Success(c, t)
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
@@ -56,10 +56,10 @@ func (ct *AddressBook) Detail(c *gin.Context) {
func (ct *AddressBook) Create(c *gin.Context) { func (ct *AddressBook) Create(c *gin.Context) {
f := &admin.AddressBookForm{} f := &admin.AddressBookForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -71,7 +71,7 @@ func (ct *AddressBook) Create(c *gin.Context) {
} }
err := service.AllService.AddressBookService.Create(t) err := service.AllService.AddressBookService.Create(t)
if err != nil { if err != nil {
response.Fail(c, 101, "创建失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, u) response.Success(c, u)
@@ -94,7 +94,7 @@ func (ct *AddressBook) Create(c *gin.Context) {
func (ct *AddressBook) List(c *gin.Context) { func (ct *AddressBook) List(c *gin.Context) {
query := &admin.AddressBookQuery{} query := &admin.AddressBookQuery{}
if err := c.ShouldBindQuery(query); err != nil { if err := c.ShouldBindQuery(query); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
@@ -123,27 +123,27 @@ func (ct *AddressBook) List(c *gin.Context) {
func (ct *AddressBook) Update(c *gin.Context) { func (ct *AddressBook) Update(c *gin.Context) {
f := &admin.AddressBookForm{} f := &admin.AddressBookForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
} }
if f.RowId == 0 { if f.RowId == 0 {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
return return
} }
t := f.ToAddressBook() t := f.ToAddressBook()
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id { if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id {
response.Fail(c, 101, "无权限") response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
return return
} }
err := service.AllService.AddressBookService.Update(t) err := service.AllService.AddressBookService.Update(t)
if err != nil { if err != nil {
response.Fail(c, 101, "更新失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, nil) response.Success(c, nil)
@@ -163,11 +163,11 @@ func (ct *AddressBook) Update(c *gin.Context) {
func (ct *AddressBook) Delete(c *gin.Context) { func (ct *AddressBook) Delete(c *gin.Context) {
f := &admin.AddressBookForm{} f := &admin.AddressBookForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "系统错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
id := f.RowId id := f.RowId
errList := global.Validator.ValidVar(id, "required,gt=0") errList := global.Validator.ValidVar(c, id, "required,gt=0")
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -175,7 +175,7 @@ func (ct *AddressBook) Delete(c *gin.Context) {
t := service.AllService.AddressBookService.InfoByRowId(f.RowId) t := service.AllService.AddressBookService.InfoByRowId(f.RowId)
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id { if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id {
response.Fail(c, 101, "无权限") response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
return return
} }
if u.Id > 0 { if u.Id > 0 {
@@ -184,8 +184,8 @@ func (ct *AddressBook) Delete(c *gin.Context) {
response.Success(c, nil) response.Success(c, nil)
return return
} }
response.Fail(c, 101, err.Error()) response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
} }

View File

@@ -31,7 +31,7 @@ func (ct *Group) Detail(c *gin.Context) {
response.Success(c, u) response.Success(c, u)
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
@@ -49,10 +49,10 @@ func (ct *Group) Detail(c *gin.Context) {
func (ct *Group) Create(c *gin.Context) { func (ct *Group) Create(c *gin.Context) {
f := &admin.GroupForm{} f := &admin.GroupForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -60,7 +60,7 @@ func (ct *Group) Create(c *gin.Context) {
u := f.ToGroup() u := f.ToGroup()
err := service.AllService.GroupService.Create(u) err := service.AllService.GroupService.Create(u)
if err != nil { if err != nil {
response.Fail(c, 101, "创建失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, u) response.Success(c, u)
@@ -81,7 +81,7 @@ func (ct *Group) Create(c *gin.Context) {
func (ct *Group) List(c *gin.Context) { func (ct *Group) List(c *gin.Context) {
query := &admin.PageQuery{} query := &admin.PageQuery{}
if err := c.ShouldBindQuery(query); err != nil { if err := c.ShouldBindQuery(query); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
res := service.AllService.GroupService.List(query.Page, query.PageSize, nil) res := service.AllService.GroupService.List(query.Page, query.PageSize, nil)
@@ -102,14 +102,14 @@ func (ct *Group) List(c *gin.Context) {
func (ct *Group) Update(c *gin.Context) { func (ct *Group) Update(c *gin.Context) {
f := &admin.GroupForm{} f := &admin.GroupForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
if f.Id == 0 { if f.Id == 0 {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -117,7 +117,7 @@ func (ct *Group) Update(c *gin.Context) {
u := f.ToGroup() u := f.ToGroup()
err := service.AllService.GroupService.Update(u) err := service.AllService.GroupService.Update(u)
if err != nil { if err != nil {
response.Fail(c, 101, "更新失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, nil) response.Success(c, nil)
@@ -137,11 +137,11 @@ func (ct *Group) Update(c *gin.Context) {
func (ct *Group) Delete(c *gin.Context) { func (ct *Group) Delete(c *gin.Context) {
f := &admin.GroupForm{} f := &admin.GroupForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "系统错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
id := f.Id id := f.Id
errList := global.Validator.ValidVar(id, "required,gt=0") errList := global.Validator.ValidVar(c, id, "required,gt=0")
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -153,8 +153,8 @@ func (ct *Group) Delete(c *gin.Context) {
response.Success(c, nil) response.Success(c, nil)
return return
} }
response.Fail(c, 101, err.Error()) response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
} }

View File

@@ -28,11 +28,11 @@ func (ct *Login) Login(c *gin.Context) {
f := &admin.Login{} f := &admin.Login{}
err := c.ShouldBindJSON(f) err := c.ShouldBindJSON(f)
if err != nil { if err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -40,7 +40,7 @@ func (ct *Login) Login(c *gin.Context) {
u := service.AllService.UserService.InfoByUsernamePassword(f.Username, f.Password) u := service.AllService.UserService.InfoByUsernamePassword(f.Username, f.Password)
if u.Id == 0 { if u.Id == 0 {
response.Fail(c, 101, "用户名或密码错误") response.Fail(c, 101, response.TranslateMsg(c, "UsernameOrPasswordError"))
return return
} }

View File

@@ -33,7 +33,7 @@ func (ct *LoginLog) Detail(c *gin.Context) {
response.Success(c, u) response.Success(c, u)
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
@@ -53,7 +53,7 @@ func (ct *LoginLog) Detail(c *gin.Context) {
func (ct *LoginLog) List(c *gin.Context) { func (ct *LoginLog) List(c *gin.Context) {
query := &admin.LoginLogQuery{} query := &admin.LoginLogQuery{}
if err := c.ShouldBindQuery(query); err != nil { if err := c.ShouldBindQuery(query); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
@@ -82,11 +82,11 @@ func (ct *LoginLog) List(c *gin.Context) {
func (ct *LoginLog) Delete(c *gin.Context) { func (ct *LoginLog) Delete(c *gin.Context) {
f := &model.LoginLog{} f := &model.LoginLog{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "系统错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
id := f.Id id := f.Id
errList := global.Validator.ValidVar(id, "required,gt=0") errList := global.Validator.ValidVar(c, id, "required,gt=0")
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -94,7 +94,7 @@ func (ct *LoginLog) Delete(c *gin.Context) {
l := service.AllService.LoginLogService.InfoById(f.Id) l := service.AllService.LoginLogService.InfoById(f.Id)
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
if !service.AllService.UserService.IsAdmin(u) && l.UserId != u.Id { if !service.AllService.UserService.IsAdmin(u) && l.UserId != u.Id {
response.Fail(c, 101, "无权限") response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
return return
} }
if l.Id > 0 { if l.Id > 0 {
@@ -106,5 +106,5 @@ func (ct *LoginLog) Delete(c *gin.Context) {
response.Fail(c, 101, err.Error()) response.Fail(c, 101, err.Error())
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
} }

View File

@@ -18,12 +18,12 @@ type Oauth struct {
func (o *Oauth) Info(c *gin.Context) { func (o *Oauth) Info(c *gin.Context) {
code := c.Query("code") code := c.Query("code")
if code == "" { if code == "" {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
return return
} }
v := service.AllService.OauthService.GetOauthCache(code) v := service.AllService.OauthService.GetOauthCache(code)
if v == nil { if v == nil {
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
response.Success(c, v) response.Success(c, v)
@@ -33,20 +33,20 @@ func (o *Oauth) ToBind(c *gin.Context) {
f := &adminReq.BindOauthForm{} f := &adminReq.BindOauthForm{}
err := c.ShouldBindJSON(f) err := c.ShouldBindJSON(f)
if err != nil { if err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
utr := service.AllService.UserService.UserThirdInfo(u.Id, f.Op) utr := service.AllService.UserService.UserThirdInfo(u.Id, f.Op)
if utr.Id > 0 { if utr.Id > 0 {
response.Fail(c, 101, "已绑定过了") response.Fail(c, 101, response.TranslateMsg(c, "OauthHasBindOtherUser"))
return return
} }
err, code, url := service.AllService.OauthService.BeginAuth(f.Op) err, code, url := service.AllService.OauthService.BeginAuth(f.Op)
if err != nil { if err != nil {
response.Error(c, err.Error()) response.Error(c, response.TranslateMsg(c, err.Error()))
return return
} }
@@ -89,22 +89,22 @@ func (o *Oauth) BindConfirm(c *gin.Context) {
j := &adminReq.OauthConfirmForm{} j := &adminReq.OauthConfirmForm{}
err := c.ShouldBindJSON(j) err := c.ShouldBindJSON(j)
if err != nil { if err != nil {
response.Fail(c, 101, "参数错误"+err.Error()) response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
if j.Code == "" { if j.Code == "" {
response.Fail(c, 101, "参数错误: code 不存在") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
return return
} }
v := service.AllService.OauthService.GetOauthCache(j.Code) v := service.AllService.OauthService.GetOauthCache(j.Code)
if v == nil { if v == nil {
response.Fail(c, 101, "授权已过期") response.Fail(c, 101, response.TranslateMsg(c, "OauthExpired"))
return return
} }
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
err = service.AllService.OauthService.BindGithubUser(v.ThirdOpenId, v.ThirdOpenId, u.Id) err = service.AllService.OauthService.BindGithubUser(v.ThirdOpenId, v.ThirdOpenId, u.Id)
if err != nil { if err != nil {
response.Fail(c, 101, "绑定失败,请重试") response.Fail(c, 101, response.TranslateMsg(c, "BindFail"))
return return
} }
@@ -117,22 +117,30 @@ func (o *Oauth) Unbind(c *gin.Context) {
f := &adminReq.UnBindOauthForm{} f := &adminReq.UnBindOauthForm{}
err := c.ShouldBindJSON(f) err := c.ShouldBindJSON(f)
if err != nil { if err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
utr := service.AllService.UserService.UserThirdInfo(u.Id, f.Op) utr := service.AllService.UserService.UserThirdInfo(u.Id, f.Op)
if utr.Id == 0 { if utr.Id == 0 {
response.Fail(c, 101, "未绑定") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
if f.Op == model.OauthTypeGithub { if f.Op == model.OauthTypeGithub {
err = service.AllService.OauthService.UnBindGithubUser(u.Id) err = service.AllService.OauthService.UnBindGithubUser(u.Id)
if err != nil { if err != nil {
response.Fail(c, 101, "解绑失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
} }
if f.Op == model.OauthTypeGoogle {
err = service.AllService.OauthService.UnBindGoogleUser(u.Id)
if err != nil {
response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return
}
}
response.Success(c, nil) response.Success(c, nil)
} }
@@ -155,7 +163,7 @@ func (o *Oauth) Detail(c *gin.Context) {
response.Success(c, u) response.Success(c, u)
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
@@ -173,10 +181,10 @@ func (o *Oauth) Detail(c *gin.Context) {
func (o *Oauth) Create(c *gin.Context) { func (o *Oauth) Create(c *gin.Context) {
f := &admin.OauthForm{} f := &admin.OauthForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误"+err.Error()) response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -184,14 +192,14 @@ func (o *Oauth) Create(c *gin.Context) {
ex := service.AllService.OauthService.InfoByOp(f.Op) ex := service.AllService.OauthService.InfoByOp(f.Op)
if ex.Id > 0 { if ex.Id > 0 {
response.Fail(c, 101, "已存在"+f.Op) response.Fail(c, 101, response.TranslateMsg(c, "ItemExists"))
return return
} }
u := f.ToOauth() u := f.ToOauth()
err := service.AllService.OauthService.Create(u) err := service.AllService.OauthService.Create(u)
if err != nil { if err != nil {
response.Fail(c, 101, "创建失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, u) response.Success(c, u)
@@ -212,7 +220,7 @@ func (o *Oauth) Create(c *gin.Context) {
func (o *Oauth) List(c *gin.Context) { func (o *Oauth) List(c *gin.Context) {
query := &admin.PageQuery{} query := &admin.PageQuery{}
if err := c.ShouldBindQuery(query); err != nil { if err := c.ShouldBindQuery(query); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
res := service.AllService.OauthService.List(query.Page, query.PageSize, nil) res := service.AllService.OauthService.List(query.Page, query.PageSize, nil)
@@ -233,14 +241,14 @@ func (o *Oauth) List(c *gin.Context) {
func (o *Oauth) Update(c *gin.Context) { func (o *Oauth) Update(c *gin.Context) {
f := &admin.OauthForm{} f := &admin.OauthForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
if f.Id == 0 { if f.Id == 0 {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -248,7 +256,7 @@ func (o *Oauth) Update(c *gin.Context) {
u := f.ToOauth() u := f.ToOauth()
err := service.AllService.OauthService.Update(u) err := service.AllService.OauthService.Update(u)
if err != nil { if err != nil {
response.Fail(c, 101, "更新失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, nil) response.Success(c, nil)
@@ -268,11 +276,11 @@ func (o *Oauth) Update(c *gin.Context) {
func (o *Oauth) Delete(c *gin.Context) { func (o *Oauth) Delete(c *gin.Context) {
f := &admin.OauthForm{} f := &admin.OauthForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "系统错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
id := f.Id id := f.Id
errList := global.Validator.ValidVar(id, "required,gt=0") errList := global.Validator.ValidVar(c, id, "required,gt=0")
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -287,5 +295,5 @@ func (o *Oauth) Delete(c *gin.Context) {
response.Fail(c, 101, err.Error()) response.Fail(c, 101, err.Error())
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
} }

View File

@@ -31,7 +31,7 @@ func (ct *Peer) Detail(c *gin.Context) {
response.Success(c, u) response.Success(c, u)
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
@@ -49,10 +49,10 @@ func (ct *Peer) Detail(c *gin.Context) {
func (ct *Peer) Create(c *gin.Context) { func (ct *Peer) Create(c *gin.Context) {
f := &admin.PeerForm{} f := &admin.PeerForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -60,7 +60,7 @@ func (ct *Peer) Create(c *gin.Context) {
u := f.ToPeer() u := f.ToPeer()
err := service.AllService.PeerService.Create(u) err := service.AllService.PeerService.Create(u)
if err != nil { if err != nil {
response.Fail(c, 101, "创建失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, u) response.Success(c, u)
@@ -81,7 +81,7 @@ func (ct *Peer) Create(c *gin.Context) {
func (ct *Peer) List(c *gin.Context) { func (ct *Peer) List(c *gin.Context) {
query := &admin.PageQuery{} query := &admin.PageQuery{}
if err := c.ShouldBindQuery(query); err != nil { if err := c.ShouldBindQuery(query); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
res := service.AllService.PeerService.List(query.Page, query.PageSize, nil) res := service.AllService.PeerService.List(query.Page, query.PageSize, nil)
@@ -102,14 +102,14 @@ func (ct *Peer) List(c *gin.Context) {
func (ct *Peer) Update(c *gin.Context) { func (ct *Peer) Update(c *gin.Context) {
f := &admin.PeerForm{} f := &admin.PeerForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
if f.RowId == 0 { if f.RowId == 0 {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -117,7 +117,7 @@ func (ct *Peer) Update(c *gin.Context) {
u := f.ToPeer() u := f.ToPeer()
err := service.AllService.PeerService.Update(u) err := service.AllService.PeerService.Update(u)
if err != nil { if err != nil {
response.Fail(c, 101, "更新失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, nil) response.Success(c, nil)
@@ -137,11 +137,11 @@ func (ct *Peer) Update(c *gin.Context) {
func (ct *Peer) Delete(c *gin.Context) { func (ct *Peer) Delete(c *gin.Context) {
f := &admin.PeerForm{} f := &admin.PeerForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "系统错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
id := f.RowId id := f.RowId
errList := global.Validator.ValidVar(id, "required,gt=0") errList := global.Validator.ValidVar(c, id, "required,gt=0")
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -153,8 +153,8 @@ func (ct *Peer) Delete(c *gin.Context) {
response.Success(c, nil) response.Success(c, nil)
return return
} }
response.Fail(c, 101, err.Error()) response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
} }

View File

@@ -30,14 +30,14 @@ func (ct *Tag) Detail(c *gin.Context) {
t := service.AllService.TagService.InfoById(uint(iid)) t := service.AllService.TagService.InfoById(uint(iid))
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id { if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id {
response.Fail(c, 101, "无权限") response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
return return
} }
if t.Id > 0 { if t.Id > 0 {
response.Success(c, t) response.Success(c, t)
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
@@ -55,10 +55,10 @@ func (ct *Tag) Detail(c *gin.Context) {
func (ct *Tag) Create(c *gin.Context) { func (ct *Tag) Create(c *gin.Context) {
f := &admin.TagForm{} f := &admin.TagForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -70,7 +70,7 @@ func (ct *Tag) Create(c *gin.Context) {
} }
err := service.AllService.TagService.Create(t) err := service.AllService.TagService.Create(t)
if err != nil { if err != nil {
response.Fail(c, 101, "创建失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, u) response.Success(c, u)
@@ -93,7 +93,7 @@ func (ct *Tag) Create(c *gin.Context) {
func (ct *Tag) List(c *gin.Context) { func (ct *Tag) List(c *gin.Context) {
query := &admin.TagQuery{} query := &admin.TagQuery{}
if err := c.ShouldBindQuery(query); err != nil { if err := c.ShouldBindQuery(query); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
@@ -122,27 +122,27 @@ func (ct *Tag) List(c *gin.Context) {
func (ct *Tag) Update(c *gin.Context) { func (ct *Tag) Update(c *gin.Context) {
f := &admin.TagForm{} f := &admin.TagForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
} }
if f.Id == 0 { if f.Id == 0 {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
return return
} }
t := f.ToTag() t := f.ToTag()
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id { if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id {
response.Fail(c, 101, "无权限") response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
return return
} }
err := service.AllService.TagService.Update(t) err := service.AllService.TagService.Update(t)
if err != nil { if err != nil {
response.Fail(c, 101, "更新失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, nil) response.Success(c, nil)
@@ -162,11 +162,11 @@ func (ct *Tag) Update(c *gin.Context) {
func (ct *Tag) Delete(c *gin.Context) { func (ct *Tag) Delete(c *gin.Context) {
f := &admin.TagForm{} f := &admin.TagForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "系统错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
id := f.Id id := f.Id
errList := global.Validator.ValidVar(id, "required,gt=0") errList := global.Validator.ValidVar(c, id, "required,gt=0")
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -174,7 +174,7 @@ func (ct *Tag) Delete(c *gin.Context) {
t := service.AllService.TagService.InfoById(f.Id) t := service.AllService.TagService.InfoById(f.Id)
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id { if !service.AllService.UserService.IsAdmin(u) && t.UserId != u.Id {
response.Fail(c, 101, "无权限") response.Fail(c, 101, response.TranslateMsg(c, "NoAccess"))
return return
} }
if u.Id > 0 { if u.Id > 0 {
@@ -186,5 +186,5 @@ func (ct *Tag) Delete(c *gin.Context) {
response.Fail(c, 101, err.Error()) response.Fail(c, 101, err.Error())
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
} }

View File

@@ -33,7 +33,7 @@ func (ct *User) Detail(c *gin.Context) {
response.Success(c, u) response.Success(c, u)
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
@@ -51,10 +51,10 @@ func (ct *User) Detail(c *gin.Context) {
func (ct *User) Create(c *gin.Context) { func (ct *User) Create(c *gin.Context) {
f := &admin.UserForm{} f := &admin.UserForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -62,7 +62,7 @@ func (ct *User) Create(c *gin.Context) {
u := f.ToUser() u := f.ToUser()
err := service.AllService.UserService.Create(u) err := service.AllService.UserService.Create(u)
if err != nil { if err != nil {
response.Fail(c, 101, "创建失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, u) response.Success(c, u)
@@ -84,7 +84,7 @@ func (ct *User) Create(c *gin.Context) {
func (ct *User) List(c *gin.Context) { func (ct *User) List(c *gin.Context) {
query := &admin.UserQuery{} query := &admin.UserQuery{}
if err := c.ShouldBindQuery(query); err != nil { if err := c.ShouldBindQuery(query); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
res := service.AllService.UserService.List(query.Page, query.PageSize, func(tx *gorm.DB) { res := service.AllService.UserService.List(query.Page, query.PageSize, func(tx *gorm.DB) {
@@ -109,14 +109,14 @@ func (ct *User) List(c *gin.Context) {
func (ct *User) Update(c *gin.Context) { func (ct *User) Update(c *gin.Context) {
f := &admin.UserForm{} f := &admin.UserForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误:"+err.Error()) response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
if f.Id == 0 { if f.Id == 0 {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -124,7 +124,7 @@ func (ct *User) Update(c *gin.Context) {
u := f.ToUser() u := f.ToUser()
err := service.AllService.UserService.Update(u) err := service.AllService.UserService.Update(u)
if err != nil { if err != nil {
response.Fail(c, 101, "更新失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, nil) response.Success(c, nil)
@@ -144,11 +144,11 @@ func (ct *User) Update(c *gin.Context) {
func (ct *User) Delete(c *gin.Context) { func (ct *User) Delete(c *gin.Context) {
f := &admin.UserForm{} f := &admin.UserForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "系统错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
id := f.Id id := f.Id
errList := global.Validator.ValidVar(id, "required,gt=0") errList := global.Validator.ValidVar(c, id, "required,gt=0")
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -163,7 +163,7 @@ func (ct *User) Delete(c *gin.Context) {
response.Fail(c, 101, err.Error()) response.Fail(c, 101, err.Error())
return return
} }
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
} }
// UpdatePassword 修改密码 // UpdatePassword 修改密码
@@ -180,22 +180,22 @@ func (ct *User) Delete(c *gin.Context) {
func (ct *User) UpdatePassword(c *gin.Context) { func (ct *User) UpdatePassword(c *gin.Context) {
f := &admin.UserPasswordForm{} f := &admin.UserPasswordForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
} }
u := service.AllService.UserService.InfoById(f.Id) u := service.AllService.UserService.InfoById(f.Id)
if u.Id == 0 { if u.Id == 0 {
response.Fail(c, 101, "信息不存在") response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
err := service.AllService.UserService.UpdatePassword(u, f.Password) err := service.AllService.UserService.UpdatePassword(u, f.Password)
if err != nil { if err != nil {
response.Fail(c, 101, "更新失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, nil) response.Success(c, nil)
@@ -237,11 +237,11 @@ func (ct *User) Current(c *gin.Context) {
func (ct *User) ChangeCurPwd(c *gin.Context) { func (ct *User) ChangeCurPwd(c *gin.Context) {
f := &admin.ChangeCurPasswordForm{} f := &admin.ChangeCurPasswordForm{}
if err := c.ShouldBindJSON(f); err != nil { if err := c.ShouldBindJSON(f); err != nil {
response.Fail(c, 101, "参数错误") response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Fail(c, 101, errList[0]) response.Fail(c, 101, errList[0])
return return
@@ -249,12 +249,12 @@ func (ct *User) ChangeCurPwd(c *gin.Context) {
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
oldPwd := service.AllService.UserService.EncryptPassword(f.OldPassword) oldPwd := service.AllService.UserService.EncryptPassword(f.OldPassword)
if u.Password != oldPwd { if u.Password != oldPwd {
response.Fail(c, 101, "旧密码错误") response.Fail(c, 101, response.TranslateMsg(c, "OldPasswordError"))
return return
} }
err := service.AllService.UserService.UpdatePassword(u, f.NewPassword) err := service.AllService.UserService.UpdatePassword(u, f.NewPassword)
if err != nil { if err != nil {
response.Fail(c, 101, "更新失败") response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
response.Success(c, nil) response.Success(c, nil)

View File

@@ -68,37 +68,30 @@ func (a *Ab) UpAb(c *gin.Context) {
abf := &requstform.AddressBookForm{} abf := &requstform.AddressBookForm{}
err := c.ShouldBindJSON(&abf) err := c.ShouldBindJSON(&abf)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
abd := &requstform.AddressBookFormData{} abd := &requstform.AddressBookFormData{}
err = json.Unmarshal([]byte(abf.Data), abd) err = json.Unmarshal([]byte(abf.Data), abd)
if err != nil { if err != nil {
response.Error(c, "系统错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return
}
tc := map[string]uint{}
err = json.Unmarshal([]byte(abd.TagColors), &tc)
if err != nil {
response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
//fmt.Println(abd)
//for _, peer := range abd.Peers {
// fmt.Println(peer)
//}
user := service.AllService.UserService.CurUser(c) user := service.AllService.UserService.CurUser(c)
err = service.AllService.AddressBookService.UpdateAddressBook(abd.Peers, user.Id) err = service.AllService.AddressBookService.UpdateAddressBook(abd.Peers, user.Id)
if err != nil { if err != nil {
c.Abort() response.Error(c, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
tc := map[string]uint{} service.AllService.TagService.UpdateTags(user.Id, tc)
err = json.Unmarshal([]byte(abd.TagColors), &tc)
if err != nil {
response.Error(c, "系统错误")
return
} else {
service.AllService.TagService.UpdateTags(user.Id, tc)
}
c.JSON(http.StatusOK, nil) c.JSON(http.StatusOK, nil)
} }
@@ -134,19 +127,19 @@ func (a *Ab) TagAdd(c *gin.Context) {
t := &model.Tag{} t := &model.Tag{}
err := c.ShouldBindJSON(t) err := c.ShouldBindJSON(t)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
tag := service.AllService.TagService.InfoByUserIdAndName(u.Id, t.Name) tag := service.AllService.TagService.InfoByUserIdAndName(u.Id, t.Name)
if tag != nil && tag.Id != 0 { if tag != nil && tag.Id != 0 {
response.Error(c, "已存在") response.Error(c, response.TranslateMsg(c, "ItemExists"))
return return
} }
t.UserId = u.Id t.UserId = u.Id
err = service.AllService.TagService.Create(t) err = service.AllService.TagService.Create(t)
if err != nil { if err != nil {
response.Error(c, "操作失败") response.Error(c, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
c.String(http.StatusOK, "") c.String(http.StatusOK, "")
@@ -166,24 +159,24 @@ func (a *Ab) TagRename(c *gin.Context) {
t := &requstform.TagRenameForm{} t := &requstform.TagRenameForm{}
err := c.ShouldBindJSON(t) err := c.ShouldBindJSON(t)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
tag := service.AllService.TagService.InfoByUserIdAndName(u.Id, t.Old) tag := service.AllService.TagService.InfoByUserIdAndName(u.Id, t.Old)
if tag == nil || tag.Id == 0 { if tag == nil || tag.Id == 0 {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
ntag := service.AllService.TagService.InfoByUserIdAndName(u.Id, t.New) ntag := service.AllService.TagService.InfoByUserIdAndName(u.Id, t.New)
if ntag != nil && ntag.Id != 0 { if ntag != nil && ntag.Id != 0 {
response.Error(c, "已存在") response.Error(c, response.TranslateMsg(c, "ItemExists"))
return return
} }
tag.Name = t.New tag.Name = t.New
err = service.AllService.TagService.Update(tag) err = service.AllService.TagService.Update(tag)
if err != nil { if err != nil {
response.Error(c, "操作失败") response.Error(c, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
c.String(http.StatusOK, "") c.String(http.StatusOK, "")
@@ -203,19 +196,19 @@ func (a *Ab) TagUpdate(c *gin.Context) {
t := &requstform.TagColorForm{} t := &requstform.TagColorForm{}
err := c.ShouldBindJSON(t) err := c.ShouldBindJSON(t)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
tag := service.AllService.TagService.InfoByUserIdAndName(u.Id, t.Name) tag := service.AllService.TagService.InfoByUserIdAndName(u.Id, t.Name)
if tag == nil || tag.Id == 0 { if tag == nil || tag.Id == 0 {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
tag.Color = t.Color tag.Color = t.Color
err = service.AllService.TagService.Update(tag) err = service.AllService.TagService.Update(tag)
if err != nil { if err != nil {
response.Error(c, "操作失败") response.Error(c, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
c.String(http.StatusOK, "") c.String(http.StatusOK, "")
@@ -235,7 +228,7 @@ func (a *Ab) TagDel(c *gin.Context) {
t := &[]string{} t := &[]string{}
err := c.ShouldBind(t) err := c.ShouldBind(t)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
//fmt.Println(t) //fmt.Println(t)
@@ -243,12 +236,12 @@ func (a *Ab) TagDel(c *gin.Context) {
for _, name := range *t { for _, name := range *t {
tag := service.AllService.TagService.InfoByUserIdAndName(u.Id, name) tag := service.AllService.TagService.InfoByUserIdAndName(u.Id, name)
if tag == nil || tag.Id == 0 { if tag == nil || tag.Id == 0 {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
err = service.AllService.TagService.Delete(tag) err = service.AllService.TagService.Delete(tag)
if err != nil { if err != nil {
response.Error(c, "操作失败") response.Error(c, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
} }
@@ -406,7 +399,7 @@ func (a *Ab) PeerAdd(c *gin.Context) {
f := &requstform.PersonalAddressBookForm{} f := &requstform.PersonalAddressBookForm{}
err := c.ShouldBindJSON(f) err := c.ShouldBindJSON(f)
if err != nil { if err != nil {
response.Error(c, "参数错误"+err.Error()) response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
fmt.Println(f) fmt.Println(f)
@@ -415,7 +408,7 @@ func (a *Ab) PeerAdd(c *gin.Context) {
ab := f.ToAddressBook() ab := f.ToAddressBook()
err = service.AllService.AddressBookService.AddAddressBook(ab) err = service.AllService.AddressBookService.AddAddressBook(ab)
if err != nil { if err != nil {
response.Error(c, "操作失败") response.Error(c, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
c.String(http.StatusOK, "") c.String(http.StatusOK, "")
@@ -436,19 +429,19 @@ func (a *Ab) PeerDel(c *gin.Context) {
f := &[]string{} f := &[]string{}
err := c.ShouldBind(f) err := c.ShouldBind(f)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
for _, id := range *f { for _, id := range *f {
ab := service.AllService.AddressBookService.InfoByUserIdAndId(u.Id, id) ab := service.AllService.AddressBookService.InfoByUserIdAndId(u.Id, id)
if ab == nil || ab.RowId == 0 { if ab == nil || ab.RowId == 0 {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
err = service.AllService.AddressBookService.Delete(ab) err = service.AllService.AddressBookService.Delete(ab)
if err != nil { if err != nil {
response.Error(c, "操作失败") response.Error(c, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
} }
@@ -472,22 +465,22 @@ func (a *Ab) PeerUpdate(c *gin.Context) {
f := &requstform.PersonalAddressBookForm{} f := &requstform.PersonalAddressBookForm{}
err := c.ShouldBindJSON(f) err := c.ShouldBindJSON(f)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
fmt.Println(f) //fmt.Println(f)
//return //return
u := service.AllService.UserService.CurUser(c) u := service.AllService.UserService.CurUser(c)
ab := service.AllService.AddressBookService.InfoByUserIdAndId(u.Id, f.Id) ab := service.AllService.AddressBookService.InfoByUserIdAndId(u.Id, f.Id)
if ab == nil || ab.RowId == 0 { if ab == nil || ab.RowId == 0 {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
nab := f.ToAddressBook() nab := f.ToAddressBook()
nab.RowId = ab.RowId nab.RowId = ab.RowId
err = service.AllService.AddressBookService.Update(nab) err = service.AllService.AddressBookService.Update(nab)
if err != nil { if err != nil {
response.Error(c, "操作失败") response.Error(c, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
c.String(http.StatusOK, "") c.String(http.StatusOK, "")

View File

@@ -33,7 +33,7 @@ func (g *Group) Users(c *gin.Context) {
if !*u.IsAdmin { if !*u.IsAdmin {
gr := service.AllService.GroupService.InfoById(u.GroupId) gr := service.AllService.GroupService.InfoById(u.GroupId)
if gr.Type != model.GroupTypeShare { if gr.Type != model.GroupTypeShare {
response.Error(c, "不是管理员也不在分享组") response.Error(c, response.TranslateMsg(c, "NoAccess"))
return return
} }
} }
@@ -77,7 +77,7 @@ func (g *Group) Peers(c *gin.Context) {
if !*u.IsAdmin { if !*u.IsAdmin {
gr := service.AllService.GroupService.InfoById(u.GroupId) gr := service.AllService.GroupService.InfoById(u.GroupId)
if gr.Type != model.GroupTypeShare { if gr.Type != model.GroupTypeShare {
response.Error(c, "不是管理员也不在分享组") response.Error(c, response.TranslateMsg(c, "NoAccess"))
return return
} }
} }

View File

@@ -37,7 +37,7 @@ func (i *Index) Index(c *gin.Context) {
func (i *Index) Heartbeat(c *gin.Context) { func (i *Index) Heartbeat(c *gin.Context) {
//b := &gin.H{} //b := &gin.H{}
//err := c.BindJSON(b) //err := c.BindJSON(b)
//body : &map[id:ljwzhuwo modified_at:0 uuid:NGIxZTZjM2YtNmNkMy00YTMwLWFiNjQtMzQ0MTA0NGE5ZDgz ver:1.003e+06] //body : &map[id:xxx modified_at:0 uuid:NGIxZTZjM2YtNmNkMy00YTMwLWFiNjQtMzQ0MTA0NGE5ZDgz ver:1.003e+06]
//fmt.Println(b, err, c.Request.Header) //fmt.Println(b, err, c.Request.Header)
//header : map[Accept:[*/*] Accept-Encoding:[gzip] Content-Length:[105] Content-Type:[application/json]] //header : map[Accept:[*/*] Accept-Encoding:[gzip] Content-Length:[105] Content-Type:[application/json]]
c.JSON(http.StatusOK, gin.H{}) c.JSON(http.StatusOK, gin.H{})

View File

@@ -30,11 +30,11 @@ func (l *Login) Login(c *gin.Context) {
err := c.ShouldBindJSON(f) err := c.ShouldBindJSON(f)
//fmt.Println(f) //fmt.Println(f)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
errList := global.Validator.ValidStruct(f) errList := global.Validator.ValidStruct(c, f)
if len(errList) > 0 { if len(errList) > 0 {
response.Error(c, errList[0]) response.Error(c, errList[0])
return return
@@ -43,7 +43,7 @@ func (l *Login) Login(c *gin.Context) {
u := service.AllService.UserService.InfoByUsernamePassword(f.Username, f.Password) u := service.AllService.UserService.InfoByUsernamePassword(f.Username, f.Password)
if u.Id == 0 { if u.Id == 0 {
response.Error(c, "用户名或密码错误") response.Error(c, response.TranslateMsg(c, "UsernameOrPasswordError"))
return return
} }
@@ -95,7 +95,7 @@ func (l *Login) LoginOptions(c *gin.Context) {
} }
common, err := json.Marshal(oidcItems) common, err := json.Marshal(oidcItems)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "SystemError")+err.Error())
return return
} }
var res []string var res []string

View File

@@ -29,17 +29,17 @@ func (o *Oauth) OidcAuth(c *gin.Context) {
f := &api.OidcAuthRequest{} f := &api.OidcAuthRequest{}
err := c.ShouldBindJSON(&f) err := c.ShouldBindJSON(&f)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
if f.Op != model.OauthTypeWebauth && f.Op != model.OauthTypeGoogle && f.Op != model.OauthTypeGithub { if f.Op != model.OauthTypeWebauth && f.Op != model.OauthTypeGoogle && f.Op != model.OauthTypeGithub {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError"))
return return
} }
err, code, url := service.AllService.OauthService.BeginAuth(f.Op) err, code, url := service.AllService.OauthService.BeginAuth(f.Op)
if err != nil { if err != nil {
response.Error(c, err.Error()) response.Error(c, response.TranslateMsg(c, err.Error()))
return return
} }
@@ -72,12 +72,12 @@ func (o *Oauth) OidcAuthQuery(c *gin.Context) {
q := &api.OidcAuthQuery{} q := &api.OidcAuthQuery{}
err := c.ShouldBindQuery(q) err := c.ShouldBindQuery(q)
if err != nil { if err != nil {
response.Error(c, "参数错误") response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
v := service.AllService.OauthService.GetOauthCache(q.Code) v := service.AllService.OauthService.GetOauthCache(q.Code)
if v == nil { if v == nil {
response.Error(c, "授权已过期,请重新授权") response.Error(c, response.TranslateMsg(c, "OauthExpired"))
return return
} }
if v.UserId == 0 { if v.UserId == 0 {
@@ -87,24 +87,20 @@ func (o *Oauth) OidcAuthQuery(c *gin.Context) {
} }
u := service.AllService.UserService.InfoById(v.UserId) u := service.AllService.UserService.InfoById(v.UserId)
//fmt.Println("auth success u", u) //fmt.Println("auth success u", u)
if u.Id > 0 { service.AllService.OauthService.DeleteOauthCache(q.Code)
service.AllService.OauthService.DeleteOauthCache(q.Code) ut := service.AllService.UserService.Login(u, &model.LoginLog{
ut := service.AllService.UserService.Login(u, &model.LoginLog{ UserId: u.Id,
UserId: u.Id, Client: v.DeviceType,
Client: v.DeviceType, Uuid: v.Uuid,
Uuid: v.Uuid, Ip: c.ClientIP(),
Ip: c.ClientIP(), Type: model.LoginLogTypeOauth,
Type: model.LoginLogTypeOauth, Platform: v.DeviceOs,
Platform: v.DeviceOs, })
}) c.JSON(http.StatusOK, apiResp.LoginRes{
c.JSON(http.StatusOK, apiResp.LoginRes{ AccessToken: ut.Token,
AccessToken: ut.Token, Type: "access_token",
Type: "access_token", User: *(&apiResp.UserPayload{}).FromUser(u),
User: *(&apiResp.UserPayload{}).FromUser(u), })
})
return
}
response.Error(c, "用户不存在")
} }
// OauthCallback 回调 // OauthCallback 回调
@@ -119,7 +115,7 @@ func (o *Oauth) OidcAuthQuery(c *gin.Context) {
func (o *Oauth) OauthCallback(c *gin.Context) { func (o *Oauth) OauthCallback(c *gin.Context) {
state := c.Query("state") state := c.Query("state")
if state == "" { if state == "" {
c.String(http.StatusInternalServerError, "state为空") c.String(http.StatusInternalServerError, response.TranslateParamMsg(c, "ParamIsEmpty", "state"))
return return
} }
@@ -127,7 +123,7 @@ func (o *Oauth) OauthCallback(c *gin.Context) {
//从缓存中获取 //从缓存中获取
v := service.AllService.OauthService.GetOauthCache(cacheKey) v := service.AllService.OauthService.GetOauthCache(cacheKey)
if v == nil { if v == nil {
c.String(http.StatusInternalServerError, "授权已过期,请重新授权") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "OauthExpired"))
return return
} }
@@ -138,34 +134,34 @@ func (o *Oauth) OauthCallback(c *gin.Context) {
code := c.Query("code") code := c.Query("code")
err, userData := service.AllService.OauthService.GithubCallback(code) err, userData := service.AllService.OauthService.GithubCallback(code)
if err != nil { if err != nil {
c.String(http.StatusInternalServerError, "授权失败:"+err.Error()) c.String(http.StatusInternalServerError, response.TranslateMsg(c, "OauthFailed")+response.TranslateMsg(c, err.Error()))
return return
} }
if ac == service.OauthActionTypeBind { if ac == service.OauthActionTypeBind {
//fmt.Println("bind", ty, userData) //fmt.Println("bind", ty, userData)
utr := service.AllService.OauthService.UserThirdInfo(ty, strconv.Itoa(userData.Id)) utr := service.AllService.OauthService.UserThirdInfo(ty, strconv.Itoa(userData.Id))
if utr.UserId > 0 { if utr.UserId > 0 {
c.String(http.StatusInternalServerError, "已经绑定其他账号") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "OauthHasBindOtherUser"))
return return
} }
//绑定 //绑定
u := service.AllService.UserService.InfoById(v.UserId) u := service.AllService.UserService.InfoById(v.UserId)
if u == nil { if u == nil {
c.String(http.StatusInternalServerError, "用户不存在") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
//绑定github //绑定github
err = service.AllService.OauthService.BindGithubUser(strconv.Itoa(userData.Id), userData.Login, v.UserId) err = service.AllService.OauthService.BindGithubUser(strconv.Itoa(userData.Id), userData.Login, v.UserId)
if err != nil { if err != nil {
c.String(http.StatusInternalServerError, "绑定失败") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "BindFail"))
return return
} }
c.String(http.StatusOK, "绑定成功") c.String(http.StatusOK, response.TranslateMsg(c, "BindSuccess"))
return return
} else if ac == service.OauthActionTypeLogin { } else if ac == service.OauthActionTypeLogin {
//登录 //登录
if v.UserId != 0 { if v.UserId != 0 {
c.String(http.StatusInternalServerError, "授权已经成功") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "OauthHasBeenSuccess"))
return return
} }
u := service.AllService.UserService.InfoByGithubId(strconv.Itoa(userData.Id)) u := service.AllService.UserService.InfoByGithubId(strconv.Itoa(userData.Id))
@@ -183,19 +179,16 @@ func (o *Oauth) OauthCallback(c *gin.Context) {
//自动注册 //自动注册
u = service.AllService.UserService.RegisterByGithub(userData.Login, strconv.Itoa(userData.Id)) u = service.AllService.UserService.RegisterByGithub(userData.Login, strconv.Itoa(userData.Id))
if u.Id == 0 { if u.Id == 0 {
c.String(http.StatusInternalServerError, "注册失败") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "OauthRegisterFailed"))
return return
} }
} }
v.UserId = u.Id v.UserId = u.Id
service.AllService.OauthService.SetOauthCache(cacheKey, v, 0) service.AllService.OauthService.SetOauthCache(cacheKey, v, 0)
c.String(http.StatusOK, "授权成功") c.String(http.StatusOK, response.TranslateMsg(c, "OauthSuccess"))
return return
} }
//返回js
c.Header("Content-Type", "text/html; charset=utf-8")
c.String(http.StatusOK, "授权错误")
} }
@@ -203,7 +196,7 @@ func (o *Oauth) OauthCallback(c *gin.Context) {
code := c.Query("code") code := c.Query("code")
err, userData := service.AllService.OauthService.GoogleCallback(code) err, userData := service.AllService.OauthService.GoogleCallback(code)
if err != nil { if err != nil {
c.String(http.StatusInternalServerError, "授权失败:"+err.Error()) c.String(http.StatusInternalServerError, response.TranslateMsg(c, "OauthFailed")+response.TranslateMsg(c, err.Error()))
return return
} }
//将空格替换成_ //将空格替换成_
@@ -212,26 +205,26 @@ func (o *Oauth) OauthCallback(c *gin.Context) {
//fmt.Println("bind", ty, userData) //fmt.Println("bind", ty, userData)
utr := service.AllService.OauthService.UserThirdInfo(ty, userData.Email) utr := service.AllService.OauthService.UserThirdInfo(ty, userData.Email)
if utr.UserId > 0 { if utr.UserId > 0 {
c.String(http.StatusInternalServerError, "已经绑定其他账号") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "OauthHasBindOtherUser"))
return return
} }
//绑定 //绑定
u := service.AllService.UserService.InfoById(v.UserId) u := service.AllService.UserService.InfoById(v.UserId)
if u == nil { if u == nil {
c.String(http.StatusInternalServerError, "用户不存在") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "ItemNotFound"))
return return
} }
//绑定 //绑定
err = service.AllService.OauthService.BindGoogleUser(userData.Email, googleName, v.UserId) err = service.AllService.OauthService.BindGoogleUser(userData.Email, googleName, v.UserId)
if err != nil { if err != nil {
c.String(http.StatusInternalServerError, "绑定失败") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "BindFail"))
return return
} }
c.String(http.StatusOK, "绑定成功") c.String(http.StatusOK, response.TranslateMsg(c, "BindSuccess"))
return return
} else if ac == service.OauthActionTypeLogin { } else if ac == service.OauthActionTypeLogin {
if v.UserId != 0 { if v.UserId != 0 {
c.String(http.StatusInternalServerError, "授权已经成功") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "OauthHasBeenSuccess"))
return return
} }
u := service.AllService.UserService.InfoByGoogleEmail(userData.Email) u := service.AllService.UserService.InfoByGoogleEmail(userData.Email)
@@ -250,17 +243,17 @@ func (o *Oauth) OauthCallback(c *gin.Context) {
//自动注册 //自动注册
u = service.AllService.UserService.RegisterByGoogle(googleName, userData.Email) u = service.AllService.UserService.RegisterByGoogle(googleName, userData.Email)
if u.Id == 0 { if u.Id == 0 {
c.String(http.StatusInternalServerError, "注册失败") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "OauthRegisterFailed"))
return return
} }
} }
v.UserId = u.Id v.UserId = u.Id
service.AllService.OauthService.SetOauthCache(cacheKey, v, 0) service.AllService.OauthService.SetOauthCache(cacheKey, v, 0)
c.String(http.StatusOK, "授权成功") c.String(http.StatusOK, response.TranslateMsg(c, "OauthSuccess"))
return return
} }
} }
c.String(http.StatusInternalServerError, "授权配置错误,请联系管理员") c.String(http.StatusInternalServerError, response.TranslateMsg(c, "SystemError"))
} }

View File

@@ -27,7 +27,7 @@ func (p *Peer) SysInfo(c *gin.Context) {
f := &requstform.PeerForm{} f := &requstform.PeerForm{}
err := c.ShouldBindBodyWith(f, binding.JSON) err := c.ShouldBindBodyWith(f, binding.JSON)
if err != nil { if err != nil {
response.Error(c, err.Error()) response.Error(c, response.TranslateMsg(c, "ParamsError")+err.Error())
return return
} }
@@ -36,7 +36,7 @@ func (p *Peer) SysInfo(c *gin.Context) {
pe = f.ToPeer() pe = f.ToPeer()
err = service.AllService.PeerService.Create(pe) err = service.AllService.PeerService.Create(pe)
if err != nil { if err != nil {
response.Error(c, err.Error()) response.Error(c, response.TranslateMsg(c, "OperationFailed")+err.Error())
return return
} }
} }

View File

@@ -7,7 +7,7 @@ import (
func RustAuth() gin.HandlerFunc { func RustAuth() gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
//fmt.Println(c.Request.Header)
//获取HTTP_AUTHORIZATION //获取HTTP_AUTHORIZATION
token := c.GetHeader("Authorization") token := c.GetHeader("Authorization")
if token == "" { if token == "" {

View File

@@ -8,7 +8,7 @@ type UserForm struct {
Id uint `json:"id"` Id uint `json:"id"`
Username string `json:"username" validate:"required,gte=4,lte=10"` Username string `json:"username" validate:"required,gte=4,lte=10"`
//Password string `json:"password" validate:"required,gte=4,lte=20"` //Password string `json:"password" validate:"required,gte=4,lte=20"`
Nickname string `json:"nickname" validate:"required"` Nickname string `json:"nickname"`
Avatar string `json:"avatar"` Avatar string `json:"avatar"`
GroupId uint `json:"group_id" validate:"required"` GroupId uint `json:"group_id" validate:"required"`
IsAdmin *bool `json:"is_admin" ` IsAdmin *bool `json:"is_admin" `

View File

@@ -1,7 +1,10 @@
package response package response
import ( import (
"Gwen/global"
"fmt"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/nicksnyder/go-i18n/v2/i18n"
"net/http" "net/http"
) )
@@ -51,3 +54,48 @@ type ServerConfigResponse struct {
RelayServer string `json:"relay_server"` RelayServer string `json:"relay_server"`
ApiServer string `json:"api_server"` ApiServer string `json:"api_server"`
} }
func TranslateMsg(c *gin.Context, messageId string) string {
localizer := global.Localizer(c)
errMsg, err := localizer.LocalizeMessage(&i18n.Message{
ID: messageId,
})
if err != nil {
global.Logger.Warn("LocalizeMessage Error: " + err.Error())
errMsg = messageId
}
return errMsg
}
func TranslateTempMsg(c *gin.Context, messageId string, templateData map[string]interface{}) string {
localizer := global.Localizer(c)
errMsg, err := localizer.Localize(&i18n.LocalizeConfig{
DefaultMessage: &i18n.Message{
ID: messageId,
},
TemplateData: templateData,
})
if err != nil {
global.Logger.Warn("LocalizeMessage Error: " + err.Error())
errMsg = messageId
}
return errMsg
}
func TranslateParamMsg(c *gin.Context, messageId string, params ...string) string {
localizer := global.Localizer(c)
templateData := make(map[string]interface{})
for i, v := range params {
k := fmt.Sprintf("P%d", i)
templateData[k] = v
}
errMsg, err := localizer.Localize(&i18n.LocalizeConfig{
DefaultMessage: &i18n.Message{
ID: messageId,
},
TemplateData: templateData,
})
if err != nil {
global.Logger.Warn("LocalizeMessage Error: " + err.Error())
errMsg = messageId
}
return errMsg
}

111
resources/i18n/en.toml Normal file
View File

@@ -0,0 +1,111 @@
[Test]
description = "test"
one = "test1 "
other = "Test2 {{.P0}}"
[ParamsError]
description = "Params validation failed."
one = "Params validation failed."
other = "Params validation failed."
[OperationFailed]
description = "OperationFailed."
one = "the operation failed."
other = "the operation failed."
[OperationSuccess]
description = "OperationSuccess."
one = "the operation success."
other = "the operation success."
[ItemExists]
description = "Item already exists."
one = "Item already exists."
other = "Item already exists."
[ItemNotFound]
description = "Item not found."
one = "Item not found."
other = "Item not found."
[NoAccess]
description = "No access."
one = "No access."
other = "No access."
[UsernameOrPasswordError]
description = "Username or password error."
one = "Username or password error."
other = "Username or password error."
[SystemError]
description = "System error."
one = "System error."
other = "System error."
[ConfigNotFound]
description = "Config not found."
one = "Config not found."
other = "Config not found."
[OauthExpired]
description = "Oauth expired."
one = "Oauth expired, please try again."
other = "Oauth expired,please try again."
[OauthFailed]
description = "Oauth failed."
one = "Oauth failed."
other = "Oauth failed."
[OauthHasBindOtherUser]
description = "Oauth has bind other user."
one = "Oauth has bind other user."
other = "Oauth has bind other user."
[ParamIsEmpty]
description = "Param is empty."
one = "{{.P0}} is empty."
other = "{{.P0}} is empty."
[BindFail]
description = "Bind fail."
one = "Bind fail."
other = "Bind fail."
[BindSuccess]
description = "Bind success."
one = "Bind success."
other = "Bind success."
[OauthHasBeenSuccess]
description = "Oauth has been success."
one = "Oauth has been success."
other = "Oauth has been success."
[OauthSuccess]
description = "Oauth success."
one = "Oauth success."
other = "Oauth success."
[OauthRegisterSuccess]
description = "Oauth register success."
one = "Oauth register success."
other = "Oauth register success."
[OauthRegisterFailed]
description = "Oauth register failed."
one = "Oauth register failed."
other = "Oauth register failed."
[GetOauthTokenError]
description = "Get oauth token error."
one = "Get oauth token error."
other = "Get oauth token error."
[GetOauthUserInfoError]
description = "Get oauth user info error."
one = "Get oauth user info error."
other = "Get oauth user info error."
[DecodeOauthUserInfoError]
description = "Decode oauth user info error."
one = "Decode oauth user info error."
other = "Decode oauth user info error."
[OldPasswordError]
description = "Old password error."
one = "Old password error."
other = "Old password error."

112
resources/i18n/zh_CN.toml Normal file
View File

@@ -0,0 +1,112 @@
[Test]
description = "test"
one = "测试1 {{.P0}}"
other = "测试2 {{.P0}}"
[ParamsError]
description = "Params validation failed."
one = "参数错误。"
other = "参数错误。"
[OperationFailed]
description = "OperationFailed."
one = "操作失败。"
other = "操作失败。"
[OperationSuccess]
description = "OperationSuccess."
one = "操作成功。"
other = "操作成功。"
[ItemExists]
description = "Item already exists."
one = "数据已存在。"
other = "数据已存在。"
[ItemNotFound]
description = "Item not found."
one = "数据不存在。"
other = "数据不存在。"
[NoAccess]
description = "No access."
one = "无权限。"
other = "无权限。"
[UsernameOrPasswordError]
description = "Username or password error."
one = "用户名或密码错误。"
other = "用户名或密码错误。"
[SystemError]
description = "System error."
one = "系统错误。"
other = "系统错误。"
[ConfigNotFound]
description = "Config not found."
one = "配置不存在。"
other = "配置不存在。"
#授权过期
[OauthExpired]
description = "Oauth expired."
one = "授权过期,请重新授权。"
other = "授权过期,请重新授权。"
[OauthFailed]
description = "Oauth failed."
one = "授权失败。"
other = "授权失败。"
[OauthHasBindOtherUser]
description = "Oauth has bind other user."
one = "授权已绑定其他用户。"
other = "授权已绑定其他用户。"
[ParamIsEmpty]
description = "Param is empty."
one = "{{.P0}} 为空。"
other = "{{.P0}} 为空。"
[BindFail]
description = "Bind fail."
one = "绑定失败。"
other = "绑定失败。"
[BindSuccess]
description = "Bind success."
one = "绑定成功。"
other = "绑定成功。"
[OauthHasBeenSuccess]
description = "Oauth has been success."
one = "授权已成功。"
other = "授权已成功。"
[OauthSuccess]
description = "Oauth success."
one = "授权成功。"
other = "授权成功。"
[OauthRegisterSuccess]
description = "Oauth register success."
one = "授权注册成功。"
other = "授权注册成功。"
[OauthRegisterFailed]
description = "Oauth register failed."
one = "授权注册失败。"
other = "授权注册失败。"
[GetOauthTokenError]
description = "Get oauth token error."
one = "获取授权token失败。"
other = "获取授权token失败。"
[GetOauthUserInfoError]
description = "Get oauth user info error."
one = "获取授权用户信息失败。"
other = "获取授权用户信息失败。"
[DecodeOauthUserInfoError]
description = "Decode oauth user info error."
one = "解析授权用户信息失败。"
other = "解析授权用户信息失败。"
[OldPasswordError]
description = "Old password error."
one = "旧密码错误。"
other = "旧密码错误。"

View File

@@ -133,7 +133,7 @@ func (os *OauthService) BeginAuth(op string) (error error, code, url string) {
return err, code, conf.AuthCodeURL(code) return err, code, conf.AuthCodeURL(code)
} }
return errors.New("op错误"), code, "" return err, code, ""
} }
// GetOauthConfig 获取配置 // GetOauthConfig 获取配置
@@ -141,7 +141,7 @@ func (os *OauthService) GetOauthConfig(op string) (error, *oauth2.Config) {
if op == model.OauthTypeGithub { if op == model.OauthTypeGithub {
g := os.InfoByOp(model.OauthTypeGithub) g := os.InfoByOp(model.OauthTypeGithub)
if g.Id == 0 || g.ClientId == "" || g.ClientSecret == "" || g.RedirectUrl == "" { if g.Id == 0 || g.ClientId == "" || g.ClientSecret == "" || g.RedirectUrl == "" {
return errors.New("配置不存在"), nil return errors.New("ConfigNotFound"), nil
} }
return nil, &oauth2.Config{ return nil, &oauth2.Config{
ClientID: g.ClientId, ClientID: g.ClientId,
@@ -154,7 +154,7 @@ func (os *OauthService) GetOauthConfig(op string) (error, *oauth2.Config) {
if op == model.OauthTypeGoogle { if op == model.OauthTypeGoogle {
g := os.InfoByOp(model.OauthTypeGoogle) g := os.InfoByOp(model.OauthTypeGoogle)
if g.Id == 0 || g.ClientId == "" || g.ClientSecret == "" || g.RedirectUrl == "" { if g.Id == 0 || g.ClientId == "" || g.ClientSecret == "" || g.RedirectUrl == "" {
return errors.New("配置不存在"), nil return errors.New("ConfigNotFound"), nil
} }
return nil, &oauth2.Config{ return nil, &oauth2.Config{
ClientID: g.ClientId, ClientID: g.ClientId,
@@ -164,7 +164,7 @@ func (os *OauthService) GetOauthConfig(op string) (error, *oauth2.Config) {
Scopes: []string{"https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"}, Scopes: []string{"https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"},
} }
} }
return errors.New("op错误"), nil return errors.New("ConfigNotFound"), nil
} }
func (os *OauthService) GithubCallback(code string) (error error, userData *GithubUserdata) { func (os *OauthService) GithubCallback(code string) (error error, userData *GithubUserdata) {
@@ -175,7 +175,7 @@ func (os *OauthService) GithubCallback(code string) (error error, userData *Gith
token, err := oauthConfig.Exchange(context.Background(), code) token, err := oauthConfig.Exchange(context.Background(), code)
if err != nil { if err != nil {
global.Logger.Warn(fmt.Printf("oauthConfig.Exchange() failed: %s\n", err)) global.Logger.Warn(fmt.Printf("oauthConfig.Exchange() failed: %s\n", err))
error = errors.New("获取token失败") error = errors.New("GetOauthTokenError")
return return
} }
@@ -184,7 +184,7 @@ func (os *OauthService) GithubCallback(code string) (error error, userData *Gith
resp, err := client.Get("https://api.github.com/user") resp, err := client.Get("https://api.github.com/user")
if err != nil { if err != nil {
global.Logger.Warn("failed getting user info: %s\n", err) global.Logger.Warn("failed getting user info: %s\n", err)
error = errors.New("获取user info失败") error = errors.New("GetOauthUserInfoError")
return return
} }
defer func(Body io.ReadCloser) { defer func(Body io.ReadCloser) {
@@ -197,7 +197,7 @@ func (os *OauthService) GithubCallback(code string) (error error, userData *Gith
// 在这里处理 GitHub 用户信息 // 在这里处理 GitHub 用户信息
if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil { if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil {
global.Logger.Warn("failed decoding user info: %s\n", err) global.Logger.Warn("failed decoding user info: %s\n", err)
error = errors.New("解析user info失败") error = errors.New("DecodeOauthUserInfoError")
return return
} }
return return
@@ -208,7 +208,7 @@ func (os *OauthService) GoogleCallback(code string) (error error, userData *Goog
token, err := oauthConfig.Exchange(context.Background(), code) token, err := oauthConfig.Exchange(context.Background(), code)
if err != nil { if err != nil {
global.Logger.Warn(fmt.Printf("oauthConfig.Exchange() failed: %s\n", err)) global.Logger.Warn(fmt.Printf("oauthConfig.Exchange() failed: %s\n", err))
error = errors.New("获取token失败") error = errors.New("GetOauthTokenError")
return return
} }
// 创建 HTTP 客户端,并将 access_token 添加到 Authorization 头中 // 创建 HTTP 客户端,并将 access_token 添加到 Authorization 头中
@@ -216,7 +216,7 @@ func (os *OauthService) GoogleCallback(code string) (error error, userData *Goog
resp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo") resp, err := client.Get("https://www.googleapis.com/oauth2/v2/userinfo")
if err != nil { if err != nil {
global.Logger.Warn("failed getting user info: %s\n", err) global.Logger.Warn("failed getting user info: %s\n", err)
error = errors.New("获取user info失败: " + err.Error()) error = errors.New("GetOauthUserInfoError")
return return
} }
defer func(Body io.ReadCloser) { defer func(Body io.ReadCloser) {
@@ -228,7 +228,7 @@ func (os *OauthService) GoogleCallback(code string) (error error, userData *Goog
if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil { if err = json.NewDecoder(resp.Body).Decode(&userData); err != nil {
global.Logger.Warn("failed decoding user info: %s\n", err) global.Logger.Warn("failed decoding user info: %s\n", err)
error = errors.New("解析user info失败:" + err.Error()) error = errors.New("DecodeOauthUserInfoError")
return return
} }
return return
@@ -258,7 +258,13 @@ func (os *OauthService) BindOauthUser(thirdType, openid, username string, userId
} }
func (os *OauthService) UnBindGithubUser(userid uint) error { func (os *OauthService) UnBindGithubUser(userid uint) error {
return global.DB.Where("user_id = ? and third_type = ?", userid, model.OauthTypeGithub).Delete(&model.UserThird{}).Error return os.UnBindThird(model.OauthTypeGithub, userid)
}
func (os *OauthService) UnBindGoogleUser(userid uint) error {
return os.UnBindThird(model.OauthTypeGoogle, userid)
}
func (os *OauthService) UnBindThird(thirdType string, userid uint) error {
return global.DB.Where("user_id = ? and third_type = ?", userid, thirdType).Delete(&model.UserThird{}).Error
} }
// InfoById 根据id取用户信息 // InfoById 根据id取用户信息