new api with token

This commit is contained in:
Alireza Ahmadi
2025-02-02 21:46:36 +01:00
parent 4865072f55
commit 1ac7bce6b4
9 changed files with 672 additions and 345 deletions
+7 -1
View File
@@ -146,7 +146,10 @@ func (s *ServerService) GetSystemInfo() map[string]interface{} {
}
func (s *ServerService) GetLogs(count string, level string) []string {
c, _ := strconv.Atoi(count)
c, err := strconv.Atoi(count)
if err != nil {
c = 10
}
return logger.GetLogs(c, level)
}
@@ -171,6 +174,9 @@ func (s *ServerService) GenKeypair(keyType string, options string) []string {
func (s *ServerService) generateECHKeyPair(options string) []string {
parts := strings.Split(options, ",")
if len(parts) != 2 {
return []string{"Failed to generate ECH keypair: ", "invalid options"}
}
configPem, keyPem, err := tls.ECHKeygenDefault(parts[0], parts[1] == "true")
if err != nil {
return []string{"Failed to generate ECH keypair: ", err.Error()}
+59
View File
@@ -1,6 +1,7 @@
package service
import (
"encoding/json"
"s-ui/database"
"s-ui/database/model"
"s-ui/logger"
@@ -99,3 +100,61 @@ func (s *UserService) ChangePass(id string, oldPass string, newUser string, newP
user.Password = newPass
return db.Save(user).Error
}
func (s *UserService) LoadTokens() ([]byte, error) {
db := database.GetDB()
var tokens []model.Tokens
err := db.Model(model.Tokens{}).Preload("User").Where("expiry == 0 or expiry > ?", time.Now().Unix()).Find(&tokens).Error
if err != nil {
return nil, err
}
var result []map[string]interface{}
for _, t := range tokens {
result = append(result, map[string]interface{}{
"token": t.Token,
"expiry": t.Expiry,
"username": t.User.Username,
})
}
jsonResult, _ := json.MarshalIndent(result, "", " ")
return jsonResult, nil
}
func (s *UserService) GetUserTokens(username string) (*[]model.Tokens, error) {
db := database.GetDB()
var token []model.Tokens
err := db.Model(model.Tokens{}).Select("id,desc,'****' as token,expiry,user_id").Where("user_id = (select id from users where username = ?)", username).Find(&token).Error
if err != nil && !database.IsNotFound(err) {
println(err.Error())
return nil, err
}
return &token, nil
}
func (s *UserService) AddToken(username string, expiry int64, desc string) (string, error) {
db := database.GetDB()
var userId uint
err := db.Model(model.User{}).Where("username = ?", username).Select("id").Scan(&userId).Error
if err != nil {
return "", err
}
if expiry > 0 {
expiry = expiry*86400 + time.Now().Unix()
}
token := &model.Tokens{
Token: common.Random(32),
Desc: desc,
Expiry: expiry,
UserId: userId,
}
err = db.Create(token).Error
if err != nil {
return "", err
}
return token.Token, nil
}
func (s *UserService) DeleteToken(id string) error {
db := database.GetDB()
return db.Model(model.Tokens{}).Where("id = ?", id).Delete(&model.Tokens{}).Error
}