Compare commits
	
		
			No commits in common. "6fd8c365f6ad68325a53b5dd24d0cb615ca99899" and "6a0696b9c193db17ae67fe871e35485684521133" have entirely different histories.
		
	
	
		
			6fd8c365f6
			...
			6a0696b9c1
		
	
		
| @ -2,30 +2,31 @@ import 'package:flutter/material.dart'; | |||||||
| import 'package:shared_preferences/shared_preferences.dart'; | import 'package:shared_preferences/shared_preferences.dart'; | ||||||
| import 'package:http/http.dart' as http; | import 'package:http/http.dart' as http; | ||||||
| import 'dart:convert'; | import 'dart:convert'; | ||||||
|  | import 'dart:developer'; | ||||||
| 
 | 
 | ||||||
| enum ApiService { | enum ApiService { | ||||||
|   auth, |   auth, | ||||||
|   app, |   app, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Future<String?> request(BuildContext context, ApiService service, String method, String path, Object? body) async { | Future<String?> request(BuildContext context, ApiService service, String method, | ||||||
|  |     String path, Object? body) async { | ||||||
|  |   log('hello'); | ||||||
|   final messenger = ScaffoldMessenger.of(context); |   final messenger = ScaffoldMessenger.of(context); | ||||||
|   final prefs = await SharedPreferences.getInstance(); |  | ||||||
| 
 | 
 | ||||||
|   final host = switch (service) { |   final host = switch (service) { | ||||||
|     ApiService.auth => const String.fromEnvironment('AUTH_SERVICE_HOST'), |     ApiService.auth => const String.fromEnvironment('AUTH_SERVICE_HOST'), | ||||||
|     ApiService.app => const String.fromEnvironment('APP_SERVICE_HOST'), |     ApiService.app => const String.fromEnvironment('APP_SERVICE_HOST'), | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   final token = prefs.getString('token'); |   log('hello'); | ||||||
|   final Map<String, String> headers = {}; |   log(const String.fromEnvironment('AUTH_SERVICE_HOST')); | ||||||
|   if (token != null) headers.addAll({'Authorization': 'Bearer $token'}); |  | ||||||
| 
 | 
 | ||||||
|   final http.Response response; |   final http.Response response; | ||||||
| 
 | 
 | ||||||
|   try { |   try { | ||||||
|     if (method == 'GET') { |     if (method == 'GET') { | ||||||
|       response = await http.get(Uri.parse(host + path), headers: headers); |       response = await http.get(Uri.parse(host + path)); | ||||||
|     } else { |     } else { | ||||||
|       final function = switch (method) { |       final function = switch (method) { | ||||||
|         'POST' => http.post, |         'POST' => http.post, | ||||||
| @ -34,16 +35,15 @@ Future<String?> request(BuildContext context, ApiService service, String method, | |||||||
|         _ => throw const FormatException('Invalid method'), |         _ => throw const FormatException('Invalid method'), | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       headers.addAll({'Content-Type': 'application/json'}); |  | ||||||
| 
 |  | ||||||
|       response = await function( |       response = await function( | ||||||
|         Uri.parse(host + path), |         Uri.parse(host + path), | ||||||
|         headers: headers, |         headers: {'Content-Type': 'application/json'}, | ||||||
|         body: body != null ? jsonEncode(body) : null, |         body: body != null ? jsonEncode(body) : null, | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
|   } catch (_) { |   } catch (_) { | ||||||
|     messenger.showSnackBar(const SnackBar(content: Text('Unable to connect to server'))); |     messenger.showSnackBar( | ||||||
|  |         const SnackBar(content: Text('Unable to connect to server'))); | ||||||
|     return null; |     return null; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
| @ -52,7 +52,8 @@ Future<String?> request(BuildContext context, ApiService service, String method, | |||||||
|       final json = jsonDecode(response.body); |       final json = jsonDecode(response.body); | ||||||
|       messenger.showSnackBar(SnackBar(content: Text(json['message']))); |       messenger.showSnackBar(SnackBar(content: Text(json['message']))); | ||||||
|     } catch (_) { |     } catch (_) { | ||||||
|       messenger.showSnackBar(SnackBar(content: Text('Something went wrong (HTTP ${response.statusCode})'))); |       messenger.showSnackBar(SnackBar( | ||||||
|  |           content: Text('Something went wrong (HTTP ${response.statusCode})'))); | ||||||
|     } |     } | ||||||
|     return null; |     return null; | ||||||
|   } |   } | ||||||
| @ -74,12 +75,14 @@ Future<bool> isLoggedIn(BuildContext context) async { | |||||||
|     final payload = jsonDecode(String.fromCharCodes(base64Decode(base64))); |     final payload = jsonDecode(String.fromCharCodes(base64Decode(base64))); | ||||||
| 
 | 
 | ||||||
|     if (payload['exp'] < DateTime.now().millisecondsSinceEpoch / 1000) { |     if (payload['exp'] < DateTime.now().millisecondsSinceEpoch / 1000) { | ||||||
|       messenger.showSnackBar(const SnackBar(content: Text('Token expired, please sign in again'))); |       messenger.showSnackBar( | ||||||
|  |           const SnackBar(content: Text('Token expired, please sign in again'))); | ||||||
|       prefs.remove('token'); |       prefs.remove('token'); | ||||||
|       return false; |       return false; | ||||||
|     } |     } | ||||||
|   } catch (e) { |   } catch (e) { | ||||||
|     messenger.showSnackBar(const SnackBar(content: Text('Invalid token, please sign in again'))); |     messenger.showSnackBar( | ||||||
|  |         const SnackBar(content: Text('Invalid token, please sign in again'))); | ||||||
|     prefs.remove('token'); |     prefs.remove('token'); | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -15,7 +15,8 @@ class _LoginPageState extends State<LoginPage> { | |||||||
|   final passwordInput = TextEditingController(); |   final passwordInput = TextEditingController(); | ||||||
| 
 | 
 | ||||||
|   Future<void> _login() async { |   Future<void> _login() async { | ||||||
|     final token = await api.request(context, api.ApiService.auth, 'POST', '/api/Users/login', { |     final token = await api | ||||||
|  |         .request(context, api.ApiService.auth, 'POST', '/api/Users/login', { | ||||||
|       'email': emailInput.text, |       'email': emailInput.text, | ||||||
|       'password': passwordInput.text, |       'password': passwordInput.text, | ||||||
|     }); |     }); | ||||||
| @ -26,7 +27,8 @@ class _LoginPageState extends State<LoginPage> { | |||||||
|     prefs.setString('token', token); |     prefs.setString('token', token); | ||||||
| 
 | 
 | ||||||
|     if (mounted) { |     if (mounted) { | ||||||
|       ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('Successfully logged in'))); |       ScaffoldMessenger.of(context).showSnackBar( | ||||||
|  |           const SnackBar(content: Text('Successfully logged in'))); | ||||||
|       Navigator.pushReplacementNamed(context, '/home'); |       Navigator.pushReplacementNamed(context, '/home'); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| @ -45,18 +47,17 @@ class _LoginPageState extends State<LoginPage> { | |||||||
|               const SizedBox(height: 30), |               const SizedBox(height: 30), | ||||||
|               const Text('Password'), |               const Text('Password'), | ||||||
|               TextField( |               TextField( | ||||||
|                 controller: passwordInput, |                   controller: passwordInput, | ||||||
|                 obscureText: true, |                   obscureText: true, | ||||||
|                 enableSuggestions: false, |                   enableSuggestions: false, | ||||||
|                 autocorrect: false, |                   autocorrect: false), | ||||||
|               ), |  | ||||||
|               const SizedBox(height: 30), |               const SizedBox(height: 30), | ||||||
|               ElevatedButton(onPressed: _login, child: const Text('Login')), |               ElevatedButton(onPressed: _login, child: const Text('Login')), | ||||||
|               const SizedBox(height: 10), |               const SizedBox(height: 10), | ||||||
|               TextButton( |               TextButton( | ||||||
|                 child: const Text('Register account'), |                   child: const Text('Register account'), | ||||||
|                 onPressed: () => Navigator.pushReplacementNamed(context, '/register') |                   onPressed: () => | ||||||
|               ), |                       Navigator.pushReplacementNamed(context, '/register')), | ||||||
|             ]), |             ]), | ||||||
|           ), |           ), | ||||||
|         ), |         ), | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user