config token
All checks were successful
Deploy on Master Change / deploy (push) Successful in 39s

This commit is contained in:
2026-07-01 08:04:03 +07:00
parent fd4ab86fff
commit d1411ad1df
8 changed files with 179 additions and 9 deletions

View File

@@ -27,8 +27,9 @@ func atoiDefault(s string, def int) int {
}
// Handler bắt đầu đồng bộ lớp học
func StartClassesSyncHandler(db *gorm.DB, client *qldt.Client, job *syncjobs.ClassesSyncJob, token string) fiber.Handler {
func StartClassesSyncHandler(db *gorm.DB, client *qldt.Client, job *syncjobs.ClassesSyncJob) fiber.Handler {
return func(c *fiber.Ctx) error {
token := GetQldtToken(db)
if token == "" {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "Missing token QLDT_TOKEN"})
}
@@ -48,8 +49,9 @@ func GetClassesSyncStatusHandler(job *syncjobs.ClassesSyncJob) fiber.Handler {
}
// Handler bắt đầu đồng bộ toàn bộ sinh viên
func StartStudentsSyncHandler(db *gorm.DB, client *qldt.Client, job *syncjobs.StudentsSyncJob, token string) fiber.Handler {
func StartStudentsSyncHandler(db *gorm.DB, client *qldt.Client, job *syncjobs.StudentsSyncJob) fiber.Handler {
return func(c *fiber.Ctx) error {
token := GetQldtToken(db)
if token == "" {
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "Missing token QLDT_TOKEN"})
}

View File

@@ -27,13 +27,14 @@ var standardShiftTemplate = []struct {
}
// GET /api/classes/:rkId/courses
func GetClassCoursesHandler(db *gorm.DB, qldtClient *qldt.Client, token string) fiber.Handler {
func GetClassCoursesHandler(db *gorm.DB, qldtClient *qldt.Client) fiber.Handler {
return func(c *fiber.Ctx) error {
rkID, err := strconv.ParseInt(c.Params("rkId"), 10, 64)
if err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid class rkId"})
}
token := GetQldtToken(db)
var liveErr error
if token != "" {
res, err := qldtClient.GetClassCourses(context.Background(), token, rkID)
@@ -430,7 +431,7 @@ func UpdateAttendanceBulkStatusHandler(db *gorm.DB) fiber.Handler {
}
// POST /api/classes/:rkId/attendance/push-qldt
func PushAttendanceToQLDTHandler(db *gorm.DB, qldtClient *qldt.Client, token string) fiber.Handler {
func PushAttendanceToQLDTHandler(db *gorm.DB, qldtClient *qldt.Client) fiber.Handler {
return func(c *fiber.Ctx) error {
classRkID, _ := strconv.ParseInt(c.Params("rkId"), 10, 64)
var req struct {
@@ -446,6 +447,7 @@ func PushAttendanceToQLDTHandler(db *gorm.DB, qldtClient *qldt.Client, token str
if req.Period < 1 {
req.Period = 1
}
token := GetQldtToken(db)
if token == "" {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "QLDT_TOKEN chưa cấu hình"})
}

View File

@@ -0,0 +1,62 @@
package handlers
import (
"os"
"time"
"server/internal/models"
"github.com/gofiber/fiber/v2"
"gorm.io/gorm"
)
// GetQldtToken lấy token từ database, nếu không có sẽ lấy từ biến môi trường
func GetQldtToken(db *gorm.DB) string {
var setting models.SystemSetting
if err := db.Where("setting_key = ?", "QLDT_TOKEN").First(&setting).Error; err == nil && setting.SettingValue != "" {
return setting.SettingValue
}
return os.Getenv("QLDT_TOKEN")
}
// GetQldtTokenHandler trả về token hiện tại (chỉ hỗ trợ phuocntb@rikkeiacademy.com)
func GetQldtTokenHandler(db *gorm.DB) fiber.Handler {
return func(c *fiber.Ctx) error {
email, _ := c.Locals("staffEmail").(string)
if email != "phuocntb@rikkeiacademy.com" {
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{"error": "Bạn không có quyền truy cập thông tin này"})
}
token := GetQldtToken(db)
return c.JSON(fiber.Map{"token": token})
}
}
// SaveQldtTokenHandler lưu token mới vào database (chỉ hỗ trợ phuocntb@rikkeiacademy.com)
func SaveQldtTokenHandler(db *gorm.DB) fiber.Handler {
return func(c *fiber.Ctx) error {
email, _ := c.Locals("staffEmail").(string)
if email != "phuocntb@rikkeiacademy.com" {
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{"error": "Bạn không có quyền thực hiện thao tác này"})
}
var body struct {
Token string `json:"token"`
}
if err := c.BodyParser(&body); err != nil {
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Yêu cầu không hợp lệ"})
}
setting := models.SystemSetting{
SettingKey: "QLDT_TOKEN",
SettingValue: body.Token,
UpdatedAt: time.Now(),
}
if err := db.Save(&setting).Error; err != nil {
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": "Lỗi lưu cấu hình: " + err.Error()})
}
return c.JSON(fiber.Map{"ok": true, "message": "Đã cập nhật QLDT_TOKEN thành công"})
}
}