init control, fix to snake case
This commit is contained in:
parent
75a1927d3a
commit
ee19412965
6
.gitignore
vendored
6
.gitignore
vendored
@ -1,6 +1,6 @@
|
|||||||
# Dragon Knight test/build files
|
# Dragon Knight test/build files
|
||||||
/dk
|
/dk
|
||||||
_sessions.json
|
sessions.json
|
||||||
users.json
|
|
||||||
/tmp
|
/tmp
|
||||||
wal.log
|
*.db-shm
|
||||||
|
*.db-wal
|
||||||
|
9
control.json
Normal file
9
control.json
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"world_size": 200,
|
||||||
|
"open": 1,
|
||||||
|
"admin_email": "",
|
||||||
|
"class_1_name": "Mage",
|
||||||
|
"class_2_name": "Warrior",
|
||||||
|
"class_3_name": "Paladin"
|
||||||
|
}
|
@ -359,14 +359,22 @@ func toSnakeCase(s string) string {
|
|||||||
runes := []rune(s)
|
runes := []rune(s)
|
||||||
|
|
||||||
for i, r := range runes {
|
for i, r := range runes {
|
||||||
if i > 0 && unicode.IsUpper(r) {
|
if i > 0 {
|
||||||
// Don't add underscore if previous char was also uppercase
|
prev := runes[i-1]
|
||||||
// unless next char is lowercase (end of acronym)
|
|
||||||
if !unicode.IsUpper(runes[i-1]) ||
|
// Add underscore before digit if previous char was letter
|
||||||
|
if unicode.IsDigit(r) && unicode.IsLetter(prev) {
|
||||||
|
result.WriteByte('_')
|
||||||
|
}
|
||||||
|
// Add underscore before uppercase letter
|
||||||
|
if unicode.IsUpper(r) {
|
||||||
|
// Don't add if previous was also uppercase (unless end of acronym)
|
||||||
|
if !unicode.IsUpper(prev) ||
|
||||||
(i+1 < len(runes) && unicode.IsLower(runes[i+1])) {
|
(i+1 < len(runes) && unicode.IsLower(runes[i+1])) {
|
||||||
result.WriteByte('_')
|
result.WriteByte('_')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
result.WriteRune(unicode.ToLower(r))
|
result.WriteRune(unicode.ToLower(r))
|
||||||
}
|
}
|
||||||
return result.String()
|
return result.String()
|
||||||
|
@ -95,35 +95,46 @@ func showRegister(ctx sushi.Ctx) {
|
|||||||
|
|
||||||
// processRegister handles registration form submission
|
// processRegister handles registration form submission
|
||||||
func processRegister(ctx sushi.Ctx) {
|
func processRegister(ctx sushi.Ctx) {
|
||||||
|
fmt.Println("DEBUG: Starting registration process")
|
||||||
|
|
||||||
username := strings.TrimSpace(ctx.Form("username").String())
|
username := strings.TrimSpace(ctx.Form("username").String())
|
||||||
email := strings.TrimSpace(ctx.Form("email").String())
|
email := strings.TrimSpace(ctx.Form("email").String())
|
||||||
userPassword := ctx.Form("password").String()
|
userPassword := ctx.Form("password").String()
|
||||||
confirmPassword := ctx.Form("confirm_password").String()
|
confirmPassword := ctx.Form("confirm_password").String()
|
||||||
|
|
||||||
|
fmt.Printf("DEBUG: Form data - username: '%s', email: '%s', password length: %d\n",
|
||||||
|
username, email, len(userPassword))
|
||||||
|
|
||||||
formData := map[string]string{
|
formData := map[string]string{
|
||||||
"username": username,
|
"username": username,
|
||||||
"email": email,
|
"email": email,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := validateRegistration(username, email, userPassword, confirmPassword); err != nil {
|
if err := validateRegistration(username, email, userPassword, confirmPassword); err != nil {
|
||||||
|
fmt.Printf("DEBUG: Validation failed: %v\n", err)
|
||||||
setFlashAndFormData(ctx, err.Error(), formData)
|
setFlashAndFormData(ctx, err.Error(), formData)
|
||||||
ctx.Redirect("/register")
|
ctx.Redirect("/register")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
fmt.Println("DEBUG: Validation passed")
|
||||||
|
|
||||||
// Check if username already exists
|
// Check if username already exists
|
||||||
if _, err := users.ByUsername(username); err == nil {
|
if _, err := users.ByUsername(username); err == nil {
|
||||||
|
fmt.Printf("DEBUG: Username '%s' already exists\n", username)
|
||||||
setFlashAndFormData(ctx, "Username already exists", formData)
|
setFlashAndFormData(ctx, "Username already exists", formData)
|
||||||
ctx.Redirect("/register")
|
ctx.Redirect("/register")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
fmt.Printf("DEBUG: Username '%s' is available\n", username)
|
||||||
|
|
||||||
// Check if email already exists
|
// Check if email already exists
|
||||||
if _, err := users.ByEmail(email); err == nil {
|
if _, err := users.ByEmail(email); err == nil {
|
||||||
|
fmt.Printf("DEBUG: Email '%s' already exists\n", email)
|
||||||
setFlashAndFormData(ctx, "Email already registered", formData)
|
setFlashAndFormData(ctx, "Email already registered", formData)
|
||||||
ctx.Redirect("/register")
|
ctx.Redirect("/register")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
fmt.Printf("DEBUG: Email '%s' is available\n", email)
|
||||||
|
|
||||||
// Create new user
|
// Create new user
|
||||||
user := users.New()
|
user := users.New()
|
||||||
@ -133,26 +144,34 @@ func processRegister(ctx sushi.Ctx) {
|
|||||||
user.ClassID = 1
|
user.ClassID = 1
|
||||||
user.Auth = 1
|
user.Auth = 1
|
||||||
|
|
||||||
|
fmt.Printf("DEBUG: Created user struct with ID: %d\n", user.ID)
|
||||||
|
|
||||||
// Validate before inserting
|
// Validate before inserting
|
||||||
if err := user.Validate(); err != nil {
|
if err := user.Validate(); err != nil {
|
||||||
|
fmt.Printf("DEBUG: User validation failed: %v\n", err)
|
||||||
setFlashAndFormData(ctx, fmt.Sprintf("Invalid user data: %s", err.Error()), formData)
|
setFlashAndFormData(ctx, fmt.Sprintf("Invalid user data: %s", err.Error()), formData)
|
||||||
ctx.Redirect("/register")
|
ctx.Redirect("/register")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
fmt.Println("DEBUG: User validation passed")
|
||||||
|
|
||||||
if err := user.Insert(); err != nil {
|
if err := user.Insert(); err != nil {
|
||||||
|
fmt.Printf("DEBUG: User insert failed: %v\n", err)
|
||||||
setFlashAndFormData(ctx, "Failed to create account", formData)
|
setFlashAndFormData(ctx, "Failed to create account", formData)
|
||||||
ctx.Redirect("/register")
|
ctx.Redirect("/register")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
fmt.Printf("DEBUG: User inserted successfully with ID: %d\n", user.ID)
|
||||||
|
|
||||||
// Auto-login after registration
|
// Auto-login after registration
|
||||||
ctx.Login(user.ID, user)
|
ctx.Login(user.ID, user)
|
||||||
|
fmt.Printf("DEBUG: User logged in with ID: %d\n", user.ID)
|
||||||
|
|
||||||
// Set success message
|
// Set success message
|
||||||
sess := ctx.GetCurrentSession()
|
sess := ctx.GetCurrentSession()
|
||||||
sess.SetFlash("success", fmt.Sprintf("Greetings, %s!", user.Username))
|
sess.SetFlash("success", fmt.Sprintf("Greetings, %s!", user.Username))
|
||||||
|
|
||||||
|
fmt.Println("DEBUG: Registration completed successfully")
|
||||||
ctx.Redirect("/")
|
ctx.Redirect("/")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
6
main.go
6
main.go
@ -9,6 +9,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
|
"dk/internal/control"
|
||||||
"dk/internal/database"
|
"dk/internal/database"
|
||||||
"dk/internal/models/users"
|
"dk/internal/models/users"
|
||||||
"dk/internal/routes"
|
"dk/internal/routes"
|
||||||
@ -62,10 +63,13 @@ func start(port string) error {
|
|||||||
}
|
}
|
||||||
defer database.DB().Close()
|
defer database.DB().Close()
|
||||||
|
|
||||||
|
control.Init(filepath.Join(cwd, "control.json"))
|
||||||
|
defer control.Save()
|
||||||
|
|
||||||
template.InitializeCache(cwd)
|
template.InitializeCache(cwd)
|
||||||
|
|
||||||
app := sushi.New()
|
app := sushi.New()
|
||||||
sushi.InitSessions(filepath.Join(cwd, "data/_sessions.json"))
|
sushi.InitSessions(filepath.Join(cwd, "data/sessions.json"))
|
||||||
|
|
||||||
app.Use(session.Middleware())
|
app.Use(session.Middleware())
|
||||||
app.Use(auth.Middleware(getUserByID))
|
app.Use(auth.Middleware(getUserByID))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user