Beispiel #1
0
 private IEnumerable <Models.BookModel> GetBookList(int userId, string bookName, bool full)
 {
     using (BookDb.BookDbContext db = new BookDb.BookDbContext())
     {
         if (full)
         {
             return(db.Book.Where(x => bookName == null ? true : x.Name.ToLower().Contains(bookName.ToLower()))
                    .Select(x => new Models.BookModel
             {
                 bookId = x.Id,
                 lnkId = x.LnkUserBook.Any(y => y.UserId == userId)? -1: (int?)null,
                 bookName = x.Name
             }).ToArray());
         }
         else
         {
             return(db.LnkUserBook.Where(x => x.UserId == userId)
                    .Select(x => new Models.BookModel
             {
                 bookId = x.BookId,
                 lnkId = x.Id,
                 bookName = x.Book.Name
             }).Where(x => bookName == null? true: x.bookName.ToLower().Contains(bookName.ToLower()))
                    .ToArray());
         }
     }
 }
Beispiel #2
0
        public void RemoveBook(Models.BookModel search)
        {
            var id = HttpContext.User.FindFirst("id");

            if (id == null)
            {
                throw new Exceptions.AuthorizationException("Ошибка аутентификации, отсутствуют дополнительные параметры пользователя");
            }

            using (BookDb.BookDbContext db = new BookDb.BookDbContext())
            {
                using (var scope = db.Database.BeginTransaction())
                {
                    var lnk = db.LnkUserBook.Find(search.lnkId.Value);
                    if (lnk == null)
                    {
                        throw new Exceptions.GeneralException("Связка не найдена");
                    }

                    db.LnkUserBook.Remove(lnk);
                    db.SaveChanges();
                    scope.Commit();
                }
            }
        }
Beispiel #3
0
        public IActionResult LogIn(Models.LoginModel user)
        {
            if (user == null)
            {
                throw new Exceptions.GeneralException("Модель аутентификации отсутствует");
            }

            using (BookDb.BookDbContext db = new BookDb.BookDbContext())
            {
                BookDb.User dbUser = db.User.FirstOrDefault(x => x.Login == user.UserName && x.Password == user.Password);
                if (dbUser == null)
                {
                    throw new Exceptions.AuthorizationException("Указаны неверный логин или пароль");
                }
                else
                {
                    //аутентификация прошла успешно
                    //составляем, некоторый список параметров аутентифицированного пользователя
                    var claims = new List <Claim> {
                        new Claim(ClaimsIdentity.DefaultNameClaimType, dbUser.Login),
                        new Claim("id", dbUser.Id.ToString())
                    };

                    //генерим токен
                    var secretKey         = AuthOptions.SecretKey;
                    var signinCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256);
                    var tokeOptions       = new JwtSecurityToken(
                        issuer: AuthOptions.ISSUER,
                        audience: AuthOptions.AUDIENCE,
                        claims: claims,
                        notBefore: DateTime.Now,
                        expires: DateTime.Now.AddMinutes(AuthOptions.LIFETIME),
                        signingCredentials: signinCredentials
                        );
                    var tokenString = new JwtSecurityTokenHandler().WriteToken(tokeOptions);

                    //добавляем токен в куки, он не видим клиентом
                    HttpContext.Response.Cookies.Append(AuthOptions.TOKENCOOKIE, tokenString,
                                                        new CookieOptions
                    {
                        HttpOnly = true,
                        MaxAge   = TimeSpan.FromMinutes(AuthOptions.LIFETIME)
                    });
                    //добавляем флаг прохождения аутентификации, с которым клиент сверяется
                    HttpContext.Response.Cookies.Append(AuthOptions.TESTCOOKIE, "true",
                                                        new CookieOptions
                    {
                        HttpOnly = false,
                        MaxAge   = TimeSpan.FromMinutes(AuthOptions.LIFETIME)
                    });
                    return(Ok());
                }
            }
        }
Beispiel #4
0
        public void AddBook(Models.BookModel search)
        {
            var id = HttpContext.User.FindFirst("id");

            if (id == null)
            {
                throw new Exceptions.AuthorizationException("Ошибка аутентификации, отсутствуют дополнительные параметры пользователя");
            }

            using (BookDb.BookDbContext db = new BookDb.BookDbContext())
            {
                using (var scope = db.Database.BeginTransaction())
                {
                    var lnk = new BookDb.LnkUserBook();
                    lnk.BookId = search.bookId.Value;
                    lnk.UserId = int.Parse(id.Value);

                    db.LnkUserBook.Add(lnk);
                    db.SaveChanges();
                    scope.Commit();
                }
            }
        }
Beispiel #5
0
        public IActionResult Registry(Models.RegistryModel model)
        {
            using (BookDb.BookDbContext db = new BookDb.BookDbContext())
            {
                if (db.User.Any(x => x.Login == model.UserName))
                {
                    throw new Exceptions.GeneralException("Пользователь с указанным логином уже имеется");
                }

                using (IDbContextTransaction trans = db.Database.BeginTransaction())
                {
                    var user = new BookDb.User();
                    user.Login    = model.UserName;
                    user.Password = model.Password;

                    db.User.Add(user);
                    db.SaveChanges();

                    trans.Commit();
                }
            }
            return(Ok());
        }