public async Task LoginAndLogoutEventTest() { string sessionToken = string.Empty; APUser loggedIn = null; var user = await UserHelper.CreateNewUserAsync(); AppContext.UserContext.UserLoggedIn += (s, e) => { Console.WriteLine("User is logged in."); sessionToken = e.SessionToken; loggedIn = e.User; }; AppContext.UserContext.UserLoggedOut += (s, e) => { Console.WriteLine("User is logged out."); sessionToken = null; loggedIn = null; }; await AppContext.LoginAsync(new UsernamePasswordCredentials(user.Username, user.Password)); Assert.IsTrue(sessionToken == AppContext.UserContext.SessionToken); Assert.IsTrue(loggedIn.Id == AppContext.UserContext.LoggedInUser.Id); await AppContext.LogoutAsync(); Assert.IsNull(sessionToken); Assert.IsNull(loggedIn); }
public async Task InvalidTokenLogoutEventTest() { string sessionToken = string.Empty; APUser loggedIn = null; var user = await UserHelper.CreateNewUserAsync(); AppContext.UserContext.UserLoggedIn += (s, e) => { Console.WriteLine("User is logged in."); sessionToken = e.SessionToken; loggedIn = e.User; }; AppContext.UserContext.UserLoggedOut += (s, e) => { Console.WriteLine("User is logged out."); sessionToken = null; loggedIn = null; }; await AppContext.LoginAsync(new UsernamePasswordCredentials(user.Username, user.Password) { TimeoutInSeconds = 3 }); Assert.IsTrue(sessionToken == AppContext.UserContext.SessionToken); Assert.IsTrue(loggedIn.Id == AppContext.UserContext.LoggedInUser.Id); await Utilities.Delay(5000); var isValid = await UserSession.IsValidAsync(AppContext.UserContext.SessionToken); Assert.IsFalse(isValid); Assert.IsNull(sessionToken); Assert.IsNull(loggedIn); }
public async Task CreateUserAsyncTest() { var user = new APUser() { Username = "******" + Unique.String, // ensure unique user name Email = "john.doe@" + Unique.String + ".com", // unique but useless email address Password = "******", DateOfBirth = DateTime.Today.AddYears(-25), FirstName = "John", LastName = "Doe", Phone = "987-654-3210", Location = new Geocode(18, 19) }; // Create user var request = new CreateUserRequest() { User = user }; var response = await request.ExecuteAsync(); ApiHelper.EnsureValidResponse(response); Assert.IsNotNull(response.User, "User in response is null."); Assert.IsTrue(string.IsNullOrWhiteSpace(response.User.Id) == false); Console.WriteLine("Created user with id {0}.", response.User.Id); }
public static async Task<APUser> CreateNewUserAsync(APUser user = null, bool returnPassword = true) { // Create user user = user ?? new APUser() { Username = "******" + Unique.String, // ensure unique user name Email = "john.doe@" + Unique.String + ".com", // unique but useless email address Password = "******", DateOfBirth = DateTime.Today.AddYears(-25), FirstName = "John", LastName = "Doe", Phone = "987-654-3210", Location = new Geocode(18, 19) }; Console.WriteLine("Creating new user with username {0}.", user.Username); var createRequest = new CreateUserRequest() { User = user }; var createResponse = await createRequest.ExecuteAsync(); var created = createResponse.User; Assert.IsNotNull(created, "Initial user creation failed."); Console.WriteLine("Created new user with username {0} and id {1}.", created.Username, created.Id); // Setup the password if( returnPassword == true ) created.Password = user.Password; return created; }
public static async Task <APUser> CreateNewUserAsync(APUser user = null, bool returnPassword = true) { // Create user user = user ?? new APUser() { Username = "******" + Unique.String, // ensure unique user name Email = "john.doe@" + Unique.String + ".com", // unique but useless email address Password = "******", DateOfBirth = DateTime.Today.AddYears(-25), FirstName = "John", LastName = "Doe", Phone = "987-654-3210", Location = new Geocode(18, 19) }; Console.WriteLine("Creating new user with username {0}.", user.Username); var createRequest = new CreateUserRequest() { User = user }; var createResponse = await createRequest.ExecuteAsync(); var created = createResponse.User; Assert.IsNotNull(created, "Initial user creation failed."); Console.WriteLine("Created new user with username {0} and id {1}.", created.Username, created.Id); // Setup the password if (returnPassword == true) { created.Password = user.Password; } return(created); }
internal static void ReadJson(APUser user, JObject json) { /* * "__groups": [ * { * "groupid": "12345", * "name": "group name" * } */ JToken value; if (json.TryGetValue("__groups", out value) == false) { return; } if (value.Type != JTokenType.Array) { return; } foreach (JObject groupJson in value.Values <JObject>()) { var groupInfo = ParseGroupInfo(groupJson); if (groupInfo != null) { user.Groups.Add(groupInfo); } } }
public static void MatchUsers(APUser user1, APUser user2) { Assert.IsTrue(user1.Username == user2.Username, "Usernames do not match."); Assert.IsTrue(user1.FirstName == user2.FirstName, "First names do not match."); Assert.IsTrue(user1.LastName == user2.LastName, "Last names do not match."); Assert.IsTrue(user1.Email == user2.Email, "Email addresses do not match."); Assert.IsTrue(user1.Phone == user2.Phone, "Phone numbers do not match."); Assert.IsTrue(user1.DateOfBirth == user2.DateOfBirth, "Date of births do not match."); Assert.IsTrue(user1.Location.Equals(user2.Location), "Locations do not match."); }
public APUser GetUser() { /* If local user is not available, check local store and get from there. If not available in local store then return null. */ if (_localUser == null) _localUser = GetLocalUser(); return _localUser; }
public APUser GetUser() { /* * If local user is not available, check local store and get from there. * If not available in local store then return null. */ if (_localUser == null) { _localUser = GetLocalUser(); } return(_localUser); }
public void SetUser(APUser user) { var context = GetOperationContext(); // Remove the existing extension. var existing = context.Extensions.Find<UserExtension>(); if (existing != null) context.Extensions.Remove(existing); // If user is not null, then update with latest content. if (user != null) context.Extensions.Add(new UserExtension(user)); }
public void SetUser(APUser user) { if (user == null) { this.GetSession()[SessionKeys.ForUser()] = null; } else { var serializer = ObjectFactory.Build<IJsonSerializer>(); var bytes = serializer.Serialize(user); this.GetSession()[SessionKeys.ForUser()] = bytes; } }
public void SetUser(APUser user) { if (user == null) { this.GetSession()[SessionKeys.ForUser()] = null; } else { var serializer = ObjectFactory.Build <IJsonSerializer>(); var bytes = serializer.Serialize(user); this.GetSession()[SessionKeys.ForUser()] = bytes; } }
public void SetUser(APUser user) { if (user == null) { this.LocalStorage.Remove(NamingConvention.LocalUserKey()); } else { var bytes = this.Serializer.Serialize(user); var json = Encoding.UTF8.GetString(bytes, 0, bytes.Length); this.LocalStorage.SetValue(NamingConvention.LocalUserKey(), json); } _localUser = user; }
public void SetUser(APUser user) { var context = GetOperationContext(); // Remove the existing extension. var existing = context.Extensions.Find <UserExtension>(); if (existing != null) { context.Extensions.Remove(existing); } // If user is not null, then update with latest content. if (user != null) { context.Extensions.Add(new UserExtension(user)); } }
public async Task CreateUserAsyncTest() { var user = new APUser() { Username = "******" + Unique.String, // ensure unique user name Email = "john.doe@" + Unique.String + ".com", // unique but useless email address Password = "******", DateOfBirth = DateTime.Today.AddYears(-25), FirstName = "John", LastName = "Doe", Phone = "987-654-3210", Location = new Geocode(18, 19) }; user.SetAttribute("attr1", "value1"); await user.SaveAsync(); }
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 (model.Password != model.VerifyPassword) { ModelState.AddModelError("", "Passwords don't match!"); } if (!ModelState.IsValid) { return(View("Register", model)); } 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 _context.Users.CountAsync() == 1) { await _userManager.AddClaimAsync(apuser, new Claim("admin", "true")); await _context.SaveChangesAsync(); } await _signInManager.SignInAsync(apuser, false); return(RedirectToActionPermanent("Index", "Settings")); }
private APUser GetLocalUser() { var userJson = this.LocalStorage.GetValue(NamingConvention.LocalUserKey()); if (string.IsNullOrWhiteSpace(userJson) == true) { return(null); } APUser user = null; if (this.Serializer.TryDeserialize(userJson, out user) == true) { return(user); } else { return(null); } }
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")); } }
public async Task <IActionResult> DoBadgeToken([FromBody] BadgeTokenModel model) { var user = await _userManager.FindByNameAsync(model.Username); if (user == null) { user = new APUser { UserName = model.Username, Email = model.Username + "@badge.local" }; await _userManager.CreateAsync(user, model.Password); var uobj = model.Username; var name = model.Username; var obj = new ASObject(); obj["type"].Add(new ASTerm("Person")); obj["preferredUsername"].Add(new ASTerm(name)); obj["name"].Add(new ASTerm(name)); var id = await _entityData.UriFor(_entityStore, obj); obj["id"].Add(new ASTerm(id)); var inbox = await _newCollection("inbox", id); var outbox = await _newCollection("outbox", id); var following = await _newCollection("following", id); var followers = await _newCollection("followers", id); var likes = await _newCollection("likes", id); var blocks = await _newCollection("blocks", id); var blocked = await _newCollection("blocked", id); var blocksData = blocks.Data; blocksData["_blocked"].Add(new ASTerm(blocked.Id)); blocks.Data = blocksData; obj["following"].Add(new ASTerm(following.Id)); obj["followers"].Add(new ASTerm(followers.Id)); obj["blocks"].Add(new ASTerm(blocks.Id)); obj["likes"].Add(new ASTerm(likes.Id)); obj["inbox"].Add(new ASTerm(inbox.Id)); obj["outbox"].Add(new ASTerm(outbox.Id)); var userEntity = await _entityStore.StoreEntity(APEntity.From(obj, true)); await _entityStore.CommitChanges(); _context.UserActorPermissions.Add(new UserActorPermission { UserId = user.Id, ActorId = userEntity.Id, IsAdmin = true }); await _context.SaveChangesAsync(); } var u = await _signInManager.PasswordSignInAsync(model.Username, model.Password, false, false); if (!u.Succeeded) { return(Unauthorized()); } var firstActor = await _context.UserActorPermissions.FirstOrDefaultAsync(a => a.User == user); var claims = new Claim[] { new Claim(JwtRegisteredClaimNames.Sub, user.Id), new Claim(JwtTokenSettings.ActorClaim, firstActor.ActorId) }; var jwt = new JwtSecurityToken( issuer: _tokenSettings.Issuer, audience: _tokenSettings.Audience, claims: claims, notBefore: DateTime.UtcNow, expires: DateTime.UtcNow.Add(TimeSpan.FromDays(7)), signingCredentials: _tokenSettings.Credentials ); var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt); return(Json(new BadgeTokenResponse { Actor = firstActor.ActorId, Token = encodedJwt })); }
public UserExtension(APUser user) { this.User = user; }
public void SetUser(APUser user) { _user = user; }
internal static void ReadJson(APUser user, JObject json) { /* "__groups": [ { "groupid": "12345", "name": "group name" } */ JToken value; if (json.TryGetValue("__groups", out value) == false) return; if (value.Type != JTokenType.Array) return; foreach (JObject groupJson in value.Values<JObject>()) { var groupInfo = ParseGroupInfo(groupJson); if (groupInfo != null) user.Groups.Add(groupInfo); } }