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