Exemple #1
0
        public async Task <IActionResult> ChangePassword([FromBody] ChangePasswordViewModel model)
        {
            if (ModelState.IsValid)
            {                                      // if model is valid
                var UserName = User.Identity.Name; // get id from jwt

                BlogUserIdentity _user = await _userManager.FindByNameAsync(UserName);

                var result = _signInManager.CheckPasswordSignInAsync(_user, model.OldPassword, false);

                if (result.Result.Succeeded)
                {// password was good- change password of this account
                    var ChangingResult = await _userManager.ChangePasswordAsync(_user, model.OldPassword, model.NewPassword);

                    if (ChangingResult.Succeeded)// if it was successfull
                    {
                        return(Ok());
                    }
                    else
                    {
                        return(Conflict());
                    }
                }
                else
                {
                    return(Unauthorized());
                }
            }
            else
            {
                return(Conflict());
            }
        }
Exemple #2
0
        public async Task <IActionResult> ChangeAvatar([FromBody] ChangeAvaterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var UserName          = User.Identity.Name;// get id from jwt
                BlogUserIdentity user = await _userManager.FindByNameAsync(UserName);

                byte[] ImageBytes = Convert.FromBase64String(model.Picture);

                await _filesService.AddAvatarToUserAsync(user, ImageBytes);

                user.ProfilePic = "/src/profile/" + user.Id.ToString() + "/Avatar.jpg";
                var result = await _userManager.UpdateAsync(user);

                if (result.Succeeded)
                {
                    return(Ok());
                }
                else
                {
                    return(Conflict());
                }
            }
            else
            {
                return(Conflict());
            }
        }
Exemple #3
0
        public async Task <IActionResult> GetBlog()
        {
            var UserName = User.Identity.Name;// get user name from jwt

            BlogUserIdentity user = await _userManager.FindByNameAsync(UserName);

            var UsersBlog = _appContext.Blogs.FirstOrDefault(ob => ob.BlogUserIdentity == user);


            if (UsersBlog != null)
            {
                BlogViewModel responseBlog = new BlogViewModel()
                {
                    BlogName      = UsersBlog.BlogName,
                    DateOfCreated = UsersBlog.DateOfCreated,
                    Description   = UsersBlog.Description
                };

                string JSONresponse = JsonConvert.SerializeObject(responseBlog);
                return(Ok(JSONresponse));
            }
            else
            {
                return(Ok());
            }
        }
Exemple #4
0
        public async Task DeletePostDirectory(BlogUserIdentity user, string PostName, long NumberOfTicks)
        {
            string DeletePath = currentPath + "\\wwwroot\\Src\\Profile\\" + user.Id.ToString() + "\\" + PostName + NumberOfTicks.ToString();
            // path to directory containing all images for post

            await Task.Run(() => Directory.Delete(DeletePath, true));
        }
Exemple #5
0
        public async Task <IActionResult> DeletePost([FromBody] SimpleString id)
        {
            int PostID = Int32.Parse(id.Value);

            BlogUserIdentity user = await _userManager.FindByNameAsync(User.Identity.Name);

            var UsersBlog = await _appContext.Blogs.FirstOrDefaultAsync(ob => ob.BlogUserIdentity == user);


            var postToRemove = _appContext.Posts.FirstOrDefault(ob => ob.PostId == PostID);



            if (postToRemove != null && postToRemove.Blog == UsersBlog)
            {
                _appContext.Posts.Remove(postToRemove);
                await _appContext.SaveChangesAsync();

                await _fileService.DeletePostDirectory(user, postToRemove.Title, postToRemove.DateOfPost);

                return(Ok());
            }
            else// if post was not found or
            {
                return(Conflict());
            }
        }
Exemple #6
0
        /// <summary>
        /// Save Thumbnail for certain post
        /// </summary>
        /// <param name="user"></param>
        /// <param name="PostName"></param>
        /// <param name="Image"></param>
        /// <returns></returns>
        public async Task AddThumbnailToPostAsynch(BlogUserIdentity user, string PostName, SimpleImageObject Image, long NumberOfTicks)
        {
            string Path = currentPath + "\\wwwroot\\Src\\Profile\\" + user.Id.ToString() + "\\" + PostName + NumberOfTicks.ToString(); // path to users folder

            Directory.CreateDirectory(Path);                                                                                           // create needed directories
            Path += "\\" + Image.name;
            await File.WriteAllBytesAsync(Path, DecodeImage(Image));
        }
Exemple #7
0
        public async Task AddAvatarToUser(BlogUserIdentity user, Byte[] ImageBytes)// creates dictionary, updates user image,
        {
            //string currentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);// get current path
            string PersonalPath = currentPath + "\\wwwroot\\Src\\Profile\\" + user.Id.ToString(); // add needed directories + user directory

            Directory.CreateDirectory(PersonalPath);                                              //create all needed directories- if dont exists
            PersonalPath += "\\Avatar.jpg";
            await File.WriteAllBytesAsync(PersonalPath, ImageBytes);
        }
Exemple #8
0
        public async Task <IActionResult> GetNumberOfPosts()
        {
            BlogUserIdentity user = await _userManager.FindByNameAsync(User.Identity.Name);

            var USersBlog = await _appContext.Blogs.FirstOrDefaultAsync(ob => ob.BlogUserIdentity == user);

            int ammount = _appContext.Posts.Where(ob => ob.Blog == USersBlog).Count();// counts number of all posts

            return(Ok(ammount));
        }
Exemple #9
0
        public async Task <IActionResult> Register([FromBody] RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                var NewUser = new BlogUserIdentity()
                {
                    UserName   = model.Login,
                    Email      = model.Email,
                    ProfilePic = "/src/system/defaultpic.png"
                };

                var ValidatePassword = _userManager.PasswordValidators.First().ValidateAsync(_userManager, NewUser, model.Password);

                if (ValidatePassword.Result.Succeeded) // if password is ok- create user
                {
                    if (model.CreateBlog)              // if user wants its own Blog
                    {
                        var NewBlog = new Blog()
                        {
                            BlogName      = model.Blogname,
                            Description   = model.Description,
                            DateOfCreated = DateTime.Now,
                        };

                        NewBlog.BlogUserIdentity = NewUser;
                        _appContext.Add(NewBlog);
                        //_appContext.SaveChanges();
                        // NewBlog = _appContext.Blogs.FirstOrDefault(ob => ob.BlogUserIdentity == NewUser);
                        NewUser.Blog = NewBlog;
                        //_appContext.Add(NewBlog);
                    }

                    await _userManager.CreateAsync(NewUser, model.Password);

                    await _appContext.SaveChangesAsync();



                    return(Ok());
                }
                else
                {
                    return(Conflict());
                }
            }
            else
            {
                return(Conflict());
            }
        }
Exemple #10
0
        public async Task AddImagesToPostAsynch(BlogUserIdentity user, string PostName, List <SimpleImageObject> Images, long NumberOfTicks)
        {
            string      TmpPath     = currentPath + "\\wwwroot\\Src\\Profile\\" + user.Id.ToString() + "\\" + PostName + NumberOfTicks.ToString();
            List <Task> ListOfTasks = new List <Task>();

            Directory.CreateDirectory(TmpPath);

            foreach (var item in Images)
            {
                ListOfTasks.Add(SaveImg(TmpPath, item));
            }

            await Task.WhenAll(ListOfTasks);
        }
Exemple #11
0
        public async Task <IActionResult> ChangeDescription(SimpleString NewDescription)
        {
            if (NewDescription.Value.Length <= 1000)
            {
                BlogUserIdentity user = await _userManager.FindByNameAsync(User.Identity.Name);

                Blog UserBlog = user.Blog;

                UserBlog.Description = NewDescription.Value;

                _appContext.Blogs.Update(UserBlog);

                return(Ok());
            }
            else
            {
                return(Conflict());
            }
        }
Exemple #12
0
        /// <summary>
        /// Checks if certain tag exists in base, if so - create Tag element in base and save the base
        /// </summary>
        /// <returns></returns>
        private Task CheckTag(string TagName, BlogUserIdentity creator)
        {
            var result = new List <Tag>();

            result = _appContext.Tags.Where(ob => ob.Name == TagName.ToLower()).ToList <Tag>();
            if (result.Count == 0)// if there is no tag create one and save it in database
            {
                Tag NewTag = new Tag()
                {
                    Name      = TagName.ToLower(),
                    Owner     = creator,
                    PublicTag = true
                };

                _appContext.Add(NewTag);
                _appContext.SaveChanges();
            }
            return(Task.CompletedTask);
        }
Exemple #13
0
        public async Task <IActionResult> UserTags()
        {
            var UserName = User.Identity.Name;// get user name from jwt

            BlogUserIdentity _user = await _userManager.FindByNameAsync(UserName);


            var Tags = _appContext.Tags.Where(ob => ob.Owner == _user);// all tegs which have owner

            List <string> ReturnStringTags = new List <string>();

            foreach (Tag item in Tags)
            {
                ReturnStringTags.Add(item.Name);
            }

            string JsonListResult = JsonConvert.SerializeObject(ReturnStringTags);


            return(Ok(JsonListResult));
        }
Exemple #14
0
        public async Task <IActionResult> GetPartOfPosts([FromBody] RangeNumbers numbers)
        {
            BlogUserIdentity user = await _userManager.FindByNameAsync(User.Identity.Name);

            var UsersBlog = _appContext.Blogs.FirstOrDefault(ob => ob.BlogUserIdentity == user);

            //List<Post> PartOfPosts = _appContext.Posts.Where(ob => ob.Blog == UsersBlog);
            List <Post> PartOfPosts = _appContext.Posts.Where(ob => ob.Blog == UsersBlog)
                                      .Include(img => img.Images)
                                      .Include(pt => pt.PostTags)
                                      .ThenInclude(t => t.Tag)
                                      .ToList();


            if (PartOfPosts != null)
            {
                PartOfPosts.Sort((p, q) => p.DateOfPost.CompareTo(q.DateOfPost) * -1);

                if (PartOfPosts.Count > numbers.end - numbers.start)// if there is more posts than can fit on site
                {
                    if (PartOfPosts.Count > numbers.end)
                    {
                        PartOfPosts = PartOfPosts.GetRange(numbers.start, numbers.end - numbers.start + 1);
                    }
                    else
                    {
                        PartOfPosts = PartOfPosts.GetRange(numbers.start, PartOfPosts.Count - numbers.start);
                    }
                }

                // one need here simplified posts without comments and images

                List <PostViewModel> SimplifiedPosts = new List <PostViewModel>();

                foreach (var item in PartOfPosts)
                {
                    var DateOfPost = new DateTime(item.DateOfPost);

                    PostViewModel NewPostModel = new PostViewModel()
                    {
                        BlogId     = item.Blog.BlogId,
                        BlogName   = item.Blog.BlogName,
                        ContentOne = item.ContentOne,
                        ContentTwo = item.ContentTwo,
                        DateOfPost = DateOfPost,
                        Thumbnail  = item.Thumbnail,
                        Title      = item.Title,
                        PostTags   = new List <string>(),
                        PostId     = item.PostId
                    };

                    foreach (var tag in item.PostTags)
                    {
                        NewPostModel.PostTags.Add(tag.Tag.Name);
                    }

                    SimplifiedPosts.Add(NewPostModel);
                }

                string jsonResult = JsonConvert.SerializeObject(SimplifiedPosts);

                return(Ok(jsonResult));
            }
            else
            {
                return(Ok());
            }
        }
Exemple #15
0
        public async Task <IActionResult> AddPost([FromBody] AddPostModelView model)
        {
            var ValidationContext = new ValidationContext(model.NewPost);


            if (Validator.TryValidateObject(model.NewPost, ValidationContext, null))// zamiast null można dać liste która zostanie zapełniona błędami
            {
                var DateNow           = DateTime.Now;
                BlogUserIdentity user = await _userManager.FindByNameAsync(User.Identity.Name);

                var UserBlog = _appContext.Blogs.FirstOrDefault(ob => ob.BlogUserIdentity == user);

                Post NewPost = new Post()
                {
                    Title      = model.NewPost.Title,
                    Blog       = UserBlog,
                    ContentOne = model.NewPost.ContentOne,
                    ContentTwo = model.NewPost.ContentTwo,
                    Comments   = null,
                    DateOfPost = DateNow.Ticks,
                    Images     = new List <ImgPost>(),
                    PostTags   = new List <PostTag>()
                };

                if (model.Thumbnail.name != "")
                {
                    NewPost.Thumbnail = "/Src/Profile/" + user.Id.ToString() + "/" + model.NewPost.Title + DateNow.Ticks.ToString() + "/" + model.Thumbnail.name;
                    await _fileService.AddThumbnailToPostAsynch(user, model.NewPost.Title, model.Thumbnail, DateNow.Ticks);
                }
                else
                {
                    NewPost.Thumbnail = "/Src/System/noimage.png";
                }


                //_appContext.Add(NewPost);// add new
                //_appContext.SaveChanges();// save changes so post will get id

                //NewPost = _appContext.Posts.FirstOrDefault(post => post.Title == model.NewPost.Title);// get post from database

                await _fileService.AddImagesToPostAsynch(user, model.NewPost.Title, model.Images, DateNow.Ticks);

                List <Task> CreatingTags = new List <Task>();
                foreach (var item in model.NewPost.PostTags)
                {
                    CreatingTags.Add(CheckTag(item, user));
                }
                await Task.WhenAll(CreatingTags);

                // tags was created

                List <Tag> TagLists = new List <Tag>();
                foreach (var item in model.NewPost.PostTags)
                {
                    var tagFromBase = _appContext.Tags.FirstOrDefault(ob => ob.Name == item.ToLower());
                    if (tagFromBase != null)
                    {
                        TagLists.Add(tagFromBase);
                    }
                }
                // get all tags from  database

                List <PostTag> PostTagConnectorList = new List <PostTag>();

                foreach (var item in TagLists)
                {
                    var NewConnector = new PostTag();
                    NewConnector.Post = NewPost;
                    NewConnector.Tag  = item;

                    item.PostTags = new List <PostTag>();


                    NewPost.PostTags.Add(NewConnector);
                    item.PostTags.Add(NewConnector);
                    PostTagConnectorList.Add(NewConnector);
                }
                // objects which connects Tags with posts (many to many connection)


                //Creatng img objects
                List <ImgPost> ImageList = new List <ImgPost>();
                var            path      = "/Src/Profile/" + user.Id + "/" + model.NewPost.Title + "/";// base of all images in post

                foreach (var item in model.Images)
                {
                    var imagepath  = path + item.name;
                    var TmpImgPost = new ImgPost();

                    TmpImgPost.Src  = imagepath;
                    TmpImgPost.Post = NewPost;

                    NewPost.Images.Add(TmpImgPost);
                    ImageList.Add(TmpImgPost);// add to list which will save it to database
                }


                try
                {
                    await _appContext.AddAsync(NewPost);//add post to database

                    await _appContext.AddRangeAsync(PostTagConnectorList);

                    await _appContext.AddRangeAsync(ImageList);
                }
                catch (Exception e) {
                    return(Conflict());
                }

                await _appContext.SaveChangesAsync();

                return(Ok());
            }
            else
            {
                return(Conflict());
            }
        }
Exemple #16
0
 public Task AddAvatarToUserAsync(BlogUserIdentity user, Byte[] ImageBytes)
 {
     return(Task.Run(() => AddAvatarToUser(user, ImageBytes)));
 }