Rename RPC to Yubico Authenticator Helper.

This commit is contained in:
Dain Nilsson 2022-05-06 10:18:46 +02:00
parent ce78d7a25a
commit 3dc699c391
No known key found for this signature in database
GPG Key ID: F04367096FBA95E8
23 changed files with 44 additions and 44 deletions

10
build-helper.bat Normal file
View 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/

View File

@ -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/"

View File

@ -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/

View File

@ -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

View File

@ -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",
) )

View File

@ -1,7 +1,7 @@
[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>"]
[tool.poetry.dependencies] [tool.poetry.dependencies]

View File

@ -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__":

View File

@ -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(

View File

@ -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');