public static record_sessions ActiveSessionByToken(IBAEntities1 context, string token)
 {
     return(context.record_sessions.FirstOrDefault(
                r => r.session_token.ToString() == token &&
                r.logout_time == null &&
                r.session_expiry > DateTime.UtcNow));
 }
Ejemplo n.º 2
0
        private async Task <bool> CheckUserIsLoggedInSession(string userKey, string username)
        {
            var db = new IBAEntities1();

            var record  = db.C_records.FirstOrDefault(r => r.username == username);
            var session = RecordSessionUtilities.ActiveSessionByUserId(db, record.id);

            if (session == null)
            {
                return(false);
            }
            else if (userKey != session.session_token.ToString())
            {
                return(false);
            }
            else
            {
                TimeSpan timeDiff  = session.session_expiry - DateTime.UtcNow;
                var      timeToAdd = RecordSessionUtilities.SlidingSessionExpiryInDays - timeDiff;
                var      newExpiry = session.session_expiry.Add(timeToAdd);
                session.session_expiry = newExpiry;
                db.SaveChanges();
            }

            return(true);
        }
 public static record_sessions ActiveSessionByUserId(IBAEntities1 context, decimal recordId)
 {
     return(context.record_sessions.OrderByDescending(r => r.session_expiry).FirstOrDefault(
                r => r.record_id == recordId &&
                r.logout_time == null &&
                r.session_expiry > DateTime.UtcNow));
 }
Ejemplo n.º 4
0
        private static ExportMessageLog MsgToExportLog(CmsMessage msg, IBAEntities1 ibaDb)
        {
            var result = new ExportMessageLog
            {
                Id              = msg.Id,
                MessageType     = msg.MessageType.ToString(),
                SentDate        = msg.Created.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss"),
                Title           = msg.Title,
                TotalRecipients = msg.TotalRecipients
            };

            foreach (var person in msg.AppUserMessages)
            {
                result.Recipients.Add(new ExportRecipients()
                {
                    Deleted = DateText(person.Deleted), Read = DateText(person.Read), Received = DateText(person.Received), IbaId = person.DeviceOwner.IbaId
                });
                result.RecipientIds.Add(person.DeviceOwner.IbaId);
                // need to read c_record
            }
            var ibausers = ibaDb.C_records.Where(r => result.RecipientIds.Contains(r.id)).Select(x => new { x.id, x.given_name, x.family_name });

            foreach (var person in result.Recipients)
            {
                var found = ibausers.FirstOrDefault(i => i.id == person.IbaId);
                if (found != null)
                {
                    person.GivenName  = found.given_name;
                    person.FamilyName = found.family_name;
                }
            }

            return(result);
        }
Ejemplo n.º 5
0
        public static byte[] ExportLogByDateToByteArray(IbaCmsDbContext cmsDb, IBAEntities1 ibaDb, DateTime?from, DateTime?to)
        {
            var msgs = cmsDb.CmsMessages.Where(m => m.Status > CmsMessageStatus.Outbox).AsQueryable();

            if (from.HasValue)
            {
                msgs = msgs.Where(m => m.Created >= from.Value);
            }
            if (to.HasValue)
            {
                msgs = msgs.Where(m => m.Created <= to.Value);
            }
            using (var memoryStream = new MemoryStream())
            {
                var streamWriter = new StreamWriter(memoryStream);
                var csvWriter    = new CsvWriter(streamWriter);
                foreach (var msg in msgs.ToList())
                {
                    var export = MsgToExportLog(msg, ibaDb);
                    WriteMessage(csvWriter, export);
                }
                streamWriter.Flush();
                memoryStream.Position = 0;
                return(memoryStream.ToArray());
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Is the given device Id and token combination correct?
 /// </summary>
 public static bool CheckUser(string userId, string token)
 {
     using (var db = new IBAEntities1())
     {
         var user = db.C_records.SingleOrDefault(r => r.username == userId);
         return(user?.password == token);
     }
 }
        private static RightsResponseModel ValidateUser(IBAEntities1 db, HttpRequestMessage request, decimal[] usersAllowedToLogin)
        {
            var response = GetUserSession(db, request);

            if (response.HasErrors)
            {
                return(response);
            }

            if (!usersAllowedToLogin.Contains(response.Session.C_records.@class))
            {
                response.SetError(HttpStatusCode.Forbidden, "User is not permitted to access this feature");
            }
            return(response);
        }
Ejemplo n.º 8
0
        public static ConferencResponseModel GetConferenceById(IBAEntities1 db, int id)
        {
            var conference = db.conf_conference.SingleOrDefault(r => r.id == id);

            if (conference != null)
            {
                return(new ConferencResponseModel
                {
                    Start = AppSettings.ConferenceStart,
                    End = AppSettings.ConferenceEnd,
                    Venue = conference.venue,
                    Name = conference.title
                });
            }
            return(new ConferencResponseModel());
        }
Ejemplo n.º 9
0
        public static List <ConferenceRoomViewModel> GetConfRoomsForConference(IBAEntities1 ibaDb, int conferenceId)
        {
            var acceptableTypes = new List <decimal> {
                1, 2, 3, 4, 5, 6, 7, 8
            };
            var funct = ibaDb.conf_function.Single(r => r.id == 29952);

            return(ibaDb.conf_function
                   .Where(r => r.conference_id == conferenceId && acceptableTypes.Contains(r.type_id) && r.status_id == 2 && !string.IsNullOrEmpty(r.location))
                   .Select(cf => cf.location)
                   .Distinct()
                   .Select(l => new ConferenceRoomViewModel
            {
                RoomName = l
            })
                   .ToList());
        }
Ejemplo n.º 10
0
 private static bool CheckUserIsLoggedInSession(string userKey)
 {
     using (var db = new IBAEntities1())
     {
         var session = RecordSessionUtilities.ActiveSessionByToken(db, userKey);
         if (session == null)
         {
             return(false);
         }
         TimeSpan timeDiff  = session.session_expiry - DateTime.UtcNow;
         var      timeToAdd = RecordSessionUtilities.SlidingSessionExpiryInDays - timeDiff;
         var      newExpiry = session.session_expiry.Add(timeToAdd);
         session.session_expiry = newExpiry;
         db.SaveChanges();
     }
     return(true);
 }
        public static RightsResponseModel GetUserSession(IBAEntities1 db, HttpRequestMessage request)
        {
            var result = new RightsResponseModel {
                Session = RecordSessionUtilities.SessionByToken(db, request)
            };

            if (result.Session == null)
            {
                // should never happen after xauth but just incase !
                result.SetError(HttpStatusCode.Forbidden, "you do not have an active Session");
                return(result);
            }
            if (result.Session.C_records.status != 1)
            {
                result.SetError(HttpStatusCode.Forbidden, "User is Disabled");
            }
            return(result);
        }
Ejemplo n.º 12
0
        public static byte[] ExportSingleLogToByteArray(long messageId, IbaCmsDbContext cmsDb, IBAEntities1 ibaDb)
        {
            var msg = cmsDb.CmsMessages.FirstOrDefault(m => m.Id == messageId);

            if (msg == null || msg.Status <= CmsMessageStatus.Outbox)
            {
                return(null);
            }
            var export = MsgToExportLog(msg, ibaDb);

            using (var memoryStream = new MemoryStream())
            {
                var streamWriter = new StreamWriter(memoryStream);
                var csvWriter    = new CsvWriter(streamWriter);
                WriteMessage(csvWriter, export);

                streamWriter.Flush();
                memoryStream.Position = 0;

                return(memoryStream.ToArray());
            }
        }
Ejemplo n.º 13
0
        public static List <ConferenceEventResponseModel> GetEventsForConferenceById(IbaCmsDbContext db, IBAEntities1 ibaDb, int conferenceId, decimal userId, int take = 20, int skip = 0)
        {
            var result          = new List <ConferenceEventResponseModel>();
            var acceptableTypes = new List <decimal> {
                1, 2, 3, 4, 5, 6, 7, 8
            };
            var conferenceFunctions =
                from cf in ibaDb.conf_function
                join ta in ibaDb.conf_function_ticket_allocation.DefaultIfEmpty()
                on new { ConferenceId = cf.conference_id, FunctionId = cf.id, GuestId = false, MemberId = userId }
            equals new { ConferenceId = (decimal)ta.ConferenceID, FunctionId = (decimal)ta.FunctionID, GuestId = ta.GuestID.HasValue, MemberId = (decimal)ta.MemberID }
            into temp
            from e in temp.DefaultIfEmpty()
            where cf.conference_id == conferenceId && acceptableTypes.Contains(cf.type_id) && cf.status_id == 2
            select new { cf.id, cf.function_start, cf.function_end, cf.title, cf.location, cf.description, Attending = e != null };
            var conferenceRooms = db.EventLocations.Where(r => r.ConferenceId == conferenceId).ToList();

            foreach (var eventLocation in conferenceRooms)
            {
                var eventRoom = eventLocation.LocationName;
                var conferenceFunctionsForRoom =
                    conferenceFunctions.Where(cf => cf.location == eventRoom);
                foreach (var conferenceFunction in conferenceFunctionsForRoom)
                {
                    var start = new DateTime(conferenceFunction.function_start.Year, conferenceFunction.function_start.Month, conferenceFunction.function_start.Day, conferenceFunction.function_start.Hour,
                                             conferenceFunction.function_start.Minute, conferenceFunction.function_start.Second, DateTimeKind.Utc);
                    var end = new DateTime(conferenceFunction.function_end.Year, conferenceFunction.function_end.Month, conferenceFunction.function_end.Day, conferenceFunction.function_end.Hour,
                                           conferenceFunction.function_end.Minute, conferenceFunction.function_end.Second, DateTimeKind.Utc);

                    result.Add(new ConferenceEventResponseModel
                    {
                        ConferenceId    = conferenceId,
                        StartTime       = start, // conferenceFunction.function_start,
                        EndTime         = end,   //conferenceFunction.function_end,
                        EventItemId     = (int)conferenceFunction.id,
                        Title           = conferenceFunction.title,
                        TranslatedTitle = eventLocation.TranslatedTitle,
                        RoomName        = conferenceFunction.location,
                        RoomCentreX     = eventLocation.CentreX,
                        RoomCentreY     = eventLocation.CentreY,
                        Lat             = eventLocation.Lat,
                        Long            = eventLocation.Long,
                        Floor           = eventLocation.Floor,
                        SubTitle        = conferenceFunction.description,
                        Attending       = conferenceFunction.Attending,
                        BuildingId      = eventLocation.Building.ScheduleEventBuildingId
                    });
                }
            }
            var existingLocations = conferenceRooms.Select(r => r.LocationName);
            var allLocations      = conferenceFunctions.Select(r => r.location).Where(t => !string.IsNullOrEmpty(t));

            return(result.OrderBy(r => r.StartTime).Skip(skip).Take(take).ToList());
        }
 public static RightsResponseModel ViewContentLibrary(IBAEntities1 db, HttpRequestMessage request)
 {
     return(ValidateUser(db, request, V2ViewContentClasses));
 }
 public static RightsResponseModel V2Login(IBAEntities1 db, HttpRequestMessage request)
 {
     return(ValidateUser(db, request, V2LoginClasses));
 }
        public static P2pMessageSendResponseModel SendMessageToUser(IbaCmsDbContext cmsDb, IBAEntities1 Db, int user1, int user2, string messageToSend, ControllerContext context, string uuid = null)
        {
            var response = new P2pMessageSendResponseModel();

            response.Success = true;
            var thread = cmsDb.UserMessageThreads.SingleOrDefault(r => r.InitialSenderId == user1 && r.InitialRecipientId == user2);

            if (thread == null)
            {
                thread = cmsDb.UserMessageThreads.SingleOrDefault(r => r.InitialRecipientId == user1 && r.InitialSenderId == user2);
            }
            //NOTE: Users can only send messages to another user if they are both visiting the SAME conference.
            //var conferenceOnNow = IBA_Common.Models.conf_conference.ConferenceOnNow(cmsDb);
            //if (conferenceOnNow == null)
            //{
            //    response.Success = false;
            //}


            //var delegateConf = Db.conf_delegate.SingleOrDefault(r => r.conference_id == 673 && r.id == user1); // Sender is at conference
            //if (delegateConf == null)
            //{
            //    response.Success = false;
            //}

            //var delegateConf2 = Db.conf_delegate.SingleOrDefault(r => r.conference_id == 673 && r.id == user2);// Receiver is at conference
            //if (delegateConf2 == null)
            //{
            //    response.Success = false;
            //}

            if (response.Success)
            {
                var sender = Db.C_records.SingleOrDefault(r => r.id == user1);

                if (thread == null)
                {
                    //NOTE: If no thread exists this is the first contact the user has made with the other person. Check recepient device usage if last use > X days send email.
                    //var recipientDevices = cmsDb.Devices.Where(r => r.DeviceOwner.IbaId == user2);
                    //var user = Db.conf_delegate.Where(t => t.conference_id == AppSettings.ConferenceId).FirstOrDefault(r => r.record_id == user2);
                    //if (user != null)
                    //{
                    //    if(AppSettings.ShouldSendEmails)
                    //    {
                    //        if (recipientDevices.Count() == 0)
                    //        {

                    //            EmailHelper.SendEmail(user.conf_email, "IBA Members App Notification", new P2PEmailViewModel() { SenderName = sender.given_name, ProfileImageUrl = sender.ProfileImageName, MessageContents = messageToSend }, context, "~/Views/Messages/P2PMessageEmail.cshtml");
                    //        }
                    //        else
                    //        {
                    //            var lastUsed = recipientDevices.OrderByDescending(r => r.UpdatedOn).First();
                    //            if ((lastUsed.UpdatedOn - DateTime.UtcNow).Days > 10)
                    //            {
                    //                EmailHelper.SendEmail(user.conf_email, "IBA Members App Notification", new P2PEmailViewModel() { SenderName = sender.given_name, ProfileImageUrl = sender.ProfileImageName, MessageContents = messageToSend }, context, "~/Views/Messages/P2PMessageEmail.cshtml");
                    //            }
                    //        }
                    //    }

                    //}

                    thread = new P2PMessageThread()
                    {
                        Messages           = new List <P2PMessage>(),
                        InitialSenderId    = user1,
                        InitialRecipientId = user2,
                    };
                    cmsDb.UserMessageThreads.Add(thread);
                }
                thread.InitialRecipientDeletionDate = null;
                thread.InitialSenderDeletionDate    = null;
                var message = new P2PMessage()
                {
                    Message    = EncryptMessage(messageToSend),
                    SenderName = string.Format("{0} {1}", sender.given_name, sender.family_name),
                    SenderId   = (int)sender.id,
                    SentTime   = DateTime.UtcNow
                };
                thread.Messages.Add(message);
                cmsDb.SaveChanges();
                response.Message = new P2PMessageResponseModel()
                {
                    SentTime      = message.SentTime,
                    SentByMe      = message.SenderId == user1,
                    DeliveredTime = message.DeliveredTime,
                    Message       = messageToSend,
                    MessageId     = message.P2PMessageId,
                    ReadTime      = message.ReadTime,
                    UUID          = uuid //NOTE: Used by the client to tie up sent messages.
                };

                ProcessOneMessage(cmsDb, message);
            }

            return(response);
        }
 public static RightsResponseModel SearchDirectory(IBAEntities1 db, HttpRequestMessage request)
 {
     return(ValidateUser(db, request, V2DirectorySearchClasses));
 }
        public static List <ConnectionResponseModel> GetconnectedUserIds(IbaCmsDbContext cmsDb, IBAEntities1 db, decimal myId)
        {
            List <ConnectionResponseModel> response = new List <ConnectionResponseModel>();


            var ids = cmsDb.UserMessageThreads.Where(r => r.InitialSenderId == (int)myId).Select(t => new Connections()
            {
                UserId = t.InitialRecipientId, P2PMessage = t.Messages.OrderByDescending(r => r.SentTime).FirstOrDefault()
            }).ToList();

            ids.AddRange(cmsDb.UserMessageThreads.Where(r => r.InitialRecipientId == (int)myId).Select(t => new Connections()
            {
                UserId = t.InitialSenderId, P2PMessage = t.Messages.OrderByDescending(r => r.SentTime).FirstOrDefault()
            }).ToList());
            var distinct = ids.Distinct().ToList();

            foreach (var message in distinct)
            {
                if ((message.P2PMessage.Thread.InitialRecipientId == myId && message.P2PMessage.Thread.InitialRecipientDeletionDate == null) ||
                    (message.P2PMessage.Thread.InitialSenderId == myId && message.P2PMessage.Thread.InitialSenderDeletionDate == null))
                {
                    var user       = db.C_records.SingleOrDefault(r => r.id == message.UserId);
                    var connection = new ConnectionResponseModel()
                    {
                        UserId = message.UserId,
                        Name   = user != null?String.Format("{0} {1}", user.given_name, user.family_name) : null,
                                     UserProfileImageUrl = user != null ? user.ProfileImageName : null,
                                     LastMessage         = message.P2PMessage == null ? null : new P2PMessageResponseModel()
                        {
                            DeliveredTime = message.P2PMessage.DeliveredTime,
                            SentByMe      = message.P2PMessage.SenderId == myId,
                            SentTime      = DateTime.SpecifyKind((DateTime)message.P2PMessage.SentTime, DateTimeKind.Utc),
                            Message       = DecryptMessage(message.P2PMessage.Message),
                            MessageId     = message.P2PMessage.P2PMessageId,
                            ReadTime      = message.P2PMessage.ReadTime != null?DateTime.SpecifyKind((DateTime)message.P2PMessage.ReadTime, DateTimeKind.Utc) : message.P2PMessage.ReadTime
                        }
                    };
                    response.Add(connection);
                }
            }
            return(response);
        }
        public static record_sessions SessionByToken(IBAEntities1 context, HttpRequestMessage request)
        {
            var sessionToken = request.Headers.GetValues("UserKey").FirstOrDefault();

            return(SessionByToken(context, sessionToken));
        }
 public static record_sessions SessionByToken(IBAEntities1 context, string token)
 {
     return(context.record_sessions.FirstOrDefault(r => r.session_token.ToString() == token));
 }
Ejemplo n.º 21
0
        //NOTE: Paging not currently supported in app.
        public static ConferenceBuildEventResponseModel GetConferenceWithBuildingEventsById(IbaCmsDbContext db, IBAEntities1 ibaDb, int conferenceId, decimal userId, int take = 20, int skip = 0)
        {
            var conference = ibaDb.conf_conference.SingleOrDefault(r => r.id == conferenceId);

            if (conference != null)
            {
                return(new ConferenceBuildEventResponseModel
                {
                    Start = AppSettings.ConferenceStart,
                    End = AppSettings.ConferenceEnd,
                    Venue = conference.venue,
                    Name = conference.title,
                    Events = GetEventsForConferenceById(db, ibaDb, conferenceId, userId, take, skip),
                    Buildings = GetEventsForConferenceById(db, ibaDb, conferenceId, take, skip)
                });
            }
            return(new ConferenceBuildEventResponseModel());
        }
Ejemplo n.º 22
0
        public static List <ConferenceBuildingResponseModel> GetEventsForConferenceById(IbaCmsDbContext db, IBAEntities1 ibaDb, int conferenceId, int take = 20, int skip = 0)
        {
            var buildings = db.EventBuildings.Where(r => r.ConferenceId == conferenceId).Select(t => new ConferenceBuildingResponseModel()
            {
                BuildingId   = t.ScheduleEventBuildingId,
                BuildingName = t.Name,
                Floors       = db.FloorNames.Where(r => r.Building.ScheduleEventBuildingId == t.ScheduleEventBuildingId).Select(x => new ConferenceBuildingFloorResponseModel()
                {
                    Name       = x.Name,
                    FloorIndex = x.Floor
                }).ToList()
            }).ToList();

            return(buildings);
        }