Exemplo n.º 1
0
        public async Task <SensorValue> GetLastReading(int userId, int sensorId)
        {
            using (var db = new GreenHandContext())
            {
                db.Configuration.ProxyCreationEnabled = false;

                return(await db.SensorValues.Where(s => s.UserId == userId && s.SensorId == sensorId).OrderByDescending(s => s.Timestamp).FirstOrDefaultAsync());
            }
        }
Exemplo n.º 2
0
        public async Task CreateUser(string email, string password)
        {
            if (string.IsNullOrEmpty(email))
            {
                throw new ArgumentException("Email address cannot be empty.");
            }

            if (string.IsNullOrEmpty(password))
            {
                throw new ArgumentException("Password cannot be empty.");
            }

            if (password.Length < 8)
            {
                throw new ArgumentException("Password must be at least 8 characters long.");
            }

            using (var db = new GreenHandContext())
            {
                if (await db.Users.AnyAsync(u => u.Email == email))
                {
                    throw new ArgumentException("That email address is in use.");
                }

                //var random = new Random();
                //int salt = random.Next(int.MaxValue);
                //string hashedPassword = CryptoHelper.CreateSHAHash(password, salt.ToString());

                var salt = Guid.NewGuid().ToString();
                var protectedPassword = CryptoHelper.EncryptString(password, salt);

                var user = new User {
                    Email = email, Password = protectedPassword, Salt = salt, ApiKey = (Guid.NewGuid().ToString() + Guid.NewGuid().ToString() + Guid.NewGuid().ToString())
                };
                //var user = new User {Email = email, Password = "******", Salt = hashedPassword, ApiKey = Guid.NewGuid().ToString() + Guid.NewGuid() + Guid.NewGuid() };

                db.Users.Add(user);

                var result = await db.SaveChangesAsync();

                if (result != 1)
                {
                    throw new Exception("Failed to insert user into database");
                }

                db.Environments.Add(new Environment {
                    Name = "My Enivornment", UserId = user.Id
                });

                var result2 = await db.SaveChangesAsync();

                if (result2 != 1)
                {
                    throw new Exception("Failed to insert Environment into database");
                }
            }
        }
Exemplo n.º 3
0
        public async Task <IEnumerable <Environment> > GetUserEnvironments(int userId)
        {
            using (var db = new GreenHandContext())
            {
                db.Configuration.ProxyCreationEnabled = false;

                return(await db.Environments.Where(e => e.UserId == userId).ToListAsync());;
            }
        }
Exemplo n.º 4
0
        public async Task <IEnumerable <SensorValue> > GetSensorValues(int userId, int days)
        {
            using (var db = new GreenHandContext())
            {
                //make sure the linq statement uses the same date for every iteration
                var now = DateTime.Now;
                db.Configuration.ProxyCreationEnabled = false;

                return(await db.SensorValues.Where(e => e.UserId == userId && DbFunctions.DiffDays(now, e.Timestamp) <= days).ToListAsync());
            }
        }
Exemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="user"></param>
        /// <returns>The id of the user, if susscessful, -1 else.</returns>
        public async Task <int> Login(User user)
        {
            using (var db = new GreenHandContext())
            {
                var dbUser = await db.Users.FirstOrDefaultAsync(u => u.Email == user.Email);

                //string encryptedPassword = CryptoHelper.CreateSHAHash(user.Password, dbUser.Salt);

                //return dbUser != null && CryptoHelper.CreateSHAHash(dbUser.Password, dbUser.Salt) == user.Salt;
                return(dbUser != null && CryptoHelper.DecryptString(dbUser.Password, dbUser.Salt) == user.Password ? dbUser.Id : -1);
            }
        }
Exemplo n.º 6
0
        public async Task StoreSensorData(string key, int sensorId, string type, double value)
        {
            using (var db = new GreenHandContext())
            {
                var user = await db.Users.FirstOrDefaultAsync(u => u.ApiKey == key);

                if (user == null)
                {
                    throw new SecurityException("Invalid Credentials");
                }

                var sensor = await db.Sensors.FirstOrDefaultAsync(s => s.Id == sensorId);

                if (sensor == null)
                {
                    throw new ArgumentException("Invalid sensor");
                }

                if (sensor.UserId != user.Id)
                {
                    throw new ArgumentException("Sensor mismatch");
                }

                SensorReadingType valueType;

                switch (type)
                {
                case "temp":
                    valueType = SensorReadingType.Temperature;
                    break;

                case "humid":
                    valueType = SensorReadingType.Humidity;
                    break;

                default:
                    throw new ArgumentException("Invalid type");
                }

                db.SensorValues.Add(new SensorValue {
                    UserId = user.Id, ReadingType = valueType, ReadResult = value, SensorId = sensorId, Timestamp = DateTime.Now
                });

                var result = await db.SaveChangesAsync();

                if (result == 0)
                {
                    throw new Exception("Failed to insert sensor value into database");
                }
            }
        }
Exemplo n.º 7
0
        public async Task <string> RegisterSensor(int userId, int sensorId, int environmentId)
        {
            using (var db = new GreenHandContext())
            {
                db.Configuration.ProxyCreationEnabled = false;
                var sensor = await db.Sensors.FirstOrDefaultAsync(s => s.Id == sensorId);

                var user = await db.Users.FirstOrDefaultAsync(u => u.Id == userId);

                var environment = await db.Environments.FirstOrDefaultAsync(u => u.Id == environmentId);

                if (sensor == null)
                {
                    return("Error: Sensor could not be found. Please contact customer service.");
                }

                if (environment == null)
                {
                    return("Error: Environment could not be found.");
                }

                if (user == null)
                {
                    return("Error: User could not be found.");
                }

                if (sensor.UserId != null && sensor.UserId != userId)
                {
                    return("Error: This sensor has already been registered to another user. Please contact customer service.");
                }

                sensor.UserId        = userId;
                sensor.EnvironmentId = environmentId;
                await db.SaveChangesAsync();

                return(user.ApiKey);
            }
        }