public async Task <string> UriFor(IEntityStore store, ASObject @object, string category = null, string parentId = null) { var types = @object.Type; if (category == null) { if (@object["actor"].Any()) { category = "activity"; } else if (types.Any(a => EntityData.Actors.Contains(a))) { category = "actor"; } else { category = "object"; } } string categoryTwo = null; if (@object["object"].Any(a => a.SubObject != null)) { categoryTwo = "create" + @object["object"].First().SubObject.Type.First().Split('#')[1]; } var format = _getFormat(types, category, parentId != null, categoryTwo); var result = await _parseUriFormat(store, @object.Serialize(), format); if (parentId != null && result.StartsWith("+")) { return(_append(parentId, result.Substring(1).ToLower())); } result = result.ToLower(); if (Uri.IsWellFormedUriString(result, UriKind.Absolute)) { return(result); } return(_serverConfig.BaseUri + result.ToLower()); }
public async Task <IActionResult> GetKey(string id) { var user = await _entityStore.GetEntity(id, false); if (user == null || !user.IsOwner) { return(NotFound()); } var key = await _context.GetKey(user.Id); var salm = new MagicKey(key.PrivateKey); var data = salm.AsPEM; var keyObj = new ASObject(); keyObj.Replace("owner", new ASTerm(user.Id)); keyObj.Replace("publicKeyPem", new ASTerm(data)); keyObj.Replace("id", new ASTerm($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}")); return(Content(keyObj.Serialize().ToString(), "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"")); }
public async Task <string> UriFor(IEntityStore store, ASObject @object, string category = null, string parentId = null) { var types = @object["type"].Select(a => (string)a.Primitive).ToList(); if (category == null) { if (@object["actor"].Any()) { category = "activity"; } else if (types.Any(a => Actors.Contains(a))) { category = "actor"; } else { category = "object"; } } var format = _getFormat(types, category, parentId != null); var result = await _parseUriFormat(store, @object.Serialize(), format); if (parentId != null && result.StartsWith("+")) { return(_append(parentId, result.Substring(1).ToLower())); } result = result.ToLower(); if (Uri.IsWellFormedUriString(result, UriKind.Absolute)) { return(result); } return(BaseUri + result.ToLower()); }
public async Task <IActionResult> DoRegister(RegisterViewModel model) { if (!_configuration.GetSection("Kroeg").GetValue <bool>("CanRegister")) { return(NotFound()); } var apuser = new APUser { Username = model.Username, Email = model.Email }; if ((await _relevantEntities.FindEntitiesWithPreferredUsername(model.Username)).Count > 0) { ModelState.AddModelError("", "Username is already in use!"); } if (model.Password != model.VerifyPassword) { ModelState.AddModelError("", "Passwords don't match!"); } if (!ModelState.IsValid) { return(View("Register", model)); } await _connection.OpenAsync(); using (var trans = _connection.BeginTransaction()) { var result = await _userManager.CreateAsync(apuser, model.Password); if (!result.Succeeded) { ModelState.AddModelError("", result.Errors.First().Description); } if (!ModelState.IsValid) { return(View("Register", model)); } if (await _connection.ExecuteAsync("select count(*) from \"Users\"") == 1) { // await _userManager.AddClaimAsync(apuser, new Claim("admin", "true")); } await _signInManager.SignInAsync(apuser, false); var user = model.Username; var obj = new ASObject(); obj.Type.Add("https://www.w3.org/ns/activitystreams#Person"); obj["preferredUsername"].Add(ASTerm.MakePrimitive(user)); obj["name"].Add(ASTerm.MakePrimitive(user)); var create = new ASObject(); create.Type.Add("https://www.w3.org/ns/activitystreams#Create"); create["object"].Add(ASTerm.MakeSubObject(obj)); create["to"].Add(ASTerm.MakeId("https://www.w3.org/ns/activitystreams#Public")); Console.WriteLine($"--- creating actor. Unflattened:\n{create.Serialize().ToString(Formatting.Indented)}"); var apo = await _entityFlattener.FlattenAndStore(_entityStore, create); Console.WriteLine($"Flat: {apo.Data.Serialize().ToString(Formatting.Indented)}\n----"); var handler = new CreateActorHandler(_entityStore, apo, null, null, User, _collectionTools, _entityConfiguration, _connection); handler.UserOverride = apuser.Id; await handler.Handle(); var resultUser = await _entityStore.GetEntity(handler.MainObject.Data["object"].First().Id, false); var outbox = await _entityStore.GetEntity(resultUser.Data["outbox"].First().Id, false); var delivery = new DeliveryHandler(_entityStore, handler.MainObject, resultUser, outbox, User, _collectionTools, _provider.GetRequiredService <DeliveryService>()); await delivery.Handle(); trans.Commit(); return(RedirectToActionPermanent("Index", "Settings")); } }