Exemple #1
0
        public async Task <User> ChangePhoto(IFormFile Photo)
        {
            Account Account = await db
                              .Accounts
                              .SingleOrDefaultAsync(x =>
                                                    x.AccountId == CookiesManager.GetIdByGuid(new Guid(Request.Cookies["AccountId"])));

            if (Account != null)
            {
                if (Photo != null)
                {
                    var path = Path.Combine(
                        Directory.GetCurrentDirectory(), "storage",
                        Account.AccountId.ToString());

                    using (FileStream fs = new FileStream(path, FileMode.Create))
                    {
                        await Photo.CopyToAsync(fs);

                        Account.HasPhoto = true;

                        await db.SaveChangesAsync();
                    }

                    return(new User(Account));
                }

                return(null);
            }

            return(null);
        }
Exemple #2
0
        public async Task <List <Message> > GetDialog(int id, int Page = 0)
        {
            int Id = CookiesManager.GetIdByGuid(new Guid(Request.Cookies["AccountId"]));

            List <Message> Messages = await db
                                      .Messages
                                      .Where(x => (x.GetterId == id && x.SenderId == Id)
                                             ||
                                             (x.GetterId == Id && x.SenderId == id))
                                      .ToListAsync();

            Messages.ForEach(Message =>
            {
                if (string.IsNullOrEmpty(Message.ReadTime) && Message.GetterId == Id)
                {
                    Message.ReadTime = DateTime.Now.ToString();
                }
            });

            Messages.Reverse();

            Messages = Messages
                       .Skip(MessagesCount * Page)
                       .Take(MessagesCount)
                       .ToList();

            await db.SaveChangesAsync();

            return(Messages);
        }
        public async Task <int> GetUnreadedMessagesCountFromUser(int id)
        {
            int Id = CookiesManager.GetIdByGuid(new Guid(Request.Cookies["AccountId"]));

            return(await db
                   .Messages
                   .Where(x => x.SenderId == id && x.GetterId == Id && string.IsNullOrEmpty(x.ReadTime))
                   .CountAsync());
        }
Exemple #4
0
        private static async Task WebSocketConfiguration(HttpContext context, Func <Task> next, List <CustomWebSocketClient> WebSocketClients)
        {
            if (context.Request.Path == "/ws")
            {
                if (context.WebSockets.IsWebSocketRequest)
                {
                    WebSocket WebSocket = await context.WebSockets.AcceptWebSocketAsync();

                    WebSocketClients.Add(new CustomWebSocketClient()
                    {
                        WebSocket = WebSocket, AccountId = CookiesManager.GetIdByGuid(new Guid(context.Request.Cookies["AccountId"]))
                    });

                    var buffer = new byte[1024 * 4];
                    WebSocketReceiveResult result = await WebSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);

                    while (WebSocket.State == WebSocketState.Open)
                    {
                        Dictionary <String, object> JsonMessage = JsonConvert.DeserializeObject <Dictionary <String, Object> >(Encoding.UTF8.GetString(buffer));

                        Message Message = new Message()
                        {
                            Text = JsonMessage["text"].ToString(),

                            SendTime = DateTime.Now.ToString(),
                            SenderId = CookiesManager.GetIdByGuid(new Guid(context.Request.Cookies["AccountId"])),
                            GetterId = Int32.Parse(JsonMessage["getterId"].ToString())
                        };

                        WebSocketClients
                        .Where(x => x.AccountId == Message.GetterId)
                        .ToList()
                        .ForEach(x => { x
                                        .WebSocket
                                        .SendAsync(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(Message)), result.MessageType, result.EndOfMessage, CancellationToken.None); });

                        //await WebSocketClients[JsonMessage["getterId"].ToString()].SendAsync(new ArraySegment<byte>(buffer, 0, result.Count), result.MessageType, result.EndOfMessage, CancellationToken.None);

                        result = await WebSocket.ReceiveAsync(new ArraySegment <byte>(buffer), CancellationToken.None);
                    }
                    WebSocketClients.Remove(WebSocketClients.Single(x => x.WebSocket == WebSocket));
                    await WebSocket.CloseAsync(result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None);
                }
                else
                {
                    context.Response.StatusCode = 400;
                }
            }
            else
            {
                await next();
            }
        }
Exemple #5
0
        public async Task <Account> GetAccount(int?id)
        {
            if (id == null || id == 0)
            {
                id = CookiesManager.GetIdByGuid(new Guid(Request.Cookies["AccountId"]));
            }

            Account Account = await db.Accounts.SingleOrDefaultAsync(x => x.AccountId == id.Value);

            Account.Password = string.Empty;

            return(Account);
        }
Exemple #6
0
        public IActionResult GetPhoto(string Id)
        {
            if (string.IsNullOrEmpty(Id))
            {
                Id = CookiesManager.GetIdByGuid(new Guid(Request.Cookies["AccountId"])).ToString();
            }

            var path = Path.Combine(
                Directory.GetCurrentDirectory(), "storage",
                Id);

            return(PhysicalFile(path, "image/png", "photo.png"));
        }
Exemple #7
0
        public async Task <Post> SendPost([FromBody] Post Post)
        {
            Post NewPost = new Post();

            NewPost.Content = Post.Content;

            NewPost.CreatedTime = DateTime.Now.ToString();

            NewPost.OwnerId = CookiesManager.GetIdByGuid(new Guid(Request.Cookies["AccountId"]));

            await db.Posts.AddAsync(NewPost);

            await db.SaveChangesAsync();

            return(NewPost);
        }
Exemple #8
0
        public async Task <string> DeletePost(int Id)
        {
            Post Post = await db
                        .Posts
                        .SingleOrDefaultAsync(x => x.PostId == Id);

            if (Post.OwnerId == CookiesManager.GetIdByGuid(new Guid(Request.Cookies["AccountId"])))
            {
                db.Posts.Remove(Post);

                await db.SaveChangesAsync();

                return("Ok");
            }

            return("Fail");
        }
Exemple #9
0
        public async Task <Message> SendMessage([FromBody] MessageView MessageView)
        {
            int Id = CookiesManager.GetIdByGuid(new Guid(Request.Cookies["AccountId"]));

            Message Message = new Message();

            Message.Text     = MessageView.Text;
            Message.SendTime = DateTime.Now.ToString();

            Message.SenderId = Id;
            Message.GetterId = MessageView.GetterId;

            await db.Messages.AddAsync(Message);

            db.SaveChanges();

            return(Message);
        }
Exemple #10
0
        public async Task <List <Post> > GetPosts(int?id, int Page = 0)
        {
            if (id == 0 || id == null)
            {
                id = CookiesManager.GetIdByGuid(new Guid(Request.Cookies["AccountId"]));
            }

            List <Post> Posts = await db
                                .Posts
                                .Where(x => x.OwnerId == id)
                                .ToListAsync();

            Posts.Reverse();

            Posts = Posts.Skip(PostsCount * Page).Take(PostsCount).ToList();

            return(Posts);
        }
Exemple #11
0
        public async Task <Account> UpdateAccount([FromBody] Account account)
        {
            account.Password = GenerateSHA512String(account.Password);

            Account Account = await db
                              .Accounts
                              .SingleOrDefaultAsync(x =>
                                                    x.AccountId == CookiesManager.GetIdByGuid(new Guid(Request.Cookies["AccountId"])));

            if (Account != null)
            {
                Account.Password  = account.Password;
                Account.Name      = account.Name;
                Account.Surname   = account.Surname;
                Account.Email     = account.Email;
                Account.CountryId = account.CountryId;

                await db.SaveChangesAsync();

                return(Account);
            }

            return(null);
        }