diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index d045dd5..2285b36 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -48,20 +48,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
LogViewPage(title: "Log"),
"/whats-new": (context) => WhatsNewPage(),
- "/test": (_) => new WebviewScaffold(
- url: "https://www.google.com",
+ "/auth": (context) => new WebviewScaffold(
+ url: "${ConnectionManager().oauthUrl}",
appBar: new AppBar(
- title: new Text("Widget webview"),
+ leading: IconButton(
+ icon: Icon(Icons.help),
+ onPressed: () => Launcher.launchURLInCustomTab(context: context, url: "http://ha-client.homemade.systems/docs#authentication")
+ ),
+ title: new Text("Login with HA"),
+ actions: [
+ FlatButton(
+ child: Text("Manual", style: TextStyle(color: Colors.white)),
+ onPressed: () {
+ eventBus.fire(ShowPageEvent(path: "/connection-settings", goBackFirst: true));
+ },
+ )
+ ],
),
)
},
diff --git a/lib/managers/auth_manager.class.dart b/lib/managers/auth_manager.class.dart
index f8ab80a..6069fb7 100644
--- a/lib/managers/auth_manager.class.dart
+++ b/lib/managers/auth_manager.class.dart
@@ -9,46 +9,37 @@ class AuthManager {
}
AuthManager._internal();
- StreamSubscription deepLinksSubscription;
Future start({String oauthUrl}) {
Completer completer = Completer();
- deepLinksSubscription?.cancel();
- deepLinksSubscription = getUriLinksStream().listen((Uri uri) {
- Logger.d("[LINKED AUTH] We got something private");
- _getTempToken(oauthUrl, uri.queryParameters["code"])
- .then((tempToken) => completer.complete(tempToken))
- .catchError((_){
- completer.completeError(HAError("Auth error"));
- });
- }, onError: (err) {
- Logger.e("[LINKED AUTH] Error handling linked auth: $e");
- completer.completeError(HAError("Auth error"));
- });
- Logger.d("Launching OAuth");
- eventBus.fire(StartAuthEvent(oauthUrl, true));
- return completer.future;
- }
-
- Future _getTempToken(String oauthUrl,String authCode) {
- Completer completer = Completer();
- ConnectionManager().sendHTTPPost(
- endPoint: "/auth/token",
- contentType: "application/x-www-form-urlencoded",
- includeAuthHeader: false,
- data: "grant_type=authorization_code&code=$authCode&client_id=${Uri.encodeComponent('http://ha-client.homemade.systems')}"
+ final flutterWebviewPlugin = new FlutterWebviewPlugin();
+ flutterWebviewPlugin.onUrlChanged.listen((String url) {
+ if (url.startsWith("http://ha-client.homemade.systems/service/auth_callback.html")) {
+ Logger.d("url=$url");
+ String authCode = url.split("=")[1];
+ Logger.d("authCode=$authCode");
+ Logger.d("We have auth code. Getting temporary access token...");
+ ConnectionManager().sendHTTPPost(
+ endPoint: "/auth/token",
+ contentType: "application/x-www-form-urlencoded",
+ includeAuthHeader: false,
+ data: "grant_type=authorization_code&code=$authCode&client_id=${Uri.encodeComponent('http://ha-client.homemade.systems')}"
).then((response) {
Logger.d("Got temp token");
String tempToken = json.decode(response)['access_token'];
+ Logger.d("Closing webview...");
eventBus.fire(StartAuthEvent(oauthUrl, false));
completer.complete(tempToken);
}).catchError((e) {
- //flutterWebviewPlugin.close();
Logger.e("Error getting temp token: ${e.toString()}");
eventBus.fire(StartAuthEvent(oauthUrl, false));
completer.completeError(HAError("Error getting temp token"));
- });
+ }).whenComplete(() => flutterWebviewPlugin.close());
+ }
+ });
+ Logger.d("Launching OAuth");
+ eventBus.fire(StartAuthEvent(oauthUrl, true));
return completer.future;
- }
+ }
}
\ No newline at end of file
diff --git a/lib/managers/connection_manager.class.dart b/lib/managers/connection_manager.class.dart
index 912b5f6..a78738b 100644
--- a/lib/managers/connection_manager.class.dart
+++ b/lib/managers/connection_manager.class.dart
@@ -61,7 +61,7 @@ class ConnectionManager {
oauthUrl = "$httpWebHost/auth/authorize?client_id=${Uri.encodeComponent(
'http://ha-client.homemade.systems')}&redirect_uri=${Uri
.encodeComponent(
- 'haclient://auth')}";
+ 'http://ha-client.homemade.systems/service/auth_callback.html')}";
settingsLoaded = true;
} catch (e) {
completer.completeError(HAError("Error reading login details", actions: [HAErrorAction.tryAgain(type: HAErrorActionType.FULL_RELOAD), HAErrorAction.loginAgain()]));
diff --git a/lib/pages/main.page.dart b/lib/pages/main.page.dart
index 3159b2c..61901a4 100644
--- a/lib/pages/main.page.dart
+++ b/lib/pages/main.page.dart
@@ -239,6 +239,7 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker
_showOAuth();
} else {
_preventAppRefresh = false;
+ Navigator.of(context).pop();
}
});
}
@@ -252,9 +253,7 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker
void _showOAuth() {
_preventAppRefresh = true;
- Launcher.launchURLInCustomTab(
- url: ConnectionManager().oauthUrl
- );
+ Navigator.of(context).pushNamed("/auth", arguments: {"url": ConnectionManager().oauthUrl});
}
_setErrorState(HAError e) {
@@ -436,20 +435,6 @@ class _MainPageState extends State with WidgetsBindingObserver, Ticker
},
),
Divider(),
- new ListTile(
- leading: Icon(Icons.build),
- title: Text("TEST"),
- onTap: () {
- Navigator.of(context).pop();
- final flutterWebviewPlugin = new FlutterWebviewPlugin();
- flutterWebviewPlugin.onUrlChanged.listen((String url) {
- Logger.d("[Webview] URL Changed: $url");
- });
- Logger.d("[Webview] Listener attached");
- Navigator.of(context).pushNamed("/test");
- },
- ),
- Divider(),
new ListTile(
leading: Icon(Icons.help),
title: Text("Help"),
diff --git a/pubspec.yaml b/pubspec.yaml
index 0163755..4347ec7 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -23,7 +23,6 @@ dependencies:
flutter_custom_tabs: ^0.6.0
flutter_webview_plugin: ^0.3.10+1
firebase_messaging: ^5.1.6
- uni_links: ^0.2.0
flutter_secure_storage: ^3.3.1+1
device_info: ^0.4.0+3
flutter_local_notifications: ^0.8.4