Пример #1
0
        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);
        }
Пример #2
0
        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);
        }