From 162014041d40828f6e95237da31f84008724ca1b Mon Sep 17 00:00:00 2001 From: eventlOwOp <3064273390@qq.com> Date: Sun, 19 May 2024 01:37:15 +0800 Subject: [PATCH] upload android app --- app/.gitignore | 52 +++ app/.metadata | 33 ++ app/analysis_options.yaml | 28 ++ app/android/.gitignore | 13 + app/android/app/build.gradle | 67 ++++ app/android/app/src/debug/AndroidManifest.xml | 7 + app/android/app/src/main/AndroidManifest.xml | 46 +++ .../zerotier_magisk_app/MainActivity.kt | 5 + .../res/drawable-v21/launch_background.xml | 12 + .../main/res/drawable/launch_background.xml | 12 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../main/res/mipmap-hdpi/launcher_icon.png | Bin 0 -> 6190 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../main/res/mipmap-mdpi/launcher_icon.png | Bin 0 -> 5008 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xhdpi/launcher_icon.png | Bin 0 -> 7455 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxhdpi/launcher_icon.png | Bin 0 -> 10268 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../main/res/mipmap-xxxhdpi/launcher_icon.png | Bin 0 -> 13385 bytes .../app/src/main/res/values-night/styles.xml | 18 + .../app/src/main/res/values/strings.xml | 4 + .../app/src/main/res/values/styles.xml | 18 + .../app/src/profile/AndroidManifest.xml | 7 + app/android/build.gradle | 19 + app/android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 5 + app/android/settings.gradle | 26 ++ app/assets/icon.png | Bin 0 -> 38681 bytes app/lib/authed_client.dart | 36 ++ app/lib/main.dart | 289 +++++++++++++++ app/pubspec.lock | 341 ++++++++++++++++++ app/pubspec.yaml | 101 ++++++ 33 files changed, 1142 insertions(+) create mode 100644 app/.gitignore create mode 100644 app/.metadata create mode 100644 app/analysis_options.yaml create mode 100644 app/android/.gitignore create mode 100644 app/android/app/build.gradle create mode 100644 app/android/app/src/debug/AndroidManifest.xml create mode 100644 app/android/app/src/main/AndroidManifest.xml create mode 100644 app/android/app/src/main/kotlin/com/eventlowop/zerotier_magisk_app/MainActivity.kt create mode 100644 app/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 app/android/app/src/main/res/drawable/launch_background.xml create mode 100644 app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 app/android/app/src/main/res/mipmap-hdpi/launcher_icon.png create mode 100644 app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 app/android/app/src/main/res/mipmap-mdpi/launcher_icon.png create mode 100644 app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 app/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png create mode 100644 app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 app/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png create mode 100644 app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 app/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png create mode 100644 app/android/app/src/main/res/values-night/styles.xml create mode 100644 app/android/app/src/main/res/values/strings.xml create mode 100644 app/android/app/src/main/res/values/styles.xml create mode 100644 app/android/app/src/profile/AndroidManifest.xml create mode 100644 app/android/build.gradle create mode 100644 app/android/gradle.properties create mode 100644 app/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 app/android/settings.gradle create mode 100644 app/assets/icon.png create mode 100644 app/lib/authed_client.dart create mode 100644 app/lib/main.dart create mode 100644 app/pubspec.lock create mode 100644 app/pubspec.yaml diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..6922819 --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,52 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +# Android related +**/android/**/gradle-wrapper.jar +**/android/.gradle +**/android/captures/ +**/android/gradlew +**/android/gradlew.bat +**/android/local.properties +**/android/**/GeneratedPluginRegistrant.java diff --git a/app/.metadata b/app/.metadata new file mode 100644 index 0000000..8725f3d --- /dev/null +++ b/app/.metadata @@ -0,0 +1,33 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "54e66469a933b60ddf175f858f82eaeb97e48c8d" + channel: "stable" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + - platform: android + create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + - platform: web + create_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + base_revision: 54e66469a933b60ddf175f858f82eaeb97e48c8d + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/app/analysis_options.yaml b/app/analysis_options.yaml new file mode 100644 index 0000000..0d29021 --- /dev/null +++ b/app/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/app/android/.gitignore b/app/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/app/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/app/android/app/build.gradle b/app/android/app/build.gradle new file mode 100644 index 0000000..45cc261 --- /dev/null +++ b/app/android/app/build.gradle @@ -0,0 +1,67 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +android { + namespace "com.eventlowop.zerotier_magisk_app" + compileSdk flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.eventlowop.zerotier_magisk_app" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + 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 + } + } +} + +flutter { + source '../..' +} + +dependencies {} diff --git a/app/android/app/src/debug/AndroidManifest.xml b/app/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/app/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app/android/app/src/main/AndroidManifest.xml b/app/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..2e15e0a --- /dev/null +++ b/app/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/android/app/src/main/kotlin/com/eventlowop/zerotier_magisk_app/MainActivity.kt b/app/android/app/src/main/kotlin/com/eventlowop/zerotier_magisk_app/MainActivity.kt new file mode 100644 index 0000000..0a1acff --- /dev/null +++ b/app/android/app/src/main/kotlin/com/eventlowop/zerotier_magisk_app/MainActivity.kt @@ -0,0 +1,5 @@ +package com.eventlowop.zerotier_magisk_app + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() diff --git a/app/android/app/src/main/res/drawable-v21/launch_background.xml b/app/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 0000000..f74085f --- /dev/null +++ b/app/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/app/android/app/src/main/res/drawable/launch_background.xml b/app/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 0000000..304732f --- /dev/null +++ b/app/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/mipmap-hdpi/launcher_icon.png b/app/android/app/src/main/res/mipmap-hdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6d5578185d44cacfd1e092e171bb8f6d70a790fc GIT binary patch literal 6190 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 M07*qoM6N<$f(yvdX#fBK literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 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 literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png b/app/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..add438e4247ef07216de8975cf4990382f964243 GIT binary patch literal 7455 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 literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png b/app/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b3067592f14774a9ae1e8593ec897b49143daf0a GIT binary patch literal 10268 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 literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png b/app/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e1f78c7a36a92220b171b17d83ba68181bcb84 GIT binary patch literal 13385 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 literal 0 HcmV?d00001 diff --git a/app/android/app/src/main/res/values-night/styles.xml b/app/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 0000000..06952be --- /dev/null +++ b/app/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/app/android/app/src/main/res/values/strings.xml b/app/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..92ef5f0 --- /dev/null +++ b/app/android/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + ZeroTier for Magisk + \ No newline at end of file diff --git a/app/android/app/src/main/res/values/styles.xml b/app/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..cb1ef88 --- /dev/null +++ b/app/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/app/android/app/src/profile/AndroidManifest.xml b/app/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 0000000..399f698 --- /dev/null +++ b/app/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/app/android/build.gradle b/app/android/build.gradle new file mode 100644 index 0000000..64006a2 --- /dev/null +++ b/app/android/build.gradle @@ -0,0 +1,19 @@ +allprojects { + repositories { + google() + maven { url 'https://mirrors.tuna.tsinghua.edu.cn/flutter/download.flutter.io' } + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} \ No newline at end of file diff --git a/app/android/gradle.properties b/app/android/gradle.properties new file mode 100644 index 0000000..598d13f --- /dev/null +++ b/app/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx4G +android.useAndroidX=true +android.enableJetifier=true diff --git a/app/android/gradle/wrapper/gradle-wrapper.properties b/app/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..e1ca574 --- /dev/null +++ b/app/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip diff --git a/app/android/settings.gradle b/app/android/settings.gradle new file mode 100644 index 0000000..a6efc8a --- /dev/null +++ b/app/android/settings.gradle @@ -0,0 +1,26 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + } + settings.ext.flutterSdkPath = flutterSdkPath() + + includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.3.0" apply false + id "org.jetbrains.kotlin.android" version "1.7.10" apply false +} + +include ":app" \ No newline at end of file diff --git a/app/assets/icon.png b/app/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b36f455ee6f4dcd99a6134706f77457c1461b8c1 GIT binary patch literal 38681 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 send(http.BaseRequest request) { + request.headers['X-ZT1-Auth'] = _secret; + return _inner.send(request); + } + + // @override + // Future post(Uri url, + // {Map? headers, Object? body, Encoding? encoding}) { + // Map hd = headers ?? {}; + // hd['content-type'] = 'application/json'; + // return super.post(url, headers: hd, body: body, encoding: encoding); + // } +} + +class AuthedClient { + late Future client; + Future loadSecret() async { + final results = await Process.run( + 'su', ['-c', 'cat', '/data/adb/zerotier/home/authtoken.secret']); + return AuthedClientInner(results.stdout.toString().trim(), http.Client()); + } + + AuthedClient() { + client = loadSecret(); + } +} diff --git a/app/lib/main.dart b/app/lib/main.dart new file mode 100644 index 0000000..5f6a087 --- /dev/null +++ b/app/lib/main.dart @@ -0,0 +1,289 @@ +import 'dart:convert'; +import 'package:flutter/material.dart'; +import 'dart:io'; +import 'dart:developer' as developer; +import 'package:flutter/services.dart'; + +import './authed_client.dart'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'ZeroTier for Magisk', + theme: ThemeData( + colorSchemeSeed: Colors.lightBlue, + useMaterial3: true, + brightness: Brightness.light, + ), + darkTheme: ThemeData( + colorSchemeSeed: Colors.lightBlue, + useMaterial3: true, + brightness: Brightness.dark, + ), + home: const MyHomePage(), + debugShowCheckedModeBanner: false, + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({super.key}); + + @override + State createState() => _MyHomePageState(); +} + +Future zerotierCommand(String exe, String command) { + return Process.run('su', ['-c', '/data/adb/zerotier/$exe', command], + environment: {'LD_LIBRARY_PATH': '/data/adb/zerotier/lib'}); +} + +class _MyHomePageState extends State { + List networkList = []; + bool runningStatus = false; + + final AuthedClient authed = AuthedClient(); + + loadNetwork() async { + final client = await authed.client; + final resp = await client.get( + Uri.http('localhost:9993', 'network'), + ); + final body = jsonDecode(resp.body); + networkList = List.from(body.map((u) => u['id'])); + } + + void leaveNetwork(String id) async { + final client = await authed.client; + final resp = await client.delete(Uri.http('localhost:9993', 'network/$id')); + if (resp.statusCode != 200) { + // failed + return; + } + // success + setState(() { + networkList.remove(id); + }); + } + + void joinNetwork(String id) async { + final client = await authed.client; + final resp = await client.put(Uri.http('localhost:9993', 'network/$id')); + if (resp.statusCode != 200) { + // failed + return; + } + // success + if (!networkList.contains(id)) { + setState(() { + networkList.add(id); + }); + } + } + + Future loadStatus() async { + final client = await authed.client; + try { + await client.get(Uri.http('localhost:9993')); + setState(() => runningStatus = true); + return; + } on SocketException { + setState(() => runningStatus = false); + } catch (e) { + developer.log('error', error: e.toString()); + // error + } + } + + late Future loadingNetworkFuture = loadNetwork(); + + @override + void initState() { + super.initState(); + loadStatus(); + } + + Function cmdButtonWrapper(func) { + bool doing = false; + return () => doing + ? null + : () async { + setState(() => doing = true); + await func(); + setState(() => doing = false); + }; + } + + late Function restartFn, startFn, stopFn, joinFn, leaveFn; + + _MyHomePageState() : super() { + restartFn = + cmdButtonWrapper(() => zerotierCommand('zerotier.sh', 'restart')); + startFn = cmdButtonWrapper(() => zerotierCommand('zerotier.sh', 'start')); + stopFn = cmdButtonWrapper(() => zerotierCommand('zerotier.sh', 'stop')); + joinFn = cmdButtonWrapper(() => joinNetwork(_idInputController.text)); + } + + final _idInputController = TextEditingController(); + + homePage({bool title = false}) { + if (title) { + return 'Status'; + } + return Column(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ + Builder(builder: (BuildContext context) { + final color = (runningStatus ? Colors.green : Colors.red)[200]; + + return Column(children: [ + Icon(runningStatus ? Icons.play_arrow : Icons.stop, color: color, size: 72), + Row(mainAxisAlignment: MainAxisAlignment.center, children: [ + Text(runningStatus ? 'Running' : 'Stopped', style: TextStyle(color: color, fontSize: 18)), + IconButton(icon: const Icon(Icons.refresh), onPressed: loadStatus) + ]) + ]); + }), + ButtonBar( + alignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + OutlinedButton.icon( + onPressed: startFn(), + label: const Text('Start'), + icon: const Icon(Icons.play_arrow), + ), + OutlinedButton.icon( + onPressed: restartFn(), + label: const Text('Restart'), + icon: const Icon(Icons.restart_alt), + ), + OutlinedButton.icon( + onPressed: stopFn(), + label: const Text('Stop'), + icon: const Icon(Icons.stop), + ), + ], + ) + ]); + } + + networkPage({bool title = false}) { + if (title) { + return 'Network'; + } + return Padding( + padding: const EdgeInsets.all(12), + child: Column( + children: [ + Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ + SizedBox( + width: 200, + child: TextField( + controller: _idInputController, + textAlign: TextAlign.center, + inputFormatters: [ + FilteringTextInputFormatter.allow(RegExp('[0-9a-f]')) + ], + maxLength: 16, + decoration: const InputDecoration( + labelText: "network id", icon: Icon(Icons.router)))), + OutlinedButton.icon( + onPressed: joinFn(), + label: const Text('Join'), + icon: const Icon(Icons.add)), + ]), + const SizedBox(height: 30), + const Divider(height: 10), + ListTile( + title: const Text('Networks'), + titleTextStyle: const TextStyle(fontSize: 18), + trailing: IconButton( + icon: const Icon(Icons.refresh), + onPressed: () { + setState(() { + loadingNetworkFuture = loadNetwork(); + }); + })), + const SizedBox(height: 10), + FutureBuilder( + future: loadingNetworkFuture, + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.done) { + if (snapshot.hasError) { + return Text('Error: ${snapshot.error}'); + } + return ListView.builder( + shrinkWrap: true, + itemCount: networkList.length, + itemBuilder: (BuildContext ctx, int i) { + return Card( + child: ListTile( + title: Text(networkList[i]), + trailing: SizedBox( + width: 96, + child: Row(children: [ + IconButton( + onPressed: () => Clipboard.setData( + ClipboardData( + text: networkList[i])) + .then, + tooltip: '复制', + icon: const Icon(Icons.copy)), + IconButton( + onPressed: () => + leaveNetwork(networkList[i]), + tooltip: '离开', + icon: const Icon(Icons.close)), + ])))); + }); + } + return const CircularProgressIndicator(); + }, + ), + ], + )); + } + + int currentPageIndex = 0; + genWidgetList({bool title = false}) { + return [ + homePage(title: title), + networkPage(title: title) + ][currentPageIndex]; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text(genWidgetList(title: true))), + bottomNavigationBar: NavigationBar( + onDestinationSelected: (int index) { + setState(() { + currentPageIndex = index; + }); + }, + selectedIndex: currentPageIndex, + destinations: const [ + NavigationDestination( + selectedIcon: Icon(Icons.home), + icon: Icon(Icons.home_outlined), + label: 'Status', + ), + NavigationDestination( + selectedIcon: Icon(Icons.router), + icon: Icon(Icons.router_outlined), + label: 'Network', + ), + ], + ), + body: Center( + child: genWidgetList(), + )); + } +} diff --git a/app/pubspec.lock b/app/pubspec.lock new file mode 100644 index 0000000..7e225d1 --- /dev/null +++ b/app/pubspec.lock @@ -0,0 +1,341 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + archive: + dependency: transitive + description: + name: archive + sha256: ecf4273855368121b1caed0d10d4513c7241dfc813f7d3c8933b36622ae9b265 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "3.5.1" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "2.5.0" + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "0.4.1" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.18.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "3.0.3" + cupertino_icons: + dependency: "direct main" + description: + name: cupertino_icons + sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.0.8" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.3.1" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_launcher_icons: + dependency: "direct dev" + description: + name: flutter_launcher_icons + sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "0.13.1" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "4.0.0" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + http: + dependency: "direct main" + description: + name: http + sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.2.1" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "4.0.2" + image: + dependency: transitive + description: + name: image + sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "4.1.7" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "4.9.0" + launcher_name: + dependency: "direct dev" + description: + name: launcher_name + sha256: "5fc9a8b8de9e255d5f21effc33632b5620771c9b2310d459a7710b725353b305" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.0.2" + leak_tracker: + dependency: transitive + description: + name: leak_tracker + sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "10.0.0" + leak_tracker_flutter_testing: + dependency: transitive + description: + name: leak_tracker_flutter_testing + sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "2.0.1" + leak_tracker_testing: + dependency: transitive + description: + name: leak_tracker_testing + sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "2.0.1" + lints: + dependency: transitive + description: + name: lints + sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "4.0.0" + matcher: + dependency: transitive + description: + name: matcher + sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "0.12.16+1" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "0.8.0" + meta: + dependency: transitive + description: + name: meta + sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.11.0" + path: + dependency: transitive + description: + name: path + sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.9.0" + petitparser: + dependency: transitive + description: + name: petitparser + sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "6.0.2" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.11.1" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "2.1.2" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.2.0" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "0.6.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "1.3.2" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "2.1.4" + vm_service: + dependency: transitive + description: + name: vm_service + sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "13.0.0" + web: + dependency: transitive + description: + name: web + sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "0.5.1" + xml: + dependency: transitive + description: + name: xml + sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://mirrors.tuna.tsinghua.edu.cn/dart-pub/" + source: hosted + version: "3.1.2" +sdks: + dart: ">=3.3.4 <4.0.0" + flutter: ">=1.17.0" diff --git a/app/pubspec.yaml b/app/pubspec.yaml new file mode 100644 index 0000000..8ee27bd --- /dev/null +++ b/app/pubspec.yaml @@ -0,0 +1,101 @@ +name: zerotier_magisk_app +description: "Controller app for zerotier-magisk" +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: '>=3.3.4 <4.0.0' + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.6 + http: ^1.2.1 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^4.0.0 + flutter_launcher_icons: ^0.13.1 + launcher_name: ^1.0.2 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages + +flutter_launcher_icons: + android: "launcher_icon" + ios: false + image_path: "assets/icon.png" + min_sdk_android: 21 # android min sdk min:16, default 21 +launcher_name: + default: "ZeroTier for Magisk" \ No newline at end of file