initial commit
This commit is contained in:
77
main.go
Normal file
77
main.go
Normal file
@@ -0,0 +1,77 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"errors"
|
||||
"libshared"
|
||||
"log"
|
||||
"math/big"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type NewAccountRequest struct {
|
||||
Email string `json:"email"`
|
||||
FirstName string `json:"first_name"`
|
||||
LastName string `json:"last_name"`
|
||||
Address string `json:"address"`
|
||||
CountryCode string `json:"country_code"`
|
||||
Password string `json:"password"`
|
||||
}
|
||||
|
||||
type APIResponse struct {
|
||||
Success bool `json:"success"`
|
||||
AccountID int64 `json:"account_id,omitempty"`
|
||||
Error string `json:"error,omitempty"`
|
||||
}
|
||||
|
||||
func generateSecureNumber(digits int) (int64, error) {
|
||||
upperBound := new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(digits)), nil)
|
||||
n, err := rand.Int(rand.Reader, upperBound)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
return n.Int64(), nil
|
||||
}
|
||||
|
||||
func validateRequest(req *NewAccountRequest) error {
|
||||
if strings.TrimSpace(req.Email) == "" {
|
||||
return errors.New("email is required")
|
||||
}
|
||||
if strings.TrimSpace(req.FirstName) == "" {
|
||||
return errors.New("first_name is required")
|
||||
}
|
||||
if strings.TrimSpace(req.LastName) == "" {
|
||||
return errors.New("last_name is required")
|
||||
}
|
||||
if strings.TrimSpace(req.Address) == "" {
|
||||
return errors.New("address is required")
|
||||
}
|
||||
if strings.TrimSpace(req.CountryCode) == "" {
|
||||
return errors.New("country_code is required")
|
||||
}
|
||||
|
||||
// Basic email validation
|
||||
emailRegex := regexp.MustCompile(`^[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$`)
|
||||
if !emailRegex.MatchString(req.Email) {
|
||||
return errors.New("invalid email format")
|
||||
}
|
||||
|
||||
// Optional: enforce ISO country code length (2 letters)
|
||||
if len(req.CountryCode) != 2 {
|
||||
return errors.New("country_code must be 2 characters (ISO code)")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
libshared.Pool = libshared.GetDbPool()
|
||||
|
||||
http.HandleFunc("/account/new", accountNew)
|
||||
log.Println("Server running on :8080")
|
||||
log.Fatal(http.ListenAndServe(":8080", nil))
|
||||
}
|
||||
Reference in New Issue
Block a user