mirror of
https://github.com/haiwen/seafile-server.git
synced 2025-06-27 23:46:48 +00:00
* Add json exp * Add json exp and add gen jwt token * Gen seahub and notif jwt token * Add exp for gen jwt token * Delete gen_jwt_token API * Delete set exp to 72 hour --------- Co-authored-by: 杨赫然 <heran.yang@seafile.com>
82 lines
1.7 KiB
Go
82 lines
1.7 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
jwt "github.com/golang-jwt/jwt/v5"
|
|
"github.com/google/uuid"
|
|
"github.com/haiwen/seafile-server/fileserver/option"
|
|
)
|
|
|
|
func IsValidUUID(u string) bool {
|
|
_, err := uuid.Parse(u)
|
|
return err == nil
|
|
}
|
|
|
|
func IsObjectIDValid(objID string) bool {
|
|
if len(objID) != 40 {
|
|
return false
|
|
}
|
|
for i := 0; i < len(objID); i++ {
|
|
c := objID[i]
|
|
if (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') {
|
|
continue
|
|
}
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
type SeahubClaims struct {
|
|
Exp int64 `json:"exp"`
|
|
IsInternal bool `json:"is_internal"`
|
|
jwt.RegisteredClaims
|
|
}
|
|
|
|
func (*SeahubClaims) Valid() error {
|
|
return nil
|
|
}
|
|
|
|
func GenSeahubJWTToken() (string, error) {
|
|
claims := new(SeahubClaims)
|
|
claims.Exp = time.Now().Add(time.Second * 300).Unix()
|
|
claims.IsInternal = true
|
|
|
|
token := jwt.NewWithClaims(jwt.GetSigningMethod("HS256"), claims)
|
|
tokenString, err := token.SignedString([]byte(option.JWTPrivateKey))
|
|
if err != nil {
|
|
err := fmt.Errorf("failed to gen seahub jwt token: %w", err)
|
|
return "", err
|
|
}
|
|
|
|
return tokenString, nil
|
|
}
|
|
|
|
type MyClaims struct {
|
|
Exp int64 `json:"exp"`
|
|
RepoID string `json:"repo_id"`
|
|
UserName string `json:"username"`
|
|
jwt.RegisteredClaims
|
|
}
|
|
|
|
func (*MyClaims) Valid() error {
|
|
return nil
|
|
}
|
|
|
|
func GenNotifJWTToken(repoID, user string, exp int64) (string, error) {
|
|
claims := new(MyClaims)
|
|
claims.Exp = exp
|
|
claims.RepoID = repoID
|
|
claims.UserName = user
|
|
|
|
token := jwt.NewWithClaims(jwt.GetSigningMethod("HS256"), claims)
|
|
tokenString, err := token.SignedString([]byte(option.JWTPrivateKey))
|
|
if err != nil {
|
|
err := fmt.Errorf("failed to gen jwt token for repo %s: %w", repoID, err)
|
|
return "", err
|
|
}
|
|
|
|
return tokenString, nil
|
|
}
|