public override async Task Go() { var entity = await _entityStore.GetEntity(Data.EntityId, false); if (entity == null) { return; } var actorId = entity.Data["actor"].Concat(entity.Data["attributedTo"]).FirstOrDefault(); if (actorId == null) { return; // ??? } var key = await _keyService.GetKey(actorId.Id); var doc = await _entryGenerator.Build(entity.Data); var envelope = new MagicEnvelope(doc.ToString(), "application/atom+xml", new MagicKey(key.PrivateKey)); var hc = new HttpClient(); var content = new StringContent(envelope.Build().ToString(), Encoding.UTF8, "application/magic-envelope+xml"); var response = await hc.PostAsync(Data.SalmonUrl, content); if (((int)response.StatusCode) / 100 == 5) { throw new Exception("try later"); } }
public async Task <ASObject> Parse(Stream request) { string data; using (var r = new StreamReader(request)) data = await r.ReadToEndAsync(); var envelope = new MagicEnvelope(XDocument.Parse(data)); Console.WriteLine(envelope.RawData); var entry = await _entryParser.Parse(XDocument.Parse(envelope.RawData), true, _targetUser); return(entry); }
public async Task Render(HttpRequest request, HttpResponse response, APEntity toRender) { response.ContentType = "application/atom+xml"; var user = await _entityStore.GetEntity(toRender.Data["actor"].Single().Id, false); var key = await _keyService.GetKey(user.Id); var magicKey = key != null ? new MagicKey(key.PrivateKey) : MagicKey.Generate(); var doc = await _entryGenerator.Build(toRender.Data); var enveloped = new MagicEnvelope(doc.ToString(), "application/atom+xml", magicKey); await response.WriteAsync(enveloped.Build().ToString()); }