Skip to content

Commit

Permalink
change s5 login impl to same as vup chat
Browse files Browse the repository at this point in the history
  • Loading branch information
lukehmcc committed Aug 26, 2024
1 parent cef71ef commit 46458fe
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 17 deletions.
37 changes: 36 additions & 1 deletion lib/definitons/logging.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ class FileLogger extends Logger {

FileLogger({required this.file});

// for now this is the only function I'm over-writing
@override
Future<void> info(String s) async {
final sink = File(file).openWrite(mode: FileMode.append);
Expand Down Expand Up @@ -44,3 +43,39 @@ class FileLogger extends Logger {
await sink.close();
}
}

/// Logger only intended for debug logging, pipes warnings to file,
/// evething else goes to stdout
class DebugLogger extends Logger {
final String file;

DebugLogger({required this.file});

@override
Future<void> info(String s) async {
print(s);
}

@override
void error(String s) async {
print(s);
}

@override
void verbose(String s) async {
print(s);
}

// S5 is very spammy on the warn calls, so I'm dumping this to a file
@override
void warn(String s) async {
final sink = File(file).openWrite(mode: FileMode.append);
sink.write(s);
await sink.close();
}

@override
void catched(e, st, [context]) async {
print(e);
}
}
40 changes: 26 additions & 14 deletions lib/functions/s5.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import 'package:s5/s5.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:s5_deploy/functions/config.dart';
import 'package:s5_deploy/functions/spinner.dart';
import 'package:xdg_directories/xdg_directories.dart';

Future<S5> initS5(
Expand Down Expand Up @@ -48,14 +49,19 @@ Future<S5> initS5(
setConfig(DeployConfig(seed: seed, dataKeys: []));
await s5.recoverIdentityFromSeedPhrase(seed);

// now check if already registered on node
List<String>? urls;
// then check if already registered
Map<dynamic, dynamic> data = (s5.api as S5NodeAPIWithIdentity).accounts;
final Map<String, dynamic> accounts =
data['accounts'] as Map<String, dynamic>;
final List<String> urls =
accounts.values.map((account) => account['url'] as String).toList();
// And if the nodeURL isn't on the seed already, authenticate on that server
if (!urls.contains(nodeURL)) {
if ((s5.api as S5NodeAPIWithIdentity).accounts.isNotEmpty) {
Map<dynamic, dynamic> data = (s5.api as S5NodeAPIWithIdentity).accounts;
final Map<String, dynamic> accounts = (data['accounts'] as Map).map(
(key, value) => MapEntry(key as String, value),
);
urls =
accounts.values.map((account) => account['url'] as String).toList();
// And if the nodeURL isn't on the seed already, authenticate on that server
}
if (urls == null || !urls.contains(nodeURL)) {
print("Registering @ $nodeURL");
await s5.registerOnNewStorageService(
nodeURL,
Expand Down Expand Up @@ -136,28 +142,27 @@ Future<CID> updateResolver(
setConfig(conf);
}

// Then we get get an set the resolver
final resolverSeed = s5.api.crypto.hashBlake3Sync(
Uint8List.fromList(
validatePhrase(seed, crypto: s5.api.crypto) + utf8.encode(dataKey),
validatePhrase(seed, crypto: s5.api.crypto) +
utf8.encode(dataKey), // this identifies the backup
),
);

final s5User = await s5.api.crypto.newKeyPairEd25519(seed: resolverSeed);

SignedRegistryEntry? existing;
int revision = 0;

try {
final res = await s5.api.registryGet(s5User.publicKey);
existing = res;
if (existing != null) {
print(
'Revision ${existing.revision} -> ${existing.revision + 1}',
);
}
revision = existing!.revision + 1;
} catch (e) {
existing = null;

print('Revision 1');
revision = 1;
}

final sre = await signRegistryEntry(
Expand All @@ -176,6 +181,13 @@ Future<CID> updateResolver(
s5User.publicKey,
),
));

if (resolverCID.hash.toBase64Url() != "") {
spinner.success();
spinner = spinStart("Updating to revision $revision");
spinner.success();
}

return resolverCID;
} else {
spinner.fail();
Expand Down
2 changes: 0 additions & 2 deletions lib/s5_deploy.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import 'dart:io';
import 'package:args/args.dart';
import 'package:cli_spin/cli_spin.dart';
import 'package:dcli/dcli.dart';
import 'package:lib5/identity.dart';
import 'package:lib5/node.dart';
import 'package:mime/mime.dart';
import 'package:path/path.dart';
Expand Down Expand Up @@ -120,7 +119,6 @@ void s5Deploy(List<String> args) async {
spinner = spinStart("Updating resolver link...");
final resolverCID = await updateResolver(s5, results.arguments.first,
staticCID, spinner, (results['dataKey'] as String?));
spinner.success();

// Then a little url manipulation
final nodeURI = Uri.parse(nodeURL);
Expand Down

0 comments on commit 46458fe

Please sign in to comment.