/// <summary> /// Finds the decorator with the specified name or returns <code>null</code>. /// </summary> /// <typeparam name="T">Type to cast the decorator to.</typeparam> /// <param name="messageContext">Message Context.</param> /// <param name="name">The name.</param> /// <returns>The requested decorator or null</returns> public static T FindDecorator <T>(this UnpackedMessageContext messageContext, string name) where T : class { if (messageContext.Packed) { throw new AriesFrameworkException(ErrorCode.InvalidMessage, "Cannot fetch decorator from packed message."); } var jObject = JsonConvert.DeserializeObject <JObject>(messageContext.GetMessageJson()); var decorator = jObject.Properties().FirstOrDefault(_ => _.Name == $"~{name}"); return(decorator?.Value.ToObject <T>()); }
public async Task <AgentMessage> ProcessAsync(IAgentContext agentContext, UnpackedMessageContext messageContext) { var msgJson = messageContext.GetMessageJson(); switch (messageContext.GetMessageType()) { case BackupTypeNames.RetrieveBackupAgentMessage: { var message = messageContext.GetMessage <RetrieveBackupAgentMessage>(); var signature = message.Signature.GetBytesFromBase64(); var backupId = Multibase.Base58.Decode(message.BackupId); var result = await Crypto.VerifyAsync( message.BackupId, backupId, signature); if (!result) { throw new ArgumentException($"{nameof(result)} signature does not match the signer"); } var backupAttachments = await _storageService.RetrieveBackupAsync(message.BackupId); return(new RetrieveBackupResponseAgentMessage { Payload = backupAttachments }); } case BackupTypeNames.ListBackupsAgentMessage: { var message = messageContext.GetMessage <ListBackupsAgentMessage>(); var backupList = await _storageService.ListBackupsAsync(message.BackupId); var timestampList = backupList.Select(p => new DirectoryInfo(p).Name); return(new ListBackupsResponseAgentMessage { BackupList = timestampList .Select(x => long.Parse(x)) .OrderByDescending(x => x) .ToList() }); } } return(null); }