Beispiel #1
0
        public IActionResult Get([FromHeader] string authorization)
        {
            UserReadDbo user = _auth.ValidateUser(authorization);

            if (user == null)
            {
                return(_auth.GetError());
            }

            IEnumerable <Contact> ret = _repo.GetContacts(user.Id).Select(item => new Contact
            {
                Id              = item.Id,
                Name            = item.Name,
                Description     = item.Description,
                Birthdate       = item.Birthdate?.ToString("yyyy-MM-dd"),
                PrettyBirthdate = item.Birthdate?.ToString("MMMM dd, yyyy"),

                CreatedAt = item.CreatedAt.ToLocalTime().ToString("F"),
                UpdatedAt = item.CreatedAt.ToLocalTime().ToString("F"),

                Favorite = item.Favorite,
                GroupId  = item.GroupId
            });

            return(Ok(ret));
        }
Beispiel #2
0
        public IActionResult Put(UpdateContactRequest request, [FromHeader] string authorization)
        {
            IActionResult error = GetError(request);

            if (error != null)
            {
                return(error);
            }

            UserReadDbo user = _auth.ValidateUser(authorization);

            if (user == null)
            {
                return(_auth.GetError());
            }

            DateTime?birthdate = null;

            if (!string.IsNullOrEmpty(request.Birthdate))
            {
                DateTime dt;
                if (DateTime.TryParse(request.Birthdate, out dt))
                {
                    birthdate = dt;
                }
                else
                {
                    return(Error.BadRequest("Invalid birthdate"));
                }
            }

            DateTime now = DateTime.UtcNow;

            ContactUpdateDbo dbo = new ContactUpdateDbo
            {
                Name        = request.Name,
                Birthdate   = birthdate,
                Favorite    = request.Favorite,
                GroupId     = request.GroupId,
                Description = request.Description,
                UpdatedAt   = now,
            };

            if (!_repo.UpdateContact(dbo, request.Id))
            {
                return(NotFound());
            }

            return(Ok());
        }
Beispiel #3
0
        public IActionResult Delete(DeleteContactRequest request, [FromHeader] string authorization)
        {
            UserReadDbo user = _auth.ValidateUser(authorization);

            if (user == null)
            {
                return(_auth.GetError());
            }

            if (!_repo.DeleteContact(request.Id, user.Id))
            {
                return(NotFound());
            }

            return(Ok());
        }
Beispiel #4
0
        public IActionResult Post(NewContactRequest request, [FromHeader] string authorization)
        {
            UserReadDbo user = _auth.ValidateUser(authorization);

            if (user == null)
            {
                return(_auth.GetError());
            }

            DateTime?birthdate = null;

            if (!string.IsNullOrEmpty(request.Birthdate))
            {
                DateTime dt;
                if (DateTime.TryParse(request.Birthdate, out dt))
                {
                    birthdate = dt;
                }
                else
                {
                    return(Error.BadRequest("Invalid birthdate"));
                }
            }

            DateTime now = DateTime.UtcNow;

            ContactCreateDbo dbo = new ContactCreateDbo
            {
                UserId      = user.Id,
                Name        = request.Name,
                Birthdate   = birthdate,
                Favorite    = request.Favorite,
                GroupId     = request.GroupId,
                Description = request.Description,
                CreatedAt   = now,
                UpdatedAt   = now,
            };

            _repo.CreateContact(dbo);

            return(Ok());
        }
        public IActionResult Post(LoginRequest request)
        {
            UserReadDbo user = _userRepo.GetUserByUserName(request.UserName);

            if (user == null)
            {
                return(GetInvalidLogin());
            }

            byte[] hash = Hash.Get(request.Password, user.Nonce);

            if (!hash.SequenceEqual(user.Password))
            {
                return(GetInvalidLogin());
            }

            DateTime now = DateTime.UtcNow;

            Guid id = Guid.NewGuid();

            LoginDbo dbo = new LoginDbo
            {
                Id        = id.ToByteArray(),
                UserId    = user.Id,
                CreatedAt = now
            };

            _loginRepo.CreateLogin(dbo);

            LoginResponse ret = new LoginResponse
            {
                LoginId = id.ToString()
            };

            return(Ok(ret));
        }
Beispiel #6
0
        public IActionResult Post(LoginRequest request)
        {
            if (string.IsNullOrEmpty(request.UserName))
            {
                return(Error.BadRequest("User name is required"));
            }

            if (request.UserName.Length > Max.UserName)
            {
                return(Error.BadRequest("User name is too long"));
            }

            if (string.IsNullOrEmpty(request.Password))
            {
                return(Error.BadRequest("Password is required"));
            }

            if (request.Password.Length > Max.Password)
            {
                return(Error.BadRequest("Password is too long"));
            }

            if (request.Password.Length < Min.Password)
            {
                return(Error.BadRequest("Password is too short"));
            }

            if (request.UserName == request.Password)
            {
                return(Error.BadRequest("User name and password cannot be the same"));
            }

            if (_userRepo.HasUser(request.UserName))
            {
                return(BadRequest(new ErrorResponse {
                    Message = "User name is already in use"
                }));
            }

            if (!request.Password.Any(c => char.IsNumber(c)))
            {
                return(Error.BadRequest("Password must contain a number"));
            }

            if (!request.Password.Any(c => !char.IsNumber(c) & !char.IsLetter(c)))
            {
                return(Error.BadRequest("Password must contain a symbol"));
            }

            if (!request.Password.Any(c => char.IsUpper(c)))
            {
                return(Error.BadRequest("Password must contain an upper-case letter"));
            }

            if (!request.Password.Any(c => char.IsLower(c)))
            {
                return(Error.BadRequest("Password must contain a lower-case letter"));
            }

            DateTime now = DateTime.UtcNow;

            long nonce = Hash.RandomLong();

            UserWriteDbo dbo = new UserWriteDbo
            {
                UserName  = request.UserName,
                Nonce     = nonce,
                Password  = Hash.Get(request.Password, nonce),
                CreatedAt = now
            };

            _userRepo.CreateUser(dbo);

            UserReadDbo user = _userRepo.GetUserByUserName(request.UserName);

            Guid id = Guid.NewGuid();

            LoginDbo loginDbo = new LoginDbo
            {
                Id        = id.ToByteArray(),
                UserId    = user.Id,
                CreatedAt = now
            };

            _loginRepo.CreateLogin(loginDbo);

            LoginResponse response = new LoginResponse
            {
                LoginId = id.ToString()
            };

            return(Ok(response));
        }