Ejemplo n.º 1
0
        public async Task <IActionResult> PostTask([FromBody] TaskDto taskDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Plug plug = await _context.Plugs.FindAsync(taskDto.DeviceMac);

            if (plug == null)
            {
                return(NotFound(Error.PlugDoesNotExist));
            }

            if (UserOwnershipValidator.IsNotValidated(_currentUsername, plug, _context))
            {
                return(Unauthorized(Error.UnauthorizedOwner));
            }

            Models.Task task = _mapper.Map <Models.Task>(taskDto);
            plug.AddTask(task, _context);

            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetTasks", new { mac = task.DeviceMac }, task));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> DeleteTask([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var task = await _context.Tasks.FindAsync(id);

            if (task == null)
            {
                return(NotFound());
            }

            if (UserOwnershipValidator.IsNotValidated(_currentUsername, task, _context))
            {
                return(Unauthorized(Error.UnauthorizedOwner));
            }

            _context.Tasks.Remove(task);
            task.Delete(); // cancel actual Hangfire job
            await _context.SaveChangesAsync();

            return(Ok(task));
        }
Ejemplo n.º 3
0
        public async Task <ActionResult <IEnumerable <PowerUsageSampleDto> > > GetPowerUsageSamples([FromBody] DateRangeDto dateRange)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            string mac = dateRange.Mac;

            Plug plug = await _context.Plugs.Include(p => p.Samples).SingleOrDefaultAsync(p => p.Mac == mac);

            if (plug == null)
            {
                return(NotFound(Error.PlugDoesNotExist));
            }

            if (UserOwnershipValidator.IsNotValidated(_currentUsername, plug, _context))
            {
                return(Unauthorized(Error.UnauthorizedOwner));
            }

            return(Ok(_mapper.Map <List <PowerUsageSampleDto> >(plug.Samples
                                                                .Where(s => s.SampleDate >= dateRange.EarlierDate && s.SampleDate <= dateRange.LaterDate)
                                                                .OrderBy(s => s.SampleDate))));
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> ChangePassword(string username, [FromBody] PasswordChangeRequestDto request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            User user = await _context.Users.FindAsync(username);

            if (user == null)
            {
                return(NotFound(Error.UserDoesNotExist));
            }

            if (UserOwnershipValidator.IsNotValidated(_currentUsername, user))
            {
                return(Unauthorized(Error.UnauthorizedUser));
            }

            if (user.Password != request.OldPassword)
            {
                return(BadRequest(Error.IncorrectOldPassword));
            }


            var appUser = await _userManager.FindByNameAsync(username);

            await _userManager.ChangePasswordAsync(appUser, request.OldPassword, request.NewPassword);

            user.Password = request.NewPassword;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!UserExists(username))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Ejemplo n.º 5
0
        public async Task <ActionResult <IEnumerable <TaskDto> > > GetTasks(string mac)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Plug plug = await _context.Plugs.Include(p => p.Tasks).SingleOrDefaultAsync(p => p.Mac == mac);

            if (plug == null)
            {
                return(NotFound(Error.PlugDoesNotExist));
            }

            if (UserOwnershipValidator.IsNotValidated(_currentUsername, plug, _context))
            {
                return(Unauthorized(Error.UnauthorizedOwner));
            }

            return(Ok(_mapper.Map <List <TaskDto> >(plug.Tasks)));
        }
Ejemplo n.º 6
0
        public async Task <ActionResult <IEnumerable <PlugDto> > > GetUserPlugs([FromRoute] string username)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            User user = await _context.Users.Include(u => u.Plugs).SingleOrDefaultAsync(u => u.Username == username);

            if (user == null)
            {
                return(NotFound(Error.UserDoesNotExist));
            }

            if (UserOwnershipValidator.IsNotValidated(_currentUsername, user))
            {
                return(Unauthorized(Error.UnauthorizedOwner));
            }

            return(Ok(_mapper.Map <List <PlugDto> >(user.Plugs.Where(p => p.IsDeleted == false))));
        }
Ejemplo n.º 7
0
        public async Task <ActionResult <PlugDto> > GetPlug([FromRoute] string mac)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var plug = await _context.Plugs.FindAsync(mac);

            if (plug == null)
            {
                return(NotFound(Error.PlugDoesNotExist));
            }

            if (UserOwnershipValidator.IsNotValidated(_currentUsername, plug, _context))
            {
                return(Unauthorized(Error.UnauthorizedOwner));
            }

            return(Ok(_mapper.Map <PlugDto>(plug)));
        }
Ejemplo n.º 8
0
        public async Task <IActionResult> PutPlug([FromBody] PlugDtoIn plugDtoIn)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Plug plug = await _context.Plugs.FindAsync(plugDtoIn.Mac);

            if (plug == null)
            {
                return(NotFound(Error.PlugDoesNotExist));
            }

            if (UserOwnershipValidator.IsNotValidated(_currentUsername, plug, _context))
            {
                return(Unauthorized(Error.UnauthorizedOwner));
            }

            _mapper.Map(plugDtoIn, plug);

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!PlugExists(plugDtoIn.Mac))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Ejemplo n.º 9
0
        public async Task <IActionResult> TurnApproveOrDenyPlug(string mac, [FromQuery] Models.Task.Operations?op, [FromQuery] bool?approved)
        {
            Plug plug = await _context.Plugs.FindAsync(mac);

            if (plug == null)
            {
                return(NotFound(Error.PlugDoesNotExist));
            }

            if (UserOwnershipValidator.IsNotValidated(_currentUsername, plug, _context))
            {
                return(Unauthorized(Error.UnauthorizedOwner));
            }

            if (approved != null)
            {
                plug.Approved = (bool)approved;
                if (!plug.Approved)
                {
                    plug.IsDeleted = true;
                }
            }

            await _context.SaveChangesAsync();

            if (op != null)
            {
                try
                {
                    Models.Task.Execute((Models.Task.Operations)op, plug, _context);
                }
                catch (PlugNotConnectedException)
                {
                    return(BadRequest(Error.PlugNotConnected));
                }
            }

            return(NoContent());
        }