public static async Task <HttpResponseData> RunAsync( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "users/login")] HttpRequestData req, GetUserDto data ) { // Create response var response = req.CreateResponse(); // Validate params var valid = Validate(data); if (valid.Item1) { try { // Get container var userContainer = await CosmosDb.GetContainerAsync(CosmosDb.USER_CONTAINER_ID); // Get item var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.email = @email") .WithParameter("@email", data.Email.ToLower()); var user = await CosmosDb.GetItemByQueryAsync <User>(userContainer, query); if (user != null && Utils.VerifyPassword(data.Password, user.Salt, user.Password)) { var returnUser = new ReturnUserDto() { Id = user.Id, Name = user.Name, Email = user.Email }; // Write item to response await response.WriteAsJsonAsync(returnUser); } else { // Response not found message await response.WriteAsJsonAsync("Incorrect email or password"); } } catch (CosmosException ex) { // Response error message await response.WriteAsJsonAsync(ex.Message); // Set http status code response.StatusCode = (HttpStatusCode)ex.Status; } } else { // Response invalid await response.WriteAsJsonAsync(valid.Item2); // Set http status code response.StatusCode = HttpStatusCode.BadRequest; } return(response); }
public static async Task <HttpResponseData> RunAsync( [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "users/register")] HttpRequestData req, CreateUserDto data ) { // Create response var response = req.CreateResponse(); // Validate params var valid = Validate(data); if (valid.Item1) { try { // Get container var userContainer = await CosmosDb.GetContainerAsync(CosmosDb.USER_CONTAINER_ID); // Get item var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.email = @email") .WithParameter("@email", data.Email.ToLower()); var currentUser = await CosmosDb.GetItemByQueryAsync <User>(userContainer, query); if (currentUser == null) { // Create new instance var salt = Utils.GenerateSalt(); var user = new User() { Name = data.Name, Email = data.Email.ToLower(), Salt = salt, Password = Utils.HashPassword(data.Password, salt), }; var returnUser = new ReturnUserDto() { Id = user.Id, Name = user.Name, Email = user.Email }; Task.WaitAll( // Save to database CosmosDb.CreateItemAsync <User>(userContainer, user, user.Id.ToString()), // Write user to response response.WriteAsJsonAsync(returnUser).AsTask() ); } else { // Response duplicate message await response.WriteAsJsonAsync("Email is registered"); } } catch (CosmosException ex) { // Response error message await response.WriteAsJsonAsync(ex.Message); // Set http status code response.StatusCode = (HttpStatusCode)ex.Status; } } else { // Response invalid await response.WriteAsJsonAsync(valid.Item2); // Set http status code response.StatusCode = HttpStatusCode.BadRequest; } return(response); }