示例#1
0
        public void SendPrivateMessage(string userId, string message)
        {
            using (UWCContext db = new UWCContext())
            {
                User senderUser = db
                                  .Users
                                  .Where(u => u.Name == HttpContext.Current.User.Identity.Name)
                                  .FirstOrDefault();

                User recieverUser = db
                                    .Users
                                    .Where(u => u.Id.ToString() == userId)
                                    .FirstOrDefault();

                PrivateRoom privateRoom = db
                                          .PrivateRooms
                                          .Where(pr => pr.UserIds.Contains(senderUser.Id) && pr.UserIds.Contains(Guid.Parse(userId)))
                                          .FirstOrDefault();

                if (privateRoom == null)
                {
                    privateRoom = ChatHub.CreatePrivateRoom(senderUser.Id, recieverUser.Id);
                    db.PrivateRooms.Add(privateRoom);
                }

                string encodedMessage = AesEncoder.EncryptToBytes(message, Encoding.Default.GetBytes(privateRoom.Key), Encoding.Default.GetBytes(privateRoom.IV)).ToString();
                privateRoom.MessagesListing.Add(new MessageInfo()
                {
                    Id           = Guid.NewGuid(),
                    FromUserId   = senderUser.Id,
                    FromUserName = senderUser.Name,
                    ToUserId     = recieverUser.Id,
                    ToUserName   = recieverUser.Name,
                    Message      = encodedMessage,
                    Time         = DateTime.UtcNow
                });
                db.Entry(privateRoom).State = System.Data.Entity.EntityState.Modified;
                db.SaveChanges();

                Groups.Add(senderUser.Id.ToString(), privateRoom.Id.ToString());
                Groups.Add(recieverUser.Id.ToString(), privateRoom.Id.ToString());
                Clients.Group(privateRoom.Id.ToString(), senderUser.Id.ToString()).send(message);
            }
        }
示例#2
0
        public ActionResult SetAdminRecord(SetAdminRecordModel model)
        {
            if (ModelState.IsValid)
            {
                using (UWCContext db = new UWCContext())
                {
                    string roleName = model.RoleName == "Преподаватель"
                                    ? UserRoles.TEACHER_ROLE_NAME
                                    : UserRoles.STUDENT_ROLE_NAME;

                    AdminRecord record = db.AdminRecords.FirstOrDefault(r => r.RoleName == roleName);
                    Guid        salt   = Guid.NewGuid();
                    if (record != null)
                    {
                        record.Salt            = salt;
                        record.Password        = Rfc2898Encoder.Encode(model.AccessPassword, salt.ToString());
                        db.Entry(record).State = EntityState.Modified;
                        db.SaveChanges();
                    }
                    else
                    {
                        AdminRecord newRecord = new AdminRecord()
                        {
                            Salt     = salt,
                            RoleName = roleName,
                            Password = Rfc2898Encoder.Encode(model.AccessPassword, salt.ToString())
                        };


                        db.AdminRecords.Add(newRecord);
                        db.SaveChanges();
                    }
                    return(RedirectToAction("AdminRecordAddedMessage", "Administration"));
                }
            }
            ViewBag.AllowedRoles = new SelectList(new string[] { "Преподаватель", "Студент" });
            return(View(model));
        }