-
Notifications
You must be signed in to change notification settings - Fork 256
Expand file tree
/
Copy pathflutter_web_auth_web.dart
More file actions
57 lines (53 loc) · 2.07 KB
/
Copy pathflutter_web_auth_web.dart
File metadata and controls
57 lines (53 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import 'dart:async';
import 'dart:convert';
import 'dart:html';
import 'dart:js';
import 'package:flutter/services.dart';
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
class FlutterWebAuthPlugin {
static void registerWith(Registrar registrar) {
final MethodChannel channel = MethodChannel(
'flutter_web_auth', const StandardMethodCodec(), registrar.messenger);
final FlutterWebAuthPlugin instance = FlutterWebAuthPlugin();
channel.setMethodCallHandler(instance.handleMethodCall);
}
Future<dynamic> handleMethodCall(MethodCall call) async {
switch (call.method) {
case 'authenticate':
final String url = call.arguments['url'];
final bool debug = call.arguments['debug'];
return _authenticate(url, debug);
default:
throw PlatformException(
code: 'Unimplemented',
details: "The flutter_web_auth plugin for web doesn't implement "
"the method '${call.method}'");
}
}
static Future<String> _authenticate(String url, bool debug) async {
context.callMethod('open', [url]);
await for (MessageEvent messageEvent in window.onMessage) {
if (messageEvent.origin == Uri.base.origin || debug) {
final flutterWebAuthMessage = messageEvent.data['flutter-web-auth'];
if (flutterWebAuthMessage is String) {
return flutterWebAuthMessage;
}
}
var appleOrigin = Uri(scheme: 'https', host: 'appleid.apple.com');
if (messageEvent.origin == appleOrigin.toString()) {
try {
Map<String, dynamic> data = jsonDecode(messageEvent.data);
if (data['method'] == 'oauthDone') {
final appleAuth = data['data']['authorization'];
if (appleAuth != null) {
final appleAuthQuery = Uri(queryParameters: appleAuth).query;
return appleOrigin.replace(fragment: appleAuthQuery).toString();
}
}
} on FormatException {}
}
}
throw new PlatformException(
code: 'error', message: 'Iterable window.onMessage is empty');
}
}