diff --git a/android/app/build.gradle b/android/app/build.gradle index 4ec4bdf..bb786bb 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -11,6 +11,11 @@ if (flutterRoot == null) { throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } +def keystorePropertiesFile = rootProject.file("key.properties") +def keystoreProperties = new Properties() +keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) + + apply plugin: 'com.android.application' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" @@ -22,8 +27,7 @@ android { } defaultConfig { - // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.authflow" + applicationId "com.aravind.authflow" minSdkVersion 16 targetSdkVersion 27 versionCode 1 @@ -31,10 +35,17 @@ android { testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } + signingConfigs { + release { + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile file(keystoreProperties['storeFile']) + storePassword keystoreProperties['storePassword'] + } + } + buildTypes { release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } } diff --git a/android/key.properties b/android/key.properties new file mode 100644 index 0000000..dd3be94 --- /dev/null +++ b/android/key.properties @@ -0,0 +1,4 @@ +storePassword=aravind +keyPassword=aravind +keyAlias=key +storeFile=/home/aravind/key.jks \ No newline at end of file diff --git a/lib/app/auth_flow.dart b/lib/app/auth_flow.dart index 8fde912..28d17d4 100644 --- a/lib/app/auth_flow.dart +++ b/lib/app/auth_flow.dart @@ -6,12 +6,13 @@ class AuthFlow extends StatelessWidget { @override Widget build(BuildContext context) { return new MaterialApp( - title: 'Authentication Flow', + title: 'Authentication Flow', theme: new ThemeData( primaryColor: Colors.green.shade500, textSelectionColor: Colors.green.shade500, buttonColor: Colors.green.shade500, - accentColor: Colors.green.shade500 + accentColor: Colors.green.shade500, + bottomAppBarColor: Colors.white ), home: new LoginPage(), routes: { diff --git a/lib/app/pages/home_page.dart b/lib/app/pages/home_page.dart index 2b4a29b..865295b 100644 --- a/lib/app/pages/home_page.dart +++ b/lib/app/pages/home_page.dart @@ -19,7 +19,7 @@ class _HomePageState extends State { Future _prefs = SharedPreferences.getInstance(); SharedPreferences _sharedPreferences; - var _authToken, _id, _name; + var _authToken, _id, _name, _homeResponse; @override void initState() { @@ -32,17 +32,44 @@ class _HomePageState extends State { String authToken = AuthUtils.getToken(_sharedPreferences); var id = _sharedPreferences.getInt(AuthUtils.userIdKey); var name = _sharedPreferences.getString(AuthUtils.nameKey); + + print(authToken); + + _fetchHome(authToken); + setState(() { _authToken = authToken; _id = id; _name = name; }); - print(_authToken); + if(_authToken == null) { _logout(); } } + _fetchHome(String authToken) async { + var responseJson = await NetworkUtils.fetch(authToken, '/api/v1/home'); + + if(responseJson == null) { + + NetworkUtils.showSnackBar(_scaffoldKey, 'Something went wrong!'); + + } else if(responseJson == 'NetworkError') { + + NetworkUtils.showSnackBar(_scaffoldKey, null); + + } else if(responseJson['errors'] != null) { + + _logout(); + + } + + setState(() { + _homeResponse = responseJson.toString(); + }); + } + _logout() { NetworkUtils.logoutUser(_scaffoldKey.currentContext, _sharedPreferences); } @@ -62,7 +89,7 @@ class _HomePageState extends State { new Container( padding: const EdgeInsets.all(8.0), child: new Text( - "USER_ID: $_id \nUSER_NAME: $_name", + "USER_ID: $_id \nUSER_NAME: $_name \nHOME_RESPONSE: $_homeResponse", style: new TextStyle( fontSize: 24.0, color: Colors.grey.shade700 diff --git a/lib/app/pages/login_page.dart b/lib/app/pages/login_page.dart index d292279..2edb12e 100644 --- a/lib/app/pages/login_page.dart +++ b/lib/app/pages/login_page.dart @@ -63,14 +63,23 @@ class LoginPageState extends State { var responseJson = await NetworkUtils.authenticateUser( _emailController.text, _passwordController.text ); + print(responseJson); + if(responseJson == null) { + NetworkUtils.showSnackBar(_scaffoldKey, 'Something went wrong!'); + } else if(responseJson == 'NetworkError') { + NetworkUtils.showSnackBar(_scaffoldKey, null); + } else if(responseJson['errors'] != null) { + NetworkUtils.showSnackBar(_scaffoldKey, 'Invalid Email/Password'); + } else { + AuthUtils.insertDetails(_sharedPreferences, responseJson); /** * Removes stack and start with the new page. @@ -78,6 +87,7 @@ class LoginPageState extends State { * **/ Navigator.of(_scaffoldKey.currentContext) .pushReplacementNamed(HomePage.routeName); + } _hideLoading(); } else { diff --git a/lib/app/utils/network_utils.dart b/lib/app/utils/network_utils.dart index 187e075..c371cdc 100644 --- a/lib/app/utils/network_utils.dart +++ b/lib/app/utils/network_utils.dart @@ -1,5 +1,4 @@ import 'dart:convert'; - import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:http/http.dart' as http; @@ -14,11 +13,13 @@ class NetworkUtils { var uri = host + AuthUtils.endPoint; try { - final response = await http.post(uri, body: { - 'email': email, - 'password': password, - 'authenticate': 'user' - }); + final response = await http.post( + uri, + body: { + 'email': email, + 'password': password + } + ); final responseJson = json.decode(response.body); return responseJson; @@ -47,4 +48,28 @@ class NetworkUtils { ) ); } + + static fetch(var authToken, var endPoint) async { + var uri = host + endPoint; + + try { + final response = await http.get( + uri, + headers: { + 'Authorization': authToken + }, + ); + + final responseJson = json.decode(response.body); + return responseJson; + + } catch (exception) { + print(exception); + if(exception.toString().contains('SocketException')) { + return 'NetworkError'; + } else { + return null; + } + } + } } \ No newline at end of file