From 8e08817c91eb2cbe9e694fc4b35acef4b2dae134 Mon Sep 17 00:00:00 2001 From: damir Date: Sun, 29 Mar 2026 21:06:28 +0000 Subject: [PATCH] Update main.go --- main.go | 105 +++++++++++++++++++++++++++----------------------------- 1 file changed, 51 insertions(+), 54 deletions(-) diff --git a/main.go b/main.go index ffa1b8e..2266335 100644 --- a/main.go +++ b/main.go @@ -5,15 +5,16 @@ import ( "encoding/json" "fmt" "io" + "log" "net/http" "golang.org/x/crypto/bcrypt" ) const ( - nocoURL = "https://nocodb.shaiheprjct.ru/api/v2/tables/mqvqd88xe01rxap/records" - apiToken = "eVqxLwbUQRLQHQ3g44js9vfLHvIdWhllLZwKfW25" + nocoURL = "https://nocodb.shaiheprjct.ru/api/v2/tables/mqvqd88xe01rxap/records" + apiToken = "eVqxLwbUQRLQHQ3g44js9vfLHvIdWhllLZwKfW25" ) -// Простая структура пользователя + type User struct { Username string `json:"username"` Password string `json:"password"` @@ -24,29 +25,23 @@ func main() { http.HandleFunc("/register", registerHandler) http.HandleFunc("/login", loginHandler) - fmt.Println("Сервер запущен на http://localhost:9000") - // Меняем порт здесь: - err := http.ListenAndServe(":9000", nil) - if err != nil { - fmt.Printf("Ошибка запуска сервера: %v\n", err) + log.Println("✅ Сервер запускается на порту :9000") + if err := http.ListenAndServe(":9000", nil); err != nil { + log.Fatalf("❌ Ошибка запуска сервера: %v", err) } } -// Хэширование пароля -func hashPassword(password string) (string, error) { - bytes, err := bcrypt.GenerateFromPassword([]byte(password), 14) - return string(bytes), err -} - -// Регистрация (отправка в NocoDB) func registerHandler(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" { - user := r.FormValue("username") - pass, _ := hashPassword(r.FormValue("password")) + username := r.FormValue("username") + password := r.FormValue("password") + + log.Printf("--> Регистрация пользователя: %s", username) + hash, _ := bcrypt.GenerateFromPassword([]byte(password), 10) jsonData, _ := json.Marshal(map[string]string{ - "username": user, - "password": pass, + "username": username, + "password": string(hash), }) req, _ := http.NewRequest("POST", nocoURL, bytes.NewBuffer(jsonData)) @@ -54,73 +49,75 @@ func registerHandler(w http.ResponseWriter, r *http.Request) { req.Header.Set("Content-Type", "application/json") client := &http.Client{} - resp, _ := client.Do(req) + resp, err := client.Do(req) + if err != nil { + log.Printf("❌ Ошибка запроса к NocoDB: %v", err) + http.Error(w, err.Error(), 500) + return + } defer resp.Body.Close() - if resp.StatusCode == 200 || resp.StatusCode == 201 { - fmt.Fprint(w, "Регистрация успешна! Теперь можно войти.") + body, _ := io.ReadAll(resp.Body) + log.Printf("<-- Ответ NocoDB (Статус %d): %s", resp.StatusCode, string(body)) + + if resp.StatusCode < 300 { + fmt.Fprint(w, "Регистрация успешна!") } else { - fmt.Fprint(w, "Ошибка регистрации. Возможно, имя занято.") + http.Error(w, "NocoDB error: "+string(body), 500) } } } -// Вход (проверка через NocoDB) func loginHandler(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" { user := r.FormValue("username") pass := r.FormValue("password") - // Поиск пользователя в NocoDB по username + log.Printf("--> Попытка входа: %s", user) + + // Поиск в NocoDB searchURL := fmt.Sprintf("%s?where=(username,eq,%s)", nocoURL, user) req, _ := http.NewRequest("GET", searchURL, nil) req.Header.Set("xc-token", apiToken) client := &http.Client{} - resp, _ := client.Do(req) + resp, err := client.Do(req) + if err != nil { + log.Printf("❌ Ошибка при поиске пользователя: %v", err) + http.Error(w, err.Error(), 500) + return + } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) + log.Printf("<-- Ответ NocoDB (Логин): %s", string(body)) + var result struct { List []User `json:"list"` } - json.Unmarshal(body, &result) + if err := json.Unmarshal(body, &result); err != nil { + log.Printf("❌ Ошибка парсинга JSON: %v", err) + http.Error(w, "Ошибка данных", 500) + return + } if len(result.List) > 0 { err := bcrypt.CompareHashAndPassword([]byte(result.List[0].Password), []byte(pass)) if err == nil { - fmt.Fprintf(w, "Добро пожаловать в личный кабинет, %s!", user) + log.Printf("✅ Пользователь %s успешно вошел", user) + fmt.Fprintf(w, "Добро пожаловать, %s!", user) return } } - fmt.Fprint(w, "Неверный логин или пароль.") + log.Printf("⚠️ Неудачная попытка входа для: %s", user) + fmt.Fprint(w, "Ошибка авторизации") } } - func homePage(w http.ResponseWriter, r *http.Request) { - // Эта строка заставит браузер отобразить форму, а не текст кода w.Header().Set("Content-Type", "text/html; charset=utf-8") - - fmt.Fprint(w, ` - - - Личный кабинет - -

Регистрация

-
- - - -
-
-

Вход

-
- - - -
- - - `) -} + fmt.Fprint(w, `

Личный кабинет

+
+
+
`) +} \ No newline at end of file