Resolves #339 Authenticated webview for panels and config sections
This commit is contained in:
@ -17,13 +17,15 @@ class Panel {
|
||||
final Map config;
|
||||
String icon;
|
||||
bool isHidden = true;
|
||||
bool isWebView = false;
|
||||
|
||||
Panel({this.id, this.type, this.title, this.urlPath, this.icon, this.config}) {
|
||||
if (icon == null || !icon.startsWith("mdi:")) {
|
||||
icon = Panel.iconsByComponent[type];
|
||||
}
|
||||
Logger.d("New panel '$title'. type=$type, icon=$icon, urlPath=$urlPath");
|
||||
isHidden = (type == 'lovelace' || type == 'kiosk' || type == 'states');
|
||||
isHidden = (type == 'lovelace' || type == 'kiosk' || type == 'states' || type == 'profile' || type == 'developer-tools');
|
||||
isWebView = (type != 'config');
|
||||
}
|
||||
|
||||
void handleOpen(BuildContext context) {
|
||||
@ -34,23 +36,7 @@ class Panel {
|
||||
)
|
||||
);
|
||||
} else {
|
||||
String url = "${ConnectionManager().httpWebHost}/$urlPath?external_auth=1";
|
||||
final flutterWebViewPlugin = new FlutterWebviewPlugin();
|
||||
flutterWebViewPlugin.onStateChanged.listen((viewState) async {
|
||||
if (viewState.type == WebViewState.startLoad) {
|
||||
Logger.d("[WebView] Injecting external auth JS");
|
||||
rootBundle.loadString('assets/js/externalAuth.js').then((js){
|
||||
flutterWebViewPlugin.evalJavascript(js.replaceFirst("[token]", ConnectionManager()._token));
|
||||
});
|
||||
}
|
||||
});
|
||||
Navigator.of(context).pushNamed(
|
||||
"/webview",
|
||||
arguments: {
|
||||
"url": "$url",
|
||||
"title": "${this.title}"
|
||||
}
|
||||
);
|
||||
Launcher.launchAuthenticatedWebView(context: context, url: "${ConnectionManager().httpWebHost}/$urlPath", title: "${this.title}");
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user