Implement update backup and restore proof
This commit is contained in:
@@ -35,6 +35,7 @@ public interface ICloudStateStore
|
||||
IDictionary<string, object?>? meta);
|
||||
|
||||
IReadOnlyList<BackupRecord> GetBackups();
|
||||
BackupRecord CreateBackup(string name);
|
||||
bool ShouldCreateSymmetricKey(string loopId);
|
||||
string GetOrCreateSymmetricKey(string loopId);
|
||||
KeyRequestRecord CreateKeyRequest(string loopId, string publicKey);
|
||||
@@ -43,4 +44,4 @@ public interface ICloudStateStore
|
||||
IReadOnlyList<KeyRequestRecord> GetBinaryRequests();
|
||||
IReadOnlyList<object> GetHolidays();
|
||||
void UpdateRobot(DeviceRegistration registration);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ public sealed class JiboCloudProtocolService(ICloudStateStore stateStore)
|
||||
return Task.FromResult(HandleLog(operation, envelope));
|
||||
|
||||
if (servicePrefix.StartsWith("Backup_", StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult(HandleBackup(operation));
|
||||
return Task.FromResult(HandleBackup(operation, envelope));
|
||||
|
||||
if (servicePrefix.StartsWith("Account_", StringComparison.OrdinalIgnoreCase))
|
||||
return Task.FromResult(HandleAccount(operation, envelope));
|
||||
@@ -353,11 +353,19 @@ public sealed class JiboCloudProtocolService(ICloudStateStore stateStore)
|
||||
: []);
|
||||
}
|
||||
|
||||
private ProtocolDispatchResult HandleBackup(string operation)
|
||||
private ProtocolDispatchResult HandleBackup(string operation, ProtocolEnvelope envelope)
|
||||
{
|
||||
return operation.Equals("List", StringComparison.OrdinalIgnoreCase)
|
||||
? ProtocolDispatchResult.Ok(stateStore.GetBackups())
|
||||
: ProtocolDispatchResult.Ok(Array.Empty<object>());
|
||||
if (operation.Equals("List", StringComparison.OrdinalIgnoreCase))
|
||||
return ProtocolDispatchResult.Ok(stateStore.GetBackups());
|
||||
|
||||
if (operation.Equals("Create", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
var body = envelope.TryParseBody();
|
||||
var requestedName = ReadString(body, "name") ?? ReadString(body, "backupName");
|
||||
return ProtocolDispatchResult.Ok(stateStore.CreateBackup(requestedName ?? $"backup-{DateTimeOffset.UtcNow:yyyyMMddHHmmss}"));
|
||||
}
|
||||
|
||||
return ProtocolDispatchResult.Ok(Array.Empty<object>());
|
||||
}
|
||||
|
||||
private ProtocolDispatchResult HandleKey(string operation, ProtocolEnvelope envelope)
|
||||
@@ -631,4 +639,4 @@ public sealed class JiboCloudProtocolService(ICloudStateStore stateStore)
|
||||
bool.TryParse(value, out var parsed) &&
|
||||
parsed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -452,6 +452,18 @@ public sealed class InMemoryCloudStateStore : ICloudStateStore
|
||||
return _backups.ToArray();
|
||||
}
|
||||
|
||||
public BackupRecord CreateBackup(string name)
|
||||
{
|
||||
var backup = new BackupRecord
|
||||
{
|
||||
Name = string.IsNullOrWhiteSpace(name) ? "backup" : name.Trim()
|
||||
};
|
||||
|
||||
_backups.Add(backup);
|
||||
TouchState();
|
||||
return backup;
|
||||
}
|
||||
|
||||
public bool ShouldCreateSymmetricKey(string loopId)
|
||||
{
|
||||
return !_symmetricKeys.ContainsKey(loopId);
|
||||
@@ -661,4 +673,4 @@ public sealed class InMemoryCloudStateStore : ICloudStateStore
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user