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"); } } }
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"); } } }
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); } }