예제 #1
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");
                }
            }
        }
예제 #2
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");
                }
            }
        }
예제 #3
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);
            }
        }