Ejemplo n.º 1
0
        public static async Task <HttpResponseData> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "sessions/{sessionIdString}")] HttpRequestData req,
            string sessionIdString
            )
        {
            // Create response
            var response = req.CreateResponse();

            // Get user id
            var userId = Utils.GetUserId(req.Headers);

            // Validate params
            Guid sessionId;
            var  valid = ValidateAndTryParse(userId, sessionIdString, out sessionId);

            if (valid.Item1)
            {
                try
                {
                    // Get container
                    var sessionContainer = await CosmosDb.GetContainerAsync(CosmosDb.SESSION_CONTAINER_ID);

                    // Get item
                    var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.userId = @userId AND c.id = @sessionId")
                                .WithParameter("@userId", userId)
                                .WithParameter("@sessionId", sessionId);
                    var session = await CosmosDb.GetItemByQueryAsync <Session>(sessionContainer, query);

                    if (session != null)
                    {
                        // Write item to response
                        await response.WriteAsJsonAsync(session);
                    }
                    else
                    {
                        // Response not found message
                        await response.WriteAsJsonAsync("Session not found");
                    }
                }
                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);
        }
Ejemplo n.º 2
0
        public static async Task <HttpResponseData> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "sessions")] HttpRequestData req
            )
        {
            // Create response
            var response = req.CreateResponse();

            // Get user id
            var userId = Utils.GetUserId(req.Headers);

            // Validate params
            var valid = Validate(userId);

            if (valid.Item1)
            {
                try
                {
                    // Get container
                    var sessionContainer = await CosmosDb.GetContainerAsync(CosmosDb.SESSION_CONTAINER_ID);

                    // Get item
                    var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.userId = @userId")
                                .WithParameter("@userId", userId);
                    var sessions = await CosmosDb.GetItemsByQueryAsync <Session>(sessionContainer, query);

                    if (sessions != null)
                    {
                        var sortedSessions = sessions.OrderByDescending(session => session.StartDateTime).ToList();

                        // Write items to response
                        await response.WriteAsJsonAsync(sortedSessions);
                    }
                    else
                    {
                        // Response not found message
                        await response.WriteAsJsonAsync("Sessions not found");
                    }
                }
                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);
        }
Ejemplo n.º 3
0
        public static async Task <HttpResponseData> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "users/verifyid")] HttpRequestData req
            )
        {
            // Create response
            var response = req.CreateResponse();

            // Get user id
            var userId = Utils.GetUserId(req.Headers);

            // Validate params
            var valid = Validate(userId);

            if (valid)
            {
                try
                {
                    // Get container
                    var userContainer = await CosmosDb.GetContainerAsync(CosmosDb.USER_CONTAINER_ID);

                    // Get item
                    var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.id = @userId")
                                .WithParameter("@userId", userId);
                    var user = await CosmosDb.GetItemByQueryAsync <User>(userContainer, query);

                    if (user != null)
                    {
                        // Write true to response
                        await response.WriteAsJsonAsync(true);
                    }
                    else
                    {
                        // Write false to response
                        await response.WriteAsJsonAsync(false);
                    }
                }
                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(false);

                // Set http status code
                response.StatusCode = HttpStatusCode.BadRequest;
            }

            return(response);
        }
Ejemplo n.º 4
0
        public static async Task <HttpResponseData> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "sessions")] HttpRequestData req,
            CreateSessionDto data
            )
        {
            // Create response
            var response = req.CreateResponse();

            // Get user id
            var userId = Utils.GetUserId(req.Headers);

            // Validate params
            var valid = Validate(userId, data);

            if (valid.Item1)
            {
                try
                {
                    // Get container
                    var sessionContainer = await CosmosDb.GetContainerAsync(CosmosDb.SESSION_CONTAINER_ID);

                    // Create new instance
                    var session = new Session()
                    {
                        UserId      = userId,
                        SessionName = data.SessionName
                    };

                    Task.WaitAll(
                        // Save to database
                        CosmosDb.CreateItemAsync <Session>(sessionContainer, session, session.UserId.ToString()),
                        // Write id to response
                        response.WriteAsJsonAsync(session.Id).AsTask()
                        );
                }
                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);
        }
Ejemplo n.º 5
0
        public static async Task <HttpResponseData> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "put", Route = "users")] HttpRequestData req,
            UpdateUserDto data
            )
        {
            // Create response
            var response = req.CreateResponse();

            // Get user id
            var userId = Utils.GetUserId(req.Headers);

            // Validate params
            var valid = Validate(userId, 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.id = @userId")
                                .WithParameter("@userId", userId);
                    var user = await CosmosDb.GetItemByQueryAsync <User>(userContainer, query);

                    if (user != null && Utils.VerifyPassword(data.Password, user.Salt, user.Password))
                    {
                        // Update item
                        user.Name = data.Name;
                        if (data.UpdatePassword)
                        {
                            user.Salt     = Utils.GenerateSalt();
                            user.Password = Utils.HashPassword(data.NewPassword, user.Salt);
                        }

                        Task.WaitAll(
                            // Save to database
                            CosmosDb.UpdateItemAsync <User>(userContainer, user, user.Id.ToString(), user.Id.ToString()),
                            // Response update successful
                            response.WriteAsJsonAsync("Updated user").AsTask()
                            );
                    }
                    else
                    {
                        // Response not found message
                        await response.WriteAsJsonAsync("Incorrect 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);
        }
Ejemplo n.º 6
0
        public static async Task <HttpResponseData> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "sessions/{sessionIdString}/snapshots")] HttpRequestData req,
            string sessionIdString,
            CreateSnapshotDto data
            )
        {
            // Create response
            var response = req.CreateResponse();

            // Get user id
            var userId = Utils.GetUserId(req.Headers);

            // Validate params
            Guid sessionId;
            var  valid = ValidateAndTryParse(userId, sessionIdString, out sessionId, data);

            if (valid.Item1)
            {
                try
                {
                    // Start tasks
                    var getPerceivedEmotionTask  = CognitiveServices.GetPerceivedEmotionAsync(data.ImageBase64);
                    var getSnapshotContainerTask = CosmosDb.GetContainerAsync(CosmosDb.SNAPSHOT_CONTAINER_ID);
                    var getSessionContainerTask  = CosmosDb.GetContainerAsync(CosmosDb.SESSION_CONTAINER_ID);

                    // Wait all tasks to complete
                    Task.WaitAll(
                        getPerceivedEmotionTask,
                        getSnapshotContainerTask,
                        getSessionContainerTask
                        );

                    // Get task results
                    var perceivedEmotion  = getPerceivedEmotionTask.Result;
                    var snapshotContainer = getSnapshotContainerTask.Result;
                    var sessionContainer  = getSessionContainerTask.Result;

                    // Check if not null
                    if (perceivedEmotion != null)
                    {
                        // Get item
                        var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.userId = @userId AND c.id = @sessionId")
                                    .WithParameter("@userId", userId)
                                    .WithParameter("@sessionId", sessionId);
                        var session = await CosmosDb.GetItemByQueryAsync <Session>(sessionContainer, query);

                        if (session != null)
                        {
                            // Update item
                            session.LastUpdatedDateTime = DateTime.Now;

                            // Create new instance
                            var snapshot = new Models.Snapshot()
                            {
                                SessionId        = sessionId,
                                PerceivedEmotion = perceivedEmotion
                            };

                            Task.WaitAll(
                                // Save to database
                                CosmosDb.CreateItemAsync <Snapshot>(snapshotContainer, snapshot, snapshot.SessionId.ToString()),
                                CosmosDb.UpdateItemAsync <Session>(sessionContainer, session, session.Id.ToString(), session.UserId.ToString()),
                                // Response save successful
                                response.WriteAsJsonAsync(snapshot).AsTask()
                                );
                        }
                        else
                        {
                            // Response not found message
                            await response.WriteAsJsonAsync("Session not found");
                        }
                    }
                    else
                    {
                        // Response no result message
                        await response.WriteAsJsonAsync("No faces detected");
                    }
                }
                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);
        }
Ejemplo n.º 7
0
        public static async Task <HttpResponseData> RunAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "delete", Route = "sessions/{sessionIdString}")] HttpRequestData req,
            string sessionIdString
            )
        {
            // Create response
            var response = req.CreateResponse();

            // Get user id
            var userId = Utils.GetUserId(req.Headers);

            // Validate params
            Guid sessionId;
            var  valid = ValidateAndTryParse(userId, sessionIdString, out sessionId);

            if (valid.Item1)
            {
                try
                {
                    // Start tasks
                    var getSessionContainerTask  = CosmosDb.GetContainerAsync(CosmosDb.SESSION_CONTAINER_ID);
                    var getSnapshotContainerTask = CosmosDb.GetContainerAsync(CosmosDb.SNAPSHOT_CONTAINER_ID);

                    // Wait all tasks to complete
                    Task.WaitAll(
                        getSessionContainerTask,
                        getSnapshotContainerTask
                        );

                    // Get task results
                    var sessionContainer  = getSessionContainerTask.Result;
                    var snapshotContainer = getSnapshotContainerTask.Result;

                    var query = new QueryDefinition(@$ "SELECT * FROM c WHERE c.sessionId = @sessionId")
                                .WithParameter("@sessionId", sessionId);
                    var snapshots = await CosmosDb.GetItemsByQueryAsync <Snapshot>(snapshotContainer, query);

                    var snapshotIds = snapshots.Select(snapshot => snapshot.Id.ToString()).ToList();

                    Task.WaitAll(
                        // Delete item
                        CosmosDb.DeleteItemsByIdsAsync <Snapshot>(snapshotContainer, snapshotIds, sessionId.ToString()),
                        CosmosDb.DeleteItemByIdAsync <Session>(sessionContainer, sessionId.ToString(), userId.ToString()),
                        // Response delete successful
                        response.WriteAsJsonAsync("Deleted session").AsTask()
                        );
                }
                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);
        }
Ejemplo n.º 8
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);
        }
Ejemplo n.º 9
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);
        }