From c69d2f2ef4cb6f47c1f5b4c63d444fe10a458aec Mon Sep 17 00:00:00 2001
From: igorwork <markin.io210@gmail.com>
Date: Fri, 19 Jul 2019 13:26:54 +0300
Subject: [PATCH] Implement OAuth2 for third-party apps in iOS.

---
 ios/Runner/Info.plist | 11 ++++++++++-
 lib/app.dart          | 11 +++++++++--
 lib/screens/home.dart | 12 ++++--------
 3 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 30ff88c..bd06ac5 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -28,9 +28,18 @@
 			<key>CFBundleURLSchemes</key>
 			<array>
 				<string>app://com.vereign.app/oauth2</string>
-				<string>vereign://app.vereign.com</string>
 			</array>
 		</dict>
+		<dict>
+            <key>CFBundleTypeRole</key>
+            <string>Editor</string>
+            <key>CFBundleURLName</key>
+            <string>com.vereign.app/auhtorize</string>
+            <key>CFBundleURLSchemes</key>
+            <array>
+                <string>app</string>
+            </array>
+        </dict>
 	</array>
 	<key>CFBundleVersion</key>
 	<string>$(FLUTTER_BUILD_NUMBER)</string>
diff --git a/lib/app.dart b/lib/app.dart
index 18e1165..76cc0a7 100644
--- a/lib/app.dart
+++ b/lib/app.dart
@@ -54,7 +54,7 @@ class _AppState extends State<App> {
 
   updateAppMode(Uri uri) {
     log("Uri $uri");
-    if (uri?.path == "/oauth2") {
+    if (uri?.path == "/auhtorize") {
       setState(() {
         _appMode = "oauth";
         _invokerURL = uri.queryParameters["invokerUrl"];
@@ -66,6 +66,12 @@ class _AppState extends State<App> {
     }
   }
 
+  setMode(String mode) {
+    setState(() {
+      _appMode = mode;
+    });
+  }
+
   @override
   Widget build(BuildContext context) {
     return MaterialApp(
@@ -80,7 +86,8 @@ class _AppState extends State<App> {
         appBar: new AppBar(),
         body: Home(
           mode: _appMode,
-          invokerURL: _invokerURL
+          invokerURL: _invokerURL,
+          setMode: setMode
         )
       ),
     );
diff --git a/lib/screens/home.dart b/lib/screens/home.dart
index 4e85c7b..17abd34 100644
--- a/lib/screens/home.dart
+++ b/lib/screens/home.dart
@@ -6,9 +6,10 @@ import 'dart:developer';
 import 'dart:convert';
 
 class Home extends StatefulWidget {
-  Home({@required this.mode, @required this.invokerURL});
+  Home({@required this.mode, @required this.invokerURL, @required this.setMode});
   final String mode;
   final String invokerURL;
+  final void Function(String) setMode;
 
   @override
   _HomeState createState() => _HomeState();
@@ -46,13 +47,8 @@ class _HomeState extends State<Home> {
               child: Text('Go back'),
               onPressed: () async {
                 Navigator.of(context).pop();
-
-                log('Try launch ${widget.invokerURL}');
-                if (await canLaunch(widget.invokerURL)) {
-                  await launch("${widget.invokerURL}?token=$token");
-                } else {
-                  log('Could not launch ${widget.invokerURL}');
-                }
+                widget.setMode("");
+                await launch("${widget.invokerURL}?token=$token");
               },
             ),
           ],
-- 
GitLab