58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package core
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/kirsle/blog/core/models/users"
|
|
)
|
|
|
|
// SetupHandler is the initial blog setup route.
|
|
func (b *Blog) SetupHandler(w http.ResponseWriter, r *http.Request) {
|
|
vars := map[string]interface{}{
|
|
"errors": []error{},
|
|
}
|
|
|
|
if r.Method == "POST" {
|
|
var errors []error
|
|
payload := struct {
|
|
Username string
|
|
Password string
|
|
Confirm string
|
|
}{
|
|
Username: r.FormValue("username"),
|
|
Password: r.FormValue("password"),
|
|
Confirm: r.FormValue("confirm"),
|
|
}
|
|
|
|
// Validate stuff.
|
|
if len(payload.Username) == 0 {
|
|
errors = append(errors, fmt.Errorf("Admin Username is required"))
|
|
}
|
|
if len(payload.Password) < 3 {
|
|
errors = append(errors, fmt.Errorf("Admin Password is too short"))
|
|
}
|
|
if payload.Password != payload.Confirm {
|
|
errors = append(errors, fmt.Errorf("Your passwords do not match"))
|
|
}
|
|
|
|
vars["errors"] = errors
|
|
|
|
// No problems?
|
|
if len(errors) == 0 {
|
|
log.Info("Creating admin account %s", payload.Username)
|
|
user := &users.User{
|
|
Username: payload.Username,
|
|
Password: payload.Password,
|
|
}
|
|
err := b.DB.Commit("users/by-name/"+payload.Username, user)
|
|
if err != nil {
|
|
log.Error("Error: %v", err)
|
|
b.BadRequest(w, r, "DB error when writing user")
|
|
}
|
|
}
|
|
}
|
|
|
|
b.RenderTemplate(w, r, "admin/setup", vars)
|
|
}
|