From 00674234ec726439aa50203d5dd0334e0e57004b Mon Sep 17 00:00:00 2001 From: Alexander Date: Fri, 18 Apr 2025 09:51:50 +0300 Subject: [PATCH] 123 --- README.md | 5 ++ cmd/client/main.go | 14 +++++ cmd/server/main.go | 16 ++++++ go.mod | 39 +++++++++++++ go.sum | 123 +++++++++++++++++++++++++++++++++++++++++ handlers/register.go | 93 +++++++++++++++++++++++++++++++ models/user.go | 17 ++++++ pb_data/auxiliary.db | Bin 0 -> 45056 bytes pb_data/data.db | Bin 0 -> 163840 bytes web/register_form.html | 104 ++++++++++++++++++++++++++++++++++ 10 files changed, 411 insertions(+) create mode 100644 cmd/client/main.go create mode 100644 cmd/server/main.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 handlers/register.go create mode 100644 models/user.go create mode 100644 pb_data/auxiliary.db create mode 100644 pb_data/data.db create mode 100644 web/register_form.html diff --git a/README.md b/README.md index 8b3508b..cada9dc 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,7 @@ # pocketbase-signer +``` +админская панель: +login:"admin@admin.ru +password:"0123456789" +``` \ No newline at end of file diff --git a/cmd/client/main.go b/cmd/client/main.go new file mode 100644 index 0000000..3f65b16 --- /dev/null +++ b/cmd/client/main.go @@ -0,0 +1,14 @@ +package main + +import ( + "pocketbaseSigner/handlers" + "log" + "net/http" +) + +func main() { + http.HandleFunc("/register", handlers.RegisterFormHandler) + + log.Println("Сервер запущен на :8080") + log.Fatal(http.ListenAndServe(":8080", nil)) +} \ No newline at end of file diff --git a/cmd/server/main.go b/cmd/server/main.go new file mode 100644 index 0000000..8c307bf --- /dev/null +++ b/cmd/server/main.go @@ -0,0 +1,16 @@ +package main + +import ( + "log" + + "github.com/pocketbase/pocketbase" + +) + +func main() { + app := pocketbase.New() + + if err := app.Start(); err != nil { + log.Fatal(err) + } +} \ No newline at end of file diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..d50a44e --- /dev/null +++ b/go.mod @@ -0,0 +1,39 @@ +module pocketbaseSigner + +go 1.24.2 + +require github.com/pocketbase/pocketbase v0.26.6 + +require ( + github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect + github.com/disintegration/imaging v1.6.2 // indirect + github.com/domodwyer/mailyak/v3 v3.6.2 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/fatih/color v1.18.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.8 // indirect + github.com/ganigeorgiev/fexpr v0.4.1 // indirect + github.com/go-ozzo/ozzo-validation/v4 v4.3.0 // indirect + github.com/golang-jwt/jwt/v5 v5.2.2 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/ncruces/go-strftime v0.1.9 // indirect + github.com/pocketbase/dbx v1.11.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/spf13/cast v1.7.1 // indirect + github.com/spf13/cobra v1.9.1 // indirect + github.com/spf13/pflag v1.0.6 // indirect + golang.org/x/crypto v0.36.0 // indirect + golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 // indirect + golang.org/x/image v0.25.0 // indirect + golang.org/x/net v0.37.0 // indirect + golang.org/x/oauth2 v0.28.0 // indirect + golang.org/x/sync v0.12.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect + modernc.org/libc v1.61.13 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.8.2 // indirect + modernc.org/sqlite v1.36.3 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..1f5c15e --- /dev/null +++ b/go.sum @@ -0,0 +1,123 @@ +github.com/asaskevich/govalidator v0.0.0-20200108200545-475eaeb16496/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/disintegration/imaging v1.6.2 h1:w1LecBlG2Lnp8B3jk5zSuNqd7b4DXhcjwek1ei82L+c= +github.com/disintegration/imaging v1.6.2/go.mod h1:44/5580QXChDfwIclfc/PCwrr44amcmDAg8hxG0Ewe4= +github.com/domodwyer/mailyak/v3 v3.6.2 h1:x3tGMsyFhTCaxp6ycgR0FE/bu5QiNp+hetUuCOBXMn8= +github.com/domodwyer/mailyak/v3 v3.6.2/go.mod h1:lOm/u9CyCVWHeaAmHIdF4RiKVxKUT/H5XX10lIKAL6c= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= +github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= +github.com/ganigeorgiev/fexpr v0.4.1 h1:hpUgbUEEWIZhSDBtf4M9aUNfQQ0BZkGRaMePy7Gcx5k= +github.com/ganigeorgiev/fexpr v0.4.1/go.mod h1:RyGiGqmeXhEQ6+mlGdnUleLHgtzzu/VGO2WtJkF5drE= +github.com/go-ozzo/ozzo-validation/v4 v4.3.0 h1:byhDUpfEwjsVQb1vBunvIjh2BHQ9ead57VkAEY4V+Es= +github.com/go-ozzo/ozzo-validation/v4 v4.3.0/go.mod h1:2NKgrcHl3z6cJs+3Oo940FPRiTzuqKbvfrL2RxCj6Ew= +github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= +github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= +github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4= +github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pocketbase/dbx v1.11.0 h1:LpZezioMfT3K4tLrqA55wWFw1EtH1pM4tzSVa7kgszU= +github.com/pocketbase/dbx v1.11.0/go.mod h1:xXRCIAKTHMgUCyCKZm55pUOdvFziJjQfXaWKhu2vhMs= +github.com/pocketbase/pocketbase v0.26.6 h1:ya+D2QK5DP3ynntCEJPj5Sc6hl9KZ+ZsfxVKp9UCB4o= +github.com/pocketbase/pocketbase v0.26.6/go.mod h1:Pd+NfdYGBHXJOi9OI5WHS/Shn7J0iDSv5rNcCZ93LJM= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= +github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= +github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ= +golang.org/x/image v0.25.0/go.mod h1:tCAmOEGthTtkalusGp1g3xa2gke8J6c2N565dTyl9Rs= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= +golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= +golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +modernc.org/cc/v4 v4.24.4 h1:TFkx1s6dCkQpd6dKurBNmpo+G8Zl4Sq/ztJ+2+DEsh0= +modernc.org/cc/v4 v4.24.4/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= +modernc.org/ccgo/v4 v4.23.16 h1:Z2N+kk38b7SfySC1ZkpGLN2vthNJP1+ZzGZIlH7uBxo= +modernc.org/ccgo/v4 v4.23.16/go.mod h1:nNma8goMTY7aQZQNTyN9AIoJfxav4nvTnvKThAeMDdo= +modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= +modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= +modernc.org/gc/v2 v2.6.3 h1:aJVhcqAte49LF+mGveZ5KPlsp4tdGdAOT4sipJXADjw= +modernc.org/gc/v2 v2.6.3/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= +modernc.org/libc v1.61.13 h1:3LRd6ZO1ezsFiX1y+bHd1ipyEHIJKvuprv0sLTBwLW8= +modernc.org/libc v1.61.13/go.mod h1:8F/uJWL/3nNil0Lgt1Dpz+GgkApWh04N3el3hxJcA6E= +modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= +modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= +modernc.org/memory v1.8.2 h1:cL9L4bcoAObu4NkxOlKWBWtNHIsnnACGF/TbqQ6sbcI= +modernc.org/memory v1.8.2/go.mod h1:ZbjSvMO5NQ1A2i3bWeDiVMxIorXwdClKE/0SZ+BMotU= +modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8= +modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns= +modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w= +modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE= +modernc.org/sqlite v1.36.3 h1:qYMYlFR+rtLDUzuXoST1SDIdEPbX8xzuhdF90WsX1ss= +modernc.org/sqlite v1.36.3/go.mod h1:ADySlx7K4FdY5MaJcEv86hTJ0PjedAloTUuif0YS3ws= +modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= +modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= +modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= +modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= diff --git a/handlers/register.go b/handlers/register.go new file mode 100644 index 0000000..6bcd76d --- /dev/null +++ b/handlers/register.go @@ -0,0 +1,93 @@ +package handlers + +import ( + "fmt" + "log" + "net/http" + "pocketbaseSigner/models" + "encoding/json" + "bytes" + "io/ioutil" +) + +type UserResponse struct { + ID string `json:"id"` + Email string `json:"email"` + FirstName string `json:"first_name"` + LastName string `json:"last_name"` +} + +func RegisterFormHandler(w http.ResponseWriter, r *http.Request) { + if r.Method == http.MethodGet { + http.ServeFile(w, r, "./web/register_form.html") + return + } + + if r.Method == http.MethodPost { + err := r.ParseForm() + if err != nil { + http.Error(w, "Ошибка при обработке формы", http.StatusBadRequest) + return + } + + user := models.UserForm{ + LastName: r.FormValue("lastname"), + FirstName: r.FormValue("firstname"), + Phone: r.FormValue("phone"), + Email: r.FormValue("email"), + Password: r.FormValue("password"), + Password_confirm: r.FormValue("password_confirm"), + } + + // Проверка + if user.Email == "" || user.Password == "" { + http.Error(w, "Email и пароль обязательны!", http.StatusBadRequest) + return + } + if user.Password != user.Password_confirm { + http.Error(w, "Пароли не совпали", http.StatusBadRequest) + return + } + + log.Printf("Получен пользователь: %+v\n", user) + + url:= "http://localhost:8090/api/collections/users/records" + + jsonData, err := json.Marshal(user) + if err != nil { + fmt.Println("Ошибка marshaling:", err) + return + } + + resp, err := http.Post(url, "application/json", bytes.NewBuffer(jsonData)) + if err != nil { + fmt.Println("Ошибка запроса:", err) + return + } + defer resp.Body.Close() + + body, err := ioutil.ReadAll(resp.Body) + if err != nil { + fmt.Println("Ошибка чтения ответа:", err) + return + } + + // Проверка статуса + if resp.StatusCode != http.StatusOK { + fmt.Printf("Ошибка: %d, %s\n", resp.StatusCode, string(body)) + return + } + + // Парсинг ответа + var userResponse UserResponse + if err := json.Unmarshal(body, &userResponse); err != nil { + fmt.Println("Ошибка парсинга ответа:", err) + return + } + + fmt.Printf("Пользователь создан: ID=%s, Email=%s, Имя=%s\n", + userResponse.ID, userResponse.Email, userResponse.FirstName) + } + + http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed) +} diff --git a/models/user.go b/models/user.go new file mode 100644 index 0000000..eb63192 --- /dev/null +++ b/models/user.go @@ -0,0 +1,17 @@ +package models + +type UserForm struct { + LastName string + FirstName string + Email string + Password string + Phone string + Password_confirm string +} + +type UserResponse struct { + ID string `json:"id"` + Email string `json:"email"` + FirstName string `json:"first_name"` + LastName string `json:"last_name"` +} \ No newline at end of file diff --git a/pb_data/auxiliary.db b/pb_data/auxiliary.db new file mode 100644 index 0000000000000000000000000000000000000000..0f852661e11842ff18b27205075d02dbdcccbc7e GIT binary patch literal 45056 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 literal 0 HcmV?d00001 diff --git a/pb_data/data.db b/pb_data/data.db new file mode 100644 index 0000000000000000000000000000000000000000..7fb0d89a8b384e7418583862c870d239fd7893b3 GIT binary patch literal 163840 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 + + + + + Регистрация / Авторизация + + + + +
+

Сервис подписи файлов

+

Регистрация

+
+
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+
+ + + \ No newline at end of file