added scanner
parent
23035918fc
commit
7d77d089a2
|
@ -32,6 +32,7 @@ func InitDatabase() {
|
||||||
db.AutoMigrate(&structs.UserSession{})
|
db.AutoMigrate(&structs.UserSession{})
|
||||||
db.AutoMigrate(&structs.GroupTasks{})
|
db.AutoMigrate(&structs.GroupTasks{})
|
||||||
db.AutoMigrate(&structs.GroupTaskSteps{})
|
db.AutoMigrate(&structs.GroupTaskSteps{})
|
||||||
|
db.AutoMigrate(&structs.Scanner{})
|
||||||
|
|
||||||
//createUser()
|
//createUser()
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package structs
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
type Scanner struct {
|
||||||
|
Id string // this id is used for ui
|
||||||
|
Session string // this session is used for api calls
|
||||||
|
Name string
|
||||||
|
UsedByUserId string
|
||||||
|
UserAgent string
|
||||||
|
LastUsed time.Time
|
||||||
|
RegisteredAt time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
type ScannerRequest struct {
|
||||||
|
ScannerName string
|
||||||
|
}
|
||||||
|
|
||||||
|
type ScannerResponse struct {
|
||||||
|
Id string
|
||||||
|
Session string
|
||||||
|
}
|
|
@ -7,6 +7,8 @@ const (
|
||||||
MinPassword = 6
|
MinPassword = 6
|
||||||
maxPassword = "64"
|
maxPassword = "64"
|
||||||
MaxPassword = 64
|
MaxPassword = 64
|
||||||
|
minScannerName = "3"
|
||||||
|
maxScannerName = "16"
|
||||||
|
|
||||||
LenHeaderXAuthorization = 36
|
LenHeaderXAuthorization = 36
|
||||||
lenHeaderXAuthorization = "36"
|
lenHeaderXAuthorization = "36"
|
||||||
|
@ -43,6 +45,7 @@ var (
|
||||||
generalRules = map[string]string{
|
generalRules = map[string]string{
|
||||||
"Username": "required,min=" + minUsername + ",max=" + maxUsername,
|
"Username": "required,min=" + minUsername + ",max=" + maxUsername,
|
||||||
"Password": "required", // length is checked later because sent in base64
|
"Password": "required", // length is checked later because sent in base64
|
||||||
"SessionId": "required,len" + lenHeaderXAuthorization,
|
"SessionId": "required,len=" + lenHeaderXAuthorization,
|
||||||
|
"ScannerName": "required,min=" + minScannerName + ",max=" + maxScannerName,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -30,5 +30,8 @@ func ValidateStruct(event interface{}) []*ErrorResponse {
|
||||||
}
|
}
|
||||||
|
|
||||||
func ValidatorInit() {
|
func ValidatorInit() {
|
||||||
Validate.RegisterStructValidationMapRules(generalRules, structs.UserLoginRequest{}, structs.UserSignOutSessionRequest{})
|
Validate.RegisterStructValidationMapRules(generalRules,
|
||||||
|
structs.UserLoginRequest{},
|
||||||
|
structs.UserSignOutSessionRequest{},
|
||||||
|
structs.ScannerRequest{})
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
package jxscanner
|
||||||
|
|
||||||
|
import (
|
||||||
|
"janex/admin-dashboard-backend/modules/database"
|
||||||
|
"janex/admin-dashboard-backend/modules/structs"
|
||||||
|
"janex/admin-dashboard-backend/modules/utils"
|
||||||
|
"janex/admin-dashboard-backend/routers/router/api/v1/user"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
"github.com/savsgio/gotils/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
func AddScanner(c *fiber.Ctx) error {
|
||||||
|
var body structs.ScannerRequest
|
||||||
|
|
||||||
|
if err := c.BodyParser(&body); err != nil {
|
||||||
|
log.Error().Msg("Failed to parse body, err: " + err.Error())
|
||||||
|
return c.Status(fiber.StatusBadRequest).JSON(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := utils.ValidateStruct(body); err != nil {
|
||||||
|
log.Error().Msgf("Failed to validate body, err: %s", err)
|
||||||
|
return c.SendStatus(fiber.StatusBadRequest)
|
||||||
|
}
|
||||||
|
|
||||||
|
id := uuid.V4()
|
||||||
|
session, err := user.GenerateSession()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Msgf("Failed to create session for scanner: %v", err)
|
||||||
|
return c.SendStatus(fiber.StatusInternalServerError)
|
||||||
|
}
|
||||||
|
|
||||||
|
database.DB.Create(&structs.Scanner{
|
||||||
|
Id: id,
|
||||||
|
Session: session,
|
||||||
|
Name: body.ScannerName,
|
||||||
|
UserAgent: string(c.Context().UserAgent()),
|
||||||
|
RegisteredAt: time.Now(),
|
||||||
|
})
|
||||||
|
|
||||||
|
return c.JSON(structs.ScannerResponse{Id: id, Session: session})
|
||||||
|
}
|
|
@ -53,7 +53,7 @@ func UserLogin(c *fiber.Ctx) error {
|
||||||
return c.SendStatus(fiber.StatusBadRequest)
|
return c.SendStatus(fiber.StatusBadRequest)
|
||||||
}
|
}
|
||||||
|
|
||||||
session, err := generateSession()
|
session, err := GenerateSession()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return c.SendStatus(fiber.StatusInternalServerError)
|
return c.SendStatus(fiber.StatusInternalServerError)
|
||||||
|
@ -97,7 +97,7 @@ func validatePasswordLength(password string) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateSession() (string, error) {
|
func GenerateSession() (string, error) {
|
||||||
var letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
var letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
||||||
|
|
||||||
r := make([]byte, 36)
|
r := make([]byte, 36)
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"janex/admin-dashboard-backend/modules/database"
|
"janex/admin-dashboard-backend/modules/database"
|
||||||
"janex/admin-dashboard-backend/modules/structs"
|
"janex/admin-dashboard-backend/modules/structs"
|
||||||
"janex/admin-dashboard-backend/modules/utils"
|
"janex/admin-dashboard-backend/modules/utils"
|
||||||
|
"janex/admin-dashboard-backend/routers/router/api/v1/jxscanner"
|
||||||
"janex/admin-dashboard-backend/routers/router/api/v1/user"
|
"janex/admin-dashboard-backend/routers/router/api/v1/user"
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
|
@ -18,6 +19,9 @@ func SetupRoutes(app *fiber.App) {
|
||||||
u.Delete("/session/:idForDeletion", userSessionValidation, user.SignOutSession)
|
u.Delete("/session/:idForDeletion", userSessionValidation, user.SignOutSession)
|
||||||
u.Post("/avatar", userSessionValidation, user.UpdateAvatar)
|
u.Post("/avatar", userSessionValidation, user.UpdateAvatar)
|
||||||
|
|
||||||
|
s := v1.Group("/scanner")
|
||||||
|
s.Post("/", jxscanner.AddScanner)
|
||||||
|
|
||||||
app.Static("/", "./public")
|
app.Static("/", "./public")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue