fix lint issues
This commit is contained in:
10
Makefile
10
Makefile
@@ -16,4 +16,12 @@ dist:
|
|||||||
|
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test:
|
test:
|
||||||
@go test -v ./... -cover
|
@go test -v ./... -cover
|
||||||
|
|
||||||
|
.PHONY: lint
|
||||||
|
lint:
|
||||||
|
@golangci-lint run
|
||||||
|
|
||||||
|
.PHONY: proto
|
||||||
|
proto:
|
||||||
|
@buf generate
|
||||||
@@ -2,6 +2,7 @@ package container
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"log"
|
||||||
|
|
||||||
"go.uber.org/dig"
|
"go.uber.org/dig"
|
||||||
)
|
)
|
||||||
@@ -9,5 +10,7 @@ import (
|
|||||||
var Container *dig.Container = dig.New()
|
var Container *dig.Container = dig.New()
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Container.Provide(context.Background)
|
if err := Container.Provide(context.Background); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
164
golangci-lint.yaml
Normal file
164
golangci-lint.yaml
Normal file
@@ -0,0 +1,164 @@
|
|||||||
|
linters-settings:
|
||||||
|
forbidigo:
|
||||||
|
# Forbid the following identifiers (list of regexp).
|
||||||
|
# Default: ["^(fmt\\.Print(|f|ln)|print|println)$"]
|
||||||
|
forbid:
|
||||||
|
- ^print.*$
|
||||||
|
- 'fmt\.Print.*'
|
||||||
|
# Optionally put comments at the end of the regex, surrounded by `(# )?`
|
||||||
|
# Escape any special characters.
|
||||||
|
- 'fmt\.Print.*(# Do not commit print statements\.)?'
|
||||||
|
# Exclude godoc examples from forbidigo checks.
|
||||||
|
# Default: true
|
||||||
|
# exclude_godoc_examples: false
|
||||||
|
gofumpt:
|
||||||
|
# Select the Go version to target.
|
||||||
|
# Default: "1.15"
|
||||||
|
# Deprecated: use the global `run.go` instead.
|
||||||
|
lang-version: "1.18"
|
||||||
|
# Module path which contains the source code being formatted.
|
||||||
|
# Default: ""
|
||||||
|
# Choose whether to use the extra rules.
|
||||||
|
# Default: false
|
||||||
|
govet:
|
||||||
|
check-shadowing: true
|
||||||
|
# enable:
|
||||||
|
# - fieldalignment
|
||||||
|
settings:
|
||||||
|
printf:
|
||||||
|
funcs:
|
||||||
|
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof
|
||||||
|
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf
|
||||||
|
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf
|
||||||
|
- (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf
|
||||||
|
golint:
|
||||||
|
min-confidence: 0
|
||||||
|
gocyclo:
|
||||||
|
min-complexity: 32
|
||||||
|
maligned:
|
||||||
|
suggest-new: true
|
||||||
|
dupl:
|
||||||
|
threshold: 100
|
||||||
|
goconst:
|
||||||
|
min-len: 2
|
||||||
|
min-occurrences: 2
|
||||||
|
depguard:
|
||||||
|
list-type: blacklist
|
||||||
|
packages:
|
||||||
|
# logging is allowed only by logutils.Log, logrus
|
||||||
|
# is allowed to use only in logutils package
|
||||||
|
- github.com/sirupsen/logrus
|
||||||
|
misspell:
|
||||||
|
locale: US
|
||||||
|
lll:
|
||||||
|
line-length: 200
|
||||||
|
goimports:
|
||||||
|
local-prefixes: git.gobies.org
|
||||||
|
gocritic:
|
||||||
|
enabled-tags:
|
||||||
|
- performance
|
||||||
|
- style
|
||||||
|
- experimental
|
||||||
|
disabled-checks:
|
||||||
|
- wrapperFunc
|
||||||
|
- yodaStyleExpr
|
||||||
|
- unnamedResult
|
||||||
|
# - dupImport # https://github.com/go-critic/go-critic/issues/845
|
||||||
|
- commentedOutCode
|
||||||
|
- importShadow
|
||||||
|
- appendCombine
|
||||||
|
- ifElseChain
|
||||||
|
- typeAssertChain
|
||||||
|
- builtinShadow
|
||||||
|
gosec:
|
||||||
|
excludes:
|
||||||
|
- G404
|
||||||
|
- G501
|
||||||
|
- G401
|
||||||
|
revive:
|
||||||
|
ignore-generated-header: true
|
||||||
|
severity: warning
|
||||||
|
rules:
|
||||||
|
- name: atomic
|
||||||
|
- name: line-length-limit
|
||||||
|
severity: error
|
||||||
|
arguments: [200]
|
||||||
|
|
||||||
|
linters:
|
||||||
|
# enable:
|
||||||
|
# - errcheck
|
||||||
|
# - goimports
|
||||||
|
# - golint
|
||||||
|
# - govet
|
||||||
|
# - staticcheck
|
||||||
|
# - gocyclo
|
||||||
|
# - maligned
|
||||||
|
# - goconst
|
||||||
|
# - depguard
|
||||||
|
# - misspell
|
||||||
|
# - lll
|
||||||
|
# - gocritic
|
||||||
|
# disable-all: true
|
||||||
|
enable:
|
||||||
|
- gocritic
|
||||||
|
- gocyclo
|
||||||
|
- lll
|
||||||
|
- goconst
|
||||||
|
- misspell
|
||||||
|
- govet
|
||||||
|
- errcheck
|
||||||
|
- forbidigo
|
||||||
|
# - staticcheck
|
||||||
|
- unused
|
||||||
|
# - maligned
|
||||||
|
- gosimple
|
||||||
|
# - structcheck
|
||||||
|
# - varcheck
|
||||||
|
- ineffassign
|
||||||
|
# - deadcode
|
||||||
|
- typecheck
|
||||||
|
# - golint
|
||||||
|
- revive
|
||||||
|
- gosec
|
||||||
|
- unconvert
|
||||||
|
# - goimports
|
||||||
|
- depguard
|
||||||
|
- prealloc
|
||||||
|
# - scopelint
|
||||||
|
- whitespace
|
||||||
|
- revive
|
||||||
|
- nilnil
|
||||||
|
|
||||||
|
run:
|
||||||
|
go: '1.18'
|
||||||
|
|
||||||
|
# default concurrency is a available CPU number
|
||||||
|
concurrency: 20
|
||||||
|
|
||||||
|
# timeout for analysis, e.g. 30s, 5m, default is 1m
|
||||||
|
deadline: 10m
|
||||||
|
|
||||||
|
# exit code when at least one issue was found, default is 1
|
||||||
|
issues-exit-code: 1
|
||||||
|
# include test files or not, default is true
|
||||||
|
tests: false
|
||||||
|
|
||||||
|
skip-dirs:
|
||||||
|
- vendor/(passes)
|
||||||
|
# - third_party/(checker|passes)
|
||||||
|
golint:
|
||||||
|
# minimal confidence for issues, default is 0.8
|
||||||
|
min-confidence: 0.5
|
||||||
|
issues:
|
||||||
|
exclude-use-default: true
|
||||||
|
max-issues-per-linter: 10
|
||||||
|
max-same-issues: 0
|
||||||
|
# exclude:
|
||||||
|
# - EXC0002
|
||||||
|
|
||||||
|
# golangci.com configuration
|
||||||
|
# https://github.com/golangci/golangci/wiki/Configuration
|
||||||
|
# service:
|
||||||
|
# golangci-lint-version: 1.17.x # use the fixed version to not introduce new linters unexpectedly
|
||||||
|
# prepare:
|
||||||
|
# - echo "here I can run custom commands, but no preparation needed for this repo"
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
package middleware
|
package middleware
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"atom/utils"
|
"atom/database/models"
|
||||||
|
"atom/providers/jwt"
|
||||||
|
"atom/providers/log"
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
@@ -12,15 +14,10 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
|
||||||
"github.com/flipped-aurora/gin-vue-admin/server/model/system"
|
|
||||||
"github.com/flipped-aurora/gva-plugins/email/service"
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
)
|
)
|
||||||
|
|
||||||
var operationRecordService = service.ServiceGroupApp.SystemServiceGroup.OperationRecordService
|
|
||||||
|
|
||||||
var respPool sync.Pool
|
var respPool sync.Pool
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -29,15 +26,15 @@ func init() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func OperationRecord() gin.HandlerFunc {
|
func OperationRecord(jwt *jwt.JWT) gin.HandlerFunc {
|
||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
var body []byte
|
var body []byte
|
||||||
var userId int
|
var userId int64
|
||||||
if c.Request.Method != http.MethodGet {
|
if c.Request.Method != http.MethodGet {
|
||||||
var err error
|
var err error
|
||||||
body, err = io.ReadAll(c.Request.Body)
|
body, err = io.ReadAll(c.Request.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.GVA_LOG.Error("read body from request error:", zap.Error(err))
|
log.Error("read body from request error:", zap.Error(err))
|
||||||
} else {
|
} else {
|
||||||
c.Request.Body = io.NopCloser(bytes.NewBuffer(body))
|
c.Request.Body = io.NopCloser(bytes.NewBuffer(body))
|
||||||
}
|
}
|
||||||
@@ -54,18 +51,18 @@ func OperationRecord() gin.HandlerFunc {
|
|||||||
}
|
}
|
||||||
body, _ = json.Marshal(&m)
|
body, _ = json.Marshal(&m)
|
||||||
}
|
}
|
||||||
claims, _ := utils.GetClaims(c)
|
claims, _ := jwt.GetClaims(c)
|
||||||
if claims.ID != 0 {
|
if claims.UserID != 0 {
|
||||||
userId = int(claims.ID)
|
userId = int64(claims.UserID)
|
||||||
} else {
|
} else {
|
||||||
id, err := strconv.Atoi(c.Request.Header.Get("x-user-id"))
|
id, err := strconv.Atoi(c.Request.Header.Get("x-user-id"))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
userId = 0
|
log.Error(err)
|
||||||
}
|
}
|
||||||
userId = id
|
userId = int64(id)
|
||||||
}
|
}
|
||||||
record := system.SysOperationRecord{
|
record := models.SysOperationRecord{
|
||||||
Ip: c.ClientIP(),
|
IP: c.ClientIP(),
|
||||||
Method: c.Request.Method,
|
Method: c.Request.Method,
|
||||||
Path: c.Request.URL.Path,
|
Path: c.Request.URL.Path,
|
||||||
Agent: c.Request.UserAgent(),
|
Agent: c.Request.UserAgent(),
|
||||||
@@ -80,7 +77,7 @@ func OperationRecord() gin.HandlerFunc {
|
|||||||
newBody := respPool.Get().([]byte)
|
newBody := respPool.Get().([]byte)
|
||||||
copy(newBody, record.Body)
|
copy(newBody, record.Body)
|
||||||
record.Body = string(newBody)
|
record.Body = string(newBody)
|
||||||
defer respPool.Put(newBody[:0])
|
defer respPool.Put(&newBody)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,8 +92,8 @@ func OperationRecord() gin.HandlerFunc {
|
|||||||
|
|
||||||
latency := time.Since(now)
|
latency := time.Since(now)
|
||||||
record.ErrorMessage = c.Errors.ByType(gin.ErrorTypePrivate).String()
|
record.ErrorMessage = c.Errors.ByType(gin.ErrorTypePrivate).String()
|
||||||
record.Status = c.Writer.Status()
|
record.Status = int64(c.Writer.Status())
|
||||||
record.Latency = latency
|
record.Latency = int64(latency)
|
||||||
record.Resp = writer.body.String()
|
record.Resp = writer.body.String()
|
||||||
|
|
||||||
if strings.Contains(c.Writer.Header().Get("Pragma"), "public") ||
|
if strings.Contains(c.Writer.Header().Get("Pragma"), "public") ||
|
||||||
@@ -113,13 +110,13 @@ func OperationRecord() gin.HandlerFunc {
|
|||||||
newBody := respPool.Get().([]byte)
|
newBody := respPool.Get().([]byte)
|
||||||
copy(newBody, record.Resp)
|
copy(newBody, record.Resp)
|
||||||
record.Body = string(newBody)
|
record.Body = string(newBody)
|
||||||
defer respPool.Put(newBody[:0])
|
defer respPool.Put(&newBody)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := operationRecordService.CreateSysOperationRecord(record); err != nil {
|
// if err := operationRecordService.CreateSysOperationRecord(record); err != nil {
|
||||||
global.GVA_LOG.Error("create operation record error:", zap.Error(err))
|
// log.Error("create operation record error:", zap.Error(err))
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ type PostgreSQL struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *PostgreSQL) EmptyDsn() string {
|
func (m *PostgreSQL) EmptyDsn() string {
|
||||||
dsnTpl := "host=%s user=%s password=%s port=%s dbname=postgres sslmode=disable TimeZone=Asia/Shanghai"
|
dsnTpl := "host=%s user=%s password=%s port=%d dbname=postgres sslmode=disable TimeZone=Asia/Shanghai"
|
||||||
|
|
||||||
return fmt.Sprintf(dsnTpl, m.Host, m.User, m.Password, m.Port)
|
return fmt.Sprintf(dsnTpl, m.Host, m.User, m.Password, m.Port)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,10 +3,11 @@ package jwt
|
|||||||
import (
|
import (
|
||||||
"atom/container"
|
"atom/container"
|
||||||
"atom/providers/config"
|
"atom/providers/config"
|
||||||
|
"atom/providers/log"
|
||||||
"errors"
|
"errors"
|
||||||
"log"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
jwt "github.com/golang-jwt/jwt/v4"
|
jwt "github.com/golang-jwt/jwt/v4"
|
||||||
uuid "github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
"golang.org/x/sync/singleflight"
|
"golang.org/x/sync/singleflight"
|
||||||
@@ -22,12 +23,12 @@ func init() {
|
|||||||
type CustomClaims struct {
|
type CustomClaims struct {
|
||||||
BaseClaims
|
BaseClaims
|
||||||
BufferTime int64
|
BufferTime int64
|
||||||
jwt.StandardClaims
|
jwt.RegisteredClaims
|
||||||
}
|
}
|
||||||
|
|
||||||
type BaseClaims struct {
|
type BaseClaims struct {
|
||||||
UUID uuid.UUID
|
UUID uuid.UUID
|
||||||
ID uint
|
UserID uint
|
||||||
Username string
|
Username string
|
||||||
NickName string
|
NickName string
|
||||||
AuthorityId uint
|
AuthorityId uint
|
||||||
@@ -59,10 +60,10 @@ func (j *JWT) CreateClaims(baseClaims BaseClaims) CustomClaims {
|
|||||||
claims := CustomClaims{
|
claims := CustomClaims{
|
||||||
BaseClaims: baseClaims,
|
BaseClaims: baseClaims,
|
||||||
BufferTime: int64(bf / time.Second), // 缓冲时间1天 缓冲时间内会获得新的token刷新令牌 此时一个用户会存在两个有效令牌 但是前端只留一个 另一个会丢失
|
BufferTime: int64(bf / time.Second), // 缓冲时间1天 缓冲时间内会获得新的token刷新令牌 此时一个用户会存在两个有效令牌 但是前端只留一个 另一个会丢失
|
||||||
StandardClaims: jwt.StandardClaims{
|
RegisteredClaims: jwt.RegisteredClaims{
|
||||||
NotBefore: time.Now().Unix() - 1000, // 签名生效时间
|
NotBefore: jwt.NewNumericDate(time.Now().Add(-time.Second * 10)), // 签名生效时间
|
||||||
ExpiresAt: time.Now().Add(ep).Unix(), // 过期时间 7天 配置文件
|
ExpiresAt: jwt.NewNumericDate(time.Now().Add(ep)), // 过期时间 7天 配置文件
|
||||||
Issuer: j.config.Http.JWT.Issuer, // 签名的发行者
|
Issuer: j.config.Http.JWT.Issuer, // 签名的发行者
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return claims
|
return claims
|
||||||
@@ -112,7 +113,67 @@ func (j *JWT) ParseToken(tokenString string) (*CustomClaims, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 解析 token
|
func (j *JWT) GetClaims(c *gin.Context) (*CustomClaims, error) {
|
||||||
func (j *JWT) ParseCliam(claim string) (*CustomClaims, error) {
|
token := c.Request.Header.Get("x-token")
|
||||||
|
claims, err := j.ParseToken(token)
|
||||||
|
if err != nil {
|
||||||
|
log.Error("从Gin的Context中获取从jwt解析信息失败, 请检查请求头是否存在x-token且claims是否为规定结构")
|
||||||
|
}
|
||||||
|
return claims, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserID 从Gin的Context中获取从jwt解析出来的用户ID
|
||||||
|
func (j *JWT) GetUserID(c *gin.Context) uint {
|
||||||
|
if claims, exists := c.Get("claims"); !exists {
|
||||||
|
if cl, err := j.GetClaims(c); err != nil {
|
||||||
|
return 0
|
||||||
|
} else {
|
||||||
|
return cl.UserID
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
waitUse := claims.(*CustomClaims)
|
||||||
|
return waitUse.UserID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserUuid 从Gin的Context中获取从jwt解析出来的用户UUID
|
||||||
|
func (j *JWT) GetUserUuid(c *gin.Context) uuid.UUID {
|
||||||
|
if claims, exists := c.Get("claims"); !exists {
|
||||||
|
if cl, err := j.GetClaims(c); err != nil {
|
||||||
|
return uuid.UUID{}
|
||||||
|
} else {
|
||||||
|
return cl.UUID
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
waitUse := claims.(*CustomClaims)
|
||||||
|
return waitUse.UUID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserAuthorityId 从Gin的Context中获取从jwt解析出来的用户角色id
|
||||||
|
func (j *JWT) GetUserAuthorityId(c *gin.Context) uint {
|
||||||
|
if claims, exists := c.Get("claims"); !exists {
|
||||||
|
if cl, err := j.GetClaims(c); err != nil {
|
||||||
|
return 0
|
||||||
|
} else {
|
||||||
|
return cl.AuthorityId
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
waitUse := claims.(*CustomClaims)
|
||||||
|
return waitUse.AuthorityId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserInfo 从Gin的Context中获取从jwt解析出来的用户角色id
|
||||||
|
func (j *JWT) GetUserInfo(c *gin.Context) *CustomClaims {
|
||||||
|
if claims, exists := c.Get("claims"); !exists {
|
||||||
|
if cl, err := j.GetClaims(c); err != nil {
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
return cl
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
waitUse := claims.(*CustomClaims)
|
||||||
|
return waitUse
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,5 @@ import (
|
|||||||
_ "atom/providers/http"
|
_ "atom/providers/http"
|
||||||
_ "atom/providers/jwt"
|
_ "atom/providers/jwt"
|
||||||
_ "atom/providers/log"
|
_ "atom/providers/log"
|
||||||
_ "atom/providers/micro"
|
|
||||||
_ "atom/providers/single_flight"
|
_ "atom/providers/single_flight"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
package rpc
|
|
||||||
|
|
||||||
import (
|
|
||||||
"log"
|
|
||||||
|
|
||||||
"atom/container"
|
|
||||||
"atom/proto"
|
|
||||||
|
|
||||||
"go-micro.dev/v4"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
err := container.Container.Provide(func(svc micro.Service) proto.WebApiService {
|
|
||||||
return proto.NewWebApiService("web.api", svc.Client())
|
|
||||||
})
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
package utils
|
|
||||||
|
|
||||||
import (
|
|
||||||
"atom/providers/jwt"
|
|
||||||
|
|
||||||
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
|
||||||
"github.com/gin-gonic/gin"
|
|
||||||
uuid "github.com/satori/go.uuid"
|
|
||||||
)
|
|
||||||
|
|
||||||
func GetClaims(c *gin.Context, jwt *jwt.JWT) (*jwt.CustomClaims, error) {
|
|
||||||
token := c.Request.Header.Get("x-token")
|
|
||||||
j := NewJWT()
|
|
||||||
claims, err := j.ParseToken(token)
|
|
||||||
if err != nil {
|
|
||||||
global.GVA_LOG.Error("从Gin的Context中获取从jwt解析信息失败, 请检查请求头是否存在x-token且claims是否为规定结构")
|
|
||||||
}
|
|
||||||
return claims, err
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetUserID 从Gin的Context中获取从jwt解析出来的用户ID
|
|
||||||
func GetUserID(c *gin.Context) uint {
|
|
||||||
if claims, exists := c.Get("claims"); !exists {
|
|
||||||
if cl, err := GetClaims(c); err != nil {
|
|
||||||
return 0
|
|
||||||
} else {
|
|
||||||
return cl.ID
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
waitUse := claims.(*systemReq.CustomClaims)
|
|
||||||
return waitUse.ID
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetUserUuid 从Gin的Context中获取从jwt解析出来的用户UUID
|
|
||||||
func GetUserUuid(c *gin.Context) uuid.UUID {
|
|
||||||
if claims, exists := c.Get("claims"); !exists {
|
|
||||||
if cl, err := GetClaims(c); err != nil {
|
|
||||||
return uuid.UUID{}
|
|
||||||
} else {
|
|
||||||
return cl.UUID
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
waitUse := claims.(*systemReq.CustomClaims)
|
|
||||||
return waitUse.UUID
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetUserAuthorityId 从Gin的Context中获取从jwt解析出来的用户角色id
|
|
||||||
func GetUserAuthorityId(c *gin.Context) uint {
|
|
||||||
if claims, exists := c.Get("claims"); !exists {
|
|
||||||
if cl, err := GetClaims(c); err != nil {
|
|
||||||
return 0
|
|
||||||
} else {
|
|
||||||
return cl.AuthorityId
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
waitUse := claims.(*systemReq.CustomClaims)
|
|
||||||
return waitUse.AuthorityId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetUserInfo 从Gin的Context中获取从jwt解析出来的用户角色id
|
|
||||||
func GetUserInfo(c *gin.Context) *systemReq.CustomClaims {
|
|
||||||
if claims, exists := c.Get("claims"); !exists {
|
|
||||||
if cl, err := GetClaims(c); err != nil {
|
|
||||||
return nil
|
|
||||||
} else {
|
|
||||||
return cl
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
waitUse := claims.(*systemReq.CustomClaims)
|
|
||||||
return waitUse
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -19,13 +19,15 @@ func Unzip(zipFile string, destDir string) ([]string, error) {
|
|||||||
defer zipReader.Close()
|
defer zipReader.Close()
|
||||||
|
|
||||||
for _, f := range zipReader.File {
|
for _, f := range zipReader.File {
|
||||||
if strings.Index(f.Name, "..") > -1 {
|
if strings.Contains(f.Name, "..") {
|
||||||
return []string{}, fmt.Errorf("%s 文件名不合法", f.Name)
|
return []string{}, fmt.Errorf("%s 文件名不合法", f.Name)
|
||||||
}
|
}
|
||||||
fpath := filepath.Join(destDir, f.Name)
|
fpath := filepath.Join(destDir, f.Name)
|
||||||
paths = append(paths, fpath)
|
paths = append(paths, fpath)
|
||||||
if f.FileInfo().IsDir() {
|
if f.FileInfo().IsDir() {
|
||||||
os.MkdirAll(fpath, os.ModePerm)
|
if err := os.MkdirAll(fpath, os.ModePerm); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {
|
if err = os.MkdirAll(filepath.Dir(fpath), os.ModePerm); err != nil {
|
||||||
return []string{}, err
|
return []string{}, err
|
||||||
|
|||||||
Reference in New Issue
Block a user