예제 #1
0
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            if (actionContext.Request.Headers.Authorization == null)
            {
                //if response is set, server immediately returns it
                //actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized, "Credentials not provided");
                ExceptionHandler.ThrowException(HttpStatusCode.Unauthorized, "Credentials not provided");
            }
            else
            {
                string   authenticationToken = actionContext.Request.Headers.Authorization.Parameter;
                string[] credentials         = authenticationToken.Split(':');
                string   username            = credentials[0];
                byte[]   password            = Sha256(credentials[1]);

                using (programming_tasksEntities entities = new programming_tasksEntities())
                {
                    user userResult = null;

                    try
                    {
                        userResult = entities.users.Single(user => user.username == username &&
                                                           user.password.Equals(password));

                        Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(username), null);
                    }
                    catch (Exception)
                    {
                        ExceptionHandler.ThrowException(HttpStatusCode.Unauthorized, "Authorization failed");
                    }
                }
            }
        }
예제 #2
0
        public RunResultDTO SendSolution(int id, [FromBody] TaskSolutionDTO taskSolution)
        {
            using (programming_tasksEntities entities = new programming_tasksEntities())
            {
                string username = Thread.CurrentPrincipal.Identity.Name; //get username from authentication

                user userResult = entities.users.First(user => user.username == username);
                task taskResult = entities.tasks.Find(id);

                if (taskResult == null)
                {
                    ExceptionHandler.ThrowException(HttpStatusCode.NotFound, "Task with id " + id + " doesn't exist");
                }

                CodeExecutor codeExecutor = new CodeExecutor();

                RunResultDTO runResult = codeExecutor.RunTask(taskSolution, taskResult);

                entities.users_solutions.Add(new users_solutions()
                {
                    user        = userResult,
                    task        = taskResult,
                    code        = taskSolution.Code,
                    status      = runResult.CorrectExamples == taskResult.examples.Count,
                    description = runResult.CorrectExamples == taskResult.examples.Count ?
                                  "Code executed successfully for all examples" :
                                  "Code failed at some example(s)",
                    date = DateTime.Now
                });

                entities.SaveChanges();

                return(runResult);
            }
        }
예제 #3
0
        public TaskDTO GetTask(int id)
        {
            using (programming_tasksEntities entitities = new programming_tasksEntities())
            {
                task taskResult = entitities.tasks.Find(id);

                if (taskResult == null) //not found
                {
                    ExceptionHandler.ThrowException(HttpStatusCode.NotFound, "Task with id " + id + " not found");
                }

                return(new TaskDTO()
                {
                    Id = taskResult.id,
                    Title = taskResult.title,
                    Description = taskResult.description
                });
            }
        }
예제 #4
0
        public List <TaskDTO> GetTasks()
        {
            using (programming_tasksEntities entitities = new programming_tasksEntities())
            {
                List <TaskDTO> tasksDTO = new List <TaskDTO>();
                List <task>    tasks    = entitities.tasks.ToList();

                for (int i = 0; i < tasks.Count; ++i)
                {
                    tasksDTO.Add(new TaskDTO()
                    {
                        Id          = tasks[i].id,
                        Title       = tasks[i].title,
                        Description = tasks[i].description
                    });
                }

                return(tasksDTO);
            }
        }