Exemple #1
0
        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());
        }
Exemple #2
0
        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\""));
        }
Exemple #3
0
        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());
        }
Exemple #4
0
        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"));
            }
        }