mirror of
https://github.com/Yubico/yubioath-flutter.git
synced 2024-11-27 14:23:18 +03:00
Merge 'main' into fix/adapt-android-log-levels
This commit is contained in:
commit
8fa411dca5
4
.github/workflows/linux.yml
vendored
4
.github/workflows/linux.yml
vendored
@ -36,8 +36,8 @@ jobs:
|
|||||||
flutter test
|
flutter test
|
||||||
flutter analyze
|
flutter analyze
|
||||||
|
|
||||||
- name: Install ykman
|
- name: Build the Helper
|
||||||
run: ./build-ykman.sh
|
run: ./build-helper.sh
|
||||||
|
|
||||||
- name: Build the app
|
- name: Build the app
|
||||||
run: flutter build linux
|
run: flutter build linux
|
||||||
|
4
.github/workflows/macos.yml
vendored
4
.github/workflows/macos.yml
vendored
@ -34,8 +34,8 @@ jobs:
|
|||||||
flutter test
|
flutter test
|
||||||
flutter analyze
|
flutter analyze
|
||||||
|
|
||||||
- name: Install ykman
|
- name: Build the Helper
|
||||||
run: ./build-ykman.sh
|
run: ./build-helper.sh
|
||||||
|
|
||||||
- name: Build the app
|
- name: Build the app
|
||||||
run: flutter build macos
|
run: flutter build macos
|
||||||
|
10
.github/workflows/windows.yml
vendored
10
.github/workflows/windows.yml
vendored
@ -32,8 +32,8 @@ jobs:
|
|||||||
flutter test
|
flutter test
|
||||||
flutter analyze
|
flutter analyze
|
||||||
|
|
||||||
- name: Install ykman
|
- name: Build the Helper
|
||||||
run: .\build-ykman.bat
|
run: .\build-helper.bat
|
||||||
|
|
||||||
- name: Build the app
|
- name: Build the app
|
||||||
run: flutter build windows
|
run: flutter build windows
|
||||||
@ -44,9 +44,9 @@ jobs:
|
|||||||
- name: Move .dll files
|
- name: Move .dll files
|
||||||
run: |
|
run: |
|
||||||
$dest = "build\windows\runner\Release"
|
$dest = "build\windows\runner\Release"
|
||||||
cp $dest\ykman-rpc\MSVCP140.dll $dest\
|
cp $dest\helper\MSVCP140.dll $dest\
|
||||||
cp $dest\ykman-rpc\VCRUNTIME140.dll $dest\
|
cp $dest\helper\VCRUNTIME140.dll $dest\
|
||||||
cp $dest\ykman-rpc\VCRUNTIME140_1.dll $dest\
|
cp $dest\helper\VCRUNTIME140_1.dll $dest\
|
||||||
|
|
||||||
|
|
||||||
- name: Create an unsigned .msi installer package
|
- name: Create an unsigned .msi installer package
|
||||||
|
16
README.adoc
16
README.adoc
@ -7,20 +7,20 @@ https://flutter.dev/desktop
|
|||||||
Development has been done using the "Install from git" method of installing the
|
Development has been done using the "Install from git" method of installing the
|
||||||
SDK, from the "beta" channel.
|
SDK, from the "beta" channel.
|
||||||
|
|
||||||
You will also need to provide a compiled version of ykman-rpc, as described in
|
You will also need to provide a compiled version of the Helper, as described in
|
||||||
the next section.
|
the next section.
|
||||||
|
|
||||||
|
|
||||||
=== Building ykman-rpc
|
=== Building the Yubico Authenticator Helper
|
||||||
Requirements: Python >= 3.8 and Poetry.
|
Requirements: Python >= 3.8 and Poetry.
|
||||||
|
|
||||||
The GUI requires a compiled version of ykman-rpc to run, which is built from
|
The GUI requires a compiled version of Helper to run, which is built from the
|
||||||
the sources in ykman-rpc/ in this repository. This needs to be build prior to
|
sources in helper/ in this repository. This needs to be build prior to running
|
||||||
running `flutter build` or `flutter run`, by running `build-ykman.sh` (or
|
`flutter build` or `flutter run`, by running `build-helper.sh` (or
|
||||||
`build-ykman.bat` on Windows).
|
`build-helper.bat` on Windows).
|
||||||
|
|
||||||
NOTE: You will need to re-run `ykman-build.sh` if changes have been made to
|
NOTE: You will need to re-run `ykman-helper.sh` if changes have been made to
|
||||||
ykman-rpc's code, or if `flutter clean` has been run.
|
Helper's code, or if `flutter clean` has been run.
|
||||||
|
|
||||||
|
|
||||||
=== Running the app
|
=== Running the app
|
||||||
|
10
build-helper.bat
Normal file
10
build-helper.bat
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
echo Building authenticator-helper for Windows...
|
||||||
|
cd helper
|
||||||
|
poetry install
|
||||||
|
rmdir /s /q ..\build\windows\helper
|
||||||
|
poetry run pyinstaller authenticator-helper.spec --distpath ..\build\windows
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
echo All done, output in build/windows/
|
@ -15,22 +15,22 @@ case "$(uname)" in
|
|||||||
OS="windows";;
|
OS="windows";;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
echo "Building ykman-rpc for $OS..."
|
echo "Building authenticator-helper for $OS..."
|
||||||
OUTPUT="build/$OS"
|
OUTPUT="build/$OS"
|
||||||
|
|
||||||
cd ykman-rpc
|
cd helper
|
||||||
poetry install
|
poetry install
|
||||||
rm -rf ../$OUTPUT/ykman-rpc
|
rm -rf ../$OUTPUT/helper
|
||||||
poetry run pyinstaller ykman-rpc.spec --distpath ../$OUTPUT
|
poetry run pyinstaller authenticator-helper.spec --distpath ../$OUTPUT
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
# Fixup permissions (should probably be more strict)
|
# Fixup permissions (should probably be more strict)
|
||||||
find $OUTPUT/ykman-rpc -type f -exec chmod a-x {} +
|
find $OUTPUT/helper -type f -exec chmod a-x {} +
|
||||||
chmod a+x $OUTPUT/ykman-rpc/ykman-rpc
|
chmod a+x $OUTPUT/helper/authenticator-helper
|
||||||
|
|
||||||
# Adhoc sign executable (MacOS)
|
# Adhoc sign executable (MacOS)
|
||||||
if [ "$OS" = "macos" ]; then
|
if [ "$OS" = "macos" ]; then
|
||||||
codesign -f --timestamp --entitlements macos/ykman.entitlements --sign - $OUTPUT/ykman-rpc/ykman-rpc
|
codesign -f --timestamp --entitlements macos/helper.entitlements --sign - $OUTPUT/helper/authenticator-helper
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "All done, output in $OUTPUT/"
|
echo "All done, output in $OUTPUT/"
|
@ -1,10 +0,0 @@
|
|||||||
@echo off
|
|
||||||
|
|
||||||
echo Building ykman-rpc for Windows...
|
|
||||||
cd ykman-rpc
|
|
||||||
poetry install
|
|
||||||
rmdir /s /q ..\build\windows\ykman-rpc
|
|
||||||
poetry run pyinstaller ykman-rpc.spec --distpath ..\build\windows
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
echo All done, output in build/windows/
|
|
@ -1,7 +1,7 @@
|
|||||||
== Packaging for MacOS
|
== Packaging for MacOS
|
||||||
Building the ykman CLI locally will result in an adhoc-signed build, which
|
Building the Helper locally will result in an adhoc-signed build, which works
|
||||||
works for local development, but not for distribution. Before distributing it
|
for local development, but not for distribution. Before distributing it needs
|
||||||
needs to be re-signed. Build the CLI by running `build-ykman.sh`, see the main
|
to be re-signed. Build the Helper by running `build-helper.sh`, see the main
|
||||||
README for details.
|
README for details.
|
||||||
|
|
||||||
To distribute the app you will need the Yubico MacOS signing key. The method of
|
To distribute the app you will need the Yubico MacOS signing key. The method of
|
||||||
@ -14,22 +14,22 @@ To distribute the app outside of the App Store, we need to sign it and Notarize
|
|||||||
it. For Notarization to work, we must enable "hardened runtime" by setting the
|
it. For Notarization to work, we must enable "hardened runtime" by setting the
|
||||||
`--options runtime` when signing.
|
`--options runtime` when signing.
|
||||||
|
|
||||||
==== Signing the ykman CLI
|
==== Signing the Yubico Authenticator Helper
|
||||||
The following commands can be done to re-sign the files using the Yubico
|
The following commands can be done to re-sign the files using the Yubico
|
||||||
signing key:
|
signing key:
|
||||||
|
|
||||||
# Sign the main binary, with the entitlements:
|
# Sign the main binary, with the entitlements:
|
||||||
codesign -f --timestamp --options runtime --entitlements macos/ykman.entitlements --sign 'Application' build/macos/ykman-rpc/ykman-rpc
|
codesign -f --timestamp --options runtime --entitlements macos/helper.entitlements --sign 'Application' build/macos/helper/authenticator-helper
|
||||||
|
|
||||||
# Sign the dylib and so files, without entitlements:
|
# Sign the dylib and so files, without entitlements:
|
||||||
codesign -f --timestamp --options runtime --sign 'Application' $(find build/macos/ykman-rpc/ -name "*.dylib" -o -name "*.so")
|
codesign -f --timestamp --options runtime --sign 'Application' $(find build/macos/helper/ -name "*.dylib" -o -name "*.so")
|
||||||
|
|
||||||
# Sign the Python binary (if it exists), without entitlements:
|
# Sign the Python binary (if it exists), without entitlements:
|
||||||
codesign -f --timestamp --options runtime --sign 'Application' build/macos/ykman-rpc/Python
|
codesign -f --timestamp --options runtime --sign 'Application' build/macos/helper/Python
|
||||||
|
|
||||||
==== Signing the GUI
|
==== Signing the GUI
|
||||||
After signing the CLI, make a release build of the GUI and then re-sign it with
|
After signing the Helper, make a release build of the GUI and then re-sign it
|
||||||
the Yubico key:
|
with the Yubico key:
|
||||||
|
|
||||||
codesign --timestamp --options runtime --sign 'Application' --entitlements macos/Runner/Release.entitlements --deep "build/macos/Build/Products/Release/Yubico Authenticator.app"
|
codesign --timestamp --options runtime --sign 'Application' --entitlements macos/Runner/Release.entitlements --deep "build/macos/Build/Products/Release/Yubico Authenticator.app"
|
||||||
|
|
||||||
@ -71,19 +71,19 @@ Choose the folder you just created.
|
|||||||
|
|
||||||
|
|
||||||
=== Signing for the App Store
|
=== Signing for the App Store
|
||||||
All binaries must have sandbox enabled for the Apple App Store, but the ykman
|
All binaries must have sandbox enabled for the Apple App Store, but the Helper
|
||||||
binary doesn't work when sandboxed AND hardened. Luckily, App Store binaries do
|
binary doesn't work when sandboxed AND hardened. Luckily, App Store binaries do
|
||||||
not need to be hardened. Thus, we need to sign the ykman executable with
|
not need to be hardened. Thus, we need to sign the Helper executable with
|
||||||
sandbox enabled, but NOT as a hardened build. The App Store build also uses a
|
sandbox enabled, but NOT as a hardened build. The App Store build also uses a
|
||||||
different code signing key than the standalone distribution.
|
different code signing key than the standalone distribution.
|
||||||
|
|
||||||
==== Signing the ykman CLI
|
==== Signing the Yubico Authenticator Helper
|
||||||
Follow the same steps as for "standalone", with the exception of signing the `ykman` binary:
|
Follow the same steps as for "standalone", with the exception of signing the `authenticator-helper` binary:
|
||||||
|
|
||||||
# Sign the main binary, with sandbox enabled, without hardened runtime:
|
# Sign the main binary, with sandbox enabled, without hardened runtime:
|
||||||
codesign -f --timestamp --entitlements macos/ykman-sandbox.entitlements --sign 'Application' build/macos/ykman/ykman
|
codesign -f --timestamp --entitlements macos/helper-sandbox.entitlements --sign 'Application' build/macos/helper/authenticator-helper
|
||||||
|
|
||||||
NOTE: This sandboxed ykman will not run on its own, it has to be run as a
|
NOTE: This sandboxed Helper will not run on its own, it has to be run as a
|
||||||
subprocess to the main application.
|
subprocess to the main application.
|
||||||
|
|
||||||
Once you have the signed .app, (no Notarization required) build the package for AppStore submission:
|
Once you have the signed .app, (no Notarization required) build the package for AppStore submission:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from rpc import run_rpc_pipes, run_rpc_socket
|
from helper import run_rpc_pipes, run_rpc_socket
|
||||||
|
|
||||||
import socket
|
import socket
|
||||||
import sys
|
import sys
|
@ -5,7 +5,7 @@ block_cipher = None
|
|||||||
|
|
||||||
|
|
||||||
a = Analysis(
|
a = Analysis(
|
||||||
["ykman-rpc.py"],
|
["authenticator-helper.py"],
|
||||||
pathex=[],
|
pathex=[],
|
||||||
binaries=[],
|
binaries=[],
|
||||||
datas=[],
|
datas=[],
|
||||||
@ -26,14 +26,14 @@ exe = EXE(
|
|||||||
a.scripts,
|
a.scripts,
|
||||||
[],
|
[],
|
||||||
exclude_binaries=True,
|
exclude_binaries=True,
|
||||||
name="ykman-rpc",
|
name="authenticator-helper",
|
||||||
icon="NONE",
|
icon="NONE",
|
||||||
debug=False,
|
debug=False,
|
||||||
bootloader_ignore_signals=False,
|
bootloader_ignore_signals=False,
|
||||||
strip=False,
|
strip=False,
|
||||||
upx=True,
|
upx=True,
|
||||||
console=True,
|
console=True,
|
||||||
manifest="ykman-rpc.exe.manifest",
|
manifest="authenticator-helper.exe.manifest",
|
||||||
version="version_info.txt",
|
version="version_info.txt",
|
||||||
disable_windowed_traceback=False,
|
disable_windowed_traceback=False,
|
||||||
target_arch=None,
|
target_arch=None,
|
||||||
@ -48,5 +48,5 @@ coll = COLLECT(
|
|||||||
strip=False,
|
strip=False,
|
||||||
upx=True,
|
upx=True,
|
||||||
upx_exclude=[],
|
upx_exclude=[],
|
||||||
name="ykman-rpc",
|
name="helper",
|
||||||
)
|
)
|
0
ykman-rpc/poetry.lock → helper/poetry.lock
generated
0
ykman-rpc/poetry.lock → helper/poetry.lock
generated
@ -1,8 +1,12 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "ykman-rpc"
|
name = "authenticator-helper"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
description = "Yubico Authenticator helper app"
|
description = "Yubico Authenticator Helper"
|
||||||
authors = ["Dain Nilsson <dain@yubico.com>"]
|
authors = ["Dain Nilsson <dain@yubico.com>"]
|
||||||
|
packages = [
|
||||||
|
{ include = "helper" },
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
[tool.poetry.dependencies]
|
[tool.poetry.dependencies]
|
||||||
python = "^3.8"
|
python = "^3.8"
|
@ -228,22 +228,22 @@ def log_stderr(stderr):
|
|||||||
@click.command()
|
@click.command()
|
||||||
@click.argument("executable", nargs=-1)
|
@click.argument("executable", nargs=-1)
|
||||||
def shell(executable):
|
def shell(executable):
|
||||||
"""A basic shell for interacting with the ykman rpc."""
|
"""A basic shell for interacting with the Yubico Authenticator Helper."""
|
||||||
rpc = subprocess.Popen( # nosec
|
helper = subprocess.Popen( # nosec
|
||||||
executable or [sys.executable, "ykman-rpc.py"],
|
executable or [sys.executable, "authenticator-helper.py"],
|
||||||
stdin=subprocess.PIPE,
|
stdin=subprocess.PIPE,
|
||||||
stdout=subprocess.PIPE,
|
stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE,
|
stderr=subprocess.PIPE,
|
||||||
encoding="utf8",
|
encoding="utf8",
|
||||||
)
|
)
|
||||||
|
|
||||||
Thread(daemon=True, target=log_stderr, args=(rpc.stderr,)).start()
|
Thread(daemon=True, target=log_stderr, args=(helper.stderr,)).start()
|
||||||
|
|
||||||
click.echo("Shell starting...")
|
click.echo("Shell starting...")
|
||||||
shell = RpcShell(rpc.stdin, cast(IO[str], rpc.stdout))
|
shell = RpcShell(helper.stdin, cast(IO[str], helper.stdout))
|
||||||
shell.cmdloop()
|
shell.cmdloop()
|
||||||
click.echo("Stopping...")
|
click.echo("Stopping...")
|
||||||
rpc.communicate()
|
helper.communicate()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
@ -30,11 +30,11 @@ VSVersionInfo(
|
|||||||
StringTable(
|
StringTable(
|
||||||
'040904b0',
|
'040904b0',
|
||||||
[StringStruct('CompanyName', 'Yubico'),
|
[StringStruct('CompanyName', 'Yubico'),
|
||||||
StringStruct('FileDescription', 'YubiKey Manager RPC'),
|
StringStruct('FileDescription', 'Yubico Authenticator Helper'),
|
||||||
StringStruct('FileVersion', '4.1.0.0'),
|
StringStruct('FileVersion', '4.1.0.0'),
|
||||||
StringStruct('LegalCopyright', 'Copyright (c) 2021 Yubico AB'),
|
StringStruct('LegalCopyright', 'Copyright (c) 2022 Yubico AB'),
|
||||||
StringStruct('OriginalFilename', 'ykman-rpc.exe'),
|
StringStruct('OriginalFilename', 'authenticator-helper.exe'),
|
||||||
StringStruct('ProductName', 'YubiKey Manager'),
|
StringStruct('ProductName', 'Yubico Authenticator'),
|
||||||
StringStruct('ProductVersion', '4.1.0.0')])
|
StringStruct('ProductVersion', '4.1.0.0')])
|
||||||
]),
|
]),
|
||||||
VarFileInfo([VarStruct('Translation', [1033, 1200])])
|
VarFileInfo([VarStruct('Translation', [1033, 1200])])
|
@ -59,10 +59,10 @@ Future<Widget> initialize(List<String> argv) async {
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
// Either use the _YKMAN_EXE environment variable, or look relative to executable.
|
// Either use the _HELPER_PATH environment variable, or look relative to executable.
|
||||||
var exe = Platform.environment['_YKMAN_PATH'];
|
var exe = Platform.environment['_HELPER_PATH'];
|
||||||
if (exe?.isEmpty ?? true) {
|
if (exe?.isEmpty ?? true) {
|
||||||
var relativePath = 'ykman-rpc/ykman-rpc';
|
var relativePath = 'helper/authenticator-helper';
|
||||||
if (Platform.isMacOS) {
|
if (Platform.isMacOS) {
|
||||||
relativePath = '../Resources/' + relativePath;
|
relativePath = '../Resources/' + relativePath;
|
||||||
} else if (Platform.isWindows) {
|
} else if (Platform.isWindows) {
|
||||||
@ -73,10 +73,10 @@ Future<Widget> initialize(List<String> argv) async {
|
|||||||
.toFilePath();
|
.toFilePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
_log.info('Starting subprocess: $exe');
|
_log.info('Starting Helper subprocess: $exe');
|
||||||
final rpc = RpcSession(exe!);
|
final rpc = RpcSession(exe!);
|
||||||
await rpc.initialize();
|
await rpc.initialize();
|
||||||
_log.info('ykman-rpc process started', exe);
|
_log.info('Helper process started', exe);
|
||||||
rpc.setLogLevel(Logger.root.level);
|
rpc.setLogLevel(Logger.root.level);
|
||||||
|
|
||||||
return ProviderScope(
|
return ProviderScope(
|
||||||
|
@ -10,7 +10,7 @@ import 'package:yubico_authenticator/app/logging.dart';
|
|||||||
import '../app/models.dart';
|
import '../app/models.dart';
|
||||||
import 'models.dart';
|
import 'models.dart';
|
||||||
|
|
||||||
final _log = Logger('rpc');
|
final _log = Logger('helper');
|
||||||
|
|
||||||
class Signaler {
|
class Signaler {
|
||||||
final _send = StreamController<String>();
|
final _send = StreamController<String>();
|
||||||
@ -92,7 +92,7 @@ class RpcSession {
|
|||||||
static void _logEntry(String entry) {
|
static void _logEntry(String entry) {
|
||||||
try {
|
try {
|
||||||
final record = jsonDecode(entry);
|
final record = jsonDecode(entry);
|
||||||
Logger('rpc.${record['name']}').log(
|
Logger('helper.${record['name']}').log(
|
||||||
_py2level[record['level']] ?? Level.INFO,
|
_py2level[record['level']] ?? Level.INFO,
|
||||||
record['message'],
|
record['message'],
|
||||||
record['exc_text'],
|
record['exc_text'],
|
||||||
@ -105,7 +105,7 @@ class RpcSession {
|
|||||||
|
|
||||||
Future<void> initialize() async {
|
Future<void> initialize() async {
|
||||||
final process = await Process.start(executable, []);
|
final process = await Process.start(executable, []);
|
||||||
_log.debug('RPC process started');
|
_log.debug('Helper process started');
|
||||||
process.stderr
|
process.stderr
|
||||||
.transform(const Utf8Decoder())
|
.transform(const Utf8Decoder())
|
||||||
.transform(const LineSplitter())
|
.transform(const LineSplitter())
|
||||||
@ -133,7 +133,7 @@ class RpcSession {
|
|||||||
// Bind to random port
|
// Bind to random port
|
||||||
final server = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
|
final server = await ServerSocket.bind(InternetAddress.loopbackIPv4, 0);
|
||||||
final port = server.port;
|
final port = server.port;
|
||||||
_log.debug('Listening for RPC connection on $port');
|
_log.debug('Listening for Helper connection on $port');
|
||||||
|
|
||||||
// Launch the elevated process
|
// Launch the elevated process
|
||||||
final process =
|
final process =
|
||||||
@ -150,15 +150,15 @@ class RpcSession {
|
|||||||
.transform(const Utf8Decoder())
|
.transform(const Utf8Decoder())
|
||||||
.transform(const LineSplitter())
|
.transform(const LineSplitter())
|
||||||
.join('\n');
|
.join('\n');
|
||||||
_log.warning('Failed to elevate RPC process', error);
|
_log.warning('Failed to elevate the Helper process', error);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
_log.debug('Elevated RPC process started');
|
_log.debug('Elevated Helper process started');
|
||||||
|
|
||||||
// Accept only a single connection
|
// Accept only a single connection
|
||||||
final client = await server.first;
|
final client = await server.first;
|
||||||
await server.close();
|
await server.close();
|
||||||
_log.debug('Client connected: $client');
|
_log.debug('Helper connected: $client');
|
||||||
|
|
||||||
// Stop the old subprocess.
|
// Stop the old subprocess.
|
||||||
try {
|
try {
|
||||||
@ -174,12 +174,12 @@ class RpcSession {
|
|||||||
// The nonce needs to be received first.
|
// The nonce needs to be received first.
|
||||||
if (!authenticated) {
|
if (!authenticated) {
|
||||||
if (nonce == line) {
|
if (nonce == line) {
|
||||||
_log.debug('Client authenticated with correct nonce');
|
_log.debug('Helper authenticated with correct nonce');
|
||||||
authenticated = true;
|
authenticated = true;
|
||||||
completer.complete();
|
completer.complete();
|
||||||
return '';
|
return '';
|
||||||
} else {
|
} else {
|
||||||
_log.warning('Client used WRONG NONCE: $line');
|
_log.warning('Helper used WRONG NONCE: $line');
|
||||||
client.close();
|
client.close();
|
||||||
completer.completeError(Exception('Invalid nonce'));
|
completer.completeError(Exception('Invalid nonce'));
|
||||||
throw Exception('Invalid nonce');
|
throw Exception('Invalid nonce');
|
||||||
|
@ -115,5 +115,5 @@ if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
|
|||||||
COMPONENT Runtime)
|
COMPONENT Runtime)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Copy the ykman RPC
|
# Copy the Helper
|
||||||
install(DIRECTORY "../build/linux/ykman-rpc" DESTINATION "${BUILD_BUNDLE_DIR}" USE_SOURCE_PERMISSIONS)
|
install(DIRECTORY "../build/linux/helper" DESTINATION "${BUILD_BUNDLE_DIR}" USE_SOURCE_PERMISSIONS)
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
|
||||||
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
|
||||||
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
|
33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
|
||||||
A549BDAB2747CBBE0016F37D /* ykman-rpc in Resources */ = {isa = PBXBuildFile; fileRef = A549BDAA2747CBBE0016F37D /* ykman-rpc */; };
|
A5DD3DBC2825505C001ACA3A /* helper in Resources */ = {isa = PBXBuildFile; fileRef = A5DD3DBB2825505C001ACA3A /* helper */; };
|
||||||
CCE73883AA6E76B42D34D392 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5437883A25FD13EEA6A730E /* Pods_Runner.framework */; };
|
CCE73883AA6E76B42D34D392 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5437883A25FD13EEA6A730E /* Pods_Runner.framework */; };
|
||||||
/* End PBXBuildFile section */
|
/* End PBXBuildFile section */
|
||||||
|
|
||||||
@ -71,7 +71,7 @@
|
|||||||
6EAF9B998D311C2D6DD1409C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
6EAF9B998D311C2D6DD1409C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
|
||||||
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
|
||||||
A549BDAA2747CBBE0016F37D /* ykman-rpc */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "ykman-rpc"; path = "../build/macos/ykman-rpc"; sourceTree = "<group>"; };
|
A5DD3DBB2825505C001ACA3A /* helper */ = {isa = PBXFileReference; lastKnownFileType = folder; name = helper; path = ../build/macos/helper; sourceTree = "<group>"; };
|
||||||
E5437883A25FD13EEA6A730E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
E5437883A25FD13EEA6A730E /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
F18D61C5361D1EF615E824EE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
|
F18D61C5361D1EF615E824EE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
|
||||||
FFD2BDD751CD366AEDC4D417 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
|
FFD2BDD751CD366AEDC4D417 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
@ -122,7 +122,7 @@
|
|||||||
33CC11242044D66E0003C045 /* Resources */ = {
|
33CC11242044D66E0003C045 /* Resources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
A549BDAA2747CBBE0016F37D /* ykman-rpc */,
|
A5DD3DBB2825505C001ACA3A /* helper */,
|
||||||
33CC10F22044A3C60003C045 /* Assets.xcassets */,
|
33CC10F22044A3C60003C045 /* Assets.xcassets */,
|
||||||
33CC10F42044A3C60003C045 /* MainMenu.xib */,
|
33CC10F42044A3C60003C045 /* MainMenu.xib */,
|
||||||
33CC10F72044A3C60003C045 /* Info.plist */,
|
33CC10F72044A3C60003C045 /* Info.plist */,
|
||||||
@ -248,8 +248,8 @@
|
|||||||
isa = PBXResourcesBuildPhase;
|
isa = PBXResourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
A549BDAB2747CBBE0016F37D /* ykman-rpc in Resources */,
|
|
||||||
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
|
33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
|
||||||
|
A5DD3DBC2825505C001ACA3A /* helper in Resources */,
|
||||||
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
|
33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
@ -17,5 +17,5 @@ target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
|
|||||||
add_dependencies(${BINARY_NAME} flutter_assemble)
|
add_dependencies(${BINARY_NAME} flutter_assemble)
|
||||||
|
|
||||||
# This can probably be done in a cleaner way.
|
# This can probably be done in a cleaner way.
|
||||||
file(COPY "../../build/windows/ykman-rpc" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/Release")
|
file(COPY "../../build/windows/helper" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/Release")
|
||||||
file(COPY "../../build/windows/ykman-rpc" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/Debug")
|
file(COPY "../../build/windows/helper" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/Debug")
|
||||||
|
Loading…
Reference in New Issue
Block a user