diff --git a/lib/login.dart b/lib/login.dart index c611a5d..6f49470 100644 --- a/lib/login.dart +++ b/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 isUserLoggedIn() async { @@ -24,6 +25,29 @@ class AuthService { return false; } + Future readConfFile() async { + final content = await rootBundle.loadString('/crabmail.conf'); + return content; + } + + Map parseConfFile(String content) { + final Map 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 loginUser(String email, String password) async { try {} catch (e) {} return false; @@ -57,7 +81,6 @@ class _SplashScreenState extends State { 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 { class _LoginPageState extends State { 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(); + Future setIp(String ip) async { + // _configManager.setField("api_addr", ip); + return false; + } + + Future setPort(String port) async { + return false; + } + + // Future _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 { // } // Function to handle login action - void _handleLogin() { + Future _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 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 { 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 { 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 { 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'), + // ), + // ) ], ), ),