package main import ( "database/sql" "encoding/json" "fmt" "log" "net/http" "os" "github.com/gorilla/handlers" _ "github.com/mattn/go-sqlite3" ) type User struct { ID int `json:"id"` Email string `json:"email"` Password string `json:"password"` } var db *sql.DB func initDB() { var err error dbFile := "users.db" db, err = sql.Open("sqlite3", dbFile) if err != nil { log.Fatal("Ошибка подключения к базе данных:", err) } fmt.Println("База данных готова к работе.") } func loginHandler(w http.ResponseWriter, r *http.Request) { log.Printf("Received request with method: %s", r.Method) if r.Method != http.MethodPost { http.Error(w, "Метод не поддерживается", http.StatusMethodNotAllowed) return } var user User if err := json.NewDecoder(r.Body).Decode(&user); err != nil { http.Error(w, "Ошибка обработки JSON", http.StatusBadRequest) return } // Check if the email and password are provided if user.Email == "" || user.Password == "" { http.Error(w, "Email и пароль обязательны", http.StatusBadRequest) return } // Query the database to check if the user exists query := `SELECT id, email, password FROM users WHERE email = ?` var dbUser User err := db.QueryRow(query, user.Email).Scan(&dbUser.ID, &dbUser.Email, &dbUser.Password) if err != nil { if err == sql.ErrNoRows { // Если пользователь не найден, просим зарегистрироваться w.WriteHeader(http.StatusNotFound) json.NewEncoder(w).Encode(map[string]string{"message": "Пользователь не найден. Пожалуйста, зарегистрируйтесь."}) } else { http.Error(w, "Ошибка при проверке учетных данных", http.StatusInternalServerError) } return } // Если пользователь найден, проверяем пароль if user.Password != dbUser.Password { http.Error(w, "Неверный пароль", http.StatusUnauthorized) return } // Если пароль совпадает, вход успешен w.WriteHeader(http.StatusOK) json.NewEncoder(w).Encode(map[string]string{"message": "Вход успешен", "email": dbUser.Email}) } func main() { initDB() defer db.Close() // Setup CORS cors := handlers.CORS( handlers.AllowedOrigins([]string{"*"}), handlers.AllowedMethods([]string{"GET", "POST"}), handlers.AllowedHeaders([]string{"Content-Type"}), ) // Register handlers http.HandleFunc("/api/login", loginHandler) // Start server with CORS middleware port := os.Getenv("PORT") if port == "" { port = "8080" } fmt.Println("Go-сервер запущен на порту", port) log.Fatal(http.ListenAndServe(":"+port, cors(http.DefaultServeMux))) }