added scanner

main
alex 2023-05-21 22:54:54 +02:00
parent 23035918fc
commit 7d77d089a2
7 changed files with 90 additions and 12 deletions

View File

@ -32,6 +32,7 @@ func InitDatabase() {
db.AutoMigrate(&structs.UserSession{})
db.AutoMigrate(&structs.GroupTasks{})
db.AutoMigrate(&structs.GroupTaskSteps{})
db.AutoMigrate(&structs.Scanner{})
//createUser()
}

View File

@ -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
}

View File

@ -1,12 +1,14 @@
package utils
const (
minUsername = "2"
maxUsername = "20"
minPassword = "6"
MinPassword = 6
maxPassword = "64"
MaxPassword = 64
minUsername = "2"
maxUsername = "20"
minPassword = "6"
MinPassword = 6
maxPassword = "64"
MaxPassword = 64
minScannerName = "3"
maxScannerName = "16"
LenHeaderXAuthorization = 36
lenHeaderXAuthorization = "36"
@ -41,8 +43,9 @@ const (
var (
generalRules = map[string]string{
"Username": "required,min=" + minUsername + ",max=" + maxUsername,
"Password": "required", // length is checked later because sent in base64
"SessionId": "required,len" + lenHeaderXAuthorization,
"Username": "required,min=" + minUsername + ",max=" + maxUsername,
"Password": "required", // length is checked later because sent in base64
"SessionId": "required,len=" + lenHeaderXAuthorization,
"ScannerName": "required,min=" + minScannerName + ",max=" + maxScannerName,
}
)

View File

@ -30,5 +30,8 @@ func ValidateStruct(event interface{}) []*ErrorResponse {
}
func ValidatorInit() {
Validate.RegisterStructValidationMapRules(generalRules, structs.UserLoginRequest{}, structs.UserSignOutSessionRequest{})
Validate.RegisterStructValidationMapRules(generalRules,
structs.UserLoginRequest{},
structs.UserSignOutSessionRequest{},
structs.ScannerRequest{})
}

View File

@ -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})
}

View File

@ -53,7 +53,7 @@ func UserLogin(c *fiber.Ctx) error {
return c.SendStatus(fiber.StatusBadRequest)
}
session, err := generateSession()
session, err := GenerateSession()
if err != nil {
return c.SendStatus(fiber.StatusInternalServerError)
@ -97,7 +97,7 @@ func validatePasswordLength(password string) bool {
return true
}
func generateSession() (string, error) {
func GenerateSession() (string, error) {
var letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
r := make([]byte, 36)

View File

@ -4,6 +4,7 @@ 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/jxscanner"
"janex/admin-dashboard-backend/routers/router/api/v1/user"
"github.com/gofiber/fiber/v2"
@ -18,6 +19,9 @@ func SetupRoutes(app *fiber.App) {
u.Delete("/session/:idForDeletion", userSessionValidation, user.SignOutSession)
u.Post("/avatar", userSessionValidation, user.UpdateAvatar)
s := v1.Group("/scanner")
s.Post("/", jxscanner.AddScanner)
app.Static("/", "./public")
}