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);
 }
Exemple #16
0
        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);
        }
Exemple #17
0
        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);
        }