public override void Up() { // create indexes Connection.Database.GetCollection("users").CreateIndex(IndexKeys.Ascending("Login"), IndexOptions.SetUnique(true)); Connection.Database.GetCollection("user_networks").CreateIndex(IndexKeys.Ascending("NetworkID")); Connection.Database.GetCollection("user_networks").CreateIndex(IndexKeys.Ascending("UserID", "NetworkID"), IndexOptions.SetUnique(true)); Connection.Database.GetCollection("networks").CreateIndex(IndexKeys.Ascending("Name"), IndexOptions.SetUnique(true)); Connection.Database.GetCollection("device_classes").CreateIndex(IndexKeys.Ascending("Name", "Version"), IndexOptions.SetUnique(true)); Connection.Database.GetCollection("equipment").CreateIndex(IndexKeys.Ascending("DeviceClassID")); Connection.Database.GetCollection("devices").CreateIndex(IndexKeys.Ascending("GUID"), IndexOptions.SetUnique(true)); Connection.Database.GetCollection("devices").CreateIndex(IndexKeys.Ascending("NetworkID")); Connection.Database.GetCollection("devices").CreateIndex(IndexKeys.Ascending("Network.Name")); Connection.Database.GetCollection("devices").CreateIndex(IndexKeys.Ascending("DeviceClassID")); Connection.Database.GetCollection("devices").CreateIndex(IndexKeys.Ascending("DeviceClass.Name", "DeviceClass.Version")); Connection.Database.GetCollection("device_notifications").CreateIndex(IndexKeys.Ascending("Timestamp")); Connection.Database.GetCollection("device_notifications").CreateIndex(IndexKeys.Ascending("DeviceID", "Timestamp")); Connection.Database.GetCollection("device_commands").CreateIndex(IndexKeys.Ascending("DeviceID", "Timestamp")); Connection.Database.GetCollection("device_equipment").CreateIndex(IndexKeys.Ascending("DeviceID", "Code"), IndexOptions.SetUnique(true)); // create default admin user var user = new User("dhadmin", (int)UserRole.Administrator, (int)UserStatus.Active); user.SetPassword("dhadmin_#911"); Connection.EnsureIdentity(user); Connection.Users.Save(user); }
private void IncrementUserLoginAttempts(User user) { user.LoginAttempts++; if (_maxLoginAttempts > 0 && user.LoginAttempts >= _maxLoginAttempts) user.Status = (int)UserStatus.LockedOut; DataContext.User.Save(user); }
public void Save(User user) { if (user == null) throw new ArgumentNullException("user"); _mongo.EnsureIdentity(user); _mongo.Users.Save(user); }
private void ResetUserLoginAttempts(User user) { if (user.LoginAttempts > 0) { user.LoginAttempts = 0; DataContext.User.Save(user); } }
/// <summary> /// Default constructor for command messages /// </summary> /// <param name="command">Associated DeviceCommand object</param> /// <param name="user">Associated User object</param> public MessageHandlerContext(DeviceCommand command, User user = null) { if (command == null) throw new ArgumentNullException("command"); Device = command.Device; Command = command; User = user; }
/// <summary> /// Default constructor for notification messages /// </summary> /// <param name="notification">Associated DeviceNotification object</param> /// <param name="user">Associated User object</param> public MessageHandlerContext(DeviceNotification notification, User user = null) { if (notification == null) throw new ArgumentNullException("notification"); Device = notification.Device; Notification = notification; User = user; }
private void IncrementUserLoginAttempts(DataContext dataContext, DeviceHiveConfiguration configuration, User user) { var maxLoginAttempts = configuration.Authentication.MaxLoginAttempts; user.LoginAttempts++; if (maxLoginAttempts > 0 && user.LoginAttempts >= maxLoginAttempts) user.Status = (int)UserStatus.LockedOut; dataContext.User.Save(user); }
/// <summary> /// Updates user last login timestamp. /// </summary> /// <param name="user">User object to update last login timestamp for.</param> protected virtual void UpdateUserLastLogin(User user) { // update LastLogin only if it's too far behind - save database resources if (user.LastLogin == null || user.LastLogin.Value.AddHours(1) < DateTime.UtcNow) { user.LastLogin = DateTime.UtcNow; DataContext.User.Save(user); } }
public void User() { var user = new User("Test", (int)UserRole.Administrator, (int)UserStatus.Active); user.FacebookLogin = "******"; user.GoogleLogin = "******"; user.GithubLogin = "******"; user.SetPassword("TestPass"); DataContext.User.Save(user); RegisterTearDown(() => DataContext.User.Delete(user.ID)); // test GetAll var users = DataContext.User.GetAll(); Assert.Greater(users.Count, 0); // test Get(id) var user1 = DataContext.User.Get(user.ID); Assert.IsNotNull(user1); Assert.AreEqual("Test", user1.Login); Assert.IsTrue(user1.IsValidPassword("TestPass")); Assert.IsFalse(user1.IsValidPassword("TestPass2")); Assert.AreEqual((int)UserRole.Administrator, user1.Role); Assert.AreEqual((int)UserStatus.Active, user1.Status); // test Get(login) var user2 = DataContext.User.Get("Test"); Assert.IsNotNull(user2); // test GetByXXX(login) user2 = DataContext.User.GetByFacebookLogin("facebook"); Assert.IsNotNull(user2); user2 = DataContext.User.GetByGoogleLogin("google"); Assert.IsNotNull(user2); user2 = DataContext.User.GetByGithubLogin("github"); Assert.IsNotNull(user2); // test Save user.Login = "******"; user.SetPassword("TestPass2"); user.Role = (int)UserRole.Client; user.Status = (int)UserStatus.Disabled; user.LastLogin = DateTime.UtcNow; user.LoginAttempts = 1; DataContext.User.Save(user); var user3 = DataContext.User.Get(user.ID); Assert.AreEqual("Test2", user3.Login); Assert.IsTrue(user3.IsValidPassword("TestPass2")); Assert.AreEqual((int)UserRole.Client, user3.Role); Assert.AreEqual((int)UserStatus.Disabled, user3.Status); Assert.IsNotNull(user3.LastLogin); Assert.AreEqual(1, user3.LoginAttempts); // test Delete DataContext.User.Delete(user.ID); var user4 = DataContext.User.Get(user.ID); Assert.IsNull(user4); }
private void UpdateUserLastLogin(DataContext dataContext, User user) { // update LastLogin only if it's too far behind - save database resources if (user.LoginAttempts > 0 || user.LastLogin == null || user.LastLogin.Value.AddHours(1) < DateTime.UtcNow) { user.LoginAttempts = 0; user.LastLogin = DateTime.UtcNow; dataContext.User.Save(user); } }
/// <summary> /// Initializes all required properties /// </summary> /// <param name="user">Associated user object</param> /// <param name="network">Associated network object</param> public UserNetwork(User user, Network network) { if (user == null) throw new ArgumentNullException("user"); if (network == null) throw new ArgumentNullException("network"); this.User = user; this.UserID = user.ID; this.Network = network; this.NetworkID = network.ID; }
public void Save(User user) { if (user == null) throw new ArgumentNullException("user"); using (var context = new DeviceHiveContext()) { context.Users.Add(user); if (user.ID > 0) { context.Entry(user).State = EntityState.Modified; } context.SaveChanges(); } }
public void AccessKey() { var user = new User("Test", (int)UserRole.Administrator, (int)UserStatus.Active); user.SetPassword("TestPass"); DataContext.User.Save(user); RegisterTearDown(() => DataContext.User.Delete(user.ID)); var accessKey = new AccessKey(user.ID, AccessKeyType.Default, "Test"); accessKey.Permissions.Add(new AccessKeyPermission { Subnets = new[] { "127.0.0.1" } }); accessKey.Permissions.Add(new AccessKeyPermission { Subnets = new[] { "127.0.0.2" } }); DataContext.AccessKey.Save(accessKey); RegisterTearDown(() => DataContext.AccessKey.Delete(accessKey.ID)); // test GetByUser var accessKeys = DataContext.AccessKey.GetByUser(user.ID); Assert.AreEqual(1, accessKeys.Count); Assert.AreEqual(accessKey.ID, accessKeys[0].ID); Assert.AreEqual(user.ID, accessKeys[0].UserID); // test GetByUsers accessKeys = DataContext.AccessKey.GetByUsers(new[] { user.ID }, new AccessKeyFilter { Type = (int)AccessKeyType.Default }); Assert.AreEqual(1, accessKeys.Count); Assert.AreEqual(accessKey.ID, accessKeys[0].ID); Assert.AreEqual(user.ID, accessKeys[0].UserID); // test Get(id) var accessKey1 = DataContext.AccessKey.Get(accessKey.ID); Assert.IsNotNull(accessKey1); Assert.AreEqual("Test", accessKey1.Label); Assert.AreEqual(accessKey.Key, accessKey1.Key); Assert.IsNotNull(accessKey1.Permissions); Assert.AreEqual(2, accessKey1.Permissions.Count); Assert.AreEqual(new[] { "127.0.0.1" }, accessKey1.Permissions[0].Subnets); Assert.AreEqual(new[] { "127.0.0.2" }, accessKey1.Permissions[1].Subnets); // test Save accessKey.Type = (int)AccessKeyType.Session; accessKey.Label = "Test2"; accessKey.GenerateKey(); accessKey.ExpirationDate = DateTime.UtcNow; accessKey.Permissions.RemoveAt(1); accessKey.Permissions.Add(new AccessKeyPermission { Subnets = new[] { "127.0.0.3" }, Domains = new[] { "www.example.com" }, Networks = new[] { 1, 2, 3 }}); DataContext.AccessKey.Save(accessKey); var accessKey2 = DataContext.AccessKey.Get(accessKey.ID); Assert.AreEqual(1, accessKey2.Type); Assert.AreEqual("Test2", accessKey2.Label); Assert.AreEqual(accessKey.Key, accessKey2.Key); Assert.IsNotNull(accessKey2.ExpirationDate); Assert.IsNotNull(accessKey2.Permissions); Assert.AreEqual(2, accessKey2.Permissions.Count); Assert.AreEqual(new[] { "127.0.0.1" }, accessKey2.Permissions[0].Subnets); Assert.AreEqual(new[] { "127.0.0.3" }, accessKey2.Permissions[1].Subnets); Assert.AreEqual(new[] { "www.example.com" }, accessKey2.Permissions[1].Domains); Assert.AreEqual(new[] { 1, 2, 3 }, accessKey2.Permissions[1].Networks); // test Delete DataContext.AccessKey.Delete(accessKey.ID); var accessKey3 = DataContext.AccessKey.Get(accessKey.ID); Assert.IsNull(accessKey3); }
private bool IsNetworkAccessible(int? networkId, User user = null) { if (user == null) user = CurrentUser; if (user.Role == (int) UserRole.Administrator) return true; if (networkId == null) return false; var userNetworks = DataContext.UserNetwork.GetByUser(user.ID); return userNetworks.Any(un => un.NetworkID == networkId); }
private void UpdateUserLastLogin(User user) { user.LoginAttempts = 0; user.LastLogin = DateTime.UtcNow; DataContext.User.Save(user); }
public void UserNetworkTest() { var user = new User("Test", "TestPass", (int)UserRole.Administrator, (int)UserStatus.Active); UserRepository.Save(user); var network = new Network("Test"); NetworkRepository.Save(network); var userNetwork = new UserNetwork(user, network); UserNetworkRepository.Save(userNetwork); // test GetByUser var userNetworks1 = UserNetworkRepository.GetByUser(user.ID); Assert.Greater(userNetworks1.Count, 0); // test GetByNetwork var userNetworks2 = UserNetworkRepository.GetByNetwork(network.ID); Assert.Greater(userNetworks2.Count, 0); // test Get(id) var userNetwork1 = UserNetworkRepository.Get(userNetwork.ID); Assert.IsNotNull(userNetwork1); Assert.AreEqual(user.ID, userNetwork1.UserID); Assert.AreEqual(network.ID, userNetwork1.NetworkID); Assert.IsNotNull(userNetwork1.User); Assert.IsNotNull(userNetwork1.Network); // test Get(userId, networkId) var userNetwork2 = UserNetworkRepository.Get(user.ID, network.ID); Assert.IsNotNull(userNetwork2); // test Delete UserNetworkRepository.Delete(userNetwork.ID); var userNetwork3 = UserNetworkRepository.Get(userNetwork.ID); Assert.IsNull(userNetwork3); }
public void UserTest() { var user = new User("Test", "TestPass", (int)UserRole.Administrator, (int)UserStatus.Active); UserRepository.Save(user); // test GetAll var users = UserRepository.GetAll(); Assert.Greater(users.Count, 0); // test Get(id) var user1 = UserRepository.Get(user.ID); Assert.IsNotNull(user1); Assert.AreEqual("Test", user1.Login); Assert.IsTrue(user1.IsValidPassword("TestPass")); Assert.IsFalse(user1.IsValidPassword("TestPass2")); Assert.AreEqual((int)UserRole.Administrator, user1.Role); Assert.AreEqual((int)UserStatus.Active, user1.Status); // test Get(name) var user2 = UserRepository.Get("Test"); Assert.IsNotNull(user2); // test Save user.Login = "******"; user.SetPassword("TestPass2"); user.Role = (int)UserRole.Client; user.Status = (int)UserStatus.Disabled; user.LastLogin = DateTime.UtcNow; user.LoginAttempts = 1; UserRepository.Save(user); var user3 = UserRepository.Get(user.ID); Assert.AreEqual("Test2", user3.Login); Assert.IsTrue(user3.IsValidPassword("TestPass2")); Assert.AreEqual((int)UserRole.Client, user3.Role); Assert.AreEqual((int)UserStatus.Disabled, user3.Status); Assert.IsNotNull(user3.LastLogin); Assert.AreEqual(1, user3.LoginAttempts); // test Delete UserRepository.Delete(user.ID); var user4 = UserRepository.Get(user.ID); Assert.IsNull(user4); }
public void OAuthGrant() { var user = new User("Test", 0, 0); user.SetPassword("pass"); DataContext.User.Save(user); RegisterTearDown(() => DataContext.User.Delete(user.ID)); var accessKey = new AccessKey(user.ID, AccessKeyType.OAuth, "test"); DataContext.AccessKey.Save(accessKey); RegisterTearDown(() => DataContext.AccessKey.Delete(accessKey.ID)); var client = new OAuthClient("Test", "test.com", "http://test.com/oauth2", "test_client"); DataContext.OAuthClient.Save(client); RegisterTearDown(() => DataContext.OAuthClient.Delete(client.ID)); var grant = new OAuthGrant(client, user.ID, accessKey, 0, "scope"); grant.AuthCode = Guid.NewGuid(); DataContext.OAuthGrant.Save(grant); RegisterTearDown(() => DataContext.OAuthGrant.Delete(grant.ID)); // test GetByUser var grants = DataContext.OAuthGrant.GetByUser(user.ID); Assert.Greater(grants.Count, 0); // test Get(id) var grant1 = DataContext.OAuthGrant.Get(grant.ID); Assert.IsNotNull(grant1); Assert.Less(Math.Abs(DateTime.UtcNow.Subtract(grant1.Timestamp).TotalMinutes), 10); Assert.AreEqual(0, grant1.Type); Assert.AreEqual("scope", grant1.Scope); Assert.AreEqual(client.ID, grant1.ClientID); Assert.IsNotNull(grant1.Client); Assert.AreEqual(user.ID, grant1.UserID); Assert.AreEqual(accessKey.ID, grant1.AccessKeyID); Assert.IsNotNull(grant1.AccessKey); // test Get(authCode) var grant2 = DataContext.OAuthGrant.Get(grant.AuthCode.Value); Assert.IsNotNull(grant2); Assert.AreEqual(0, grant2.Type); Assert.AreEqual("scope", grant2.Scope); Assert.AreEqual(user.ID, grant2.UserID); Assert.AreEqual(client.ID, grant2.ClientID); Assert.IsNotNull(grant2.Client); Assert.AreEqual(accessKey.ID, grant2.AccessKeyID); Assert.IsNotNull(grant2.AccessKey); // test Save grant.AuthCode = Guid.NewGuid(); grant.Type = 1; grant.AccessType = 1; grant.RedirectUri = "http://test.com/oauth"; grant.Scope = "scope scope2"; grant.Networks = new[] { 5, 10 }; DataContext.OAuthGrant.Save(grant); var grant3 = DataContext.OAuthGrant.Get(grant.ID); Assert.AreEqual(grant.AuthCode, grant3.AuthCode); Assert.AreEqual(1, grant3.Type); Assert.AreEqual(1, grant3.AccessType); Assert.AreEqual("http://test.com/oauth", grant3.RedirectUri); Assert.AreEqual("scope scope2", grant3.Scope); Assert.AreEqual(2, grant3.Networks.Length); Assert.AreEqual(5, grant3.Networks[0]); Assert.AreEqual(10, grant3.Networks[1]); Assert.AreEqual(user.ID, grant3.UserID); Assert.AreEqual(client.ID, grant3.ClientID); Assert.IsNotNull(grant3.Client); Assert.AreEqual(accessKey.ID, grant3.AccessKeyID); Assert.IsNotNull(grant3.AccessKey); // test update relationship var client2 = new OAuthClient("Test2", "test2.com", "http://test.com/oauth/2", "test_client2"); DataContext.OAuthClient.Save(client2); RegisterTearDown(() => DataContext.OAuthClient.Delete(client2.ID)); grant.Client = client2; DataContext.OAuthGrant.Save(grant); var grant4 = DataContext.OAuthGrant.Get(grant.ID); Assert.AreEqual(client2.ID, grant4.ClientID); Assert.IsNotNull(grant4.Client); // test Delete DataContext.OAuthClient.Delete(grant.ID); var grant5 = DataContext.OAuthClient.Get(grant.ID); Assert.IsNull(grant5); }
public void UserNetwork() { var user = new User("Test", (int)UserRole.Administrator, (int)UserStatus.Active); user.SetPassword("TestPass"); DataContext.User.Save(user); RegisterTearDown(() => DataContext.User.Delete(user.ID)); var network = new Network("Test"); DataContext.Network.Save(network); RegisterTearDown(() => DataContext.Network.Delete(network.ID)); var userNetwork = new UserNetwork(user, network); DataContext.UserNetwork.Save(userNetwork); RegisterTearDown(() => DataContext.UserNetwork.Delete(userNetwork.ID)); // test GetByUser var userNetworks1 = DataContext.UserNetwork.GetByUser(user.ID); Assert.Greater(userNetworks1.Count, 0); // test GetByNetwork var userNetworks2 = DataContext.UserNetwork.GetByNetwork(network.ID); Assert.Greater(userNetworks2.Count, 0); // test Get(id) var userNetwork1 = DataContext.UserNetwork.Get(userNetwork.ID); Assert.IsNotNull(userNetwork1); Assert.AreEqual(user.ID, userNetwork1.UserID); Assert.AreEqual(network.ID, userNetwork1.NetworkID); Assert.IsNotNull(userNetwork1.User); Assert.IsNotNull(userNetwork1.Network); // test Get(userId, networkId) var userNetwork2 = DataContext.UserNetwork.Get(user.ID, network.ID); Assert.IsNotNull(userNetwork2); // test Delete DataContext.UserNetwork.Delete(userNetwork.ID); var userNetwork3 = DataContext.UserNetwork.Get(userNetwork.ID); Assert.IsNull(userNetwork3); }