浏览代码

got the login working to read and write data to the conf

juan 1 周之前
父节点
当前提交
89a17e2354
共有 1 个文件被更改,包括 153 次插入18 次删除
  1. 153 18
      lib/login.dart

+ 153 - 18
lib/login.dart

@@ -1,9 +1,10 @@
 import 'dart:convert';
+import 'package:crab_ui/configManager.dart';
 import 'package:flutter/material.dart';
+// import 'package:flutter_widget_from_html/flutter_widget_from_html.dart';
 import 'package:http/http.dart' as http;
-import 'package:shared_preferences/shared_preferences.dart';
-import 'dart:io';
-import 'package:path_provider/path_provider.dart';
+// import 'package:shared_preferences/shared_preferences.dart';
+import 'package:flutter/services.dart' show rootBundle;
 
 class AuthService {
   Future<bool> isUserLoggedIn() async {
@@ -24,6 +25,29 @@ class AuthService {
     return false;
   }
 
+  Future<String> readConfFile() async {
+    final content = await rootBundle.loadString('/crabmail.conf');
+    return content;
+  }
+
+  Map<String, String> parseConfFile(String content) {
+    final Map<String, String> config = {};
+    final lines = content.split('\n');
+
+    for (var line in lines) {
+      line = line.trim();
+      if (line.isEmpty || line.startsWith('#')) continue;
+
+      final parts = line.split('=');
+      if (parts.length == 2) {
+        final key = parts[0].trim();
+        final value = parts[1].trim();
+        config[key] = value;
+      }
+    }
+    return config;
+  }
+
   Future<bool> loginUser(String email, String password) async {
     try {} catch (e) {}
     return false;
@@ -57,7 +81,6 @@ class _SplashScreenState extends State<SplashScreen> {
     bool isLoggedIn = await _authService.isUserLoggedIn();
     print("is loogeed in $isLoggedIn");
     if (isLoggedIn) {
-      print('here');
       Navigator.pushReplacementNamed(context, '/home');
     } else {
       Navigator.pushReplacementNamed(context, '/login');
@@ -77,12 +100,29 @@ class _SplashScreenState extends State<SplashScreen> {
 class _LoginPageState extends State<LoginPage> {
   final AuthService _authService = AuthService();
   // Controllers for capturing user input
+  final TextEditingController _ipController = TextEditingController();
+  final TextEditingController _portController = TextEditingController();
   final TextEditingController _emailController = TextEditingController();
   final TextEditingController _passwordController = TextEditingController();
 
+  // final ConfigManager _configManager =
+  //     ConfigManager("${Directory.current.parent}../crabmail2.conf");
   // Key to identify the form
   final _formKey = GlobalKey<FormState>();
 
+  Future<bool> setIp(String ip) async {
+    // _configManager.setField("api_addr", ip);
+    return false;
+  }
+
+  Future<bool> setPort(String port) async {
+    return false;
+  }
+
+  // Future<bool> _checkConfiguration() async {
+  //   return false;
+  // }
+
   // void checkLogin() async {
   //   try {
   //     var url = Uri.http('127.0.0.1:3001', 'is_logged_in');
@@ -98,24 +138,74 @@ class _LoginPageState extends State<LoginPage> {
   // }
 
   // Function to handle login action
-  void _handleLogin() {
+  Future<void> _handleLogin() async {
     if (_formKey.currentState!.validate()) {
       // Perform login action (e.g., authenticate with backend)
+      String ip = _ipController.text;
+      String port = _portController.text;
       String email = _emailController.text;
       String password = _passwordController.text;
 
       // For demonstration, just print the values
       print('Email: $email');
       print('Password: $password');
+      print(ip);
+      print(port);
 
+      final String baseUrl = "http://127.0.0.1:5000";
+
+      try {
+        final response = await http.get(Uri.parse('${baseUrl}/read-config'));
+        print(response.statusCode);
+        print(response.body);
+        if (response.statusCode == 200) {
+          final data = jsonDecode(response.body);
+          // return data['config'];
+        }
+      } catch (e) {
+        print("caught in catch");
+        print(e);
+      }
+      Map<String, dynamic> updates = {
+        "username": email,
+        "password": password,
+        "api_addr": ip,
+        "api_port": port,
+      };
+      print("past");
+
+      try {
+        final sending = await http.post(Uri.parse('$baseUrl/update-config'),
+            headers: {'Content-Type': "application/json"},
+            body: jsonEncode(updates));
+        print("sending");
+      } catch (e) {
+        print(e);
+      }
+
+      // final content = await _authService.readConfFile();
+      // final config = await _authService.parseConfFile(content);
+      // print("BASE URL ${config["base_url"]}");
+      // print("api address ${config["api_addr"]}");
+      // print(config);
+      // const url = ''
       // Clear the input fields
-      _emailController.clear();
-      _passwordController.clear();
+      // _ipController.clear();
+      // _portController.clear();
+      // _emailController.clear();
+      // _passwordController.clear();
     }
   }
 
   @override
   Widget build(BuildContext context) {
+    // try {
+    //   _configManager.loadConfig();
+    //   print(_configManager.getField('base_url'));
+    // } catch (e) {
+    //   print("broke at build $e");
+    // }
+    // _configManager.
     return Center(
       child: Scaffold(
         appBar: AppBar(
@@ -136,6 +226,50 @@ class _LoginPageState extends State<LoginPage> {
                     SizedBox(
                       height: 5,
                     ),
+                    Container(
+                      width: 200,
+                      child: TextFormField(
+                        controller: _ipController,
+                        decoration: const InputDecoration(
+                          labelText: "IP",
+                          hintText: 'Enter your IP for the backend',
+                          helperMaxLines: 1,
+                        ),
+                        validator: (value) {
+                          if (value == null || value.isEmpty) {
+                            return 'Please enter your ip';
+                          }
+                        },
+                        // onSaved: (value) async {
+                        //   final content = await _authService.readConfFile();
+                        //   final config =
+                        //       await _authService.parseConfFile(content);
+                        //   print("BASE URL ${config["base_url"]}");
+                        //   print("api address ${config["api_addr"]}");
+                        //   //TODO: call a function to set the field ip in conf
+                        // },
+                      ),
+                    ),
+                    Container(
+                      width: 200,
+                      child: TextFormField(
+                        controller: _portController,
+                        decoration: const InputDecoration(
+                          labelText: "Port",
+                          hintText: 'Enter the port',
+                          helperMaxLines: 1,
+                        ),
+                        validator: (value) {
+                          if (value == null || value.isEmpty) {
+                            return 'Please enter your port';
+                          }
+                          return null;
+                        },
+                        onSaved: (value) {
+                          //TODO: call a function to set the field port in conf
+                        },
+                      ),
+                    ),
                     // Email Field
                     Container(
                       width: 200,
@@ -170,6 +304,7 @@ class _LoginPageState extends State<LoginPage> {
                           hintText: 'Enter your password',
                         ),
                         obscureText: true, // Hide the password text
+                        autofillHints: null,
                         validator: (value) {
                           // Simple password validation
                           if (value == null || value.isEmpty) {
@@ -191,17 +326,17 @@ class _LoginPageState extends State<LoginPage> {
                         child: const Text('Login'),
                       ),
                     ),
-                    SizedBox(
-                      width: 200,
-                      child: ElevatedButton(
-                        // onPressed: checkLogin,
-                        onPressed: () async {
-                          await _authService.isUserLoggedIn();
-                          // print(result);
-                        },
-                        child: const Text('checker'),
-                      ),
-                    )
+                    // SizedBox(
+                    //   width: 200,
+                    //   child: ElevatedButton(
+                    //     // onPressed: checkLogin,
+                    //     onPressed: () async {
+                    //       await _authService.isUserLoggedIn();
+                    //       // print(result);
+                    //     },
+                    //     child: const Text('checker'),
+                    //   ),
+                    // )
                   ],
                 ),
               ),