<!-- Thanks for contributing! Provide a description of your changes below and a general summary in the title Please look at the following checklist to ensure that your PR can be accepted quickly: --> ## Description This is a PR that makes the auth build runnable on the Desktop platform. Below is a screenshot for the same:  Some things to note: - LocalAuth will be bypassed on unsupported platforms (desktop) - Switched to sodium and sodium-libs from flutter_sodium. - QR code library is incompatible with desktop, So I removed access to those pages. - Bumped some dependencies and done some lint fixes - Also add save key option as send file may not help on desktop (related #380) https://github.com/ente-io/auth/assets/41370460/3f3471e8-45f6-4146-88ac-b763d4f38b32 - Update Recovery Key Card UI  So this is a step towards more updated code and better multiplatform support. ## Type of Change <!--- Put an `x` in all the boxes that apply: --> - [ ] 🖼️ New icon - [x] ✨ New feature (non-breaking change which adds functionality) - [ ] 🛠️ Bug fix (non-breaking change which fixes an issue) - [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change) - [x] 🧹 Code refactor - [ ] ✅ Build configuration change - [ ] 📝 Documentation - [ ] 🗑️ Chore --------- Co-authored-by: Neeraj Gupta <254676+ua741@users.noreply.github.com>
55 lines
1.4 KiB
Dart
55 lines
1.4 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:ffi/ffi.dart';
|
|
import 'package:win32/win32.dart';
|
|
|
|
const _hive = HKEY_CURRENT_USER;
|
|
|
|
class WindowsProtocolHandler {
|
|
void register(String scheme, {String? executable, List<String>? arguments}) {
|
|
final prefix = _regPrefix(scheme);
|
|
final capitalized = scheme[0].toUpperCase() + scheme.substring(1);
|
|
final cmd = executable ?? Platform.resolvedExecutable;
|
|
|
|
_regCreateStringKey(_hive, prefix, '', 'URL:$capitalized');
|
|
_regCreateStringKey(_hive, prefix, 'URL Protocol', '');
|
|
_regCreateStringKey(_hive, '$prefix\\shell\\open\\command', '', cmd);
|
|
}
|
|
|
|
void unregister(String scheme) {
|
|
final txtKey = TEXT(_regPrefix(scheme));
|
|
try {
|
|
RegDeleteTree(HKEY_CURRENT_USER, txtKey);
|
|
} finally {
|
|
free(txtKey);
|
|
}
|
|
}
|
|
|
|
String _regPrefix(String scheme) => 'SOFTWARE\\Classes\\$scheme';
|
|
|
|
int _regCreateStringKey(int hKey, String key, String valueName, String data) {
|
|
final txtKey = TEXT(key);
|
|
final txtValue = TEXT(valueName);
|
|
final txtData = TEXT(data);
|
|
try {
|
|
return RegSetKeyValue(
|
|
hKey,
|
|
txtKey,
|
|
txtValue,
|
|
REG_SZ,
|
|
txtData,
|
|
txtData.length * 2 + 2,
|
|
);
|
|
} finally {
|
|
free(txtKey);
|
|
free(txtValue);
|
|
free(txtData);
|
|
}
|
|
}
|
|
|
|
String _sanitize(String value) {
|
|
value = value.replaceAll(r'%s', '%1').replaceAll(r'"', '\\"');
|
|
return '"$value"';
|
|
}
|
|
}
|